2. RDMA基础概念
核心原理: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路径:应用缓冲区 → 网卡硬件(直接内存访问) → 远端网卡 → 远端应用缓冲区
与传统网络的区别:为什么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%。
改造方案对比:
- 方案A:InfiniBand HDR100 — 部署2张100Gbps HDR网卡,延迟可降至1.2µs,CPU占用率低于5%,但需更换全部交换机。
- 方案B:RoCEv2 over 100GbE — 保留现有交换机(需支持PFC/ECN),新增RoCEv2网卡,延迟约2.5µs,CPU占用率约8%。
- 方案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的优势将无法充分发挥。