Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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 명령을 사용하여 스크립트의 특정 경로를 표시할 수 있습니다.