Linux 6.6 到 7.0 调度有哪些改动
原始问题:Linux 6.6 到 7.0 调度有哪些改动? · 2026-06-30
Linux 6.6 → 7.0 调度器核心改动全景
这是一个跨越 15 个内核版本(2023.10 ~ 2026.02)的调度器变革历程,以下按阶段梳理。
一、阶段总览
| 阶段 | 版本区间 | 主题 |
|---|---|---|
| 调度算法革命 | 6.6 ~ 6.12 | EEVDF 取代 CFS;sched_ext 引入;PREEMPT_RT 主线化 |
| 抢占与代理执行 | 6.13 ~ 6.17 | Lazy Preemption;Proxy Execution 落地;SMP 无条件化 |
| 完善与收敛 | 6.18 ~ 7.0 | EEVDF 调优;结构优化;抢占模式简化 |
二、里程碑级改动详解
1. Linux 6.6(2023.10)— 🏆 EEVDF 替代 CFS
- 核心变更:使用 Earliest Eligible Virtual Deadline First (EEVDF) 算法取代了从 2.6.23(2007年)沿用至今的 CFS。
- 原理:不再依赖启发式权重和可调参数,而是基于”virtual deadline”以数学化方式确保未获得足够 CPU 时间的进程被选中,超额进程”受罚”。
- 配套机制:引入
latency-nice(基于论文 EEVDF using latency-nice),允许用户空间提示进程的延迟偏好。 - 其他:为 x86 Hybrid CPU(P-core + E-core)启用集群调度(Cluster Scheduling)。
2. Linux 6.8(2024.03)— 🏆 Deadline Server 基础设施
- 核心变更:引入 SCHED_DEADLINE server 机制(嵌套/二级调度),替代传统的 RT throttling。
- 背景:实时调度类(RR/FIFO)可能饿死低优先级 SCHED_OTHER 进程。旧方案 RT throttling 简单粗暴、性能不佳。
- 实现:为实时任务分配一个 deadline server,对低优先级任务呈现为可抢占的”服务器”,在保证实时性同时避免饥饿。
3. Linux 6.12(2024.11)— 🏆 sched_ext + EEVDF 完工 + PREEMPT_RT 主线化
- sched_ext(SCHED_EXT):新增 BPF 可扩展调度器类。允许用 BPF 程序编写自定义调度算法,无需编译内核模块即可加载/卸载。极大加速调度器迭代速度。
- EEVDF 完工:自 6.6 引入后经过多个版本优化,至此完成过渡。
- PREEMPT_RT:经过 20 年开发,实时抢占补丁集最终合入主线。
- hiperdispatch:动态调整 CPU capacity,提升垂直极化场景下的调度效率。
4. Linux 6.13(2025.01)— 🏆 Lazy Preemption
PREEMPT_NONE → PREEMPT_VOLUNTARY → PREEMPT_LAZY(新增) → PREEMPT_FULL
(越靠右越实时,开销越大)
- 新增抢占模式 PREEMPT_LAZY:定位在”自愿抢占”和”完全抢占”之间。
- Fair-class(CFS/EEVDF)的抢占请求延迟到 tick 边界执行,减少上下文切换开销。
- RR/FIFO/DEADLINE 实时类保持完全抢占。
- Proxy Execution v13 准备:为后续解决优先级反转问题打下基础。
5. Linux 6.17(2025.09)— 🏆 SMP 无条件化 + Proxy Execution
- SMP 无条件化:调度器移除所有单处理器(UP)特定代码和
#ifdef,仅保留 SMP 代码路径。运行在单 CPU 上时自动适配,无需额外维护两套代码路径。 - 单 RQ Proxy Execution:单运行队列代理执行实现——当高优先级任务被低优先级任务持有的锁阻塞时,低优先级任务”借用”高优先级任务的剩余时间片继续执行以加速释放锁,从而解决优先级反转。
- EEVDF lag 管理:在 fair 类中正式管理进程的 lag(滞后量),确保不同时间片配置下运行平等性。
6. Linux 7.0(2026.02)— 🏆 抢占模式简化 + rseq 时间片扩展
- 抢占模式从 4 种→2 种:
- 主流架构(arm64/x86/riscv/powerpc/s390/loongarch)仅保留 PREEMPT_LAZY 和 PREEMPT_FULL。
PREEMPT_NONE仅限不支持抢占的架构;PREEMPT_VOLUNTARY仅限不支持懒抢占的架构。- Commit:
7dadeaa6e851
- rseq 时间片扩展:为
rseq(2)系统调用增加时间片扩展机制——当用户空间线程在临界区中被调度出去时,可请求短暂时间片延长以完成临界区工作、释放锁,实现”机会性优先级天花板”。 - sched_ext Deadline Server:为 sched_ext 任务添加 deadline server,让 BPF 调度器也能利用 deadline 机制保证实时性。
- perf sched stats:新增命令,可捕获调度器统计计数器并生成报告及 diff。
- 大型系统 NOHZ 优化:IBM 贡献的大型多核系统 NOHZ 空闲管理改进。
- struct rq 字段重排:优化运行队列缓存行使用。
三、完整版本对照表
| 版本 | 发布日期 | 调度器核心改动 |
|---|---|---|
| 6.6 | 2023-10 | 🆕 EEVDF 取代 CFS;Cluster scheduling for x86 hybrid;latency-nice |
| 6.7 | 2024-01 | 集群感知调度(cluster-aware);cgroup/cpuset remote partition |
| 6.8 | 2024-03 | 🆕 Deadline server 基础设施;EEVDF O(1) fastpath |
| 6.9 | 2024-05 | amd-pstate Preferred Core;Dynamic Energy Model(运行时能源模型修改);cpumask 动态分配 → 512 CPU |
| 6.10 | 2024-07 | 系统压力接口重构成调度器;允许禁用 sched_balance_newidle |
| 6.11 | 2024-09 | Loongson-3 cpufreq 驱动;nested-softirq locking(PREEMPT_RT);intel_pstate EPP 更新 |
| 6.12 | 2024-11 | 🆕 sched_ext (BPF 调度器);✅ EEVDF 完工;PREEMPT_RT 主线化;hiperdispatch |
| 6.13 | 2025-01 | 🆕 Lazy Preemption;sched_ext LLC/NUMA 感知空闲选择;Proxy Execution v13 准备 |
| 6.14 | 2025-03 | Deadline 修复;nr_running → nr_queued;per-NUMA 空闲 cpumask;PowerPC lazy preemption |
| 6.15 | 2025-05 | sched_ext 核心事件计数器;SCHED_DEBUG 无条件化;SCX_OPS_ALLOW_QUEUED_WAKEUP |
| 6.16 | 2025-07 | 动态非对称优先级;scx_sched 多层级调度器架构;RT 组调度启动参数;cpufreq Rust 抽象 |
| 6.17 | 2025-09 | 🏆 SMP 无条件化(移除 UP 代码);单 RQ Proxy Execution;EEVDF lag 管理;sched_ext cgroup 带宽控制 |
| 6.18 | 2025-11 | migrate_enable/disable 内联化;sched_ext 错误转储增强;PREEMPT_RT softirq-BKL 优化 |
| 6.19 | 2026-02 | MM CID 管理重写;EEVDF NEXT_BUDDY 回归(唤醒抢占增强);比例 newidle balance;架构特定调度域距离;sched_ext DSQ 无锁 peek |
| 7.0 | 2026-02+ | 🏆 抢占模式 4→2 简化;rseq 时间片扩展;sched_ext deadline server;perf sched stats;struct rq 缓存优化;大型系统 NOHZ 改进 |
四、三大技术主线
主线 1:公平调度算法的演进(CFS → EEVDF → 完善)
6.6 CFS → EEVDF (替换)
6.8 EEVDF O(1) fastpath
6.12 EEVDF 完工
6.13 Lazy Preemption (fair-class 延迟抢占)
6.17 EEVDF lag 管理
6.19 NEXT_BUDDY 回归 + 比例 newidle balance
7.0 抢占模式简化
主线 2:调度可扩展性(sched_ext)从无到有
6.12 sched_ext 引入 (首批实现)
6.13 LLC/NUMA 感知空闲选择
6.15 核心事件计数器
6.16 struct scx_sched (多层级调度器架构)
6.17 cgroup 带宽控制
6.19 旁路模式可扩展性 + DSQ 无锁 peek
7.0 Deadline Server for sched_ext + C 语言示例调度器
主线 3:实时性与优先级管理
6.8 Deadline Server (替代 RT throttling)
6.12 PREEMPT_RT 主线化
6.13 Proxy Execution 准备
6.17 单 RQ Proxy Execution (优先级反转解决)
6.19 NEXT_BUDDY (唤醒抢占增强)
7.0 rseq 时间片扩展 ("机会性优先级天花板")
7.0 KVM 半虚拟化抢占
五、总结
从 Linux 6.6 到 7.0,调度器经历了自 2.6.23 引入 CFS 以来最大规模的变革:
- 调度算法革命:EEVDF 完全替代 CFS,终结了 17 年统治。
- 调度可编程化:sched_ext 让用户用 BPF 自定义调度器,从 6.12 引入到 7.0 持续完善。
- 实时性飞跃:PREEMPT_RT 主线化 + Lazy Preemption + Proxy Execution + rseq 时间片扩展,四重保障。
- 代码结构简化:SMP 无条件化 → UP 代码删除 → 抢占模式从 4 种减到 2 种。
参考来源
⚠️ 免责声明
本站内容均由 AI 基于公开知识辅助生成,仅供学习参考,请勿直接引用作为依据。作者不对信息的准确性、完整性及适用性作保证,亦不对因使用本站内容产生的任何损失承担责任。