第一部分 · 1 / 6

什么是 RDMA

RDMA(Remote Direct Memory Access,远程直接内存访问)让一台机器的网卡直接读写 另一台机器的内存,绕过对端的 CPU 与操作系统内核。这是它与传统 TCP/IP 套接字最根本的区别, 也是它能做到微秒级时延、百 Gb/s 级吞吐的根源。

一句话定义

普通网络通信里,数据要在「用户态缓冲区 ↔ 内核缓冲区 ↔ 网卡」之间反复拷贝,每一跳都需要 CPU 介入、 系统调用和上下文切换。RDMA 把这条路径压扁成「应用缓冲区 → 网卡 → 网卡 → 对端应用缓冲区」, 由网卡硬件用 DMA 直接搬运。

对比 传统 socket:应用 → 内核协议栈 → 网卡 …… 网卡 → 内核协议栈 → 应用
RDMA:应用缓冲区 → 网卡 → 网卡 → 对端应用缓冲区(硬件直达,对端 CPU 可不参与)

三大支柱

内核旁路 (Kernel Bypass)
应用在用户态直接和网卡的队列交互,数据路径不经过内核协议栈,省去系统调用与上下文切换。
零拷贝 (Zero-copy)
网卡通过 DMA 直接读写已注册的用户态缓冲区,不再有内核缓冲区到用户缓冲区的多次复制。
CPU 卸载 (CPU Offload)
传输、重传、校验由网卡硬件完成;做 RDMA Read/Write 时,对端 CPU 甚至完全不感知。

为什么这么快

把时延拆开看,传统 socket 的开销主要来自这几处,而 RDMA 几乎逐项消除:

开销来源传统 socketRDMA
系统调用 / 上下文切换每次收发都有数据路径无(投递到用户态队列)
内存拷贝次数多次(用户↔内核↔网卡)零拷贝(DMA 直达)
协议栈处理内核 TCP/IP 栈逐层处理网卡硬件卸载
对端 CPU 参与必须单边操作时不需要

典型应用场景

  • HPC / 超算:MPI 通信库底层大量使用 RDMA。
  • 分布式存储:NVMe-oF、Ceph、分布式文件系统用它做低延迟数据面。
  • AI 训练:GPU 之间的梯度同步(如 NCCL over RoCE)依赖 RDMA 打满带宽。
  • 数据库 / KV:远程内存访问、分布式事务的低延迟通信。
承上启下 RDMA 的强大来自它独特的编程模型——不是「读写一个 socket fd」,而是操作一组协作的硬件对象。 下一节就来认识这套 Verbs 对象模型
gordma 教程