RoCE基础:RoCEv1/v2协议栈、RDMA概念、与传统以太网的区别

RDMA的核心思想:绕过内核,直接读写远端内存

RDMA(Remote Direct Memory Access,远程直接内存访问)是一种允许网卡(RNIC,RDMA Network Interface Card)直接读写远端主机内存的技术。传统网络通信中,数据从网卡到达应用需要经过内核协议栈的多次拷贝与CPU中断处理;而RDMA将这一路径彻底“旁路”,使应用缓冲区与远端内存之间建立一条零拷贝、内核旁路、CPU卸载的数据通道。理解RDMA的关键在于三个核心特征:

  • 内核旁路(Kernel Bypass):应用通过用户态驱动直接与网卡交互,不经过内核Socket层,减少上下文切换。
  • 零拷贝(Zero-Copy):数据在网卡与用户缓冲区之间直接DMA传输,无需在内核缓冲区和用户缓冲区之间复制。
  • CPU卸载(Offload):数据的可靠传输、乱序重组、流量控制等由网卡硬件完成,而非CPU软件处理。

RDMA的典型操作包括READ(读远端内存)、WRITE(写远端内存)和SEND/RECV(双边消息传递)。其中READ/WRITE属于单边操作,接收方CPU完全无感知,这是RDMA高性能的核心来源。

关键认知:RDMA不是一种“新网络协议”,而是一种内存访问语义。它依赖具体的传输协议(如InfiniBand、RoCE、iWARP)将内存操作封装为网络报文。RoCE正是将RDMA语义承载在以太网上的实现方案。

RoCEv1与RoCEv2协议栈:从链路层到IP层

RoCE(RDMA over Converged Ethernet,融合以太网上的RDMA)分为两个版本,它们的核心差异在于网络层封装方式不同,这直接决定了其可路由性和部署范围。

RoCEv1:链路层承载,二层局限

RoCEv1将RDMA报文直接封装在以太网链路层中,其以太网类型字段(EtherType)为0x8915。它只能在同一个二层广播域(VLAN)内通信,无法跨子网路由。RoCEv1要求底层网络提供无损以太网服务(即PFC优先级流控),否则丢包将导致RDMA性能急剧下降。

RoCEv2:UDP/IP承载,三层可路由

RoCEv2将RDMA报文封装在UDP/IPv4或IPv6报文中,使用目的端口4791作为RoCEv2的标识。这一改动使RoCEv2能够借助标准IP路由跨三层网络传输,极大扩展了部署范围。RoCEv2的报文结构如下:

+------------------+------------------+------------------+------------------+
|  以太网头 (14B)   |  IP头 (20B)      |  UDP头 (8B)      |  RoCEv2报文      |
|  MAC地址          |  源/目的IP       |  目的端口4791    |  BTH+Payload    |
+------------------+------------------+------------------+------------------+

RoCEv2的UDP封装带来了一个关键优势:ECMP(等价多路径)可以利用UDP源端口进行负载均衡,使流量在多条链路上均匀分布。但同时也引入了新的挑战——UDP是无连接协议,RoCEv2必须依赖硬件卸载的拥塞控制(如DCQCN)来保证可靠性。

对比维度 RoCEv1 RoCEv2
网络层封装 直接以太网(EtherType 0x8915) UDP/IP(目的端口4791)
可路由性 仅二层(VLAN内) 三层可路由(IP网络)
负载均衡 依赖MAC+VLAN,无法ECMP 支持基于UDP端口的ECMP
拥塞控制 依赖PFC(链路级) 支持DCQCN(端到端)
适用场景 单数据中心内部短距离 跨数据中心、大规模集群
RoCEv1 vs RoCEv2 协议栈对比 RoCEv1(二层) RDMA 应用层(Verbs API) RDMA 传输层(BTH + Payload) RoCEv1 封装(EtherType 0x8915) 以太网 MAC 层(无IP) 物理层(光纤/铜缆) ⚠ 限制 • 仅限二层广播域(VLAN) • 无法跨子网路由 • 依赖PFC无损以太网 RoCEv2(三层可路由) RDMA 应用层(Verbs API) RDMA 传输层(BTH + Payload) UDP 头(目的端口 4791) IP 头(IPv4/IPv6) 以太网 MAC 层 ✓ 优势 • 支持IP路由跨三层通信 • 支持ECMP负载均衡 • 可配合DCQCN拥塞控制 演进 RoCEv2通过UDP/IP封装实现了从“数据中心内部”到“跨数据中心”的扩展

