特殊事件處理篇

CPU 溫度過高的過渡解決方式

高速運算的系統中,最怕的就是 CPU 高溫導致的熱當機啊!

最近更新時間: 2024/09/24

問題發生的狀況說明

在鳥哥的研究當中,我們經常用叢集電腦或者是好多核心的系統來執行平行運算。平行運算執行過程中,會同時調用好多個核心同步運算, 而且 CPU 的使用率都超級高!現今的 CPU 都會具有自己內建超頻 (boost) 的功能,為了達到自動超頻的功能,一般來說,伺服器或桌機等硬體, 都會自動幫 CPU 或者是整個平台進行加強電壓的行為,而這個加壓讓 CPU 高速運作的過程,可能就會讓 CPU 產生高熱!如果你 CPU 上面的散熱器來不及散熱,那麼你的 CPU 可能就會隨時在高檔溫度!在鳥哥的工作當中,CPU 的熱當真的很常發生...快氣死了!

  • 操作問題發生

要讓系統的負荷增加,其使用 bc 去算 pi 的數據就可以了!相當簡單~鳥哥以自己的多核心系統來跑 bc 的計算, 然後使用 & 的方式,讓 terminal 可以跑多隻 bc 計算這樣!如果是最小安裝,請使用 yum 去安裝 bc 以及 lm_sensors 軟體即可!

[root@localhost ~]# yum install bc lm_sensors
[root@localhost ~]# echo "scale=100000; 4*a(1)" | bc -l &
[root@localhost ~]# echo "scale=100000; 4*a(1)" | bc -l &
[root@localhost ~]# sensors
coretemp-isa-0000
Adapter: ISA adapter
Package id 0:  +58.0°C  (high = +84.0°C, crit = +100.0°C)
Core 0:        +42.0°C  (high = +84.0°C, crit = +100.0°C)
Core 1:        +41.0°C  (high = +84.0°C, crit = +100.0°C)
Core 2:        +58.0°C  (high = +84.0°C, crit = +100.0°C)
....

只要重複上面的 echo 那一行,系統就會有好多好多的運算發生!之後執行 sensors 這個軟體,你的 CPU 溫度,應該就會展示出來! 如果你瘋狂的丟 bc 指令,那麼最終你的 CPU 負載就會達到 100%...如果你都不做任何事,過不多久,你的 CPU 溫度就會緩慢的提昇啦! 那麼,我們能不能在同時去看一下 CPU 的時脈設定?可以的!這樣做:

[root@localhost ~]# cpupower frequency-info
analyzing CPU 6:
  driver: intel_pstate
  CPUs which run at the same hardware frequency: 6
  CPUs which need to have their frequency coordinated by software: 6
  maximum transition latency:  Cannot determine or is not supported.
  hardware limits: 800 MHz - 4.50 GHz
  available cpufreq governors: performance powersave
  current policy: frequency should be within 800 MHz and 4.50 GHz.
                  The governor "performance" may decide which speed to use
                  within this range.
  current CPU frequency: Unable to call hardware
  current CPU frequency: 4.49 GHz (asserted by call to kernel)
  boost state support:
    Supported: yes
    Active: yes

[root@localhost ~]# cpupower monitor
    | Nehalem                   || Mperf              || RAPL                      || Idle_Stats
 CPU| C3   | C6   | PC3  | PC6   || C0   | Cx   | Freq  || pack | dram | core | unco  || POLL | C1_A | C2_A | C3_A
   0|  0.00|  0.00|  0.00|  0.00||  0.09| 99.91|  3611||3458609|1065976|2856927|     0||  0.00|  0.33|  2.14| 97.44
   6|  0.00|  0.00|  0.00|  0.00||  0.10| 99.90|  4251||3458609|1065976|2856927|     0||  0.00|  0.00|  0.00| 99.87
   1|  0.00|  0.00|  0.00|  0.00||  0.35| 99.65|  4091||3458609|1065976|2856927|     0||  0.00|  0.28|  1.31| 98.03
   7|  0.00|  0.00|  0.00|  0.00||  0.63| 99.37|  3057||3458609|1065976|2856927|     0||  0.00|  1.71|  3.40| 94.18
   2|  0.00|  0.00|  0.00|  0.00||  0.58| 99.42|  3736||3458609|1065976|2856927|     0||  0.00|  1.35|  3.56| 94.48
   8|  0.00|  0.00|  0.00|  0.00||  0.75| 99.25|  3310||3458609|1065976|2856927|     0||  0.00| 10.49|  1.66| 87.04
   3|  0.00|  0.00|  0.00|  0.00||  0.48| 99.52|  4011||3458609|1065976|2856927|     0||  0.00|  9.15|  2.29| 88.02
   9|  0.00|  0.00|  0.00|  0.00||  0.34| 99.66|  3986||3458609|1065976|2856927|     0||  0.01|  0.50|  9.40| 89.67
   4|  0.00|  0.00|  0.00|  0.00||  0.72| 99.28|  2434||3458609|1065976|2856927|     0||  0.00|  6.67|  2.80| 89.71
  10|  0.00|  0.00|  0.00|  0.00||  0.16| 99.84|  3977||3458609|1065976|2856927|     0||  0.00|  0.59|  0.30| 98.92
   5|  0.00|  0.00|  0.00|  0.00||  0.64| 99.36|  3113||3458609|1065976|2856927|     0||  0.00|  2.56|  3.84| 92.90
  11|  0.00|  0.00|  0.00|  0.00||  0.50| 99.50|  3500||3458609|1065976|2856927|     0||  0.00|  0.69| 10.54| 88.22

