对于内存占用过大的虚拟机,可以使用高级选项手动替代默认的虚拟 CPU 设置。

可以将这些高级选项添加到虚拟机配置文件中。

表 1. 虚拟 NUMA 控制的高级选项

选项

描述

默认值

cpuid.coresPerSocket

确定每个虚拟 CPU 插槽的虚拟内核数。如果该值大于 1 且虚拟机具备虚拟 NUMA 拓扑,则还可确定虚拟 NUMA 节点的大小。如果知道每个物理主机精确的虚拟 NUMA 拓扑,则可以设置此选项。

1

numa.vcpu.maxPerVirtualNode

如果 cpuid.coresPerSocket 严格限定为 2 的幂,则可以直接设置 numa.vcpu.maxPerVirtualNode。在这种情况下,请不要设置 cpuid.coresPerSocket

8

numa.autosize

设置此选项时,虚拟 NUMA 拓扑中每个虚拟节点的虚拟 CPU 数等于每个物理节点的内核数。

FALSE

numa.autosize.once

当使用这些设置创建虚拟机模板时,请确保这些设置在您以后每次打开虚拟机电源时保持不变。如果修改了虚拟机上配置的虚拟 CPU 数,则需要重新评估虚拟 NUMA 拓扑。

TRUE

numa.vcpu.min

虚拟机中生成虚拟 NUMA 拓扑所需的虚拟 CPU 的最小数目。

9

注:

numa.autosize 设置为 TRUE 时,如果是手动或通过脚本设置该配置,则某些客户机可能无法处理动态更改。

例如,在每个节点具有四个内核的物理主机上设置并测试使用 numactl 系统实用程序配置的 Linux 应用程序。对于具有八个虚拟 CPU 的虚拟机,主机需要两个 NUMA 节点。如果相同的虚拟机在每个节点具有八个内核的系统上运行(可能会在 vMotion 操作期间发生),且将 numa.autosize 设置为 TRUE,则只会创建一个虚拟 NUMA 节点(而不是两个虚拟 NUMA 节点)。当 numactl 引用第二个虚拟 NUMA 节点时,操作将失败。

要避免发生这种情况,脚本应当足够智能,能首先查询 numactl --hardware。否则,必须明确设置 NUMA 拓扑或者允许默认的 numa.autosize.once 设置生效。