ããã¯ãYandex NextHop2020ã§é ä¿¡ãããã¹ããŒãã®è»¢åã§ã-ããŒãžã®æåŸã«ãããããª
ããã«ã¡ã¯ãç§ã®ååã¯AlexanderZubkovã§ããLinuxSwitchdevã«ã€ããŠã話ãããããšæããŸããããã¯äœã§ãããQratorLabsã§åœŒãšã©ã®ããã«æ®ãããŠãããã§ãã
Mellanoxã¹ã€ããã§Switchdevã䜿çšããŠããçŽ2ã3幎ã«ãªããŸãã Mellanox SpectrumããŒã¹ã®ã¹ã€ããã¯ããã¯ã€ãããã¯ã¹ããšããŠåé¡ãããŸããã€ãŸãããããã®ã¹ã€ããã«ããŸããŸãªãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãé 眮ã§ããŸããéåžžããã³ããŒã¯ãã®ããã®SDKãæäŸãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯ã¹ã€ãããšå¯Ÿè©±ããããã«ãã®SDKã䜿çšããŸãããŸããMellanoxã¹ã€ããã®å ŽåãMellanoxèªäœã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ããããCumulusããããŸãã SAIïŒSwitch Abstraction InterfaceïŒããµããŒããããŠããŸããããã¯ãããŸããŸãªã¹ã€ããçšã®æšæºSDKãäœæãã詊ã¿ã§ãããSONiCãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§ãã§ã«äœ¿çšãããŠããŸãããããŠãã¡ãããSwitchdevã¯Mellanoxã¹ã€ããã§ãµããŒããããŠããŸãã
Switchdevã¯ãLinuxã«ãŒãã«ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã§ãããã«ãŒãã«èªäœã®éåžžã®ãããã¯ãŒã¯èšå®ãããŒã¿ãã€ã³ãã¹ã€ããã®ããŒããŠã§ã¢ã«ãããã³ã°ããããšãã§ããŸããããã¯ãªãããŒããšåŒã°ããŸããåçã¯ããã³ã¯ãã¹ã€ãããã©ã€ããŒã§ãéããŠãŒã¶ãŒã¹ããŒã¹ãæ§æããããã®APIãšãŠãŒãã£ãªãã£ã§ããããšã瀺ããŠããŸããããã§ã®Switchdevã¯ã仲ä»åœ¹ãšããŠæ©èœããŸãããŠãŒã¶ãŒã¹ããŒã¹ã®å Žåã¯ã¹ã€ããã¢ãã«ã衚ãããã©ã€ããŒã®å Žåã¯ãã®è¡šç€ºãæŽçããããã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãæäŸããŸãã
Mellanoxã¹ã€ããã§ã¯ãããªãæšæºçãªäžé£ã®æ©èœã䜿çšããŠããŸããã«ãŒãã£ã³ã°ãECMPãäžè¬çã«ã¯ãç°åžžãªããšã¯äœããããŸãããããã¯ãã¹ãŠãããŒã¿ã©ã€ã³ãžã®ãªãããŒãã®å¯èœæ§ã§ãµããŒããããŠããŸããæ¬ èœããŠããã®ã¯ããªã·ãŒããŒã¹ã®ã«ãŒãã£ã³ã°ã ãã§ããMellanoxãã©ã€ããŒã¯ãµããŒããããŠããŸããã
Mellanoxãã©ã€ããŒã¯ãSwitchdevããµããŒãããããã©Linuxã«ãŒãã«ã«åžžé§ããŸãããããã远å ã®ãã€ããªãã©ã€ããŒã¯å¿ èŠãããŸãããå®éã«ã¯ããæ°ã«å ¥ãã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ããã«ãŒãã«ãååŸããããããã©ã«ãŒãã«ãèªåã§ã³ã³ãã€ã«ããŠäœ¿çšããããšãã§ããŸããã¹ã€ããã®ãã¡ãŒã ãŠã§ã¢ã¯ããã©ã€ããŒèªäœã«ãã£ãп޿°ãããŸãã察å¿ãããã¡ã€ã«ã远å ããã ãã§ãããã®ãã¡ã€ã«ã¯éåžžãlinux-firmwareããã±ãŒãžãªã©ã«å«ãŸããŠããŸãã
ãã¡ãããã¹ã€ããèªäœãæ§æããããã«ãæšæºã®LinuxãŠãŒãã£ãªãã£ã倧éã«äœ¿çšãããŸãã QoSçšã®iproute2ãethtoolãLLDPããŒã¢ã³ã®ã»ããã䜿çšãããŸãããããŠããã€ãã®ãªãã·ã§ã³ã®ããã®sysctlã
Linuxã®vrfã«ã¯ãäž¡æ¹ã®ãããã¯ãŒã¯ååããããŸãããã ããããããvrfãµãã·ã¹ãã ããããŸããããã¯ãããã¯ãŒã¯ã®ååä»ããšã¯ç°ãªããŸãããã®å Žåãvrfã䜿çšããå Žåããã¹ãŠã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯åãåååã«ãããŸãããŸããã«ãŒãã£ã³ã°ãå¶åŸ¡ããããã«ãipã«ãŒã«ã«ç¹å¥ãªã«ãŒã«ããããŸããããã¯ããã±ãããå±ããvrfãæ±ºå®ããããã«åŸã£ãŠãç¹å®ã®ã«ãŒãã£ã³ã°ããŒãã«ã«ãã±ãããéä¿¡ããŸãããããæ§æããããã«ïŒLinuxã§ã¯vrfïŒãvrfã¿ã€ãã®ç¹å¥ãªã€ã³ã¿ãŒãã§ãŒã¹ãäœæãããäœææã«ãã®ããŒãã«ãããã«ãã€ã³ããããŸããããã«ãvrfã«ã€ã³ã¿ãŒãã§ã€ã¹ã远å ããå Žåã¯ãip linkã³ãã³ãã䜿çšããŠããã®ç¹å¥ãªããã€ã¹ãã€ã³ã¿ãŒãã§ã€ã¹ã®ãã¹ã¿ãŒã€ã³ã¿ãŒãã§ã€ã¹ãšããŠèšå®ããŸãããŸãããããã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯ãã¹ãŠåãåååã«ãããããå¥ã®vrfããã«ãŒããžã®ã€ã³ã¿ãŒãã§ã€ã¹ãæç€ºçã«æå®ããŠãã€ã³ã¿ãŒãã§ã€ã¹éã«ã«ãŒããäœæã§ããŸãã
ããšãã°ãããªã·ãŒããŒã¹ã®ã«ãŒãã£ã³ã°ã圹ç«ã€ã¿ã¹ã¯ããããŸããã¢ãããªã³ã¯ãããã©ãã£ãã¯ãåä¿¡ãããããå®å šã«ç¡æ¡ä»¶ã«äžéšã®ãã£ã«ã¿ãªã³ã°ããŒãã«è»¢éããããšããŸãã CiscoãŸãã¯Aristaã§ã¯ãããªã·ãŒã«ãŒãããããŸãã¯ããã€ãã®ãµãŒãã¹ããªã·ãŒãäœæããŸããLinuxããã³ipã«ãŒã«ã§ã¯ãããå®è¡ã§ããŸãããLinuxã§ã¯ãæ®å¿µãªãããããããã¹ãŠããªãããŒããããŸããã
ãããŠãç§ãã¡ã¯æ¯ãè¿ããªããã°ãªããŸãããããšãã°ããã®ãããªæ©èœãäœæããŸãããvrfã2ã€ã®éšåã«åå²ããŸãããã€ãŸãã1ã€ã®éšåã§ãå€åŽã®éšåã«ã¢ãããªã³ã¯ãšã®ã€ã³ã¿ãŒãã§ã€ã¹ããããå åŽã®éšåã«ãã£ã«ã¿ãªã³ã°ããŒããšã®ã€ã³ã¿ãŒãã§ã€ã¹ããããŸãã
ãããŠãããã¯ã«ãŒãã£ã³ã°ãã©ã®ããã«èŠãããã§ããå éšvrfã«ã¯ãå€ããå°ãªããæšæºçãªã«ãŒãã®ã»ããããããŸããã€ãŸããå éšã«ãŒããšãããã«ã¢ãããªã³ã¯ãéãããã©ã«ãã«ãŒãããããŸãããŸãããã§ã«å€éšã€ã³ã¿ãŒãã§ã€ã¹ã«ã¯ããã©ã«ãã®ã«ãŒããããããŸããããããã¯ãã£ã«ã¿ãªã³ã°ããŒããçµç±ããŸãããããã£ãŠãã€ã³ã¿ãŒãã§ã€ã¹ã®ç䌌ããªã·ãŒããŒã¹ã«ãŒãã£ã³ã°ãååŸããŸãããã¢ãããªã³ã¯ã€ã³ã¿ãŒãã§ã€ã¹ãçµç±ãããã¹ãŠã®ãã©ãã£ãã¯ã¯ãå¥ã®ã«ãŒãã«æ²¿ã£ãŠã«ãŒãã£ã³ã°ãããŸãã
ãŸããäžè¬ã«ãSwitchdevã§ã¹ã€ãããæ§æããå Žåãéåžžãæåã«ããŒããæ§æããæ¬¡ã«ãã³ããæ§æããæ¬¡ã«ããªããžã«æ¥ç¶ããæ¬¡ã«vlanãvrfsãæ§æããã¢ãã¬ã¹ãšã«ãŒãã®æåŸã«æ¥ç¶ããå¿ èŠããããŸããããã¯äž»ã«ãLinuxã®ã€ã³ã¿ãŒãã§ã€ã¹ã®æ§é ãã®ãã®ã«ãã£ãŠæ±ºãŸããŸãããã¹ãŠãã©ã®ããã«æ§æããããä»ã«ãããã€ãã®å¶éããããèšå®ãä»»æã«å€æŽããããšã¯ã§ããŸãããã€ãŸããããã¯ããªãéå±ãªäœæ¥ã§ãããåœç€Ÿã§ã¯åœåãããããã¹ãŠãèšå®ããå€§èŠæš¡ãªinitã¹ã¯ãªããã«ãã£ãŠå®è¡ãããŠããŸããããã ãããã¡ãããæ¬çªç°å¢ã§ã¯ãå®è¡æã«å€æŽãå ããå¿ èŠãããå ŽåããããŸãã
ãã®æ§é ãã»ãšãã©æäœæ¥ã§æŽçããå¿ èŠããããããå Žåã«ãã£ãŠã¯èŠçã«ãªããŸããäžéšã®ã€ã³ã¿ãŒãã§ã€ã¹ãåè§£ããŠåçµã¿ç«ãŠããå¿ èŠããããŸãããã¡ãããããã«ã¯ãã¹ãŠãšã©ãŒã䌎ããŸãã Ciscoã§äœæ¥ãããšãã¯ãèšå®ã倿Žãããšãã·ã§ã«ããã¹ãŠãåŠçãããã®åŸãããçš®ã®äœã¬ãã«ã®äœæ¥ãå®è¡ãããŸãã
ããŠãPerlã䜿çšããŠãããšããäºå®ã«æè¬ããŸãããã®ãããªæ§æãåãããããã¯ãŒã¯ããã®ä»ãã¹ãŠãæ§æããããã®ã³ãã³ãã»ãããçæããã¹ã¯ãªããmlxrtrãäœæããŸããããŸãã倿ŽããµããŒãããŠããŸãã倿Žãå ãããšãLinuxã§çŸåšã®æ§æãèªã¿åãããç®çã®ç¶æ ã«ããããã«äœãè¡ãå¿ èŠãããããããããŸãã
æåã«ããã®æ§æãå®è¡ãããšããã®ãããªäžé£ã®ã³ãã³ããçæãããŸãããç§ãåãã³ãã³ããç Žæ£ããŸããã
ããªãã®æ°ã®ã³ãã³ãããããŸãããäžè¬ã«ãinit-scriptã«ããå Žåã¯ãå€ããå°ãªãããµããŒããããå¯èœæ§ããããŸãã
ããšãã°ãããããŒããå¥ã®ãã³ãã«åãæ¿ããå¿ èŠãããå Žåã¯ããã®ããŒããå€ããã³ãããåæããæ°ãããã³ããããªããžããåæããŠãããããŒãããã®ãã³ãã«æ¥ç¶ããŠããããã³ããããªããžã«æ»ãããã®äžã®vlanãåæ§æããå¿ èŠããããŸããäžè¬çã«ãããªãéå±ãªä»äºã§ããããã¡ããããªãã®æã§ãããããã®ã¯äžå¿«ã§ããã¹ã¯ãªããã¯ããããã¹ãŠåç¬ã§å®è¡ããŸãã
ããã«ã ACLã¯æ§æå¯èœã§ã... iptablesã䜿çšã§ããŸããããªãããŒããããŸãã-ã³ã³ãããŒã«ãã¬ãŒã³ãã©ãã£ãã¯ã®ãã£ã«ã¿ãªã³ã°ã«ã®ã¿äœ¿çšã§ããŸãããŸããããŒã¿ã©ã€ã³ã§ãã£ã«ã¿ãªã³ã°ããå Žåã¯ãSwitchdevã®å Žåã¯tcãã£ã«ã¿ãŒã䜿çšããå¿ èŠããããŸããããã§ãtcãã£ã«ã¿ã¯ãã«ãŒãã£ã³ã°ããããã©ãã£ãã¯ã ãã§ãªããåãæ¿ãããããã©ãã£ãã¯ããã§ã«ãã£ã«ã¿ãªã³ã°ããŠããããšãèŠããŠãã䟡å€ããããŸãããŸããtcãã£ã«ã¿ãŒã¯ç©çããŒãã«ã®ã¿ãã³ã°ã¢ããã§ãããããvlanã䜿çšããå Žåã¯ãããã§ããè€éãªæ§é ãäœæããå¿ èŠããããŸããããããããã«ã¯è峿·±ãæ©èœããããŸããããšãã°ããã®ãããªãããã¯ãè€æ°ã®ã€ã³ã¿ãŒãã§ã€ã¹ã«ã¶ãäžããããšãã§ãããããã¯ïŒå ±æã®æå³ã§ïŒå ±éã®ãã£ã«ã¿ãŒãæ©èœãããŸãã tcã«ãŒã«ã«ã¯gotoæŒç®åããããŸãããããããªãã¯ãŒã«ã§ãCiscoãAristaãšã¯ç°ãªããéç·åœ¢ACLãå®è¡ã§ããŸãã
ããã«ã¯ãacl --mlxaclãæ§æããããã®ãŠãŒãã£ãªãã£ããããŸããç§ãã¡ã¯äž»ã«ç¬¬3ã¬ãã«ã®vlanãæäœãããŠãŒãã£ãªãã£ã¯vlanããšã«åå¥ã®ãã§ãŒã³ãäœæããã¡ã€ã³ãã§ãŒã³ã§ã¯åã«vlanãšäžèŽãããã®vlanã®å¯Ÿå¿ãããã§ãŒã³ã«ç§»åããããã«æ©èœããŸãã
ããã«ãããã®ãããªæ§æã®äŸããããŸã-ãã®ãããªã³ãã³ãã¯çµæã§ãã 1ã€ã®ã«ãŒã«ãçŽ1ã€ã®ã³ãã³ãã«ãããããããããã¹ã€ããèªäœã®æ§æã®å Žåãããæ°ãå°ãªããªããŸããããã»ã©é£ããã¯ãããŸããã
ãã ãã倿Žãå ããå¿ èŠãããå ŽåïŒãã®å Žåã¯ã1ã€ã®ã«ãŒã«ãåé€ããŸããããŠãŒãã£ãªãã£ã¯ã倿Žããããã¹ãŠã®ãã§ãŒã³ãæžãæãããã®åŸããŒãïŒã¡ã€ã³ïŒãã§ãŒã³ã§çªå·ãä»ãçŽããŠãæ°ãããã§ãŒã³ãåç §ããããã«ãã¹ãŠãå®è¡ããŸãããããŠããã®å Žåãæäœæ¥ã§ã1ã€ã®ã³ãã³ãã§ããã解決ããããšãå¯èœã§ããããšã¯æããã§ãã
ãã ãããã®ããã«ã¯ãæåã«çŸåšã®ç¶æ ã確èªããå¿ èŠããããŸããããã¯ãtcãã£ã«ã¿ãŒã®åºåãã©ã®ããã«èŠãããã§ãããããæäœããã®ã¯éåžžã«å°é£ã§ãã
ããªããããããã¹ãŠãæ±ããšããéããããã®äººã¯ããªãããã®ããã«èŠãŸãããããã£ãŠããã®ãŠãŒãã£ãªãã£ïŒmlxaclïŒãæåã«äœæããŸãããããã¯ãæäœããã®ãã¯ããã«é¢åã ã£ãããã§ããæ¬¡ã«ãåèªããšã«ãæ®ãã®èšå®ã«ã€ããŠããŠãŒãã£ãªãã£ãäœæããŸããã
ãããã®ãŠãŒãã£ãªãã£ã«ã€ããŠã話ãããŸããããGitlabã«å ¬éããŸããã䜿çšã§ããŸãããããã¯MITã®äžã§ã©ã€ã»ã³ã¹ãããŠãããããèªç±ã«å©çšã§ããŸãã
åœç¶ãä¿èšŒã¯ãããŸãããããã¯ããã€ãã®Perlã¹ã¯ãªããã§ãïŒç§ã¯Perlãç¥ã£ãŠããŠãããã¯æ©èœããã®ã§ãããªãã®è³ªåãäºæ³ããŸãïŒãæ¯èŒçå°ãããã»ãšãã©äŸåé¢ä¿ããããŸãã-ãã¡ãããæšæºã®Perlãã£ã¹ããªãã¥ãŒã·ã§ã³ãšLinuxãŠãŒãã£ãªãã£ã«ããããã€ãã®Perlã¢ãžã¥ãŒã«ã䜿çšããŸãã
æåŸã«ãCOMããŒããåããã·ãªã¢ã«ã³ã³ãœãŒã«ã§å°ãäœæ¥ããããšãããå Žåã¯ãããã€ãã¢ããã€ã¹ãæäŸããããšæããŸããããšãã°ã誰ãããããVimãçµäºããæ¹æ³ã ãšæã£ãå Žåãããªãã¯ã»ãšãã©ãããæšæž¬ããŸããã
äžéšã®ãã€ãªã§ã¯ãã·ãªã¢ã«ããŒããä»ããŠèªèãããããããã¯Ctrl + Alt + Delãšåçã§ããã€ãŸããããšãã°ããŒãããŒããŒããã³ã°ããäœããã®æ¹æ³ã§ã¹ã€ãããåèµ·åããå¿ èŠãããå Žåã¯ãã䜿çšã§ããŸãã
ããã«ãã«ãŒãã«ã«é¢ããŠã¯ãããŒããŒãã§ã®äœæ¥ãèªç¶ã«ååãããããããã§ã¯SysRqã«ãŒãã«ã«ã³ãã³ããåãå ¥ããããæ¹ãããã§ããããããããªããšãã¹ã€ãããåèµ·åããã®ãå°é£ã«ãªããŸãããŸããSysRqã®å ŽåãããŒããŒããšéåžžã®ç«¯æ«ã䜿çšããå Žåã¯ããã§PrintScreenã䜿çšãããCOMããŒããåããã·ãªã¢ã«ã³ã³ãœãŒã«ã®å Žåã¯ãç¹å¥ãªãã¬ãŒã¯ä¿¡å·ãéä¿¡ããå¿ èŠããããŸããããã³ã ã§ã¯Ctrl + Fãç»é¢ã§ã¯ ' e Ctrl + AãCtrl + BãæŒããŠãããç¹å¥ãªSysRqããŒãäœæããŸãã
ãããŠãèµ·åæã«biosã«å ¥ãã«ã¯ããã¡ãããã¹ã€ããã®biosã«å ¥ãã«ã¯ãå®éãéåžžã®ã³ã³ãã¥ãŒã¿ãŒãšåæ§ã«ãéåžžã¯èµ·åããbiosããããããCtrl + BãæŒãããšãã§ããŸãã
ç°¡åã«äŒãããã£ãã®ã¯ããã ãã§ãããäžæãªç¹ãããããŸãããããæ°è»œã«ãåãåãããã ããã
âåºçç©ã®è±èªçã