가상화: vCPU를 하이퍼스레딩 호스트 CPU로 고정하시겠습니까?

가상화: vCPU를 하이퍼스레딩 호스트 CPU로 고정하시겠습니까?

저는 다음과 같은 CPU 토폴로지(소켓 1개, 코어 4개, 스레드 8개)를 갖는 Core i7-2600 CPU가 탑재된 Linux 서버에서 KVM/libvirt를 사용하고 있습니다.

Physical | Logical
---------+--------
Core 0   | 0, 4
Core 1   | 1, 5
Core 2   | 2, 6
Core 3   | 3, 7

나는 보통 이 호스트에서 각각 2개의 가상 CPU를 갖춘 3개의 가상 머신을 실행합니다. 캐시를 핫 상태로 유지하여 성능을 향상시키기 위해 VM의 vCore를 고정 호스트 코어에 고정하고 싶습니다.

이제 문제는 호스트 CPU가 하이퍼스레딩을 사용한다는 사실을 고려하여 VM 코어를 호스트 코어에 매핑하는 것입니다.

옵션 1: 물리적 호스트 코어당 VM 1개

VM1: logical cores 1, 5
VM2: logical cores 2, 6
VM3: logical cores 3, 7

이런 방식으로 VM의 두 가상 코어가 호스트 CPU의 형제 하이퍼스레드에 매핑됩니다. 두 호스트 코어가 일부 캐시를 공유하므로 게스트 코드는 캐시 지역성에서 이익을 얻습니다.

그러나 두 하이퍼스레드가 일부 기능 단위도 공유한다는 사실을 고려하면 계산 부하로 인해 서로 속도가 느려질 수 있습니다.

옵션 2: 분산 VM 코어

VM1: logical cores 1, 2
VM2: logical cores 3, 5
VM3: logical cores 6, 7

이 매핑은 VM이 두 개의 가상 코어 모두에서 계산 부하를 경험하는 경우 이 부하가 호스트에 있는 두 개의 별도 물리적 코어에 매핑된다는 장점이 있습니다. 해당 순간에 다른 VM이 로드되지 않는 경우 전자는 옵션 1을 사용하여 하나만 사용하는 대신 두 개의 물리적 코어를 사용할 수 있습니다.

VM은 모두 주로 웹 서비스(Nginx, MySQL, PHP-FPM)를 실행하므로 질문이 다소 이론적인 성격이라는 것을 알고 있지만 여전히 알고 싶습니다.

답변1

당신은 이것을 지나치게 생각하고 있을 수도 있습니다.

여기서 코어를 수동으로 할당하면 실제로 성능이 저하될 수 있습니다. VMware 환경에서는 매우 구체적인 요구 사항이 없으면 이를 수행하지 않지만 설명하신 워크로드 및 애플리케이션의 경우에는 필요하지 않습니다. KVM이 작업을 예약하고 완료하도록 하세요. 의심스러우면 더 많은 코어와 소켓을 구입하세요. 그러나 CPU는 이러한 소규모 배포에서는 제한 요소가 되지 않습니다.

답변2

옵션 1은 대부분의 경우 속도가 느려지지 않아야 하지만 OS와 프로그램은 작업 부하에 만족할 수 있습니다. 쌓여갈 수도 있습니다. 내 생각에는 이웃이 ~작은~ 속도 저하를 신경 쓰지 않는다면 옵션 2가 더 좋다고 생각합니다.

관련 정보