4、RoCE网络基础配置:DCB、PFC与ETS
好,咱们进入RoCE网络最核心的配置环节。说实话,很多朋友在部署RoCE时,第一步就栽在DCB配置上。我刚开始接触时也踩过坑——明明配了PFC,流量一上来就丢包,查了半天发现是优先级映射没对齐。嗯,今天咱们就把这块彻底讲透。
4.1 DCB(数据中心桥接)是什么?
DCB说白了,就是给传统以太网打了一套「QoS补丁」。传统以太网只管尽力转发,丢了包就重传。但RoCE不行——它需要网络像高速公路一样,给不同车辆划出专用车道。
DCB包含两个核心机制:
- PFC(优先级流控):按优先级做流量控制,防止丢包
- ETS(增强传输选择):按优先级分配带宽,保证关键流量
我个人习惯把DCB理解为「交通警察」——PFC负责喊停,ETS负责分配车道宽度。
核心原则:RoCEv2要求网络零丢包,DCB就是实现零丢包的基础设施。
4.2 PFC(优先级流控)原理与配置
PFC的原理其实不复杂。它把以太网流量分成8个优先级(802.1p),每个优先级独立做流控。当某个优先级的接收缓冲区快满时,交换机会向对端发送暂停帧——「嘿,先别发这个优先级的包了,我消化一下」。
为什么会这样设计?因为RoCE的RDMA操作依赖硬件直接访问内存,一旦丢包,整个传输性能会断崖式下跌。我见过一个案例,某数据中心没开PFC,RoCE流量一上到10Gbps就开始疯狂重传,实际吞吐量不到2Gbps。
避坑指南:我曾经在思科交换机上配PFC,忘了把接口的流控模式改成"on"。结果PFC帧发不出去,等于白配。记住:接口级别的流控必须启用。
PFC配置步骤(以Cisco Nexus为例)
! 1. 启用DCB特性
feature lldp
feature dcb
! 2. 创建优先级组,将RoCE流量映射到优先级3
class-map type qos match-any roce-traffic
match cos 3
! 3. 配置PFC,对优先级3启用
policy-map type qos roce-pfc
class roce-traffic
set qos-group 3
pause no-drop ! 关键:标记为不丢包优先级
! 4. 应用到接口
interface Ethernet1/1
service-policy type qos input roce-pfc
flowcontrol receive on ! 启用接收流控
flowcontrol send on ! 启用发送流控
嗯,这里要注意:PFC的优先级必须和RoCE的优先级一一对应。RoCEv2默认使用优先级3,但也可以改。我个人建议统一用3,省得后面排查时头大。
PFC验证命令
show interface priority-flow-control
show queuing interface ethernet 1/1
show hardware internal pfc statistics
验证时重点看两个指标:pause帧发送/接收计数和丢包计数。如果pause帧一直在发,说明接收端压力大,可能需要调整缓冲区大小。
警告:PFC不能解决所有丢包问题。如果网络中存在拥塞链路过长(超过10跳),PFC的暂停帧传播会引发「PFC风暴」——整个网络都在互相喊停。这时候需要配合ETS做带宽保障。
4.3 ETS(增强传输选择)配置
ETS解决的是「带宽打架」的问题。你想想看,RoCE流量和普通TCP流量混在一起,如果没做区分,RoCE的延迟敏感流量会被TCP的大流量挤死。
ETS的做法是:把流量分成多个优先级组,每个组保证最低带宽。比如RoCE流量保证60%,TCP流量保证40%。当RoCE空闲时,TCP可以借用带宽;一旦RoCE需要,立刻归还。
ETS配置示例
! 1. 定义优先级组
class-map type qos match-any roce-group
match cos 3
class-map type qos match-any tcp-group
match cos 0-2,4-7
! 2. 创建ETS策略
policy-map type qos roce-ets
class roce-group
set qos-group 3
bandwidth percent 60 ! 保证60%带宽
class tcp-group
set qos-group 0
bandwidth percent 40 ! 保证40%带宽
! 3. 应用策略
interface Ethernet1/1
service-policy type qos output roce-ets
ETS配置的关键是带宽百分比。我建议不要设得太死——比如RoCE给60%,TCP给40%,但实际RoCE流量可能只占20%。这时候TCP可以借用到80%,利用率更高。
ETS与PFC的配合
| 特性 | PFC | ETS |
|---|---|---|
| 作用 | 防止丢包 | 分配带宽 |
| 粒度 | 按优先级 | 按优先级组 |
| 触发条件 | 缓冲区满 | 带宽竞争 |
| 配置顺序 | 先配PFC | 后配ETS |
| 典型场景 | RoCE + 存储 | RoCE + TCP混合 |
实际部署时,我习惯先配PFC确保不丢包,再配ETS做带宽保障。顺序不能反——如果先配ETS,PFC没开,RoCE流量一拥塞就丢包,带宽保障再完美也没用。
实战经验:有一次客户反馈RoCE性能不稳定,时好时坏。我上去一看,ETS配了,PFC也配了,但优先级映射错了——RoCE流量被映射到优先级5,而PFC只对优先级3生效。结果就是:PFC没保护RoCE,一拥塞就丢包。修正映射后,性能立刻稳定。
4.4 配置验证与排障
配置完DCB后,别急着跑业务。先做一轮验证:
- 检查PFC状态:用
show interface priority-flow-control确认每个接口的PFC已启用 - 检查ETS带宽:用
show policy-map interface查看带宽分配是否生效 - 压力测试:用iperf或自研工具打流,观察丢包率和延迟
如果发现丢包,优先排查:
- PFC优先级是否和RoCE优先级一致
- 接口流控是否开启
- 对端设备是否也配置了PFC(两端必须一致)
小技巧:我习惯在交换机上开启debug priority-flow-control,实时观察PFC帧的交互。虽然会消耗CPU,但排障时特别有用。记得用完关掉。
好了,DCB、PFC、ETS这三板斧抡完,RoCE网络的基础就稳了。记住:配置不难,难在一致性——全网设备必须统一配置,否则一个环节掉链子,整个RoCE集群性能就崩了。
公众号:蓝海资料掘金营,微信deep3321