揭秘EcoQoS和效率模式的原理

Windows 11 22H2新增的EcoQoS和效率模式讓不少人以為微軟搞出了什么很神奇的優(yōu)化魔法,我一直說(shuō)這些東西沒(méi)用,純屬圖一樂(lè)。下面就詳細(xì)講講這些東西到底做了什么。

微軟有兩個(gè)關(guān)于EcoQoS和效率模式的文章:
https://devblogs.microsoft.com/performance-diagnostics/introducing-ecoqos/
https://devblogs.microsoft.com/performance-diagnostics/reduce-process-interference-with-task-manager-efficiency-mode/
先從第二個(gè)的效率模式開(kāi)始,該文明確提到了效率模式有兩個(gè)行為:將進(jìn)程的基礎(chǔ)優(yōu)先級(jí)改為low,把QoS改為EcoQoS。

如果使用了能源之星這種軟件的話,基礎(chǔ)優(yōu)先級(jí)會(huì)被改為idle,因?yàn)榇a就是這么寫的。

于是很多人就以為這樣做就可以做到所謂的 “限制軟件后臺(tái)行為”。沒(méi)什么好說(shuō)的,但凡給跑分軟件打開(kāi)效率模式再跑分,看看cpu占用率就知道這種說(shuō)法是站不住腳的。
一個(gè)非實(shí)時(shí)操作系統(tǒng)一般是這么調(diào)度的:所有線程按照優(yōu)先級(jí)排序,優(yōu)先級(jí)高的先用cpu,用完了再給優(yōu)先級(jí)低的線程用,優(yōu)先級(jí)低的線程使用cpu的過(guò)程可以被高優(yōu)先級(jí)的線程打斷,以便快速響應(yīng)。所有線程加起來(lái)該用多久cpu就會(huì)用多久cpu,不會(huì)因?yàn)槟承┚€程的優(yōu)先級(jí)被改低了就少用cpu。
桌面端Windows在默認(rèn)情況下給線程單次最多使用30毫秒的cpu時(shí)間(一個(gè)quantum),并且會(huì)自動(dòng)為前臺(tái)線程多分配兩個(gè)quantum以保證響應(yīng)速度。

Windows會(huì)自動(dòng)提升前臺(tái)進(jìn)程的優(yōu)先級(jí):

從這個(gè)實(shí)驗(yàn)來(lái)看,一般情況下Windows會(huì)給有用戶輸入的前臺(tái)進(jìn)程提高4個(gè)優(yōu)先級(jí):

而且Windows每秒會(huì)檢查一次有哪些正在排隊(duì)等著用cpu卻因?yàn)閮?yōu)先級(jí)不夠高而一直無(wú)法使用cpu的線程,然后把這些線程的優(yōu)先級(jí)提高,并且給三個(gè)quantum。所以手動(dòng)調(diào)低大部分進(jìn)程的優(yōu)先級(jí)在絕大多數(shù)情況下是自作聰明的行為。

微軟說(shuō)效率模式可以提高響應(yīng)能力基本是睜眼說(shuō)瞎話。

然后來(lái)看EcoQoS,文章里提到

第一個(gè)問(wèn)題,這個(gè)東西需不需要軟件適配?文章下面的api文檔里面的說(shuō)法是:

歸類是什么意思?任務(wù)管理器里手動(dòng)打開(kāi)效率模式是歸類(見(jiàn)圖1),能源之星也可以給別的進(jìn)程啟用PROCESS_POWER_THROTTLING_EXECUTION_SPEED,就算什么都不做,Windows自己就會(huì)歸類,所以這個(gè)東西根本不需要任何軟件適配。

第二個(gè)問(wèn)題,也是最重要的問(wèn)題,微軟說(shuō)的 “系統(tǒng)將嘗試通過(guò)降低CPU頻率或使用更節(jié)能的內(nèi)核等策略來(lái)提高電源效率” 是怎么回事?
我不信微軟有什么優(yōu)化魔法,直接注冊(cè)表打開(kāi)HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\Profile\Events\{54533251-82be-4824-96c1-47b60b740d00},
EcoQoS的GUID是336c7511-f109-4172-bb3a-3ea51f815ada,然后把這個(gè)GUID拿去全局搜索就知道EcoQoS的葫蘆里賣什么藥了。
全新安裝的Windows 11 22H2的默認(rèn)值是這些:插電最大頻率2GHz,離電最大頻率1.8GHz,插電異類短運(yùn)行線程調(diào)度策略自動(dòng)

