RoCEv2简介

RoCEv2是什么?

1/1

RoCEv2(RDMA over Converged Ethernet v2) 是一种 在以太网上承载 RDMA 的协议,其核心特征是:

把 RDMA 封装在 UDP/IP 之上,从而实现三层可路由的 RDMA。

下面从定义、协议栈、与 RoCEv1 的区别、以及工程意义几个角度说明。


1. RoCEv2 的基本定义

RoCE(RDMA over Converged Ethernet)本质上是:

在以太网中使用 InfiniBand 的 RDMA 语义(QP、WR、MR、CQ 等)

RoCEv2 是 RoCE 的 第二个版本,其关键变化是:

  • RoCEv1:二层协议(Ethernet)
  • RoCEv2:三层协议(IP/UDP)

因此,RoCEv2 = RDMA + UDP + IP + Ethernet


2. 协议栈对比

RoCEv2 协议栈

Application
RDMA Verbs
-----------------
InfiniBand Transport (RC/UC/UD)
-----------------
UDP
IP
Ethernet

关键点:

  • RDMA 语义 仍然是 InfiniBand 的
  • 只是把 IB Transport 封装在 UDP/IP 中
  • 默认使用 UDP 端口 4791

对比 RoCEv1

项目 RoCEv1 RoCEv2
所在层级 L2 L3
是否可路由 ❌ 不可 ✅ 可
封装 Ethernet Ethernet + IP + UDP
广播域限制
网络部署 局域、同一子网 数据中心级

3. 为什么要有 RoCEv2?

RoCEv1 的核心问题

RoCEv1 是 纯二层协议

  • 不能跨三层设备(路由器)
  • 依赖 VLAN / 广播域
  • 大规模数据中心难以部署

RoCEv2 的改进

RoCEv2 解决的是 可扩展性与部署问题

  • ✅ 可以跨子网
  • ✅ 可以走标准 IP 网络
  • ✅ 可以与现有 DC 网络架构融合(Leaf-Spine)

所以现在:

实际生产环境几乎只用 RoCEv2


4. RoCEv2 是否“真的”基于 UDP?

是的,但要注意理解方式:

  • RoCEv2 只借用了 UDP/IP 的寻址和路由能力
  • 不使用 UDP 的可靠性机制
  • 可靠性仍然由 RDMA 传输层(RC)负责

所以:

职责
UDP/IP 路由、寻址、分片
RDMA RC 可靠性、顺序、重传
NIC 完全卸载(offload)

5. RoCEv2 对网络的额外要求

这点非常关键。

必须解决的问题:UDP 无拥塞控制

RoCEv2 本身 没有 TCP 那样的拥塞控制,因此需要网络侧配合:

常见约束

  1. 无丢包或极低丢包网络
  • PFC(Priority Flow Control)
  1. 拥塞反馈
  • ECN + DCQCN
  1. 严格的 QoS
  • RDMA 流量单独优先级

否则:

  • 延迟抖动极大
  • QP 超时重传
  • 尾延迟飙升

6. 与 iWARP 的本质区别(顺带)

项目 RoCEv2 iWARP
承载 UDP/IP TCP/IP
拥塞控制 依赖网络(PFC/ECN) TCP 自带
NIC 复杂度
延迟 更低 稍高
部署复杂度

7. 一句话总结

  • RoCEv2 是把 InfiniBand RDMA 封装进 UDP/IP 的三层 RDMA 协议
  • 解决了 RoCEv1 不可路由的问题
  • 以牺牲网络部署复杂度,换取极低延迟与高吞吐
  • 当前数据中心 RDMA 的主流选择

如果你愿意,下一步可以继续拆:

  • RoCEv2 报文格式(BTH / DETH / UDP 封装)
  • RC / UC / UD 在 RoCEv2 下的行为差异
  • PFC、ECN、DCQCN 与尾延迟的关系
1/1

我对于VLAN / 广播域 广播域限制不太熟悉,讲解一下 RDMA RC是什么 PFC(Priority Flow Control)ECN + DCQCN 是什么 QP 超时重传是什么 为什么RoCEv2牺牲了网络部署复杂度

