실전 활용팁, KVM 가상화에서 CPU의 HyperThread 기능을 사용할 것인가?

실전 활용팁, KVM 가상화에서 CPU의 HyperThread 기능을 사용할 것인가?
Best Practice, HyperThread feature CPU provides is helpful for KVM virtualization?

가상화 플랫폼에서는 CPU를 포함한 모든 하드웨어 자원이 그야말로 가상화 되기 때문에 컴퓨팅 자원에 대한 수량을 산정하는게 쉽지는 않습니다. 과연 vCPU를 하나의 독립적인 CPU 자원으로 산정해야 하느냐하는 부분과 vCPU 2개가 물리 CPU 1개보다 나은 결과를 가져오는가 하는 등의 이슈도 남아있지요. 그렇더라도 아직까지는 vCPU 수로 컴퓨팅 파워는 산정하는 분위기 인거 같습니다.

vCPU 산정에서 빼놓을 수 없는것이 바로 물리 CPU Socket의 수, 물리 CPU의 Core 수, 그리고 HyperThread(이하 HT) 기능의 활용 여부등일겁니다. 기본적으로 여러 가상머신이 동시에 실행되는 환경이기 때문에 특별히 CPU isolation 과 pinning을 하지 않는한 어차피 vCPU : CPU가 1:1 대응은 어렵습니다. 다만 한가지 지켜져야 할 부분은 “성능상의 이점이 없기 때문에” 개별 가상머신의 vCPU 수는 호스트의 물리적인 CPU 수와 같거나 작아야 한다는 것입니다.

예를 들어, 물리적인 CPU가 32개라면 단일 가상머신에 할당할 최대 vCPU수는 32개 또는 이하여야 한다는 말입니다. (논리적으로는 그 이상도 가능하지만 장점이 없죠)

여기서 고민은 그럼 물리적인 CPU에 HT 기능을 사용해야하는가일텐데요, 답변은 No 그리고 Yes 입니다.

No)  HT의 경우 태생적 특징으로 인해 실제로 물리 Core만큼의 성능을 제공해주지 않습니다. HT의 경우 Workload에 따라 상당한 편차를 가져오지만 대체로 15~30% 성능 개선이 있다고 알려져 있습니다. 즉 총 16 Core 시스템의 경우 HT 활성화시 최대 21(16 * 130%)개의 CPU 성능을 보인다고 생각하면 되겠습니다. 여기서 사용자와 관리자(또는 Automation system)에게 오해를 줄 수 있습니다. HT 활성화시 이들은 CPU가 32개라고 생각하고 Allocation 해줄 가능성이 높은데 이게 Overall Performance에 역효과를 가져올 수 있다는 것 입니다. 추가적으로 Interrupt가 많은 환경에서 HT가 큰 도움을 주지 않는다고 합니다. 따라서 대량의 KVM 가상화를 구현하는 환경에서는 Production 기준 HT 비활성화를 권장합니다.

Yes) 그렇다고 항상 No는 아닙니다. 만약 가상머신내 Workload가 CPU intensive하거나 SMP 환경에 맞춰 개발된 경우라면 HT 활성화가 더 좋은 결과를 가져올 수 있습니다. HPC workload나 Big-Data 등 대량의 데이터 처리 솔루션등이 실행되는 경우라면 HT가 도움을 줄 수 있습니다.

따라서 자신의 Workload를 파악하고 그에 맞춰 HT 활성화를 고민하시면 되겠습니다. 물론 위 내용은 여러 정보를 바탕으로 한 제 개인 의견이므로 참고용으로만 삼으시기 바랍니다.