我有一台 Ubuntu VMWare VM,它配备了 6 个 CPU,但很少看到超过 1 的负载。它在 vSphere 5.5 集群中运行。
现在,VMWare 的 CPU 调度程序必须清除 6 个 CPU 来处理此 VM,我想减少 CPU 数量并提高整个主机的性能;但是,我想在不让 6 CPU VM 停机的情况下执行此操作。
我已运行以下命令来无中断地禁用三个 CPU。
echo 0 | sudo tee /sys/devices/system/cpu/cpu5/online
echo 0 | sudo tee /sys/devices/system/cpu/cpu4/online
echo 0 | sudo tee /sys/devices/system/cpu/cpu3/online
通过在 OS 内核中禁用这些 CPU,我是否实际上向 ESXi 主机发送了适当的信号,要求仅清除 3 个核心(而不是 6 个)来在此服务器上执行操作?
如果这不起作用,还有其他方法可以做到这一点而无需虚拟机停机吗?
答案1
这不会向内核下的任何内容发送任何信号。它所做的是限制调度程序在这些核心上创建新进程,并让这些核心不再有退出进程。
这将允许您安全地热插拔它们 - 在您的情况下 - 将您的核心数量减少到三个。效果将是立竿见影的,尽管您可能系统冻结的时间非常短(少于几毫秒)。
您需要为虚拟机启用 vCPU 热插拔才能使其正常工作。启用此功能还会禁用 vNUMA,这是一种内存带宽优化技术,可能在高负载情况下为您提供帮助 - 虽然这听起来不像是您的情况。