3、RDMA协议栈详解:InfiniBand、RoCEv1/v2、iWARP的协议层次与特点
3.1 三种RDMA网络协议的核心定位
RDMA(Remote Direct Memory Access)的核心价值在于让网卡硬件绕过操作系统内核与CPU,直接在内存与远端内存之间搬运数据。但“绕过内核”只是结果,真正决定RDMA能否落地、如何落地的,是底层承载网络的选择。当前主流的RDMA协议栈有三条技术路线:InfiniBand(IB)、RoCE(RDMA over Converged Ethernet)v1/v2与iWARP(Internet Wide Area RDMA Protocol)。它们共享相同的上层接口(如Verbs API),但在传输层、网络层与链路层的分工上截然不同。
核心结论:IB是“为RDMA而生的专用网络”,RoCE是“在以太网上模拟IB的传输语义”,iWARP则是“把RDMA语义映射到TCP/IP之上”。三者的协议栈深度、硬件复杂度与生态成熟度依次递减,但部署成本与通用性依次递增。
3.2 InfiniBand:为RDMA而生的专用协议栈
InfiniBand并非“以太网的变种”,而是一套从物理层到传输层完全独立设计的网络体系。其协议栈自上而下分为:IB传输层(提供可靠连接RC、不可靠连接UC、不可靠数据报UD三种服务类型)、IB网络层(使用64位全局ID进行路由,支持子网间通信)、IB链路层(负责流控、错误检测与子网内转发)以及物理层(定义1x/4x/12x链路速率)。
IB最具特色的机制是子网管理器(Subnet Manager, SM)。SM负责发现拓扑、分配LID(局部ID)、计算路由表并下发到各交换机。这种集中式管理使得IB网络天然具备无损特性——链路层采用基于信用的流控(Credit-Based Flow Control),每个接收端口预先分配缓冲区信用,发送方只有在获得信用后才发送数据,从机制上杜绝了丢包。
实操视角:在IB网络中,ibstat命令可查看端口状态与速率,ibswitches可发现子网内所有交换机。若SM未启动,所有端口将停留在“Initializing”状态,无法通信。
3.3 RoCEv1与RoCEv2:以太网上的RDMA语义
RoCE的目标是让RDMA跑在标准以太网上,从而复用现有数据中心网络。RoCEv1与RoCEv2的关键差异在网络层封装:
- RoCEv1:直接将IB传输层报文封装在以太网帧中,
EtherType=0x8915。由于没有IP头,RoCEv1只能在同一二层广播域内通信,无法跨VLAN或子网路由。 - RoCEv2:在IB传输层与以太网之间插入UDP/IP头(目标端口4791),将报文封装为标准的UDP数据报。这使得RoCEv2可以利用普通IP路由跨三层网络传输,同时UDP头中的源端口可用于ECMP负载均衡。
RoCEv2的报文格式如下:
以太网头 | IP头 | UDP头(端口4791) | IB BTH+数据 | FCS
14B 20B 8B 可变长度 4B
RoCE最大的挑战在于:以太网原生是有损网络,而IB传输层假设底层不丢包。一旦发生拥塞丢包,RoCE的可靠连接(RC)服务会触发重传,性能急剧下降。因此RoCE部署必须依赖数据中心的无损以太网能力:启用PFC(优先级流控)为RoCE流量预留无丢包队列,同时配合ECN(显式拥塞通知)实现端到端拥塞反馈。
常见误区:很多工程师认为“RoCEv2加了IP头就能跨三层,所以不需要无损配置”。实际上,IP路由只是解决了寻址问题,丢包问题依然存在。跨三层时,中间路由器可能因缓冲不足丢包,若无PFC/ECN保护,RoCEv2性能会断崖式下跌。
3.4 iWARP:将RDMA语义映射到TCP/IP
iWARP走了一条完全不同的路线:它不模仿IB传输层,而是将RDMA操作映射到成熟的TCP/IP协议栈上。iWARP的层次结构为:
- DDP(Direct Data Placement):负责将上层数据直接放置到应用指定的内存缓冲区,避免中间拷贝。
- MPA(Marker PDU Aligned):在TCP字节流中插入标记,使接收端能快速定位DDP报文边界,解决TCP流边界模糊问题。
- TCP:提供可靠的字节流传输,天然支持跨三层路由。
iWARP的最大优势是无需无损网络——TCP的重传机制保证了可靠性,因此可以运行在普通有损以太网上。但代价是TCP协议栈的处理开销较大,且TCP的拥塞控制(如慢启动、超时重传)会引入额外延迟,使得iWARP的峰值性能通常低于RoCE和IB。
| 对比维度 | InfiniBand | RoCEv2 | iWARP |
|---|---|---|---|
| 传输层 | IB Transport (RC/UC/UD) | IB Transport | TCP |
| 网络层 | IB GRH (64位GID) | IP/UDP | IP |
| 无损要求 | 原生无损 | 需PFC/ECN | 无需 |
| 跨三层路由 | 需IB路由器 | 支持 | 支持 |
| 典型时延 | <1μs | 1-3μs | 5-10μs |
| 网卡卸载 | 全卸载 | 全卸载 | 部分卸载 |
3.5 选型案例:某云厂商存储集群的协议决策
某云厂商在构建分布式块存储集群时,需要在三种协议中做出选择。其存储节点间流量模式为:小包随机读写(4KB-64KB),时延敏感,且集群规模约200台服务器,分布在3个机架内。
初期测试结果如下:
- 使用IB:时延最低(0.8μs),但需要单独部署IB交换机与线缆,成本高出约60%。
- 使用RoCEv2:在启用PFC+ECN后,时延约1.5μs,性能接近IB的85%,且复用现有25G以太网交换机。
- 使用iWARP:时延约6μs,且CPU占用率比RoCE高15%,无法满足存储前端的高IOPS要求。
最终该厂商选择了RoCEv2方案。关键决策因素包括:现有网络资产复用、性能接近IB、以及其交换机支持无损配置。但团队也为此付出了额外运维成本——需要持续监控PFC死锁与ECN标记率。
3.6 误区与复盘:RoCE部署中的典型陷阱
误区一:RoCEv2不需要二层无损,因为IP层会处理丢包。
事实:RoCEv2的IB传输层(RC服务)没有拥塞窗口自适应机制,它假设底层不丢包。一旦丢包,RC会等待超时重传(通常数毫秒),导致性能崩溃。IP层只负责路由,不提供可靠性保障。
误区二:PFC开启后就能保证无损,无需关注ECN。
事实:PFC只能防止端口缓冲溢出,但无法感知端到端拥塞。当多对一流量(Incast)发生时,PFC可能导致头部阻塞(HoL Blocking)。必须配合ECN在交换机队列深度超阈值时标记报文,让发送端降速。
复盘建议:在部署RoCEv2前,务必完成以下验证:① 确认所有交换机端口启用PFC且优先级映射一致;② 测试ECN标记阈值(通常设置为缓冲区深度的50%-70%);③ 使用rdma-ping或ib_write_bw工具验证端到端带宽与时延;④ 监控交换机丢弃计数器,确保丢包率为0。
协议选型没有绝对的“最优”,只有“最适合”。IB适合新建的超大规模HPC集群,RoCEv2适合已有以太网基础设施且追求性价比的场景,iWARP则适用于无法改造网络但又需要RDMA语义的跨三层环境。理解三者的协议层次差异,是做出正确选型的第一步。