1. 概述DRM (Direct Rendering Manager) 子系统经历了从图形显示→图形渲染→异构计算/AI的三阶段演进。这种演进反映了GPU硬件能力的发展和应用场景的扩展。2. 三阶段演进时间线2.1 第一阶段图形显示时代 (2000-2010)核心目标解决多进程安全访问显卡硬件实现基本的图形显示关键技术KMS (Kernel Mode Setting): 内核态显示模式设置Framebuffer管理: 基础显存缓冲区管理CRTC/Encoder/Connector抽象: 显示硬件管道建模特征以显示输出为中心解决X Server的权限和稳定性问题主要处理2D显示任务// 早期 GEM 设计:简单的显存对象structdrm_gem_object{structkrefrefcount;structdrm_device*dev;structfile*filp;// 最初就这么简单!};2.2 第二阶段图形渲染时代 (2010-2020)核心目标支持复杂的3D渲染满足游戏和专业图形应用需求关键技术GEM (Graphics Execution Manager): 图形内存对象管理GPU调度器: 命令队列和任务调度Fence/Syncobj: 跨进程GPU同步机制DMA-BUF: 跨驱动/子系统的缓冲区共享特征以渲染性能为中心支持OpenGL/Vulkan等现代图形API引入复杂的内存管理和调度机制2.3 第三阶段异构计算与AI时代 (2020-至今)核心目标将GPU作为通用计算加速器特别是AI/ML工作负载关键技术与证据1. **GPUVM **代码文件:drm_gpuvm.c(Copyright 2022 Red Hat)用途: 管理GPU虚拟地址空间支持现代计算API关键特性:VM BIND模式支持Vulkan Sparse Memory Bindings细粒度的虚拟内存管理Split/Merge算法优化内存映射操作2.HMM集成 (Heterogeneous Memory Management)典型实现: AMD SVM (Shared Virtual Memory)功能: CPU和GPU共享统一虚拟地址空间优势: 简化异构编程模型零拷贝数据共享3.DRM GPU SVM 框架代码文件:drm_gpusvm.c(Copyright 2024 Intel, ~1633 lines)核心目标: 为 DRM 驱动提供统一的共享虚拟内存抽象层设计理念CPU 和 GPU 共享统一虚拟地址空间按需页面迁移基于 MMU Notifier HMM 机制跟踪和管理内存使用重试循环处理竞态避免复杂锁嵌套核心组件Notifier: 跟踪内存区间变化基于区间树Range: 表示 GPU 映射的内存范围动态分配Operations: 驱动回调接口分配、释放、失效解决的问题在此之前每个驱动独立实现 SVMAMD ~6000 lines、Intel、NVIDIA 各自实现导致代码重复、行为不一致、难以维护。框架价值✅ 统一抽象代码复用✅ 标准化设计原则migrate_to_ram 路径、锁机制✅ 框架级性能优化惠及所有驱动适用场景OpenCL/SYCL USM、CUDA/HIP Unified Memory、Vulkan 系统分配器、AI/ML 零拷贝数据管道4.面向AI的优化Prefetch操作: 数据预取优化AI推理性能内存驱逐管理: 处理大模型训练中的内存超额订阅多GPU共享优化: 通过dma-resv实现高效的多卡协同5.Vulkan计算支持GPUVM代码中明确提到“required by the Vulkan API to implement Vulkan ‘Sparse Memory Bindings’”这表明DRM已深度适配现代计算API需求。3. 功能对比表维度显示时代渲染时代计算/AI时代主要应用桌面显示3D游戏/CADAI训练推理/科学计算内存模型简单framebufferGEM对象GPUVM HMM GPU SVM统一地址空间地址空间物理地址GPU虚拟地址CPU-GPU统一虚拟地址内存管理静态分配显式BO管理按需页面迁移同步机制简单fencedma-fence/syncobjMMU notifier fence调度复杂度低中等高多队列/异步执行API支持X11/DRIOpenGL/Vulkan图形Vulkan计算/CUDA/ROCm/SYCL内存容量需求MB级GB级数十GB大模型典型代码KMS核心GEM/调度器GPUVM/HMM/GPU SVM/Prefetch4. 演进驱动力1. 硬件能力提升GPU从固定管线 → 可编程着色器 → 通用计算核心显存容量从MB → GB → 数十GB互连技术从AGP → PCIe → NVLink/Infinity Fabric2. 应用需求变化2000年代办公和基础图形2010年代高品质游戏和专业渲染2020年代深度学习、大语言模型、自动驾驶3. API标准演进Vulkan引入计算着色器和稀疏资源ROCm/CUDA推动GPU通用计算生态SYCL/OpenCL等异构编程标准5. 结论DRM子系统的演进清晰地体现了三个阶段图形显示 (Framebuffer) ↓ 图形渲染 (GEM, Fence/Syncobj) ↓ 异构计算/AI (GPUVM, HMM, GPU SVM)三个阶段的核心特征显示时代的基础设施建设KMS/Framebuffer解决多进程访问冲突建立显示硬件抽象渲染时代的性能优化GEM/调度器/同步机制复杂的内存对象管理高效的任务调度和同步计算/AI时代的范式转变GPUVM/HMM/GPU SVM/统一内存CPU-GPU统一虚拟地址空间按需页面迁移和自动内存管理标准化的SVM框架减少驱动重复工作关键技术演进标志2004: DRM合并进Linux内核2007: Intel开发GEM框架2009: KMS子系统引入2016: Vulkan 1.0发布推动计算图形融合2018: AMD开始HMM集成工作2022: GPUVM框架合并标志全面转向计算时代2024: DRM GPU SVM框架引入统一SVM抽象层这种演进不是简单的功能堆叠而是架构层面的适应性重构。特别是GPUVM框架明确提到Vulkan Sparse Resources和VM BINDGPU SVM框架提供标准化的共享虚拟内存实现避免每个驱动重复开发设计原则统一migrate_to_ram路径、notifier锁机制、重试循环处理竞态这充分证明DRM已从“图形显示管理器”转型为“通用GPU资源管理器”这正是AI时代的必然要求。从各驱动的实现规模可以看出演进的必要性AMD SVM实现kfd_svm.camdgpu_hmm.cIntel实现i915_gem_userptr.c 正在迁移到 GPU SVM未来驱动直接使用drm_gpusvm.c框架大幅减少开发工作Linux内核在积极适配GPU异构计算的新需求这种演进仍在持续进行中。​技术交流和投稿欢迎加入社区GPUers。