CPU風扇停轉後會發生什麼?CPU憑什麼燒不壞

當你坐在電腦前愉快的玩耍時,有沒有想過一個細思恐極的問題:如果忽然我的CPU風扇卡住不轉了,我的CPU會不會燒掉?

亦或整個主機被融化掉?

值得慶幸的是,聰明的工程師們早已開發出有效的處理器溫度監控、保護技術。以特殊而敏銳的「嗅覺」隨時監測CPU的溫度變化,並提供必要的保護措施,使CPU免受高溫下的滅頂之災。在我們看來,探索這項技術如同開始一段神秘而有趣的旅程,何不與我們同行?

歷史

建立CPU溫度監控系統,首先要選擇一種合適的溫度測量器件。能夠測量溫度的器件有很多種,如熱敏電阻、熱電偶和半導體溫度感測器等。電腦中最早使用熱敏電阻(Thermal Resistor ,簡稱Thermistor)作為測溫元件,CPU插座下豎立的球狀或帶狀的小元件,就是熱敏電阻。但這種接觸式測溫元件和CPU接觸不夠緊密,CPU核心(die)發出熱量由晶元封裝向外部散熱,其表面溫度和核心溫度之間約有15℃~30℃的溫差,同時因晶元封裝形式不同,及環境溫度的不同而難以確定。由於熱敏電阻先天不足帶來了一個十分嚴重的問題∶表面溫度不能及時反映CPU核心溫度變化,用專業術語說就是存在一個時間滯後的問題。在這種背景之下,如果再以表面溫度作為控制目標,保護電路尚未做出反應,CPU可能已經命歸黃泉了。

在這種情況下,Intel在Pentium Ⅱ和Celeron CPU中植入了熱敏二極體(Thermal Diode)直接測量核心溫度,開創了半導體測溫技術的先河,術語叫做DTS(數字溫度感測器,digital thermal sensor)。與此同時,是在CPU內部集成了溫度控制電路(Thermal Control Circuit,TCC),由其自身執行溫度控制功能。在DTS溫度超過CPU的額定核心最高溫度(TjMAX,maximum junction temperature)時會引發CPU的降溫措施,減慢CPU的執行速度。

那麼如何減慢CPU的執行速度呢?不外乎讓CPU做做停停磨洋工和做的慢一點兩種。在Pentium Ⅱ時同時引入的TM1(Thermal Monitor1)就是磨洋工做法,而在Pentium4引入的TM2(Thermal Monitor2)則是讓CPU乾的慢點。如下圖:

可以過熱會引發PROCHOT#信號,這時TM1會將一半的Duty cycle關掉,就是干一下,歇一下。與TM1相比,TM2可以提供更智能,更有效的處理器熱量功耗的管理方式,在保證處理器基本性能的前提下儘可能在滿負荷情況下降低處理器的功耗和溫度。它會降低CPU頻率,與此同時通過與電壓管理模塊VR通訊,降低CPU電壓,雙管齊下保證CPU溫度降低。

也許你還有疑問,如果降頻還不足以降溫呢?畢竟風扇不轉後再慢的速度,CPU溫度還是會上升啊!下面我們從硬體和軟體兩個角度來看看原理細節。

原理

為什麼我們要分成硬體和軟體兩部分來講呢?因為依靠單純的硬體和單純的軟體都有各自的問題:

1. 純硬體:缺點是軟體如操作系統不參與,OS無從知道硬體過熱,誰也不希望文件寫著寫著忽然斷電,文件都丟失了。

2. 純軟體:軟體容易死掉,假使操作系統宕機,純軟體方法沒有辦法繼續降低CPU溫度,會導致CPU燒毀。

只有結合軟體和硬體,才能提供保障和有好的用戶體驗。軟體預先報警和阻止溫度上升,硬體在軟體行動不利後插手進一步阻止溫度上升,並在危急時刻自動切斷電源。

硬體

