结论:CFS 不划分固定时间片,而是为每个可运行任务维护虚拟运行时间 vruntime(实际运行时间按权重折算),用红黑树按 vruntime 排序,每次调度选最左侧节点——即"最受亏待"的任务运行,从而让各任务的 vruntime 趋于相等,实现按权重的比例公平。

展开:核心机制:1)vruntime 增长速率与 nice 值挂钩——nice 越高权重越低,vruntime 涨得越快,自然被调度得越少(nice -20 到 +19 对应权重约 88761 到 15 的等比序列,每级差约 1.25 倍);2)没有显式时间片,任务可运行时长由调度周期除以任务数得出,并设最小粒度防止过度切换;3)新任务和刚唤醒的任务以 min_vruntime 为基准起步,避免长时间睡眠后 vruntime 过小而霸占 CPU,同时给唤醒延迟敏感的交互任务适度补偿。工程细节:SMP 下每核一个运行队列,配合负载均衡迁移任务;cgroup 通过组调度把公平性扩展到任务组。易错点:CFS 的"公平"是 CPU 时间比例公平,不是响应时间最优——交互式体验靠唤醒抢占(wakeup preemption)和 vruntime 补偿共同保证。

追问方向:EEVDF 调度器(6.6 起取代 CFS 部分逻辑)的动机、cgroup v2 的 cpu.weight 如何映射到调度。