1/1

下面按从网络基础 → RDMA 语义 → 拥塞与可靠性 → 工程代价的顺序解释。尽量把概念拆开,不假设你已经熟悉数据中心网络。


一、VLAN / 广播域 / 广播域限制

1. 什么是广播域(Broadcast Domain)

广播域

一次二层广播(如 ARP 请求)能到达的所有设备范围。

典型广播帧:

  • ARP Request
  • DHCP Discover
  • 未知 MAC 的泛洪帧(unknown unicast flooding)

在一个广播域中:

  • 所有主机都能“听到”这些广播
  • 交换机不会阻断广播

2. 广播域由什么决定?

广播域 ≈ 一个二层网络

以下情况会切断广播域

  • 路由器(三层设备)
  • 不同 VLAN

以下情况不会切断广播域

  • 普通二层交换机
  • 同一个 VLAN 内的多台交换机

3. VLAN 是什么

VLAN(Virtual LAN) 是对二层网络的逻辑切分:

  • 同一台交换机上可以存在多个 VLAN
  • 不同 VLAN = 不同广播域
  • VLAN 之间通信必须经过三层(路由)

可以理解为:

VLAN 是“人为制造的广播域边界”


4. 广播域限制意味着什么(结合 RoCEv1)

RoCEv1 是 纯二层协议,结果是:

  • ❌ 不能跨 VLAN
  • ❌ 不能过路由器
  • ❌ 只能在一个广播域内通信

工程后果:

  • 网络规模被广播域大小限制
  • 大广播域 → ARP 风暴、收敛慢
  • 小广播域 → RDMA 节点无法跨子网通信

RoCEv2 的本质改进

把 RDMA 从“广播域级别”提升到“IP 网络级别”


二、RDMA RC 是什么

1. RDMA 的三种传输语义(IB Transport)

RDMA 继承自 InfiniBand 的三种传输类型:

类型 全称 特点
RC Reliable Connection 可靠、有序
UC Unreliable Connection 不可靠、有序
UD Unreliable Datagram 不可靠、无连接

RoCEv2 最常用的是 RC


2. RC(Reliable Connection)意味着什么

RC 是:

  • QP 级别的一对一连接
  • 保证:
  • 不丢包
  • 不乱序
  • 不重复
  • 支持 one-sided RDMA
  • RDMA Read
  • RDMA Write
  • Atomic

它的语义接近于:

“NIC 实现的、硬件级的可靠传输协议”

但注意:

  • 不是 TCP
  • 不做拥塞避免
  • 假设网络“几乎不丢包”

3. RC 的可靠性靠什么实现

  • Packet Sequence Number (PSN)
  • ACK / NACK
  • QP 状态机
  • NIC 硬件重传

这直接引出下面的“QP 超时重传”。


三、QP 超时重传是什么

1. QP 是什么(极简版)

QP(Queue Pair)

  • Send Queue (SQ)
  • Receive Queue (RQ)

RC 模式下:

  • 一个 QP ≈ 一条“可靠连接”

2. QP 为什么会超时

在 RC 中,每个发送的数据包都有:

  • PSN(包序号)
  • 对应的 ACK 期待

如果发生:

  • 网络丢包
  • 拥塞导致 ACK 长时间不到

则:

QP 认为对端不可达


3. QP 超时重传的行为

流程(简化):

  1. 发送方发送 PSN = N
  2. 等待 ACK
  3. 超过 retry_timeout
  4. NIC 硬件触发重传
  5. 重传次数超过阈值 → QP 进入 Error 状态

严重性在于:

  • QP 一旦进入 Error
  • 必须销毁并重新建立
  • 应用层感知为“连接断裂”

这也是为什么 RoCE 极度厌恶丢包


四、PFC / ECN / DCQCN 是什么

1. PFC(Priority Flow Control)

PFC = 按优先级的暂停机制

特点:

  • 基于以太网 PAUSE 帧
  • 只暂停某个优先级的流量
  • 不影响其他流量

