监控 CPU 使用情况
主机上每个 pCPU 的最佳 vCPU 数量取决于您的用例。在操作过程中,请确保监控您的 XenServer® 环境的性能并相应地调整配置。
术语
在此领域中,有各种术语有时可以互换使用。在本文中,我们使用以下术语和含义:
-
CPU(物理 CPU): 连接到处理器插槽的物理硬件。
-
核心: 一个物理处理单元,能够独立执行一个线程,包含支持该执行所需的所有功能单元。
-
超线程: 一个物理处理单元,能够独立执行一个线程,与其他超线程(也称为其“同级线程”)共享一些功能单元。
-
逻辑 CPU (pCPU): 一个能够独立执行线程的单元,包含一组寄存器和一个指令指针。在启用了超线程的系统中,这是一个超线程。在其他情况下,它是一个核心。
-
主机 pCPU: 主机中逻辑 CPU 的总数。
-
vCPU(虚拟 CPU): 一个虚拟化的逻辑 CPU。这是一个能够独立执行线程的逻辑单元,提供给虚拟机。在 XenServer 中,vCPU 可以“分时”pCPU,使用调度程序来确定在任何给定时间哪个 vCPU 在哪个 pCPU 上运行。
-
客户机 vCPU: 呈现给虚拟机内部客户机操作系统的 vCPU。
-
Dom0 vCPU: 对 XenServer 控制域 (dom0) 可见的 vCPU。
-
主机总 vCPU: 主机中 dom0 vCPU 和所有客户机 vCPU 的总和。
一般行为
主机上的 vCPU 总数是 dom0 使用的 vCPU 数量加上分配给主机上所有虚拟机的 vCPU 总数。随着主机上 vCPU 数量的增加,您可能会遇到以下类型的行为:
-
当主机上的 vCPU 总数 小于或等于 主机上的 pCPU 数量时,主机总是提供虚拟机所请求的 CPU 资源。
-
当主机上的 vCPU 总数 大于 主机上的 pCPU 数量时,主机将主机 pCPU 的时间共享给虚拟机。这种行为通常不会影响虚拟机,因为它们的 vCPU 通常在部分时间处于空闲状态,并且在大多数情况下,主机不会达到 100% 的 pCPU 使用率。
-
当主机上的 vCPU 总数 大于 主机上的 pCPU 数量,并且主机 有时 达到 100% 的主机 pCPU 使用率时,虚拟机的 vCPU 在峰值期间无法获得其请求的全部 pCPU 资源。相反,在这些峰值期间,虚拟机将减速以获得主机上可用 pCPU 的一部分。
-
当主机上的 vCPU 总数 大于 主机上的 pCPU 数量,并且主机 经常 达到 100% 的主机 pCPU 使用率时,虚拟机的 vCPU 会持续减速以获得主机上可用 CPU 的一部分。如果虚拟机有实时性要求,这种情况并不理想,您可以通过减少主机上的 vCPU 数量来解决。
主机上 vCPU 的最佳数量可能取决于虚拟机用户对其虚拟机速度的感知,尤其是在虚拟机有实时性要求时。
获取有关 CPU 的信息
要查找主机上的 pCPU 总数,请运行以下命令:
xe host-cpu-info --minimal
要查找主机上当前 vCPU(来宾和 dom0)的总数,请运行以下命令:
xl vcpu-list | grep -v VCPU | wc -l
使用 RRD 指标监控 CPU 使用率
XenServer 提供 RRD 指标,用于描述虚拟机上 vCPU 的性能。
当主机 pCPU 使用率达到 100% 时
当主机 pCPU 使用率达到 100% 时,请使用以下虚拟机指标来决定是否将虚拟机迁移到另一台主机:
runstate_concurrency_hazard
-
runstate_concurrency_hazard > 0% 表示有时至少有一个 vCPU 正在运行,而至少另一个 vCPU 想要运行但无法获得 pCPU 时间。如果 vCPU 必须协调,这种行为会导致性能问题。
-
runstate_concurrency_hazard 接近 100% 是应避免的情况。建议操作:如果存在性能问题,请执行以下操作之一:
-
减少虚拟机中的 vCPU 数量。
-
将虚拟机迁移到另一个主机。
-
通过迁移其他虚拟机或减少其 vCPU 数量来减少主机上的 vCPU 总数。
-
runstate_partial_contention
-
runstate_partial_contention > 0% 表示至少有一个 vCPU 想要运行但无法获得 pCPU 时间,并且至少有一个其他 vCPU 被阻塞(要么因为无事可做,要么因为它正在等待 I/O 完成)。
-
runstate_concurrency_hazard 接近 100% 是应避免的情况。建议操作:通过查看存储供应商提供的后端指标,检查后端 I/O 存储服务器是否过载。如果存储服务器未过载且存在性能问题,请执行以下操作之一:
-
减少虚拟机中的 vCPU 数量。
-
将虚拟机迁移到另一个主机。
-
通过迁移其他虚拟机或减少其 vCPU 数量来减少主机上的 vCPU 总数。
-
runstate_full_contention
-
runstate_full_contention > 0% 表示有时 vCPU 想要同时运行,但都无法获得 pCPU 时间。
-
runstate_full_contention 接近 100% 是应避免的情况。建议操作:如果存在性能问题,请执行以下操作之一:
-
减少虚拟机中的 vCPU 数量。
-
将虚拟机迁移到另一个主机。
-
通过迁移其他虚拟机或减少其 vCPU 数量来减少主机上的 vCPU 总数。
-
当主机 pCPU 使用率低于 100% 时
如果主机的 pCPU 使用率未达到 100%,请使用以下虚拟机指标来判断虚拟机是否具有正确的 vCPU 数量:
runstate_fullrun
-
runstate_fullrun = 0% 表示 vCPU 从未同时全部使用。建议操作:减少此虚拟机中的 vCPU 数量。
-
0% < runstate_fullrun < 100% 表示 vCPU 有时会同时全部使用。
-
runstate_fullrun = 100% 表示 vCPU 始终同时全部使用。建议操作:您可以增加此虚拟机中的 vCPU 数量,直到 runstate_fullrun < 100%。不要再增加 vCPU 数量,否则,如果主机达到 100% 的 pCPU 使用率,可能会增加并发危害的概率。
runstate_partial_run
-
runstate_partial_run = 0% 表示所有 vCPU 始终都在使用 (full-run=100%) 或者没有 vCPU 正在使用 (idle=100%)。
-
0% < runstate_partial_run < 100% 表示,有时至少有一个 vCPU 被阻塞,这可能是因为它们无事可做,或者因为它们正在等待 I/O 完成。
-
runstate_partial_run=100% 表示始终至少有一个 vCPU 被阻塞。建议操作:检查后端 I/O 存储服务器是否过载。如果不是,则虚拟机可能具有过多的 vCPU,您可以减少此虚拟机中的 vCPU 数量。虚拟机中 vCPU 过多会增加主机 CPU 使用率达到 100% 时虚拟机进入并发危害状态的风险。