CPU 与调度60 条

CFS 调度器与 vruntime

完全公平调度(CFS)以 vruntime 排序选择任务:权重(由 nice 映射)影响 vruntime 增速,从而决定 CPU 分配比例。

核心对象vruntime(加权累计运行时间)
排序结构红黑树(按 vruntime 取最小)
权重nice 映射到权重,相邻级别权重约差 1.25 倍

观察

观察
cat /proc/sched_debug | head -40   # 需权限
ps -eo pid,ni,pri,pcpu,comm --sort=-pcpu | head
「公平」指按权重比例分配时间,不是等时片;nice 调整的是比例而非绝对优先级。

易错点

  • 高 nice 值只是降低 CPU 比例,不会让任务完全饿死(极端重负载下仍会得到少量份额)
  • CPU 分配比例与任务实际瓶颈未必相关,压测时先确认负载类型再解读

数据来源与参考

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