鳥哥用手邊簡單的 i5 14500 做說明~你可以從你的系統去找到相關的結果~如果 CPU 溫度居高不下...久了, 可能就會 CPU 溫度太高,最終就...你知道的~

問題解決的方針

  • 使用 BIOS/UEFI 環境的設定

中高階主機板,大部分都有自動超頻設定,在 AMD 的系統中,預設的超頻設計都會偷偷加壓 (增加電壓),鳥哥不清楚是否真的如此, 不過,網友們大多認同這樣的說法...如果能夠將這個 CPU 的供電做個設計,那就搞定。不過,詳細的設定其實頗麻煩, 對於鳥哥這種只是需要讓 CPU 降溫的人來說,好像不用去做這樣的調整...太過麻煩!AMD 晶片的主機板當中,有個有趣的設定項目, 稱為 AMD PBO (Precision Boost Overdrive),在該設定中,有個名為『Platform Thermal Throttle Limit』的設定值,這個設定值可以指定 CPU 的最高溫度喔!鳥哥將這個設定值限制在 70 度C,鳥哥以 ASUS UEFI BIOS 的環境來示意,如下圖:

AM4 Asus ProArt X670E-CREATOR 主機板
AM4 Asus ProArt X670E-CREATOR 主機板
AM4 Asus ProArt X670E-CREATOR 主機板

下次重新開機,絕了! CPU 的溫度就會被限制在 70 度囉!相當簡單!

那麼系統運作的結果,效能的情況如何?鳥哥跑同樣的模式去測試,沒有限制溫度時,AMD 7590x 溫度大多在 88 度左右,運作的時間大約是 184 秒, 而有限制溫度到 70 度時,運作的時間大約是 188 秒~誤差非常小!不過,溫度差異非常大!而且,如果之前的當機確認是 CPU 溫度過高, 那麼加上這個設定之後,鳥哥的系統應該不會再次當機了!

鳥哥持續做了個測試,鳥哥有一部 AMD 3990x 系統,這個系統現在也設計 CPU 溫度限制在 70 度,這部系統比較有趣的地方, 在於之前沒有進行限制時,溫度會亂飄,明明是 64 核心的 CPU,隨便丟一隻 bc 去運算,其 CPU 溫度總體來說,可能會衝到 80 度以上! 然後...就當機了!檢查過水冷系統,沒問題~在系統剛買的前 3 年也沒問題~是去年開始發生瘋狂當機的問題!鳥哥的處理方式非常蠢! 使用 cpupower 軟體,將 CPU 的機制設定為 powersave 之外,還限制時脈無論如何只能跑 2.2G....所以,系統效能變很差! 不過,至少不會當機了...只是,操作任何模式...都好慢~

今日發現這個主機板的設定值 (不要笑鳥哥!鳥哥確實是不知道可以這樣做...我不是高手...),將溫度限制在 70 度, 然後我丟了 64 個 bc 計算 pi 的指令,讓 CPU 滿載 100% !以前不敢這樣做測試,因為大概 10 個 bc 運算,系統就會熱當... 今天沒有喔~系統溫度還是只有 70 度!只是 CPU 的時脈,會從 2.6G 慢慢往下降...最後降到大約 2.4G 左右! 當然,還是比 powersave 的 2.2G 好!而且 CPU 溫度更涼快!

所以,你的系統散熱方式越好,讓你的 CPU 可以維持在比較低的溫度時,那麼使用 CPU 溫度限制,你的 CPU 運作時脈當然就會比較高! 鳥哥因為沒有錢,我的主機放置的地點並沒有全天空調,晚上只能透過抽風扇去散熱...因此晚上的時間點,非常容易當機... 現在透過這個機制,我主機運算時,晚上時脈慢一點沒有關係!CPU 能夠持續運算就好!大家都開心!

其他連結
環境工程模式篇
鳥園討論區
鳥哥舊站

今日 人數統計
昨日 人數統計
本月 人數統計
上月 人數統計