多年来,Linux 内核的 Proxy Execution 的想法一直作为一种通过利用任务的调度程序上下文及其执行上下文中的信息来实现优先级继承的方法。虽然 Proxy Execution 补丁本身尚未排队等待合并到上游,但一些准备补丁看起来将在即将到来的 Linux 6.13 合并窗口中进行。
Linux 代理执行功能在早期补丁中已描述为:
“代理执行是一种实现优先级继承的方法,它基于区分任务的计划程序上下文(做出有关任务何时运行的计划决策所需的信息,例如其计划程序类和优先级)及其执行上下文(实际运行任务所需的信息,例如 CPU 关联性)的方法。启用代理执行后,在互斥锁上阻塞的任务 p1 仍保留在运行队列中,但会记录其“阻塞”状态和阻塞的互斥锁。如果选择 p1 在仍被阻塞时运行,则锁所有者 p2 可以“代表它”运行,继承 p1 的调度程序上下文。执行上下文不是继承的,这意味着例如,p2 可以运行的 CPU 仍然由其自身的亲和性决定,而不是 p1 的亲和性。
在实践中,可能会出现许多更复杂的情况:互斥锁所有者本身可能被另一个互斥锁阻塞,或者它可能处于休眠状态,在不同的 CPU 上运行,正在 CPU 之间迁移,等等。
Linux 6.13 可能合并的准备工作是在引入此代理执行优先级继承之前所需的补丁系列更改。Google 的 John Stultz 在那条补丁消息中评论道:
“我想(再次)重新发送代理执行的准备补丁 v12 – 一种通用形式的优先级继承方法。在这里,我只是提交早期/准备性更改以供审核,希望我们可以移动这些更直接的补丁,然后迭代地浏览代理执行系列中更有趣的补丁。
截至本周,这些 prep 更改已合并到 tip/tip.git 的 sched/core 分支中。
随着这些准备补丁现在在即将到来的 Linux 6.13 合并窗口之前合并到 TIP 代码中,这些补丁反过来应该在那时被上游,除非 Linus Torvalds 在最后一刻提出任何问题或批评……经过多年的讨论,希望用不了多久,Linux 内核中就会看到实际的代理执行支持成为主流。
有关 Linux 代理执行工作的更多背景信息,请参阅 Google 的 John Stultz 在上面嵌入的 LPC 2023 演示文稿中。
转自 Linux 6.13 Poised To Land Prep Patches Working Toward Proxy Execution – Phoronix