沒(méi)什么好說(shuō)的,微軟聲稱的最大能節(jié)約90%的cpu功耗是不是在全核鎖5GHz而且為了編譯Windows所以cpu占用率90%以上的臺(tái)式機(jī)上測(cè)的?這個(gè)限制頻率純屬搞笑,1.8GHz已經(jīng)大于等于所有12代u系列cpu的大核的基礎(chǔ)頻率了,后臺(tái)進(jìn)程能用到1.8GHz還談什么省電?但凡把處理器能源性能首選項(xiàng)策略改成和modern standby用的QoS level一樣的100都算微軟努力過(guò)了。
另外一個(gè)調(diào)度到高效核心上等于異類線程調(diào)度策略選高效處理器或首選高效處理器,我的評(píng)價(jià)是,我都可以用電源計(jì)劃全局應(yīng)用這個(gè)設(shè)置了,為什么要用EcoQoS?


至于效率模式為什么要求移動(dòng)端酷睿10代以上和移動(dòng)端銳龍5000系以上,原因很簡(jiǎn)單:這些cpu支持自主模式控制和分核心控制頻率。
酷睿從6代開(kāi)始支持自主模式控制,但是移動(dòng)端的分核心控制頻率直到10代才有。

移動(dòng)端銳龍一開(kāi)始就支持分核心控制頻率,但是自主模式控制直到5000系才有。

自主模式控制是為了當(dāng)有不同QoS level的線程在一個(gè)核心上輪轉(zhuǎn)時(shí),核心可以盡快確定不同QoS level所需的性能。
分核心控制頻率是為了讓多核cpu同時(shí)處理不同QoS level的線程。如果沒(méi)有這個(gè)功能,有一個(gè)限制了核心頻率的線程在一個(gè)核心上,而其他核心的頻率較高,那相當(dāng)于沒(méi)限制住頻率。

綜上所述,EcoQoS和效率模式基本上就是微軟宣傳部門混kpi的產(chǎn)物,沒(méi)活可以咬打火機(jī)。

附錄:關(guān)于EcoQoS的測(cè)試結(jié)果
平衡計(jì)劃下,給跑分軟件手動(dòng)打開(kāi)EcoQoS并測(cè)試單核,頻率基本維持在EcoQoS的的限制左右,會(huì)出現(xiàn)高一些的情況,原因不明,也懶得知道;
平衡計(jì)劃下,手動(dòng)將最大頻率限制為和EcoQoS一樣的設(shè)置,單核跑分時(shí)的頻率比用EcoQoS限制時(shí)的低一點(diǎn),所以EcoQoS連限制最高頻率都不如電源計(jì)劃的全局設(shè)置;
電源計(jì)劃類型為節(jié)能的自定義計(jì)劃下,給跑分軟件手動(dòng)打開(kāi)EcoQoS并測(cè)試單核,頻率和平衡計(jì)劃沒(méi)有區(qū)別,說(shuō)明包括EcoQoS在內(nèi)的所有power profile和QoS level即使默認(rèn)設(shè)置僅寫入了默認(rèn)的平衡計(jì)劃,在非平衡類型的電源計(jì)劃上仍然生效;
同樣的自定義計(jì)劃下,禁用所有power profile和QoS level,給跑分軟件手動(dòng)打開(kāi)EcoQoS并測(cè)試單核,頻率仍然能達(dá)到最高頻率。
往EcoQoS里寫入最大頻率1GHz的設(shè)置,啟用所有power profile和QoS level,然后開(kāi)一個(gè)跑分軟件測(cè)試,最大頻率是2GHz出頭,差不多是AMD給的設(shè)置;電源計(jì)劃里限制最大頻率1GHz就沒(méi)問(wèn)題,和AMD的設(shè)置一樣用2GHz的話,頻率還比EcoQoS稍低。
要禁用所有power profile和QoS level的話到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power,把EventProcessorEnabled改為0,重啟。這樣做是為了避免所有power profile和QoS level在任何情況下覆蓋自己用的電源設(shè)置。

彩蛋:AMD的chipset driver里的電源設(shè)置,拷打EcoQoS的最有力證據(jù)
