是否有一个设置可以手动添加到 VMWare.vmx
文件中,以强制它在 VM 首次启动时立即分配分配给 VM 的所有 RAM?
我知道通常最好让 VMWare 根据 VM 的需要逐渐为 VM 分配 RAM。但在这种情况下,我确实希望/需要预先分配所有 RAM。
背景
我有一台 MacPro,配备 64GB RAM 和 24 个处理器。我使用 VMWare Fusion 11 进行虚拟化。我想要一个强大的 Windows VM(8 个处理器 + 32GB RAM)。启动 VM 需要 8 分钟,VM 的 CPU 全部处于 100% 状态。
我在 VMWare 论坛上看到,虚拟机无法使用主机的内存管理器来分配 RAM,而必须使用主机的 CPU。VMWare 在启动过程中缓慢地为虚拟机分配 RAM,而虚拟机的 CPU 则会在调整以适应分配给它的更多 RAM 时保持稳定。
启动期间的高 CPU 时间与分配给 VM 的 RAM 量成正比:
- 4GB = 1分钟
- 8GB = 2分钟
- 16GB = 4分钟
- 32GB = 8分钟
我IOMMU
在虚拟机中启用了将虚拟内存地址映射到物理地址的功能,希望这样可以减少虚拟机的 CPU 开销,但这没有帮助。
由于 Windows 必须使用 CPU 来管理分配给 VM 的 RAM,因此我认为将这一个 VM 设置为预先分配所有 32GB RAM 会更有效率,这样在启动时就会立即一次性分配所有 32GB,而不是在启动期间逐步分配 RAM。
一旦 VMWare 将所有 RAM 分配给虚拟机,CPU 活动就会变为 0%。如果我重新启动虚拟机,VMWare 知道虚拟机将立即再次使用,因此它会将 RAM 分配给虚拟机,因此重新启动非常快(30 秒,不固定 CPU)。
有没有办法强制 VMWare 虚拟机在启动时立即分配分配给 VM 的所有 RAM?
(由于我使用的是 Fusion 11,因此我推测我需要手动编辑该.vmx
文件...)
编辑#1 在得到一些帮助和阅读大量资料后,我尝试了这些设置,但这些设置并不能使主机操作系统在开机时将所有 RAM 分配给虚拟机:
sched.mem.min = "4096"
sched.mem.pin = "TRUE"
sched.mem.pshare.enable = "FALSE"
mainMem.useNamedFile = "FALSE"
prefvmx.minVmMemPct = "100"
prefvmx.useRecommendedLockedMemSize = "TRUE"