ã¢ã¬ã¯ãµã³ããŒã»ã¯ãªã¶ããã¹ããŒïŒ NatSys Labã ïŒ
![ã¢ã¬ã¯ãµã³ããŒãã»ã¯ãªã¶ããã¹ããŒ](https://habrastorage.org/getpro/habr/post_images/a01/e2d/4c3/a01e2d4c3412329353830e0e325a4228.jpg)
ä»æ¥ãç§ãã¡ã¯ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«èå³ãæã¡ãŸã-ãã®å éšãããã§äœãèµ·ãã£ãŠããã®ã§ãããã...ç§ãã¡ãçŸåšåãçµãã§ããã¢ã€ãã¢ãå ±æããããšæããŸãã
ç§ã®æèŠã§ã¯ãææ°ã®OSã¯æªãããšã§ãã
![](https://habrastorage.org/getpro/habr/post_images/19e/c0e/a72/19ec0ea724d3593758ab57b44dbf39ca.png)
å®éã«ã¯ãåçã¯Netmapãµã€ãã®ã°ã©ãã瀺ããŠããŸãïŒããã¯ããããã¯ãŒã¯ã¢ããã¿ãŒãã±ãããéåžžã«è¿ éã«ãã£ããã£ããŠéä¿¡ã§ããã®ãºã¢ã§ãïŒã ãã®å³ã¯ãæ倧3 GHzã®ç°ãªãã¯ããã¯é床ãæã€åäžã³ã¢ã§ãNetmapã10 Gbps-1ç§ããã1400äžãã±ãããèš±å¯ããããšã瀺ããŠããŸãã ãã§ã«500 MHzã§åäœããŸãã éãç·ã¯pktgenã§ã-äžè¬çã«ãLinuxã«ãŒãã«å ã§æéã§ãã ããã¯ãã®ãããªãã®ã§ã-1ã€ã®ãã±ãããåãåã£ãŠãããã¢ããã¿ãŒã«äœåºŠãéä¿¡ãããã©ãã£ãã¯ãžã§ãã¬ãŒã¿ãŒãã€ãŸã ã³ããŒãæ°ããããã±ãŒãžã®äœæããããŸãããã€ãŸããäžè¬ã«äœããããŸãã-åãããã±ãŒãžãã¢ããã¿ã«éä¿¡ããã ãã§ãã ãããŠä»ã§ã¯ãNetmapïŒãŠãŒã¶ãŒç©ºéã§è¡ãããŠããããšã¯ãã³ã¯è²ã®ç·ã§ç€ºãããŠããŸãïŒã«æ¯ã¹ãŠå€§å¹ ã«äœäžããŠããŸãã ãããã£ãŠãéåžžã«é«éãªãããã¯ãŒã¯ã¢ããªã±ãŒã·ã§ã³ã§äœæ¥ãã人ã ã¯ãNetmapãPdpdkãPF_RINGã«ç§»è¡ããŸãããã®ãããªæè¡ã¯çŸåšãããããããŸãã
2çªç®ã®ãã€ã³ãã¯ãããŒã¿ããŒã¹ã«é¢ãããã®ã§ãã ããã¯ãããã¯ãŒã¯ã«é¢ãããã®ã§ãããçŸåšã¯ããŒã¿ããŒã¹ã«é¢ãããã®ã§ãã 誰ããããŒã¿ããŒã¹ã調ã¹ãå ŽåãMMAPã䜿çšã§ããããšãããããO_DIRECTã䜿çšã§ããããšãããããŸãã 倧èŠæš¡ãªããŒã¿ããŒã¹ïŒPostgresãMySQLãInnoDBïŒã§ã¯ãäž»ã«O_DIRECTã䜿çšããŸããã2007幎ã«ã¯LKMLã§è°è«ããããO_DIRECTã¯ããŒãã£ã³ã¬ã¯ã·ã§ã³ã§ãããšèšãããŸããããããã¯èª€ãã§ãã ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ã³ãŒãã匷åãªããŒã¿ããŒã¹ã®ã³ãŒããèŠããšãããŒã¿ããŒã¹ãããèªäœã®ããã«å€§ããªã¡ã¢ãªé åãååŸãã管çããŠããããšãããããŸãã 圌女èªèº«ãããŒãžã®ããŒã«ãä¿æããããŒãžãæäœããããŒãžãæŒãåºããç Žæ£ããŸãã ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãä»®æ³ã¡ã¢ãªã¬ãã«ããã¡ã€ã«ã·ã¹ãã ã¬ãã«ãªã©ã§è¡ããã¹ãŠ
Linuxã¯ãmadviseã䜿çšããŠäœæ¥ããããã«èšã£ãã Pyotr Zaitsevãå°ããŸããïŒãããããO_DIRECTãªãã§ã¯ã©ããã£ãŠçããã®ãïŒã ãã€ã©ã®ããŒãžã«ãªã»ããããããç¥ãå¿ èŠãããããã§ããã çãã¯ãããŸããã§ãããç§ãã¡ã¯åãããã«çãç¶ããŠããŸãã
次ã®ãã€ã³ãã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããã°ã©ãã³ã°æ¹æ³ã§ãã ãã«ãã¹ã¬ãããããã¯ãŒã¯ããŒã¢ã³ãäœæããå Žåãéåžžã次ã®è³ªåããããŸãã ããã»ã¹ãã€ãã³ããã¹ã¬ãããããã§èµ·åã§ããã¹ã¬ããã®æ°ãåã¹ã¬ãããå€æ°ã®ã€ãã³ããç¶æ ãã·ã³ãã¹ã¬ãããåŠçã§ããããã«ãã·ã³ç¶æ ãäœæããæ¹æ³ããŸãã¯Erlangã®ããã«ã³ã«ãŒãã³ã䜿çšããæ¹æ³ã¯ãããŸããïŒããªã© ããã¯ããªãè€éãªè³ªåã§ãã
ããªãã€ãã³ããæªãã¢ã€ãã¢ãªã®ããïŒRob von BehrenïŒãšãSEDAïŒæ¡ä»¶ã®æŽã£ãã¹ã±ãŒã©ãã«ãªã€ã³ã¿ãŒããããµãŒãã¹ã®ã¢ãŒããã¯ãã£ãïŒMatt WelshïŒãšããçŽ æŽãããèšäºããããŸããããããã¯å®å šã«ççŸããŠããŸãã ã¹ã¬ããäžã§ãã¹ãŠãè¡ãå¿ èŠããããææ°ã®OSã¯ã¹ã¬ããã§éåžžã«ããŸãæ©èœããå¿ èŠãªæ°ã®ã¹ã¬ãããæäŸããããããé©åã«åæãããšãã¹ãŠãããŸãæ©èœãããšèšã人ãããŸãã SEDAã¯ãç¹å®ã®æ°ã®ã¹ã¬ãããèµ·åããç¹å®ã®ã¿ã¹ã¯éã§ããããååæ£ãããããéãã¢ãŒããã¯ãã£ã«ã€ããŠè©±ããŸããã¹ã¬ãããšãããã®ã¹ã¬ããã®ã¿ã¹ã¯ãã¹ã±ãžã¥ãŒãªã³ã°ããããã®ããªãè€éãªã¡ã«ããºã ããããŸãã
äžè¬çã«ã¯ãhemoã®åé¡ã«å¯ŸåŠããå¿ èŠããããå®éã«ã¯ãBoost.Asioãªã©ã®äœããã®ã¹ããªãŒãã³ã°ãã¬ãŒã ã¯ãŒã¯ã䜿çšããããèªåã§æäœæ¥ã§è¡ããäœãå¿ èŠããèããå¿ èŠããããŸãã ããã©ãŒãã³ã¹ãå¿ èŠã§ããããã«ã€ããŠèããå¿ èŠããããŸãã
ç§ãã¡ã¯ãå€ãã®ã¡ã¢ãªã¢ãã±ãŒã¿ãŒãååšããäžçã«äœãã§ããŸãã ç°¡åãªãã®ãæžãå Žåã¯ãmallocãŸãã¯C ++ã®newã䜿çšããçŸåšã®ç¶æ ãšäœãèµ·ãããã«ã€ããŠã¯èããŸããã é«è² è·ã«éãããšããã«ãjemallocãhoardãããã³ãã®ä»ã®æ¢è£œã®ã©ã€ãã©ãªããã©ãã°ãå§ããããã¡ã¢ãªã¢ãã±ãŒã¿ïŒSLABãããŒã«ãªã©ïŒãäœæããŸãã ãµãŒããŒãäœæããå Žåã¯ãæåã«åçŽãªããã°ã©ã ããå§ããŠããããŠãŒã¶ãŒç©ºéã§ã®OSã®åå®è£ ã«é²ã¿ãŸãã
![](https://habrastorage.org/getpro/habr/post_images/bdc/f66/184/bdcf661843b14ea322a83067735c5f92.png)
è¿ éãªå ¥åºåã®ããã®ãããã¡ããŒã«ãäœæããç¬èªã®ã¹ããªãŒã ãäœããã®ã¹ã±ãžã¥ãŒãªã³ã°ãåæã¡ã«ããºã ãç¬èªã®ã¡ã¢ãªã¢ãã±ãŒã¿ãªã©ãäœæããŸãã
äžæ¹ããã¹ã¯ãããã æšæ¥ãç§ã¯èªåã®ããã«äœãå®è¡ãããŠããããèŠãŸãã-ç§ã¯120ã®ããã»ã¹ãç«ã¡äžããŸãããããããã®å€ãã¯ç§ã«ãç¥ãããŠããªãã ç§ã¯è»œéã®ã·ã¹ãã ã倧奜ãã§ãååãšããŠãèªåã«ãšã£ãŠäœãå¹æçããç解ããŠããŸãã KDEãŸãã¯GNOMEãå®è¡ãããšã200ãã300ã®ããã»ã¹ã倧éã«çºçããŸããããããäœã§ãããäœãããã®ãããããããŸããã 圌ããã·ã¹ãã ã«ã©ã®ãããªè² è·ãããããããæšæž¬ããŠããŸãããäžè¬çã«ãããã¯ç§ã«ã¯é¢ä¿ãããŸããã å°å·ããã³ãŒããã³ã³ãã€ã«ããŸããäžè¬ã«ããã¹ã¯ãããã®æ倧ãã³ãããŒã¯ã«ã¯èå³ããããŸãããèšé²ãèšå®ããå¿ èŠããããµãŒããŒã®æ倧ãã³ãããŒã¯ã«èå³ããããŸãã
2ã€ç®ã¯ããã¹ã¯ãããã®æ¶è²»é»åãããªãäœããªã£ãããšã§ããéåžžã®ã·ã³ã°ã«ããã»ããµãå°ãã®ã³ã¢ãå°ãã®ã¡ã¢ãªãNUMAãªããã€ãŸã ãã¹ãŠãéåžžã«ã·ã³ãã«ã§ããã¹ãŠãéåžžã«å°ããã§ãã ããã«ãããããããLinuxã¯ç§ãã¡ã®æºåž¯é»è©±ãšå€§èŠæš¡ãªãµãŒããŒã§åäœããããšãç¥ã£ãŠããŸãã ããã¯ããŸãæ£ãããããŸããã
é²æ©çãªäžçãã©ã®ããã«çããŠããããèŠããš...å€å誰ããéãDDoSã«ééãããªãã圌ãã¯ãã®å åãç¥ã£ãŠããŸãïŒ
![](https://habrastorage.org/getpro/habr/post_images/57c/86c/0e1/57c86c0e1f75179a4a77251fae7cf137.png)
ããã¯ããã©ãã£ãã¯ããã£ã«ã¿ãªã³ã°ããããã®å€§èŠæš¡ãªããŒã¿ã»ã³ã¿ãŒãæ§ç¯ããå é§è ã®1人ã«ããããŒã¿ãã¬ãŒãã§ããããããã¯ãŒã¯ã¢ã¯ã»ã©ã¬ãŒã¿ãªãã§éåžžã®IntelããŒããŠã§ã¢ã§åäœãã人ã ã¯ç¬èªã®OSãäœæããŸãã èµ€è²ã¯åé€ãããã®ã瀺ããåºæ¬çãªå®äŸ¡ãªãµãŒããŒãã10 Gbã®ãã©ãã£ãã¯ãåé€ã§ããããŒã¿ãåãåããŸããã
ãã®ããã«Linuxãèµ·åããã ããªããäœãè±ããŸããã ããã«ããããã®äººã ã¯Application Layer DDoSã¬ãã«ã§ããªãæ·±å»ãªãã£ã«ã¿ãªã³ã°ãè¡ããŸãã IP / TCPã«ç»ãã ãã§ãªããéåžžã®OSãè¡ãããšã ãã§ãªããHTPã解æãã解æããããçš®ã®åé¡åãå®è¡ããããã€ãã®ããã»ããµãµã€ã¯ã«ã§1ã€ã®ãã±ããã解æããŸãããã¹ãŠãéåžžã«é«éã§ãã
![](https://habrastorage.org/getpro/habr/post_images/011/bd4/85c/011bd485c7cf62619f46ca80b325aebb.png)
ãªããããLinuxãšã®å ±åãªã®ããçããããšãããªããããããã§ãã 2000幎代ã®ã©ããã§ãSolarisã¯ç¢ºåºããå°äœãå ããŠããŸãããSolarisã¯å€ããéããLinuxã¯éããŠè»œããšããè°è«ããããŸãããããã¯ã¡ãŒãªã³ã°ãªã¹ãã«ãèŒã£ãŠããŸãã ããã§Solarisã«ãã£ããã®ããããŸã-Linuxã¯éåžžã«å€§ãããã³ãŒãã¯èšå€§ã§ãããå€ãã®ãªãã·ã§ã³ãããããã¹ãŠãå®è¡ã§ããŸããããããããšã¯ãã¹ãŠå®è¡ã§ããŸãã OpenBSDãNetBSDãªã©ã®ä»ã®OSããããŸããããããã¯ã¯ããã«åçŽã§ãããŸã䜿çšãããŠããŸããããLinuxã¯éåžžã«åŒ·åãªãã®ã§ãã
ç§ã¯ãŠã£ãããã£ã¢ããäžã®åçãåŒãã¡ãããŸãã-圌ãã¯ããã€ãã®æèã§LinuxãæåããããšããŸããã åçŽåããããŸã-ã³ã¢å ã®ãã£ã¬ã¯ããªã«å¿ãããµãã·ã¹ãã ã§ããã®äžã®åã¯äžäœããäžäœã«ç§»åããŸããã ããã¯éåžžã«è€éãªã°ã©ãã§ãã å®éãããšãã°100ã¬ãã«ã®ã¬ãã«ã§ã®I / Oèšç»ïŒéãšéç·ïŒãèŠãŠã¿ããšããã¹ãŠã衚瀺ãããŠããããã§ã¯ãããŸããã å®éã«ã¯ãã¹ãŠãããè€éã§ã倧ããªæ¥ç¶ãå€ãã®ç°ãªããã¥ãŒãå€ãã®ããã¯ããããããã¯ãã¹ãŠåäœããã¯ãã§ãããã¹ãŠããã£ããåäœããŸãã
瞊ã®åã調ã¹ãŠãLinuxãµãã·ã¹ãã ãšãåé¡ãçºçããå¯èœæ§ã®ãããµãã·ã¹ãã ã§ã§ããããšãèŠãŠã¿ãŸãããã äžéšã¯ç®¡çè ã®èŠ³ç¹ãããäžéšã¯ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã®éçºè ã®èŠ³ç¹ããã
![](https://habrastorage.org/getpro/habr/post_images/333/92f/385/33392f3856047342365b92534a4145c7.png)
ãŸããããã»ã¹ãšã¹ã¬ãããæäœããŸãã Linuxã«ã¯ã察æ°æéã§æ©èœããå ¬å¹³ãªI / Oã¹ã±ãžã¥ãŒã©ããããŸãã 圌ã¯çŸåšãããã©ã«ãã®ã¹ã±ãžã¥ãŒã©ãŒã§ããããã以åã¯äžå®æéåäœããã¹ã±ãžã¥ãŒã©ãŒããããŸããã ã¹ã±ãžã¥ãŒã©ãŒèªäœãæé©åããŠããã©ãŒãã³ã¹ãåäžãããããã«ã¹ã±ãžã¥ãŒã©ãŒã«å ¥ãå¿ èŠã¯ãããŸããã§ãããã€ãŸããããã§ã©ã®ããã«æ©èœããããç¥ã£ãŠããŸãããæé©åããå¿ èŠã¯ãããŸããã§ããã ããã§ãã¹ãŠãäœããã®åœ¢ã§èšç»ãããŠããããããããããŸãèšç»ãããŠããŸãã åé¡ã¯éåžžã©ããã§çºçããŸãã
ç§ãèšã£ãããã«ããã¹ã¯ããããšãµãŒããŒã¯å®å šã«ç°ãªãäžçã§ãã 1ã€ã®ããã»ããµã8ãŸãã¯16ã³ã¢ãæã€ãµãŒããŒãããå Žå-ããã¯1ã€ã®ãªãã·ã§ã³ã§ãã ããããã10ã³ã¢ã®4ã€ã®ããã»ããµãåãããµãŒããŒãããå Žåãã·ã¹ãã ã«ã¯40ã®ã³ã¢ããããããã«ãã€ããŒã¹ã¬ããã£ã³ã°ãããããã8ã€ã®ã¹ã¬ããããããŸãã çŸåšãããã»ããµã¯ãã倧èŠæš¡ã«ãªããããã«å€ãã®äžŠåã³ã³ããã¹ããååšããç¶æ³ã¯å®å šã«ç°ãªã£ãŠããŸãã
ãŸããã¹ã¬ãããããã»ã¹ãã€ãã³ãã«ã€ããŠè©±ãå Žåã次ã«éžæãããã®ïŒã¹ã¬ãããããã»ã¹ããŸãã¯ã¹ããŒããã·ã³ïŒã«ã€ããŠã¯ããã¹ãŠããªãã®å©äŸ¿æ§ã«ã€ããŠã§ãã
é«éã§èšè¿°ãããå Žåã¯ãäœããã®ãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠãVentããŸãã¯Boost.Asioãã¹ããªãŒã ã®æãšãšãã«äœ¿çšããŸãã
ããã©ãŒãã³ã¹ãå¿ èŠãªå Žåã¯ãåäœæéãããã«äœãã§ããéãæ žãããçšåºŠããããšãæ£ç¢ºã«ç解ããå¿ èŠããããŸãã 1ã€ã®ãŠãããã«ã§ãã以äžã®ããšã匷å¶ãã1ã€ã®ããŒããŠã§ã¢ã¹ããªãŒã ã«å€ãã®ãœãããŠã§ã¢ãããŒãäžããå Žåãäœãèµ·ãããŸããã æåã®ã³ã³ããã¹ãåãæ¿ããçºçããŸãã ã·ã¹ãã ã³ãŒã«ãããå Žåãã³ã³ããã¹ãã¹ã€ããã¯ããã§å®äŸ¡ã§ãã ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«ã¯ç¹å¥ãªæé©åããããã¢ããªã±ãŒã·ã§ã³ããã»ã¹ãã«ãŒãã«ã«ç§»åããŠããã«æ»ã£ãå Žåããã®ãã£ãã·ã¥ã¯ããã»ã©æŽãæµãããããã£ãã·ã¥ã¯ç¡å¹ã«ãªããŸããã å°ãæŽãæµããŸãããäžè¬çã«ãç§ãã¡ã¯ããçããŠããŸãã ã¢ããªã±ãŒã·ã§ã³ã³ã³ããã¹ãã®ã¹ã±ãžã¥ãŒã«ãå€æŽããããšããã¹ãŠãéåžžã«æªããªããŸãã
- ææ°ã®Intelããã»ããµãŒã§ã¯ãã¬ãã«1ãã£ãã·ã¥ãç¡å¹ã«ããå¿ èŠããããŸãã ç§ãã¡ã®æã䟡å€ã®ããããšã¯ãç§ãã¡ãæãå°ãããŠæãé«äŸ¡ãªãã®ã§ãããé ãã¡ã¢ãªã§æ¬åœã«éãåãããšãå¯èœã«ããããšã§ã-ç§ãã¡ã¯ããã倱ããŸãã å€ããã£ãã·ã¥L2ãL3ã¯åçŽã«æŽãæµãããŸãã 䞊è¡ããŠå®è¡ãããè€æ°ã®ã¹ã¬ãããè€æ°ã®ããã»ã¹ãååãªéã®ããŒã¿ãåŠçããããã°ã©ã ãããããããã®ã¹ã±ãžã¥ãŒã«ãå€æŽãããå Žåãåããã°ã©ã ãŸãã¯åã¹ã¬ãããåäœããã¡ã¢ãªããã£ãã·ã¥ã«ããŒããããåã®ãã®ããã£ãããšãããèªäœã®ããã«ãã£ãã·ã¥ãç²åŸããŠãããã®ã éã³ã³ããã¹ãã¹ã€ãããçºçãããšãæåã®ããã°ã©ã ãåã³å¶åŸ¡ãååŸãããšãå®éã«ã¯ã³ãŒã«ããã£ãã·ã¥ã«åãæ¿ãããã¡ã¢ãªããããŒã¿ããã«ãå§ããŸããåäœæéã®é åºã¯ãŸã£ããç°ãªããŸãã
- 以äžã ãã¹ã¯ãããã§ãã¹ããŒããã©ã³ã§ãèŠãããªããã®ã¯NUMAã§ãã ãã以åã¯AMDã§ããããçŸåšã¯Intelã§ããææ°ã®X86ã¯ãé察称ã¢ãŒããã¯ãã£ã«ãªããŸããã äžçªäžã®è¡ã¯ãOSã¹ã±ãžã¥ãŒã©ãŒãšããã»ããµãŒãç°ãªããšããããšã§ãããããã¯ç°ãªãããŒãã§ãã åããŒãã¯ç¬èªã®ç©çããŒã«ã«ã¡ã¢ãªã§åäœããOSã¹ã±ãžã¥ãŒã©ãŒã1ã€ã®ããŒããã移åããããšã決å®ããå Žåã1ã€ã®ããã»ããµãŒããå¥ã®ããã»ããµãŒã«ããã»ã¹ã移åãããšããã¹ãŠãéåžžã«æªããªããŸãã ç§ãã¡ã®èšæ¶ã¯é ããã£ã³ãã«ã«åºãã£ãŠããŸãã 幞ããªããšã«ãOSã¯å®è¡ããŠããã«ãŒãã«ã®ããããžãèªèããŠããããããå®è¡ããããšããŸããããããã§ãèæ ®ãã¹ãäºé ããããããå®è¡ããªããã°ãªããªãå ŽåããããŸãã
- 次ã å ±æããŒã¿ã®æäœæ¹æ³ã®ã¡ã«ããºã ã¯å°ãå€æŽãããŸããã æ°å¹Žåã«éãã«ã¹ãã³ããã¯ãååŸãããããæéã§ãããšæ³å®ã§ããå Žåãã€ãŸã ããã€ãã®å°ããªå€æ°ãåãããµã€ã¯ã«ã§ã¹ãã³ãããã®å€æ°ã®ããã€ãã®å€ã§ãããæåŸ ããŸãããä»ã¯ãããã§ããŸããã 80åã®ã³ã¢ã1ãã€ãã4ãã€ãã§å£ããŠããå ŽåãããŒã¿ãã¹ã«åé¡ãçãããã¹ãŠãéåžžã«é ããªããŸãã 以åã«äœ¿çšããåæã¡ã«ããºã ã¯äœ¿çšã§ããŸããã
ããã¹ãŠã®ããã°ã©ããã¡ã¢ãªã«ã€ããŠç¥ã£ãŠããã¹ãããšãïŒUlrich DrepperïŒãèªãããšã匷ããå§ãããŸã-çŽ æŽãããæ¬ã§ããå°ãå€ãã§ãããäžè¬çãªæŠå¿µã¯éåžžã«åªããŠãããã©ã®ããã«æ©èœããäœãã§ãããã瀺ããŠããŸãã
![](https://habrastorage.org/getpro/habr/post_images/83a/182/f78/83a182f78e56fc1408869bb278542a67.png)
æåã®åçã¯ããã¹ãŠã倧è¡ã«åå ¥ãå§ããAMDã®2008幎ãŸãã¯2009幎ã§ãã åèšã§2ã€ã®ããã»ããµããããŸãã éããã£ãã«ã¯ã2ã€ã®ã³ã¢ãéä¿¡ãããã£ãã«ã§ãã ããã§ã¯ã2ã€ã®ã³ã¢ãæã€2ã€ã®ããã»ããµããããŸãã 2ã€ã®ã³ã¢éã§ã¯éåžžã«é«éãªè»¢éãè¡ãããç°ãªãããã»ããµãŒéã§ã¯éåžžã«äœéã§ãã ãããã£ãŠã0.3ã«ãŒãã«ãããå Žåãåãããã¯ãåãintã§åäœãããããã®4ãã€ããé ãã¡ã¢ãªãã£ãã«ã§é§åãå§ããŸã-ããã¯éåžžã«é ãã§ãã åãintå€æ°ãæã€P0ãšP1ãæ©èœããå Žåããã¹ãŠãéåžžã«é«éã§ãã
çŸä»£ã®ã¢ãŒããã¯ãã£ã§ã¯ããããã¯è¿ã¥ããŠããŸãããããããã4ã€ã®ããã»ããµãæèŒããåçãããããã«é²ãã ã®ã§ãããã ããã«ãã©ããæ§é ãããå Žå-é«éããã»ããµãšäœéãã£ãã«ã®2ã€ã®ããã»ããµãããããã§ã«ãã¹ãŠã®ã³ã¢ãšãã¹ãŠãéä¿¡ããŠããããã§ã¯ãªãã3次å èšèšã«ãªã£ãŠããŸãã ããšãã°ãP3ã¯P4ãšéä¿¡ããã2ãããããå¿ èŠããããŸãã ã€ãŸã P4ããP3ã®ããŒã¿ãå¿ èŠãªå Žåãæåã«P0ã«ç§»åãã次ã«P0ããã§ã«P4ã«ç§»åããŸãã 転éã«ã¯å¥ã®ããã»ããµã䜿çšããå¿ èŠããããŸãã
ææ°ã®Intelã®i7ã¢ãŒããã¯ãã£-éåžžã«æ·±å»ãªãã¹ãšKPIãåããŠããŸãã å®éããã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãã³ã¢éä¿¡ãããŒã¿åæããããŸãã 圌ãã¯ãTCP / IPãããªãã¡ ãã«ãã¬ãã«éä¿¡ãããã³ã«ãããããããã®ãã±ããã¯ããã»ããµéã®ããŒã¿ãã¹ã§å®è¡ãããŸããããªãè€éãªããšãšãããé«éãªè»¢éããããäœéã§éåžžã«é£ããææ°ã®i7ãç解ããããšã§ãã Numactlã¯ããŒãã®è·é¢ã瀺ããŸãã ã€ãŸããæãã«èŠããšããã®ã³ã¢èªäœã¯ããã€ãã®éããããã€ãã®ãªãŠã ã§ã-æãå®ãäŸ¡æ Œã§ãã 圌ãä»ã®ããŒãã«è¡ãã®ã¯ãã§ã«é£ããã§ãã ãã§ã«21ã®éã¿ãèæ ®ãããŠããŸãã
ããŒããŠã§ã¢ã®ããããžã衚瀺ãããŠãŒãã£ãªãã£ã§ããã¢ã¯ã»ã¹ããã³ã¢ã¯ãã¹ãŠåãäŸ¡æ Œã§ãããšèããããŸãã å®éãããã¯å°ãééã£ãŠããŸãããNUMAã䜿çšããå ŽåãããŒã«ã«ããã»ããµã§ã¯ãã¹ãŠãé«éã§ãä»ã®èª°ãã§ã¯ãã¹ãŠãäœéã§ãããšä»®å®ããæ¹ãç°¡åã§ãã
![](https://habrastorage.org/getpro/habr/post_images/28a/ca2/592/28aca25923967dda69b58031e94baae1.png)
ã³ãŒããé«éã«åäœãããããã«äœãã§ããäœãæ£ããã®ã§ããããïŒ ãŸããã¹ãã³ããã¯ãããŸããŸãªããŒã¿æ§é ãããã¯ããªãŒãããã¯2010幎代ã«éåžžã«æ®åããŸããã ããŸããŸãªããã¯ããªãŒã®ãã¥ãŒããã®ã¯ã倧ããªãã·ã³ã§ã¯æ©èœããŸããã æè¿ããããã«ã¯2äžã®ã¹ããªãŒã ãããããã®äººã¯ãããŒã¿ããã°ããæ¿å ¥ããã³åéã§ããããã«ãã¯ã€ãã¯ãã¥ãŒãäœæãããã£ãããšå°ããããŸããã ããã¯ãã®ããã«ã¯åäœããŸãããããªãã¡ ãã¹ãŠãéåžžã«é ããªããŸãã 20,000ã®ã¹ã¬ããããã£ãã·ã¥ãããäžå¯è§£ãªã¢ãããã¯ãªåœä»€ãããŒã¿ããããŠãã¹ãŠãéåžžã«é ããªããŸãã ãããã£ãŠãNUMAã·ã¹ãã çšã®ã³ãŒããäœæããå Žåããã·ã³å ãéçã®äžã«å°ããªã¯ã©ã¹ã¿ãŒããããå°ããªãã·ã³ã1ã€ã®ããã»ããµããã«ãã³ã¢ã§ããããã«ãœãããŠã§ã¢ãæ§ç¯ãããšèããŸãã -16ã³ã¢ã§ã圌女ã¯èªåã®ããšãããŒã«ã«ã§è¡ããæã èŠç¥ãã¬äººãšéä¿¡ããŸãã ãããŠããã·ã³ã®ã¯ã©ã¹ã¿ãŒãçµã¿åããããšãéä¿¡ãããã«é ããªããŸãã ãã®ãããªã¯ã©ã¹ã¿ãŒã®éå±€ïŒé«éã¯ã©ã¹ã¿ãŒãšäœéã¯ã©ã¹ã¿ãŒïŒãååŸããŸãã
å ±æããŒã¿ã®è¯ãäŸã¯ãC ++ãshared_ptrã®å Žåãã€ãŸãå ±æããŒã¿ã䜿çšããã®ã¯è¯ããªããšããããšã§ãã ããŒã¿ãžã®ãã€ã³ã¿ãŒããããŸã-ãããã¯ã¹ããŒããã€ã³ã¿ãŒã§ãããåç §ã«ãŠã³ã¿ãŒããããŸããããã¯ããã€ã³ã¿ãŒã®ã³ããŒããšã«ããããå€åããŸããããŒãããããµãŒããŒãäœæãããšãshared_ptrã¯äœ¿çšã§ããŸããã
ããšãã°ãããŒã¹ããããååšããçç±ã®1ã€ã¯ãshared_ptrãã¹ããŒããã€ã³ã¿ãŒãããã³ã¢ã¯ã·ã§ã³ãå€§å¹ ã«é ããããã®ä»ã®é«ã¬ãã«ãªãã®ãéåžžã«å€ã䜿çšããããããµãŒããŒäžã§åªããããã©ãŒãã³ã¹ãåŸãããªãããšã§ãã ãã®é«ã¬ãã«ã®ãªããžã§ã¯ãã³ãŒãã¯ãå¯èœãªéãè¿ éã«æªå å·¥ã®éã§åäœããããšãæåŸ ããŠããŸããã
ããã«ã åœãã®å ±æã ããŸããŸãªé«ã¬ãã«ããã°ã©ãã³ã°èšèªã§ã¯ã1ãã€ãã2ã4ã8ãã€ãã§åäœããŸãã ããã»ããµã¯64ãã€ãã§åäœããŸã-ããã¯ããã»ããµã®1ãã£ãã·ã¥ã©ã€ã³ã§ãã ã€ãŸã å€æ°ã64ãã€ãã§åããã£ãã·ã¥ã©ã€ã³ã«æ ŒçŽãããŠããå Žåãããã»ããµã®å Žåã¯1ã€ã®å€æ°ã§ããã2ã€ã®å€æ°ã«å¯ŸããŠãã¹ãŠã®ã¢ã«ãŽãªãºã ãæ£ç¢ºã«å®è¡ããŸãã äœããã®çç±ã§2ã€ã®ãããå€æ°ãããšãã°2ã€ã®ã¹ãã³ããã¯ãå®å šã«ç°ãªããã€ããªãã®ãŒçã«åããã£ãã·ã¥ã©ã€ã³ã«åãŸãå Žåã倧ããªåé¡ãçºçããŸãã ç°ãªãã³ã¢ããããŸãããåãããŒã¿ãæ±ããŠæŠãå§ããŸããã䞊è¡ããŠåäœããã¯ãã§ãã ãããŠãããªãã¯ãå®éã«ã¯ã2ã€ã®ããã¯ãæã£ãŠãããšããäºå®ã«æ°ä»ããŸããããããã¯1ã€ã®ããã¯ãšããŠæ©èœããŸãã
ãã€ã³ãã£ã³ã°ããã»ã¹ã¯ãNUMAã®å Žåã®ã¿ã§ãã ããªãå€ããã¹ãã 4ã³ã¢ã®4ããã»ããµã®ãã·ã³ããããŸããã ãŸããddãå®è¡ããŠncã«éä¿¡ãããšãddãäžæ¹ã®ã³ã¢ã§å®è¡ãããncãä»æ¹ã®ã³ã¢ã§å®è¡ãããŸãã ãã®ç¬éãäœããã®çç±ã§ãOSã¯ãããã»ããµãç°ãªããããã¢ããªã±ãŒã·ã§ã³ããã»ã¹ãç°ãªãããã»ããµã«åæ£ãããæ¹ãè¯ãããšå€æãã1ã€ã®ããã»ã¹ã1ã€ã®ããã»ããµã«ãå¥ã®ããã»ã¹ã«å¥ã®ããã»ã¹ãäžããããªãäœãããã©ãŒãã³ã¹ãåŸãŸããã äž¡æ¹ã®ããã»ã¹ãåãããã»ããµäžã§åäœããå¿ èŠããããšå³å¯ã«èšè¿°ãããšã転éãå€§å¹ ã«å¢å ããŸãã ã€ãŸã OSã¯ã¹ã±ãžã¥ãŒãªã³ã°ããã»ã¹ã«ãããŠåžžã«è¯ãããšãè¡ããšã¯éãããåžžã«è³¢ãããšãè¡ããšã¯éããŸããã
ãã1ã€-ç°ãªããµãŒããŒãã€ãŸã ãã¹ãŠãå転ããŠãããã¹ã¯ããããããããããäœã§ãããã¯ããããŸããã apacheãnginxãMySQLãã«ãŒã¿ãŒãªã©ãæ©èœãããµãŒããŒããããŸãã ãã®ãããªãã¬ããã®ãããžãããžããããŸãã ããããé«æ§èœã¯ã©ã¹ã¿ãŒãæ§ç¯ããŠããå Žåã倧äŒæ¥ã®æ§ç¯æ¹æ³ãèŠããšãååãšããŠã¯ã©ã¹ã¿ãŒããããã¬ãã«ããããæåã®ã¬ãã«ããããŸã-ããšãã°ã10å°ã®ãã·ã³ã«nginxããããåãã·ã³ã«ã¯nginxãšOSãããããŸããã 次ã®ã¬ãã«-ããã€ãã®ã¹ã¯ãªãããåããApacheãããã次ã®ã¬ãã«-MySQLããããŸãã 1å°ã®ãã·ã³ã1ã€ã®é«ã¬ãã«ã®ã¿ã¹ã¯ã§ããããšãããããŸããã ããã¯å®å šã«ç°ãªãã¢ãããŒãã§ããããã®ã·ããªãªã§ã¯ãã¢ããªã±ãŒã·ã§ã³ãnginxãŸãã¯apacheã¯ããã¹ãŠã®ãªãœãŒã¹ãææããŠãããšããäºå®ã«äŸåããããšãã§ããOSãæäŸããä»®æ³åãå¿ èŠãšããŸãã-ä»®æ³ã¡ã¢ãªã§ãããããã¯ãã¹ãŠã®ããã°ã©ã ãèæ ®ããã¢ãã¬ã¹ç©ºéã®åé¢ã§ãæªç¥ã®éã®CPUã§åäœããããšã ããšãã°ãWebãµãŒããŒãèµ·åãããšãã«ãã³ã¢ã®æ°ã«çããã¯ãŒã«ãŒããŸãã¯2åã®ã¯ãŒã«ãŒãèµ·åã§ããŸãã ç§ãã¡ã¯åºã¥ããŠããŸã-ã³ã¢ã®æ°ã«åŽåè ã®æ°ã ããã¯ããã·ã³å šäœãå®å šã«å©çšãã1ã€ã®ã¢ããªã±ãŒã·ã§ã³ãããäŸã§ãã
![](https://habrastorage.org/getpro/habr/post_images/024/c6e/a14/024c6ea14a04336c4c7718f18e91b340.png)
ã¡ã¢ãªã«ã€ããŠã èŠããã«ãããå€ãã®ã¡ã¢ãªã䜿çšããã°ããã»ã©ãããªãã«ãšã£ãŠã¯æªãããšã§ãã åçãèŠããšããããä»®æ³ã¡ã¢ãªã®ä»çµã¿ã§ãã ã¢ãã¬ã¹ããããŸãïŒããã¯äžã®è¡ã§ãïŒ-0ãã63ãããã§ãä»®æ³ã¢ãã¬ã¹ç©ºéã§äœæ¥ããç©çã¢ãã¬ã¹ç©ºéãæã€ããŒããŠã§ã¢ãããå Žåããã€ãã®ããã«ãä»®æ³ã¢ãã¬ã¹ç©ºéãç©çã«ãããã³ã°ããŸãã ãããã£ãŠã2ã€ã®ããã°ã©ã ãæ©èœããå Žåãå€æ°ã¢ãã¬ã¹ã¯åããããããŸãããããããã®ã¢ãã¬ã¹ã¯ç°ãªãç©çã¡ã¢ãªã»ã«ãåç §ããŸãã ãããä»®æ³ã¡ã¢ãªã®åçã§ãã ãããã£ãŠãããã»ããµãç¹å®ã®ã¢ãã¬ã¹ã«ã¢ã¯ã»ã¹ããå Žåããã®ä»®æ³ã¢ãã¬ã¹ãç©çã¢ãã¬ã¹ã«è§£æ±ºããå¿ èŠããããŸãã
ããŒãžããŒãã«ã¯ç§ãã¡ã®ããã«åããŠããŸã-瀺ãããŠãããã®ã ããŒãžããŒãã«ã¯4ã€ã®ã¬ãã«ã§æ§æãããŠããŸãã æåã®4ã€ã®ã¬ãã«ãããããããã39ã47çªç®ã®ããããåç §ãããŸã-ããã¯ããŒãžã§ãã ãã®ããŒãžã¯ãã¬ãŒãã§ãããã€ã³ããã¯ã¹ã¯ãããã§ãšã³ã³ãŒããããæ°å€ã§ããã次ã®ã¬ãã«ã«ãžã£ã³ãããŠããããããã®æ¬¡ã®éšåã解決ããŸãã ããã¯ã1ã€ã®ããŒãžã1ã€ã®ã¬ãã«ã次ã®ã¬ãã«ã«ãªã³ã¯ãããã©ããæ§é ã瀺ããŠããŸãã 第1ã¬ãã«ã§ã¯ãååãšããŠããã°ã©ã ã®äžçŽäœæãäžèŽããããšã¯æããã§ãã
OSã¯ãã¡ã¢ãªå²ãåœãŠãè¡ããšãã«ã䜿çšå¯èœãªã¢ãã¬ã¹ã«å¯èœãªéãè¿ãæå°ã®ã¢ãã¬ã¹ãéžæããŸãã æšãååŸããŸãã æåã®ã°ã¬ãŒã®ã«ãŒã©ãŒã¯1ã€ã2ã€ç®ã¯1ã€ã3ã€ç®ã®ã¬ãã«ã§ã¯2ã€ãæåŸã®ã¬ãã«ã§ã¯ã¬ãã«å šäœãå®å šã«äœ¿ãå§ããŸãã ã¡ã€ã³ããŒãžã«ã«ãŒããæã€ãã®ãããªããªãŒãååŸããŠãããåå²ããŸãã ãããã£ãŠãã¡ã¢ãªãå€ã䜿çšããã°ããã»ã©ãåå²ããããªãŒãå¢ããŸãããã¡ããããããã©ããã«ä¿åããå¿ èŠããããããã¯ç©çã¡ã¢ãªã§ããããŸãã 次ã«ããããã©ã®ããã«äœ¿çšãããŠãããããããŠäœãããã¡ã¢ãªæ¶è²»éã確èªããŸãã
äºçªç®ã ããçš®ã®ãã€ããªããªãŒãäœæãããšããŸããéãããŒããšç·ã®ããŒãããããããã«è¡ããããšèããŠããŸãã ç§ãã¡ã«ãšã£ãŠãããã¯ããªãŒã§ãããOSã«ãšã£ãŠã¯ãããªãŒå ã®ããªãŒãã€ãŸã ããŒaãæž¡ããšãæåã®ã¬ãã«ãã2çªç®ã®ã¬ãã«ãŸã§ãããªãŒãä»ããŠè»¢éãè¡ãããããªãŒã®4ã€ã®ã¬ãã«ãå®å šã«ééããŸãã 次ã«ã次ã®ç¬éã2çªç®ã®ã¬ãã«ãã3çªç®ã®ã¬ãã«ã«ãžã£ã³ãããŸãã ç¹°ãè¿ããŸãããããªãŒã¯è§£æ±ºãããŸãã ããªãŒã®æäžéšããäžã«ç§»åããããã«ã8ã€ã®ã¡ã¢ãªè»¢éããããŸã-ããã¯ãããããããŸãã
幞ããªããšã«ãTLBãã£ãã·ã¥ããããŸãã å®éãããã¯ããªãå°ããªãã£ãã·ã¥ã§ãããåèšçŽ1000åã®ã¢ãã¬ã¹ãããã«é 眮ãããŠããŸãã ããŒãžã«å¯Ÿå¿ããå€æããŒãã«ã 4 KbããŒãžã1000ããŒãž-4 Mbãã€ãŸã 4 MBã¯ãTLBã«ãã£ãã·ã¥ãããã®ã§ãã ã¢ããªã±ãŒã·ã§ã³ã4 MBãè¶ ãããšããã«ãããªãŒã®åšããèµ°ãå§ããŸããææ°ã®ã¢ããªã±ãŒã·ã§ã³ã®4 MBã¯ãäžè¬çã«ã¯äœããããŸããã ãããŠãããªãã¯ããªãé »ç¹ã«TLBãã£ãã·ã¥ããæãåºããŸãã 䜿çšããã¡ã¢ãªãå€ãã»ã©ãããã©ãŒãã³ã¹ãäœäžããŸãã
![](https://habrastorage.org/getpro/habr/post_images/297/ae0/39d/297ae039d32aaf47129d40c2e4db7384.png)
ããŒãžã®æ··éã«ã€ããŠã ç§ãã¡ã®ããŒã¿ããŒã¹ã¯ãããè¡ããšãã§ã«è¿°ã¹ãŸããããå®éãäžéšã®ã¡ã«ããºã ã¯ããŒã¿ããŒã¹ãšOSã§éåžžã«äŒŒãŠãããLinuxã¯LRUã®äºéãªã¹ããä¿æããŠããŸãã ã¢ã¯ãã£ããªã¹ããšéã¢ã¯ãã£ããªã¹ãããããŸãã ãããã£ãŠãããŒãžã¯ãå²ãåœãŠã®ã¿ãè¡ãããããŒãžã§äœããè¡ããšãã¢ã¯ãã£ããªã¹ãã«é 眮ãããŸãã ãã®åŸããã°ããããŠãéã¢ã¯ãã£ããªã¹ãã«ããã·ã¥ãããŸãã kswapdããŒã¢ã³ãpsãäœæãããšãkswapdã衚瀺ãããŸã-ã³ã¢ããšã«1ã€ãã€ããããã¯ããŒãžé転éãè¡ã£ãŠããŸãã ãŸããããŒãžã2åç®ã«å®å šã«æéåãã«ãªããšãéã¢ã¯ãã£ããªã¹ãããæ¢ã«çµãåºãããŠãããããšãã°mallocãªã©ã®å¿åããŒãžã®å Žåã¯ã¹ã¯ããã«ç§»è¡ããŸãã ãã¡ã€ã«ããããã¡ã€ã«ã®å ŽåãããŒãžã¯åã«ç Žæ£ããããã¡ã€ã«ããããã¡ã€ã«ã«ç§»åããŸãã
ã¢ã¯ãã£ãããã³éã¢ã¯ãã£ãã®ãªã¹ãããããšããäºå®ã«å ããŠãããŒãžã¯æ±ããŠãããã«ãªãå¯èœæ§ããããŸãã ã€ãŸã ããŒãžãèªãã ããªãããããã§ãã äœããæžãçããå Žåãäºæ¬¡ã¹ãã¬ãŒãžã«ãã³ãããããŸã§ããã¯æ±ããŠããŸã-ã¹ã¯ããããããããã¡ã€ã«ã«æžãæ»ãããŸãã ã¡ã¢ãªã«äœããæžã蟌ããã³ã«ããã¹ãŠããã£ã¹ã¯ã«ãã³ãããããããŸããã æããã«ãããã«ããäœæ¥ãé ããªããŸãã ããããå Žåã«ãã£ãŠã¯ãªã»ããããå¿ èŠããããŸãã倧éã®è² è·ãããå Žåãä»ãããã¹ãŠãæžã蟌ã¿ãã¡ã¢ãªã«æžã蟌ã¿ãã©ãã«ããã³ãããªããšãååãªã¡ã¢ãªããªãããã§ãã 1ãã€ãã®ã¡ã¢ãªã«ã¬ã³ãŒããå°çããã¢ã¯ãã£ããªã»ãããéå§ãããããã®ãªã¹ãã調ã¹ãŠãããããã¹ãŠãã£ã¹ã¯ã«ãã³ããããšãéåžžã¯ç«ã¡äžãããŸãã
ãããã£ãŠãã©ã€ãããã¯ããã»ã¹ãããããã¡ã€ã«ã·ã¹ãã ã¯ãã®ããã»ã¹ã«äœæ¥ãè¿œå ããŸãã ãŸããã©ã€ãããã¯ã¯ãããŒãã£ããŒãžãã»ã«ã³ããªãªããžããªã«ãã³ãããã ãã§ãã
sysctlå€æ°ããããŸãã sysctlã«ã¯ã«ãŒãã«å ã®ããã¥ã¡ã³ãã䜿çšããŸããåžžã«æå ã«ã«ãŒãã«ããããããã調ã¹ãŸããã«ãŒãã«ã«ã¯ãåsysctlãäœãããããããæžãããããã¥ã¡ã³ãããããŸãã
ãããã£ãŠãdirty_background_ {ratioãbytes}ã¯é 延é害ã®éå§ç¹ã§ãã ãã¡ã€ã«ã·ã¹ãã ãã©ã€ãããã¯ã®ããã«äœæ¥ãè¡ãå¿ èŠããããšå€æãããšããæžã蟌ã¿ãã€ãæ°ãããŒãã£ãã€ãæ°ããŸãã¯ã¯ãªãŒã³ããŒãžããååŸããããŒãã£ããŒãžã®å²åã«ã€ããŠããã®ããŒã¿ã®ãã³ããéå§ããŸãããã©ã€ãã
dirty_ {ratioãbytes}ã¯ãããã»ã¹ãããŒã¿ãæžã蟌ã¿ãæ°ããããŒãã£ããŒãžãäœæãããšãã§ããããã®æç¹ã§æ¢ã«ããããŒãã£ããŒãžã®æ°ã調ã¹ãŸãã ããããããããããå Žåã圌èªèº«ãã»ã«ã³ããªã¹ãã¬ãŒãžã«ããããããã«ãã³ãããããããå°ãªãå Žåã¯ãã©ã€ãããã¯ã®ããã«ãããæ®ããŸãã ããã¯ãéåžžã«éäžçã«æžã蟌ã¿ãè¡ããšãã«ç¶æ³ããéããããšããæ¹æ³ã§ãããã©ã€ãããã¯ã¹ããªãŒã ã«ã¯ãã¹ãŠããªã»ããããæéããããŸããã
Writeback_centisecsã¯ãããŒãžãã©ã®ããã«ã·ãŒããééããããããã³ã·ãŒããããããããé »åºŠãå¶åŸ¡ããŸãã
Cache_presureã¯ãã©ã®ããŒã¿ãããã·ã¥ãããã®éã®åŠ¥åã§ãã ã€ãŸã ãããäœããã®çš®é¡ã®ãã¡ã€ã«ãµãŒããŒã§ããå Žåãå€ãã®iããŒããšå€ãã®ãã£ã¬ã¯ããªã©ã€ã¿ãŒãå¿ èŠã§ãã ãããåãªãã¡ã¢ãªã®å€§ããªé åã«é 眮ãããããŒã¿ããŒã¹ã§ããå ŽåãiããŒãã¯å¿ èŠãããŸããã ããšãã°ãngnixã¯ãã¡ã€ã«ãéãããã®ãã¡ã€ã«ããã£ãã·ã¥ã«ä¿æããŸãããã£ã¬ã¯ããªã¯å¿ èŠãããŸãããinodeãå¿ èŠãªå ŽåããããŸãããã»ãšãã©ã®å Žåå¿ èŠã§ã¯ãªããããŒãžãã£ãã·ã¥ãéèŠã§ãã
![](https://habrastorage.org/getpro/habr/post_images/20a/9ca/19b/20a9ca19b2a9edcd81a67dcdef118150.png)
ã©ãŒãžããŒãžã«ã€ããŠã ç§ãã¡ã®ããŒãžããŒãã«ã¯4 KBããŒãžã§æ©èœãããšèšããŸãããå®éãTLBã§ã¯4 MBããã¢ãã¬ã¹æå®ã§ããªãããšãããããŸãã-ããã§ã¯ååã§ã¯ãããŸããã ãããã£ãŠãã«ãŒãã«ã¬ãã«ãšããã»ããµã¬ãã«ã§æé©åãè¡ãããŸã-ããã¯å€§ããªããŒãžã§ãã ããã»ããµãã©ã®ããã«åäœãããã¯æ£çŽããããŸããããæçµçã«ã¯ãããŒãžãå²ãåœãŠãå Žåã2 MBãŸãã¯1 GBã®ç©çããŒãžããªãããšã«ãªããŸãã ç©ççã«ã¯ããŸã 4 KBã§ãã ãããŠã倧ããªããŒãžãå²ãåœãŠããšãå®éãOSã¯4 KBã®é£ç¶ãããã¯ãæ¢ããŸããããã«ããããã®å€§ããªããŒãžã«ãªããŸãã ãã®å€§ããªããŒãžã¯ãããŒãžããŒãã«ã®1ã€ã®ãªã«ã¬ã³ã¹ãšTLBã®1ã€ã®ãªã«ã¬ã³ã¹ã®ã¿ã§æ§æãããŸãã
ããã§ã®åé¡ã¯ãéåžžã®ããŒãžã«ç¬¬1ã¬ãã«ã®TLBãããå Žå-ããã¯çŽ1000ãšã³ããªã§ããã倧ããªããŒãžã§ã¯-ããã¯ãããã2 MBã§çŽ8ãGBã§1-2ã§ãããšããããšã§ãã ããã«åºã¥ããŠã倧ããªããŒã¿ããŒã¹ãããå Žåã倧ããªããŒãžã¯ããªãã«åããªããããããŸããããããŠããªãã1ãã€ãã ããæžããšããã®ãã€ãã«1GBãå²ãåœãŠãããããããã¡ã€ã«ããã²ãã€ããæçµçã«ããªãã«ãšã£ãŠæçã§ã¯ãªããªããŸãã æ¯èŒçå°ããªããŒã¿ã®éåžžã«æ¿ããã¹ã¿ãã¯ãä¿æããŠããå Žåãã€ãŸã MySQLã40 GBã®ã¡ã¢ãªã«äžãããããªãã®ã§ã¯ãããŸããããæåéã1 GBãã2-4 MBã®å°ããªããŒã¿ããŒã¹ãããããããããŒã¿æ§é ã§éåžžã«é£ããå Žåã¯ããã¥ãŒããŒãžã䜿çšããã®ãçã«ããªã£ãŠããŸãã
çŽ æŽãããç¹ã¯ãLinux 2.6.38ãéæãªå€§ããªããŒãžãå°å ¥ããããšã§ãã ãã°ããã®éã倧ããªããŒãžã«ç ©ããããããã䜿çšããããã«ç¹å¥ãªãã¡ã€ã«ã·ã¹ãã ãããŠã³ãããå¿ èŠããããŸããããä»ã§ã¯Linuxããã¹ãŠãåç¬ã§å®è¡ã§ããŸãã ã¡ã¢ãªé åãæå®ããå Žåã¯ãmadviseãå®è¡ããŸãããã®ã¡ã¢ãªé åã§å€§ããªããŒãžã䜿çšãããã®ã§ãããšãã°mmap largeã§ããŒãžãéžæãããšãLinuxã¯å€§ããªããŒãžãå²ãåœãŠãããšããŸãã å²ãåœãŠãããªãå Žåã¯ã4 KbãŸã§ã¹ã©ã€ãããŸããããã®ããã«å¯èœãªãã¹ãŠã®ããšãè¡ããŸãã 倧ããªããŒãžã®ãµããŒãã¯ãxdpyinfoã§è¡šç€ºã§ããŸãã
![](https://habrastorage.org/getpro/habr/post_images/a56/cd4/8e3/a56cd48e3da7e48ba2507209c3d8cdb6.png)
ãã£ã¹ã¯ã®å ¥åºåã«ã€ããŠã ããã«ã¯ã2ã€ã®å€§ããªèå³æ·±ãã«ããŽãªã«åé¡ã§ãã3ã€ã®ãªãã·ã§ã³ããããŸãã1ã€ç®ã¯ã³ããŒä»ããã¡ã€ã«I / Oã2ã€ç®ã¯ã³ããŒãªãã§ãã
åçã¯éåžžã®åäœã瀺ããŠããŸãã open, read, write, , .. page cache. - , , , , kswapd, writeback- , , . . , read write, , page cache, .. . , , O_DIRECT -, page cache, , , mmap' - .
â mmap. , O_DIRECT read write , mmap - - - , , . , , , , , O_DIRECT'a.
mmap. , X86, , , 128 , 10 â , - . , , , page 3, 128 , mmap, 128 â - .
![](https://habrastorage.org/getpro/habr/post_images/db3/880/740/db3880740afa8dca6dbf272c217674a3.png)
, - n , mmap , . ã€ãŸã , , , mmap.
![](https://habrastorage.org/getpro/habr/post_images/a56/cd4/8e3/a56cd48e3da7e48ba2507209c3d8cdb6.png)
. - , page table . .., page table â , 128 256 page table, .. , .
![](https://habrastorage.org/getpro/habr/post_images/42d/033/68a/42d03368a47d361caffd3cab18efd89e.png)
. - . , . , , , - . , , , , , . ã€ãŸã , .
. , , , , - . â . .
, Linux' -. .., , , , , , . , CPU -, .. .
Deadline â , , , - , .. . , .
CFQ â , , , , , , , -, . , .
![](https://habrastorage.org/getpro/habr/post_images/95f/052/962/95f0529621c04038f18f5dbebe310564.png)
. sysctl , , , , . .⊠, , , , . , , , read , .
Read_ahead â , - , . , , . , InnoDB , , , .
, , .
![](https://habrastorage.org/getpro/habr/post_images/4f2/4a9/5a5/4f24a95a52207cf6f5a5ac4d405d35a0.png)
. zero-copy , , zero-copy a. ã€ãŸã htp , , , , - user space firewall , .
, user space , .. , , . , , , , . 64 . 64 , 4-5 . , , 100 , zero-copy , .
, . , zero-copy, TCP/IP . , , TCP . .., , . .., . , , 64 TCP, 128 . , 64 , 64 , , , , - , . ã€ãŸã , TCP , .
![](https://habrastorage.org/getpro/habr/post_images/19a/df7/79a/19adf779a64e0693cfdd27e35c655b8c.png)
. , , . ã€ãŸã grep /proc/interrupts ethernet , , 16, 24, 40, , . , , . ã€ãŸã 20-40 , .., , .
c RPS, .. , , , , . , , .. IP- , TCP, TCP, IGP .. . , , , , -, , , . RPS, , - .
![](https://habrastorage.org/getpro/habr/post_images/a89/94a/e56/a8994ae56d570cb962374070c6b32b9b.png)
Offloading. Jumbo frames, , . , GRO GSO . , , 64 , , . , GSO, GRO 64 , , , , 64 . , Jumbo frames, a , , .
![](https://habrastorage.org/getpro/habr/post_images/c81/63b/8d7/c8163b8d71708586e6f96606c601352f.png)
Qdisc â . Linux' , , , wi-fi , - . , , , , IP-, â , .. , . - , ( ) â , â , , , . Qdisc , . livejournal â www.linuxjournal.com/content/queueing-linux-network-stack .
![](https://habrastorage.org/getpro/habr/post_images/3bb/b5a/021/3bbb5a02158c2b8c3e0ab145873606cd.png)
Sysctl , . , , nginx, , sysctl, , .
é£çµ¡å
» ak@natsys-lab.com
» NatSys Lab.
â HighLoad++ Junior . 2016 â HighLoad++ , 7 8 .
(, ) â " Linux Kernel Extension for Databases ".
- HighLoad.Guide â , , , . 30 . !