
Linux 内核的可扩展调度器类“sched_ext”持续启用新功能,允许通过 BPF 程序实现自定义 CPU 调度策略。在下个月即将发布的 Linux 7.1 版本周期之前,sched_ext 的开发代码中已排队引入一项名为 SCX_ENQ_IMMED 的新功能,用于更精确地控制任务何时被投放到 CPU 上执行。
SCX_ENQ_IMMED 是 sched_ext 中的一个新标志(flag),用于控制任务入队行为:当一个任务可以立即开始运行时,该标志确保其被直接加入本地分发队列(Dispatch Queue, DSQ)。换句话说,如果任务具备立即执行的条件,它就会被优先处理。
长期从事 Linux 内核开发的 Tejun Heo 负责实现了这一 SCX_ENQ_IMMED 标志,并在补丁说明中解释道:
“为本地 DSQ 插入操作添加 SCX_ENQ_IMMED 入队标志。一旦任务以 IMMED 方式被调度,它要么立即获得 CPU 并持续运行,要么在无法执行时被重新送回 BPF 调度器。它绝不会滞留在本地 DSQ 中其他任务之后,也不会被更高优先级调度类抢占的 CPU 所阻塞。
……
该机制通过防止任务在本地 DSQ 中堆积,实现了对调度延迟更精细的控制。同时,它还支持子调度器之间进行机会性的 CPU 共享——如果没有此功能,某个子调度器可能会填满共享 CPU 的本地 DSQ,导致其他调度器难以获得使用机会。”
目前该补丁已合入 sched_ext 的 “for-7.1” Git 分支,预计将在下个月的 Linux 7.1 合并窗口期间正式提交。
转自 Linux 7.1 sched_ext To Add “SCX_ENQ_IMMED” For Tighter Control When Tasks Land On A CPU – Phoronix
Linuxeden开源社区