Windows 下面控制CPU 频率的方法

CPU 的功耗和频率是直接相关的,进入 Windows 后,IntelPPM 会接管频率控制,所以目前我还没有找到能够直接控制的方法,需要和 BIOS 进行配合才能完成。

在KBL-R HDK Windows 10  16299发现下面一个可行的方法:

  1. BIOS中设置 Speed Shift 为Disabled, EIST需要设置为 Enabled;
  2. 在进入Windows之前,设置 MSR 0x1A0 Bit16 为0。这个位置是 EIST 功能的开关,在进入 Windows之前,将这个位置关闭,对BIOS来说,EIST的准备已经完成,对于Windows来说,EIST是关闭的,因此他不会让驱动接管这个功能,这样才能让我们有设定CPU 频率的机会:

  1. 进入系统之后,使用 RW-Everything 修改 MSR , 首先将 MSR 0x1A0 Bit16 设置为 1,重新打开 EIST 功能,然后通过 MSR 0x199 BIT[14:8]来写入 Ratio。比如,写入 8 就是 800Mhz。

写入之后,可以通过 MSR  198h 来读取当前的 Ratio。

上述设置完成之后,你会发现最低频率可以设置为 800Mhz,但是如果直接在BIOS中设定固定的频率,可以低到400Mhz;经过研究最终找到Root Cause: Race to halt 功能,这个功能大概的思想就是让CPU 超频一点点尽快完成操作然后休息节能。关闭这个功能之后可以设置最低到 400Mhz。

使用上述的方法再编写程序直接对 MSR 编程,在 Windows下工作正常。测试 400Mhz时播放视频感觉比较流畅,回想当年还要特意购买硬件解压卡才能在486DX2 66Mhz上观看VCD,CPU 运算能力真是不可同日而语了。

上述方法只在 Kabylake-R U42 Windows  16299 X64 上验证过,可以看出操作和 OS 有一定关系,笔者未能在其他版本上实验,有兴趣的朋友不妨试试然后给我留言交流。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注