在 RoCE 中:

  • RDMA 流量放在一个独立优先级
  • 交换机队列快满时:
  • 发送 PFC Pause
  • 对端 NIC 暂停发送 RDMA 流量

目标:

避免丢包(lossless Ethernet)


2. ECN(Explicit Congestion Notification)

ECN 是 IP 层机制:

  • 交换机在队列拥塞时
  • 标记 IP 包(不丢弃)
  • 接收方把拥塞信息反馈给发送方

不是阻断,而是“提醒”。


3. DCQCN(Data Center Quantized Congestion Notification)

DCQCN 是 RoCEv2 的拥塞控制算法

它做什么:

  • 接收 ECN 标记
  • 调整 RDMA 发送速率
  • 控制 NIC 注入速率

可以理解为:

“给 RDMA 补上的类 TCP 拥塞控制”

但它:

  • 不在内核
  • 不在应用
  • 在 NIC 固件 / 驱动中

五、为什么说 RoCEv2 牺牲了网络部署复杂度

1. TCP 网络的假设

TCP 假设:

  • 网络会丢包
  • 丢包 ≈ 拥塞信号
  • 端系统自行退让

所以:

  • 网络可以是“普通以太网”

2. RoCEv2 的假设

RoCEv2 + RC 假设:

  • 丢包是“异常事件”
  • 丢包 → QP 重传 → QP Error
  • 网络应尽量不丢包

于是必须:

  • PFC(避免丢包)
  • ECN(提前感知拥塞)
  • DCQCN(速率调节)
  • 严格 QoS、队列规划

3. 这就是“牺牲部署复杂度”的含义

对比总结:

维度 TCP RoCEv2
网络要求 普通 精细调优
丢包容忍 极低
拥塞控制 端到端 网络 + NIC
运维难度
性能 极高

一句话概括:

RoCEv2 把复杂性从主机协议栈,转移到了数据中心网络本身


如果你愿意,下一步可以继续深入:

  • 为什么 PFC 会导致 head-of-line blocking
  • QP 状态机(RTS → ERROR)
  • 为什么尾延迟在 RoCE 场景中尤其致命
1/1

以太网 PAUSE 帧是什么? PFC ECN都是怎么实现的?

1/1

下面从以太网最底层机制开始,把 PAUSE → PFC → ECN 的实现逻辑一层层展开。重点放在“它到底是怎么工作的”,而不是只给定义。


一、以太网 PAUSE 帧是什么

1. PAUSE 帧的来源

PAUSE 帧定义在 IEEE 802.3x(以太网流控)中

它解决的问题非常原始:

接收端来不及处理帧,想让发送端“先别发了”


2. PAUSE 帧本质是什么

PAUSE 帧是一个 二层控制帧

  • 特殊的 MAC 控制帧
  • 不承载数据
  • 直接由 MAC 层硬件处理

关键字段:

字段 含义
Destination MAC 01:80:C2:00:00:01(控制帧)
Opcode 0x0001(PAUSE)
Pause Time 要求对端暂停发送的时间

Pause Time 的单位是:

512 bit-times

3. PAUSE 帧怎么用(最原始版本)

流程:

  1. 接收端(如交换机)发现 接收队列快满
  2. 向发送端发送 PAUSE 帧
  3. 发送端在 Pause Time 内 停止发送所有流量
  4. Pause Time 到期后恢复发送

4. 原始 PAUSE 帧的问题

它有两个致命缺陷:

  1. 是“端口级”的
  • 一个 PAUSE → 所有流量都停
  1. 无法区分流量类型
  • RDMA / TCP / 管理流量全部暂停

结果:

在混合流量网络中几乎不可用


二、PFC(Priority Flow Control)是怎么实现的

1. PFC 的标准位置

PFC 定义在 IEEE 802.1Qbb

它是对 802.3x PAUSE 的“升级版”。


2. PFC 的核心思想

把“是否暂停”从“端口”细化到“优先级”

以太网最多支持 8 个优先级(PCP,3 bit)

  • PCP = 0–7
  • 通常:
  • PCP 3 / 4 → RDMA
  • 其他 → 普通流量

3. PFC 帧长什么样

