9.3. libvirt NUMA 튜닝
일반적으로 NUMA 시스템에서 최상의 성능은 게스트 크기를 단일 NUMA 노드의 리소스 양으로 제한하여 달성됩니다. NUMA 노드 간에 리소스를 불필요하게 분할하지 않도록 합니다.
numastat 툴을 사용하여 프로세스 및 운영 체제에 대한 NUMA별 메모리 통계를 확인합니다.
다음 예에서 numastat 툴에서는 NUMA 노드 간에 메모리 정렬이 있는 네 개의 가상 머신을 표시합니다.
# numastat -c qemu-kvm
Per-node process memory usage (in MBs)
PID Node 0 Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Node 7 Total
--------------- ------ ------ ------ ------ ------ ------ ------ ------ -----
51722 (qemu-kvm) 68 16 357 6936 2 3 147 598 8128
51747 (qemu-kvm) 245 11 5 18 5172 2532 1 92 8076
53736 (qemu-kvm) 62 432 1661 506 4851 136 22 445 8116
53773 (qemu-kvm) 1393 3 1 2 12 0 0 6702 8114
--------------- ------ ------ ------ ------ ------ ------ ------ ------ -----
Total 1769 463 2024 7462 10037 2672 169 7837 32434
numad 를 실행하여 게스트의 CPU 및 메모리 리소스를 자동으로 정렬합니다.
그런 다음 numastat -c qemu-kvm 을 다시 실행하여 numad 실행 결과를 확인합니다. 다음 출력은 리소스가 정렬되었음을 보여줍니다.
# numastat -c qemu-kvm
Per-node process memory usage (in MBs)
PID Node 0 Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Node 7 Total
--------------- ------ ------ ------ ------ ------ ------ ------ ------ -----
51747 (qemu-kvm) 0 0 7 0 8072 0 1 0 8080
53736 (qemu-kvm) 0 0 7 0 0 0 8113 0 8120
53773 (qemu-kvm) 0 0 7 0 0 0 1 8110 8118
59065 (qemu-kvm) 0 0 8050 0 0 0 0 0 8051
--------------- ------ ------ ------ ------ ------ ------ ------ ------ -----
Total 0 0 8072 0 8072 0 8114 8110 32368
참고
-c
를 사용하여 numastat 를 실행하면 컴팩트 출력을 제공합니다. -m
옵션을 추가하면 노드별로 시스템 전체 메모리 정보가 출력에 추가됩니다. 자세한 내용은 numastat man 페이지를 참조하십시오.
9.3.1. 호스트 NUMA 노드당 메모리 모니터링
nodestats.py
스크립트를 사용하여 호스트의 각 NUMA 노드에 대한 총 메모리 및 사용 가능한 메모리를 보고할 수 있습니다. 이 스크립트는 또한 실행 중인 각 도메인의 특정 호스트 노드에 엄격하게 바인딩된 메모리 양을 보고합니다. 예를 들어 다음과 같습니다.
# /usr/share/doc/libvirt-python-2.0.0/examples/nodestats.py
NUMA stats
NUMA nodes: 0 1 2 3
MemTotal: 3950 3967 3937 3943
MemFree: 66 56 42 41
Domain 'rhel7-0':
Overall memory: 1536 MiB
Domain 'rhel7-1':
Overall memory: 2048 MiB
Domain 'rhel6':
Overall memory: 1024 MiB nodes 0-1
Node 0: 1024 MiB nodes 0-1
Domain 'rhel7-2':
Overall memory: 4096 MiB nodes 0-3
Node 0: 1024 MiB nodes 0
Node 1: 1024 MiB nodes 1
Node 2: 1024 MiB nodes 2
Node 3: 1024 MiB nodes 3
이 예에서는 호스트 NUMA 노드 4개를 나타내며 각각 약 4GB의 RAM을 총(
MemTotal
)에 포함합니다. 각 도메인(MemFree
)에서 거의 모든 메모리가 사용됩니다. 실행 중인 네 개의 도메인(가상 시스템)이 있습니다. 'rhel7-0' 에는 특정 호스트 NUMA 노드에 고정되어 있지 않은 1.5GB 메모리가 있습니다. 그러나 도메인 'rhel7-2' 에는 호스트 노드에 1:1 고정되는 4GB 메모리와 4개의 NUMA 노드가 있습니다.
호스트 NUMA 노드 통계를 출력하려면 환경에 대한
nodestats.py
스크립트를 만듭니다. 예제 스크립트는 /usr/share/doc/libvirt-python-version/examples/nodestats.py
에서 libvirt-python 패키지 파일을 찾을 수 있습니다. rpm -ql libvirt-python 명령을 사용하여 스크립트의 특정 경로를 표시할 수 있습니다.