Hasty Briefsbeta

双语

Understanding the Linux Kernel: The Scheduler

16 days ago
  • #EEVDF algorithm
  • #Linux scheduler
  • #task management
  • Linux调度器负责管理CPU分配,决定每个核心上接下来运行哪个任务,在速度与公平性之间取得平衡。
  • 它调度表示执行流的task_struct对象,进程和线程在内部结构相同但共享资源有所不同。
  • Linux按优先级顺序使用调度类:停止类(stop)、截止时间类(deadline)、实时类(rt)、公平类(fair)、扩展类(ext)和空闲类(idle),其中公平类处理最常见的负载。
  • 任务停止运行的方式包括自愿阻塞(例如等待I/O)或被TIF_NEED_RESCHED标志强制抢占,切换仅发生在安全点(如返回用户空间时)。
  • 抢占由周期性时钟中断或唤醒事件触发,新就绪任务可能比当前任务更具执行资格。
  • 上下文切换涉及保存/加载CPU状态,可能因缓存和TLB失效产生显著开销,因此调度器会尽量减少不必要的切换。
  • 公平类采用EEVDF(最早合格虚拟截止时间优先)算法,基于虚拟运行时间、合格性和虚拟截止时间来确保公平性与低延迟。
  • 虚拟运行时间(vruntime)通过任务权重(来自nice值)调整实际时间,权重高的任务虚拟运行时间增长更慢,从而获得更多CPU份额。
  • 合格性机制确保任务仅在不超出其公平份额(基于平均虚拟运行时间)时才能运行,防止饥饿现象。
  • 任务根据其虚拟运行时间加上时间片(按权重转换)获得虚拟截止时间,调度器选择合格任务中截止时间最早者,较短时间片的任务更受青睐以实现更低延迟。