Ryzen
Ryzen 是由 Advanced Micro Devices (AMD) 制造的微处理器品牌。本文涵盖了不同代 CPU 的系统配置和故障排除信息。
启用微码支持
安装 amd-ucode 软件包以启用微码更新,并借助 微码 页面启用它。这些更新提供了对系统稳定性至关重要的错误修复。强烈建议使用它,尽管它是专有的。
调整 Ryzen
电压、功耗和温度监控
lm_sensors 应该能够开箱即用地监控温度。但是,为了获得更详细的信息,例如功耗和电压,需要 zenpower3-dkmsAUR。对于基于 GUI 的监控工具,Zen 3 CPU 请使用 zenmonitorAUR 或 zenmonitor3-gitAUR。
电源管理、降压和超频
- RyzenAdj — RyzenAdj 是一个命令行工具,可以调整 Ryzen 移动处理器的电源管理设置。
- 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 的降压(请参阅 此脚本 示例)。
编译内核
请参阅 Gentoo:Ryzen#Kernel 以了解如何启用 Ryzen 支持。官方支持的内核 默认已包含所需的配置。
故障排除
随机重启
如果您遇到随机重启,请参阅 Gentoo:Ryzen#Random_reboots_with_mce_events。
对于 Ryzen 5000 系列,特别是高端型号 5950X 和 5900X,Linux 下似乎存在一些轻微的不稳定性问题,可能与 5.11+ 内核有关,如 此内核错误 所示。在调查并阅读互联网上的报告后,似乎在默认情况下,Windows 似乎以更高的电压和更低的峰值频率运行 CPU,而 stock 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 Curve Optimizer,可以通过主板的 UEFI 访问。访问它并设置 4 个正偏移点,这将增加 CPU 在更高负载下获得的电压。它会限制超频潜力,因为对散热的要求更高,但它将稳定运行。有关更多详细信息,请查看 此论坛帖子。当我为我的 5950X 执行此操作时,我的处理器稳定了,频率和电压范围与在 Windows 下观察到的更相似。
系统停止响应
在与 #随机重启 类似的背景下,即使应用了修复程序,系统也可能在重负载或特定的低负载下停止响应。重置按钮或强制关机不起作用,外围设备断电,视频输出可能停止,拔掉电源是摆脱这种状态的唯一方法。
将频率降低到非超频标准范围内并增加 CPU 或 RAM 的电压会有所帮助,但可能无法解决问题。一个可能的修复方法是更新 UEFI(也错误地命名为“BIOS 更新”),然后应用 PBO+4 曲线以在更高频率下获得更高的稳定性。根据硅芯片体质,某些 CPU 可能需要 +6 或更高的偏移量。
屏幕撕裂 (APU)
如果您正在使用 Xorg 并且遇到屏幕撕裂,请参阅 AMDGPU#无撕裂渲染。
软锁死机
这个错误是众所周知的,并且正在 bugzilla 和 launchpad 上讨论。虽然在所有情况下解决方案都不尽相同,但 这个 帮助了一些用户。添加此命令 echo rcu_nocbs=0-$(($(nproc)-1))
的输出作为内核参数,其中命令 nproc
只是打印 CPU 的线程数。要应用此选项,您需要编译一个带有 CONFIG_RCU_NOCB_CPU
选项的内核(如 linux)。
导致死机的另一个原因是 c 状态指示的节能管理。最大节能状态 c6 可能会导致问题。添加内核参数 processor.max_cstate=5
在某些情况下有所帮助,但其他用户报告说该选项未应用,并且仍然进入 c6 状态。对于他们,这个软件包 disable-c6-systemdAUR 提供了帮助。在使用它之前,需要运行 modprobe msr
以激活该内核模块。
某些配备 Ryzen CPU 的笔记本电脑(例如 HP Envy x360 15-bq100na)可能会遇到 CPU 软锁死,从而导致系统冻结。可以通过添加内核参数 idle=nomwait
来避免这些问题。
在某些情况下,内核参数 pci=nomsi
可以解决此问题。
在其他一些情况下,问题仅仅是硬件不良,保修更换新的 CPU 可能会解决您的问题。
关机、重启和挂起时卡死
这似乎与 C6 c-state 有关,Linux 中似乎对此支持不佳(如果根本不支持)。
要解决此问题,请进入 UEFI 设置并搜索标记为如下的选项:“Power idle control”。将其值更改为“Typical current idle”。请注意,这些名称取决于主板制造商的称呼,因此在您的特定情况下可能会略有不同。
其他不太理想的解决方案包括在 UEFI 设置中禁用 c-state 或将 processor.max_cstate=1
添加到您的内核命令行参数中。