跳至內容
出自 Arch Linux 中文维基

Ryzen 是 Advanced Micro Devices (AMD) 製造的微處理器品牌。本文涵蓋了不同代 CPU 的系統配置和故障排除信息。

這篇文章的某些內容需要擴充。

原因:添加關於 amd_pstate 的內容,或至少連結到 CPU frequency scaling#Scaling drivers。 (在 Talk:AMD Ryzen 中討論)

啟用微碼支持

安裝 amd-ucode 包以啟用微碼更新,並在微碼頁面的幫助下啟用它。這些更新提供了對系統穩定性至關重要的 Bug 修復。儘管它是專有產權的,仍然強烈建議使用。

微調 Ryzen

監視電壓、電源和溫度

lm_sensors 可以開箱即用來監視溫度。但是電量消耗及電壓等更詳細的信息需要 zenpower3-dkmsAUR。也有圖形用戶界面的工具,如 zenmonitorAUR 和對於 Zen 3 CPU 的 zenmonitor3-gitAUR

電源管理、降壓和超頻

  • RyzenAdj — RyzenAdj 是一個用來調節 Ryzen 移動處理器電源管理設置的命令行工具。
https://github.com/FlyGoat/RyzenAdj || ryzenadj-gitAUR
  • amdctl — amdctl 是一個 AMD CPU 的降、超(升)頻率和電壓的命令行工具,目前支持 AMD CPU 的 10h, 11h, 12h, 15h, 16h, 17h 和 19h 家族。
https://github.com/kevinlekiller/amdctl/ || amdctlAUR
  • ZenStates-Linux — ZenStates 是一個調節時鐘頻率和電壓的命令行工具。一個詳細的設置例子可以在 Level1Techs 論壇 找到。
https://github.com/r4m0n/ZenStates-Linux || zenstates-gitAUR
  • ryzen_smu — Ryzen SMU 是一個 Linux 內核驅動程序,它可以讓用戶訪問某些 AMD Ryzen 處理器的 SMU(系統管理單元)。 是一個給 5800x3D 降壓的例子。
https://gitlab.com/leogx9r/ryzen_smu || ryzen_smu-dkms-gitAUR

編譯內核

關於啟用 Ryzen 支持,參考 Gentoo:Ryzen#Kernel官方支持的內核中已默認包含了所需的配置。

疑難解答

隨機重啟

如果你遇到了隨機重啟的問題,請參考 Gentoo:Ryzen#Random_reboots_with_mce_events。Ryzen 5000 系列,特別是 5950X 和 5900X 這兩款高端型號,在 Linux 下似乎有一些輕微的不穩定問題,可能與 5.11+ 的內核有關,如這個內核 bug 所示。根據網上的報告,似乎 Windows 默認會讓 CPU 運行在更高的電壓和更低的峰值頻率,而 Linux 內核則相反,這取決於你的矽片抽籤結果,可能會導致一些隨機的應用程式崩潰或硬體錯誤,從而導致重啟。你可以通過 dmesg 日誌來識別這些問題,例如:

kernel: mce: [Hardware Error]: Machine check events logged
kernel: mce: [Hardware Error]: CPU 22: Machine Check: 0 Bank 1: bc800800060c0859
kernel: mce: [Hardware Error]: TSC 0 ADDR 7ea8f5b00 MISC d012000000000000 IPID 100b000000000 
kernel: mce: [Hardware Error]: PROCESSOR 2:a20f10 TIME 1636645367 SOCKET 0 APIC d microcode a201016

CPU ID 和處理器編號可能會不同。要解決這個問題,你需要給你的 CPU 提供更高的電壓,以便它在高頻運行時保持穩定。最簡單的方法是使用 AMD 曲線優化器,這是一個可以通過你的主板 UEFI 訪問的功能。進入 UEFI 並設置一個正向的 4 點偏移,這會增加你的 CPU 在高負載時的電壓。這會限制超頻的潛力,因為需要更好的散熱,但它會運行得更穩定。更多細節請查看這個論壇帖子。當我對我的 5950X 這樣做時,我的處理器穩定了,頻率和電壓的範圍也更接近 Windows 下的情況。

系統掛起

在類似 #隨機重啟 的情況下,系統可能會在重負載或特定的低負載下掛起,即使在應用了修復措施後也是如此。重置按鈕或強制關機不起作用,外設電源關閉,視頻輸出可能會停止,拔掉電源是唯一的方法。

將頻率降低到非超頻標準並增加 CPU 或 RAM 的電壓可能會有所幫助,但可能無法解決問題。一個潛在的解決方法是更新 UEFI(也被誤稱為「BIOS 更新」),然後應用 PBO+4 曲線以提高高頻下的穩定性。根據矽片抽籤結果,某些 CPU 可能需要 +6 或更高的偏移量。

屏幕撕裂(APU)

如果你正在使用 Xorg 並遇到了屏幕撕裂的問題,請查看:AMDGPU#無撕裂渲染

軟鎖凍結

這個 bug 已經很有名了,目前正在 bugzillalaunchpad 上討論。雖然解決方案並不是在所有情況下都一樣,但這個幫助了一些用戶。把這個命令 echo rcu_nocbs=0-$(($(nproc)-1)) 的輸出作為一個內核參數添加,其中命令 nproc 只是列印出你的 CPU 的線程數。要應用這個選項,你需要一個帶 CONFIG_RCU_NOCB_CPU 選項編譯過的內核(比如 linux)。

導致凍結的另一個原因是電源管理中的 c-states。最大的省電狀態 c6 可能會導致問題。在一些情況下,添加內核參數 processor.max_cstate=5 會有幫助,但其他用戶報告說這個選項沒有應用,c6 狀態仍然被進入。對他們來說,這個包 disable-c6-systemdAUR 會有幫助。在使用它之前,需要運行 modprobe msr 來激活那個內核模塊。

一些帶有 Ryzen CPU 的筆記本電腦,比如 HP Envy x360 15-bq100na,可能會遇到 CPU 軟鎖定,導致系統凍結。可以通過添加內核參數 idle=nomwait 來避免。

在一些情況下,內核參數 pci=nomsi 可以修復問題。

在其他一些情況下,問題只是硬體不好,保修換一個新的 CPU 可能就能解決你的問題。

關機、重啟、掛起時卡住

注意:通過更新 UEFI(也被誤稱為「BIOS 更新」)獲取的較新 AGESA 固件可能已經修復了這個問題。

這似乎與 C6 c-state 有關,它在 Linux 中似乎並不受到很好的支持(如果有的話)。

要解決這個問題,進入 UEFI 設置並搜索一個標記為類似於「電源空閒控制」的選項。將其值更改為「典型空閒電流」。請注意,這些名稱取決於主板製造商對它們的命名,因此在您的特定情況下可能會有所不同。

其他不太理想的解決方案包括在 UEFI 設置中禁用 c-states 或在內核命令行參數中添加 processor.max_cstate=1

另見