我知道我可以测试这一点,但我现在没有时间设置原始测试条件来学习一些应该以文档形式记录的内容 - 而且我无法以权威形式找到这些内容。
我认为虚拟机上消耗的 CPU% 与分配给虚拟机的总 CPU 有关,并且主机上的备用 CPU 周期平均分配给主机中所有正在运行的虚拟机。
假设一台主机上有 2 个虚拟机,VM1正在消耗50%
主机 CPU 容量,并且VM2正在消耗10%
主机 CPU 容量。因此40%
CPU 容量可用并均等分配给正在运行的虚拟机。
VM1 sees
70%
总主机 CPU 的CPU 潜力(50%
实际消耗的 CPU +20%
或一半的备用周期)。所以VM1记录 CPU 消耗71.42%
(50%
实际/70%
分配总量*100=71.42%
和28%
CPU 空闲量)。
VM2 sees
30%
总主机 CPU的 CPU 潜力(10%
实际消耗的 CPU +20%
或另一半备用周期)。因此,VM2记录CPU消耗33.333%
和66.666%
空闲情况。
停止任何一台虚拟机都会立即增加另一台虚拟机可用的备用 CPU,并且这会表现为另一台虚拟机的 CPU 消耗下降。
对还是错?如果是错的,我不明白什么?
答案1
您在这里使用了一些标签,似乎您正在寻找一个通用答案。这可能是不可能的:KVM 和 Vmware 处理事情的方式不同。
在 ESXi 中,使用两种方法为虚拟机分配 CPU:
- CPU 核心数
- 原始 MHz 的限制
单个 CPU 核心最多可使用物理核心的速度,或 MHz 限制,以较低者为准。
ESXi 记录虚拟机使用的 MHz 数量。如果是多核,则将有更多余量。但是,单线程性能永远不会超过单个身体的核心的性能。
在虚拟机内部,它将看到分配给它的核心数量,并据此计算性能。
看起来你正在思考“当虚拟机计算资源超额订阅时,CPU 消耗指标如何变化”的问题。
对于 ESXi,它的工作方式如下:
主机:
- 4 核,每核 2.9GHz
VM1 和 2:
- 分配 3 个核心,无 MHz 限制
即超额认购了50%。
假设 VM1 使用了分配资源的 50%,VMware 会报告消耗了 4350 MHz,而 VM 中的 CPU 监视器将看到使用率为 50%。对于使用分配资源的 10% 的 VM2,VMware 会报告消耗了 870 MHz,而 VM 将看到使用率为 10%。
简而言之,虚拟机之间不会互相注意到。
现在来看看真正过度使用的情况。添加第三个虚拟机,配置与其他两个虚拟机相同,并假设这三个虚拟机都试图使用其 CPU 分配的 50%。我们有三个虚拟机试图使用 13050 MHz,但只有 1160MHz 可用。这是如何工作的,它是如何表现出来的?
同样,对于 ESXi,它会降低虚拟机的时钟频率,这样它们实际使用的 CPU 周期就会减少。它们实际上会使用 8700MHz 分配中的 3800MHz,因此报告的使用率为 43%。
答案2
我认为虚拟机上消耗的 CPU% 与分配给虚拟机的总 CPU 有关,并且主机上的备用 CPU 周期平均分配给主机中所有正在运行的虚拟机。
不,不一定。第一部分是正确的,但非愚蠢的 VM 主机可以优先处理 VM,因此分配可能相等,也可能不相等。
对或错?
错误的。
VM 上的 100% CPU 是它可以使用的任何切片,因为您在 VM 中看到的 CPU 消耗是在 VM 中测量的:
当虚拟机关闭时,您可以获得更多资源。当然。
但是,这是否会导致虚拟机的 CPU 使用率降低,或者只是任务完成得更快(并且使用率保持在 100%)取决于您的软件。如果您受 CPU 限制,则可以使用较大的分配。如果您不受 CPU 限制,则您将看到下降,因为您使用的“可用”切片较少。