AMD Ryzen
1 啟用微碼支持[編輯 | 編輯原始碼]
安裝 amd-ucode包 包以啟用微碼更新並在微碼頁面的幫助下啟用它。這些更新修復了可能對於系統穩定性來說十分關鍵的 Bug。儘管它是專有產權的,仍然強烈建議使用。
2 微調 Ryzen[編輯 | 編輯原始碼]
2.1 監視電壓、電源和溫度[編輯 | 編輯原始碼]
lm_sensors包 可以開箱即用來監視溫度. 但是電量消耗及電壓等更詳細的信息需要 zenpower-dkmsAUR。 也有圖形用戶界面的工具,如 zenmonitorAUR 和對於 ZEN3 CPU的 zenmonitor3-gitAUR 。
2.2 電源管理、降壓和超頻[編輯 | 編輯原始碼]
- RyzenAdj — RyzenAdj 是一個用來調節 Ryzen 移動處理器電源管理設置的命令行工具。
- Ryzen Controller — Ryzen Controller 是 RyzenAdj 的圖形前端(GUI)。
- amdctl — amdctl 是一個 AMD CPU 的降、超(升)頻率和電壓的命令行工具,目前支持 AMD CPU 的 10h, 11h, 12h, 15h, 16h, 17h 和 19h 家族。
- ZenStates-Linux — ZenStates 是一個調節時鐘頻率和電壓的命令行工具。一個詳細的設置例子可以在 Level1Techs 論壇 找到。
- ryzen_smu — Ryzen SMU 是一個 Linux 內核驅動程序,它可以讓用戶訪問某些 AMD Ryzen 處理器的 SMU(系統管理單元)。這 是一個給 5800x3D 降壓的例子。
3 編譯內核[編輯 | 編輯原始碼]
關於啟用 Ryzen 支持,參考 Gentoo:Ryzen#Kernel。官方支持的內核中已默認包含了所需的配置。
4 疑難解答[編輯 | 編輯原始碼]
4.1 隨機重啟[編輯 | 編輯原始碼]
如果你遇到了隨機重啟的問題,請參考 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 曲線優化器,這是一個可以通過你的主板 BIOS 訪問的功能。進入 BIOS 並設置一個正向的 4 點偏移,這會增加你的 CPU 在高負載時的電壓。這會限制超頻的潛力,因為需要更好的散熱,但它會運行得更穩定。更多細節請查看這個論壇帖子。當我對我的 5950X 這樣做時,我的處理器穩定了,頻率和電壓的範圍也更接近 Windows 下的情況。
4.2 屏幕撕裂(APU)[編輯 | 編輯原始碼]
如果你正在使用 Xorg 並遇到了屏幕撕裂的問題,請查看:AMDGPU#無撕裂渲染。
4.3 軟鎖凍結[編輯 | 編輯原始碼]
這個 bug 已經很有名了,目前正在 bugzilla 和 launchpad 上討論。雖然解決方案並不是在所有情況下都一樣,但這個幫助了一些用戶。把這個命令 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 可能就能解決你的問題。
4.4 關機、重啟、掛起時卡住[編輯 | 編輯原始碼]
這似乎與 C6 c-state 有關,它在 Linux 中似乎並不受到很好的支持(如果有的話)。
要解決這個問題,進入 UEFI 設置並搜索一個標記為類似於「電源空閒控制」的選項。將其值更改為「典型空閒電流」。請注意,這些名稱取決於主板製造商對它們的命名,因此在您的特定情況下可能會有所不同。
其他不太理想的解決方案包括在 UEFI 設置中禁用 c-states 或在內核命令行參數中添加 processor.max_cstate=1
。