我的工作电脑是一台安装 Arch Linux 的轻薄笔记本,虽说 Linux 比 Windows 更加节省资源,但是我的工作笔记本续航比较尿崩,出门必须带充电器,进店必找有插座的位置。看到同事的 mbp 的超长续航不可能不羡慕,但我也不奢望过多,只期望出门后,笔记本能够支撑一下午的正常办公就足够了。
amd_pstate
刚好最近注意到 Linux 6.1 内核中集成了 amd_pstate
模块,这是用来实现动态调节 Ryzen CPU 频率的驱动模块,相较于原先的 acpi_cpufreq
驱动, amd_pstate
支持 CPPC(Collaborative Processor Performance Control) 功能,简单来说,CPPC 可以根据系统对性能、功耗的需求,调节 CPU 的工作频率。
支持 CPPC 的 CPU driver 需要跟合适的 CPU scaling governor 配合使用。后者是 Linux 系统中用来调节 CPU 频率的软件,不同的 gorvernor 实现了不同的 CPU 频率调整算法,跟 CPPC 最搭配的是下面两个 gorvernor:
- ondemand:基于当前工作负载动态调节 CPU 频率
- schedutil:基于调度器的反馈动态调节 CPU 频率
这两种 gorvernor 都能根据操作系统的需要动态降低或提升 CPU 的工作频率,从而实现比较理想节能效果。
对于运行 6.1 版本或者更新内核的 Linux ,可以参考这个链接启用 amd_pstate
驱动。
检测 amd_pstate
生效的方式也比较简单,推荐安装 cpupower
:
analyzing CPU 14:
driver: amd-pstate
CPUs which run at the same hardware frequency: 14
CPUs which need to have their frequency coordinated by software: 14
maximum transition latency: 20.0 us
hardware limits: 400 MHz - 1.90 GHz
available cpufreq governors: conservative ondemand userspace powersave performance schedutil
current policy: frequency should be within 400 MHz and 1.90 GHz.
The governor "ondemand" may decide which speed to use
within this range.
current CPU frequency: Unable to call hardware
current CPU frequency: 1.11 GHz (asserted by call to kernel)
boost state support:
Supported: yes
Active: no
AMD PSTATE Highest Performance: 166. Maximum Frequency: 4.51 GHz.
AMD PSTATE Nominal Performance: 70. Nominal Frequency: 1.90 GHz.
AMD PSTATE Lowest Non-linear Performance: 41. Lowest Non-linear Frequency: 1.11 GHz.
AMD PSTATE Lowest Performance: 15. Lowest Frequency: 400 MHz.
对于笔记本来说,更常见的需求是根据电源状态自动设置性能偏好,这里推荐使用 TLP,为了方便使用,我还安装了 tlpui
。TLP 允许我们配置电脑在不同电源状态的 CPU 调节参数:
- gorvernor
- 最低频率、最高频率
- 自动超频开关
不过 TLP 的自动超频开关有些死板,即使是出门在外使用电池的场景,我也希望偶尔开启 Boost 提高一下 IDE 分析代码的速度。解决这个问题很简单,有两个方法:
- 手动按需执行开关 CPU Boost 的命令
- 安装 auto-cpureq,这个软件会在后台监听当前的工作负载,会在必要的时候开关 Boost
经过一段时间的观察与调试,为了尽量减少风扇噪音、提高电池续航,我的笔记本(HP EliteBook 845 G8 / Ryzen 5800U)配置如下:
- 外部电源:schedutil gorvernor,启用自动超频,限定最低频率在标称频率的 68%(大概 1.1GHz)
- 内置电池:ondemand gorvernor, 配合 auto-cpufreq 动态调整超频开关
实际续航测试
目前的电池状况,标称容量 45wh,电池健康度 76%,屏幕亮度 30% ~ 35%。工作时会使用的软件包括:
- Webpack Dev Server
- WebStorm(180kloc TypeScript 项目)
- Vivaldi 浏览器(通常控制在 30 个标签以内)
- Firefox 浏览器(通常控制在 3 个标签以内)
- 飞书 Linux 客户端
- Telegram
acpi_cpufreq
在 acpi_cprfreq 驱动下,我的笔记本电脑的最低运行频率是 1.9 GHz,最高可以达到 4.1 GHz,下面是我记录的两次续航时长。
round | start time | end time | time to 10% |
---|---|---|---|
1 | 2023-02-06 13:32 | 2023-02-06 16:41 | 3:10 |
2 | 2023-02-13 14:11 | 2023-02-13 17:35 | 3:24 |
amd_pstate
在 amd_pstate 驱动下,最低运行频率可以到 400 MHz,通常会在 900 MHz 徘徊,最高可以达到 4.1 GHz。
round | start time | end time | time to 10% |
---|---|---|---|
1 | 2023-02-19 10:15 | 14:47 | 4:32 |
2 | 2023-02-20 9:37 | 14:30 | 4:53 |
3 | 2023-03-06 13:31 | 17:31 | 4:00 |
在 IDE 的使用体验上没有明显区别,小项目依然很流畅,巨型项目该卡的操作还是卡,但是续航的提升非常明显,至少出门重度办公一下午没有续航焦虑了。
如何进一步改善续航?
关于这点,我建议你看看 极客湾的观点:
- 尽量减少 Boost 时长
- 减少 CPU 以外硬件的功耗
普通消费者几乎没法做硬件上的改进(最多禁用独显以提高续航),只能从减少 Boost 时长上入手,毕竟是否开启 Boost、需要多长时间的 Boost,这些参数是可以通过软件调节的,上面提到的 auto-cpufreq 就是干这件事的,这个软件是用 python 编写,除了可以通过配置文件来设置之外,自己也可以根据实际体验和偏好来调节相关算法。
发表回复