![如何正确设置 OpenVz VE 的 CPU 单元](https://linux22.com/image/572418/%E5%A6%82%E4%BD%95%E6%AD%A3%E7%A1%AE%E8%AE%BE%E7%BD%AE%20OpenVz%20VE%20%E7%9A%84%20CPU%20%E5%8D%95%E5%85%83.png)
根据我读过的所有资料(openvz wiki、各种邮件列表、论坛等),cpuunits 设置的值是相互关联的。因此,当所有值相等且系统繁忙时,所有值都会获得相同的 CPU 份额。
但有些事情还是让我很困惑:为什么有一个工具“vzcpucheck”可以显示“节点/主机的功率”:
Current CPU utilization: 18000
Power of the node: 880001
当所有设置都只是相对的时,为什么会有一个绝对数字(我需要吗)?
这两种设置的结果难道不应该完全相同吗?
ve1: 1
ve2: 1
ve3: 1
= 3
ve1: 293334
ve1: 293334
ve1: 293334
= 880001 (power of the node)
有什么不同?
答案1
CPU 单元是 CPU 优先级。当有多个 VPS 帐户需要的 CPU 处理能力超过某一时刻可用的总处理能力时,CPU 优先级就会发挥作用。
例如,假设有两个 VPS 帐户,VPS-A 有 800 个 CPU 单元,VPS-B 有 400 个 CPU 单元。如果两个 VPS 帐户同时请求 100% 的 CPU,则 VPS-A 获得的 CPU 时间将是 VPS-B 的两倍,因为 800 是 400 的两倍。
如果硬件节点上没有其他 VPS 帐户需要 CPU,VPS 仍然可以获得 100% 的 CPU,但是一旦另一个 VPS 需要 CPU 时间,该百分比就会下降。
因此,如果你想建立一个系统,让容器真正获得保证您需要的 CPU 数量以确保您不会超额认购,并仔细计算您的 CPUUNIT 与您的节点功率。节点的功率允许您计算单个 CPUUNIT 的价值(如果您没有超额认购)。例如,具有 30 个 CPUUNIT 的 3hgz 计算机意味着 1 个单元价值 0.1 ghz(这些不是实数)。因此,您可以将其用作指南,如果一个虚拟机需要 1 ghz 而另一个虚拟机需要专用的 1.5ghz,则分别使用 10 和 15。只需确保您总共分配的 CPU 单元不超过 30 个,否则 10 不再代表 1 Ghz 的保证。
节点的力量确实解决了这个问题:两个 3GHz 的 CPU 每秒执行的计算量可能不同由于技术进步/架构不同。因此,即使 CPU 频率相同,不同的节点也可能能够处理更多或更少的容器。这就是为什么亚马逊以 ECU 而不是 GHz 来宣传计算能力的原因。
您可能会发现使用 cpulimit 更简单,这是容器不能超过的 CPU 百分比。如果您有两个核心,则最高 200% 的值是可以接受的。但是,以前的设置更像是“带突发的专用 CPU”,而这个,设置“专用 CPU”更容易(但您仍然必须确保不要超额订阅百分比)
答案2
因为 CPU 单元必须读作“保证的 CPU 单元”。这澄清了真正的含义。
每个 VE 都可以潜在保证节点的所有功率减去所有 CPU 功率后,其他所有 VE 均能获得该功率。