CPU 사용량 모니터링
호스트의 pCPU당 최적 vCPU 수는 사용 사례에 따라 다릅니다. 운영 중에는 XenServer® 환경의 성능을 모니터링하고 그에 따라 구성을 조정해야 합니다.
용어
이 영역에서는 때때로 서로 바꿔 사용할 수 있는 다양한 용어가 있습니다. 이 문서에서는 다음 용어와 의미를 사용합니다.
-
CPU (물리적 CPU): 프로세서 소켓에 연결된 물리적 하드웨어.
-
코어: 독립적인 실행 스레드 하나를 처리할 수 있는 물리적 처리 장치로, 해당 실행을 지원하는 데 필요한 모든 기능 단위를 포함합니다.
-
하이퍼스레드: 독립적인 실행 스레드 하나를 처리할 수 있는 물리적 처리 장치로, 다른 하이퍼스레드("형제 스레드"라고도 함)와 일부 기능 단위를 공유합니다.
-
논리적 CPU (pCPU): 레지스터 세트와 명령어 포인터를 포함하는 독립적인 실행 스레드를 처리할 수 있는 단위입니다. 하이퍼스레드가 활성화된 시스템에서는 하이퍼스레드이며, 다른 경우에는 코어입니다.
-
호스트 pCPU: 호스트에 있는 논리적 CPU의 총 개수.
-
vCPU (가상 CPU): 가상화된 논리적 CPU입니다. VM에 제공되는 독립적인 실행 스레드를 처리할 수 있는 논리적 단위입니다. XenServer에서 vCPU는 스케줄러를 사용하여 특정 시점에 어떤 vCPU가 어떤 pCPU에서 실행되는지 결정함으로써 pCPU를 "시간 공유"할 수 있습니다.
-
게스트 vCPU: VM 내의 게스트 운영 체제에 제공되는 vCPU.
-
Dom0 vCPU: XenServer 제어 도메인(dom0)에 표시되는 vCPU.
-
호스트 총 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
-
**runstate_concurrency_hazard > 0%**는 때때로 하나 이상의 vCPU가 실행 중인 동안 다른 하나 이상의 vCPU가 실행되기를 원하지만 pCPU 시간을 얻지 못함을 나타냅니다. vCPU가 조정을 해야 하는 경우 이 동작은 성능 문제를 야기합니다.
-
runstate_concurrency_hazard가 100%에 가까워지는 상황은 피해야 합니다.권장 조치:성능 문제가 있는 경우 다음 조치 중 하나를 수행하십시오.
-
VM의 vCPU 수를 줄입니다.
-
VM을 다른 호스트로 이동합니다.
-
다른 VM을 마이그레이션하거나 해당 vCPU 수를 줄여서 호스트의 총 vCPU 수를 줄입니다.
-
runstate_partial_contention
-
**runstate_partial_contention > 0%**는 적어도 하나의 vCPU가 실행되기를 원하지만 pCPU 시간을 얻을 수 없음을 나타내며, 또한 적어도 하나의 다른 vCPU가 차단되었음(할 일이 없거나 I/O 완료를 기다리고 있기 때문)을 나타냅니다.
-
**runstate_concurrency_hazard approaching 100%**는 피해야 할 상황입니다.권장 조치:스토리지 공급업체에서 제공하는 백엔드 메트릭을 확인하여 백엔드 I/O 스토리지 서버가 과부하되었는지 확인합니다. 스토리지 서버가 과부하되지 않았고 성능 문제가 있는 경우, 다음 조치 중 하나를 수행하십시오.
-
VM의 vCPU 수를 줄입니다.
-
VM을 다른 호스트로 이동합니다.
-
다른 VM을 마이그레이션하거나 해당 vCPU 수를 줄여서 호스트의 총 vCPU 수를 줄입니다.
-
runstate_full_contention
-
**runstate_full_contention > 0%**는 때때로 vCPU가 모두 동시에 실행되기를 원하지만 어느 것도 pCPU 시간을 얻을 수 없음을 나타냅니다.
-
runstate_full_contention이 100%에 가까워지는 상황은 피해야 합니다.권장 조치:성능 문제가 있는 경우 다음 조치 중 하나를 수행하십시오.
-
VM의 vCPU 수를 줄입니다.
-
VM을 다른 호스트로 이동합니다.
-
다른 VM을 마이그레이션하거나 해당 vCPU 수를 줄여 호스트의 총 vCPU 수를 줄입니다.
-
호스트 pCPU 사용량이 100% 미만인 경우
호스트 pCPU 사용량이 100%에 도달하지 않는 경우, 다음 VM 메트릭을 사용하여 VM에 적절한 수의 vCPU가 있는지 결정하십시오.
runstate_fullrun
-
**runstate_fullrun = 0%**는 vCPU가 동시에 전혀 사용되지 않음을 나타냅니다.권장 조치:이 VM의 vCPU 수를 줄입니다.
-
**0% < runstate_fullrun < 100%**는 vCPU가 때때로 동시에 사용됨을 나타냅니다.
-
**runstate_fullrun = 100%**는 vCPU가 항상 동시에 사용됨을 나타냅니다.권장 조치:runstate_fullrun < 100%가 될 때까지 이 VM의 vCPU 수를 늘릴 수 있습니다. vCPU 수를 더 이상 늘리지 마십시오. 그렇지 않으면 호스트가 pCPU 사용량의 100%에 도달할 경우 동시성 위험이 발생할 가능성이 높아질 수 있습니다.
runstate_partial_run
-
**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이 동시성 위험 상태에 빠질 위험이 커질 수 있습니다.