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 page。
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 节点,每个节点总共包含 4GB 的 RAM(
MemTotal
)。接近所有的内存都会在每个域中消耗(MemFree
)。正在运行的四个域(虚拟机):域 'rhel7-0' 具有 1.5GB 内存,它不固定到任何特定主机 NUMA 节点上。但是,域 'rhel7-2' 具有 4GB 内存和 4 个 NUMA 节点,这些节点固定为 1:1 到主机节点。
要打印主机 NUMA 节点统计信息,请为您的环境创建一个
nodestats.py
脚本。示例脚本可在 /usr/share/doc/libvirt-python-版本/examples/nodestats.py
中找到 libvirt-python 软件包文件。可以使用 rpm -ql libvirt-python 命令显示到脚本的特定路径。