RDMA基础概念:RDMA定义、与传统网络的区别、InfiniBand与RoCEv2概述

核心原理:RDMA的定义与本质

RDMA(Remote Direct Memory Access,远程直接内存访问)是一种允许网卡(RNIC,RDMA Network Interface Card)直接读写远端主机内存的技术,而无需经过远端CPU、操作系统内核协议栈以及中间软件层的参与。其本质是将传统网络通信中“数据拷贝—内核处理—系统调用—上下文切换”的路径,替换为“硬件寻址—内存直接访问—零拷贝”的旁路路径。

RDMA的核心机制建立在三个关键能力之上:

  • 内核旁路(Kernel Bypass):应用程序通过用户态驱动直接与网卡交互,绕过操作系统内核,避免系统调用和上下文切换的开销。
  • 零拷贝(Zero-Copy):数据在网卡与用户缓冲区之间直接传输,无需在用户空间、内核空间、套接字缓冲区之间多次拷贝。
  • CPU卸载(CPU Offload):数据的封装、解封装、可靠传输、流控、拥塞控制等由网卡硬件完成,释放CPU资源用于计算任务。

RDMA的通信操作以队列对(Queue Pair, QP)为核心。每个QP由发送队列(Send Queue, SQ)和接收队列(Receive Queue, RQ)组成,应用程序通过提交工作请求(Work Request, WR)到队列中,网卡硬件异步执行这些请求,并通过完成队列(Completion Queue, CQ)通知操作结果。这种异步模型使得通信过程无需CPU持续介入。

RDMA通信核心路径(与传统TCP/IP路径对比)

传统路径:应用 → 系统调用 → 内核TCP/IP协议栈 → 数据拷贝 → 网卡 → 远端内核 → 远端应用

RDMA路径:应用缓冲区 → 网卡硬件(直接内存访问) → 远端网卡 → 远端应用缓冲区

传统 TCP/IP 路径 应用进程 Socket API 内核 TCP/IP 协议栈 系统调用 · 上下文切换 · 数据拷贝 传统网卡 (NIC) 中断驱动 · 逐包处理 RDMA 路径 应用进程 Verbs API (用户态) 用户态驱动 内核旁路 · 零拷贝 RDMA 网卡 (RNIC) 硬件DMA · 队列对 · 可靠传输 关键差异 延迟:µs → ns CPU占用:高 → 低 吞吐:受限 → 线速 RDMA 远程内存直接访问示意 本地主机 用户缓冲区 远端主机 用户缓冲区 硬件DMA直接读写 无需远端CPU参与

与传统网络的区别:为什么RDMA更快

传统以太网通信(TCP/IP)与RDMA在架构上存在本质差异。TCP/IP协议栈设计于上世纪70年代,其核心假设是“网络不可靠、主机CPU资源充裕”,因此每一层都需要软件参与处理。而RDMA的设计目标恰恰相反:假设网络硬件足够智能,CPU应专注于计算而非网络管理。

对比维度 传统以太网 (TCP/IP) RDMA
数据路径 应用 → 内核 → 协议栈 → 网卡 → 远端内核 → 远端应用 应用缓冲区 ↔ 网卡硬件 ↔ 远端缓冲区
CPU参与度 每个数据包均需CPU处理中断、拷贝、协议解析 CPU仅在提交请求和接收完成通知时介入
数据拷贝次数 至少2~4次(用户↔内核↔网卡) 0次(硬件DMA直达)
典型延迟 10~50 µs(软件开销为主) 0.5~2 µs(硬件直通)
通信语义 基于消息流(Socket流式) 基于内存操作(读/写/原子操作)
可靠性实现 内核TCP协议栈(软件重传、拥塞控制) 网卡硬件(硬件重传、流控)

从上述对比可以看出,RDMA的核心优势并非单纯“更快的网卡”,而是架构性的路径缩短。传统网络即使使用100Gbps网卡,CPU处理协议栈的开销依然会成为瓶颈;而RDMA将协议处理下沉到硬件,使得网络带宽可以线性扩展而CPU占用率几乎不变。

InfiniBand与RoCEv2概述

RDMA并非单一技术标准,而是多种实现方式的统称。目前主流的RDMA网络协议包括InfiniBand(IB)、RoCEv1/RoCEv2(RDMA over Converged Ethernet)以及iWARP(Internet Wide Area RDMA Protocol)。其中,InfiniBand和RoCEv2是当前数据中心最广泛部署的两种方案。

InfiniBand:专用RDMA网络

