第70期 | 搬家,比排队更贵
一个核空转,另一个核排着队——多核机器上最刺眼的画面,不是慢,是闲置。上一期把公平算到了时间账上,这一期看另一笔账:任务从一个核搬到另一个核,要付多少钱。
一、搬家,比排队更贵
单核时代,调度器只管排队。多核一来,排队变成了两道题:每个核各排各的队,队与队之间还得匀着。2002 年 Ingo Molnar 的 O(1) 设计把大锁拆了,每个 CPU 一个运行队列、各自加锁,并行调度不再互相绊脚¹;可它同时立了两条互相顶牛的目标:没有 CPU 该闲着,也别让进程在核之间来回蹦¹。匀,是效率;不蹦,是亲和。调度器从此活在这一对矛盾里。
后来这套办法长成了调度域:从超线程兄弟核,到物理核,再到 NUMA 节点,一层层往上,每层只在组与组之间匀负载,组里先自己消化²。触发也不靠拍脑袋:每个 CPU 的时钟节拍定期检查,闲下来的核会主动去忙核那里拉活,实在失衡严重,才强行把正在跑的任务推走²。
搬家为什么贵?任务搬走,缓存留下了。刚暖热的缓存要重新填,跨物理核比搬给超线程兄弟核贵,跨 NUMA 节点更贵——离它的数据远了,每一次访存都要多走一段路³。内核于是处处留手:唤醒时尽量回到上次跑过的核;搬家收益不大,就先不动。公平不是把人头数铺平,而是算一笔总账:省下的等待时间,够不够付丢缓存的代价。这正是一条反馈回路:感知负载、比较差距、执行搬家,再感知⁴。
二、先问数据在哪,再问核闲不闲
如果 AI 的操作系统先出现,它根本不会先数哪个核闲着。Agent 的任务不是一段无状态的代码,拖着上下文、权重、KV 缓存一大家子。搬代码便宜,搬家当贵:上下文一搬,缓存、显存、带宽全要重来一遍。先问数据在哪,再问核闲不闲——位置,才是第一性。
原生调度器的账本也得换货币:不再只记 CPU 时间,还要记缓存暖不暖、数据离得远不远、向量阵列占了几成。按时间片切指令流的旧抽象,在这里又露一次馅:它能量时间,却量不出一次跨节点搬家丢掉的局部性。Brooks 的尺子量过去⁵(思想化用):把人头铺均匀,是偶然困难;算力与数据天生不在一处,是本质困难。前者调参能磨,后者得换账本。
再推一格:调度器可以给每个 agent 发一张“定居证”——数据落在哪,算力就优先往哪靠;实在要搬,就连数据带状态打包搬,别只搬个空壳进程。搬的次数越少,系统越稳;不是不搬,是搬之前先算清代价。
三、先看谁在搬家,再谈公平
动手一步,在手边任何一台 Linux 机器上看它在搬什么:
cat /proc/sys/kernel/sched_migration_cost_ns
perf stat -e cpu-migrations ./待测的负载
mpstat -P ALL 1
第一条看内核给搬家设的门槛,第二条数一次负载里到底搬了多少次,第三条看哪个核在空转、哪个核在排队。三个数对上,才知道公平缺在哪一环。
再做一次对照:用 taskset 把一个吃 CPU 的任务钉在一个核上跑一轮,再放开让调度器自己匀,对比耗时与搬家次数。钉住省了缓存重填,放开省了空转——哪个划算,看负载的脾气,不看口号。
落到普遍场景里,同一条规矩:一台跑本地模型的机器上,推理服务别让它在核之间乱蹦,缓存一冷,首 token 就慢;一台边缘算力盒上大小核本事不一样,关键任务被搬到小核上,省下的不是电,是时延;视频 AI 平台里解码落在哪一路,推理就该跟到哪一路;企业私有智能中心里 agent 的上下文在哪,算力就往哪靠。调度公平的下一站,不是更匀,是更贴着数据。
觉 然 小 注
搬过去的不只是任务,还有它刚暖热的缓存。公平若只数人头,注定要交两次账。
引 用 与 出 处
- [1] Ingo Molnar. Goals, Design and Implementation of the new ultra-scalable O(1) scheduler. Linux 内核文档(Documentation/sched-design.txt,2002 年 1 月致 LKML 邮件整理版), 2002. https://git.zx2c4.com/laptop-kernel/tree/Documentation/sched-design.txt?id=0ef3b49cc24963a11125971b8deaa8b46209d113
- [2] Linux 内核文档. Scheduler Domains. Documentation/scheduler/sched-domains.rst. https://docs.kernel.org/5.10/scheduler/sched-domains.html
- [3] LWN.net. The scheduler and hyperthreading. LWN.net. https://lwn.net/Articles/8720/
- [4] Norbert Wiener. Cybernetics: Or Control and Communication in the Animal and the Machine. John Wiley & Sons, 1948. (思想化用)
- [5] Frederick P. Brooks Jr. No Silver Bullet: Essence and Accidents of Software Engineering. IEEE Computer, 1987. DOI: 10.1109/MC.1987.1663532(思想化用)
· · ·