3、流控基础:以太网流控(PFC)与端到端流控(ECN)原理
3.1 为什么需要流控:无丢包网络的基石
RoCE(RDMA over Converged Ethernet)将RDMA的高吞吐、低延迟能力移植到以太网上,但以太网原本是“尽力而为”的转发模型——交换机在拥塞时直接丢弃报文。对TCP而言,丢包可由重传机制兜底;但对RoCEv2这类依赖硬件卸载的协议,哪怕万分之一的丢包率,也会导致QP(Queue Pair)重传风暴,吞吐量断崖式下跌,时延从微秒级恶化到毫秒级。
因此,RoCE网络必须构建“无损”转发环境。这依赖两类流控机制协同工作:
- 链路级流控(PFC,Priority-based Flow Control):解决“端口瞬时拥塞”问题,在队列溢出前让上游暂停发送。
- 端到端流控(ECN,Explicit Congestion Notification):解决“全局拥塞”问题,在瓶颈出现时让源端主动降速。
两者缺一不可:PFC是“刹车”,ECN是“导航”。若只有PFC,拥塞会向上游蔓延形成树状阻塞;若只有ECN,交换机缓冲区仍可能在反馈生效前溢出。下图展示了两种机制在RoCE网络中的协同位置:
3.2 PFC原理:基于优先级的逐跳流控
PFC(IEEE 802.1Qbb)将物理链路划分为8个虚拟优先级队列(VLAN Priority 0~7)。当某队列的占用超过高阈值(XOFF)时,交换机向对端发送PFC暂停帧,携带pause duration字段,请求对端在指定时间内暂停发送该优先级的报文;当队列水位回落到低阈值(XON)以下时,发送恢复帧(duration=0)解除暂停。
关键参数与行为:
- XOFF阈值:触发暂停的队列深度,通常设置为缓冲区大小的60%~80%。设置过小会导致频繁暂停,设置过大会增加丢包风险。
- XON阈值:解除暂停的水位,通常为XOFF的50%~70%,避免乒乓效应。
- 暂停帧传播:PFC是逐跳机制,拥塞会逐级向上游传递,最终可能到达发送端NIC。
3.3 ECN原理:端到端的拥塞反馈
ECN(RFC 3168,RoCEv2场景扩展)在IP头中利用ECT(ECN-Capable Transport)和CE(Congestion Experienced)两个比特位传递拥塞信号。RoCEv2的ECN机制工作流程如下:
- 发送端标记:NIC发出的RoCEv2报文IP头中,ECT位设置为
01或10,表明该流支持ECN。 - 交换机标记:当交换机检测到队列深度超过ECN阈值(Kth)时,将报文IP头改为
CE(11),但不丢弃报文。 - 接收端反馈:接收端NIC收到CE标记的报文后,生成CNP(Congestion Notification Packet)反馈报文,发回发送端。
- 发送端降速:发送端收到CNP后,按照速率降低算法(如DCQCN中的Alpha调整)降低发送速率,并周期性探测恢复。
ECN阈值(Kth)的设定直接影响流控效果:
| Kth设置 | 效果 | 适用场景 |
|---|---|---|
| 过小(如缓冲区10%) | 过早标记,发送端频繁降速,带宽利用率下降 | 极低时延敏感场景 |
| 适中(缓冲区30%~50%) | 平衡时延与吞吐,推荐默认值 | 通用RoCEv2部署 |
| 过大(缓冲区80%以上) | 标记滞后,PFC频繁介入,可能引发拥塞树 | 不推荐 |
3.4 案例:PFC与ECN的协同工作场景
以典型的三层Spine-Leaf架构为例,假设Leaf-1下挂的存储服务器向Leaf-2下挂的计算节点发起RDMA读取操作,同时Leaf-1还有另一条背景流量发往Leaf-3。当Leaf-2的上行端口出现瞬时拥塞时:
- 阶段1(毫秒级):Leaf-2的队列深度超过Kth,开始将RoCE报文标记为CE,同时继续转发。
- 阶段2(微秒级):若队列深度继续增长超过XOFF,Leaf-2向Leaf-1发送PFC暂停帧,暂停
priority 3的流量。 - 阶段3(端到端反馈):接收端NIC收到CE标记后,在数微秒内生成CNP并发送给发送端NIC。
- 阶段4(降速生效):发送端NIC收到CNP后,将发送速率降低(如从100Gbps降至80Gbps),队列逐渐消退。
- 阶段5(恢复):Leaf-2队列低于XON后解除PFC暂停;发送端在无CNP期间周期性尝试提速。
3.5 误区与复盘:流控参数调优的常见陷阱
误区1:PFC优先级映射错误。RoCE流量通常映射到优先级3,但交换机或NIC的优先级映射不一致时,PFC暂停帧无法作用于实际RoCE队列,导致静默丢包。排查方法:检查两端show priority-flow-control输出,确认启用的优先级一致。
误区2:ECN标记只关注交换机,忽略NIC侧配置。若NIC未开启ECN能力(如ecn_enable=1),即使交换机标记CE,接收端也不会生成CNP,ECN形同虚设。
误区3:Kth与XOFF设置重叠。若Kth大于XOFF,ECN标记尚未生效,PFC已触发,导致ECN完全失效。正确配置应保证:Kth < XOFF,且留出足够余量。
误区4:忽视CNP速率限制。部分NIC默认限制CNP发送速率(如每秒最多1024个),在高速拥塞场景下反馈不足,导致降速迟缓。建议将CNP速率设置为无限制或至少与数据速率匹配。
复盘建议:在部署RoCE网络时,应先在测试环境模拟拥塞场景,通过ethtool -S查看PFC帧计数、通过rdma statistic查看CNP计数,确认ECN先于PFC生效,再逐步调整Kth和XOFF参数,最终达到“ECN为主、PFC兜底”的理想状态。