CPU 사용량 모니터링
호스트의 pCPU당 최적 vCPU 수는 사용 사례에 따라 다릅니다. 작동 중에는 XenServer® 환경의 성능을 모니터링하고 그에 따라 구성을 조정해야 합니다.
용어
이 영역에는 때때로 상호 교환적으로 사용되는 다양한 용어가 있습니다. 이 문서에서는 다음 용어와 의미를 사용합니다.
- CPU (물리적 CPU): 프로세서 소켓에 연결된 물리적 하드웨어.
- 코어: 하나의 독립적인 실행 스레드를 처리할 수 있는 물리적 처리 장치로, 해당 실행을 지원하는 데 필요한 모든 기능 단위를 포함합니다.
- 하이퍼스레드: 하나의 독립적인 실행 스레드를 처리할 수 있는 물리적 처리 장치로, 다른 하이퍼스레드(일명 “형제 스레드”)와 일부 기능 단위를 공유합니다.
- 논리적 CPU (pCPU): 레지스터 세트와 명령어 포인터를 포함하는 독립적인 실행 스레드를 처리할 수 있는 단위입니다. 하이퍼스레드가 활성화된 시스템에서는 하이퍼스레드이며, 다른 경우에는 코어입니다.
- 호스트 pCPU: 호스트에 있는 논리적 CPU의 총 개수.
- vCPU (가상 CPU): 가상화된 논리적 CPU입니다. VM에 제공되는 독립적인 실행 스레드를 처리할 수 있는 논리적 단위입니다. XenServer에서 vCPU는 스케줄러를 사용하여 특정 시점에 어떤 vCPU가 어떤 pCPU에서 실행되는지 결정함으로써 pCPU를 “시간 공유”할 수 있습니다.
- 게스트 vCPU: VM 내의 게스트 운영 체제에 제공되는 vCPU.
- Dom0 가상 CPU: XenServer 제어 도메인(dom0)에 보이는 가상 CPU입니다.
- 호스트 총 vCPU: 호스트의 dom0 vCPU와 모든 게스트 vCPU의 합계.
일반적인 동작
호스트의 총 vCPU 수는 dom0에서 사용되는 vCPU 수에 호스트의 모든 VM에 할당된 총 vCPU 수를 더한 값입니다. 호스트의 vCPU 수를 늘리면 다음과 같은 유형의 동작을 경험할 수 있습니다.
-
호스트의 총 vCPU 수가 호스트의 pCPU 수보다 작거나 같을 때, 호스트는 VM이 요청하는 만큼의 CPU를 항상 제공합니다.
-
호스트의 총 vCPU 수가 호스트의 pCPU 수보다 많을 때, 호스트는 호스트 pCPU 시간을 VM과 공유합니다. 이 동작은 일반적으로 VM에 영향을 미치지 않습니다. VM의 vCPU는 대개 일부 시간 동안 유휴 상태이며, 대부분의 경우 호스트가 100% pCPU 사용률에 도달하지 않기 때문입니다.
-
호스트의 총 vCPU 수가 호스트의 pCPU 수보다 많고 호스트가 때때로 100% 호스트 pCPU 사용률에 도달하는 경우, VM의 vCPU는 스파이크 동안 요청하는 만큼의 pCPU를 받지 못합니다. 대신, 이러한 스파이크 동안 VM은 호스트에서 사용 가능한 pCPU의 일부를 받기 위해 속도가 느려집니다.
-
호스트의 총 vCPU 수가 호스트의 pCPU 수보다 많고 호스트가 자주 100% 호스트 pCPU 사용률에 도달하는 경우, VM의 vCPU는 호스트에서 사용 가능한 CPU의 일부를 받기 위해 지속적으로 속도가 느려집니다. VM에 실시간 요구 사항이 있는 경우 이 상황은 이상적이지 않으며, 호스트의 vCPU 수를 줄여 해결할 수 있습니다.
호스트의 최적 vCPU 수는 VM 사용자가 VM 속도를 어떻게 인식하는지에 따라 달라질 수 있으며, 특히 VM에 실시간 요구 사항이 있는 경우 더욱 그렇습니다.
CPU 정보 확인
호스트의 총 pCPU 수를 확인하려면 다음 명령을 실행하십시오.
xe host-cpu-info --minimal
현재 호스트의 총 vCPU 수(게스트 및 dom0)를 확인하려면 다음 명령을 실행하십시오.
xl vcpu-list | grep -v VCPU | wc -l
RRD 메트릭을 사용한 CPU 사용량 모니터링
XenServer는 VM의 vCPU가 어떻게 작동하는지 설명하는 RRD 메트릭을 제공합니다.
호스트 pCPU 사용률이 100%일 때
호스트가 100% 호스트 pCPU 사용률에 도달하는 경우, 다음 VM 메트릭을 사용하여 VM을 다른 호스트로 이동할지 여부를 결정하십시오.
실행 상태 동시성 위험
-
runstate_concurrency_hazard > 0%는 때때로 하나 이상의 vCPU가 실행 중인 동안 다른 하나 이상의 vCPU가 실행되기를 원하지만 pCPU 시간을 얻지 못함을 나타냅니다. vCPU가 조정을 해야 하는 경우, 이 동작은 성능 문제를 야기합니다.
-
runstate_concurrency_hazard가 100%에 가까워지는 상황은 피해야 할 상황입니다.
권장 조치:
성능 문제가 있는 경우 다음 조치 중 하나를 수행하십시오.
- VM의 vCPU 수를 줄입니다.
- VM을 다른 호스트로 이동합니다.
- 다른 VM을 마이그레이션하거나 해당 vCPU 수를 줄여 호스트의 총 vCPU 수를 줄입니다.
실행 상태_부분 경합
-
runstate_partial_contention > 0%는 하나 이상의 vCPU가 실행되기를 원하지만 pCPU 시간을 얻을 수 없으며, 동시에 하나 이상의 다른 vCPU가 차단되었음(할 일이 없거나 I/O 완료를 기다리는 중)을 나타냅니다.
-
runstate_concurrency_hazard가 100%에 가까워지는 상황은 피해야 할 상황입니다.
권장 조치:
스토리지 공급업체에서 제공하는 백엔드 메트릭을 확인하여 백엔드 I/O 스토리지 서버가 과부하되었는지 확인하십시오. 스토리지 서버가 과부하되지 않았고 성능 문제가 있는 경우 다음 조치 중 하나를 수행하십시오.
- VM의 vCPU 수를 줄입니다.
- VM을 다른 호스트로 이동합니다.
- 다른 VM을 마이그레이션하거나 해당 vCPU 수를 줄여 호스트의 총 vCPU 수를 줄입니다.
실행 상태_전체 경합
-
runstate_full_contention > 0%는 vCPU가 때때로 동시에 모두 실행되기를 원하지만 아무도 pCPU 시간을 얻을 수 없음을 나타냅니다.
-
runstate_full_contention이 100%에 근접하는 것은 피해야 할 상황입니다.
권장 조치:
성능 문제가 있는 경우, 다음 조치 중 하나를 취하십시오:
- VM에서 vCPU 수를 줄입니다.
- VM을 다른 호스트로 이동합니다.
- 다른 VM을 마이그레이션하거나 해당 VM의 vCPU 수를 줄여서 호스트의 총 vCPU 수를 줄입니다.
호스트 pCPU 사용량이 100% 미만일 때
호스트가 호스트 pCPU 사용량의 100%에 도달하지 않는 경우, 다음 VM 메트릭을 사용하여 VM에 적절한 수의 vCPU가 있는지 결정하십시오:
런스테이트_풀런
-
runstate_fullrun = 0%는 vCPU가 동시에 모두 사용되지 않음을 나타냅니다.
권장 조치:
이 VM에서 vCPU 수를 줄입니다.
-
0% < runstate_fullrun < 100%는 vCPU가 때때로 동시에 모두 사용됨을 나타냅니다.
-
runstate_fullrun = 100%는 vCPU가 항상 동시에 모두 사용됨을 나타냅니다.
권장 조치:
이 VM의 vCPU 수를 runstate_fullrun이 100% 미만이 될 때까지 늘릴 수 있습니다. vCPU 수를 더 이상 늘리지 마십시오. 그렇지 않으면 호스트의 pCPU 사용량이 100%에 도달할 경우 동시성 위험(concurrency hazard)의 가능성이 높아질 수 있습니다.
런스테이트_파셜_런
-
runstate_partial_run = 0%는 모든 vCPU가 항상 사용 중이거나 (full-run=100%) vCPU가 전혀 사용되지 않음을 (idle=100%) 나타냅니다.
-
0% < runstate_partial_run < 100%는 때때로 하나 이상의 vCPU가 차단됨을 나타냅니다. 이는 할 일이 없거나 I/O 완료를 기다리고 있기 때문입니다.
-
runstate_partial_run=100%는 항상 하나 이상의 vCPU가 차단되어 있음을 나타냅니다.
권장 조치:
백엔드 I/O 스토리지 서버가 과부하 상태인지 확인하십시오. 그렇지 않다면, VM에 vCPU가 너무 많을 수 있으며 이 VM의 vCPU 수를 줄일 수 있습니다. VM에 vCPU가 너무 많으면 호스트 CPU 사용량이 100%에 도달할 때 VM이 동시성 위험(concurrency hazard) 상태에 빠질 위험이 커질 수 있습니다.