PFC 仍然是 MAC 控制帧,但:

  • 一个 PFC 帧中
  • 为 8 个优先级分别携带 Pause Time

可以理解为:

Priority 0: Pause 0
Priority 1: Pause 0
Priority 3: Pause 65535  ← RDMA 停
Priority 5: Pause 0

4. PFC 的工作流程(一步不跳)

  1. 交换机为每个优先级维护独立队列
  2. RDMA 所在队列水位上升
  3. 超过阈值
  4. 交换机向上游端口发送 PFC Pause(仅针对 RDMA 优先级)
  5. 上游 NIC:
  • 停止发送该优先级的帧
  • 其他优先级继续发送
  1. 队列水位下降
  2. 交换机发送 PFC Resume(Pause Time = 0)

5. PFC 解决了什么,又引入了什么

解决:

  • 避免 RDMA 丢包
  • 实现“近似无损以太网”

引入的问题:

  • Head-of-Line Blocking
  • 拥塞传播(congestion spreading)
  • 死锁风险

所以 PFC 不能单独使用


三、ECN 是怎么实现的

1. ECN 在哪一层

ECN 属于 IP 层机制(RFC 3168)。

它不是暂停,而是“标记”。


2. IP 报文里的 ECN 位

IP 头中有 2 bit ECN 字段

ECN 值 含义
00 不支持 ECN
10 / 01 支持 ECN
11 遇到拥塞

3. ECN 的实现流程

  1. 发送端:
  • 把 IP 包的 ECN 位设为“ECN capable”
  1. 交换机:
  • 队列长度超过阈值
  • 不丢包
  • 把 ECN 位改为 11(Congestion Experienced)
  1. 接收端:
  • 收到被标记的包
  • 把拥塞信息反馈给发送端
  1. 发送端:
  • 降低发送速率

4. ECN 与 TCP / RoCE 的不同

  • TCP:
  • ECN → TCP ECE/CWR 位
  • RoCEv2:
  • ECN → DCQCN 反馈包(CNP)

四、DCQCN 是怎么和 ECN 配合的

1. DCQCN 的位置

  • 实现在 NIC 固件 / 驱动
  • 不在内核 TCP 栈

2. DCQCN 的核心机制

DCQCN = 三件事:

  1. ECN 感知
  2. 反馈(CNP,Congestion Notification Packet)
  3. 速率控制

3. 完整流程(非常关键)

  1. 发送端 RDMA 流量进入网络
  2. 交换机队列变长
  3. ECN 标记 RDMA 包
  4. 接收端 NIC:
  • 发现 ECN
  • 发送 CNP 给发送端
  1. 发送端 NIC:
  • 降低发送速率(乘法下降)
  1. 一段时间无 ECN:
  • 逐步提高速率(加法上升)

这就是:

RoCEv2 的“类 TCP 拥塞控制”


五、为什么要 PFC + ECN + DCQCN 一起用

单独使用的问题

  • 只有 PFC
  • 无丢包,但容易 HOL blocking
  • 只有 ECN / DCQCN
  • 丢包仍可能发生
  • RC QP 重传代价巨大

组合使用的分工

机制 作用
PFC 防止队列溢出(最后防线)
ECN 提前告知拥塞
DCQCN 控制发送速率

一句话总结:

PFC 是刹车,ECN 是仪表,DCQCN 是油门控制器


如果你愿意,下一步可以继续拆:

  • 为什么 PFC 会放大尾延迟
  • ECN 阈值怎么选
  • DCQCN 为什么比 TCP 更“激进”
1/1

Head-of-Line Blocking

拥塞传播(congestion spreading)

死锁风险 这些是什么?

1/1

下面把这三个问题放在 PFC / RoCEv2 的真实运行场景里解释。它们不是抽象名词,而是由“暂停机制 + 多跳网络”直接推导出的必然现象


一、Head-of-Line Blocking(HOL Blocking)

1. 直观定义

Head-of-Line Blocking 指的是:

队列最前面的流量被阻塞,导致后面的流量即使本来可以走,也被一起卡住

这是一个排队结构问题,不是协议 bug。


