[ 1/背景:折腾 Hyper-v 的 CPU 控制]
为了在 Hyper-v 体验处理器资源控制(如限制单个虚拟机占宿主机系统资源的百分比等等),需要将 hypervisorschedulertype 从默认的 root 调整为 classic 或 core ,否则 Hyper-v 会提示“Hyper-V 未配置为启用处理器资源控制。”原因如下:
“启用虚拟机监控程序根计划程序时,不支持 Hyper-V 提供的虚拟机处理器资源控制,因为根操作系统的计划程序逻辑正在全局管理主机资源,并且不知道 VM 的特定配置设置。 每个 VM 的 Hyper-V 处理器资源控制(例如上限、权重和保留)仅适用于虚拟机监控程序直接控制 VP 计划(如经典和核心计划程序类型)。”
(
https://learn.microsoft.com/zh-cn/windows-server/virtualization/hyper-v/manage/manage-hyper-v-scheduler-types )
[ 2/问题:Vmware 的 CPU 调度失控]
在正常情况下,Vmware WorkStation 最近的几个版本已经实现和 Hyper-V 并存。但在 12 代酷睿兼容性方面,Vmware/微软或者 intel 历时一年依旧没有解决 Vmware 负载随机性跑在小核被大核围观的问题。目前可以通过设置 vmware-vmx.exe 的 CPU 相关性或通过 vmx 配置文件解决。
如前所述,为体验 Hyper-v 的处理器资源限制功能,根据官方文档并参考相关教程,在终端 /Powershell (管理员权限)下运行指令:
bcdedit /set hypervisorschedulertype Classic 。
重启后发现,与 Hyper-V 同时并存的 Vmware 性能出现问题。
表现为,在 12 代酷睿 Win11 环境下,为 Vmware 虚拟机设置 CPU 相关性无任何效果,Vmware 几乎所有负载跑在了小核,任务管理器修改 /ProcessLasso/修改电源计划类型 /在 vmx 配置文件中屏蔽小核……所有传统的调度控制方法均无效。
[ 3/解决:放弃 Hyper-v 自带的 CPU 资源控制]
第一时间想到肯定是上述 Hyper-V 虚拟机监控程序计划程序类型的调整导致问题产生。
重新回到终端 /Powershell (管理员权限)下运行指令:bcdedit /set hypervisorschedulertype Root
重启后发现,Vmware 的 CPU 调度恢复正常,所有负载均跑在大核上。
实测证明,12 代酷睿不适合使用 Hyper-v 的 CPU 资源控制功能。
[ 4/附言:vmware 兼容性遗留问题]
在 Win11+12 代酷睿环境下,Hyper-v 与 Vmware 共存时,使用任何方法控制 vmware 虚拟机的 CPU 相关性,都有概率导致 vmware 虚拟机无法启动(一般为初次启动时 /或者在已经运行 2 个 vmware 虚拟机后开启第 3 个),提示“无法打开…….vmx”。此时无需按照网上通说教程从主板完全屏蔽小核,或者放弃通过任务管理器或配置文件屏蔽小核,只需要在 Vmware WorkStation 虚拟机界面疯狂鼠标左键点击“开启此虚拟机”。
实测,设置 Vmware 的相关性只需要调整 vmware-vmx.exe 和 mksSandbox.exe (这个是否需要存疑,但我个人习惯同时设置);但如果手抖将 vmware.exe 也设置了 CPU 相关性,会导致 vmware 虚拟机 100%无法开启(即上述“无法打开…….vmx”提示),此时疯狂点开机也无济于事。