AMD Ryzen

出自 Arch Linux 中文维基

1 啟用微碼支持[編輯 | 編輯原始碼]

安裝 amd-ucode 包以啟用微碼更新並在微碼頁面的幫助下啟用它。這些更新修復了可能對於系統穩定性來説十分關鍵的 Bug。儘管它是專有產權的,仍然強烈建議使用。

2 微調 Ryzen[編輯 | 編輯原始碼]

2.1 監視電壓、電源和温度[編輯 | 編輯原始碼]

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

2.2 電源管理、降壓和超頻[編輯 | 編輯原始碼]

  • RyzenAdj — RyzenAdj 是一個用來調節 Ryzen 移動處理器電源管理設置的命令行工具。
https://github.com/FlyGoat/RyzenAdj || ryzenadj-gitAUR
  • Ryzen Controller — Ryzen Controller 是 RyzenAdj 的圖形前端(GUI)。
https://gitlab.com/ryzen-controller-team/ryzen-controller || ryzen-controller-binAUR
  • 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

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 已經很有名了,目前正在 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 可能就能解決你的問題。

4.4 關機、重啟、掛起時卡住[編輯 | 編輯原始碼]

注意: UEFI升級時包含更新的 AGESA 固件可能已經修復了這個問題。

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

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

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

5 另見[編輯 | 編輯原始碼]