XenServer

监视 CPU 使用率

主机上每个 pCPU 的最佳 vCPU 数量取决于您的用例。在操作过程中,请务必监视 XenServer 环境的性能并相应地调整您的配置。

条款

在此区域中,有各种术语有时可以互换使用。在本文中,我们使用以下术语和含义:

  • CPU(物理 CPU): 连接到处理器插槽的物理硬件。
  • 核心: 一种能够执行一个独立线程的物理处理单元,其中包含支持该执行所需的所有功能单元。
  • 超线程: 一种能够执行一个独立线程的物理处理单元,它与另一个超线程(又称为“兄弟线程”)共享一些功能单元。
  • 逻辑 CPU (pCPU): 一种能够执行独立线程的单元,包括一组寄存器和一个指令指针。在启用了超线程的系统中,这是一个超线程。在其他情况下,它是一个核心。
  • 主机 pCPU:主机中逻辑 CPU 的总数。
  • vCPU(虚拟 CPU):虚拟化的逻辑 CPU。这是提供给 VM 的能够执行独立线程的逻辑单元。在 XenServer 中,vCPU 可以“分时共享”pCPU,使用调度程序来确定在任何给定时间哪个 vCPU 在哪个 pCPU 上运行。
  • 来宾 vCPU:提供给 VM 内部的来宾操作系统的 vCPU。
  • Dom0 vCPU:XenServer 控制域 (dom0) 可见的 vCPU。
  • 主机 vCPU 总数:dom0 vCPU 和主机中的所有来宾 vCPU 的总和。

常规行为

主机上的 vCPU 总数等于 dom0 使用的 vCPU 数量与分配给主机上的所有 VM 的 vCPU 总数相加。随着主机上的 vCPU 数量的增加,您可能会遇到以下类型的行为:

  • 当主机上的 vCPU 总数小于或等于主机上的 pCPU 数量时,主机始终提供 VM 请求的 CPU 数量。

  • 当主机上的 vCPU 总数大于主机上的 pCPU 数量时,主机将与 VM 共享主机 pCPU 的时间。此行为通常不会影响 VM,因为 VM 的 vCPU 通常会在一段时间内处于空闲状态,而且在大多数情况下,主机的 pCPU 使用率未达到 100%。

  • 当主机上的 vCPU 总数大于主机上的 pCPU 数量,并且主机有时达到 100% 的主机 pCPU 使用率时,VM 的 vCPU 在峰值期间收到的 pCPU 不会像其请求的那么多。相反,在这些峰值期间,VM 会减慢速度,无法获得主机上可用 pCPU 的份额。

  • 当主机上的 vCPU 总数大于主机上的 pCPU 数量,并且主机 pCPU 使用率通常达到 100% 时,VM 的 vCPU 会持续减慢,以获得主机上可用 CPU 的份额。如果 VM 有实时要求,这种情况并不理想,您可以通过减少主机上的 vCPU 数量来解决这个问题。

主机上的 vCPU 的最佳数量可能取决于 VM 用户对其 VM 速度的感知,尤其是在 VM 具有实时要求时。

获取有关您的 CPU 的信息

要找出您的主机上的 pCPU 总数,请运行以下命令:

xe host-cpu-info --minimal

要找出您的主机上当前的 vCPU(guest 和 dom0)总数,请运行以下命令:

xl vcpu-list | grep -v VCPU | wc -l

使用 RRD 指标监视 CPU 使用率

XenServer 提供 RRD 指标,用于描述您的 VM 上的 vCPU 的运行情况。

当主机 pCPU 使用率为 100% 时

当主机达到 100% 的主机 pCPU 使用率时,请使用以下 VM 指标来决定是否将 VM 移至另一台主机:

runstate_concurrency_hazard

  • runstate_concurrency_hazard > 0% 表示有时至少有一个 vCPU 正在运行,同时至少还有一个 vCPU 想要运行但无法获得 pCPU 时间。如果 vCPU 必须进行协调,此行为会导致出现性能问题。

  • runstate_concurrency_hazard 接近 100% 是需要避免的情况。

    建议执行的操作:

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

    • 减少 VM 中的 vCPU 数量。
    • 将 VM 移至另一台主机。
    • 请通过迁移其他 VM 或者减少其 vCPU 数量来减少主机上的 vCPU 总数。

runstate_partial_contention

  • runstate_partial_contention > 0% 表示至少有一个 vCPU 想要运行但无法获得 pCPU 时间,也表示至少还有一个 vCPU 被阻止(因为无事可做,或者正在等待 I/O 完成)。

  • runstate_concurrency_hazard 接近 100% 是需要避免的情况。

    建议执行的操作:

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

    • 减少 VM 中的 vCPU 数量。
    • 将 VM 移至另一台主机。
    • 请通过迁移其他 VM 或者减少其 vCPU 数量来减少主机上的 vCPU 总数。

runstate_full_contention

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

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

    建议执行的操作:

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

    • 减少 VM 中的 vCPU 数量。
    • 将 VM 移至另一台主机。
    • 请通过迁移其他 VM 或者减少其 vCPU 数量来减少主机上的 vCPU 总数。

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

如果主机未达到 100% 的主机 pCPU 使用率,请使用以下 VM 指标来确定 VM 的 vCPU 数量是否正确:

runstate_fullrun

  • runstate_fullrun = 0% 表示从未同时使用 vCPU。

    建议执行的操作:

    减少此 VM 中的 vCPU 数量。

  • 0% < runstate_fullrun < 100% 表示 vCPU 有时会同时使用。

  • runstate_fullrun = 100% 表示始终同时使用 vCPU。

    建议执行的操作:

    您可以增加此 VM 中的 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 存储服务器是否过载。如果不是,则 VM 可能有太多 vCPU,您可以减少此 VM 中的 vCPU 数量。当主机 CPU 使用率达到 100% 时,VM 中的 vCPU 过多会增加 VM 进入并发危险状态的风险。

监视 CPU 使用率