首页/系统/Linux 内核与性能调优速查/sched_migration_cost_ns 迁移代价窗口
CPU 与调度60 条

sched_migration_cost_ns 迁移代价窗口

任务刚被迁移后的缓存热窗口(默认 0.5ms 量级):窗口内调度器倾向不再迁移该任务,减少跨核缓存失效。

迁移代价窗口

sched_migration_cost_ns 是任务刚被迁移后的缓存热窗口,默认 0.5ms 量级。负载均衡时,如果任务的运行时间距今不足这个窗口,调度器倾向于不再搬动它——刚跑过的任务在某个核的缓存里还留着数据,迁移会带来缓存失效与内存访问延迟上升。因此这个参数实质控制负载均衡的保守程度:调大更不愿迁移,调小更积极追求核间均衡。

基本信息

参数名kernel.sched_migration_cost_ns
默认值500000 ns(0.5ms)量级
作用控制负载均衡的保守程度
相关机制numa_balancing、调度域的均衡策略
版本差异6.6 及以上内核调度参数体系有调整

典型使用场景

  • 单核占用很高而其他核空闲、任务却迟迟不迁移
  • 迁移过于频繁导致缓存命中下降、调度开销上升
  • NUMA 机器上配合自动均衡一起评估
  • 长尾延迟与批处理吞吐之间的取舍
  • 与 taskset 手工绑核方案做对比

查看与核间对比

查看与核间对比
sysctl kernel.sched_migration_cost_ns
sysctl -w kernel.sched_migration_cost_ns=1000000   # 调到 1ms,均衡更保守
mpstat -P ALL 1 2                                  # 核间占用是否均衡
pidstat -w 1 3 | head -20                          # 迁移与上下文切换
numastat | head -20                                # NUMA 场景看跨节点分布
cat /proc/sched_debug | grep -i -m5 migrat          # 调度器迁移相关计数

方向与代价

方向效果代价
调大(如 1ms)负载均衡更保守,减少刚运行任务的跨核搬迁可能出现单核过热而其他核空闲
调小(如 0.1ms)更积极追求核间均衡迁移增多,缓存失效与调度开销上升
调大会让负载均衡更保守,可能出现单核过热其他核空闲;调小则相反,权衡点在缓存命中与核间均衡之间。
NUMA 机器上要配合 numa_balancing 与 numastat 一起评估:跨节点迁移的代价明显高于同一节点内的跨核迁移。

验证方法

  • 用 mpstat -P ALL 记录调整前后各核占用分布
  • 用 perf stat 观察缓存命中率与指令数变化
  • 用应用自身的延迟分位与吞吐数据确认净收益

易错点

  • 只调这一个参数:迁移行为还受 numa_balancing 与调度域策略影响,应成套评估
  • 在没有核间不均衡实证时调整:可能把问题从一种形态换成另一种
  • 忽略缓存效应:迁移代价主要落在缓存命中与内存访问延迟上,需用 perf 验证
  • NUMA 机器只绑核不绑节点:跨节点组合会抵消收益,先用 numactl -H 看拓扑
  • 在 6.6 及以上内核沿用旧参数名:先列出 /proc/sys/kernel 核对文件是否存在

数据来源与参考

  • Linux 内核 Documentation/scheduler/sched-design-CFS.rst
  • Linux 内核源码 kernel/sched/fair.c
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