英语

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() 系统调用来请求特定的时间片,这进一步方便了对延迟敏感的应用程序的工作。

参考

[1] https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=805acf7726282721504c8f00575d91ebfd750564

[2] https://lore.kernel.org/lkml/[email protected]/

[3] https://lwn.net/Articles/969062/

[4] https://lwn.net/Articles/925371/