让Windows 11的性能调度更加灵活

查看 249|回复 0
作者:z3ucf91v   

用到的东西见评论区。
Windows 11 22H2开始可以部署不同场景和不同线程使用的设置。(虽然文档说10也有一部分,但是powercfg报错,说明不能用)
仅限Windows 11 22H2及以上,并且需要酷睿10代或锐龙桌面端3000系或锐龙移动端5000系及以上,骁龙的不清楚,应该也能用。
不同的场景包括节电模式,游戏模式,还有modern standby用的电源设置,其他的不太重要:
查看链接
不同进程包括有窗口的前后台进程,EcoQoS,后台服务等:
查看链接
场景和进程类型能用的电源设置都在这写了,脚本故意去掉了一些没什么用的设置,需要的话也可以手动填:https://learn.microsoft.com/en-us/windows-hardware/customize/power-settings/configure-processor-power-management-options
不同的power profile和QoS level在powercfg里用的alias,注意default就是电源计划或overlay,设置方法不是本文关心的:
文档提到的alias里有一两个是Windows并没有的,可以用powercfg /aliasesh查看,脚本里的alias都是目前的Windows 11 22H2正式版有的。
首先必须把当前的电源计划改成平衡类型,之后不能再改了。(怎么处理overlay已经在cv20805800讲过了)
(这么做的原因:芯片厂商和OEM只能往平衡计划和overlay里写入这些设置,但是不知道为什么实测中它们仍然可以在其他类型的计划里生效;powercfg只能往scheme_balanced里写入这些设置,换成节能计划的scheme_min或高性能计划的scheme_max就会报错;不能改回去是因为自己写的设置在切换电源计划类型后会立刻失效,必须重新设置)
注册表打开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power,确认EventProcessorEnabled是1,如果是0的话要改成1并重启。
然后,CMD里输入powercfg /queryprofile,查看芯片厂商和OEM往power profiles和QoS level里写了什么设置,如果有什么设置不喜欢的话就记下来。
(不得不提AMD突破物理定律,成功让Zen3+和Zen4在2.5GHz下比2Ghz更省电)
打开Microsoft Store,下载Windows Configuration Designer,点击Provision desktop devices:
填一个喜欢的名字,把路径复制下来,点finish,进入新页面后,往下滑,然后点左下角的switch to advanced editor,然后关闭软件或关闭project,因为待会要重新打开才会加载新的xml:
资源管理器里进入刚刚新建的项目,把customizations.xml删了:
打开下载的脚本的文件夹,在想填的powercfg命令结尾填上设置的数字,不同设置的alias和GUID用powercfg /aliasesh查看;设置能填什么数字就不用说了,powercfg /qh和PSE里都有写;powercfg /qh里显示的是16进制,但是脚本里要用十进制:
虽然文档只说了部分可以写进去的设置,但是其实处理器电源管理里面的全部设置都可以填进去,但是也别瞎填,比如说QoS level的设置是应用到特定进程种类的,往里面写core parking的设置没有任何意义,最好还是照着文档来,自动生成的模板只用了文档说的那些设置:
(scheme_balanced对所有平衡类型的计划都会生效,这里换成scheme_min或scheme_max或scheme_all或scheme_current都会报错,可以用overlay的alias,但是Windows 11切换overlay不如10方便,干脆别用)
运行修改后的脚本或者单独复制命令出来运行,然后运行create xml.bat,生成新的customizations.xml,并复制到刚刚的项目目录里。
回到Windows Configuration Designer,点export,owner选后3个,保证自己的provisioning package的优先级比微软,芯片厂商和OEM都更高:
(新的xml的默认名字是OEM,这个不重要,owner比OEM级别更高就行)
一路点next,然后点build。回到资源管理器,发现多了一个ppkg文件,双击安装:
然后打开powershell,运行Get-ProvisioningPackage就能确认已经安装上了:
要修改的话,首先到设置的这个地方删除ppkg,然后重做一遍生成xml到导出ppkg的步骤,这里把ppkg删了并不会让设置失效,但是为了避免不同的ppkg发生冲突最好是删了,然后必须到注册表里把对应的prov index删了才能让设置失效:
如果还想快速清除芯片厂商和OEM写的这些设置的话,可以运行这个(当然自己写的设置也会被清除):
(Get-ChildItem -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Power\PowerSettings" -Recurse).Name | % {Remove-ItemProperty -path $_.Replace("HKEY_LOCAL_MACHINE","HKLM:") -Name "Prov*Index"}
(Get-ChildItem -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Power\PowerSettings" -Recurse).Name | % {Remove-ItemProperty -path $_.Replace("HKEY_LOCAL_MACHINE","HKLM:") -Name "Override*Index"}
原理是只要删除了名字里带 Prov(ision) 的index就可以使它们失效;有些预装设置用的是名字里带override的index,生成xml的时候会混进去,删了的话干净一些。
(电源计划和overlay里可能也会有一些provision index,不过那些不重要,能走到这一步的人已经足够了解怎么调电源设置了)
原本不想写这个教程的,因为比较繁琐,而且这东西有很大玄学,比如同样是填最大频率1GHz然后跑分,电源计划里填就可以让最大频率锁在1GHz左右,EcoQoS里填就做不到,跑分的那个核大约1.4GHz,其他不跑分的核反而1.1GHz左右。但是还是想把Windows的电源设置涉及的东西讲明白。
   









电源, 计划, 删了

您需要登录后才可以回帖 登录 | 立即注册

返回顶部