在智能手机性能与续航的永恒博弈中,一次看似无害的 Linux 内核调度器优化,竟让 Android 设备额外消耗了 20% 的电量。这个令人意外的 Bug,被来自中国手机厂商传音(Transsion)的工程师团队率先发现并修复,其背后是一场从用户反馈到内核代码的深度追踪。
用户抱怨催生的“反常”排查
2023 年夏天,传音工程师在分析印尼、印度等市场用户的电池续航报告时,注意到一个奇怪的现象:搭载最新 Android 13 系统的部分机型,在待机状态下电池消耗比预期高出近 20%。彼时,团队首先怀疑是第三方应用或系统服务异常唤醒所致,但通过 Binder 日志和功耗分析工具排查后,并未找到明显元凶。
直到一位工程师注意到,CPU 的“空闲时间”比例在系统调优后反而下降了——这意味着 CPU 在无任务执行时未能真正进入低功耗状态。这一异常指针,指向了 Linux 内核的 CFS(完全公平调度器)最近的一次更新。
根因:一次“太激进”的唤醒平衡
2022 年,Linux 内核社区合并了来自谷歌的调度器优化补丁——旨在改善多核 CPU 间的负载均衡效率。该补丁修改了 CFS 的“唤醒平衡”逻辑:当一个 CPU 上的任务被唤醒时,调度器会尝试优先将其放置在刚进入空闲状态的 CPU 上,以避免热迁移带来的性能损失。理论上看,这能减少缓存污染和上下文切换,提升性能。
但传音工程师发现,这个优化存在一个隐蔽副作用:它让调度器过度倾向于将短暂唤醒的任务(如后台服务定时心跳、网络扫描等)集中到特定核心上。这些任务本应分散在不同 CPU 上执行,并在执行后迅速让核心进入空闲状态;但新逻辑却导致某些核心反复被唤醒、执行、再进入空闲,而另一些核心长期处于深睡眠。由于单个核心的浅睡眠(WFI)功耗远高于深睡眠(WFI+CPU 电源门控),整体功耗因此飙升。
更关键的是,该问题在安卓系统下尤为明显——因为 Android 大量依赖“快速任务切换”(如 1-5ms 的系统小任务),而传统 Linux 服务器或桌面环境此类短任务占比更低。这一差异使得补丁在服务器场景下性能提升,在手机端却成为“电老虎”。
从内核到社区的“逆向验证”
传音工程师团队构建了可复现的测试环境:在测试机上回滚该补丁后,同一场景下电池续航立即恢复了约 18-22%。他们又将问题报告提交至 Linux 内核邮件列表,并附上详细的功耗跟踪数据和函数调用栈。内核维护者 Peter Zijlstra 在审查后确认,该补丁确实破坏了 CFS 的“长空闲 CPU 优先”策略,并回撤了该改动。整个修复过程,从发现到补丁提交,历时约三周。
行业启示:终端厂商的“逆流”价值
此次事件引发业内对调度器优化“通用性”的反思。通常,Linux 内核的改进多面向服务器、桌面等高性能场景,而移动端低功耗场景的需求常被忽略。传音作为面向新兴市场的手机厂商,长期在低功耗调优上积累深厚——其工程团队曾针对低端 ARM CPU 定制过调度阈值,此次发现问题并非偶然。
传音工程师在社区回复中强调:“在某些调度器优化中,‘性能提升’可能以‘功耗倒退’为代价,只有结合真实用户负载才能衡量取舍。”这一观点得到了谷歌、高通等厂商的认同。目前,该修复已合入 Linux 6.5 及以上版本,并同步到 Android Common Kernel。
结语
一次看似微小的内核变更,导致数千万用户的手机每天多耗五分之一的电量。传音工程师从用户抱怨出发,最终在 Linux 调度器的千行代码中精确锁定问题,不仅挽回了自身产品的口碑,也为整个移动生态揭示了“性能与功耗平衡”的永恒课题。或许,这正是终端厂商深耕底层技术的意义所在——他们离用户最近,也离电量的每一丝消耗最近。