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_pstateCPPC有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.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功耗。
在进行简单的浏览网页和编写代码时,使用 balance_performance hint,流畅度完全没有问题。笔记本离电时使用 power hint,提频更消极,跑不满笔记本的高刷新率,但功耗更低;使用独显混合模式,续航大约4小时,遥遥领先于Windows,比同样60Wh电池的MBP13 2020(Intel)更强;若关闭独显,可能对续航有更大的提升。
此外也有网友称出现了重启的问题,反正我没遇到。
-
Linux 6.5 Now Defaults To AMD P-State “Active” EPP For Modern Ryzen Systems ↩︎ ↩︎
-
AMD P-State EPP Submitted For Linux 6.3 To Improve CPU Performance/Power ↩︎
-
https://www.reddit.com/r/linux_gaming/comments/13by61l/amd_pstateactive/jjdhi58/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button ↩︎