안녕하세요.
CentOS7 KVM으로 구성된 Guest OS의 CPU 사용률 증가로 문의드립니다.
서버의 구성은
Host : 128G Mem, 480G SSD * 2 (Raid 1), 480G SSD * 6 (Raid 5) 구성입니다.
Guest : Host의 딱 반씩 사용하고 있습니다.
OS 는 Raid1 에 설치, Raid5 에는 Data 영역으로 사용중입니다.
Swap 설정은 Host, Guest 각각 32G 입니다.
이때 Host의 Swap이 free 가 0 일 경우 Guest의 성능저하가 발생합니다. 이때 Host의 물리메모리는 여유가 있었고 swappiness=60 으로 설정되어 있습니다.
위와 같은 현상은 파악하여 Swap을 64G로 올려주니 동일 발생하지는 않았습니다. (물론 swappiness를 줄여주면 해결될지도 모르겠습니다)
그러나 왜 성능저하가 발생했는지를 모르겠습니다. 알고싶어요,.,.
혹시라도 이유를 알고 계신분이 계시면 도움 부탁드립니다.
감사합니다.
ÀÚ¼¼ÇÑ ¼³¸íÀº SWAP ¸Þ¸ð¸® °Ë»öÇÏ½Ã¸é ¸¹ÀºÀÚ·áµéÀÌ ÀÖÀ¸´Ï Âü°í ÇÏ½Ã¸é µÉ °Í °°½À´Ï´Ù.
https://mozi.tistory.com/424
GuestÀÇ swap°ú ¸Þ¸ð¸®´Â ÃæºÐÈ÷ ¿©À¯°¡ ÀÖ´Â »óÅÂÀε¥µµ ºÒ±¸ÇÏ°í
Guest°¡ Host swapÀÇ ¿µÇâÀ» ¹Þ¾Æ¼ ±Ã±ÝÇÕ´Ï´Ù.
guest 64G * 2vm À̶ó°í Çϸé
host ¿¡¼ OS°¡ Á¡À¯ÇÏ°í ÆÄÀÏ Ä³½Ì µîÀ¸·Î ÀÎÇؼ ½ÇÁ¦ guest¿¡ ÇÒ´ç °¡´ÉÇÑ ¸Þ¸ð¸®´Â ¸¹¾Æ¾ß 60G Á¤µµ µÇÁö ¾ÊÀ»±î »ý°¢µË´Ï´Ù.
¾Æ¹«Æ° host ¿¡¼´Â ÀÚ±â ÀÚ½ÅÀÌ ½á¾ß ÇÒ ¸Þ¸ð¸® + guest ¿¡¼ ¿¹¾àÇÒ ¸Þ¸ð¸® Çϸé
¹°¸® ¸Þ¸ð¸® º¸´Ù ¸¹Àº ¸Þ¸ð¸®¸¦ »ç¿ëÇØ¾ß Çϱ⠶§¹®¿¡ ÇÊ¿¬ÀûÀ¸·Î ½º¿ÒÀÌ ¹ß»ýÇÏ°Ô µÇ°í
±×·Î ÀÎÇØ ¼º´É ÀúÇÏ°¡ »ý±æ °ÍÀ¸·Î »ý°¢µË´Ï´Ù.
swapÀ¸·Î À̵¿µÇ´Â ¸Þ¸ð¸® ¿µ¿ªÀº Inactive(Anon)ÀÔ´Ï´Ù. file systemÀÇ cache¸¦ Á¦¿ÜÇÑ ÇÁ·Î¼¼½ºÀÇ ÃÖ±Ù ÂüÁ¶µÇÁö ¾ÊÀº ¸Þ¸ð¸®°¡ ÀϹÝÀûÀ¸·Î Inactive(Anon)ÀÌ°í, qemu ÇÁ·Î¼¼½ºÀÇ ¸Þ¸ð¸® ¶ÇÇÑ ÀÌ ´ë»óÀÌ µÉ ¼ö ÀÖ½À´Ï´Ù.
»ç¼öÁö¸ù ´Ô ¸»¾¸´ë·Î swap free ¿ë·®ÀÌ 0ÀÌ µÇ¸é, kernelÀÌ ¸Þ¸ð¸® ÇÒ´ç ¿äûÀ» ¹Þ°Ô µÇ¸é ¸Þ¸ð¸® ÇÒ´ç ¿äûÀ» °ÅºÎÇÒ ¼ö ¾ø±â¿¡ memory free, cache ¶Ç´Â swapÀ» °Ë»öÇÑ µÚ trade off¸¦ °ÅÃÄ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ°Ô µË´Ï´Ù. OSÀÇ ´ëºÎºÐÀÇ µ¿ÀÛÀº ¸Þ¸ð¸® ÇÒ´ç°ú I/O ó¸®Àε¥, I/O 󸮿¡ ½Ã°£ÀÌ ¸¹ÀÌ °É¸®¹Ç·Î °¡±ÞÀû ¸Þ¸ð¸®¿¡¼ ¸ðµç °ÍÀ» ó¸®ÇÏ·Á°í ÇÕ´Ï´Ù. ½Ã½ºÅÛÀÇ ¼Óµµ ¶ÇÇÑ ¸Þ¸ð¸® º¹»ç ¼Óµµ°¡ ´ëº¯ÇÑ´Ù°í ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·±µ¥ swap free±îÁö ¸ðµç ¸Þ¸ð¸®¸¦ ´Ù »ç¿ëÇÏ¿´´Ù°í ÇÑ´Ù¸é, cache±îÁö ¼ÒÁøÇϱâ À§ÇØ flush¸¦ ½ÃµµÇÒ °ÍÀÌ°í, ¸¸¾à flushÇÒ cache±îÁö ´Ù ¼ÒÁøÇÏ¿´´Ù¸é file systemÀº diskÀÇ read¿Í ¸Þ¸ð¸® ¿äûÀ», KVM°ú ±âŸ ÇÁ·Î¼¼½ºµéÀº ¸Þ¸ð¸® ÇÒ´ç ¿äûÀ» kernel·Î ÇÏ°Ô µË´Ï´Ù. I/OÀÇ ¼Óµµ´Â ¸Þ¸ð¸®º¸´Ù ¸Å¿ì ´À¸®¸ç, I/O´Â blockingÀ» ÇÒ È®·üÀÌ ³ô¾ÆÁö¹Ç·Î ¸¸¾à ÀÌ·± »óȲÀÌ µÇ¸é ½Ã½ºÅÛÀÇ Ã³¸® ¼Óµµ´Â disk I/O ¼Óµµ¿¡ °ÅÀÇ ¹ÌÄ¡°Ô µË´Ï´Ù. ÀÌ·± Çö»óÀÌ °è¼ÓµÇ¸é¼ Á¤¸» ÇÒ´çÇÒ ¸Þ¸ð¸®°¡ ´õ ÀÌ»ó Á¸ÀçÇÏÁö ¾ÊÀ» °æ¿ì kernelÀº ½Ã OOMÀ» ½ÃµµÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ »ç¼öÁö¸ù ´Ô ½Ã½ºÅÛÀº ±× Á¤µµ±îÁö °£ °Í °°Áö´Â ¾Ê½À´Ï´Ù. ¾ÆÁ÷ cache ¸Þ¸ð¸®°¡ ³²¾Æ ÀÖ¾î¼ ±×·± °ÍÀÏÁöµµ ¸ð¸£°Ú½À´Ï´Ù.
Àû¾îµµ VMÀÇ ¼º´É ÀúÇϸ¦ ¸·°í ½Í´Ù¸é VMÀ» À§ÇØ hugepage·Î °Á¦ ÇÒ´çÇÏ´Â °ÍÀ» ÃßõÇÕ´Ï´Ù. VM ½ÇÇà ½Ã ¸Þ¸ð¸®°¡ ÇÒ´çµÇ´Â °ÍÀÌ ¾Æ´Ï³Ä°í ¹Ý¹®ÇÏ½Ç ¼ö ÀÖÀ¸³ª, ¸Þ¸ð¸®°¡ ÇÒ´çµÇ´Â °ÍÀº °¡»ó ¸Þ¸ð¸®ÀÌÁö ½ÇÁ¦ ¹°¸® ¸Þ¸ð¸®°¡ ¾Æ´Õ´Ï´Ù. mappingÀÌ ÀϾÁöµµ ¾Ê¾Ò°í, qemu ¶ÇÇÑ ÇÁ·Î¼¼½ºÀ̱⠶§¹®¿¡ swap ´ë»óÀÌ µÉ ¼ö ÀÖ½À´Ï´Ù. VMÀÌ »ç¿ëÇÏ´Â ¸Þ¸ð¸®°¡ swapÀÌ µÈ´Ù¸é ¾È ±×·¡µµ VM kernel¿¡¼ mappingÀ» ó¸®Çϱâ À§ÇØ ´Ù¼öÀÇ stepÀÌ °É¸®´Â °ÍÀ» swap page-inÀ¸·Î ÀÎÇØ I/O ¼Óµµ¸¸ÅÀ̳ª ±â´Ù·Á¾ß ÇÒ °ÍÀÔ´Ï´Ù. VMÀÌ »ç¿ëÇÏÁö ¾ÊÀº ¸Þ¸ð¸® °ø°£ÀÌ ¾Æ½¬¿ïÁö ¸ð¸£°ÚÁö¸¸ Àû¾îµµ VMÀº º°µµÀÇ °ø°£¿¡¼ Á¤»óÀûÀ¸·Î µ¿ÀÛÇϱâ À§Çؼ´Â hugepage·Î ¸Þ¸ð¸® ¿µ¿ªÀ» È®º¸ÇØ Áֽô °ÍÀÌ ÁÁ½À´Ï´Ù.
Ãß°¡ÀûÀ¸·Î swapÀÇ ¿¹¹æÀ» À§ÇØ min_free_kbytes °ªÀ» ´Ã·ÁÁֽðí, vfs_cache_pressure °ªÀ» 100 ÀÌ»ó ´Ã·Á cacheÀÇ flush¸¦ Á» ´õ À¯µµÇØ Áֽñ⠹ٶø´Ï´Ù. ½Ã½ºÅÛ¿¡¼ swap »ç¿ëÀº ¸Þ¸ð¸® ¾Ð¹ÚÀ¸·Î ¹Û¿¡ º¼ ¼ö ¾ø½À´Ï´Ù. swap »ç¿ëÀ¸·Î ¼º´É ÀúÇÏ°¡ ¹ß»ýÇÑ´Ù¸é ±× ½Ã½ºÅÛÀº Áö¼ÓÀûÀÎ swap »ç¿ë¿¡ ¿µÇâ¹ÞÀ» ¼ö¹Û¿¡ ¾øÀ» °ÍÀÔ´Ï´Ù. ¸¸¾à, ÀÌ·¸°Ô Á¶Á¤ ÈÄ¿¡µµ swap »ç¿ëÀÌ ÀÖÀ» °æ¿ì ¸Þ¸ð¸® È®ÀåÀ» ±ÇÇص帳´Ï´Ù.