多年来,Linux 内核一直在酝酿"代理执行"(Proxy Execution)这一概念,通过利用任务调度上下文及其执行上下文中的信息来实现优先级继承。 虽然 Proxy Execution 补丁本身尚未排到上游合并的队列中,但一些预备补丁看起来会在即将到来的 Linux 6.13 合并窗口中出现。
Linux代理执行功能在早期的补丁中被描述为:
"Proxy Execution 是一种实现优先级继承的方法,其基础是区分任务的调度器上下文(就任务何时运行做出调度决策所需的信息,如调度器类和优先级)和执行上下文(实际运行任务所需的信息,如 CPU 亲和性)。 启用代理执行后,阻塞在互斥任务上的任务 p1 会保留在运行队列中,但其"阻塞"状态和阻塞的互斥任务会被记录下来。 如果 p1 被选择在阻塞状态下运行,则锁所有者 p2 可以"代表"它运行,并继承 p1 的调度上下文。在实践中,可能会出现一些更复杂的情况:互斥体所有者本身可能被另一个互斥体阻塞,也可能处于休眠状态、在不同的 CPU 上运行、正在 CPU 之间迁移等。"
Linux6.13可能合并的准备工作是此补丁系列,在引入代理执行优先级继承之前需要进行更改。 Google 的 John Stultz 在该补丁信息中评论道:
"I wanted to re-send (again) v12 of the preparatory patches for Proxy Execution - an approach for a generalized form of priority inheritance. 在此,我再次只提交早期/准备性修改供审核,希望我们能推进这些更简单的补丁,然后迭代推进代理执行系列中更有趣的补丁。"
截至本周,这些准备性修改已合并到 tip/tip.
在即将到来的 Linux 6.13 合并窗口之前,这些预处理补丁已经合并到 TIP 代码中,如果没有任何最后出现的问题或 Linus Torvalds 提出的批评意见,这些补丁应该会在那个时候被上传到上游。经过多年的讨论,希望在 Linux 内核中主推实际的代理执行支持的时间不会太长。