17.6.3. 가상 머신에서 NUMA 구성
다음 방법을 사용하여 RHEL 9 호스트에서 VM(가상 머신) 설정을 NUMA(Non-Uniform Memory Access) 설정을 구성할 수 있습니다.
사전 요구 사항
호스트는 NUMA 호환 시스템입니다. 이 경우
virsh nodeinfo
명령을 사용하여NUMA 셀
을 확인합니다.# virsh nodeinfo CPU model: x86_64 CPU(s): 48 CPU frequency: 1200 MHz CPU socket(s): 1 Core(s) per socket: 12 Thread(s) per core: 2 NUMA cell(s): 2 Memory size: 67012964 KiB
행 값이 2 이상이면 호스트는 NUMA와 호환됩니다.
절차
쉽게 사용할 수 있도록 자동 유틸리티 및 서비스를 사용하여 VM의 NUMA 구성을 설정할 수 있습니다. 그러나 수동 NUMA 설정은 상당한 성능을 향상시킬 가능성이 높습니다.
자동 방법
VM의 NUMA 정책을
Preferred
로 설정합니다. 예를 들어 testguest5 VM에 대해 다음을 수행하려면 다음을 수행합니다.# virt-xml testguest5 --edit --vcpus placement=auto # virt-xml testguest5 --edit --numatune mode=preferred
호스트에서 자동 NUMA 분산을 활성화합니다.
# echo 1 > /proc/sys/kernel/numa_balancing
numad
명령을 사용하여 VM CPU를 메모리 리소스와 자동으로 정렬합니다.# numad
수동 방법
특정 호스트 CPU 또는 CPU 범위에 특정 vCPU 스레드를 고정합니다. 이는 NUMA가 아닌 호스트 및 VM에서도 발생할 수 있으며 vCPU 성능 향상을 위한 안전한 방법으로 권장됩니다.
예를 들어 다음 명령은 vCPU 스레드 0~5개의 testguest6 VM을 각각 고정하여 CPU 1, 3, 5, 7, 9 및 11을 각각 호스팅합니다.
# virsh vcpupin testguest6 0 1 # virsh vcpupin testguest6 1 3 # virsh vcpupin testguest6 2 5 # virsh vcpupin testguest6 3 7 # virsh vcpupin testguest6 4 9 # virsh vcpupin testguest6 5 11
그런 다음 이것이 성공했는지 확인할 수 있습니다.
# virsh vcpupin testguest6 VCPU CPU Affinity ---------------------- 0 1 1 3 2 5 3 7 4 9 5 11
vCPU 스레드를 고정한 후 지정된 VM과 연결된 QEMU 프로세스 스레드를 특정 호스트 CPU 또는 CPU 범위에 고정할 수도 있습니다. 예를 들어 다음 명령은 testguest6 의 QEMU 프로세스 스레드를 CPU 13 및 15에 고정하고 이것이 성공했는지 확인합니다.
# virsh emulatorpin testguest6 13,15 # virsh emulatorpin testguest6 emulator: CPU Affinity ---------------------------------- *: 13,15
마지막으로 특정 VM에 할당할 호스트 NUMA 노드를 지정할 수도 있습니다. 이렇게 하면 VM의 vCPU에서 호스트 메모리 사용량이 향상될 수 있습니다. 예를 들어 다음 명령은 호스트 NUMA 노드 3을 5로 사용하도록 testguest6 을 설정하고 이것이 성공했는지 확인합니다.
# virsh numatune testguest6 --nodeset 3-5 # virsh numatune testguest6
최상의 성능 결과를 얻으려면 위에 나열된 모든 수동 튜닝 방법을 사용하는 것이 좋습니다.
추가 리소스
- vCPU 성능 튜닝 시나리오 샘플
-
numastat
유틸리티를 사용하여 시스템의 현재 NUMA 구성 보기