第一部分 · 1 / 6
什么是 RDMA
RDMA(Remote Direct Memory Access,远程直接内存访问)让一台机器的网卡直接读写 另一台机器的内存,绕过对端的 CPU 与操作系统内核。这是它与传统 TCP/IP 套接字最根本的区别, 也是它能做到微秒级时延、百 Gb/s 级吞吐的根源。
一句话定义
普通网络通信里,数据要在「用户态缓冲区 ↔ 内核缓冲区 ↔ 网卡」之间反复拷贝,每一跳都需要 CPU 介入、 系统调用和上下文切换。RDMA 把这条路径压扁成「应用缓冲区 → 网卡 → 网卡 → 对端应用缓冲区」, 由网卡硬件用 DMA 直接搬运。
对比
传统 socket:
RDMA:
应用 → 内核协议栈 → 网卡 …… 网卡 → 内核协议栈 → 应用RDMA:
应用缓冲区 → 网卡 → 网卡 → 对端应用缓冲区(硬件直达,对端 CPU 可不参与)
三大支柱
内核旁路 (Kernel Bypass)
应用在用户态直接和网卡的队列交互,数据路径不经过内核协议栈,省去系统调用与上下文切换。
零拷贝 (Zero-copy)
网卡通过 DMA 直接读写已注册的用户态缓冲区,不再有内核缓冲区到用户缓冲区的多次复制。
CPU 卸载 (CPU Offload)
传输、重传、校验由网卡硬件完成;做 RDMA Read/Write 时,对端 CPU 甚至完全不感知。
为什么这么快
把时延拆开看,传统 socket 的开销主要来自这几处,而 RDMA 几乎逐项消除:
| 开销来源 | 传统 socket | RDMA |
|---|---|---|
| 系统调用 / 上下文切换 | 每次收发都有 | 数据路径无(投递到用户态队列) |
| 内存拷贝次数 | 多次(用户↔内核↔网卡) | 零拷贝(DMA 直达) |
| 协议栈处理 | 内核 TCP/IP 栈逐层处理 | 网卡硬件卸载 |
| 对端 CPU 参与 | 必须 | 单边操作时不需要 |
典型应用场景
- HPC / 超算:MPI 通信库底层大量使用 RDMA。
- 分布式存储:NVMe-oF、Ceph、分布式文件系统用它做低延迟数据面。
- AI 训练:GPU 之间的梯度同步(如 NCCL over RoCE)依赖 RDMA 打满带宽。
- 数据库 / KV:远程内存访问、分布式事务的低延迟通信。
承上启下
RDMA 的强大来自它独特的编程模型——不是「读写一个 socket fd」,而是操作一组协作的硬件对象。
下一节就来认识这套 Verbs 对象模型。
gordma 教程