Skip to content

VMware 虚拟机性能优化:CPU Stuck 问题

约 798 字大约 3 分钟

计算机技术

2025-09-20

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.246809.48+10.86%
最大延迟 (max latency)41.12 ms4.02 ms-90.2%

步骤二:绑定专属核心

为虚拟机分配专属的 CPU 核心,消除宿主机其他进程的干扰。

配置方法:

  1. 分配核心:在 VMware Pro 中,关闭虚拟机,进入“设置”->“处理器”。将核心数设置为你希望分配的数量(例如,我的物理机有 16 个逻辑核心,我为虚拟机分配 12 个,为 Windows 保留 4 个)。
  2. 绑定亲和性:点击“亲和性”按钮,在弹窗中只勾选你想让虚拟机使用的物理 CPU 核心。例如,我只勾选了 CPU 4CPU 15
  3. 提升优先级 (可选) :启动虚拟机后,在 Windows 任务管理器中找到 vmware-vmx.exe 进程,将其优先级设置为“高”或“实时”。

效果验证:

测试项Test 2 (仅关闭Hyper-V)Test 3 (亲和性+优先级)变化
CPU 速度 (events/sec)6809.4810204.25+49.85%

4. 最终结果

关键指标Test 1 (初始状态)Test 3 (最终优化)总提升
CPU 速度 (events/sec)6142.2410204.25+66.13%

在绑定了专属核心后,CPU 性能再次暴涨近 50% !这是因为虚拟机不再需要和宿主机进程争抢 CPU 时间片,并且极大地提高了 CPU 缓存命中率。