EEVDF 调度器¶
“最早符合条件的虚拟截止时间优先”(EEVDF)最初于 1995 年在一篇科学出版物中提出 [1]。Linux 内核从 6.6 版本开始过渡到 EEVDF(作为 2024 年的新选项),放弃了早期的完全公平调度器(CFS),转而使用 Peter Zijlstra 在 2023 年提出的 EEVDF 版本 [2-4]。有关 CFS 的更多信息,请参见CFS 调度器。
与 CFS 类似,EEVDF 旨在在具有相同优先级的可运行任务之间平均分配 CPU 时间。为此,它为每个任务分配一个虚拟运行时间,创建一个“滞后”值,该值可用于确定任务是否已获得其公平的 CPU 时间份额。这样,具有正滞后的任务被欠 CPU 时间,而负滞后意味着该任务超过了其份额。EEVDF 选择滞后大于或等于零的任务,并计算每个任务的虚拟截止时间 (VD),选择具有最早 VD 的任务来执行。重要的是要注意,这允许具有较短时间片的对延迟敏感的任务优先处理,这有助于提高它们的响应性。
关于如何管理滞后,特别是对于睡眠任务,目前仍在进行讨论;但在撰写本文时,EEVDF 使用基于虚拟运行时间 (VRT) 的“衰减”机制。这可以防止任务通过短暂睡眠来重置其负滞后而利用系统:当任务睡眠时,它会保留在运行队列中,但被标记为“延迟出队”,允许其滞后在 VRT 上衰减。因此,长时间睡眠的任务最终会重置其滞后。最后,如果任务的 VD 较早,则可以抢占其他任务,并且任务可以使用新的 sched_setattr() 系统调用请求特定的时间片,这进一步方便了对延迟敏感的应用程序的工作。
参考文献¶
[2] https://lore.kernel.org/lkml/a79014e6-ea83-b316-1e12-2ae056bda6fa@linux.vnet.ibm.com/