RoCE网络架构:典型拓扑、无损网络与PFC、ECN
3.1 RoCE的两种部署形态与典型拓扑
RoCE(RDMA over Converged Ethernet)的核心目标是在以太网上实现RDMA语义,但不同版本的RoCE对底层网络的要求截然不同。理解这一点是选型与配置的第一步。
- RoCEv1:链路层协议,要求收发双方处于同一二层广播域,不能跨VLAN或子网,实际部署极少。
- RoCEv2:基于UDP/IP封装(目标端口4791),可路由,是当前唯一值得考虑的版本。它允许跨三层组网,但代价是必须依赖网络提供无损或近似无损的转发条件。
典型的数据中心RoCE拓扑通常采用Spine-Leaf(脊-叶)架构,而非传统的三层树形结构。原因在于RoCE流对延迟和丢包极度敏感,Spine-Leaf提供等长路径和低扇出,配合ECMP(等价多路径)可实现高带宽与冗余。
上图展示了典型的RoCEv2组网。每个Leaf下挂GPU服务器或存储节点,Leaf与Spine之间通过多条链路互联。当流量从GPU服务器发往存储节点时,可能经过Leaf-2 → Spine-1 → Leaf-1,也可能经过Leaf-2 → Spine-2 → Leaf-1,由ECMP根据哈希结果选择路径。这种架构下,任何一条链路拥塞都可能引发PFC暂停帧,进而导致队头阻塞,因此必须精细配置PFC与ECN。
3.2 无损网络的核心:PFC(优先级流量控制)
PFC(IEEE 802.1Qbb)是RoCE无损网络的基础。它扩展了传统的802.3x流控,将流量划分为8个优先级(VLAN Priority 0~7),并允许对每个优先级独立进行流控。
PFC的工作原理是:当接收端某个优先级的队列占用超过阈值时,向发送端发送PFC暂停帧(Pause Frame),发送端收到后停止发送该优先级的流量,直到收到恢复帧或定时器超时。
PFC配置要点(以NVIDIA Spectrum交换机为例)
# 启用PFC,仅对优先级3(RoCE通常使用3或4)生效
mlag
interface ethernet 1/1
priority-flow-control mode on
priority-flow-control priority 3
priority-flow-control priority 3 pause-timer 65535
# 为RoCE流量创建无丢弃类
class-map type qos match-all ROCE_CLASS
match priority 3
policy-map type qos PFC_POLICY
class ROCE_CLASS
pause no-drop
interface ethernet 1/1
service-policy type qos input PFC_POLICY
配置PFC时,必须注意以下三个关键参数:
- 优先级划分:RoCE流量应独占一个优先级(通常为3或4),与普通TCP流量(优先级0)隔离,避免相互影响。
- 暂停帧阈值:设置过小会导致频繁触发PFC,降低吞吐;设置过大会增加延迟和缓冲占用。建议根据交换机缓冲区大小和预期流量突发量调整。
- 无丢弃队列(no-drop):必须为RoCE优先级配置no-drop队列,否则PFC无法生效。
3.3 ECN(显式拥塞通知)——端到端的拥塞控制
PFC解决了逐跳的无损问题,但它只是“治标”——当拥塞发生时,PFC通过暂停上游来防止丢包,但可能引发拥塞扩散(一个队列阻塞导致多个上游队列堆积)。ECN(IEEE 802.1Qau)则从端到端角度解决拥塞问题。
ECN的工作流程如下:
- 发送端在IP头中设置ECT(ECN-Capable Transport)标记,表明自己支持ECN。
- 交换机检测到队列长度超过阈值时,将数据包的CE(Congestion Experienced)位置1,而不是直接丢弃。
- 接收端收到CE标记的包后,在ACK中反馈拥塞信息。
- 发送端根据反馈动态降低发送速率(通常配合DCQCN算法)。
| 参数 | 推荐值 | 说明 |
|---|---|---|
| ECN阈值(kmin) | 100~200 KB | 队列长度超过此值开始标记 |
| ECN阈值(kmax) | 300~500 KB | 队列长度超过此值强制标记所有包 |
| 标记概率 | 随队列长度线性增长 | 从kmin到kmax逐渐增加标记概率 |
| CNP(拥塞通知包)间隔 | 50~100 μs | 接收端发送CNP的最小间隔 |
ECN配置示例(Cisco Nexus 9000系列)
policy-map type network-qos ROCE_QOS
class type network-qos class-default
congestion-control ecn
ecn threshold 100000 bytes
ecn max-threshold 400000 bytes
system qos
service-policy type network-qos ROCE_QOS
interface ethernet 1/1
priority-flow-control mode on
priority-flow-control priority 3
ECN与PFC必须配合使用:PFC负责“不丢包”,ECN负责“不拥塞”。理想情况下,ECN在拥塞初期就触发发送端降速,从而避免队列持续增长到触发PFC的程度。如果ECN配置不当或未启用,PFC将成为唯一防线,但此时网络吞吐和延迟都会显著恶化。
3.4 典型故障场景与排障复盘
某互联网公司AI训练集群采用RoCEv2组网,GPU服务器通过100Gbps接入Leaf交换机。上线初期发现训练任务吞吐仅为预期的60%,且伴随周期性超时。
排查过程:
- 第一步:检查网卡统计。发现
rx_pause计数持续增长,说明网卡频繁收到PFC暂停帧。 - 第二步:定位拥塞点。在Leaf交换机上执行
show queueing statistics,发现优先级3的队列深度经常超过ECN阈值。 - 第三步:检查ECN配置。发现Leaf交换机上ECN阈值设置为默认值(约500KB),远大于推荐的100~200KB,导致ECN标记过晚,拥塞已经扩散到PFC层面。
- 第四步:检查PFC配置。发现Spine交换机上PFC仅启用了优先级4,而Leaf上配置的是优先级3,优先级不匹配导致PFC跨设备失效。
解决方案:
- 统一所有交换机及网卡的RoCE优先级为3。
- 将ECN阈值调整为kmin=150KB,kmax=400KB。
- 在服务器网卡上启用DCQCN算法,并设置CNP间隔为50μs。
调整后,训练任务吞吐恢复到理论值的92%,PFC暂停帧数量下降约80%。
rdma_cm或ib_write_bw工具进行端到端带宽测试,并同时监控网卡和交换机的PFC/ECN计数器,确保各跳行为一致。
3.5 配置清单与验证命令
以下是一份RoCE无损网络部署的快速检查清单,适用于所有主流交换机厂商:
| 检查项 | 要求 | 验证命令(NVIDIA) |
|---|---|---|
| RoCE优先级一致性 | 所有设备使用相同优先级(如3) | show priority-flow-control |
| PFC启用状态 | 所有RoCE相关端口启用PFC | show interface ethernet 1/1 priority-flow-control |
| ECN阈值 | kmin 100~200KB,kmax 300~500KB | show queueing ecn |
| 无丢弃队列 | RoCE优先级映射到no-drop队列 | show class-map type qos |
| 缓冲区分配 | RoCE队列分配至少30%共享缓冲区 | show buffer pool |
| 网卡配置 | 启用DCQCN,设置CNP间隔 | mlxconfig -d /dev/mst/mt0 q set ROCE_MODE=2 |
验证无损效果的最直接方法是观察计数器:在稳定流量下,rx_pause和tx_pause计数应保持低位且不持续增长;如果PFC帧速率超过每秒数千个,说明ECN未能有效抑制拥塞,需要进一步调优阈值或检查流量模型。