실험 환경
- Host(Node) : 8cores 2sockets, 단일 VM 최대 32vCPU까지 할당 가능. 호스트는 총 16 물리코어이고, 하이퍼쓰레딩 기능이 활성화 상태
- 가상머신 : CPU Spec을 8Core, 16Core, 32Cores로 변경 예정(CPU Online 증설)
- 부하 발생 방법 : CPU-Z Stress CPU : CPU Usage 100% 발생
부하발생 전 호스트 및 가상머신 CPU 사용률 그래프분석
3번 호스트에 VM을 위치시키고 CPU Stress 발생시킬 예정.
별 다른 작업 없는 상태에서 호스트의 CPU 사용률은 15% 내외의 사용율을 보이고 있으며, 부하발생용 VM은 1% 내외, 호스트 에서 동작중인 다른 VM은 15%내외 사용률을 보이고 있음. CPU 부하가 없을 때, CPU Ready Time(%)는 각각 0%를 기록중이다.
- CPU Ready Time(%) : CPU 자원에 대한 Race Condition 발생 시, CPU를 사용하기 위한 대기시간을 나타내는 지표.
VM Spec: 8vCPU 100% 부하 발생 : 10분 수행, 15:40 ~ 15:50
VM Spec: 16vCPU 100% 부하 발생 : 10분 수행, 15:55 ~ 16:05
VM Spec: 32vCPU 100% 부하 발생 : 10분 수행, 16:10 ~ 16:20
Result Review
아래 표를 왼쪽에서 오른쪽으로 시간순서대로 보면 총 3번의 부하 발생구간이 있다. 순서대로 8vCPU-16vCPU-32vCPU 구간으로, 위 10분 부하 발생 부분의 컴퓨터 uptime을 통해 순서대로 발생했음을 알 수 있다.
VM CPU 스탯 그래프에는 청록색 그래프와 연두색 그래프가 있는데, 각각 CPU 사용률(%)과 CPU Ready Time(%) 지표 이다. 호스트 CPU 사용률 그래프는 호스트(Node)의 CPU 사용률 그래프이다.
- 8vCPU 구간 : 부하발생 VM에서 CPU 100%를 사용하면서 호스트의 CPU 사용률이 대략 50%정도 상승하였음. 다른 VM CPU 사용률에는 영향을 미치지 않았음. 이를 통해 부하발생 VM에서는 실제 장비의 CPU 전체 성능의 50% 성능을 사용한 것을 알 수 있음
- 16vCPU 구간 : 부하발생 VM에서 CPU 100%를 사용하면서 호스트 CPU 사용률이 99%~100%에 도달하였음. 다른 VM CPU의 CPU 사용률은 비슷하지만, CPU Ready Time이 소폭 발생함을 확인함(0.0x% 수준). 부하 발생 VM이 실제 장비 CPU 전체 성능의 약 100% 성능을 사용한 것을 알 수 있음.
- 32vCPU 구간 : 부하발생 VM에서 CPU 100%를 사용하려고 하지만, 실제 85~90% 정도의 CPU 사용률을 보였음. 호스트의 CPU 사용률은 100%에 도달하였음. 부하발생 VM이 실제로 100%를 사용하고 싶지만 물리적인 CPU 성능이 100%이상의 과활성 상태라 CPU Ready Time이 발생하면서 성능을 온전히 발휘하지 못한 것으로 보임. 같은 호스트 내 다른 VM의 CPU Ready Time과 부하발생 VM의 CPU Ready Time이 동시에 증가한 것으로 보아 CPU Race Condition 상태임을 알 수 있음.
- 16vCPU와 32vCPU 구간 차이에 대한 생각 : CPU 스케쥴링은 커널에 의해 시분할(아주작은시간을 쪼개서 나누어줌)로 이루어 지는 것이다. VM에 할당해 주는 vCPU는 실제 물리 CPU파워에 해당하는 만큼의 CPU Time을 할당해주는 것으로 이해할 수 있다. CPU-Z 부하발생은 할당된 Core만큼의 스레드를 통해 부하를 발생시킨다. 16vCPU 부하발생에서는 16 Core 멀티스레드의 100%의 성능을 발생시켰고, 호스트의 CPU를 100%까지 사용하며 약간의 Race Condition 상태를 보였다. Nutanix에서 VM에 대한 CPU 스케쥴링을 상당히 잘 처리한다고 생각이 드는 대목이었다. 32vCPU 부하발생에서는 VM에서는 32 Core 멀티스레드의 100%를 요구하였지만, 실제 물리 CPU에서 그 요구를 처리할 수 있는 한계를 상당히 넘어선 상태이기 때문에 CPU Ready Time이 많이 발생하였고, CPU 사용률도 85~90% 수준을 보인 것으로 보인다. 이는 하이퍼쓰레딩 Enable에 의한 성능 향상분이 반영된 것이라고 생각해 볼 수 있었다. CPU-Z에서 실제 벤치마킹 성능에 대한 지표를 확인해 보면, 16vCPU에선 약4500의 점수를, 그리고 32vCPU에서는 약 5400의 점수를 보여준다. 대략 20%정도의 성능을 더 발휘하고 있다고 보여지는데, 통상알려진 하이퍼 쓰레딩에 의한 성능 향상분으로 알려진 2~30% 범주에 들어가는 것 처럼 보인다.
결론
하이퍼바이저가 vCPU를 할당할 때, 하이퍼쓰레드된 코어를 VM에 할당하기 때문에 최대 할당가능한 vCPU가 물리 Cores * 2 만큼이 되는 것이다. 이 테스트를 하게된 계기가 그럼, 가상화에서 할당되는 Core는 실제 물리장비의 Core의 성능에 대비해서 쓰레드된 코어기 때문에 재수없을 경우 최대 절반의 성능밖에 낼 수 없는게 아닐까? 하는 의문에서 시작되었다. 테스트 결과를 보니, 그런 걱정은 단지 기우에 불과 했다는 것을 확인할 수 있었다. 그리고 가상화 기술이 CPU를 보다 효율적으로 사용하기위 잘 설계되었다는 것을 확인할 수 있었다.
'Nutanix' 카테고리의 다른 글
Nutanix CVM/AHV IP Change (0) | 2024.04.13 |
---|---|
Nutanix Volumes Controller Load Balance (0) | 2024.03.27 |
Nutanix - 분산 스토리지 패브릭(Distributed Storage Fabric, DSF) (0) | 2022.07.07 |