2. 在以太网 + PFC 中是如何出现的

关键前提:

  • PFC 是 按优先级暂停
  • 一个优先级 只有一个 FIFO 队列

考虑一个交换机场景:

NIC ──(RDMA)──> Switch A ──> Switch B ──> Host

Switch B 的 RDMA 队列拥塞,于是:

  1. Switch B 对 Switch A 发送 PFC Pause(RDMA 优先级)
  2. Switch A:
  • 停止向 B 发送 RDMA
  • 但 RDMA 队列中已经有数据
  1. 这些数据占住了 RDMA 队列的头部

此时问题出现:

  • 即使某些 RDMA 包的目的地 不是 Switch B
  • 也被同一个 RDMA 队列卡住
  • 无法绕过队头

这就是 HOL Blocking。


3. 为什么对 RDMA 特别致命

  • RDMA 流量通常:
  • 大吞吐
  • 长突发(burst)
  • 一次 HOL:
  • 延迟直接拉长
  • 尾延迟显著上升
  • QP 超时风险上升

二、拥塞传播(Congestion Spreading / Congestion Propagation)

1. 直观定义

拥塞传播指的是:

原本只在一个点发生的拥塞,通过 PFC 暂停机制,被“反向扩散”到整个网络


2. PFC 为什么会传播拥塞

PFC 的本质行为是:

“我满了,你别再给我发”

但注意:

  • “别再发”并不是“换条路”
  • 而是 停在你那里

3. 多跳场景下的传播过程

考虑一条三跳路径:

Host A → S1 → S2 → S3 → Host B
  1. S3 RDMA 队列满
  2. S3 → S2 发送 PFC Pause
  3. S2:
  • RDMA 队列开始堆积
  1. S2 队列满
  2. S2 → S1 发送 PFC Pause
  3. S1 队列开始堆积
  4. 最终:
  • Host A 的 NIC 也被 Pause

结果:

一个点的拥塞 → 整条路径被“冻结”


4. 后果

  • 网络利用率下降
  • 延迟不可预测
  • 瞬时全局停顿(microburst freeze)

三、死锁风险(Deadlock)

1. 死锁在网络中是什么意思

网络死锁不是程序死锁,而是:

一组设备互相等待对方释放资源,导致永久停滞


2. PFC 为什么可能导致死锁

PFC 的暂停是:

  • 硬暂停
  • 没有超时回退机制
  • 不知道“为什么暂停”

3. 一个典型的死锁拓扑

简化成环形:

S1 → S2 → S3 → S1

每个交换机都:

  • 有一部分 RDMA 流量要发给下一个
  • 队列满了 → 发送 PFC Pause

结果:

  • S1 等 S2 Resume
  • S2 等 S3 Resume
  • S3 等 S1 Resume

形成:

闭环等待


4. 为什么“理论上不该发生”,但“工程上会发生”

理论假设:

  • 流量最终会被消费
  • 队列会下降
  • Pause 会解除

现实情况:

  • RDMA 流量是长流
  • 同步 burst
  • ECN / DCQCN 调节不及时
  • 某条路径上某个 QP 已经 Error

一旦进入某些状态组合:

  • Resume 永远发不出来
  • 网络进入“软死锁”

四、三者之间的关系(非常重要)

这三个问题不是独立的:

PFC 暂停
   ↓
HOL Blocking
   ↓
队列占满
   ↓
PFC 向上游传播
   ↓
拥塞传播
   ↓
形成环路
   ↓
死锁风险

可以理解为:

PFC 是把“丢包问题”换成了“排队与系统性风险问题”


五、为什么 RoCE 仍然要用 PFC

因为对 RC 而言:

  • 丢包 ≫ 延迟抖动
  • 丢包 → QP Error → 连接重建

所以业界选择:

接受复杂的网络风险,换取极低延迟与高吞吐


六、工程上的缓解手段(点到为止)

现实中不会“裸用 PFC”,而是:

  • 小广播域 / 无环拓扑(Leaf-Spine)
  • ECN 阈值调得很低
  • DCQCN 激进降速
  • 严格限制 RDMA 流量规模
  • Separate lossless / lossy fabric

