在现代计算机系统中,图形处理单元(GPU)承担着越来越复杂的任务,尤其是在多任务并发渲染的桌面环境和游戏场景下,如何高效且公平地分配GPU资源成为内核开发者关注的焦点。Linux内核中的Direct Rendering Manager(DRM)GPU调度器作为协调多个渲染上下文向硬件提交作业的关键组件,其调度算法直接影响系统的响应速度和用户体验。本文将深入分析DRM GPU调度器中FIFO和轮询算法的不足,并详细介绍一项受Linux内核完全公平调度器(CFS)启发的调度算法的设计思想、实现流程及其带来的性能改进。 传统DRM GPU调度器采用的FIFO(先进先出)算法以作业提交时间为排序标准,确保先到先服务的简单调度原则。然而,这种策略在多客户端环境下显现出明显的缺陷。因各客户端提交作业的速率和数量存在差异,FIFO容易导致某些上下文长时间占用GPU资源,而其他低优先级或提交缓慢的任务因等待而出现延迟,甚至出现帧率下降和界面卡顿的现象。
此外,FIFO算法本质上将GPU调度与CPU进程调度时间绑定,造成两者间不必要的关联,同时缺乏对任务优先级的有效处理,更难以应对复杂的优先级需求。 在FIFO之外,轮询(Round-Robin)算法曾作为备选方案引入。轮询理论上能均分GPU时间片,实现所谓的“公平”调度。然而此“公平”理想建立在能支持任务抢占和固定时间片的硬件基础上,而大多数GPU硬件不具备抢占能力,且用户空间提交的作业量不均匀,进一步导致GPU资源分配依旧不均。最终结果是轮询算法无法在多任务高负载环境保证交互性能,且依旧存在低优先级任务被饿死的风险。轮询算法虽然被放弃,但其教训促使调度器开发者思考更合理的公平性模型。
针对以上缺陷,调度器开发者借鉴了Linux内核CPU调度中成熟的完全公平调度器(CFS)设计理念,提出基于虚拟GPU时间的公平调度策略。该算法摒弃以作业提交时间为准的单一排序规则,而是将每个调度实体(对应用户空间的渲染上下文)已耗费的虚拟GPU时间作为调度优先级的核心标准。虚拟GPU时间通过实际GPU时间按优先级缩放得出,高优先级任务的时间被适当缩小,确保其能更频繁获得GPU运行机会。调度实体按照虚拟GPU时间的多少动态排序,优先调度虚拟运行时间最短的任务,进而实现近似于理想公平的GPU时间分配。 实现过程中,调度器利用红黑树结构替换原本以作业提交时间为键的排序方式,动态更新调度实体的位置。当调度实体暂无任务时,被移出树并记录其虚拟时间差,待新任务提交时,该差值用于确保实体重新插入后不会丢失此前的排序优势。
因DRM GPU调度器此前未跟踪各实体的真实GPU运行时间,项目中新增了GPU时间追踪机制,使得公平调度算法得以准确计算和维护实体的虚拟运行时间。 该公平调度算法不仅提高了GPU资源分配的合理性,也有效解决了优先级饿死问题。传统调度器采用多个优先级队列,严格按照优先级顺序调度,导致低优先级任务频繁被高优先级任务阻塞。新的策略将所有调度实体合并到单一运行队列中,通过虚拟GPU时间缩放系数体现优先级差异,避免了因优先级队列划分而引起的任务饥饿,使低优先级任务能获得持续但有限的GPU运行时间,确保系统整体响应均衡。 公平算法的引入还带来了代码库的整体简化。剥离多个优先级队列设计后,调度核心代码更为紧凑且易于维护。
更进一步,研究人员计划逐步淘汰旧有的FIFO和轮询算法,统一调度逻辑,以减少代码重复与潜在错误,从而提升内核GPU调度模块的稳定性与可扩展性。迄今为止,实验和测试均未发现该算法在实际应用中带来性能退步,反而展现出显著提升。 在实际应用测试中,研究者选用多客户端场景验证新算法的性能表现。其中包含一款复杂的3D图形基准测试Unigine Heaven,以及两个以严格用户定义优先级运行的Vulkan延迟多重采样演示程序。测试平台为配备AMD集成GPU的Valve Steam Deck OLED。实验结果清晰显示,在现有FIFO调度下,普通优先级客户端间的GPU时间分配不均,低优先级客户端几乎无GPU执行时间。
改用公平调度算法后,普通优先级客户端的GPU使用率趋于一致,低优先级客户端也获得了稳定的小量GPU时间片,体现了算法对多任务环境友好且兼顾优先级差异的特性。 为了排除实际测试环境的偶然性,项目团队还设计并实现了一系列基于内核单元测试框架的模拟工作负载测试。这些测试通过模拟不同优先级、提交模式及作业间隔,验证调度算法在极端负载下的稳定性和公平性。测试结果进一步证实,在多任务提交异步作业时,传统FIFO算法导致低优先级任务长期阻塞,而公平调度策略则保持了其良好的执行进度和响应能力。在负载均衡测试中,公平调度使得GPU时间分配曲线更趋平滑,反映出时间分配的均衡性大幅提升。 此外,人机交互体验也是评价GPU调度改进的重要维度。
模拟较重负载客户端与轻量级交互客户端同时运行的环境下,公平调度算法有效提升了交互客户端的帧率表现。不论重负载任务占用GPU的比例如何,交互客户均能获得更满意的响应速度和流畅度,避免了传统FIFO算法因资源垄断导致的卡顿体验。这一事实充分体现新调度算法对提升用户体验的巨大潜力,特别是在高负载多任务系统中保障界面流畅性的核心价值。 展望未来,随着GPU硬件能力的不断提升,诸如抢占支持等机制或将得以实现,为进一步提升调度算法带来新的可能性。目前公平调度算法虽未支持任务抢占,但其虚拟时间模型为后续引入诸如EEVDF(Earliest Eligible Virtual Deadline First)等现代调度算法奠定了基础。EEVDF算法在兼顾公平性和低延迟方面表现优异,将有望带来更加完善的GPU调度框架。
此外,公平调度在内核调度组(cgroup)控制器集成方面也展现出极大优势,实现基于虚拟GPU时间与优先级的细粒度资源管理,为容器化和虚拟化环境中的GPU共享提供可靠保障。 总体而言,Fair(er) DRM GPU调度器不仅在技术实现上突破了传统的调度局限,改进了公平性和优先级管理,还以简化的代码结构提升了维护效率,并在真实应用场景中展现了显著的性能优势。Linux内核的这一创新成果将推动开源图形驱动生态更趋成熟,为广大开发者和使用者提供更流畅、稳定的图形计算体验。未来随着算法的持续完善和新硬件特性的支持,GPU调度的公平性与高效性将不断攀升,助力Linux图形技术更好地服务多样化的应用需求。