風扇,是CPU、內存和顯卡等設備的主要散熱渠道,也是計算機系統主要的噪音來源,人們對它是又愛又恨。風扇在機箱裡面一會轉的快,一會轉的慢,它的控制系統在哪裡呢?大部分人認為是BIOS控制著它, 畢竟BIOS有很多控制選項和它相關:
有些OEM的BIOS允許更加精細的控制:
其實不然。除了顯卡風扇由顯卡的固件自己控制之外,機箱里的其他風扇,包括CPU、內存和機箱風扇都不由BIOS控制,那麼是誰在掌控著這一切,BIOS在其中扮演什麼角色?我們今天就來一起了解一下,並介紹風扇最新控制技術:Intel的DPTF。
BIOS並不控制風扇轉速(儘管從能力上來說也可以),因為BIOS主要的生命周期都在啟動前,僅僅一些運行時(Runtime)和SMM程序被留了下來,而風扇轉速控制是從一開機就要開始,直到關機的。有的同學也許注意到了,有些主板在電源一插上,開機按鍵還沒有按下,CPU風扇就已經轉了幾下,而這時BIOS還沒有開始運行。那麼這個控制風扇旋轉速度的幽靈到底是誰呢?在筆記本系統中是EC(一個16位的小晶元,它與伺服器中的BMC類似,掌控筆記本電腦的方方面面),伺服器中是BMC(今後有機會專門講,現在知道是個專門管理主板上方方面面的晶元,也有自己的固件),而台式機中有可能是EC、ME等。
看過我介紹風扇的文章:
老狼:CPU風扇是如何工作的??zhuanlan.zhihu.com
就知道風扇的控制曾經極其簡單,只有兩種狀態:轉還是不轉,策略也十分簡單,那就是開機接通電源就轉,關機就停,從而也不需要單獨的控制。如此簡單粗暴的策略顯然會被掃進歷史的垃圾堆裡面。一個好一點的策略是需要降溫的部分溫度高就轉快點,加速讓空氣把熱量帶走;如果溫度低就轉慢點,減低噪音。要做的這兩點需要兩個前提條件,就是轉速可控的風扇,和溫度(如CPU)的讀取。
四根線的Smart Fan讓精確的風扇控制成為可能:
通過四條連線,我們可以控制想要它多塊速度旋轉,也可以了解它現在的轉速:TACH (tachometer) 線用來彙報風扇轉速,而PWM線則用來控制轉速。
那麼如何了解溫度情況呢?主板的溫度可以有自己的感測器,但CPU的溫度如何得知呢?對硬體和BIOS有一定了解的同學可能立刻想要回答:」通過MSR寄存器!「,是的,CPU內部的DTS(Digital Thermal Sensor)會把CPU內核溫度反映到MSR中去,訪問它可以知道CPU內部的溫度,但這是帶內(in-band)的訪問方式,即運行在CPU上的程序才能夠得知這些信息。那帶外設備呢(OOB, out-of-band)?可以通過PECI(platform environment control interface)。是的,你沒有看錯,我也沒有寫錯,不是PCIE(儘管字母一樣,順序不同)。它是一個一根線的匯流排,可以用來讀取CPU內部的信息,它的故事我們今後再說,現在只要知道,通過PECI,帶外設備就可以探知CPU內部DTS的溫度信息。
好了,萬事俱備,只欠東風,現在還需要一個中央控制機構,通過讀取DTS的信息,來通過Smart Fan介面精確控制風扇轉速。在伺服器領域,這個機構就是BMC。伺服器機箱裡面風扇眾多,CPU風扇僅僅是其中一部分,還可能有內存風扇、擴展槽風扇、磁碟陣列風扇和機箱風扇。尤其是磁碟陣列風扇可以是一組風扇。我曾經調試過的8路伺服器,開機後,風扇噪音就像飛機起飛,完全不可以呆在旁邊。伺服器機箱還有單獨的風道設計,良好的風道,可以精確控制各個地方的風扇,形成良好的風道,從而節省一部分風扇,如內存風扇,讓穿堂而過的風幫助發熱巨大的內存來撒熱。這些區域可以形成多個感熱區:
協調這些溫感區十分複雜,BMC的FSC(Fan Speed Control)子系統就是用來完成相應任務的。
對筆記本和部分台式機來說,EC控制著風扇(EC是什麼可以看這篇文章:老狼:合上筆記本的蓋子會發生什麼?背後的機理是什麼?)。筆記本相對簡單,一般只有一個溫感區:
部分台式機沒有EC,ME控制讀取DTS來控制風扇轉速。
好了,我們現在總結一下,BMC、EC或者ME這些帶外設備,他們通過PECI讀取CPU內核DTS的溫度,來控制CPU風扇;也通過其他方式讀取其他的溫度感測器(如磁碟的SMART信息,DIMM的溫度感測器信息等等),來控制它們那裡的風扇。策略就是溫度低轉慢點,溫度高轉快點,簡單而高效。由於它們是帶外設備,不受CPU死機的影響,可以高效而不被干擾的完成任務,是散熱的可靠保證,本文結束!
慢著,這似乎不是最優解。靠溫度來散熱畢竟被動,總是晚了一步,能不能根據工作量(work load)來散熱呢?這裡就要引入Intel的DPTF了。
如果問你,誰知道現在的Workload是大是小?答案當然是操作系統了,它才有現在運行程序的詳細信息。如果能夠讓操作系統來控制風扇,就可以有的放矢,在工作量大的時候加速風扇,而不是等工作一會有溫度上升再來降溫。這是一種主動散熱的方案,也是一種帶內策略。
操作系統要控制風扇,就要知道有哪些風扇,它們都各自給誰散熱,而這些信息又只有BIOS才能夠知道。Intel提出DPTF(Dynamic Platform and Thermal Framework)來規範這些信息:
DPTF的詳細內容我們今後再詳述,我們今天只要概括了解一下皆可。DPTF繼承了已有一些溫度控制ACPI表,並擴展了很多新表來綜合成一組規範,要求BIOS必須提供這些表來告訴操作系統這些信息:
1. 有哪些散熱設備,都給誰散熱,感測器在哪。
2. 幾組管理策略(Policy),和其中引發的條件。
3. 精確的RPM風扇信息,cTDP等。
有了這些信息,操作系統就可以按需調整風扇轉速了,結合PState和TState,也可以同時對CPU的性能做出綜合控制。值得一提的是DPTF提供的幾組策略,可以在運行時動態切換,從而讓風扇控制更加細膩。例如變形本,變形成平板後散熱困難,可以給出在這種情況下散熱的策略;打開後散熱條件改善,這種情況下散熱策略;插入Dock後,有了電源和Dock本身散熱的支持,這時候細化的散熱策略。更好的風扇控制意味著更低的噪音和提供當期情況更好的性能:
那麼BIOS在兩種風扇控制策略中扮演什麼角色呢?BIOS對於DPTF來說當然是信息提供者,對於EC/ME的風扇控制來說,BIOS只是它們控制模式的配置者,因為他們沒有顯示界面的能力。本質上是個二傳手,把用戶設置的內容告訴EC或者ME罷了。當然BIOS可以設置幾個溫度閾值來處理緊急溫度事件,詳見:
帶內的DPTF和基於帶外的風扇控制又是什麼關係呢?它們可以並行不悖。
從圖中我們可以看到PCH和BMC都可以控制風扇的轉速。帶外風扇控制出現的早,對workload後知後覺,但不會受到CPU死機的影響。DPTF在繼承了已有一些溫度控制ACPI表的基礎上,擴展了新表,來讓操作系統做主控制風扇,以和workload同步。但是操作系統死機,DPTF的大部分功能就失效了,這時帶外風扇控制依然發揮作用來降溫。在兩者都失效的時候,THERMTRIP#最後的熔斷機制可以保證CPU在極限情況下不會被燒毀。
其他CPU電源管理文章:
歡迎大家關注本專欄和用微信掃描下方二維碼加入微信公眾號"UEFIBlog",在那裡有最新的文章。同時歡迎大家給本專欄和公眾號投稿!
[1]: Understanding Intels Dynamic Power and Thermal Framework 8.1: Smarter Throttling
TAG:中央處理器(CPU) | 計算機科學 | 計算機主板 |