AMD Ryzen

来自 Arch Linux 中文维基
(重定向自Ryzen

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 另见[编辑 | 编辑源代码]