第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

八、思考

  1. RDMA 相比传统 TCP 通信为什么延迟低得多?零拷贝是如何实现的?
  2. RoCEv1 和 RoCEv2 的核心区别是什么?为什么 RoCEv2 更适合大规模数据中心部署?
  3. PFC、ECN、DCQCN 在无损网络中各自扮演什么角色?它们的协同关系是什么?
  4. 为什么说 RDMA 网络必须是"无损"(零丢包)?0.1% 的丢包率对 RDMA 性能有什么影响?
  5. 在一个 100Gbps 的 RoCE 网络中,如果 DCQCN 的速率恢复参数 β 设置得太小(如 1Mbps/50μs),会有什么后果?

下篇预告:第265篇《RoCEv2 拥塞控制与流量监管》——深入 RoCEv2 的拥塞控制机制,包括 DCQCN 的数学分析、ECN 阈值调优、多流公平性、PFC 风暴防护。