NVIDIA AI Infra 内核源码深度解析系列
NVIDIA AI Infra 内核源码深度解析系列
本系列从 Linux 内核源码出发,逐层剖析 NVIDIA GPU 在 AI 训练/推理中的内核侧基础设施。从 CPU↔GPU 内存镜像到 GPU↔GPU RDMA 零拷贝数据传输,覆盖 CUDA Unified Memory、GPUDirect RDMA 的完整内核路径。
阅读指南
这是一个从底层到上层、从通用到专用的递进系列。建议按顺序阅读:
| 序号 | 文章 | 核心文件 | 难度 | 学完能理解 |
|---|---|---|---|---|
| 1 | CPU↔GPU 内存镜像基础:HMM 深度解析 | mm/hmm.c |
⭐⭐ | cudaMallocManaged 的内核侧原理 |
| 2 | GPU 共享虚拟内存抽象层:DRM GPUSVM | drivers/gpu/drm/drm_gpusvm.c |
⭐⭐⭐ | GPU SVM 框架的 notifier/range/pages 体系 |
| 3 | NVIDIA HMM 调用者:nouveau_svm.c | drivers/gpu/drm/nouveau/nouveau_svm.c |
⭐⭐⭐ | NVIDIA 如何用 HMM 实现页表镜像 |
| 4 | NVIDIA 设备显存管理:nouveau_dmem.c | drivers/gpu/drm/nouveau/nouveau_dmem.c |
⭐⭐⭐⭐ | VRAM 作为 DEVICE_PRIVATE 的内存迁移 |
| 5 | GPU 多内存类型管理:TTM 框架 | drivers/gpu/drm/ttm/ttm_bo.c |
⭐⭐⭐ | VRAM/GTT/SYSTEM 内存的 placement 和迁移 |
| 6 | GPU 显存 Buddy 分配器 | drivers/gpu/buddy.c |
⭐⭐ | 增广红黑树管理的显存块分配器 |
| 7 | GPU 命令提交调度:DRM Scheduler | drivers/gpu/drm/scheduler/ |
⭐⭐⭐ | GPU 命令队列调度、流控和超时处理 |
| 8 | GPU→RDMA 零拷贝桥梁:umem_dmabuf.c | drivers/infiniband/core/umem_dmabuf.c |
⭐⭐⭐ | GPU dmabuf 如何注册为 RDMA MR |
| 9 | RDMA 硬件侧 MR 注册:mlx5/mr.c | drivers/infiniband/hw/mlx5/mr.c |
⭐⭐⭐⭐ | MKey 创建、IOMMU 编程、GPUDirect RDMA 硬件路径 |
三条主线
整个系列围绕三条主线展开,交叉阅读效果更好:
主线 A:统一内存(文 1→2→3→4→5)
1 | |
主线 B:显存管理(文 5→6)
1 | |
主线 C:GPU↔RDMA(文 8→9)
1 | |
前置知识
- 熟悉 Linux 内核基本概念(
struct page、虚拟内存、页表) - 了解 GPU 编程基础(CUDA/HIP、统一内存)
- 了解 RDMA 基本概念(QP、MR、CQ、WQE)
- 内核源码在
/home/wujing/code/linux(v7.1.0-rc4,x86,GCC 15.2.0)
相关文档
Documentation/mm/hmm.rst— HMM 官方文档Documentation/gpu/drm-mm.rst— DRM 内存管理文档Documentation/driver-api/dma-buf.rst— DMA-BUF 文档gpu_buddy_analysis.md— GPU Buddy vs 内核 Buddy vs SLUB 深度对比kernel_ai_infra.md— Linux 内核 AI Infra 全景
NVIDIA AI Infra 内核源码深度解析系列
https://realwujing.github.io/linux/drivers/gpu/nvidia-svm/README/