InfiniBand是一种为RDMA而生的专用网络架构,从物理层到传输层完全独立设计。它采用子网管理器(Subnet Manager, SM)集中管理网络拓扑,提供无损传输、多路径、自适应路由等高级特性。InfiniBand的链路层天然支持流控和可靠传输,无需额外配置。

  • 物理层:支持SDR/DDR/QDR/FDR/EDR/HDR等速率,单端口从10Gbps到400Gbps不等。
  • 网络层:使用全局路由头(LRH+GRH),支持子网间路由。
  • 传输层:提供可靠连接(RC)、不可靠连接(UC)、可靠数据报(RD)、不可靠数据报(UD)四种服务类型。
  • 优势:性能最佳、生态成熟(Mellanox/ NVIDIA主导)、端到端无损。
  • 劣势:需要专用交换机和网卡,成本较高,与现有以太网不兼容。

RoCEv2:以太网上的RDMA

RoCEv2(RDMA over Converged Ethernet version 2)允许RDMA报文封装在UDP/IPv4或IPv6中,从而运行在标准以太网上。它利用IP路由实现跨子网通信,同时借助优先级流控(PFC)和显式拥塞通知(ECN)等机制在以太网上模拟无损传输环境。

RoCEv2的报文格式如下:

+------------------+------------------+------------------+------------------+
|  以太网帧头 (14B) |  IPv4/IPv6头 (20-40B) |  UDP头 (8B)      |  IB BTH+载荷     |
+------------------+------------------+------------------+------------------+
  MAC地址           IP地址            UDP端口(4791)     RDMA数据

RoCEv2的关键设计点在于:

  • UDP封装:使用UDP端口4791标识RoCEv2流量,利用IP路由实现跨网段通信。
  • 无损以太网依赖:需要PFC(IEEE 802.1Qbb)保证无丢包,否则RDMA的可靠传输性能会急剧下降。
  • 拥塞控制:结合ECN(IEEE 802.1Qau)和DCQCN(Data Center Quantized Congestion Notification)算法实现端到端拥塞管理。
  • 优势:复用现有以太网基础设施,成本低,部署灵活。
  • 劣势:性能受以太网丢包影响较大,调优复杂度高。

选型建议:如果追求极致性能且预算充足,InfiniBand是首选;如果希望复用现有数据中心以太网架构,RoCEv2是更务实的选择。在混合场景中,也可通过RoCEv2网关与InfiniBand子网互联。

案例场景:多链路加速中的协议选择

在某分布式存储集群中,需要将存储节点间的数据同步延迟从200µs降低到10µs以内。原方案采用TCP/IP over 25GbE,实测延迟约180µs,CPU占用率高达40%。

改造方案对比:

  1. 方案A:InfiniBand HDR100 — 部署2张100Gbps HDR网卡,延迟可降至1.2µs,CPU占用率低于5%,但需更换全部交换机。
  2. 方案B:RoCEv2 over 100GbE — 保留现有交换机(需支持PFC/ECN),新增RoCEv2网卡,延迟约2.5µs,CPU占用率约8%。
  3. 方案C:多链路聚合 — 使用2条RoCEv2链路绑定,配合多路径调度,在单链路故障时自动切换,同时将有效带宽提升至接近2倍。

最终该集群选择方案C,原因在于:成本可控、延迟满足要求(<10µs)、且通过多链路冗余提升了可用性。实际部署中,通过配置bonding或使用MLNX_OFED的多路径插件,实现了两条RoCEv2链路的负载均衡和故障切换。

误区与复盘:常见认知偏差

误区1:RDMA就是“更快的网卡”

RDMA的加速效果主要来自架构变革(内核旁路+零拷贝),而非单纯提升链路速率。即使使用400Gbps网卡,如果仍走传统内核协议栈,延迟和CPU开销依然无法满足高性能计算需求。

误区2:RoCEv2不需要无损网络

RoCEv2依赖无损以太网才能发挥性能。如果交换机未启用PFC或配置不当,一旦发生丢包,RDMA的可靠传输会触发大量重传,性能可能下降10倍以上。部署RoCEv2前必须检查交换机的PFC、ECN、缓冲区设置。

误区3:InfiniBand一定比RoCEv2好

在短距离(同机柜)场景下,两者延迟差距很小(约1µs vs 2µs)。但在跨交换机、长距离场景中,InfiniBand的集中管理优势更明显。选型应基于实际拓扑、预算和运维能力综合判断。

复盘要点:在规划RDMA多链路加速方案时,应首先明确业务对延迟、带宽、可用性的具体指标,再评估现有网络基础设施的兼容性。InfiniBand适合新建专用集群,RoCEv2适合存量以太网升级。无论选择哪种协议,都必须重视网络无损配置和链路冗余设计,否则RDMA的优势将无法充分发挥。