RoCE与传统以太网的本质区别

RoCE虽然运行在以太网物理介质上,但其协议行为与传统TCP/IP以太网有根本性差异。理解这些差异是后续调优的基础,因为RoCE对网络质量的要求远高于传统以太网。

可靠性与丢包敏感度

传统TCP/IP协议栈通过滑动窗口和重传机制容忍网络丢包,丢包率在1%时TCP吞吐量仍可保持约90%。而RoCEv2依赖网卡硬件实现可靠传输(Go-Back-N重传),一旦发生丢包,重传代价极高——不仅需要重传丢失的报文,还要重传该报文之后的所有报文。实验表明,RoCEv2在0.1%丢包率下吞吐量可能下降超过50%。因此,RoCE网络必须提供“无损”或“近无损”的传输环境。

流量控制机制差异

机制 传统以太网 RoCE网络
端到端流控 TCP滑动窗口(软件实现) RDMA硬件重传(网卡实现)
链路级流控 IEEE 802.3x(可选,尽力而为) PFC(IEEE 802.1Qbb)必须启用
拥塞通知 ECN(IP层标记) ECN + DCQCN(RoCEv2专用)
缓冲区管理 动态分配,允许溢出丢包 需要保证无损队列,避免溢出

CPU参与度对比

传统以太网收发1Gbps数据大约需要消耗1个CPU核心的100%处理能力,而RoCE通过RDMA引擎将数据直接从网卡搬运到应用内存,CPU仅需处理控制面操作(如创建队列对QP)。在10Gbps及以上速率下,RoCE的CPU占用率通常低于传统以太网的十分之一。

实践提示:在规划RoCE网络时,不能简单沿用传统以太网的“尽力而为”设计理念。必须从交换机缓冲区规划、PFC优先级配置、ECN阈值设置等多个维度进行端到端调优,这正是本课程后续章节的核心内容。

典型应用场景与选型误区

RoCEv2目前广泛应用于高性能计算(HPC)、分布式存储(如NVMe over Fabric)、AI/ML训练集群等场景。以NVMe over Fabric为例,RoCEv2承载NVMe命令,使主机能够像访问本地NVMe盘一样访问远端NVMe SSD,时延可低至10微秒级别。

常见误区:许多工程师认为“RoCEv2使用UDP封装,所以可以像普通UDP流量一样对待”。这是错误的。RoCEv2的UDP端口(4791)承载的是RDMA语义,其可靠性由网卡硬件保证,而非UDP层。如果网络设备对UDP流量进行限速、丢弃或哈希不均,将直接导致RDMA连接中断或性能暴跌。在配置ACL、QoS策略时,必须将RoCEv2流量(UDP 4791)识别为高优先级无损流量。

RoCE调优前的网络评估清单

在开始调优之前,建议先完成以下基础检查,确保网络环境满足RoCE运行的最低要求:

  1. 确认所有交换机端口支持并已启用PFC(至少为RoCE流量分配一个无损优先级队列)。
  2. 确认RoCEv2流量使用的VLAN与PFC优先级映射一致(通常使用优先级3)。
  3. 检查端到端MTU一致性(建议9000字节巨型帧),避免分片导致性能下降。
  4. 确认交换机支持ECN并已配置适当的阈值(用于DCQCN拥塞反馈)。
  5. 验证网卡固件和驱动版本支持RoCEv2及DCQCN。

完成上述检查后,才能进入后续的精细化参数调优阶段。RoCE的性能上限不仅取决于网卡参数,更取决于整个网络生态的协同配置。