如何防止GPU過熱和自動關閉
我想知道 Linux 如何處理遊戲玩家電腦,所以我建構了一個,但我們知道 GeForce 不像 AMD 那樣喜歡 Linux,這就是我選擇最後一個的原因。
我用 AMD Ryzen 7 1800X CPU 和 Radeon RX 560D GPU 建構了一台電腦,因為 Vega 對我來說太貴了,而且基準測試表明 560 是目前最好的成本效益比。
經過一番研究,我發現後綴 D 意味著與沒有 D 的 RX560 相比,它的時鐘速度略低一些,以節省一些功耗。
在隨機遊戲無數次崩潰後,我終於發現問題是GPU過熱,它的風扇速度傾向於跟隨CPU風扇速度,但當然在某些遊戲中CPU比GPU要求低得多。
我通過根據GPU溫度而不是CPU自定義風扇速度部分解決了這個問題,它現在逐漸增長,並在50攝氏度時達到最高速度,但問題是:在某些遊戲中它一直保持在最高速度,最終仍然崩潰。
描述崩潰:螢幕閃爍然後變黑,GPU風扇停止,鍵盤指示燈閃爍然後關閉,滑鼠相同,其他CPU風扇保持,有時系統永遠凍結,有時系統自動重啟。
由於需要重新啟動,我在系統日誌上找不到任何提示,最初我認為這是核心崩潰,但即使使用kdump並複制核心,系統仍然會崩潰,我無法恢復它。
我不知道 Windows 是否會遇到同樣的問題,但我堅信不會,我從未見過有人在 Windows 上遇到同樣的問題,所以我的問題是:有一些方法可以告訴核心讓 GPU 輕鬆應對當它即將過熱時,也許只是自動降低GPU時鐘速度?
我找到了解決方案,文件上有一些
/sys/class/drm/card0/device
文件pp_dpm_mclk
表示GPU記憶體時鐘,文件pp_dpm_sclk
表示GPU核心時鐘,我的:$ egrep -H . /sys/class/drm/card0/device/pp_dpm_* /sys/class/drm/card0/device/pp_dpm_mclk:0: 300Mhz /sys/class/drm/card0/device/pp_dpm_mclk:1: 1500Mhz * /sys/class/drm/card0/device/pp_dpm_pcie:0: 2.5GB, x8 * /sys/class/drm/card0/device/pp_dpm_pcie:1: 8.0GB, x16 /sys/class/drm/card0/device/pp_dpm_sclk:0: 214Mhz * /sys/class/drm/card0/device/pp_dpm_sclk:1: 481Mhz /sys/class/drm/card0/device/pp_dpm_sclk:2: 760Mhz /sys/class/drm/card0/device/pp_dpm_sclk:3: 1000Mhz /sys/class/drm/card0/device/pp_dpm_sclk:4: 1050Mhz /sys/class/drm/card0/device/pp_dpm_sclk:5: 1100Mhz /sys/class/drm/card0/device/pp_dpm_sclk:6: 1150Mhz /sys/class/drm/card0/device/pp_dpm_sclk:7: 1196Mhz
該文件
power_dpm_force_performance_level
指示配置文件,可以是low
,auto
或者manual
,預設是auto
,當low
它始終以最低時鐘執行時,這不是我想要的,所以我將它設置為manual
並製作了一個腳本,該腳本會根據 GPU 不斷更改時鐘溫度,瞧,它起作用了!要更改
manual
配置文件上的時鐘,只需將一個數字寫入pp_dpm_sclk
代表該行的文件,從 開始0
,在我的情況下為 until7
。如果您對我的腳本感興趣,就在這裡。