Ã¥¼Ò°³
¼±¹è°¡ ¿·¿¡¼ ÇϳªÇϳª ¾Ë·ÁÁÖµí Ä£ÀýÈ÷ ¼³¸íÇØÁִ½ǽÀ°ú ±×¸²À¸·Î ¹è¿ì´Â ¸®´ª½º Áö½ÄÀÇ ¸ðµç °Í * Go ¾ð¾î¿Í Python, Bash ½ºÅ©¸³Æ® ½Ç½À ÄÚµå Á¦°ø* ÀÌ µµ¼´Â ¡º½Ç½À°ú ±×¸²À¸·Î ¹è¿ì´Â ¸®´ª½º ±¸Á¶¡»ÀÇ °³Á¤ÆÇÀÔ´Ï´Ù.¸®´ª½º Ä¿³Î Ã¥ÀÇ µÎ²²¿Í ±íÀÌ¿¡ Áú·Á Áß°£¿¡ Æ÷±âÇß´ø °æÇèÀÌ ÀÖ´Â ¿£Áö´Ï¾î¶ó¸é, ¡º±×¸²À¸·Î ¹è¿ì´Â ¸®´ª½º ±¸Á¶¡»·Î ´Ù½Ã Çѹø µµÀüÇØ º¸±æ ÃßõÇÕ´Ï´Ù. ÀÌ Ã¥Àº ÄÄÇ»ÅÍ ½Ã½ºÅÛÀ» ±¸¼ºÇÏ´Â OS³ª Çϵå¿þ¾î¸¦ Á÷Á¢ µ¿ÀÛÇØ º¸¸ç ¸®´ª½º °³³äÀ» Á¾ÇÕÀûÀ¸·Î ÀÌÇØÇÒ ¼ö ÀÖµµ·Ï ´Ù¾çÇÑ ½Ç½ÀÀ» Á¦°øÇÕ´Ï´Ù. ¶ÇÇÑ ¸®´ª½º°¡ ¹«¾ùÀÎÁö, ¸®´ª½º¿¡ Æ÷ÇÔµÈ ´Ù¾çÇÑ ÇÁ·Î±×·¥¿¡´Â ¾î¶°ÇÑ °ÍÀÌ ÀÖ´ÂÁö, ¸®´ª½º ÇÁ·Î±×·¥ÀÇ Çʿ伺 µîÀ» ±×¸²À¸·Î Ä£ÀýÇÏ°Ô ¼³¸íÇÕ´Ï´Ù.Go, PythonÀ¸·Î ÀÛ¼ºµÈ ½Ç½À ÄÚµå¿Í ±× ½ÇÇà °á°ú¸¦ ±×·¡ÇÁ·Î ³ªÅ¸³»¾î ¸®´ª½ºÀÇ È帧À» ½±°Ô ÆľÇÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁÝ´Ï´Ù. ÇÁ·Î¼¼½º °ü¸®, ¸Þ¸ð¸® °ü¸®»Ó¸¸ ¾Æ´Ï¶ó µð¹ÙÀ̽º µå¶óÀ̹ö¸¦ Æ÷ÇÔÇÑ ÀåÄ¡ Á¢±Ù ¹æ¹ý, Çö´ë ¼ÒÇÁÆ®¿þ¾î ½Ã½ºÅÛÀ» ´Ù·ç´Â µ¥ ºüÁú ¼ö ¾ø´Â °¡»óÈ, ÄÁÅ×À̳Ê, cgroup µîÀÇ ³»¿ë±îÁö ´Ù·ì´Ï´Ù. ÀÌ ÇÑ ±ÇÀ¸·Î ¸®´ª½º Áö½ÄÀÇ Àü¹ÝÀûÀÎ ³»¿ë°ú ±âº» °³³äºÎÅÍ ÆÄ°íµé¾î¾ß ºñ·Î¼Ò ¹è¿ï ¼ö ÀÖ´Â ½ÉÈ ³»¿ë±îÁö ¹è¿ï ¼ö ÀÖ½À´Ï´Ù. ´Ù¾çÇÑ ±×¸²°ú ½Ç½ÀÀ¸·Î ¸®´ª½º OSÀÇ ÇÙ½É °³³ä°ú ±â¼úÀ» ±íÀÌ ÀÖ°Ô ¹è¿öº¾´Ï´Ù. Ã¥À» ÅëÇØ OS¿Í Çϵå¿þ¾î¿¡ ´ëÇÑ ÀÌÇصµ¸¦ ³ôÀÌ°í ³ª¸é ´ÙÀ½°ú °°Àº ÀÏÀÌ °¡´ÉÇÕ´Ï´Ù.- ½Ã½ºÅÛ ¿î¿ë¿¡ È°¿ë- º¸´Ù ³ªÀº ÇÁ·Î±×·¡¹Ö¿¡ È°¿ë - º»°ÝÀûÀÎ Ä¿³Î °³¹ß ½ÃÀÛ
ÀúÀÚ¼Ò°³
2005³âºÎÅÍ 2017³â±îÁö ÈÄÁöÂê ÁÖ½Äȸ»ç¿¡¼ ¿£ÅÍ ÇÁ¶óÀÌÁî ¸®´ª½º, ƯÈ÷ Ä¿³Î °³¹ß°ú Áö¿øÀ» ´ã´çÇÏ¿´´Ù. 2017³â »çÀ̺¸¿ìÁî ÁÖ½Äȸ»ç ±â¼ú °í¹®¿¡ ÃëÀÓÇؼ 2018³âºÎÅÍ cybozu.comÀÇ »õ·Î¿î ÀÎÇÁ¶ó ÀúÀå¼Ò °³¹ßÀ» ´ã´çÇÏ°í ÀÖ´Ù.
¸ñÂ÷
CHAPTER 0 ½ÃÀÛÇϸé¼CHAPTER 1 ¸®´ª½º °³¿ä1.1 ÇÁ·Î±×·¥ ¹× ÇÁ·Î¼¼½º1.2 Ä¿³Î1.3 ½Ã½ºÅÛ ÄÝ_½Ã½ºÅÛ ÄÝ È£Ãâ È®ÀÎÇØ º¸±â_½Ã½ºÅÛ ÄÝÀ» ó¸®ÇÏ´Â ½Ã°£ ºñÀ²Column ¸ð´ÏÅ͸µ, °æ°í ¾Ë¸² ¹× ´ë½Ã º¸µå_½Ã½ºÅÛ ÄÝ ¼Ò¿ä ½Ã°£ 1.4 ¶óÀ̺귯¸®_Ç¥ÁØ C ¶óÀ̺귯¸®_½Ã½ºÅÛ ÄÝ ·¡ÆÛ ÇÔ¼ö_Á¤Àû ¶óÀ̺귯¸®¿Í °øÀ¯ ¶óÀ̺귯¸®Column Á¤Àû ¸µÅ©°¡ µ¹¾Æ¿Ô´ÙCHAPTER 2 ÇÁ·Î¼¼½º °ü¸®(±âÃÊÆí)2.1 ÇÁ·Î¼¼½º »ý¼º_°°Àº ÇÁ·Î¼¼½º¸¦ µÎ °³·Î ºÐ¿½ÃÅ°´Â fork() ÇÔ¼ö_´Ù¸¥ ÇÁ·Î±×·¥À» ±âµ¿ÇÏ´Â execve() ÇÔ¼ö_ASLR·Î º¸¾È °È2.2 ÇÁ·Î¼¼½ºÀÇ ºÎ¸ð ÀÚ½Ä °ü°èColumn fork() ÇÔ¼ö¿Í execve() ÇÔ¼ö ÀÌ¿ÜÀÇ ÇÁ·Î¼¼½º »ý¼º ¹æ¹ý2.3 ÇÁ·Î¼¼½º »óÅÂ2.4 ÇÁ·Î¼¼½º Á¾·á2.5 Á»ºñ ÇÁ·Î¼¼½º¿Í °í¾Æ ÇÁ·Î¼¼½º2.6 ½Ã±×³ÎColumn ¹Ýµå½Ã Á×ÀÌ´Â SIGKILL ½Ã±×³Î°ú Àý´ë·Î Á×Áö ¾Ê´Â ÇÁ·Î¼¼½º 2.7 ¼Ð ÀÛ¾÷ °ü¸® ±¸Çö_¼¼¼Ç_ÇÁ·Î¼¼½º ±×·ì2.8 µ¥¸óCHAPTER 3 ÇÁ·Î¼¼½º ½ºÄÉÁÙ·¯3.1 ±âº» Áö½Ä: °æ°ú ½Ã°£°ú »ç¿ë ½Ã°£3.2 ³í¸® CPU Çϳª¸¸ »ç¿ëÇÏ´Â °æ¿ì3.3 ³í¸® CPU ¿©·¯ °³¸¦ »ç¿ëÇÏ´Â °æ¿ì3.4 realº¸´Ù user+sys°¡ Ä¿Áö´Â °æ¿ì3.5 ŸÀÓ ½½¶óÀ̽ºColumn ŸÀÓ ½½¶óÀ̽º ±¸Á¶ 3.6 ÄÁÅؽºÆ® ½ºÀ§Ä¡3.7 ó¸® ¼º´É3.8 ÇÁ·Î±×·¥ º´·Ä ½ÇÇàÀÇ Á߿伺CHAPTER 4 ¸Þ¸ð¸® °ü¸® ½Ã½ºÅÛ4.1 ¸Þ¸ð¸® °ü·Ã Á¤º¸ ¼öÁýÇϱâ_used_buff/cache_sar ¸í·É¾î¸¦ »ç¿ëÇؼ ¸Þ¸ð¸® °ü·Ã Á¤º¸¸¦ ¼öÁýÇϱâ4.2 ¸Þ¸ð¸® ÀçÈ°¿ë ó¸®_ÇÁ·Î¼¼½º »èÁ¦¿Í ¸Þ¸ð¸® °Á¦ ÇØÁ¦4.3 °¡»ó ¸Þ¸ð¸®_°¡»ó ¸Þ¸ð¸®°¡ ¾øÀ» ¶§ »ý±â´Â ¹®Á¦Á¡_°¡»ó ¸Þ¸ð¸® ±â´É_°¡»ó ¸Þ¸ð¸®·Î ¹®Á¦ ÇØ°áÇϱâ 4.4 ÇÁ·Î¼¼½º¿¡ »õ·Î¿î ¸Þ¸ð¸® ÇÒ´ç_¸Þ¸ð¸® ¿µ¿ª ÇÒ´ç: mmap () ½Ã½ºÅÛ ÄÝColumn Meltdown Ãë¾àÁ¡ÀÇ °øÆ÷_¸Þ¸ð¸® ÇÒ´ç: Demand pagingColumn ÇÁ·Î±×·¡¹Ö ¾ð¾î ¹ø¿ª±â¿Í ¸Þ¸ð¸® °ü¸®4.5 ÆäÀÌÁö Å×ÀÌºí °èÃþÈ_Huge Page_Transparent Huge Page(THP)CHAPTER 5 ÇÁ·Î¼¼½º °ü¸®(ÀÀ¿ëÆí)5.1 ºü¸¥ ÇÁ·Î¼¼½º ÀÛ¼º ó¸®_fork() ÇÔ¼ö °í¼ÓÈ: Ä«ÇÇ ¿Â ¶óÀÌÆ®_execve() ÇÔ¼öÀÇ °í¼ÓÈ: Demand paging5.2 ÇÁ·Î¼¼½º Åë½Å_°øÀ¯ ¸Þ¸ð¸®_½Ã±×³Î_ÆÄÀÌÇÁ_¼ÒÄÏ5.3 ¹èŸÀû Á¦¾î5.4 µ¹°í µµ´Â ¹èŸÀû Á¦¾î 5.5 ¸ÖƼ ÇÁ·Î¼¼½º ¹× ¸ÖƼ ½º·¹µåColumn Ä¿³Î ½º·¹µå¿Í »ç¿ëÀÚ ½º·¹µåCHAPTER 6 ÀåÄ¡ Á¢±Ù6.1 µð¹ÙÀ̽º ÆÄÀÏ_ij¸¯ÅÍ ÀåÄ¡_ºí·Ï ÀåÄ¡Column ·çÇÁ ÀåÄ¡6.2 µð¹ÙÀ̽º µå¶óÀ̹ö _¸Þ¸ð¸® ¸Ê ÀÔÃâ·Â(MMIO)_Æú¸µ_ÀÎÅÍ·´Æ®Column ÀϺη¯ Æú¸µÀ» »ç¿ëÇÏ´Â °æ¿ì6.3 µð¹ÙÀ̽º ÆÄÀϸíÀº ¹Ù²î±â ¸¶·ÃCHAPTER 7 ÆÄÀÏ ½Ã½ºÅÛ 7.1 ÆÄÀÏ Á¢±Ù ¹æ¹ý7.2 ¸Þ¸ð¸® ¸Ê ÆÄÀÏ7.3 ÀϹÝÀûÀÎ ÆÄÀÏ ½Ã½ºÅÛ7.4 ÄõÅÍ(¿ë·® Á¦ÇÑ) 7.5 ÆÄÀÏ ½Ã½ºÅÛ Á¤ÇÕ¼º À¯Áö_Àú³Î¸µÀ» »ç¿ëÇÑ ¿À·ù ¹æÁö_Ä«ÇÇ ¿Â ¶óÀÌÆ®·Î ¿À·ù ¹æÁö_¹¹´Ï ¹¹´Ï Çصµ ¹é¾÷7.6 Btrfs¿¡¼ Á¦°øÇÏ´Â ÆÄÀÏ ½Ã½ºÅÛÀÇ °í±Þ ±â´É_½º³À¼¦_¸ÖƼ º¼·ýColumn ¾î¶² ÆÄÀÏ ½Ã½ºÅÛÀ» »ç¿ëÇϸé ÁÁÀº°¡?7.7 µ¥ÀÌÅÍ ¼Õ»ó °¨Áö¿Í º¹±¸7.8 ±âŸ ÆÄÀÏ ½Ã½ºÅÛ_¸Þ¸ð¸® ±â¹ÝÀÇ ÆÄÀÏ ½Ã½ºÅÛ_³×Æ®¿öÅ© ÆÄÀÏ ½Ã½ºÅÛ_procfs_sysfsCHAPTER 8 ¸Þ¸ð¸® °èÃþ8.1 ij½Ã ¸Þ¸ð¸®_ÂüÁ¶ÀÇ Áö¿ª¼º_°èÃþÇü ij½Ã ¸Þ¸ð¸®_ij½Ã ¸Þ¸ð¸® Á¢±Ù ¼Óµµ ÃøÁ¤Simultaneous Multi Threading (SMT)Column º¯È¯ »öÀÎ ¹öÆÛ(Translation Lookaside Buffer)8.2 ÆäÀÌÁö ij½Ã_ÆäÀÌÁö ij½Ã È¿°ú8.3 ¹öÆÛ Ä³½Ã8.4 ¾²±â ŸÀ̹Ö8.5 Á÷Á¢ ÀÔÃâ·Â8.6 ½º¿Ò8.7 Åë°è Á¤º¸CHAPTER 9 ºí·Ï °èÃþ9.1 ÇÏµå µð½ºÅ©ÀÇ Æ¯Â¡9.2 ºí·Ï °èÃþÀÇ ±âº» ±â´É9.3 ºí·Ï ÀåÄ¡ÀÇ ¼º´É ÁöÇ¥ ¹× ÃøÁ¤ ¹æ¹ý_ÇϳªÀÇ ÇÁ·Î¼¼½º¸¸ ÀÔÃâ·ÂÀ» È£ÃâÇÏ´Â °æ¿ì_¿©·¯ ÇÁ·Î¼¼½º°¡ º´·Ä·Î ÀÔÃâ·ÂÀ» È£ÃâÇÏ´Â °æ¿ì Column ÃßÃøÇÏÁö ¸»°í, ÃøÁ¤Çضó_¼º´É ÃøÁ¤ µµ±¸: fio9.4 ºí·Ï °èÃþÀÌ ÇÏµå µð½ºÅ© ¼º´É¿¡ ÁÖ´Â ¿µÇâ_ÆÐÅÏ A ÃøÁ¤ °á°ú_ÆÐÅÏ B ÃøÁ¤ °á°úColumn ¹«¾ùÀ» À§ÇÑ ¼º´É ÃøÁ¤Àΰ¡_±â¼ú Çõ½Å°ú °ü·ÃµÈ ºí·Ï °èÃþÀÇ º¯È9.5 ºí·Ï °èÃþÀÌ NVMe SSDÀÇ ¼º´É¿¡ ¹ÌÄ¡´Â ¿µÇâ_ÆÐÅÏ A ÃøÁ¤ °á°ú_ÆÐÅÏ B ÃøÁ¤ °á°úColumn ½ÇÁ¦ ¼º´É ÃøÁ¤CHAPTER 10 °¡»óÈ ±â´É10.1 °¡»óÈ ±â´ÉÀ̶õ ¹«¾ùÀΰ¡10.2 °¡»óÈ ¼ÒÇÁÆ®¿þ¾î10.3 ÀÌ Àå¿¡¼ »ç¿ëÇÏ´Â °¡»óÈ ¼ÒÇÁÆ®¿þ¾îColumn Áßø °¡»óÈ10.4 °¡»óȸ¦ Áö¿øÇÏ´Â CPU ±â´É_QEMU£«KVM Á¶ÇÕColumn CPU °¡»óÈ ±â´ÉÀÌ ¾ø´Â °æ¿ìÀÇ °¡»óÈ 10.5 °¡»ó ¸Ó½ÅÀº È£½ºÆ® OS¿¡¼ ¾î¶»°Ô º¸À̴°¡?_È£½ºÆ® OS¿¡¼ º» °Ô½ºÆ® OS_¿©·¯ ¸Ó½ÅÀ» ½ÇÇàÇÏ´Â °æ¿ìColumn IaaSÀÇ ¿ÀÅ佺ÄÉÀÏ ¸ÞÄ¿´ÏÁò10.6 °¡»óÈ È¯°æÀÇ ÇÁ·Î¼¼½º ½ºÄÉÁÙ¸µ_¹°¸® ±â±â¿¡¼ ÇÁ·Î¼¼½º°¡ µ¿ÀÛÇÏ´Â °æ¿ì_Åë°è Á¤º¸10.7 °¡»ó ¸Ó½Å ¹× ¸Þ¸ð¸® °ü¸®_°¡»ó ¸Ó½ÅÀÌ »ç¿ëÇÏ´Â ¸Þ¸ð¸®10.8 °¡»ó ¸Ó½Å°ú ÀúÀå ÀåÄ¡_°¡»ó ¸Ó½Å°ú ÀúÀå¼Ò ÀÔÃâ·Â_ÀúÀå ÀåÄ¡ ¾²±â¿Í ÆäÀÌÁö ij½Ã_¹Ý°¡»óÈ ÀåÄ¡¿Í virtio_blkColumn È£½ºÆ® OS¿Í °Ô½ºÆ® OSÀÇ ÀúÀå¼Ò ÀÔÃâ·Â ¼º´É ¿ªÀü Çö»ó10.9 virtio_blk ±¸Á¶Column PCI Æнº½º·çCHAPTER 11 ÄÁÅ×ÀÌ³Ê 11.1 °¡»ó ¸Ó½Å°ú Â÷ÀÌÁ¡11.2 ÄÁÅ×ÀÌ³Ê Á¾·ù11.3 ³×ÀÓ½ºÆäÀ̽º_ÇÁ·Î¼¼½ºID ³×ÀÓ½ºÆäÀ̽º_ÄÁÅ×ÀÌ³Ê Á¤Ã¼11.4 º¸¾È À§Ç輺CHAPTER 12 cgroup12.1 cgroupÀ¸·Î Á¦¾î °¡´ÉÇÑ ÀÚ¿ø12.2 »ç¿ë ¿¹: CPU »ç¿ë ½Ã°£ Á¦¾îColumn cgroup ±â´ÉÀÌ ¸®´ª½º Ä¿³Î¿¡ Æ÷ÇÔµÈ °úÁ¤12.3 ÀÀ¿ë ¿¹Column cgroup v2CHAPTER 13 ÀÌ Ã¥¿¡¼ ¹è¿ì´Â ³»¿ë°ú È°¿ë¹ý