搬運(yùn)自百度貼吧-windows的原生電源管理并沒有那么省電
先做個(gè)實(shí)驗(yàn),打開你們的任務(wù)管理器,或者最好是打開Throttlestop(如果有的話),然后打開一個(gè)網(wǎng)頁,上下滾動(dòng)頁面,然后看看cpu的頻率。如果你開了自動(dòng)變頻的話,你會(huì)看到頻率幾乎很少降到低頻,然后在Throttlestop中你會(huì)觀察到并不低的功耗,如果你用8代cpu的話,會(huì)看到4到5w以上的功耗和比較高。自從intel在cpu節(jié)能功能的硬件設(shè)計(jì)上越走越遠(yuǎn),我們看到cpu的閑置狀態(tài)越來越多,越來越激進(jìn),從c0一直到c10,最高是c10,在這一狀態(tài)下,不僅cpu完全關(guān)閉,而且外圍的設(shè)施,電壓也幾乎降到0,相當(dāng)于整個(gè)平臺(tái)都關(guān)了。功耗確實(shí)幾乎為0,但是否cpu在整個(gè)運(yùn)行過程中也是最省電呢?不一定。舉個(gè)例子,假設(shè)系統(tǒng)每隔15ms都有任務(wù)需要處理,而大部分都是周期性的重復(fù)任務(wù),比如檢查一些系統(tǒng)變量,然后定期修改。在過去沒有省電功能時(shí),cpu完成任務(wù)后就處于空閑狀態(tài),這個(gè)空閑狀態(tài)往往指的是c1或者加強(qiáng)版的c1e狀態(tài),cpu的時(shí)鐘降下來了,但是電壓還維持著,緩存結(jié)構(gòu)也開著,所以功耗并不低,但是剛才工作過的內(nèi)容還在緩存里,所以重復(fù)任務(wù)時(shí)直接在緩存里面取數(shù)據(jù)和指令就行,節(jié)省了下一次工作的時(shí)間。而在最極致的c10狀態(tài)下,cpu工作完就完全關(guān)掉了,所以緩存里的內(nèi)容也全部都丟掉了,當(dāng)下一次再工作時(shí),全部數(shù)據(jù)都要重新從內(nèi)存里面取,要消耗搬運(yùn)數(shù)據(jù)的能量,關(guān)閉cpu帶來的能量節(jié)省被重復(fù)地從內(nèi)存取數(shù)的能量消耗所抵消了,因此最終能節(jié)省能量與否是不確定的。將cpu置于c10的最高狀態(tài)是原生電源管理的默認(rèn)策略,雖然在空閑階段功耗幾乎為0,但同時(shí)造成兩種影響,一是重復(fù)從內(nèi)存搬運(yùn)數(shù)據(jù)帶來的能量消耗,二是因?yàn)榫彺鎯?nèi)容丟失,每次開始工作都有大量的cache miss,在頻率不變條件下,工作時(shí)間被延長(zhǎng)了(因?yàn)閏pu要等內(nèi)存的數(shù)據(jù)才能真正開始工作,這個(gè)延遲比緩存大了不知多少倍),因此真正處于c10狀態(tài)的低功耗時(shí)間被壓縮了。如果想保持空閑時(shí)間不變,就必須提高頻率來抵消延遲的影響,而提高頻率就會(huì)提高電壓,功耗三次方提升,從而節(jié)省的能量還抵消不了提高頻率帶來的功耗提升,最終可能反而更耗電,得不償失,而windows恰恰就是這么干的。甚至你移動(dòng)鼠標(biāo)都會(huì)導(dǎo)致頻率飆到最高,移動(dòng)鼠標(biāo)就是典型的周期性重復(fù)任務(wù)。那么怎樣才能真正省電呢? 閑置狀態(tài)太低如c1或c1e肯定不是,c10也不是,那就只可能是之間的某個(gè)狀態(tài)了。實(shí)際上經(jīng)過我的實(shí)驗(yàn),c6狀態(tài)是最省電的。這是什么狀態(tài)呢?就是cpu的核心全部關(guān)閉,即一二級(jí)緩存關(guān)閉,與三級(jí)緩存相關(guān)的ring的狀態(tài)保留,其時(shí)鐘停止并處于最低電壓狀態(tài),也就是ring的電壓降低至剛好維持三級(jí)緩存內(nèi)容的地步。此時(shí)只有這個(gè)三級(jí)緩存還耗著一點(diǎn)電,比c10狀態(tài)下的功耗稍微高一點(diǎn),但是cpu再工作時(shí)所有內(nèi)容都從三級(jí)緩存取,不需要再經(jīng)過內(nèi)存控制器比內(nèi)存快多了,所以性能又比c10高很多,整體來看功耗就是最低。 我們討論完cpu的閑置狀態(tài)后再來看windows犯的另一個(gè)錯(cuò)誤,就是在變頻機(jī)制中,頻率下限定的太低。會(huì)有什么結(jié)果呢?就是這些低頻率狀態(tài)根本呆不住,只要負(fù)載一上去很快就變頻了,而由于前面所述的閑置狀態(tài)的問題,這個(gè)頻率就直接飆到最高。我們把intel變頻的機(jī)制與arm的大小核機(jī)制對(duì)比一下就會(huì)發(fā)現(xiàn),處于不同頻率狀態(tài)的cpu實(shí)際上就是不同的大小核,低頻完成相同任務(wù)耗能低,是“小核”,反之同理。而把頻率下限定的太低,最低頻的“小核”性能太低,難以承受一般任務(wù),所以幾乎就跟發(fā)生在arm世界里的事實(shí)一樣,你看a53的小核根本呆不住,一下子就跑到a75、a76上去了,而蘋果的小核幾乎承擔(dān)了所有日常任務(wù),所以假使a53的能耗比比蘋果小核高(實(shí)際上是相反的,這里就打個(gè)比喻),由于性能太弱,頻繁觸發(fā)大核,實(shí)際消耗能量反而更大。這樣我們就知道優(yōu)化思路了,就是提高頻率下限,使得大部分的任務(wù)在大部分的時(shí)間都能夠呆在我們?cè)O(shè)定的基準(zhǔn)頻率的“小核”上,這個(gè)小核同時(shí)還有更多的時(shí)間進(jìn)入c6狀態(tài)省電,而這個(gè)基準(zhǔn)頻率的能耗比下降很少,但換來更高的性能。超出基準(zhǔn)頻率的負(fù)載后,為了盡可能快的回到這個(gè)頻率,我們可以選擇直接跳到最高頻率的“大核”狀態(tài),只要工作負(fù)載降到“小核”能夠承擔(dān),馬上切回小核狀態(tài)。雖然大核狀態(tài)仍然會(huì)很耗電,但是在整個(gè)時(shí)間里占比很小,所以對(duì)全局的電量消耗影響很小,反而體驗(yàn)大大提升了。 我們要改windows的調(diào)頻策略,把下面代碼復(fù)制到本文文檔中 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文件,然后導(dǎo)入到注冊(cè)表中,打開高級(jí)電源設(shè)置選項(xiàng) 把下面的選項(xiàng)調(diào)整為 處理器性能提高閾值80% 處理器性能降低閾值20% 處理器性能降低策略 rocket 處理器性能增強(qiáng)策略100% 處理器性能提升策略 rocket 處理器閑置降級(jí)閾值60% 處理器性能檢查間隔10毫秒 處理器閑置升級(jí)閾值60% 處理器性能自主模式已禁用 處理器性能提升時(shí)間10時(shí)間檢查間隔 處理器閑置時(shí)間檢查18000微秒 處理器性能下降時(shí)間1時(shí)間檢查間隔 接下來調(diào)節(jié)處理器最小狀態(tài),打開你們的任務(wù)管理器,看到基準(zhǔn)速度,我的是1.8Ghz,然后我們要調(diào)到1.6Ghz,是之前最低頻的兩倍,那么處理器最小狀態(tài)就調(diào)節(jié)為1.6/1.8約等于88%,如果你的基準(zhǔn)速度是2.2Ghz,就調(diào)節(jié)為1.6/2.2約等于73% 這樣我們就完成了整個(gè)調(diào)整策略 現(xiàn)在你可以發(fā)現(xiàn)整個(gè)系統(tǒng)的表現(xiàn)截然不同了,你可以觀察Throttlestop中功耗的明顯變化和cpu溫度可見的降低,并且系統(tǒng)更流暢,這些都是策略調(diào)整后的效果。