在Core2後,Intel融合了TM1和TM2,提出了自適應溫度監控(Adaptive Thermal Monitor),它實際上是結合了兩者。Intel在每個內核和核顯上都放置了DTS,並通過TCC隨時監控各個DTS的狀況,這些DTS的溫度值可以通過MSR或者PECI匯流排進行讀取。CPU溫度上升後,Intel為保障系統安全設置了兩道防線:

1. PROCHOT#

為保證CPU工作在額定最大功率下(thermal design power ,TDP),Intel為CPU設定了額定核心最高溫度(TjMAX,maximum junction temperature)。TjMAX是系統可以正常工作的最高溫度,它通常是不能修改的。當CPU內任何DTS(數字溫度感測器,digital thermal sensor)高於TjMAX後,CPU的PROCHOT#信號線就會被置起。PROCHOT#信號線通常是雙向的(在某些低端CPU上是只能in,或out),它可以通知外部EC、BMC等晶元CPU溫度過高,也可以用於CPU感知外部某器件溫度過高,而一樣進入CPU降溫模式:減慢CPU的執行速度。

「現在很多筆記本廠家都引入了一種名叫BD PROCHOT(Bi-directional processor hot)的功能來解決高端GPU和CPU的發熱問題。其核心原理就是在獨顯工作的時候,當其溫度超過某一閾值,利用PROCHOT#通知CPU降頻以達到減少發熱的目的。反過來亦然,詳情見文後的擴展閱讀部分。「

PROCHOT#是CPU的第一道防線,它是溫度變高,TCC(溫度控制電路,Thermal Control Circuit)反應的結果而不是原因。當這條黃線被跨過後,CPU電壓管理模塊立刻行動起來:

A. 立刻利用TM2降低頻率和電壓,直到DTS不再超過TjMAX。因為可以選擇的頻率和電壓有很多檔,頻率和電壓是按照一定演算法逐漸降低的,力度也是逐漸加大。

B. 如果溫度繼續上升到一個Delta值後,TM1也會起作用,刪除掉一部分工作周期,讓CPU多休息一下。這時實際的效果是TM1和TM2的疊加。

2. THERMTRIP#

為保證CPU不會被毀壞,這是最後一道防線,當發生災難性溫度時(catastrophic Critical Temperature),THERMTRIP#會被置起用以通知外部管理器件,同時CPU電源管理器會立刻強制關閉電源。這是一種類似保險絲的熔斷機制,你會看到系統立刻掉電了,只有在系統涼下來之後,你才能恢復上電。

這裡需要特別指出的是,主板廠商根據需要,可以在BIOS設定一個比TjMAX更低的溫度來規避可能的風險,這個溫度同樣也可以產生TjMAX一樣的相關動作。

好了,CPU有了這兩個雙保險,看起來性命無憂了,但是我們的數據呢?達到THERMTRIP#可是會自動斷電的。這就要靠軟體來保證了。

軟體

要讀懂軟體需要ACPI的背景知識(ACPI與UEFI - 知乎專欄)。ACPI規定了幾個溫度閾值,如下圖:

BIOS可以設置這些閾值的具體數值,並通過溫度中斷告訴CPU閾值被突破。操作系統的OSPM在超過_PSV的溫度被報告後,會開始利用EIST(P-State,CPU省電的秘密(一):EIST - 知乎專欄)降頻和利用T-State來關掉一部分有效時鐘周期,這點和TM1和TM2十分類似,不過是OS發起的。在突破AC1和AC0後,OS通過ACPI提供的方法瘋狂提高風扇轉速,儘力把情況控制在自己的掌握之中。當溫度繼續上升,到達_CRT時,OS會立刻發起強制關機,避免數據丟失。通常_CRT溫度會小於THERMTRIP#的溫度。這種控制溫度的方法叫做on demand thermal mode.

這麼多的溫度閾值,軟體方法和硬體方法,他們是怎麼協同工作的呢?我們通過兩個例子來串聯一下所有的知識點。

Happy Ending

