启用 AMD P-State EPP 调频驱动

Arch Linux 的 Linux 6.5 内核终于在前几天进入了 core 软件库,其中一个重要的特性就是默认启用了 P-State EPP (Active) 调频驱动1。调频驱动不同于调速器,前者与特定的 CPU 有关;而后者与电源方案有关,如 powersave 就是一直运行在最低频率。

amd-pstate 是 AMD CPU 性能调频驱动,它在 Linux 内核中的现代 AMD APU 和 CPU 系列上引入了新的 CPU 频率控制机制。新机制基于协作处理器性能控制 (CPPC),它提供比传统 ACPI 硬件 P-state 更精细的频率管理。当前的 AMD CPU/APU 平台使用 ACPI P-State 驱动程序来管理 CPU 频率和时钟,仅在 3 个 P-state 下进行切换。 CPPC 取代了 ACPI P-state 控制,并为 Linux 内核提供了灵活、低延迟的接口,以直接向硬件传达性能提示。

amd_pstate CPPC 有 3 种操作模式:自主(active)模式、非自主(passive)模式和引导自主(guided)模式。通过不同的内核参数可以选择 active/passive/guided 模式。

  • 在自主模式下,平台会忽略所需的性能级别请求,并仅考虑设置为最小、最大和能量性能首选项寄存器的值。
  • 在非自主模式下,平台直接通过所需性能寄存器从操作系统获取所需的性能水平。
  • 在引导自主模式下,平台根据当前工作负载并在操作系统通过最小和最大性能寄存器设置的限制内自主设置操作性能级别。

amd_pstate=active 是低级固件控制模式,由 amd_pstate_epp 驱动程序实现,并在命令行中将 amd_pstate=active 传递给内核。在此模式下,如果软件想要偏向 CPPC 固件的性能 (0x0) 或能效 (0xff),amd_pstate_epp 驱动程序会向硬件提供提示。然后CPPC功耗算法将计算运行时工作负载,并根据电源和热量、核心电压和其他一些硬件条件调整实时核心频率。2

简而言之,相比默认的 acpi_cpufreq,P-State 能够让 CPU 从操作系统处直接获得性能需求 hint,并进行更细粒度的频率控制。P-State EPP(active 模式)响应更快,并能自定义 hint,达到类似于调速器的效果。

P-State EPP 支持 Zen 2 或更新的 AMD CPU。本人使用的是联想 R7000 2020,AMD Ryzen 7 4800H,也算是喝到了一大口汤吧。

启用 CPPC

P-State EPP 依赖于 CPPC(Collaborative Processor Performance Control),所以首先要在 BIOS 中启用 CPPC。请自查 BIOS 内是否有此选项,如果没有,需要使用 Smokeless_UMAF 访问 BIOS 中的隐藏选项,步骤如下。本文作者与插件作者不对任何损坏负责。

  • 下载仓库中的 UMAF_BETA.zip,解压到一个空的 FAT32 格式的 U 盘中
  • 用此 U 盘引导启动
  • 进入 Device Manager - AMD CBS - NBIO - SMU3

在这里应该就可以看到 CPPC 选项。即使已经显示 Auto 或者 Default,也需要手动 Enable。设置完成后按保存重启即可。

启用 P-State EPP

可以直接运行上图中的 cpupower 工具来查看当前的调频驱动。如果你和我一样已经在运行 Linux 6.5,那么可能什么都不用做了。

不同内核版本对 P-State EPP 的支持如下:

  • 6.5 起,默认启用 P-State EPP1
  • 6.4 起,支持 Guided Autonomous 模式4
  • 6.3 起,支持 EPP,但默认不启用56
  • 5.17 起,支持 P-State

如果在使用 6.3 或 6.4,开启 EPP 的方法就是添加内核参数,amd_pstate=[active|passive|guided]。关于如何修改内核参数,可参见 ArchWiki: kernel parameters

其他优化

可以使用 auto-epp 来自动传递 EPP hint,以在离电情况下功耗更低,或接入电源时性能释放更强。

在启用 EPP 的情况下,也可以直接将调速器设为 powersave,完全靠调频驱动进行调频7

体验

在启用 P-State EPP 调频驱动后,CPU 各内核的频率能够在适当的时候(如浏览网页等场景)降低至 400 MHz(见下图的频率范围),在有需求时也能快速拉起频率。相比于之前最低频率仅能低至 1.3GHz,此举有望能大幅降低低负载的 package 功耗。

启用 P-State EPP 后的效果
启用 P-State EPP 后的效果

在进行简单的浏览网页和编写代码时,使用 balance_performance hint,流畅度完全没有问题。笔记本离电时使用 power hint,提频更消极,跑不满笔记本的高刷新率,但功耗更低;使用独显混合模式,续航大约 4 小时,遥遥领先于 Windows,比同样 60Wh 电池的 MBP13 2020(Intel)更强;若关闭独显,可能对续航有更大的提升。

此外也有网友称出现了重启的问题,反正我没遇到。