CFS 公平调度Completely fair scheduler

以按权重换算的虚拟运行时间衡量实体已获得的 CPU 服务。

核心约束
持续更新运行时间,并将等待运行实体按虚拟运行时间组织。
适用问题
理解普通任务的权重公平性以及历史 Linux 调度实现。
边界与取舍
实际选择还有当前实体、唤醒与组调度规则;Linux 后续版本的 EEVDF 需独立分析。

常见操作#

n 为运行队列中的调度实体数;这里专指 Linux 6.5 的经典 CFS。

操作时间复杂度条件与说明
更新运行时间账本O(1)O(1)固定宽度的运行时间和权重算术,不含层级调度组累计。
实体入队 / 出队O(log⁡n)O(\log n)按 vruntime 维护红黑树。
读取缓存的最左候选O(1)O(1)rb_root_cached 保存最左节点;完整 pick_next_entity 还会考虑当前实体和 buddy 提示。

时间与空间#

时间复杂度
树更新 O(log⁡n)O(\log n),缓存最左读取 O(1)O(1)
辅助空间
O(n)O(n) 队列状态

只描述该历史版本的公平调度核心;不能用于说明 Linux 6.12 EEVDF 的截止时间选择。

工程中的应用#

1 个案例 · 附源码
基础原理参考资料

Linux 6.5 · CFS design按虚拟运行时间组织公平份额的历史设计。

Linux 6.5 · CFS tree operations实体入队与缓存最左读取的对应代码。

7 个概念