VMware 虚拟机性能优化:CPU Stuck 问题
1. 问题
在 Windows 主机上通过 VMware Workstation Pro 运行 Linux 虚拟机时,即便物理机配置很高,有时也会遇到虚拟机内核报错:watchdog: BUG: soft lockup - CPU#X stuck for XXs!。
该问题通常表现为虚拟机卡顿,或导致 VS Code 远程 SSH 会话中断。
2. 原理:虚拟化架构冲突
- Type-1 Hypervisor (裸金属型)
直接安装在物理硬件上,操作系统(如 Windows)本身都运行在它之上。Windows 自带的 Hyper-V 就是典型的 Type-1。它会优先、且完全地控制 CPU 的硬件虚拟化扩展(AMD-V / Intel VT-x)。 - Type-2 Hypervisor (托管型)
作为一款应用程序,安装在操作系统(如 Windows)之上。VMware Workstation 就是典型的 Type-2。在理想情况下,它需要直接访问 CPU 的硬件虚拟化扩展来实现高性能。
当 Windows 系统启用了 Hyper-V(或依赖它的功能,如 WSL2、虚拟机平台),Type-1 的 Hyper-V 就已经霸占了硬件控制权。这迫使 Type-2 的 VMware 降级到一种低性能的软件兼容模式(WHPX)运行,性能和稳定性都大打折扣,从而引发 CPU stuck 等问题。
3. 优化实践
测试环境与命令:
- 物理机: Windows 11 Host, AMD R7 5800H, 64GB RAM, NVMe SSD
- 虚拟机: VMware Workstation Pro, Guest OS 为 Arch Linux (6核, 16GB RAM)
- 测试命令:
sysbench cpu --cpu-max-prime=20000 --threads=6 run
步骤一:关闭 Hyper-V
解除 Hyper-V 对硬件的占用,让 VMware 能直接与硬件通信。
配置方法:
以管理员身份打开 CMD 或 PowerShell,执行以下命令,然后必须重启电脑。
bcdedit /set hypervisorlaunchtype off效果验证:
| 测试项 | Test 1 (Hyper-V 开启) | Test 2 (Hyper-V 关闭) | 变化 |
|---|---|---|---|
| CPU 速度 (events/sec) | 6142.24 | 6809.48 | +10.86% |
| 最大延迟 (max latency) | 41.12 ms | 4.02 ms | -90.2% |
步骤二:绑定专属核心
为虚拟机分配专属的 CPU 核心,消除宿主机其他进程的干扰。
配置方法:
- 分配核心:在 VMware Pro 中,关闭虚拟机,进入“设置”->“处理器”。将核心数设置为你希望分配的数量(例如,我的物理机有 16 个逻辑核心,我为虚拟机分配 12 个,为 Windows 保留 4 个)。
- 绑定亲和性:点击“亲和性”按钮,在弹窗中只勾选你想让虚拟机使用的物理 CPU 核心。例如,我只勾选了
CPU 4到CPU 15。 - 提升优先级 (可选) :启动虚拟机后,在 Windows 任务管理器中找到
vmware-vmx.exe进程,将其优先级设置为“高”或“实时”。
效果验证:
| 测试项 | Test 2 (仅关闭Hyper-V) | Test 3 (亲和性+优先级) | 变化 |
|---|---|---|---|
| CPU 速度 (events/sec) | 6809.48 | 10204.25 | +49.85% |
4. 最终结果
| 关键指标 | Test 1 (初始状态) | Test 3 (最终优化) | 总提升 |
|---|---|---|---|
| CPU 速度 (events/sec) | 6142.24 | 10204.25 | +66.13% |
在绑定了专属核心后,CPU 性能再次暴涨近 50% !这是因为虚拟机不再需要和宿主机进程争抢 CPU 时间片,并且极大地提高了 CPU 缓存命中率。