EEVDF 是什么
从 Linux 6.6 开始,CFS 被 EEVDF(Earliest Eligible Virtual Deadline First,最早合格虚拟截止期优先)取代,成为普通任务(SCHED_NORMAL)的默认调度器。它按「资格时间 + 虚拟截止期」选下一个任务:只有已获得应得份额、处于有资格状态的任务才能被选中,其中虚拟截止期最早的先运行。它保留了时间片概念,但把调参入口换成了 sched_base_slice_ns。
基本信息
| 引入版本 | Linux 6.6(2023 年发布) |
|---|---|
| 取代对象 | CFS 作为 SCHED_NORMAL 的默认调度器 |
| 新参数 | sched_base_slice_ns(基础时间片,毫秒量级) |
| 旧参数 | sched_latency_ns、sched_min_granularity_ns 在 6.6 及以上已移除 |
| 确认方法 | uname -r 与 ls /proc/sys/kernel/sched_* |
典型使用场景
- 内核升级后沿用旧调优脚本,需要先核对文件是否存在
- 交互延迟敏感服务在换代后重新评估响应表现
- 排查升级后延迟分布变化是否由调度器换代引起
- 为延迟调优寻找新内核上实际可用的参数入口
- 与 sched_ext、实时调度组等机制区分,避免归因错误
确认版本与参数
确认版本与参数
uname -r
ls /proc/sys/kernel/ | grep -E 'sched_(base_slice|latency|min_granularity)'
sysctl kernel.sched_base_slice_ns 2>/dev/null
zcat /proc/config.gz 2>/dev/null | grep -E 'CONFIG_SCHED_CLASS_EXT|CONFIG_FAIR_GROUP_SCHED'
vmstat 1 5 | tail -5 # 观察 r 与 cs
cyclictest -p 80 -t 1 -i 1000 -l 10000 2>/dev/null | tail -5 # 若已安装,量化延迟分布内核版本与参数
| 版本 | 默认调度器 | 相关调参 |
|---|---|---|
| 5.x 及更早 | CFS | sched_latency_ns、sched_min_granularity_ns 等 |
| 6.6 及以后 | EEVDF | sched_base_slice_ns |
| 确认方式 | uname -r | 按版本决定该查哪组参数名 |
调度延迟类调优前先确认内核版本:旧 CFS 时代的经验参数在新内核上不一定适用,文件本身也可能已不存在。
EEVDF 并没有取消时间片,仍有基础片长与调度粒度,只是入口换名;旧脚本里的文件路径要整体复核。
sched_base_slice_ns 是基础片长,不是唯一决定因素:任务互相竞争时还会按权重与资格状态调整,实际运行时长要结合 niceness 一起看。
部分发行版或厂商内核会把新调度器特性回移到较低的大版本号上,因此以 ls /proc/sys/kernel 的实际文件为准,不要只看 uname -r 的主版本。