XenServer

监控 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% 时

当主机达到 100% 的主机 pCPU 使用率时,请使用这些虚拟机指标来决定是否将虚拟机迁移到另一台主机:

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 approaching 100% 是一种应避免的情况。

    建议的操作:

    通过查看存储供应商提供的后端指标,检查后端 I/O 存储服务器是否过载。如果存储服务器未过载且存在性能问题,请采取以下措施之一:

    • 减少虚拟机中的 vCPU 数量。
    • 将虚拟机移动到另一台主机。
    • 通过迁移其他虚拟机或减少其 vCPU 数量来减少主机上的 vCPU 总数。

runstate_full_contention

  • runstate_full_contention > 0% 表示有时 vCPU 想要同时运行,但都无法获得 pCPU 时间。

  • runstate_full_contention 接近 100% 是应避免的情况。

    建议操作:

    如果存在性能问题,请执行以下操作之一:

    • 减少虚拟机中的 vCPU 数量。
    • 将虚拟机移动到另一个主机。
    • 通过迁移其他虚拟机或减少其 vCPU 数量来减少主机上的 vCPU 总数。

当主机 pCPU 使用率低于 100% 时

如果主机未达到 100% 的主机 pCPU 使用率,请使用以下虚拟机指标来决定虚拟机是否具有正确的 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% 时虚拟机进入并发风险状态的风险。

监控 CPU 使用情况