迁移代价窗口
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 观察缓存命中率与指令数变化
- 用应用自身的延迟分位与吞吐数据确认净收益