第264篇:RoCE 与无损网络:PFC、ECN、DCQCN
关键词
RoCE、RDMA、无损网络、PFC、优先级流控制、ECN、显式拥塞通知、DCQCN、数据中心桥接
一、RDMA 与 RoCE 概述
1.1 什么是 RDMA
RDMA(Remote Direct Memory Access)允许一台服务器直接访问另一台服务器的内存,无需经过 CPU 和操作系统协议栈:
传统 TCP 通信 vs RDMA:
TCP(有 CPU 参与):
ServerA(App → 内核 TCP → NIC)
→ 网络 →
ServerB(NIC → 内核 TCP → App)
数据复制 4 次(App 缓冲区 ↔ 内核缓冲区)
CPU 参与协议处理
延迟:10-100μs
RDMA(CPU 绕行):
ServerA(App 内存 → NIC)
→ 网络 →
ServerB(NIC → App 内存)
数据直接零拷贝
CPU 完全不参与数据传输
延迟:1-3μs
吞吐量:接近线速
1.2 RDMA 的实现方案
InfiniBand(IB):
专用网络(交换机 + HCA)
最高性能
成本最高
生态封闭
RoCE(RDMA over Converged Ethernet):
RoCEv1:以太网链路层(基于以太网类型 0x8915)
RoCEv2:UDP/IP 封装(目标端口 4791)
重用标准以太网
成本大幅降低
需要无损网络支持
iWARP(Internet Wide Area RDMA):
基于 TCP
支持 WAN(有损网络)
性能不如 RoCE
1.3 RoCEv2 封装格式
RoCEv2 封装:
IB BTH(Base Transport Header)12 字节 OpCode, Destination QP, 分组序号等 IB 扩展头(可选) UDP Header 源端口:基于 QP 哈希 目标端口:4791 IP Header Src/Dst IP(路由用) 以太网 MAC
RoCEv2 vs v1 对比: | | RoCEv1 | RoCEv2 | | --- | --- | --- | | 网络层 路由 MTU ECMP 部署 | 以太网(无IP) 仅二层(VLAN) 依赖以太网 MTU 不支持 简单小规模 | UDP/IP 三层路由 标准 IP MTU 支持(UDP端口) 大规模跨网段 |
当前推荐:RoCEv2(UDP/IP 封装,可路由、可实现 ECMP)
二、为什么需要无损网络
2.1 RDMA 对丢包的敏感性
RDMA 与传统 TCP 的丢包对比:
TCP 对丢包的处理:
收到 3 个重复 ACK → 快速重传
超时 → 慢启动
一个丢包 → 恢复时间 1-10ms
性能影响可接受(Web/文件传输)
RDMA 对丢包的处理:
一个丢包 → Go-Back-N(回退N步)
丢失的报文之后的所有报文都要重传
性能影响巨大:
1 个丢包 = 影响后续所有报文
0.1% 丢包率 → RDMA 吞吐量下降 90%+
1% 丢包率 → 吞吐量接近 0
结论:RDMA 要求网络零丢包!
2.2 无损网络三要素
无损网络 = PFC + ECN + DCQCN
1. PFC(Priority Flow Control)——吸收微突发
基于优先级的流量控制
防止端口缓存溢出
逐跳反压
2. ECN(Explicit Congestion Notification)——拥塞标记
交换机检测到拥塞后在报文上打标记
接收端通知发送端减速
避免 PFC 被过度触发
3. DCQCN(Data Center Quantized Congestion Notification)——端到端拥塞控制
基于 ECN 标记的速率调整
发送端根据 ECN 反馈调整发送速率
快速收敛到公平速率
三者的协同:
正常情况:ECN + DCQCN 端到端拥塞控制
极端情况:PFC 作为最后防线吸收突发
三、PFC(Priority Flow Control)
3.1 PFC 原理
PFC(IEEE 802.1Qbb)是基于优先级的逐跳流控制:
PFC 反压帧(Pause)
Sender ───────────────────────────► Receiver
│ │
│ Class 3 (存储) ──────────────────► │
│ │
│ ┌── 超过阈值 ──┐ │
│ │发送PFC Pause │ │
│ │Stop: Class3 │ │
│ └──────────────┘ │
│ │
│ ── 缓存恢复 ── │
│ │发送PFC Resume │ │
│ │Go: Class3 │ │
│ └──────────────┘ │
│ │
▼ ▼
停止发送 Class 3 流量 恢复发送
3.2 PFC 的 8 个优先级
PFC 支持 8 个优先级(0-7),每个优先级独立控制:
典型数据中心优先级规划:
| 优先级 | 流量类型 | 用途 |
|---|---|---|
| 3 5 4 2 0 | RoCEv2 存储 视频 管理 尽力而为 | RDMA 流量(无损) FC/iSCSI(可选无损) 视频会议(延迟敏感) SSH/SNMP 普通 TCP(允许丢包) |
注意: PFC 只对标记为无损的优先级生效 优先级 0(尽力而为)通常不开启 PFC 避免 PFC 影响范围过大
3.3 PFC 配置
# 华为 CloudEngine 交换机 PFC 配置
#
# 1. 全局开启 DCBX(数据中心桥接交换)
dcbx enable
#
# 2. 端口流控
interface 100GE1/0/1
flow-control # 开启 PFC
flow-control buffer 1000 # 缓存阈值(KB)
priority-flow-control enable
priority-flow-control priority 3 # 只在优先级 3 开启 PFC
#
# 3. 缓冲区配置
dcb pfc buffer shared 3000
dcb pfc buffer headroom 1000 # 头房缓存(防止丢包)
四、ECN(Explicit Congestion Notification)
4.1 ECN 原理
ECN(RFC 3168)是 IP 层的拥塞通知机制:
ECN 标记流程:
ECT(0/1) ECT
Sender ──────────────► Switch ───────────────────► Receiver
│ │
│ 拥塞(队列 > 阈值) │
│ IP 头: ECT → CE │
│ (Congestion Experienced)│
│ │
│ Receiver 收到 CE
│ 发送 ECN-Echo
│ (到发送端)
│ │
◄─────────────────────────
│ Sender 收到 ECN-Echo
│ 减速发送速率
│ │
◄───── 恢复正常 ──────────
4.2 ECN 在无损网络中的角色
ECN 的核心作用:
没有 ECN 时:
流量增加 → 队列增长 → 超过 PFC 阈值 → PFC 反压
PFC 反压传播到上游 → 上游队列也堆积
→ 可能造成 PFC 死锁(下一篇文章详述)
有 ECN 时:
流量增加 → 队列增长 → ECN 阈值触发
→ 标记 CE → 接收端通知发送端 → 发送端减速
→ 队列下降 → 不需要 PFC 反压
ECN 在 PFC 之前生效
ECN 防止 PFC 被频繁触发
ECN 处理微秒级拥塞
PFC 处理毫秒级突发
ECN 配置(华为):
# 全局 ECN 配置
ecn
ecn-profile default
color green
ecn threshold low 100 high 200 # ECN 标记队列长度阈值
ecn mark-probability 100 # 标记概率(%)
#
#
# 应用到无损端口
interface 100GE1/0/1
ecn ecn-profile default
五、DCQCN(拥塞控制算法)
5.1 DCQCN 的工作流程
DCQCN(Data Center Quantized Congestion Notification)是适用于 RoCEv2 的拥塞控制算法:
DCQCN 流程:
发送端 交换机 接收端
│ │ │
│────────── 数据 ──────────►── 拥塞 ─────────►│
│ │ ECN标记 CE │
│ │ │
│ │ 接收端收到 CE
│ │ 生成 CNP 报文
│◄─────────────────── CNP ─────────────────│
│ │
│ 发送端收到 CNP: │
│ 1. 速率 = 速率 × (1 - α/2) │
│ 2. α 自适应调整 ← 基于 CNP 频率 │
│ │
│ 没有 CNP(正常): │
│ 速率逐步恢复(Rate Increase Timer) │
│ 每 50μs 无 CNP → 速率 += β │
│ │
│ 稳定状态: │
│ 速率在公平共享和拥塞避免之间平衡 │
│ │
▼ ▼
经过 ECN + DCQCN 调节后,
拥塞得到控制,PFC 不会被触发。
5.2 DCQCN 参数调优
DCQCN 关键参数:
α(Alpha)衰减因子:
控制发送端对拥塞的反应速度
默认:α = min(α × (1 - g) + g, 1)
其中 g = CNP 接收速率 / 速率
建议:g = 1/16(快速响应拥塞)
β(Beta)速率恢复因子:
每次恢复增加的速率
默认:β = 50Mbps(每 50μs)
需要根据链路速率调整:
100G 链路:β = 50-100Mbps
25G 链路:β = 10-25Mbps
速率恢复时间(Rate Increase Timer):
两次速率恢复之间的间隔
默认:50μs(标准推荐)
千万不要设置过大(恢复太慢)或过小(拥塞振荡)
华为 DCQCN 调优:
# RoCE 流量调优
roce
roce-profile default
cnp-priority 3 # CNP 报文优先级
cnp-mode packet-by-packet # 每包模式
alpha 1/16 # 衰减因子
beta 50000000 # 50Mbps 恢复
rate-increase-timer 50 # 50μs 恢复间隔
六、RoCE 交换机配置
6.1 华为 CE 系列完整配置
# 1. 无损网络全局配置
dcbx enable
ecn
ecn-profile ROCE
color green
ecn threshold low 100 high 400
ecn mark-probability 100
#
# 2. 端口配置(RoCE 端口)
interface 100GE1/0/1
description To-Host-GPU1
#
# PFC
flow-control
priority-flow-control enable
priority-flow-control priority 3
#
# ECN
ecn ecn-profile ROCE
#
# QoS 队列映射
trust dscp
#
qos queue 3 ef priority 3 # RoCE 高优先级队列
#
# 3. 查看 PFC 状态
display dcb pfc interface 100GE1/0/1
Priority PFC Enabled Pause Frames Tx Pause Frames Rx
0 NO - -
3 YES 12345 6789
七、总结
| 知识点 | 核心要点 |
|---|---|
| RDMA | 绕过 CPU 直接内存访问,零拷贝、低延迟(1-3μs) |
| RoCEv2 | RDMA over UDP/IP,可路由、ECMP 支持 |
| 无损网络三要素 | PFC + ECN + DCQCN |
| PFC | 逐跳优先级流控制,吸收微突发 |
| ECN | 交换机标记拥塞,接收端反馈,发送端减速 |
| DCQCN | 基于 ECN 反馈的速率控制算法 |
| 优先级规划 | RoCE 通常用优先级 3,TCP 用优先级 0 |
| 配置要点 | DCBX + PFC + ECN + RoCE profile |
八、思考
- RDMA 相比传统 TCP 通信为什么延迟低得多?零拷贝是如何实现的?
- RoCEv1 和 RoCEv2 的核心区别是什么?为什么 RoCEv2 更适合大规模数据中心部署?
- PFC、ECN、DCQCN 在无损网络中各自扮演什么角色?它们的协同关系是什么?
- 为什么说 RDMA 网络必须是"无损"(零丢包)?0.1% 的丢包率对 RDMA 性能有什么影响?
- 在一个 100Gbps 的 RoCE 网络中,如果 DCQCN 的速率恢复参数 β 设置得太小(如 1Mbps/50μs),会有什么后果?
下篇预告:第265篇《RoCEv2 拥塞控制与流量监管》——深入 RoCEv2 的拥塞控制机制,包括 DCQCN 的数学分析、ECN 阈值调优、多流公平性、PFC 风暴防护。