在我們最初的例子中,你正在愉快的玩著遊戲,忽然有什麼事情發生了:周圍忽然好安靜。喧囂的CPU風扇忽然沒了聲音。你還在狐疑中為什麼這麼安靜,你的電腦機箱裡面正在進行一場溫度與時間的賽跑。CPU溫度越來越高了,一個個報警器都開始運作了:

1. 溫度首先突破軟體的_PSV。windows開始通過EIST降頻了,你的人物動作變得一卡一卡的,遊戲體驗越來越糟糕。

2. 溫度連續突破_AC0、_AC1和TjMAX。OS試圖提高風扇轉速,但因為風扇不轉,溫度繼續上升。硬體這次也參與進來了,你的遊戲變得幾乎無法操作。

3. 突破_CRT。OS開始關機,熟悉的關機畫面出來了。你的遊戲如果處理了關機消息的話,還有機會存儲你的遊戲記錄。硬碟數據也不會有損失。

Worst Case

還是回到我們最初的例子。你正在愉快的玩著遊戲,忽然有什麼事情發生了:周圍忽然好安靜。喧囂的CPU風扇忽然沒了聲音,更糟糕的是,你的操作系統也忽然死機了,遊戲的人物僵住了

正在你腦子裡在考慮是不是某個敵人放出了時間停止魔法,一切都靜止了!但你的電腦機箱裡面溫度卻在突飛猛進:

1. 溫度首先突破軟體的_PSV。因為OS死掉,CPU溫度繼續升高。

2. 連續突破_AC0、_AC1和TjMAX。OS還是無所作為,硬體Adaptive Thermal Monitor開始發揮作用,降頻和抽頻,溫度上升有所減緩,但因為風扇不轉,溫度繼續上升。

3. 突破_CRT。太可惜了,因為OS死機,沒有抓住最後的機會保存你的遊戲,你的進度丟失了。

4. 突破THERMTRIP#! 你就聽吧嗒一下,你的世界更清凈了,電腦直接關機了,電源風扇和顯示器都關閉了。

這時如果你不信邪,按下電源鍵試圖再次開機,會發現沒有任何反應。你拆開機箱,折騰了半天,徒勞無功,並開始懷疑人生。最後抱著僅剩的一點點希望,你顫抖的手按向電源,同時向上天祈禱。哇,開機了,電腦沒壞啊!這時你應該注意到了呆掉的CPU風扇,並意識到CPU溫度管理救了你一命。誰說這不是個智能家電,你的眼睛裡充滿著劫後餘生之後感動的淚水!

擴展閱讀

1. 現在很多筆記本廠家都引入了一種名叫BD PROCHOT(Bi-directional processor hot)的功能來解決高端GPU和CPU的發熱問題。其核心原理就是在獨顯工作的時候,當其溫度超過某一閾值,利用PROCHOT#通知CPU降頻以達到減少發熱的目的。CPU過熱也可以讓GPU降頻。但是很多玩家不爽這個功能,希望能關掉它,有個軟體叫做ThrottleStop,它能幫忙。你可閱讀這篇文章:Squeeze the most out of your laptop - advanced tweaks (undervolting, overclocking and underclocking)。請注意這麼做有一定風險。

2. 需要了解更多相關知識請閱讀硬體手冊。這裡有個

intel.com/content/dam/w

裡面有TjMAX在第6代酷睿中的具體數值。

3. 其他CPU電源管理文章:

老狼:CPU省電的秘密(一):EISTzhuanlan.zhihu.com圖標老狼:CPU省電的秘密(二):CStateszhuanlan.zhihu.com圖標老狼:睿頻:榨乾CPU所有的潛力(CPU電源管理系列番外篇)zhuanlan.zhihu.com圖標

歡迎大家關注本專欄和用微信掃描下方二維碼加入微信公眾號"UEFIBlog",在那裡有最新的文章。同時歡迎大家給本專欄和公眾號投稿!

用微信掃描二維碼加入UEFIBlog公眾號


推薦閱讀:

視頻之前的廣告為什麼那麼流暢?
深入淺出MapReduce
如何評價一致性演算法 PacificA ?

TAG:中央处理器CPU | 计算机科学 | 编程 |