Ryzen

出自 ArchWiki


Ryzen 是由 Advanced Micro Devices (AMD) 制造的微处理器品牌。本文涵盖了不同代 CPU 的系统配置和故障排除信息。

本条目或章节需要扩充。

原因: 添加关于 amd_pstate 的内容,或至少链接到 CPU 频率调节#调节驱动。(在 Talk:Ryzen 中讨论)

启用微码支持

安装 amd-ucode 软件包以启用微码更新,并借助 微码 页面启用它。这些更新提供了对系统稳定性至关重要的错误修复。强烈建议使用它,尽管它是专有的。

调整 Ryzen

电压、功耗和温度监控

lm_sensors 应该能够开箱即用地监控温度。但是,为了获得更详细的信息,例如功耗和电压,需要 zenpower3-dkmsAUR。对于基于 GUI 的监控工具,Zen 3 CPU 请使用 zenmonitorAURzenmonitor3-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

编译内核

请参阅 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#无撕裂渲染

软锁死机

这个错误是众所周知的,并且正在 bugzillalaunchpad 上讨论。虽然在所有情况下解决方案都不尽相同,但 这个 帮助了一些用户。添加此命令 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 可能会解决您的问题。

关机、重启和挂起时卡死

注意: 此问题可能已通过更新的 AGESA 固件修复,可通过更新 UEFI(也错误地命名为“BIOS 更新”)获得。

这似乎与 C6 c-state 有关,Linux 中似乎对此支持不佳(如果根本不支持)。

要解决此问题,请进入 UEFI 设置并搜索标记为如下的选项:“Power idle control”。将其值更改为“Typical current idle”。请注意,这些名称取决于主板制造商的称呼,因此在您的特定情况下可能会略有不同。

其他不太理想的解决方案包括在 UEFI 设置中禁用 c-state 或将 processor.max_cstate=1 添加到您的内核命令行参数中。

参见