RDMA 技术本质:当网络传输变成了内存访问

📅 2026/8/22 2:23:08
RDMA 技术本质:当网络传输变成了内存访问
引言在传统的网络编程中发送数据意味着让 CPU 把数据从用户态搬到内核态再经过复杂的协议栈处理最后交给网卡。这个过程消耗了大量 CPU 资源却只是为了搬运数据而非计算数据。RDMARemote Direct Memory Access远程直接内存访问的出现彻底颠覆了这一模式。本文将深入探讨 RDMA 技术的本质——它如何将网络 I/O转化为内存 I/O以及这种转变背后数据流动路径、处理路径和处理逻辑三个维度的根本性变革。一、数据流动路径的变革从CPU 中转到总线直通传统网卡的发送路径在传统网卡中一次数据发送需要经历多次数据搬运用户态缓冲区 → (CPU 拷贝 1) → 内核态 Socket 缓冲区 → (CPU 协议栈封装) → skb → (网卡 DMA) → 网线核心痛点数据从用户态到内核态必须经过一次 CPU 执行的内存拷贝。当传输大块数据时CPU 的大量时间被消耗在数据搬运上而非实际的业务计算。RDMA 的发送路径RDMA 通过内存注册Memory RegionMR机制将用户态内存的物理地址映射表下发到网卡硬件用户态缓冲区 (MR) → (网卡 DMA 直接读取) → 网线关键变化数据的起点是用户态内存终点是网线。中间没有内核内存作为中转站。网卡通过硬件级的地址翻译表直接通过 PCIe 总线从物理内存中取数据。接收端的对称简化传统网卡网卡 → 内核缓冲区 → CPU 拷贝 → 用户态缓冲区伴随中断和上下文切换RDMA网卡 → 直接 DMA 写入用户态缓冲区远端 CPU 完全不知情二、数据处理路径的变革从软件栈到硬件卸载传统网卡依赖庞大的软件协议栈普通网卡只负责最底层的比特收发所有智能处理都依赖 CPU 执行 Linux 内核协议栈应用 → 系统调用 → VFS/Socket → TCP/IP 协议栈校验、分段、重传、拥塞控制→ 邻居子系统 → 驱动层这条路径包含数万行代码每发送一个数据包CPU 都要执行这些指令。RDMA 将传输层下沉到硬件RDMA 网卡HCA本质上是一个具备极强处理能力的协处理器它在硬件中实现了完整的传输层逻辑消息封装硬件自动添加 IB 传输层头部IBTH包含 QPN队列对编号、PSN包序列号、操作码等字段可靠传输硬件自动处理 ACK/NAK 应答机制在微秒级完成丢包重传乱序重组硬件根据 PSN 自动排序保证按序交付路由分拣硬件根据 QPN 将到达的数据包直接分发到正确的队列对本质区别协议栈被硬件化了。TCP 的重传、排序、拥塞控制等逻辑由网卡芯片完成不消耗主机 CPU 的任何时钟周期。三、处理逻辑的变革从面向字节流到面向消息与内存传统网络无结构的字节流普通网卡看到的数据只是一串 0 和 1。应用写入 4KB 数据内核可能拆成 3 个包发送应用写入 100 字节两次内核可能合并成 1 个包。接收端必须自己处理粘包和拆包问题。RDMA带语义的消息传输RDMA 网卡理解数据的结构甚至理解远端的虚拟内存地址Send/Recv 模式保留消息边界。发送的 4KB 消息对端接收到的就是一个完整的 4KB 消息。RDMA Read/Write 模式精髓所在这是 RDMA 最具革命性的能力。本地 CPU 可以直接操作远端内存本地网卡发出指令“将这块数据写入远端内存的0x7ff...地址”远端网卡收到指令后直接通过 PCIe 总线对远端物理内存执行 DMA 写入远端 CPU 完全不参与甚至可能在满负荷计算中四、IB 传输层硬件卸载的核心分层校验策略IB 传输层采用分层校验追求极致速度ICRC/VCRC仅校验传输层头部确保 QPN、PSN、操作码等字段未被篡改数据校验交由底层物理链路SerDes 的 FCS和上层应用负责设计哲学信任底层物理链路避免对每个字节做重度 CRC 计算带来的延迟硬件可靠传输机制发送端为每个数据包分配严格递增的 PSN保留发送内容等待 ACK收到 NAK 后硬件在微秒级自动重传接收端根据 PSN 检查顺序发现丢包立即发送 NAK暂存乱序到达的数据包等待补齐后一次性写入用户内存应用程序永远看到发送端的原始顺序五、Soft-RoCE功能模拟而非性能方案Soft-RoCERXE是在普通以太网卡上用内核线程模拟 RDMA 的行为。理解它为何性能不足有助于更深入地理解 RDMA 的本质。数据流动路径的倒退用户态 MR → (CPU memcpy 拷贝 1) → 内核 RXE 缓冲区 → 协议栈封装 → 普通网卡队列 → 网线即使在 UDP 之上实现了类似 KCP 的高效可靠传输算法Soft-RoCE 依然无法避免CPU 搬运数据这一物理缺陷。KCP 优化的是大脑重传算法但硬件 RDMA 省掉的是体力活DMA vs CPU 拷贝。性能差距的本质维度硬件 RDMASoft-RoCE数据搬运网卡 DMA 直接完成CPU 逐字节 memcpy协议处理硬件芯片并行处理内核线程串行执行上下文切换无Doorbell 直接通知硬件系统调用陷入内核延迟亚微秒级 (~1-2 μs)几十微秒级 (~10-50 μs)六、RDMA 的本质总结如果要用一张图来描绘 RDMA 的本质传统网卡像一个前台代收代发。寄东西必须先把包裹搬到前台内核前台帮你打包、填单子然后交给快递员网卡。收快递时前台打电话中断通知你来取。RDMA 网卡像一个拥有你家钥匙的无人搬运机器人。你告诉机器人Doorbell“卧室衣柜里的那包衣服MR 地址送到对面老王家的客厅远端 MR 地址”。机器人有你家地址的物理地图MTT自己开门取货本地 DMA用老王给的钥匙开门R_Key把东西放进客厅远端 DMA。全程不需要老王从沙发上起来远端 CPU 旁路。最终凝练RDMA 的本质是将远端机器的内存地址空间通过带有硬件传输层卸载能力的网卡映射并延伸到了本地总线上从而把昂贵的网络 I/O转化为了廉价的内存 I/O。它通过三个维度的根本性变革实现这一目标数据流动路径消除了服务器内部的 CPU 数据搬运数据处理路径将传输层协议栈卸载到专用硬件处理逻辑从无结构的字节流升级为带语义的内存访问这种转变释放了宝贵的 CPU 资源让 CPU 真正用于计算而非搬运为分布式存储、AI 训练、高性能计算等场景提供了接近硬件极限的通信能力。