搬运自百度贴吧-windows的原生电源管理并没有那么省电
先做个实验,打开你们的任务管理器,或者最好是打开Throttlestop(如果有的话),然后打开一个网页,上下滚动页面,然后看看cpu的频率。如果你开了自动变频的话,你会看到频率几乎很少降到低频,然后在Throttlestop中你会观察到并不低的功耗,如果你用8代cpu的话,会看到4到5w以上的功耗和比较高。自从intel在cpu节能功能的硬件设计上越走越远,我们看到cpu的闲置状态越来越多,越来越激进,从c0一直到c10,最高是c10,在这一状态下,不仅cpu完全关闭,而且外围的设施,电压也几乎降到0,相当于整个平台都关了。功耗确实几乎为0,但是否cpu在整个运行过程中也是最省电呢?不一定。举个例子,假设系统每隔15ms都有任务需要处理,而大部分都是周期性的重复任务,比如检查一些系统变量,然后定期修改。在过去没有省电功能时,cpu完成任务后就处于空闲状态,这个空闲状态往往指的是c1或者加强版的c1e状态,cpu的时钟降下来了,但是电压还维持着,缓存结构也开着,所以功耗并不低,但是刚才工作过的内容还在缓存里,所以重复任务时直接在缓存里面取数据和指令就行,节省了下一次工作的时间。而在最极致的c10状态下,cpu工作完就完全关掉了,所以缓存里的内容也全部都丢掉了,当下一次再工作时,全部数据都要重新从内存里面取,要消耗搬运数据的能量,关闭cpu带来的能量节省被重复地从内存取数的能量消耗所抵消了,因此最终能节省能量与否是不确定的。将cpu置于c10的最高状态是原生电源管理的默认策略,虽然在空闲阶段功耗几乎为0,但同时造成两种影响,一是重复从内存搬运数据带来的能量消耗,二是因为缓存内容丢失,每次开始工作都有大量的cache miss,在频率不变条件下,工作时间被延长了(因为cpu要等内存的数据才能真正开始工作,这个延迟比缓存大了不知多少倍),因此真正处于c10状态的低功耗时间被压缩了。如果想保持空闲时间不变,就必须提高频率来抵消延迟的影响,而提高频率就会提高电压,功耗三次方提升,从而节省的能量还抵消不了提高频率带来的功耗提升,最终可能反而更耗电,得不偿失,而windows恰恰就是这么干的。甚至你移动鼠标都会导致频率飙到最高,移动鼠标就是典型的周期性重复任务。那么怎样才能真正省电呢? 闲置状态太低如c1或c1e肯定不是,c10也不是,那就只可能是之间的某个状态了。实际上经过我的实验,c6状态是最省电的。这是什么状态呢?就是cpu的核心全部关闭,即一二级缓存关闭,与三级缓存相关的ring的状态保留,其时钟停止并处于最低电压状态,也就是ring的电压降低至刚好维持三级缓存内容的地步。此时只有这个三级缓存还耗着一点电,比c10状态下的功耗稍微高一点,但是cpu再工作时所有内容都从三级缓存取,不需要再经过内存控制器比内存快多了,所以性能又比c10高很多,整体来看功耗就是最低。 我们讨论完cpu的闲置状态后再来看windows犯的另一个错误,就是在变频机制中,频率下限定的太低。会有什么结果呢?就是这些低频率状态根本呆不住,只要负载一上去很快就变频了,而由于前面所述的闲置状态的问题,这个频率就直接飙到最高。我们把intel变频的机制与arm的大小核机制对比一下就会发现,处于不同频率状态的cpu实际上就是不同的大小核,低频完成相同任务耗能低,是“小核”,反之同理。而把频率下限定的太低,最低频的“小核”性能太低,难以承受一般任务,所以几乎就跟发生在arm世界里的事实一样,你看a53的小核根本呆不住,一下子就跑到a75、a76上去了,而苹果的小核几乎承担了所有日常任务,所以假使a53的能耗比比苹果小核高(实际上是相反的,这里就打个比喻),由于性能太弱,频繁触发大核,实际消耗能量反而更大。这样我们就知道优化思路了,就是提高频率下限,使得大部分的任务在大部分的时间都能够呆在我们设定的基准频率的“小核”上,这个小核同时还有更多的时间进入c6状态省电,而这个基准频率的能耗比下降很少,但换来更高的性能。超出基准频率的负载后,为了尽可能快的回到这个频率,我们可以选择直接跳到最高频率的“大核”状态,只要工作负载降到“小核”能够承担,马上切回小核状态。虽然大核状态仍然会很耗电,但是在整个时间里占比很小,所以对全局的电量消耗影响很小,反而体验大大提升了。 我们要改windows的调频策略,把下面代码复制到本文文档中 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\06cadf0e-64ed-448a-8927-ce7bf90eb35d] "Attributes"=dword:00000000 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\12a0ab44-fe28-4fa9-b3bd-4b64f44960a6] "Attributes"=dword:00000000 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\40fbefc7-2e9d-4d25-a185-0cfd8574bac6] "Attributes"=dword:00000000 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\45bcc044-d885-43e2-8605-ee0ec6e96b59] "Attributes"=dword:00000000 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\465e1f50-b610-473a-ab58-00d1077dc418] "Attributes"=dword:00000000 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\4b92d758-5a24-4851-a470-815d78aee119] "Attributes"=dword:00000000 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\4d2b0152-7d5c-498b-88e2-34345392a2c5] "Attributes"=dword:00000000 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\7b224883-b3cc-4d79-819f-8374152cbe7c] "Attributes"=dword:00000000 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\8baa4a8a-14c6-4451-8e8b-14bdbd197537] "Attributes"=dword:00000000 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\984cf492-3bed-4488-a8f9-4286c97bf5aa] "Attributes"=dword:00000000 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\c4581c31-89ab-4597-8e2b-9c9cab440e6b] "Attributes"=dword:00000000 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\d8edeb9b-95cf-4f95-a73c-b061973693c8] "Attributes"=dword:00000000 再把文档后缀名改为.reg文件,然后导入到注册表中,打开高级电源设置选项 把下面的选项调整为 处理器性能提高阈值80% 处理器性能降低阈值20% 处理器性能降低策略 rocket 处理器性能增强策略100% 处理器性能提升策略 rocket 处理器闲置降级阈值60% 处理器性能检查间隔10毫秒 处理器闲置升级阈值60% 处理器性能自主模式已禁用 处理器性能提升时间10时间检查间隔 处理器闲置时间检查18000微秒 处理器性能下降时间1时间检查间隔 接下来调节处理器最小状态,打开你们的任务管理器,看到基准速度,我的是1.8Ghz,然后我们要调到1.6Ghz,是之前最低频的两倍,那么处理器最小状态就调节为1.6/1.8约等于88%,如果你的基准速度是2.2Ghz,就调节为1.6/2.2约等于73% 这样我们就完成了整个调整策略 现在你可以发现整个系统的表现截然不同了,你可以观察Throttlestop中功耗的明显变化和cpu温度可见的降低,并且系统更流畅,这些都是策略调整后的效果。