如果你愿意,下一步可以继续深入:

  • 为什么尾延迟在 PFC 网络里特别难控制
  • Leaf-Spine 为什么天然有利于 RoCE
  • 为什么很多厂商把 RDMA 网络“单独拉一张网”
1/1

简明地总结我们上面遇到的所有问题与概念

1/1

下面给你一份高度压缩但逻辑完整的总览,把前面出现的所有关键概念、问题、因果关系放在一张“心智地图”里。可以当复习提纲用。


一、基础网络层面

广播域 / VLAN

  • 广播域:二层广播可达的范围
  • VLAN:人为划分的广播域边界
  • 路由器 / 三层设备:切断广播域
  • 问题:RoCEv1 是二层协议 → 只能在一个广播域内

RoCEv2 的动机

  • 把 RDMA 从 L2 提升到 L3(IP/UDP)
  • 解决不可路由、规模受限的问题
  • 代价:进入“普通 IP 网络”,但不使用 TCP 的安全垫

二、RDMA / RoCE 核心语义

RDMA

  • 绕过内核、零拷贝、NIC 直访内存
  • 需要:
  • 内存注册(pin)
  • rkey / lkey
  • 严格权限

QP(Queue Pair)

  • Send Queue + Receive Queue
  • RC 模式下:≈ 一条可靠连接

RC(Reliable Connection)

  • 保证:不丢、不乱、不重
  • 支持 one-sided(RDMA Read / Write / Atomic)
  • 可靠性由 NIC 硬件实现
  • 不具备 TCP 的拥塞控制能力

三、丢包与可靠性问题

QP 超时重传

  • 丢包 / ACK 延迟 → NIC 重传
  • 超过重试阈值 → QP 进入 ERROR
  • QP ERROR:
  • 连接直接失效
  • 必须重建

结论:

RC 极度厌恶丢包


四、为“避免丢包”引入的机制

PAUSE 帧(802.3x)

  • 二层控制帧
  • 暂停整个端口
  • 粒度太粗

PFC(802.1Qbb)

  • PAUSE 的升级版
  • 按优先级暂停
  • RDMA 单独优先级
  • 目标:lossless Ethernet

ECN(IP 层)

  • 不丢包
  • 在拥塞时标记 IP 包
  • 提前告知拥塞

DCQCN

  • RoCEv2 的拥塞控制
  • 基于 ECN
  • NIC 内调节发送速率

分工总结:

  • PFC:防止队列溢出
  • ECN:感知拥塞
  • DCQCN:降速

五、由 PFC 引出的系统性问题

Head-of-Line Blocking

  • 同一优先级只有一个 FIFO 队列
  • 队头被 Pause → 后续包全堵
  • 尾延迟显著上升

拥塞传播

  • 一个节点拥塞
  • PFC Pause 反向逐跳传播
  • 整条路径被冻结

死锁风险

  • 多跳 + 环路
  • 设备互相等待 Resume
  • 网络进入永久停滞状态

因果链:

PFC
 → HOL Blocking
 → 队列堆积
 → Pause 传播
 → 潜在死锁

六、为什么说 RoCEv2 “牺牲了网络部署复杂度”

TCP 的哲学

  • 丢包是常态
  • 端系统自适应
  • 网络可以很“粗糙”

RoCEv2 的哲学

  • 丢包是灾难
  • 可靠性在 NIC
  • 网络必须高度可控

结果:

  • 必须精细配置:
  • PFC
  • ECN 阈值
  • DCQCN 参数
  • QoS / 拓扑
  • 运维难度显著上升

一句话总结:

RoCEv2 用“网络复杂性”换“极致性能”


七、终极对照(一句话版)

  • RoCEv1:简单、不可路由
  • RoCEv2:可扩展、难运维
  • RC:快,但脆
  • PFC:救命,但有副作用
  • ECN / DCQCN:试图把系统拉回稳定区间

如果你需要,我可以把这份总结进一步压缩成一页“考试速记版”或“面试回答版”,或者直接画一张文字版拓扑推导图。

1/1