가상 머신의 프로세서 설정을 구성할 때 이해해야 할 중요한 개념이 몇 가지 있습니다. CPU 당 프로세서 코어 수와 소켓 당 CPU 코어 수를 계산하는 방법 및 이러한 설정이 가상 머신의 속도에 어떤 영향을 미치는지에 대한 이해입니다. 또한, 더 나은 VM 성능을 보장하는 데 중요한 것은 무엇인지 이해하는 것입니다: 프로세서의 수를 제한하고 더 많은 CPU 코어를 갖는 것 또는 더 많은 프로세서와 더 적은 코어를 갖는 것?
이러한 개념과 ESXi 호스트에서 가상 머신의 CPU 구성에 대한 기본 원칙에 대해 자세히 알아보세요.
용어
우리는 가상 머신의 CPU 설정을 구성할 때 사용되는 용어의 정의부터 시작하겠습니다. 이 용어들은 CPU 당 코어 수, 소켓 당 CPU 코어 수 및 CPU 코어 수 대 속도에 대한 혼동을 피하고 작동 원리를 이해하는 데 도움이 될 것입니다.
CPU 소켓
A CPU Socket is a physical connector on the motherboard to which a single physical CPU is connected. A motherboard has at least one CPU socket. Server motherboards usually have multiple CPU sockets that support multiple multicore processors. CPU sockets are standardized for different processor series. Intel and AMD use different CPU sockets for their processor families.
CPU
A CPU (central processing unit, microprocessor chip, or processor) is a computer component. It is the electronic circuitry with transistors that is connected to a socket. A CPU executes instructions to perform calculations, run applications, and complete tasks.
프로세서의 클럭 속도가 열 장벽에 근접하면서 제조업체들은 프로세서 아키텍처를 변경하고 다중 CPU 코어를 갖는 프로세서를 생산하기 시작했습니다. 물리적 프로세서와 논리적 프로세서 또는 프로세서 코어 사이의 혼동을 피하기 위해 일부 공급 업체는 물리적 프로세서를 소켓이라고 참조합니다.
CPU 코어
A CPU core is the part of a processor containing the L1 cache. The CPU core performs computational tasks independently without interacting with other cores and external components of a “big” processor that are shared among cores. Basically, a core can be considered as a small processor built into the main processor that is connected to a socket. Applications should support parallel computations to use multicore processors rationally.
하이퍼스레딩
하이퍼스레딩은 하나의 프로세서 코어를 가진 프로세서에 병렬 계산을 가져오기 위해 Intel 엔지니어들이 개발한 기술입니다. 하이퍼스레딩이 처음 선보인 것은 2002년 펜티엄 4 HT 프로세서가 출시되고 데스크톱 컴퓨터에 위치한 때입니다. 운영 체제는 하이퍼스레딩을 가진 단일 코어 프로세서를 두 개의 논리적 코어(물리적 코어가 아님)를 가진 프로세서로 감지합니다. 마찬가지로, 하이퍼스레딩을 가진 네 개의 코어 프로세서는 운영 체제에게 8개의 코어를 가진 프로세서로 나타납니다. 각 코어에서 실행되는 스레드가 더 많으면 병렬로 수행할 수 있는 작업이 더 많아집니다.
현대의 Intel 프로세서는 여러 코어와 하이퍼스레딩을 모두 가지고 있습니다. 하이퍼스레딩은 일반적으로 기본적으로 활성화되어 있으며 BIOS에서 활성화하거나 비활성화할 수 있습니다. AMD 동시 멀티 스레딩(SMT)은 AMD 프로세서용 하이퍼스레딩의 아날로그입니다.
vCPU
A vCPU is a virtual processor that is configured as a virtual device in the virtual hardware settings of a VM. A virtual processor can be configured to use multiple CPU cores. A vCPU is connected to a virtual socket.
CPU 과다 할당
CPU 과다 할당은 VM에 물리적 호스트의 논리적 프로세서(물리적 호스트의 CPU 코어)보다 더 많은 논리적 프로세서를 제공하는 것입니다. CPU 과다 할당은 리소스 활용의 유연성과 효율성을 증가시킬 수 있지만, 총 수요가 사용 가능한 물리적 CPU 용량을 초과하면 성능 저하로 이어질 수 있습니다.
NUMA
NUMA (비등규일 메모리 액세스)는 다중 프로세서 컴퓨터에서 사용되는 컴퓨터 메모리 설계입니다. 이 아이디어는 각 프로세서에 대해 별도의 메모리를 제공하는 것입니다 (모든 프로세서가 버스를 통해 공유 메모리에 액세스하는 UMA와는 달리). 동시에 프로세서는 공유 버스를 통해 다른 프로세서에 속한 메모리에 액세스할 수 있습니다 (모든 프로세서가 컴퓨터의 모든 메모리에 액세스합니다). 다중 프로세서 컴퓨터에서 CPU는 자체 로컬 메모리에 대한 액세스 성능 이점을 가집니다.
이러한 기본 아키텍처는 현대 다중 프로세서 컴퓨터에서 혼합되어 사용됩니다. 프로세서는 멀티코어 CPU 패키지 또는 노드에 그룹화됩니다. 동일한 노드에 속한 프로세서는 UMA 아키텍처와 같이 메모리 모듈에 액세스를 공유합니다. 또한 프로세서는 공유 인터커넥트를 통해 원격 노드의 메모리에 액세스할 수 있습니다. 프로세서는 이를 NUMA 아키텍처에 따라 수행하지만 성능이 느립니다. 이 메모리 액세스는 직접적이 아닌 해당 메모리를 소유한 CPU를 통해 수행됩니다.
NUMA 노드는 CPU/메모리 커플로, CPU 소켓과 가장 가까운 메모리 모듈로 구성됩니다. NUMA는 일반적으로 BIOS에서 노드 교차 또는 교차 메모리 설정으로 구성됩니다.
예시: ESXi 호스트에는 두 개의 소켓(두 개의 CPU)과 256GB의 RAM이 있습니다. 각 CPU에는 6개의 프로세서 코어가 있습니다. 이 서버에는 두 개의 NUMA 노드가 있습니다. 각 NUMA 노드에는 1개의 CPU 소켓(한 개의 CPU), 6개의 코어 및 128GB의 RAM이 있습니다.
ESXi는 항상 VM에 대한 메모리를 네이티브(홈) NUMA 노드에서 할당하려고 합니다. VM 로드나 ESXi 서버 로드에 변화가 있으면 홈 노드가 자동으로 변경될 수 있습니다.
vNUMA
가상 NUMA(vNUMA)는 VMware 가상 머신에 대한 NUMA의 유사체입니다. vNUMA는 최적의 성능을 제공하기 위해 하나 이상의 물리적 NUMA 노드의 하드웨어 리소스를 사용합니다. vNUMA 기술은 게스트 운영 체제에 NUMA 토폴로지를 노출합니다. 결과적으로 게스트 운영 체제는 가장 효율적인 사용을 위해 기본 NUMA 토폴로지를 인식합니다. 가상 머신의 가상 하드웨어 버전은 vNUMA를 사용하려면 8 이상이어야 합니다.
VMware vSphere 6.5에서 vNUMA 처리가 크게 개선되었으며, 이 기능은 더 이상 VM 구성에서 CPU 코어 당 소켓 값에 의해 제어되지 않습니다. 기본적으로 vCPU가 8개 이상인 VM에 대해 vNUMA가 활성화됩니다. VMX 구성 파일을 편집하여 VM에 수동으로 vNUMA를 활성화할 수 있으며, 이를 위해 numa.vcpu.min=X라인을 추가하면 됩니다. 여기서 X는 가상 머신의 vCPU 수입니다.
코어 수 계산
서버에서 물리적 CPU 코어 수, 논리적 CPU 코어 수 및 기타 매개변수를 계산하는 방법을 알아보겠습니다.
- 호스트 머신의 총 물리적 CPU 코어 수는 다음과 같은 공식으로 계산됩니다:
(프로세서 소켓 수) x (프로세서 당 코어 수) = 물리적 프로세서 코어 수
설치된 프로세서가 있는 프로세서 소켓만 고려해야 합니다.
- 만약 하이퍼 스레딩이 지원된다면, 다음 공식을 사용하여 논리 프로세서 코어 수를 계산하십시오:
(물리 프로세서 코어 수) x (물리 프로세서당 2개의 스레드) = 논리 프로세서 수
- 마지막으로, VM에 할당할 수 있는 사용 가능한 프로세서 리소스를 계산하기 위해 단일 공식을 사용하십시오:
(CPU 소켓 수) x (CPU 코어 수) x (스레드)
예를 들어, 하이퍼 스레딩을 지원하는 4코어를 가진 두 프로세서가있는 서버의 경우, VM에 할당할 수있는 총 논리 프로세서 수는 다음과 같습니다:
2(CPUs) x 4(cores) x 2(HT) = 16 논리 프로세서
하나의 논리 프로세서는 VM 설정에서 하나의 프로세서 또는 하나의 CPU 코어로 할당될 수 있습니다.
가상 머신의 경우 하드웨어 에뮬레이션 기능으로 인해 구성에서 여러 프로세서 및 CPU 코어를 사용할 수 있습니다. 하나의 물리 CPU 코어는 VM에 가상 CPU 또는 가상 CPU 코어로 구성될 수 있습니다.
- VM에 사용 가능한 전체 클럭 사이클 수는 다음과 같이 계산됩니다:
(논리 소켓 수) x (CPU의 클럭 속도)
예를 들어, 물리적 프로세서의 클록 속도가 3.0 GHz인 경우 VM을 구성할 때 2 개의 vCPU와 2 개의 코어를 사용하도록 구성하면 총 클록 속도는 2x2x3=12 GHz입니다. ESXi 호스트에서 CPU 오버커밋이 사용되는 경우 CPU 집약적인 작업을 수행하는 VM의 경우 계산된 값보다 VM의 사용 가능한 주파수가 적을 수 있습니다.
소켓당 CPU 코어 제한
vSphere 7.0 Update 1 및 vSphere 8.0에서의 CPU/코어 제한은 다음과 같습니다.
- VM에 할당된 가상 프로세서 소켓의 최대 수는 768입니다. 768개 이상의 가상 프로세서를 할당하려면 VM을 멀티코어 프로세서를 사용하도록 구성하십시오.
- 단일 VM에 할당할 수 있는 프로세서 코어의 최대 수는 768입니다. 가상 머신은 물리적 머신의 논리적 프로세서 코어 수보다 더 많은 CPU 코어를 사용할 수 없습니다.
- CPU 핫 추가. VM에 128 개 이하의 vCPU가 있는 경우이 VM에 대해 CPU 핫 추가 기능을 사용할 수 없으며 VM이 실행 중인 상태에서 VM의 CPU 구성을 편집할 수 없습니다.
OS CPU 제한 . 운영 체제에서 프로세서 수에 대한 제한이 있는 경우 가상 프로세서를 더 많이 할당하면 추가 프로세서가 게스트 OS에서 식별되고 사용되지 않습니다. 제한은 OS 기술 설계 및 OS 라이선스 제한으로 인해 발생할 수 있습니다. 소켓 및 CPU 코어 당 라이선스가 부여되는 운영 체제도 있습니다 (예 :Windows Server 2019 ). - OS CPU 제한. 운영 체제에 프로세서 수에 대한 제한이 있는 경우 가상 머신에 더 많은 가상 프로세서를 할당하면 추가 프로세서가 게스트 OS에서 식별되지 않고 사용되지 않습니다. 제한은 OS 기술 설계 및 OS 라이선스 제한으로 인해 발생할 수 있습니다. Windows Server 2019과 같이 소켓 당 및 CPU 코어 당 라이선스가 부여되는 운영 체제가 있다는 점에 유의하세요.
일부 운영 체제의 CPU 지원 제한:
- Windows 10 Pro – 2개 CPU
- Windows 10 Home – 1개 CPU
- Windows 10 워크스테이션 – 4개 CPU
- Windows Server 2019 Standard/Datacenter – 64개 CPU
- Windows XP Pro x64 – 2개 CPU
- Windows 7 Pro/Ultimate/Enterprise – 2개 CPU
- Windows Server 2003 Datacenter – 64개 CPU
VMware 웹사이트에서 환경에서 사용 중인 vSphere 버전의 구성 최대치를 확인할 수 있습니다.
구성 권장 사항
이전 vSphere 버전의 경우 VM 구성에서 코어보다 소켓을 사용하는 것이 좋습니다. 처음에는 VM 성능에 큰 차이를 보이지 않을 수 있습니다. 일부 구성 기능이 차이를 만든다는 점에 유의하세요. 최적의 성능을 위해 VM에 여러 가상 프로세서(소켓)을 설정할 때 NUMA 및 vNUMA에 대해 염두에 두십시오.
만약 vNUMA가 자동으로 구성되지 않으면, 물리 서버의 NUMA 토폴로지를 미러링하세요. VMware vSphere 6.5 이상의 VM에 대한 몇 가지 추천 사항은 다음과 같습니다:
- VM에 대한 논리 프로세서(vCPU) 수를 정의할 때, 코어-퍼-소켓 구성을 선호하세요. ESXi 서버의 단일 NUMA 노드에 있는 CPU 코어 수를 초과할 때까지 계속하세요. 물리적 ESXi 서버의 단일 NUMA 노드에 사용 가능한 메모리 양을 초과할 때까지 같은 논리를 사용하세요
- 때로는 VM 구성의 논리 프로세서 수가 단일 NUMA 노드의 물리적 CPU 코어 수보다 많거나, RAM 양이 단일 NUMA 노드에 대한 전체 메모리 양보다 높을 수 있습니다. 논리 프로세서(vCPU)의 수를 최소 수의 NUMA 노드에 걸쳐 분할하여 최적의 성능을 고려하세요.
- CPU 수가 홀수인 경우 코어 수나 메모리 양이 CPU 코어 수를 초과하거나, 물리 서버의 단일 NUMA 노드에 대한 메모리 양을 초과하는 경우 vCPU 수를 홀수로 설정하지 마세요.
- 물리 호스트의 물리 프로세서 코어 수보다 vCPU 수가 많은 VM을 생성하지 마세요.
- 요구 사항 때문에 vNUMA를 사용하지 못하는 경우, vCPU 핫-애드 기능을 활성화하지 마세요.
게스트 운영 체제 및 가상 머신에 설치된 다른 소프트웨어가 프로세서 당 라이선스가 있는 경우, 더 많은 CPU 코어를 사용하는 프로세서가 적은 가상 머신을 구성하십시오. 예를 들어, Windows Server 2012 R2는 소켓 당 라이선스가 있으며, Windows Server 2016은 코어 당 라이선스가 있습니다.
VMware 가상 머신의 구성에서 CPU 과부하를 사용하는 경우, 다음 값들을 염두에 두십시오:
1:1에서 3:1 – VM 실행에 문제가 없어야 합니다
- 3:1에서 5:1 – 성능 저하가 관찰됩니다
- 6:1 – 중요한 성능 저하로 인한 문제에 대비하십시오
- 정상 값으로 CPU 과부하를 사용하면 테스트 및 개발 환경에서 위험 없이 사용할 수 있습니다.
ESXi 호스트의 VM 구성
먼저, 물리 호스트의 논리 프로세서 수(가상 머신이 충분한 성능으로 올바르게 작동하는 데 필요한 CPU 수)를 결정하십시오. 그런 다음 이전 권장 사항과 제한 사항을 염두에 두며 VM에 설정해야 하는 가상 소켓 수( vSphere Client의 소켓 수) 및 CPU 코어 수(소켓 당 코어)를 정의하십시오. 아래 표는 필요한 구성을 선택하는 데 도움이 될 수 있습니다.
먼저, 가상 머신이 적절한 작업을 수행하기 위해 필요한 성능을 갖추기 위해 물리적 호스트의 논리적 프로세서(CPU 수) 수를 결정합니다. 그런 다음 이전의 추천 사항과 제한 사항을 염두에 두고 가상 소켓의 수(vSphere Client의 소켓 수)와 CPU 코어 수(소켓당 코어 수)를 정의해야 합니다. 아래 표는 필요한 구성을 선택하는 데 도움이 될 수 있습니다.
가상 머신에 8개 이상의 논리 프로세서를 할당해야 하는 경우 논리는 동일하게 유지됩니다. vSphere Client에서 논리 CPU 수를 계산하려면 소켓 수에 코어 수를 곱하십시오. 예를 들어 2개의 프로세서 소켓을 사용하여 VM을 구성하려면 각각 2개의 CPU 코어가 있으므로 총 논리 CPU 수는 2*2=4입니다. vSphere Client에서 VM의 가상 하드웨어 옵션에서 이 구성을 적용하려면 4개의 CPU를 선택해야 합니다.
vSphere Client에서 CPU 코어 구성하기
VMware vSphere Client에서 VM의 CPU 옵션을 구성하는 방법을 설명하겠습니다. 웹 브라우저에서 vCenter Server의 IP 주소를 입력하고 VMware vSphere Client를 엽니다. 탐색기에서 호스트 및 클러스터를 열고 구성하려는 가상 머신을 선택합니다. VM의 CPU 구성을 변경할 수 있도록 VM이 종료되었는지 확인하십시오. 구성 프로세스는 vSphere 6.x, 7.0 및 8.0에서 동일합니다.
- VM을 마우스 오른쪽 버튼으로 클릭하고 상황에 맞는 메뉴에서 설정 편집을 클릭하여 가상 머신 설정을 엽니다.
- CPU 섹션을 가상 하드웨어 탭의 설정 편집 창에서 확장합니다.
- CPU. CPU 문자열에서 드롭다운 메뉴를 클릭하고 이 VM에 필요한 논리 프로세서의 총 수를 선택합니다. 이 예시에서는 블로그-Ubuntu1에 대한 Ubuntu VM에 4개의 논리 프로세서를 선택합니다.
- 소켓 당 코어. 이 문자열에서 드롭다운 메뉴를 클릭하고 각 가상 소켓(프로세서)에 필요한 코어 수를 선택합니다.
- CPU 핫 플러그. 이 기능을 사용하려면 CPU 핫 추가 사용 체크박스를 선택합니다. 제한 사항과 요구 사항을 기억하세요.
- 예약. ESXi 호스트 또는 클러스터에서 가상 머신에 대한 CPU 클럭 속도(주파수, MHz 또는 GHz)의 보장된 최소 할당을 선택합니다.
- 제한. VM 프로세서의 최대 CPU 클럭 속도를 선택합니다. 이 주파수는 가상 머신의 최대 주파수입니다. 이 VM이 ESXi 호스트 또는 클러스터에서 실행 중인 유일한 VM이더라도 더 많은 무료 프로세서 리소스가 있더라도 마찬가지입니다. 설정된 제한은 VM의 모든 가상 프로세서에 적용됩니다. VM에 2개의 단일 코어 프로세서가 있고 제한이 1000 MHz라면, 두 가상 프로세서는 총 클럭 속도가 1백만 주기/초(각 코어당 500 MHz)로 작동합니다.
- 공유. 이 매개 변수는 ESXi 호스트 또는 리소스 풀에서 가상 머신의 리소스 소비 우선 순위를 정의합니다 (Low, Normal, High, Custom). Reservation 및 Limit 매개 변수와 달리, Shares 매개 변수는 ESXi 호스트, 리소스 풀 또는 DRS 클러스터 내에서 CPU 리소스가 부족한 경우에만 VM에 적용됩니다.
Shares 매개 변수의 사용 가능한 옵션:
- Low – 가상 프로세서 당 500 shares
- Normal – 가상 프로세서 당 1000 shares
- High – 가상 프로세서 당 2000 shares
- Custom – 사용자 정의 값 설정
Shares 값이 높을수록 ESXi 호스트나 리소스 풀 내에서 VM에 제공되는 CPU 리소스 양이 더 많아집니다.
- 하드웨어 가상화. 이 확인란을 선택하여 중첩 가상화를 활성화합니다. 이 옵션은 테스트나 교육 목적으로 VM 내에서 VM을 실행하려는 경우 유용합니다.
- 성능 카운터. 이 기능은 가상 머신 내에 설치된 응용 프로그램을 CPU 성능을 측정한 후 디버그하고 최적화하는 데 사용됩니다.
- 스케줄링 어피니티. 이 옵션은 VM을 특정 프로세서에 할당하는 데 사용됩니다. 입력된 값은 다음과 같을 수 있습니다: “0, 2, 4-7”.
- I/O MMU. This feature allows VMs to have direct access to hardware input/output devices such as storage controllers, network cards, and graphic cards (rather than using emulated or paravirtualized devices). I/O MMU is also called Intel Virtualization Technology for Directed I/O (Intel VT-d) and AMD I/O Virtualization (AMD-V). I/O MMU is disabled by default. Using this option is deprecated in vSphere 7.0. If I/O MMU is enabled for a VM, the VM cannot be migrated with vMotion and is not compatible with snapshots, memory overcommit, suspended VM state, physical NIC sharing, and NSX network virtualization.
독립형 ESXi 호스트를 사용하고 웹 브라우저에서 VMware Host Client를 사용하여 VM을 구성하는 경우, 구성 원칙은 VMware vSphere Client와 동일합니다.
VMware Workstation에서 CPU 당 코어 구성
VMware Workstation에서 vCenter Server 또는 ESXi 호스트에 연결하고 vSphere VM의 VM 설정을 열면 가상 프로세서의 기본 구성을 편집할 수 있습니다.
- VM > 설정을 클릭하고 하드웨어 탭을 선택한 다음 프로세서를 클릭합니다.
- 가상 프로세서(소켓) 및 프로세서 당 코어 수를 선택합니다.
다음 스크린샷에서는 이전에 vSphere Client에서 구성된 동일한 Ubuntu VM의 프로세서 구성을 볼 수 있습니다.
총 프로세서 코어 수(ESXi 호스트 또는 클러스터의 물리 프로세서의 논리적 코어)가 자동으로 계산되어 표시됩니다. 반면에 vSphere Client의 인터페이스에서는 총 프로세서 코어 수(CPU 옵션)를 설정하고 프로세서 당 코어 수를 선택한 다음 가상 소켓의 수가 계산되어 표시됩니다.
VM 프로세서를 PowerCLI에서 구성하기
VMware vSphere 구성 요소를 구성하는 데 명령 줄 인터페이스를 선호하는 경우 PowerCLI를 사용하여 VM의 CPU 구성을 편집합니다. PowerCLI에서 Ubuntu 19VM의 CPU 구성을 편집하는 방법을 알아보겠습니다. 이러한 명령은 전원이 꺼진 VM에 사용됩니다.
- VM이 사용하는 단일 코어 가상 프로세서 2개(사용된 가상 소켓 2개)를 구성하려면 다음 명령을 사용하세요.
get-VM -name Ubuntu19 | set-VM -NumCpu 2
다른 수의 프로세서(소켓)를 VM에 설정하려면 다른 숫자를 입력하세요.
- 다음 예에서는 VM이 사용하는 이중 코어 가상 프로세서 2개(사용된 소켓 2개)를 구성하는 방법을 보여줍니다.
$VM=Get-VM -Name Ubuntu19
$VMSpec=New-Object -Type VMware.Vim.VirtualMachineConfigSpec -Property @{ "NumCoresPerSocket" = 2}
$VM.ExtensionData.ReconfigVM_Task($VMSpec)
$VM | Set-VM -NumCPU 2
- 가상 머신에 새 CPU 구성이 적용되면이 구성이 가상 머신의 VMX 구성 파일에 저장됩니다. 우리의 경우 데이터스토어 (/vmfs/volumes/datastore2/Ubuntu19/)의 VM 디렉터리에있는 Ubuntu19.vmx 파일을 확인합니다. 새 CPU 구성이 있는 줄은 VMX 파일의 끝에 있습니다.
numvcpus = “2”
cpuid.coresPerSocket = “2”
- 가상 머신의 프로세서 (소켓) 수를 줄이려면 동일한 명령을 사용하여 수량을 줄입니다. 예를 들어, 가상 머신에 프로세서 (소켓)를 하나로 설정하려면이 명령을 사용하십시오.
get-VM -name Ubuntu19 | set-VM -NumCpu 1
PowerCLI 사용의 주요 장점은 여러 VM을 대량으로 구성할 수있는 능력입니다. 작업 자동화는 가상 머신을 구성해야하는 수가 많을 때 중요하고 편리합니다. VMware cmdlet 및 Microsoft PowerShell 구문을 사용하여 스크립트를 작성하십시오.
결론
VMware vSphere에서 가상 머신을 사용할 때는 VMware 백업 도구를 사용하는 것을 잊지 마십시오. NAKIVO Backup & Replication을 사용하여 가상 머신을 백업하십시오. CPU 당 여러 코어가 있는 VM도 포함됩니다. 정기적인 백업은 데이터를 보호하고 재해 발생 시 데이터를 복구하는 데 도움이 됩니다.
Source:
https://www.nakivo.com/blog/the-number-of-cores-per-cpu-in-a-virtual-machine/