NewThis is a live doc! Anyone with edit access can make updates in real time without having to publish.
CFS

概念

CFS, Completely Fair Scheduler

CFS 在真实的 CPU 上(统一时刻只能执行一个任务)模拟了一个「理想的、精确的、多任务 CPU」,且每个任务都严格的使用了 1/nr_running 个 CPU

CFS 跟踪所有任务的执行时间(纳秒)(p->se.vruntime),并始终选择该值最小的(即被执行时间最少的)作为下一个要执行的任务

调度器的类别

根据「任务多久会被切换」,CFS 有多种设置(默认 SCHED_NORMAL)

  • SCHED_NORMAL (SCHED_OTHER):标准

  • SCHED_BATCH:适用于批处理任务,调高任务切换间隔

  • SCHED_IDLE:仅用于防止异常,通常仅在任务完成空闲时才切换

  • SCHED_FIFO implemented in sched/rt.c and are as specified by POSIX.

  • SCHED_RR implemented in sched/rt.c and are as specified by POSIX.

分组调度

某些情况下,可能需要分组调度并保证组间公平与组内公平而不是全局公平

参考

https://docs.kernel.org/scheduler/sched-design-CFS.html