3. DCB基础:DCBX协议、优先级流控(PFC)与增强传输选择(ETS)原理
3.1 从“尽力而为”到“无损有类”:DCB的三大支柱
传统以太网在拥塞时直接丢弃报文,这对RoCE这类依赖RDMA(远程直接内存访问)的流量是致命的——一次丢包就可能触发重传,将微秒级时延恶化到毫秒级。DCB(Data Center Bridging,数据中心桥接)正是为解决此问题而生,它由三个核心协议/机制协同工作:DCBX(DCB Capability Exchange,能力交换协议)、PFC(Priority-based Flow Control,基于优先级的流控)和ETS(Enhanced Transmission Selection,增强传输选择)。三者关系可概括为:DCBX负责“协商”,PFC负责“不丢”,ETS负责“分带宽”。
3.2 DCBX:让两端“说同一种语言”
DCBX是LLDP(链路层发现协议)的扩展,运行在控制面,负责在相邻交换机之间、交换机与服务器网卡之间协商DCB能力。它传递的关键信息包括:
- PFC配置:哪些802.1p优先级(0~7)启用了PFC,通常RoCE流量使用优先级3或4。
- ETS配置:各优先级组(Priority Group)的带宽百分比分配,以及调度算法(严格优先级或加权轮询)。
- 应用优先级映射:将特定应用(如RoCEv2的UDP端口4791)映射到指定优先级。
DCBX的协商模式分为非对称和对称两种。非对称模式下,一方为“意愿”方(通常为交换机),另一方为“接受”方(服务器网卡),交换机下发配置,网卡必须接受;对称模式下双方互相协商,取交集或按优先级决定。实际部署中,建议将交换机设为意愿方,服务器设为接受方,避免两端配置不一致导致PFC或ETS失效。
show lldp neighbors detail 可查看DCBX TLV是否正常交换。若看到“DCBX Status: Mismatch”,说明两端参数不一致,需逐项核对PFC优先级和ETS带宽配置。
3.3 PFC:逐优先级“踩刹车”
PFC(IEEE 802.1Qbb)将物理链路划分为8个虚拟通道(对应802.1p优先级),每个通道独立进行流控。当某个优先级的接收队列占用超过高门限(XOFF)时,接收方向对端发送PFC暂停帧,要求对端停止发送该优先级的帧;当队列水位回落到低门限(XON)以下时,再发送恢复帧。其他优先级不受影响,从而避免队头阻塞。
PFC的关键参数包括:
- XOFF门限:触发暂停的队列深度,通常设置为端口缓冲区的60%~80%。
- XON门限:恢复发送的队列深度,通常为XOFF的50%~70%。
- 暂停帧的PFC使能位图:8位位图,每一位对应一个优先级是否启用PFC。
以华为CloudEngine交换机为例,配置PFC的典型命令如下:
interface 10GE1/0/1
priority-flow-control enable // 全局使能PFC
priority-flow-control priority 3 // 对优先级3使能PFC
priority-flow-control priority 3 headroom 100 // 设置优先级3的headroom缓冲
priority-flow-control priority 3 xoff-threshold 80 // XOFF门限80%
priority-flow-control priority 3 xon-threshold 50 // XON门限50%
3.4 ETS:让不同流量“各得其所”
ETS(IEEE 802.1Qaz)定义了带宽管理策略。它将8个优先级划分为最多8个优先级组(PG),每个组分配一个带宽百分比。调度时,先按严格优先级处理高优先级组(如网络控制流量),再对剩余带宽按加权轮询(WRR)分配给各ETS组。
典型配置场景:将RoCE流量(优先级3)放入PG0,分配60%带宽;将普通TCP流量(优先级0)放入PG1,分配40%带宽。这样即使TCP流量突发,也不会挤占RoCE的带宽,反之亦然。
| 优先级组 | 802.1p优先级 | 典型流量 | 带宽比例 | 调度算法 |
|---|---|---|---|---|
| PG0 | 3, 4 | RoCEv2 | 60% | WRR |
| PG1 | 0, 1 | TCP/IP 业务 | 30% | WRR |
| PG2 | 7 | 网络控制(LLDP/BGP) | 10% | 严格优先级 |
ETS配置命令示例(华为CE系列):
interface 10GE1/0/1
qos map 8021p 3 to priority-group 0 // 将优先级3映射到PG0
qos map 8021p 0 to priority-group 1
qos map 8021p 7 to priority-group 2
qos priority-group 0 bandwidth 60 // PG0分配60%带宽
qos priority-group 1 bandwidth 30
qos priority-group 2 bandwidth 10
qos priority-group 2 strict-priority // PG2使用严格优先级
3.5 案例复盘:某金融数据中心RoCE网络PFC风暴
现象:某金融客户部署RoCEv2存储网络后,业务高峰时段出现存储IO延迟抖动,从平均200μs恶化到5ms以上,部分链路甚至完全中断。
排查过程:
- 检查DCBX状态:
display dcbx interface 10GE1/0/1,发现两端ETS协商成功,但PFC优先级映射不一致——交换机侧对优先级3和4启用了PFC,而服务器网卡仅对优先级3启用了PFC。 - 检查PFC统计:
display priority-flow-control statistics,发现优先级4的暂停帧计数持续增长,说明该优先级流量被反复暂停。 - 进一步分析:存储多路径软件将部分IO标记为优先级4,而交换机认为优先级4应受PFC保护,但服务器网卡未对该优先级启用PFC,导致交换机持续发送暂停帧,但服务器不响应,最终缓冲区溢出丢包。
解决方案:统一两端PFC配置,将服务器网卡的PFC使能优先级调整为与交换机一致(优先级3和4),并重新下发ETS带宽分配。调整后,PFC暂停帧数量下降99.2%,IO延迟恢复至180μs左右。
show priority-flow-control 和 show qos priority-group 核对实际生效配置。同时建议在服务器侧使用 rdma_ping 或 ib_write_bw 工具验证无损特性是否真正生效。
3.6 常见误区与设计建议
- 误区一:所有优先级都启用PFC。PFC暂停帧本身会占用链路带宽并引入延迟,建议仅对RoCE等无损流量启用,普通TCP流量依赖其自身的拥塞控制即可。
- 误区二:ETS带宽分配总和超过100%。配置时必须确保所有PG带宽之和等于100%,否则交换机可能拒绝下发或按比例归一化,导致实际带宽与预期不符。
- 误区三:忽略DCBX的“意愿”角色。若两端都设为意愿方,可能因配置冲突导致协商失败;若都设为接受方,则无人下发配置。建议交换机为意愿方,服务器为接受方。
- 设计建议:RoCE流量建议使用独立优先级(如3),并确保整条端到端路径(服务器网卡→接入交换机→核心交换机→存储端口)的PFC和ETS配置完全一致。跨厂商设备时,需特别注意DCBX TLV的兼容性差异。