LWN:让GPU的工作也依赖进程优先级!

Posted 宋宝华

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LWN:让GPU的工作也依赖进程优先级!相关的知识,希望对你有一定的参考价值。

关注了就能看到更多这么棒的文章哦~

Synchronized GPU priority scheduling

By Jonathan Corbet
October 22, 2021
DeepL assisted translation
https://lwn.net/Articles/873334/

在 Unix 之类的系统很早期的时候,就已经实现了进程优先级的概念,优先级高的进程可以得到更多的 CPU 时间来完成它们的工作。如今这里的实现方式已经发生了很大变化,开始有了一些替代方案(比如 deadline scheduling)可用在一些特殊场景,但其核心的优先级概念(或者反序的 niceness)本质上是没有变化的。然而,如今的世界里越来越多的计算工作是在 CPU 之外完成的,那我们应该如何改进这一点呢?Tvrtko Ursulin 已经准备了一组 patch set,展示了如何将 nice 机制也扩展到 GPU 这边来用起来。

正如 Ursulin 所描述的情况,"目前的处理方式似乎越来越多地由 pipeline 来构成,计算工作是在多个硬件设备上来完成的"。内核直接控制了那些需要依靠 CPU 计算来完成的工作的 CPU 时间的分配。但是,越来越多的计算工作被转移(offload)到 GPU、AI 加速器或者用于加密货币挖掘的外设上。这些处理器虽然能力很强,但也可能会因为给它们的工作过多而超出了自己的能力。如果它们运行 workload 的方式与内核对进程优先级的想法不一致,那么就会出现用户意料之外的结果。

Ursulin 举了一个例子,Chrome 浏览器会把目前不在前台(foreground)的 tab 的优先级。但是,如果其中一个 background tab 在 GPU 中做了大量的渲染(render)工作,它可能会拖慢当前 foreground tab 的响应速度,尽管 background 工作应该还是要以低优先级来运行。事实证明,至少其中一些 GPU (比如某些英特尔 i915 版本),可以在内部根据优先级进行调度。但这需要提前告知 GPU 相关的优先级,而目前还没有办法将这些在用户空间做出的决定传达给 GPU。

Ursulin 的方案是在 i915 驱动中添加 "context nice" 的概念。这个值与提交这个 job 的进程的优先级相关联,会在有相应能力的 GPU 中使用,来影响该工作的调度情况。这种方法是有效果的,但如果 CPU 上的进程的优先级发生变化了就不再准确了。如果浏览器切换到了一个新的 tab 并想提高其优先级,那么继续在 GPU 侧以较低的优先级来运行相关的工作,肯定会让用户不满意的。为了避免这个问题,Ursulin 的 patch set 为调度器添加了一个新的 notifier 机制。这样一来,每当一个进程的优先级发生变化时,相关的内核子系统就可以得到通知。然后,i915 驱动会跟这个 notifier 关联起来,从而可以修改相应的优先级信息,这样就能确保 GPU 上运行 job 的那些进程的 CPU 优先级总是有效的。

notifier 目前看来是这组 patch set 中最有争议的部分。Ursulin 指出,每当一个进程的优先级发生变化时,从 scheduler 的代码深处来调用设备驱动程序,可能会引入 security 问题。John Wangghui 建议可以增加一个单独的 "I/O nice" 值来控制 GPU 上的优先级,这个值跟现存的用于 block I/O 的 "ionice" 并不相同,但其功能类似。相反,Barry Song 抱怨说,使用简单的 nice 值是不够的,因为它没有考虑 cgroup 或者之前累计运行的时间对占有 CPU 时间比例的影响。这可能导致 GPU 上的调度结果与 CPU 上的情况不一致。

Ursulin 基本上同意 Song 的批评,但也声称,即使只是使用进程的 nice 值,也比在 GPU 上完全不控制执行优先权要好。这个初版的实现可以在今后有必要的时候进行扩展来添加 cgroup 等支持。同时,他得出结论,也许 scheduler notifier 根本就是没有必要的。直接使用提交 job 给 GPU 时当前的进程的优先级也能得到类似的效果,主要的区别是,优先级的改变将不会影响那些已经交给 GPU 的 job。这个 patch set 的下一个版本中估计会放弃 notifier。

Ursulin 做了一些简单的基准测试,其中一个图形应用程序与一个 "GPU hog" 进程一起运行。如果给 GPU hog 一个低优先级,那么图形应用程序比起没有优先级控制时能生成更高的帧率。他总结说:"所以看起来这个功能确实可以改善用户体验"。因此,这项工作的未来版本应该最终会进入 mainline 的。不确定的是,在进入 mainline 之前,它需要完成哪些改动。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

以上是关于LWN:让GPU的工作也依赖进程优先级!的主要内容,如果未能解决你的问题,请参考以下文章

001-多线程基础-进程线程线程状态优先级用户线程和守护线程

工作小结

如何更改正在运行的 java 进程的优先级?

Spring Boot 配置的优先级

RH134-5 进程的优先级

如何在linux下查看gpu信息