首页/系统/Linux 内核与性能调优速查/sched/features 调度特性开关
CPU 与调度60 条

sched/features 调度特性开关

部分调度特性通过 debugfs 的 /sys/kernel/debug/sched/features 暴露,可临时开关用于定位回归;属于调试接口非稳定 ABI。

接口是什么

部分调度器行为开关通过 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 延迟、上下文切换、运行队列长度),而不是只看单一性能数字。

易错点

  • 在生产环境直接切换:改动立即影响所有任务,可能把局部问题扩散成全局抖动
  • 把临时开关当成修复手段固化:重启后回到默认,问题会在下次维护后复现,且掩盖了真正原因
  • 把特性名写进自动化脚本或开机命令:内核升级后名称不存在,脚本报错甚至中断启动流程
  • 只按名称判断语义:不同内核版本下同名特性的实现与默认值可能不同,跨版本对比前需先确认内核源码或文档
  • 忽略 debugfs 未挂载或权限不足:表现为文件不存在/权限拒绝,容易被误判为内核不支持该功能

数据来源与参考

  • Linux 内核 Documentation/scheduler/sched-debug.rst
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