2. GPU与RDMA协同工作原理
要理解 GPUDirect RDMA 为什么能显著降低延迟、提升带宽,必须先建立一张“数据路径地图”:数据从哪块内存出发,经过哪些总线与桥片,由谁发起搬运,CPU 是否参与,网卡如何直接读写显存。本节围绕 GPU 内存架构、PCIe/NVLink 拓扑、RDMA 语义以及零拷贝旁路 CPU 的数据路径四个层面,建立后续工程实践的底层模型。
一、GPU 内存架构:数据到底放在哪里
现代 NVIDIA GPU 的内存并不是一块单一区域,而是由多个层次构成。最核心的是设备显存(Device Memory,HBM/GDDR),它容量大、带宽高,是张量计算和通信缓冲区的主要落点。其次是片上存储,包括寄存器、共享内存(Shared Memory/L1)和 L2 缓存,它们延迟极低但容量有限。第三类是主机内存(Host Memory),通过 PCIe 或 NVLink-C2C 与 GPU 相连,可分为可分页内存(Pageable)和锁页内存(Pinned)。
对 RDMA 而言,关键区别在于“谁可以稳定地按物理地址访问这块内存”。可分页内存会被操作系统换出,物理地址不固定,网卡无法安全地直接 DMA;锁页内存则被固定在物理页上,可以注册成内存区域(Memory Region, MR),供网卡直接读写。因此,GPUDirect RDMA 的显存缓冲区通常需要通过 cudaHostRegister 或 cuMemCreate/cuMemMap 等方式导出为可被 NIC 访问的句柄。
另一个重要概念是统一虚拟地址(UVA)与统一内存(UM)。在 UVA 下,主机内存与设备显存共享同一虚拟地址空间,指针可以跨设备传递;但“可寻址”不等于“可被网卡直接 DMA”。真正决定能否零拷贝的,是这块内存是否被导出为 NIC 可访问的 MR,以及它是否位于 NIC 的 PCIe 可达域内。
二、PCIe/NVLink 拓扑:数据走哪条路
GPU 与网卡之间的物理路径决定了带宽上限和延迟下限。典型拓扑有三类:
- 同 PCIe Switch 下:GPU 与 NIC 挂在同一 PCIe Switch 的不同下行端口,二者之间的 DMA 只经过 Switch,路径最短,P2P 通常可用。
- 跨 CPU Root Complex:GPU 与 NIC 分属不同 CPU 的 PCIe 根复合体,数据需要经过 CPU 间的 UPI/xGMI 链路,延迟和带宽都会受影响,且 P2P 可能被 ACS 等机制阻断。
- NVLink 互联:多 GPU 之间通过 NVLink/NVSwitch 互联,GPU 间通信可绕过 PCIe;当 NIC 支持 GPUDirect RDMA over NVLink 或通过 NVLink-C2C 连接时,路径进一步优化。
判断路径是否可用,常用工具是 nvidia-smi topo -m,它会输出 GPU 与 NIC 之间的连接关系(如 PIX、PXB、PHB、SYS、NODE)。其中 PIX 表示同一 PCIe Switch 下,通常 P2P 最优;SYS 表示跨 NUMA 节点,往往需要经过 CPU 互联。工程上应优先把通信密集的 GPU 与 NIC 放在同一 Switch 或同一 NUMA 域内。
三、RDMA 语义:网卡如何“直接”读写显存
RDMA 的核心语义是:网卡在远端内存上直接执行读或写,而不打断远端 CPU。它依赖三个要素:
- 内存注册(MR):把一段内存(主机锁页内存或 GPU 显存)注册到网卡,得到
lkey/rkey和虚拟地址到物理地址的映射。注册后,网卡才能对该区域发起 DMA。 - 队列对(QP):每个 QP 包含发送队列和接收队列,应用把工作请求(WR)投递到 QP,网卡异步执行。
- 完成通知(CQ):操作完成后,网卡在完成队列中写入 CQE,应用轮询或等待事件。
RDMA 提供两种典型操作:Send/Recv(双边,接收端需预先投递 Recv WR)和 Read/Write(单边,远端无需感知,只需提供 rkey 和地址)。GPUDirect RDMA 的价值在于:当 MR 注册的是 GPU 显存时,网卡可以直接对显存发起 DMA,数据不再需要先拷到主机内存再发送。
四、零拷贝与旁路 CPU 的数据路径
传统路径是:GPU 显存 → 主机锁页内存(cudaMemcpy)→ 网卡发送;接收侧则反向拷贝。这条路径至少经历两次 PCIe 往返和两次内存拷贝,CPU 还要参与驱动调用与中断处理。
GPUDirect RDMA 路径则是:应用在 GPU 显存上注册 MR,把 WR 投递到 QP,网卡通过 PCIe 直接读写显存,CPU 只负责建链和控制面。数据面完全旁路 CPU 与主机内存。其效果是:延迟降低、带宽提升、CPU 占用下降,尤其适合 AllReduce、All-to-All 等集合通信。
nvidia-smi topo -m 中 GPU 与 NIC 是否为 PIX/PXB;ibv_devinfo 是否显示该设备支持 GPU Direct;以及实际运行时 nvidia-smi dmon 中 GPU 的 PCIe 读写吞吐是否与网络吞吐同步上升,而主机内存拷贝计数没有明显增长。
五、工程视角下的关键约束
第一,P2P 可达性受 PCIe ACS、IOMMU 和 Switch 配置影响,跨 Root Complex 时可能被禁用,需要检查 BIOS 与内核参数。第二,显存注册有开销,频繁注册/注销 MR 会带来延迟,工程上应复用 MR 或使用内存池。第三,一致性:网卡 DMA 写入显存后,GPU 侧需要通过同步机制(如 cudaStreamSynchronize 或事件)确认数据可见,不能假设写入立即对 kernel 可见。第四,NUMA 亲和:控制面线程、QP 和 CQ 应尽量绑定到与 NIC 同 NUMA 节点的 CPU 核,避免跨节点访问。
把这些层次串起来,就得到后续所有工程实践的底层模型:内存是否可注册 → 路径是否 P2P 可达 → RDMA 语义是否正确使用 → 数据面是否真正旁路 CPU。任何一环不满足,GPUDirect RDMA 的收益都会打折扣,甚至退化为普通拷贝路径。