CPU中的電源管家:PCU
計算機的發展可謂一日千里,還記得小的時候潛入母親的辦公室,按下圓圓的電源按鈕,等待泛著綠色的CRT顯示屏亮起時期待的心情。電源鍵旁邊大大的Turbo按鈕和綠瑩瑩的顯示著33MHz的小窗,總在勾引我毫無例外的按下Turbo鍵,滿意地看著小窗變成66MHz。同時心裡在懷疑會有哪個傻瓜會拒絕更快的速度呢?

是啊,那是一個簡單而直接的年代,更快的速度總是人們追求的第一目的,而浪費的電力相比昂貴的計算機卻顯得那麼的微不足道。
時間很快跨過千禧年,數GHz的主頻和高達上百瓦的功耗讓CPU在這個強調節能的時代看起來十分不合時宜。CPU的各種省電模式也一樣樣的被髮明和得到廣泛應用。這其中就包括EIST、CState、睿頻和Speed Shift等等省電模式:
ofollow,noindex" target="_blank">老狼:CPU省電的祕密(一):EIST 老狼:CPU省電的祕密(二):CStates 老狼:睿頻:榨乾CPU所有的潛力(CPU電源管理系列番外篇) 老狼:根植於硬體的極速變頻技術:Speed ShiftCPU的電源管理越來越複雜,尤其是睿頻、Speed Shift和Package CState的引入讓簡單的純硬體電路的電源管理變得越來越不太現實。終於在Nehalem架構中,一個統一的中央控制器件被引入,並從此駐留在CPU中,再也不曾離開。
就如我在上文的結尾中那個問題:
老狼:TDP是CPU的功耗嗎?TDP是固定不變的嗎?你知道它在哪嗎?
CPU中的電源管家在哪裡?
Nehalem CPU中,一個叫做PCU(Package Control Unit)的器件被引入CPU的封裝中:

我們可以看到它控制著CPU核心的PLL,從而可以掌控各個核心的頻率;它還控制著Vcc,可以關閉各個核心的電源;它還連線著核心中的溫度感測器,可以讀取它們來作為決策的依據。
PCU實際上是個單獨的微控制器,有自己的執行程式碼,叫做pcode。在最開始pcode相對十分簡單,就是按照作業系統的指示,將不用的核心關閉,進而儘量進入Package CState來節省電力。但是隨著睿頻和Speed Shift的引入,PCU開始管理整個CPU的Power Budget,即能耗的預算,從而可以如我們前文所說:
老狼:TDP是CPU的功耗嗎?TDP是固定不變的嗎?讓CPU功耗可以瞬時超過TDP的天花板,來讓我們的CPU響應更快。那麼PCU是如何管理CPU的Power Budget呢?
PCU的電源管理演算法
那為了節省能耗,是不是就是低頻慢慢幹就好了呢?答案是否定的。我們排除浪費時間等因素,只從能耗上考量,如果我們衡量幹完某件事需要消耗的整體能量,實際上有兩種策略:
- 保持固定頻率,將事情幹完,然後CPU進入休息狀態。
- 加速幹事情,忍受短時功耗上升,儘快幹完事情,儘早讓CPU休息。
這和人一樣,有些人是慢性子,徐徐圖之;而有些人性子急,希望早幹完早休息。很難判斷哪種好,這就需要量化分析了,好在Intel的工程師已經為我們找到這個平衡點:

在這個平衡點附近,按照工作量(workload demand)被分成Low Range和High Range,PCU採取兩種策略。

在Low Range的區間,CPU的主頻低於Pe就沒有任何意義了,PCU總是讓核心工作在Pe頻率上,儘快幹完事,進入休眠狀態(CState)。這就是有時計算機比較清閒,我們開啟工作管理員時,會發現有些CPU既不是工作在最低主頻上,也不是工作最高主頻上的原因。

在High Range中,提高核心頻率儘管可以讓任務完成的更快,但是因為能耗和頻率f是3次方的關係,對能耗比來說並不合算。這就需要作業系統來提示支援Speed Shift的PCU,採取激進的高頻高功耗模式,來提供更好的相應;還是保守的能耗優先模式。
尾聲
PCU的引入讓CPU的能耗管理變得智慧而有趣,但也給許多電腦愛好者帶來了一些困擾和疑惑。希望本文能夠對大家理解CPU的電源管理帶來些幫助。
另外需要說明的是雖然PCU的主要功能是電源管理,但它還有些別的功能,這裡就不詳述了。詳細隨著CPU智慧管理的需求,PCU的功能會越來越多。本文的圖片均出自Intel IDF。
其他CPU硬體文章:
360" rel="nofollow,noindex" target="_blank">老狼:為什麼CPU的頻率止步於4G?我們觸到頻率天花板了嗎? 老狼:CPU製造的那些事之一:i7和i5其實是孿生兄弟!? 老狼:CPU製造的那些事之二:Die的大小和良品率 老狼:為什麼晶圓都是圓的不是方的? 老狼:為什麼"電路"要鋪滿整個晶圓? 老狼:CPU能用多久?會不會因為老化而變慢? 老狼:為什麼CPU越來越多地採用矽脂而不是焊錫散熱? 老狼:為什麼Intel CPU的Die越來越小了? 老狼:破繭化蝶,從Ring Bus到Mesh網路,CPU片內匯流排的進化之路 老狼:450mm的晶圓在哪裡? 老狼:什麼是TLB和PCID?為什麼要有PCID?為什麼Linux現在才開始使用它? 老狼:什麼是Speculative Execution?為什麼要有它? 老狼:為什麼不把南橋整合進CPU?CPU和南橋晶片中什麼資源最珍貴? 老狼:CPU底部的小塊是幹什麼用的?為什麼CPU這麼多電源引腳? 老狼:TDP是CPU的功耗嗎?TDP是固定不變的嗎?歡迎大家關注本專欄和用微信掃描下方二維碼加入微信公眾號"UEFIBlog",在那裡有最新的文章。同時歡迎大家給本專欄和公眾號投稿!
