接口是什么
部分调度器行为开关通过 debugfs 暴露,文件按当前状态列出特性名:处于关闭状态的特性名会带 NO_ 前缀(例如 NO_PLACE_LAG)。直接写入你想开启的名称即可开启对应行为,写入带 NO_ 的名称则关闭它,改动立即对全局所有任务生效。典型用途是定位内核升级或配置变更后的调度性能回归——把可疑特性单独关掉做对照,确认差异是否来自它。这属于调试接口,不是稳定 ABI。
基本信息
| 路径 | 新内核 /sys/kernel/debug/sched/features;老内核 /sys/kernel/debug/sched_features |
|---|---|
| 前提 | debugfs 已挂载(mount -t debugfs none /sys/kernel/debug)且为 root |
| 查看 | cat 该文件,逐行是特性名 |
| 切换 | 写入特性名即可切换,立即全局生效 |
| 生效范围 | 运行期全局,影响所有任务 |
| 回退 | 重启恢复内核默认值;接口名称随版本变化 |
典型使用场景
- 比较两个内核版本的调度行为差异:逐个关闭可疑特性做二分定位
- 复现线上尾延迟异常时临时恢复旧行为,验证是否由某个特性引起
- 评估 EEVDF 等新调度策略引入后对特定负载的影响
- 内核调优实验:确认某个特性开关对吞吐与延迟的实际作用
- 解释「同一应用换内核后性能变了」这类难以复现的问题
查看与切换
查看与切换
mount | grep debugfs # 确认 debugfs 已挂载,否则先挂载
ls /sys/kernel/debug/sched/ # 新内核的目录形态;老内核直接用 /sys/kernel/debug/sched_features
cat /sys/kernel/debug/sched/features # 查看全部特性及当前开关状态
echo NO_PLACE_LAG | sudo tee /sys/kernel/debug/sched/features # 关闭该特性,立即生效
cat /sys/kernel/debug/sched/features | grep -i place # 复核状态是否已变化
# 需要恢复时写入不带 NO_ 的名称,或直接重启内核
echo PLACE_LAG | sudo tee /sys/kernel/debug/sched/features操作对照
| 动作 | 做法 | 注意 |
|---|---|---|
| 查看 | cat 特性文件 | 名称即当前状态,带 NO_ 表示该行为已关闭 |
| 关闭某特性 | 写入 NO_<名称> | 立即全局生效,生产环境需谨慎 |
| 重新开启 | 写入不带 NO_ 的名称 | 名称以文件打印内容为准,不要凭记忆猜 |
| 持久化 | 不支持 | 重启即回到默认,不要写进开机脚本 |
特性名与数量随内核版本变化(例如 EEVDF 引入后新增了 PLACE_LAG 一类开关,旧版本的名称可能消失)。跨版本引用同一名称时先确认它在当前内核里是否存在,再谈行为是否等价。
关闭一个特性等于改变全局调度行为,副作用可能出现在与目标无关的负载上。建议在变更前后各采集一轮完整指标(吞吐、P99 延迟、上下文切换、运行队列长度),而不是只看单一性能数字。