首页/系统/Linux 内核与性能调优速查/sched_nr_migrate 批量迁移任务数
CPU 与调度60 条

sched_nr_migrate 批量迁移任务数

单次负载均衡操作中最多尝试迁移的任务数(默认 32);大量短命任务场景影响均衡效率与单次暂停时长。

批量迁移任务数

sched_nr_migrate 限制单次负载均衡操作中最多尝试迁移的任务数,默认 32。均衡触发时调度器会从繁忙的核上搬一部分可运行任务到空闲核,这个参数决定一次能搬多少。取值较大时均衡推进更快,但一次搬运大量任务会拉长停止调度的时间(迁移时需要短暂停住源核的运行队列),在实时或延迟敏感场景可能造成毛刺;取值较小则均衡更平缓,但收敛更慢。

基本信息

参数名kernel.sched_nr_migrate
默认值32
作用单次负载均衡尝试迁移的任务数上限
影响面均衡速度与单次暂停时长
观测/proc/sched_debug 与 pidstat -w

典型使用场景

  • 大量短命任务或线程池密集唤醒造成核间不均
  • 与实时任务混跑时出现延迟毛刺
  • 单核饱和而其他核空闲、恢复速度慢
  • 短任务风暴场景下评估均衡效率
  • 与迁移代价参数配合做调度微调

查看与对比

查看与对比
sysctl kernel.sched_nr_migrate
sysctl -w kernel.sched_nr_migrate=8      # 单次搬运更少,毛刺更小但收敛更慢
cat /proc/sched_debug | grep -i -m5 migrat
mpstat -P ALL 1 3                        # 核间占用分布
pidstat -w 1 3 | head -20                # 迁移与上下文切换
vmstat 1 5 | tail -5

方向与代价

方向效果代价
调大均衡推进快,核间更均衡单次暂停时间变长,延迟毛刺风险上升
调小单次影响更小均衡收敛变慢,可能长时间不均
保持默认内核整定的折中值极端负载下需要按实测调整
与实时任务混跑时,单次迁移过多会引入延迟毛刺,实时场景应选择更保守的取值。
这属于微调参数:先确认存在单核饱和、其他核空闲的实证,再考虑调整,否则很难看到可度量的收益。

与相邻参数的配合

  • 迁移代价参数决定调度器有多不愿意搬动刚运行过的任务
  • 批量迁移数决定一次能搬多少,两者共同影响均衡的推进节奏
  • 中断亲和决定网络负载落在哪些核上,间接影响各核的均衡压力

易错点

  • 没有核间不均衡实证就调:看不到收益还引入风险
  • 在实时负载上调大:单次暂停变长,延迟毛刺更明显
  • 只调这一个参数:还需配合迁移代价参数与中断亲和一起评估
  • 忽略短任务场景:任务存活极短时迁移本身的开销就已超过收益
  • 用平均 CPU 判断效果:均衡改善应看核间分布与延迟分位

数据来源与参考

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