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
。