【作者: 张赐荣】

在 Windows 11 上通过 VMWare Workstation pro 运行 Windows XP 虚拟机时,经常会遇到声音断断续续、滋滋啦啦的“爆音”或者听起来像“磁带拉长音”的撕裂现象。

很多朋友以为这是由于虚拟机性能不足引起的,但实际上,这是 Windows11 默认时钟调度方法冲突和操作系统的激进节能策略所导致的兼容性问题。

Windows XP 系统在设计之初,默认物理硬件提供的时钟节拍是均匀、高频且固定不变的。

但是,Windows 11 为了追求极限省电,引入了动态时钟周期机制:当系统检测到任务不繁重时,Win11 会让 CPU 内部的计时节拍器变慢,并且,微软在系统上更改了 NtSetTimerResolution  API 的行为,默认限制应用程序只能修改自身的定时器周期。

Win11 忽快忽慢、时断时续的时钟频率,直接导致 VMware 无法匀速、平稳地与虚拟声卡传递音频数据。每当 Win11 时钟停顿或延迟的那几毫秒,音频流就会发生断流、撕裂,传到耳机里就变成了我们听到的爆音和杂音。

可以尝试在宿主机 Win11 上用下面的方法解决该问题:

以管理员权限打开 PowerShell 或 CMD,直接执行以下两行命令并重启物理机,即可:

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel" /v "GlobalTimerResolutionRequests" /t REG_DWORD /d 1 /f

bcdedit /set disabledynamictick yes

执行完后,重启电脑。

shutdown /r /t 0

上面这两行命令,本质上是强制剥夺了 Windows 11 的自动节能休眠权,使其内核退回到传统的“高性能、零延迟”运行状态:

reg add "HKLM\... \kernel" /v "GlobalTimerResolutionRequests" /t REG_DWORD /d 1 /f

原理是微软在 Windows11 中默认屏蔽了第三方软件全局修改时钟精度的权限。这行注册表的作用是强行打开内核开关(将该值设为 1),允许 VMware 进程向 Win11 申请最高级别的时钟精度。

效果表现为,系统允许将时钟分辨率从粗糙的 15.6ms 瞬间拉高到极其精准的 0.5ms ~ 1ms。

bcdedit /set disabledynamictick yes

光有注册表还不够,因为 Win11 霸道的“动态时钟滴答省电策略拥有最高优先级,随时会把时钟重新降频。这行命令使用系统引导编辑器(bcdedit),禁用了动态调整时钟周期功能。

强制 CPU 内部的节拍器不再为了省电而偷懒停顿,而是像流水一样源源不断、均匀且高频地提供高精度时钟节拍。

当然了,这么设置也并非没有缺点,会强制CPU停用深度休眠,代价是功耗略微上升,笔记本续航可能会缩短。
 

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