13.8. 虚拟机性能监控工具
要确定什么消耗了最多的 VM 资源,以及虚拟机性能的哪方面需要优化,可以使用性能诊断工具,包括通用的和特定于虚拟机的。
默认操作系统性能监控工具
对于标准性能评估,您可以使用主机和虚拟机操作系统默认提供的实用程序:
在 RHEL 9 主机上,以 root 用户身份使用
top
实用程序或 系统监控 应用程序,并在输出中查找qemu
和virt
。这显示了您的虚拟机消耗的主机系统资源量。-
如果监控工具显示任何
qemu
或virt
进程消耗了大量的主机 CPU 或内存量,请使用perf
工具进行调查。详情请查看以下信息。 -
另外,如果
vhost_net
线程进程(如 vhost_net-1234 )被显示为消耗大量主机 CPU 容量,请考虑使用 虚拟网络优化功能,如multi-queue virtio-net
。
-
如果监控工具显示任何
在客户机操作系统上,使用系统上可用的性能工具和应用程序来评估哪些进程消耗了最多的系统资源。
-
在 Linux 系统上,您可以使用
top
工具。 - 在 Windows 系统中,您可以使用 Task Manager 应用程序。
-
在 Linux 系统上,您可以使用
perf kvm
您可以使用 perf
实用程序收集有关 RHEL 9 主机性能的特定虚拟化统计。要做到这一点:
在主机上安装 perf 软件包:
# dnf install perf
使用
perf kvm stat
命令之一来显示您的虚拟化主机的 perf 统计信息:-
若要实时监控 hypervisor ,请使用
perf kvm stat live
命令。 -
要记录一段时间内 hypervisor 的 perf 数据,请使用
perf kvm stat record
命令激活日志记录。在命令被取消或中断后,数据保存在perf.data.guest
文件中,可以使用perf kvm stat report
命令进行分析。
-
若要实时监控 hypervisor ,请使用
分析
VM-EXIT
事件类型及其分发的perf
输出。例如,PAUSE_INSTRUCTION
事件应当不常发生,但在以下输出中,此事件的频繁发生表明主机 CPU 没有很好地处理正在运行的 vCPU。在这种场景下,请考虑关闭某些处于活动状态的虚拟机,从这些虚拟机中删除 vCPU,或者 调优 vCPU 的性能。# perf kvm stat report Analyze events for all VMs, all VCPUs: VM-EXIT Samples Samples% Time% Min Time Max Time Avg time EXTERNAL_INTERRUPT 365634 31.59% 18.04% 0.42us 58780.59us 204.08us ( +- 0.99% ) MSR_WRITE 293428 25.35% 0.13% 0.59us 17873.02us 1.80us ( +- 4.63% ) PREEMPTION_TIMER 276162 23.86% 0.23% 0.51us 21396.03us 3.38us ( +- 5.19% ) PAUSE_INSTRUCTION 189375 16.36% 11.75% 0.72us 29655.25us 256.77us ( +- 0.70% ) HLT 20440 1.77% 69.83% 0.62us 79319.41us 14134.56us ( +- 0.79% ) VMCALL 12426 1.07% 0.03% 1.02us 5416.25us 8.77us ( +- 7.36% ) EXCEPTION_NMI 27 0.00% 0.00% 0.69us 1.34us 0.98us ( +- 3.50% ) EPT_MISCONFIG 5 0.00% 0.00% 5.15us 10.85us 7.88us ( +- 11.67% ) Total Samples:1157497, Total events handled time:413728274.66us.
perf kvm stat
输出中表明有问题的其它事件类型包括:-
INSN_EMULATION
- 建议次优化的 虚拟机 I/O 配置 。
-
有关使用 perf
监控虚拟化性能的更多信息,请参阅 perf-kvm
手册页。
numastat
要查看系统当前的 NUMA 配置,您可以使用 numastat
工具,该工具通过安装 numactl 软件包来提供。
以下显示了一个有 4 个运行虚拟机的主机,各自从多个 NUMA 节点获取内存。这不是 vCPU 性能的最佳方案,并保证调整:
# 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
相反,以下显示单个节点为每个虚拟机提供内存,这效率显著提高。
# 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