uGDS 原理解析:在用户态打通 NVMe SSD 与 GPU 显存

大模型推理正在把存储重新推到系统性能的核心位置。模型权重、KV Cache、Embedding 和训练检查点都可能在 SSD、主存与 GPU 显存之间频繁搬运。传统路径通常要经过文件系统、内核块层、页缓存或用户态中转缓冲区,不但增加 CPU 开销,也让小块 I/O 延迟变得难以控制。 uGDS 是 ScaleX-IO 开源的一套用户态 GPU Direct Storage 开发库。它的核心思路很直接: 让 CPU 在用户态构造 NVMe 命令并管理提交队列与完成队列,由 SSD 通过 PCIe P2P DMA 直接读写 GPU 显存,从数据路径中绕开内核 NVMe 驱动和文件系统。 本文结合 uGDS 当前源码,解释它为什么快、一次 I/O 如何执行、内核模块与用户态库如何分工,以及使用这类“绕过内核”的存储栈时必须承担哪些工程责任。 一、uGDS 想解决什么问题 先看一条常见的数据读取路径: NVMe SSD │ ▼ 内核 NVMe 驱动 → 块层 → 文件系统 │ ▼ 主机内存缓冲区 │ ▼ GPU 显存 即使系统支持 Direct I/O,应用仍然通常要进入内核,由内核驱动准备 NVMe 命令、完成 DMA 映射并处理中断或轮询。若数据还要经过主机内存,再复制到 GPU,路径会更长。 ...

2026年8月20日 · 5 分钟 · Hellokitty