ð ASICã§ã®ãã§ãã¯ãµã èšç®Â¶
2026/11/14å ¬é 2026/11/14æŽæ°
質åè : Shigeru Morifuku
åçè : Claude Opus 5.5
åçæ¥: 2026/11/14
å 責: åçè 㯠AI ã§ãããééããããšããããŸãã
ð© Q: IPããããUDPãã€ããŒãçã®ãã§ãã¯ãµã ããASICã§èšç®ããŠããã®ç¥æ¥ã«æãã¶
å®ã¯ãã€ã³ã¿ãŒããããã§ãã¯ãµã ã¯ããŒããŠã§ã¢åãã«äœãããŠããé¢ããã£ãŠãASICå±ããããèŠããšãèšç®ãã®ãã®ãã¯æ¥œãªã»ãã§ããç¥æ¥ã«èŠããã®ã¯ãã©ã€ã³ã¬ãŒãã§æµããããŒã¿ã«å¯ŸããŠãã©ã®ã¿ã€ãã³ã°ã§èšç®ãããã®å·¥å€«ã®ã»ãã ãšæããŸãã
èšç®èªäœã軜ãçç±
RFC 1071ã®1ã®è£æ°åã«ã¯ãããŒããŠã§ã¢ã«ãšã£ãŠéœåã®ããæ§è³ªãããã£ãŠããŸãã
çµååã»äº€æåãæãç«ã€ã®ã§ãè¶³ãé çªãèªç±ã«å€ããããŸãã512bitãã¹ãªãã1ã¯ããã¯ã§æ¥ã16bitã¯ãŒã32åãCSAïŒãã£ãªãŒä¿åå ç®åšïŒã®ããªãŒã§äžæ°ã«è¶³ã蟌ããŸãã
æ¡äžããã¯ãšã³ãã¢ã©ãŠã³ããã£ãªãŒïŒæäžäœããã®æ¡äžãããæäžäœã«æ»ãããšïŒã§åŠçã§ããŸããéäžã¯å¹ ã®åºãã¢ãã¥ã ã¬ãŒã¿ã«æºããŠãããæåŸã«ãŸãšããŠæãè¿ãã°ããã®ã§ãã¯ãªãã£ã«ã«ãã¹ãçãæžã¿ãŸãã
ãã€ããªãŒããŒã«äŸåããŸãããããã°ãšã³ãã£ã¢ã³ã®ãŸãŸè¶³ããŠãããã€ãã¹ã¯ããããŠè¶³ããŠããæåŸã«ã¹ã¯ããããã°åãçµæã«ãªããŸãã
CRCã®ãããªå€é åŒé€ç®ãšéã£ãŠãããŒãã«ãLFSRãèŠããŸãããã»ãŒå ç®åšã ãã§ãã
ã«ãŒã¿ãŒã®TTLæžç®ã¯å·®åæŽæ°ã§æžã
IPããããæžãæãããã³ã«ãããå šäœãè¶³ãçŽãå¿ èŠã¯ãããŸãããRFC 1624ã®å·®åæŽæ°ã
HC' = ~(~HC + ~m + m')
ã䜿ãã°ãå€ãã£ã16bitã¯ãŒãïŒTTLãå«ãã¯ãŒãïŒã®åã ãã§çŽããŸããæ°ã²ãŒãã®è©±ãªã®ã§ããã€ãã©ã€ã³ã®1ã¹ããŒãžã«åãŸããŸããã¡ãªã¿ã«IPv6ã§ã¯ãã©ããL4ã§ãã§ãã¯ãããããšãããããã§ãã¯ãµã èªäœããªããªããŸããã
æ¬åœã«ãããããã®ã¯UDP/TCPã®éä¿¡åŽ
ãã§ãã¯ãµã ã®ãã£ãŒã«ãã¯ãããã«ããã®ã«ãèšç®ç¯å²ã¯ãã€ããŒãã®æåŸãŸã§å«ãã§ããŸãããã®ããã
åä¿¡åŽã¯ç°¡åã§ããã¹ããªãŒã ã§æµããªããè¶³ã蟌ã¿ãæåŸã«ãŒããã©ãããèŠãã ãã§ãã
éä¿¡åŽã¯ãããããéãåºãåã«ãã€ããŒããå šéšèŠãŠãããªããšãããŸãããã«ããã¹ã«ãŒã§ã¯éããªãã®ã§ãNICã®TxãªãããŒãã¯DMAã§ãã£ãããã±ããå šäœããªã³ããããããã¡ã«èªã¿èŸŒã¿ãèšç®ããŠãããã£ãŒã«ãã«æžã蟌ãã§éãåºããŸããããäžã€ã®æãšããŠããã©ã€ããpseudo-headeråã®éšååã ããå ¥ããŠããïŒLinuxã®
CHECKSUM_PARTIALãcsum_start/csum_offsetïŒãNICã¯ããã®äœçœ®ãããã®äœçœ®ãŸã§è¶³ããŠãããã«æžãããšããæ±çšçãªåŠçã ããåãæã€ããšããåæ ããããŸãã
UDPã§ãã§ãã¯ãµã 0ããèšç®ããŠããªãããšããæå³ã«äœ¿ããã®ããåœæã®å®è£ ã³ã¹ããžã®é æ ®ã®åæ®ãšãããŸãã
ã€ãŸããã¢ã«ãŽãªãºã ãéžãã æç¹ã§ããŒããŠã§ã¢å®è£ ãããªãæèããŠããŠãæ®ã£ã飿ïŒéä¿¡æã®å èªã¿ïŒã¯ãããã¡ãšãœãããšã®åæ ã§éããŠããããšããã®ã宿 ã§ããNICã®èšèšè ã®å·¥å€«ãå ãã®ã¯ããããTSOïŒå€§ããªãã±ãããåå²ããŠéãæ©èœïŒã§ã»ã°ã¡ã³ãããšã«ãã§ãã¯ãµã ãäœãçŽãããããããããŸããã
ð© Q: ãã±ããã®æå®äœçœ®ã®ãããã1ã ã£ãããããŒã¿ãã·ãããããšãæžãæãããšãã倧å€ãã¶
ãã£ãããéãã§ãå®ã¯ãã¡ãã®ã»ãããã§ãã¯ãµã ãããã£ãšé¢åã§ããå ç®ã¯è¶³ãé çªãæ°ã«ããªããŠããã®ã«ãã·ãããæ¿å ¥ã¯ãã©ãããã©ãã ããããããããã±ããããšã«å€ããããã§ãã
äœãã€ããã
ããšãã°ããããã©ã°ãç«ã£ãŠãããVLANã¿ã°ïŒ4ãã€ãïŒãæ¿å ¥ããããšããåŠçãèããŸãã512bitïŒ64ãã€ãïŒãã¹ã ãšãæ¿å ¥ç¹ããåŸãã®ããŒã¿ã¯ãã¹ãŠ4ãã€ããããŸãããããšã
åããŒãã®æ«å°Ÿ4ãã€ããæ¬¡ã®ããŒãã«ã¯ã¿åºãã®ã§ãåã®ããŒãã®æ®ããæã¡è¶ãã¬ãžã¹ã¿ãèŠããŸãã
åºåã®åãã€ãã¬ãŒã³ã¯ãå ¥åã®ã©ã®ã¬ãŒã³ããåããããéžã¶ãã«ããã¬ã¯ãµã«ãªããŸããããéãä»»æã ãš64å ¥åã®muxããã€ãã¬ãŒã³ã®æ°ã ã䞊ã¶ãã€ãŸããã¬ã«ã·ãã¿ã§ããé¢ç©ãé ç·ã倧ãããã¿ã€ãã³ã°ãå³ãããªããŸãã
ãã±ããã®æåŸã§ãããŒãã1ã€å¢ãããæžã£ããããŸãããã€ãã€ããŒãã«ïŒæå¹ãã€ãã®ãã¹ã¯ïŒããæåŸã®ããŒããã瀺ãä¿¡å·ã®ä»ãçŽããå¿ èŠã§ãã
ããã«ãå¯å€é·ãããïŒIPv4ã®ãªãã·ã§ã³ãIPv6ã®æ¡åŒµããããMPLSã®ã©ãã«ã¹ã¿ãã¯ããã³ãã«ã®å€éã«ãã»ã«åãªã©ïŒããããšã次ã®ããããã©ãããå§ãŸãããåã®ããããèªãŸãªããšæ±ºããããŸããããã®äŸåé¢ä¿ã®é£éããããŒãµã®ã¯ãªãã£ã«ã«ãã¹ã«ãªããŸãã
ã©ããã£ãŠéããŠããã
ããããèšèšãã¿ãŒã³ã¯æ¬¡ã®ãšããã§ãã
ããããšãã€ããŒããåãã: ããŒãµãå é ã®æ°çŸãã€ãã ããèªã¿ããããã®åãã£ãŒã«ããåºå®äœçœ®ã®ã¬ãžã¹ã¿çŸ€ã«å±éããŸããP4/PISAã§ããPHVïŒPacket Header VectorïŒã§ããæžãæãã¯ãã®åºå®é 眮ã®äžã§ããã®ã§ãã·ããã¯èŠããŸããããã€ããŒãã¯ãããã¡ã«çœ®ãããŸãŸè§ŠããŸããã
ãããŒãµã§æåŸã«1åã ãçµã¿ç«ãŠã: ãã©ã®ããããæå¹ããã®ããããèŠãŠãåºåé ã«è©°ãçŽããŸããã·ããã®åŠçã1ãæã«ãŸãšããããã ãæ·±ããã€ãã©ã€ã³åããŠåæã§éããŸãã
ããéãå¶éãã: ä»»æãã€ãã®ãããèš±ããã2ãã€ãã4ãã€ãåäœããããã¯æ°çš®é¡ã®ãã¿ãŒã³ã ãã«çµãã°ãmuxã®å ¥åæ°ãäžæ°ã«æžããŸãããããã³ã«åŽããããé·ã4ãã€ãåäœã§æ±ºããŠããã®ããããã§å¹ããŠããŸãã
ããŒã¹ã®ç¶æ é·ç§»ã¯TCAMã§: ããã®ãã£ãŒã«ãããã®å€ãªã次ã¯ãã®ãããã§ãé·ãã¯ããããšããåå²ããTCAMã®ãããçµæãšç¶æ é·ç§»ã§è¡šããŸãã1段ã§åŠçããããªãåã¯ããã€ãã©ã€ã³ã倿®µã«ãããããã±ãããå ¥å£ã«æ»ããŠååŠçïŒrecirculationïŒãããŸãã
FPGAã§åãããšãæžããšããã¬ã«ã·ãã¿ãšããŒãããŸããæã¡è¶ãåŠçã ãã§ãLUTã®æ¶è²»ãšã¿ã€ãã³ã°éåã«ããªãæ³£ããããŸããTang NanoãColorlightã§ãã64bitå¹ ãããã§ãã±ããããã®ãŸãŸæµããªããVLANã¿ã°ãæ¿å ¥ã»åé€ããåè·¯ãäœã£ãŠã¿ããšããã®å€§å€ãããã宿ã§ãããšæããŸãã
ð© Q: ã«ãŒãã«ã®ãã±ããã®ãã¥ãŒã€ã³ã°å¶åŸ¡ã¯ãããã°ã§ãããããªã¬ãã«ã ãã©ãUDPã®ãã±ããåå²/åæ§ç¯ã¯ASICãããäžå¯èœã§ããããããããããŠãªããã®ç£èŠãããã¶
åå²ãšåæ§ç¯ã§é£ãããããªãéããŸããããã«ããUDPã®äžã§åæ§ç¯ãåéãASICã§ãã£ãŠãããå®äŸããããŸãã
åå²ïŒéä¿¡åŽïŒã¯æ®éã«ããŒããŠã§ã¢ã§ãã£ãŠãã
倧ããªããŒã¿ãåãåã£ãŠMTUããšã«åããããããã³ããŒããé·ãã»IDã»ãªãã»ããã»ãã§ãã¯ãµã ãçŽããŠéãåºãåŠçã¯ãç¶æ ããã®ãã±ãã1ã€ã®äžã§å®çµããŸããååã®è©±ã§ããã°ããããŒãµãããããäœåºŠãåºãçŽãã ãã§ããTSOã¯ãã£ãšåããNICã®å®çªã§ãããUDPã«ãUSOïŒUDPã®ã»ã°ã¡ã³ããŒã·ã§ã³ãªãããŒããå¥ã ã®UDPããŒã¿ã°ã©ã ã«åãïŒããããŸããã¡ãªã¿ã«ãIPãã©ã°ã¡ã³ãã«åãã»ãã®UFOã¯Linuxããã¯å€ãããŸããã
åæ§ç¯ïŒåä¿¡åŽïŒãé£ããã®ã¯æ¬åœ
ãã ãé£ããã®äžèº«ã¯èšç®ã§ã¯ãªãç¶æ 管çã§ãã
é äžåã§å±ãæçãããããŒïŒéä¿¡å ã»å®å ã»IDïŒããšã«ãããã¡ã§åŸ ãããŠããå¿ èŠããããŸãã䞊è¡ããŠçµã¿ç«ãŠäžã®ããŒã¿ã°ã©ã ãããã€ãããã®äžéãèªããŸããã
éãªã£ãæçãäžæ£ãªãªãã»ãããåŠçããã¿ã€ã ã¢ãŠãã§æšãŠãå¿ èŠããããŸãã
æçã倧éã«éãã€ããŠã¡ã¢ãªãé£ãæœ°ãæ»æã«èããªããã°ãªããŸããã
åºå®ãã€ãã©ã€ã³ã¯ããããããã€çµãããåãããªãç¶æ ã倧éã«æ±ãããåŠçãèŠæã§ãããã®ããããã¡ã€ã¢ãŠã©ãŒã«ãããŒããã©ã³ãµã®ASICã§ãããã©ã°ã¡ã³ãã¯é ãçµè·¯ïŒçµã¿èŸŒã¿CPUããããã¯ãŒã¯ããã»ããµã®ã³ã¢ïŒã«åãã®ãå žåã§ãã
ãã ãIPåæ§ç¯ã®ãããããã®ç£èŠãã¯ãå®ã¯ããããããšãããŠããŸãããæçã1ã€ã§ãæ¬ ããããã¿ã€ã ã¢ãŠãã§ããŒã¿ã°ã©ã ããšæšãŠãã ãã§ãïŒLinuxã®ipfrag_timeïŒãåéã¯ããªãã®ã§ãæ¬åœã«éãã®ã¯TCPã®ã»ãã§ãã
ã§ããä¿¡é Œæ§ã®ãã転éãUDPã®äžã§äžžããšASICã§ãã£ãŠããäŸããã
ãããRoCEv2ã§ããäžèº«ã¯UDPïŒå®å ããŒã4791ïŒã§ãããRDMA NICã¯æ¬¡ã®ããšããã¹ãŠããŒããŠã§ã¢ã§ããªããŠããŸãã
ã¡ãã»ãŒãžãMTUåäœã®ãã±ããã«åå²ããPSNïŒãã±ããé åºçªå·ïŒãä»ãã
åä¿¡åŽã§PSNãèŠãŠãçžæã®ã¡ã¢ãªã«çŽæ¥æžã蟌ããé çªã©ããã«å±ãã°ãåæ§ç¯çšã®ãããã¡ããèŠããªã
ACK/NAKãè¿ããæ¬ ããããã°åéããïŒåŸæ¥ã¯Go-back-NïŒ
åéã¿ã€ããŒãšèŒ»èŒ³å¶åŸ¡ïŒDCQCNïŒ
ãåæ§ç¯çšãããã¡ãèŠããªããã®ãããœã§ããåãã±ããã«æžã蟌ã¿å ã®ã¢ãã¬ã¹ããªãã»ãããå ¥ã£ãŠããã®ã§ãå±ããé ã«ãã®ãŸãŸæçµçãªçœ®ãå ŽæãžæžããŸããIPãã©ã°ã¡ã³ããé£ããã®ã¯ãæçã®è¡ãå ãå šéšããããŸã§æ±ºãŸããªãããã§ãRDMAã¯ãããã³ã«ã®èšèšã§ãã®åé¡ãæåããæ¶ããŠããŸãã
ããã«æè¿ã¯ãAWSã®SRDãUltra Ethernetã®ããã«ãé äžåã§ã®å°çãèš±ãããŸãŸéžæçã«åéããæ¹åŒããNIC/DPUã®äžã§å®è£ ãããŠããŸããæ°åãæ°äžã®æ¥ç¶ç¶æ ããªã³ãããã¡ã¢ãªãšãã¹ãã¡ã¢ãªã®ãã£ãã·ã¥ã«æã€æ¹åŒã§ãæ£çŽããã¡ãã®ã»ãããã§ãã¯ãµã ãããã»ã©ç¥æ¥ã ãšæããŸãã
ð© Q: ãããRoCEã¯DMAãªã®ã§ã«ãŒãã«ã«ç¥ãããªãããã«é 匵ã£ãŠãããã ¶
ãç¥ãããªãããã«ããšããããããæåã®æç¶ãã ãã«ãŒãã«ã«ä»»ããããšã¯æšªãçŽ éãããããšããã€ã¡ãŒãžã§ãã
å¶åŸ¡ãã¹ïŒã«ãŒãã«ãéãïŒ
QPïŒQueue Pairãéåä¿¡ãã¥ãŒã®çµïŒãCQïŒå®äºãã¥ãŒïŒã®äœæã¯ã
ib_uverbsçµç±ã§ã«ãŒãã«ãã©ã€ãã«é Œã¿ãŸããã¡ã¢ãªç»é²ïŒ
ibv_reg_mrïŒã§ã¯ãã«ãŒãã«ããŠãŒã¶ãŒã®ããŒãžãåºå®ïŒpinïŒããä»®æ³ã¢ãã¬ã¹ããç©çã¢ãã¬ã¹ãžã®å€æè¡šãNICã«æž¡ããŸããåæã«ãã¢ã¯ã»ã¹æš©ã®éµã§ããlkey/rkeyãçºè¡ãããŸããNICã®ãã¢ãã«çšã¬ãžã¹ã¿ã®ããŒãžãããŠãŒã¶ãŒããã»ã¹ã«mmapããŸãã
ããŒã¿ãã¹ïŒã«ãŒãã«ãéããªãïŒ
ã¢ããªã¯ãmmapããããã¥ãŒã«WQEïŒä»äºã®äŸé ŒæžïŒãçŽæ¥æžãããã¢ãã«ã®ã¬ãžã¹ã¿ã«MMIOã§æžã蟌ãã ãã§ããã·ã¹ãã ã³ãŒã«ã¯çºçããŸããã
NICãèªåã§WQEãèªã¿ã«è¡ããç»é²æžã¿ã®ãããã¡ããDMAã§èªã¿åºããŠéä¿¡ããŸãã
å®äºã¯CQãããŒãªã³ã°ããŠç¢ºèªããŸããå²ã蟌ã¿ãã³ã³ããã¹ãã¹ã€ããããããŸããã
ã€ãŸãå®å šæ§ã¯ãã«ãŒãã«ãæ¯åãã§ãã¯ãã代ããã«ãç»é²æã«NICãžæž¡ããå€æè¡šãšéµãNICèªèº«ãæ¯åæ€æ»ããããšã§ä¿ãããŠããŸããã¢ããªãç»é²ããŠããªãã¢ãã¬ã¹ãæå®ããŠããNICã匟ããŸãã
çžæåŽã¯ãã£ãšåŸ¹åºããŠãã
äžæ¹åã®RDMA WRITE/READã§ã¯ãåä¿¡åŽã¯ã«ãŒãã«ã©ãããã¢ããªã®CPUããé¢äžããŸãããNICãrkeyãæ€æ»ããŠããã®ãŸãŸã¡ã¢ãªã«æžã蟌ãã ãã§ããçžæåŽã®ããã»ã¹ã¯ãããŒã¿ããã€å±ããã®ããåãããªãã®ã§ããæžãçµãã£ããæåŸã«ãã©ã°ãç«ãŠãããšãã£ãçŽæãèªåãã¡ã§æ±ºããŠããå¿ èŠããããŸãã
UDPãªã®ã«ã«ãŒãã«ã®UDPã¹ã¿ãã¯ã¯èŠãŠããªã
RoCEv2ã®ãã±ããã¯å®å
ããŒã4791ã®UDPã§ãããNICãåä¿¡ã®æç¹ã§æ¯ãåããŠãRDMAãšã³ãžã³ã«çŽæ¥åããŸãããã®ãããã«ãŒãã«ã®UDPãœã±ããã®çµ±èšã«ããéåžžã®tcpdumpã«ãåºãŠããŸããïŒMellanoxç³»ãªããã©ã€ãçµç±ã§ã¹ããã¡ã¢ãŒãã«ããã°èŠãããŸãïŒããã®ä»£ããããããã°ã¯ibv_devinfoãrdma statisticãNICã®ããŒããŠã§ã¢ã«ãŠã³ã¿é Œã¿ã«ãªããŸãããããããåéã®ç£èŠãããã®NICã®ã«ãŠã³ã¿ãèŠãããšã«ãªããŸãã