第75期 | 调度器开始算电费了

操作系统 · · 九羲科技

第六章第十期。前面九期,调度器算的账全是时间:谁欠多少、谁先跑、谁能插队、谁归哪一组。这一期换一本账:电。时间公平了,电费还没人算——手机发烫、边缘盒子靠电池活着的时候,"跑得公平"和"跑得省电"会打架。

一、调度器开始算电费了

故事从大小核说起。同一颗芯片上,大核跑得快、吃电多,小核跑得慢、吃电少;同一个任务放不同核上,跑完的时间和花的电都不一样。调度器以前只问"哪颗核空着",没问过"放这颗核上要多花多少电"。

能耗感知调度(EAS)补的就是这一问。平台先给调度器一张"电费表",叫 Energy Model:每个性能域、每个频率档位对应的功耗,一行一行写清楚¹。任务醒来、要挑一颗核落脚时,调度器把"放每颗核上"挨个算一遍:这颗核要提到哪个档位、同域里别的核会不会被连带抬高频率、总共多花多少电——在"跑得动"的核里,挑最省电的那颗¹。

这张算法里藏着一句很漂亮的取舍:它不算绝对电费,只算差值。内核文档原话的意思是,电费表里的数字是毫瓦还是抽象刻度,根本无所谓¹——差值对了,排序就对了。绝对值是给人看的,差值才是给决策用的。

配套条件也苛刻,苛刻得诚实。必须配 schedutil 调速器:只有它直接用调度器的利用率信号算频率,预测和实际才对得上号;换别的调速器,EAS 的预测就是空中楼阁¹。还需要频率不变、CPU 不变的利用率信号,不然大小核之间根本没法比¹。还有一条自白:EAS 不懂超线程,它把两个线程当两颗独立的核算,SMT 平台上干脆不支持¹。

杨振宁说的"发展性研究",说的就是这种活²(思想化用):DVFS、功耗表,没有一样是新原理;赢在把"电"接进调度器的决策环——先实际后原理,把成熟的东西工程化,变成能跑的机制。

二、电费,是意图的另一种形状

如果 AI 的操作系统先出现,它的预算从一开始就是立体的。任务进场时声明的不只是截止期,还有"这份活值多少电":唤醒词检测放小核低频守着,大模型推理上大核冲刺,批量整理任务等电便宜的时候再跑。调度器排的不只是"谁先跑",而是"这份电花给谁最值"。

机制与货币分离,是 EAS 留下的更值钱的东西。同一套"算差值"的算法,换一张表就是"算钱":云上按量计费,调度器按"每千 token 多少钱"排队;换一张碳表,就是"算碳"。EAS 真正的遗产不是省电,是"把代价写进调度"这个动作本身。

范式之眼再看一层:EAS 量的仍是 CPU 的电。向量阵列时代真正的稀缺物——Tensor Core 的占用、显存带宽、KV cache 占着的显存——一概不在这张电费表上。电费表扩到算力阵列,扩到"一个 token 多少焦耳",才是 AI-native OS 的 EAS。

三、看一眼你机器的调速器

今晚就能试的一步,先看自己机器的调速器和频率:

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors

watch -n 1 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq

第一行若是 schedutil,说明频率决策已经搬进了调度器上下文:它按公式 f = 1.25 × f₀ × util / max 给频率定价³——利用率越高,要价越高,1.25 是留给突发的一点余量³。再开一个忙循环跑满一颗核,看着频率爬上去;停掉,看着它落回来。频率跟着利用率走,这就是 schedutil 在你眼前算账的样子。

落到今天的机器上,同一张表直接能套。一台跑本地模型的机器上,在线问答是"值电"的活、批量评测是"等电"的活,两类活分开排队,电费表上价目不同;边缘小盒子上,控制环的任务放高性能核、日志整理的任务放低功耗核,电池的每一格都有名有姓;视频 AI 平台里一路视频的推理任务再多,也只花这一路的电费预算;企业私有智能中心里一个 agent 的二十个子任务共享这个 agent 的电费额度,而不是二十倍的额度。先定价,再谈分。

觉 然 小 注

孙过庭《书谱》里有一句:"初学分布,但求平正;既知平正,务追险绝;既能险绝,复归平正。"⁴(思想化用)调度器的"平正"是 vruntime 拉平;EAS 是"务追险绝"——敢在公平之外再算一笔电;最终"复归平正"的,是更高一层的平:时间与电,一起平。

引 用 与 出 处

  1. [1] Linux 内核文档. Energy Aware Scheduling. Documentation/scheduler/sched-energy.rst. https://mjmwired.net/kernel/Documentation/scheduler/sched-energy.rst
  2. [2] 杨振宁. 关于发展性研究的论述. 1981年致信国家领导人,1982-03-05《光明日报》发表(思想化用)
  3. [3] Linux 内核文档. CPU Performance Scaling. Documentation/admin-guide/pm/cpufreq.rst. https://mjmwired.net/kernel/Documentation/admin-guide/pm/cpufreq.rst
  4. [4] 孙过庭. 《书谱》. 垂拱三年(687)撰并书(思想化用)

· · ·

← 返回资讯中心