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高性能的核心来源。
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(端到端) |
| 适用场景 | 单数据中心内部短距离 | 跨数据中心、大规模集群 |
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占用率通常低于传统以太网的十分之一。
典型应用场景与选型误区
RoCEv2目前广泛应用于高性能计算(HPC)、分布式存储(如NVMe over Fabric)、AI/ML训练集群等场景。以NVMe over Fabric为例,RoCEv2承载NVMe命令,使主机能够像访问本地NVMe盘一样访问远端NVMe SSD,时延可低至10微秒级别。
RoCE调优前的网络评估清单
在开始调优之前,建议先完成以下基础检查,确保网络环境满足RoCE运行的最低要求:
- 确认所有交换机端口支持并已启用PFC(至少为RoCE流量分配一个无损优先级队列)。
- 确认RoCEv2流量使用的VLAN与PFC优先级映射一致(通常使用优先级3)。
- 检查端到端MTU一致性(建议9000字节巨型帧),避免分片导致性能下降。
- 确认交换机支持ECN并已配置适当的阈值(用于DCQCN拥塞反馈)。
- 验证网卡固件和驱动版本支持RoCEv2及DCQCN。
完成上述检查后,才能进入后续的精细化参数调优阶段。RoCE的性能上限不仅取决于网卡参数,更取决于整个网络生态的协同配置。