다른 하이퍼바이저(VMWare, KVM, Hyper-V 등)에서 가상 머신을 생성할 때 가상 머신에 할당된 모든 가상 프로세서 소켓(vCPU)이 표시되지 않는 경우가 있습니다. 우리의 경우 8개의 vCPU가 KVM 가상 머신에 할당되었고 Windows 10이 게스트 OS로 설치되었습니다. 그러나 Windows는 이러한 vCPU를 별도의 프로세서(코어가 아님)로 감지했으며 그 중 2개만 사용할 수 있었습니다.
2개의 코어만 사용하는 Windows 10 가상 머신
Windows 장치 관리자를 열면 할당된 모든 코어가 8개의 개별 가상 프로세서 QEMU 가상 CPU 버전 2.5 이상으로 표시되는지 확인할 수 있습니다. .
동시에 Windows 10 속성(컴퓨터 -> 속성) 및 작업 관리자는 2개의 QEMU 가상 프로세서만 사용할 수 있음을 보여줍니다.
즉, Windows 10은 몇 개를 추가하든 상관없이 2개의 코어만 사용할 수 있습니다. 동시에 동일한 하이퍼바이저에서 Windows Server 2016을 실행하는 가상 서버는 할당된 16개의 vCPU를 모두 볼 수 있습니다.
Windows에서 지원되는 프로세서 수
문제는 데스크톱 Windows 버전(Windows 10/8.1/7)에는 물리적 프로세서(소켓)의 최대 수에 대한 제한이 있다는 것입니다. 컴퓨터는 다음을 사용할 수 있습니다.
- Windows 10 Home – CPU 1개
- Windows 10 Professional – 2 CPU
- Windows 10 워크스테이션 – 최대 4개의 CPU
- Windows Server 2016 – 최대 64 CPU
그러나 이 제한은 코어 수와 관련이 없습니다. 가상 머신의 성능을 향상시키기 위해 더 많은 코어가 있는 프로세서를 사용할 수 있습니다. . 대부분의 하이퍼바이저는 vCPU를 프로세서, 프로세서 코어 또는 스레드로 제공할 수 있습니다. 즉, vCPU 8개 대신 vCPU 2개(소켓 2개)를 소켓당 4개로 추가할 수 있습니다. 다양한 하이퍼바이저에서 가상 프로세서를 코어로 할당하는 방법과 최신 프로세서에서 사용되는 NUMA 아키텍처에 가상 프로세서를 바인딩하는 방법을 살펴보겠습니다.
KVM에서 가상 코어 및 vCPU 관리
Windows 10을 실행하는 내 KVM 가상 머신에서 , 할당된 모든 가상 코어는 별도의 프로세서로 간주됩니다.
가상 머신에 할당된 모든 CPU 리소스를 사용하려면 8개의 vCPU 대신 2개의 스레드에서 1개의 8코어 프로세서, 각각 4개의 코어가 있는 2개의 vCPU 또는 4개의 코어가 있는 1개의 vCPU가 있어야 합니다. KVM 가상 머신에 대한 가상 코어 할당을 변경해 보겠습니다.
가상 머신 종료:
# virsh shutdown w10testvm
– 여기서 w10testvm 가상 머신의 이름입니다.
virsh
를 사용하여 콘솔에서 KVM 가상 머신 관리의 측면입니다. . KVM 가상 머신의 현재 XML 구성 표시:
# virsh dumpxml w10testvm
VM CPU 설정을 설명하는 블록이 필요합니다.
<vcpu placement='static'>8</vcpu> <cputune> <shares>1000</shares> </cputune> <resource> <partition>/machine</partition> </resource> <os> <type arch='x86_64' machine='pc-i440fx-rhel7.6.0'>hvm</type> <bootmenu enable='yes'/> </os> <features> <acpi/> <apic/> <pae/> </features>
보시다시피 여기에 8개의 vCPU가 설정되어 있습니다. 구성을 변경해 보겠습니다.
# virsh edit w10testvm
뒤에 다음 블록 추가 :
<cpu mode='host-passthrough' check='none'> <topology sockets='1' cores='4' threads='2'/> </cpu>
어디에:
host-passthrough
가상 머신이 클러스터 노드의 물리적 프로세서를 보는 에뮬레이션 모드입니다.sockets='1'
하나의 vCPU(소켓)가 있음을 나타냅니다.cores='4'
프로세서에는 소켓당 4개의 코어가 있습니다.threads='2'
ieach 코어에는 2개의 스레드가 있습니다.
구성 파일을 저장하고 가상 머신을 시작합니다. Windows 10 게스트 VM에 로그인하고 작업 관리자 또는 리소스 모니터를 실행하고 Windows에 할당된 모든 가상 코어가 표시되는지 확인합니다.
호스트의 물리적 프로세서, Intel(R) Xeon(R) Silver 4114 CPU , 이제 시스템 속성에서 가상 대신 표시됩니다.
다음은 앱이 제대로 작동하는 데 2개의 코어가 충분하지 않았기 때문에 VM에 대한 과부하 문제를 해결한 방법입니다.
VMWare VM의 vCPU당 코어 수 설정
vSphere Client 인터페이스에서 VMWare 가상 머신에 대한 vCPU 표시 방식을 변경할 수 있습니다.
- VM을 종료하고 설정을 엽니다.
- CPU 확장 섹션;
- 게스트 OS에서 각각 4개의 코어가 있는 2개의 프로세서를 볼 수 있도록 VM 구성을 변경합니다. 소켓당 코어 수 값 변경 4까지 . 이는 게스트 OS에 2개의 4코어 CPU(소켓당 4코어가 있는 2소켓)가 표시됨을 의미합니다.
- 변경 사항을 저장하고 VM을 실행합니다.
가상 머신 vCPU 및 NUMA 아키텍처
vCPU 및 코어를 가상 머신에 할당하는 것과 관련하여 이해해야 하는 몇 가지 측면이 더 있습니다.
소켓당 코어 수를 할당할 때 NUMA 아키텍처가 있는지 확인하십시오. (대부분의 최신 CPU에서 사용됨). 소켓당 코어 수(및 총 vCPU 수)를 물리적 소켓(NUMA 노드)에서 사용 가능한 코어 수보다 많이 할당하지 않는 것이 좋습니다. 단일 물리적 NUMA 노드에 배치하면 가상 머신은 특정 NUMA 노드에서 사용 가능한 빠른 로컬 RAM을 사용할 수 있습니다. 그렇지 않으면 프로세스가 다른 NUMA 노드의 응답을 기다려야 합니다(시간이 더 오래 걸림).
VM에 두 개의 개별 가상 소켓을 할당하면 하이퍼바이저가 이를 서로 다른 NUMA 노드에서 실행할 수 있습니다. VM 성능에 영향을 미칩니다.
필요한 vCPU 수가 1개의 물리적 소켓(NUMA 노드)의 코어 수보다 많은 경우 필요한 코어 수로 여러 개의 가상 소켓(프로세서)을 생성합니다. 또한 홀수 개의 프로세서를 사용하는 것은 권장하지 않습니다(1개의 vCPU를 추가하는 것이 좋습니다).
가상 머신 성능을 유지할 수 있습니다.
예를 들어 소켓당 10개의 코어가 있는 2-프로세서 호스트에 대해 다음 구성을 사용하는 것이 좋습니다(Hyper를 포함하여 총 40개의 vCPU 사용 가능). —스레딩 ) VM용 vCPU를 구성할 때:
필요한 vCPU 수 | VM 설정의 가상 소켓 수 | VM 설정의 가상 프로세서당 코어 수 |
1 | 1 | 1 |
…… | ||
10 | 1 | 10 |
11 | 최적화되지 않음 | |
12 | 2 | 6 |
…… | ||
20 | 2 | 10 |
예를 들어 vCPU가 16개인 Microsoft SQL Server 2016 Enterprise Edition을 실행하는 VM(소켓당 코어 2개가 있는 소켓 8개 구성) ) 소켓당 2소켓 x 8코어가 있는 VM보다 성능이 떨어집니다. .
또한 일부 응용 프로그램은 물리적 소켓 수에 따라 라이선스가 부여됩니다(이전 SQL Server 버전에서와 같이). 때로는 코어 수가 적은 여러 프로세서보다 하나의 멀티코어 프로세서에 라이선스를 부여하는 것이 더 유리합니다.