22、系统层省电实践:内核优化、驱动优化、调度策略、热管理

各位同学,今天我们来聊聊系统层省电。说白了,就是深入到Linux内核和驱动层面,看看怎么把每一毫安时的电都用在刀刃上。

我刚开始做Android系统优化时,总觉得应用层搞好了就万事大吉。后来发现,真正决定续航底线的,其实是内核和驱动。你想想看,一个糟糕的驱动,能让整机功耗翻倍。一个合理的调度策略,能让手机多撑两小时。

内核优化:从源头省电

内核是操作系统的核心,也是功耗管理的总指挥部。我个人习惯,拿到一个新平台,先看内核的电源管理配置。

关键配置项:

  • CPU Idle 状态管理:C0(运行)、C1(暂停)、C2(深度睡眠)。我见过不少项目,C2状态没调好,导致CPU频繁唤醒,功耗直接飙升。
  • CPU Freq 调频策略:ondemand、conservative、schedutil。我个人推荐schedutil,它基于调度器负载反馈,响应快且省电。
  • Timer 合并:把多个定时器合并成一次唤醒,减少CPU从睡眠中醒来的次数。

核心思路:让CPU尽可能多地待在深度睡眠状态,减少不必要的唤醒。

我曾经在一个项目中,发现手机待机功耗异常高。排查了三天,最后发现是内核的timer tick没配置好,每秒唤醒CPU 1000次。改成动态tick后,待机功耗降了40%。

驱动优化:管好每个外设

驱动是直接跟硬件打交道的。一个写得不讲究的驱动,能让电池哭出声。

驱动省电要点:

  • Runtime PM:设备不用时,自动进入低功耗模式。比如触摸屏,5秒没触摸,就该睡了。
  • DMA 传输优化:用DMA代替CPU搬运数据,省电又高效。
  • 中断合并:把多个小中断合并成一个大中断,减少CPU被频繁打断。

我的经验:写驱动时,一定要考虑“设备空闲时该干什么”。很多驱动工程师只关心功能,不关心功耗。结果就是,设备明明没在用,还在全速跑。

嗯,这里要注意。驱动优化不是一刀切。比如Wi-Fi驱动,如果频繁进入睡眠再唤醒,反而更耗电。需要根据实际场景,找到平衡点。

调度策略:谁该用电,谁该歇着

调度器决定了CPU时间片怎么分。好的调度策略,能让高优先级任务快速完成,然后让CPU赶紧睡觉。

调度器相关:

  • CFS(完全公平调度):默认调度器,适合普通场景。
  • EAS(能耗感知调度):这是重点。EAS会根据任务的负载和CPU的能耗模型,把任务调度到最省电的CPU核心上。
  • CPU 绑核:把后台任务绑到小核上,前台任务用大核。我习惯用cpuset来实现。

避坑指南:我曾经把一个大核绑了太多后台任务,结果大核一直满载,小核闲着。功耗反而更高。绑核要讲究,别瞎绑。

你想想看,一个视频解码任务,如果调度到小核上,解码慢,功耗反而高。调度到大核上,快速解码完,然后CPU睡觉,总功耗更低。这就是EAS的核心理念。

热管理:别让手机发烧

热管理不只是为了手感,更是为了省电。温度高了,漏电流增大,功耗会指数级上升。

热管理策略:

  • 温控阈值:设置多级温度阈值,比如45°C降频,50°C限制充电电流,55°C强制关机。
  • 动态调频调压(DVFS):温度升高时,主动降低CPU/GPU频率和电压。
  • 热节流(Thermal Throttling):当温度超过阈值,直接限制最大频率。
温度区间 策略 效果
35°C - 40°C 正常调度 性能优先
40°C - 45°C 轻度降频 平衡功耗与性能
45°C - 50°C 中度降频 + 限制充电 优先降温
50°C 以上 强制降频 + 关机预警 保护硬件

我在项目中遇到过,手机打游戏发热后,温控策略太激进,直接锁频到最低。结果游戏卡成PPT,用户骂翻天。后来我们改成了渐进式降频,每降一档,观察温度变化,再决定是否继续降。效果好了很多。

系统层省电知识体系

下面这张图,是我梳理的系统层省电核心逻辑。你可以把它当作一个检查清单。

系统层省电实践知识体系 内核优化 CPU Idle 状态 调频策略 Timer 合并 驱动优化 Runtime PM DMA 传输 中断合并 调度策略 CFS / EAS CPU 绑核 负载感知 热管理 温控阈值 DVFS 热节流 核心目标:减少不必要的唤醒 + 降低单次任务功耗 让CPU多睡觉,睡好觉,醒了就高效干活 实践路径 1. 内核配置检查 2. 驱动功耗审计 3. 调度策略调优 4. 热管理验证 持续监控 & 迭代优化

说白了,系统层省电没有银弹。你得从内核、驱动、调度、热管理四个维度,逐个排查,逐个优化。我做了这么多年,最大的体会就是:省电是个系统工程,别指望一个配置就能搞定一切。

我的建议:先从功耗测量开始。没有数据,一切优化都是瞎搞。用Power Monitor或者板级功耗测量工具,先摸清底数,再动手优化。

好了,这一章的内容就到这里。记住,省电不是让手机变慢,而是让手机在合适的时间,用合适的功耗,干合适的事。

公众号:蓝海资料掘金营,微信deep3321