不花钱提升工作笔记本的电池续航


我的工作电脑是一台安装 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 分析代码的速度。解决这个问题很简单,有两个方法:

  1. 手动按需执行开关 CPU Boost 的命令
  2. 安装 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,下面是我记录的两次续航时长。

roundstart timeend timetime to 10%
12023-02-06 13:322023-02-06 16:413:10
22023-02-13 14:112023-02-13 17:353:24

amd_pstate

在 amd_pstate 驱动下,最低运行频率可以到 400 MHz,通常会在 900 MHz 徘徊,最高可以达到 4.1 GHz。

roundstart timeend timetime to 10%
12023-02-19 10:1514:474:32
22023-02-20 9:3714:304:53
32023-03-06 13:3117:314:00

在 IDE 的使用体验上没有明显区别,小项目依然很流畅,巨型项目该卡的操作还是卡,但是续航的提升非常明显,至少出门重度办公一下午没有续航焦虑了。

如何进一步改善续航?

关于这点,我建议你看看 极客湾的观点

  • 尽量减少 Boost 时长
  • 减少 CPU 以外硬件的功耗

普通消费者几乎没法做硬件上的改进(最多禁用独显以提高续航),只能从减少 Boost 时长上入手,毕竟是否开启 Boost、需要多长时间的 Boost,这些参数是可以通过软件调节的,上面提到的 auto-cpufreq 就是干这件事的,这个软件是用 python 编写,除了可以通过配置文件来设置之外,自己也可以根据实际体验和偏好来调节相关算法。


《 “不花钱提升工作笔记本的电池续航” 》 有 4 条评论

回复 Zeeko 取消回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

You can use markdown syntax in comment

  1. Bryan 的头像
    Bryan

    请问一下 CPPC 可以搭配 conservative 这个 governor 使用吗?这个 governor 和 ondemand 一样,也是根据当前的负载动态调整 CPU 频率,只不过调整幅度和 ondemand 相比缓一下。

    1. Zeeko 的头像

      应该也是可以的,不过实际效果我没有测试过

  2. Bell 的头像
    Bell

    2022华硕幻15在开了之后提升不算很明显,CPU耗电确实变少了,但是这电脑外围功耗有十多瓦就离谱。(用battop查看电池放电功率最低也维持在13瓦这样)

    1. Zeeko 的头像

      现阶段的 x86 笔记本都存在外围功耗过高的问题,只能希望笔记本 OEM 像国产手机厂商那样好好优化一下