6.1 移动操作系统的能耗博弈:从 EAS 调度到进程墓碑

拿起手机,连续刷十分钟短视频,机身微微发热,电量掉得飞快;把它扔在桌上一整晚,第二天早上电量却只少了一点。这两种状态背后,是同一个“看不见的管家”在做决定:移动操作系统。它要回答两个问题:**此刻的任务该交给哪颗核心去做?以及你看不见的那些应用,还有没有资格继续消耗电量?**前一个问题由调度器回答,后一个问题由后台管控机制回答。本节就沿着这两条线,看看操作系统如何在性能与续航之间做精细的取舍。

6.1.1 为什么“跑得快”不等于“好调度”

第三章介绍过,手机 SoC(系统级芯片,System on Chip)里的 CPU 通常由“大核”和“小核”混搭组成。大核像一辆大排量跑车,爆发力强但油耗高;小核像一辆电动自行车,速度有限却极其省电。

传统电脑的调度思路比较朴素:哪颗核心空闲、哪颗核心性能高,就把任务往那里放,追求“尽快完成”。但在手机上,这种思路会出问题。设想一个后台同步通讯录的小任务,如果把它扔给大核,大核需要提高电压和频率才能运行,能耗的增长远远超过任务本身的价值。电池容量有限,散热空间又极其狭窄,手机的调度目标不能只是“快”,而必须是“用最少的能量把事情办好”。

6.1.2 EAS:带着“电费账单”做决定的调度器

为了解决这个问题,ARM 与 Google 联合主导推出了 EAS(能耗感知调度器,Energy Aware Scheduling),并将其纳入 Android 所使用的 Linux 内核。

EAS 的核心,是内嵌在系统里的一张能量模型(Energy Model)图表。要理解它,先认识一个术语:OPP(工作性能点,Operating Performance Point)。每颗 CPU 核心并不是只有“开”和“关”两种状态,而是有一系列电压与频率的组合档位,就像汽车的不同挡位。能量模型记录的,就是每个核心在每个电压频率档位下的真实功耗,精确到毫瓦级。

有了这张表,EAS 就像一位手里拿着电费单的物业经理。每当一个新任务到达,它不会只问“谁最闲”,而是逐一试算:

如果把这个任务分配给核心 X,整个 SoC 增加的系统总能量消耗,是不是所有方案里最低的?

这里有两个关键词值得细品。

  • “全 SoC”:EAS 看的是整颗芯片的总账,而不是单个核心的局部账。把任务塞进一颗已经在运行的小核,可能只需略微提升它的档位;而唤醒一颗沉睡的大核,则要额外付出“开灯”的代价。
  • “增加的能量”:它比较的是边际成本,也就是“多做这件事,要多花多少电”。

下面用一个简化的场景对照帮助理解:

场景粗放式调度的做法EAS 的思考方式
后台同步邮件交给空闲的大核,迅速完成小核低档位即可胜任,总能耗更低,交给小核
滑动列表、打开应用平均分配试算后发现小核需拉满档位且仍会卡顿,交给大核反而划算
多个轻任务同时到达分散唤醒多颗核心尽量集中到已唤醒的核心上,让其余核心继续休眠

可以看出,EAS 并不是一味“偏爱小核”,而是用数据说话。能量模型越准确,调度的取舍就越合理,这也是芯片厂商需要为每款 SoC 精心标定这张表的原因。

6.1.3 后台的另一场战争:让“隐身应用”真正停下来

调度器管的是“正在干活的任务如何分配”,但还有一个更隐蔽的耗电源:那些你已经切走、却仍在偷偷运行的应用。它们可能定时联网、刷新数据,甚至反复唤醒处理器,这类行为常被称为“流氓唤醒”。一部手机装了几十个应用,如果每个都在后台“小动作不断”,待机续航就会被蚕食殆尽。

两大移动操作系统采用了思路相近、实现不同的方案:

**iOS 的墓碑机制。**当你把一个应用切到后台,iOS 会在短短数秒内将其线程彻底挂起。应用此时就像立了一块“墓碑”:它的状态被保留在内存中,界面、进度都还在,但不再获得任何 CPU 时间。等你重新点开,它从墓碑中“复活”,看起来仿佛一直在原地等你。

**Android 的 cgroups 冻结。**Android 借助 Linux 内核的 cgroups(控制组,Control Groups) 机制,把进程按前台、后台等类别分组管理。应用退到后台后,系统可以向其发送 SIGSTOP 信号,即一种让进程立即暂停的内核指令,从而把它从 CPU 的运行队列中切断。被冻结的进程无法再自行唤醒处理器,流氓唤醒也就无从发生。

打个比方:墓碑机制和 cgroups 冻结,都像图书馆闭馆时给每位读者的书桌拍照存档后请人离场。书本摆放不动,灯却可以全部关掉;读者回来时,桌面恢复原样,继续阅读。

对比项iOS 墓碑机制Android cgroups 冻结
触发时机应用切出后数秒内应用退至后台后
实现手段彻底挂起应用线程通过控制组发送 SIGSTOP,切断运行队列
核心效果保留状态,不占 CPU杜绝后台流氓唤醒

当然,音乐播放、导航、下载等确需后台运行的任务,系统会通过专门的权限和服务通道放行,而不是一刀切。

6.1.4 小结:省电是一门“算账”的学问

把两条线合起来看,移动操作系统的能耗管理可以概括为:对前台任务精打细算,对后台应用严格管束。EAS 依靠能量模型,在每一次任务分配时计算全局能耗的最优解;墓碑机制与 cgroups 冻结,则让不在你视线里的应用真正安静下来。这正是那部手机能在你手中流畅运行、又能在桌上安静度过一夜的软件根源。

不过,算账再精明,也挡不住重负载下热量的持续积累。当芯片温度逼近极限时,系统还要动用另一套更强硬的自保手段,这就是下一节要讨论的温度墙与热节流。