VMware虚拟机性能优化:如何针对大小核架构进行核心调度
VMware虚拟机性能优化:如何针对大小核架构进行核心调度
VMware Workstation在2023年之前的版本没有针对大小核架构的CPU进行优化,导致Windows系统在分配核心给虚拟机时存在一些问题。对于12代和13代酷睿CPU,由于效率核(P-cores)和能效核(E-cores)的数量差异,Windows系统在初始阶段会优先将能效核分配给虚拟机,这会导致虚拟机启动缓慢。当虚拟机运行大负载时,Windows系统会将效率核切换给虚拟机,但如果你在操作Windows系统而不是VMware界面时,系统会认为虚拟机是后台程序,很快又切换回能效核。
然而,VMware Workstation似乎并不区分自己运行在什么核心上。效率核速度快,并且在资源紧张时优先使用,而能效核则可能处于闲置状态。在频繁切换操作虚拟机和Windows系统的情况下,核心切换本身也会造成一定的卡顿,影响虚拟机的操作流畅度。此外,13代CPU在不操作时会停用能效核以节省电力,此时唤醒虚拟机可能需要三四秒的时间。
在虚拟机中运行的Ubuntu 22.04也无法区分大小核。假设一个程序需要4线程并行运行,如果Windows系统给虚拟机分配的线程分布在3个能效核和1个效率核上,那么在效率核的线程完成计算后,还需要等待能效核的线程完成才能看到结果。因此,在大多数情况下,虚拟机的使用速度主要取决于能效核的性能。
解决方案:指定VMware占用的CPU编号
虽然这不是一个“严谨”的解决方案,但总体上是有效的。你可以通过修改虚拟机配置文件(.vmx文件)来指定哪些CPU线程可用或不可用。具体步骤如下:
- 打开虚拟机文件夹下的配置文件(name.vmx,其中name是你虚拟机的名称),以文本方式打开。
- 在文件末尾添加以下内容来指定哪些线程可用或不可用:
Processor0.use = "TRUE"
Processor1.use = "TRUE"
Processor2.use = "TRUE"
Processor3.use = "TRUE"
Processor4.use = "TRUE"
Processor5.use = "TRUE"
Processor6.use = "TRUE"
Processor7.use = "TRUE"
Processor8.use = "FALSE"
Processor9.use = "FALSE"
Processor10.use = "FALSE"
Processor11.use = "FALSE"
Processor12.use = "FALSE"
Processor13.use = "FALSE"
Processor14.use = "FALSE"
Processor15.use = "FALSE"
这适用于一个具有4个效率核和8个能效核的CPU,共16个线程的情况。其中,4个效率核对应前8个线程(编号0-7),8个能效核对应后8个线程(编号8-15)。通过将后8个能效核的线程设置为FALSE,可以实现仅在效率核上运行虚拟机。
当然,你也可以通过这种方式实现仅在能效核上运行虚拟机,这样可以避免大小核自动切换调度导致的卡顿问题。或者,你可以固定最后4个能效核给虚拟机使用,因为前面的线程可能被Windows系统中的许多进程占用,导致资源竞争。在这种情况下,使用最后4个空闲的能效核可能是一个更好的选择。
注意:设置为TRUE的线程数量必须大于虚拟机配置的CPU数量,否则可能会导致虚拟机无法启动。