4、RoCE网络基础配置:DCB、PFC与ETS

好,咱们进入RoCE网络最核心的配置环节。说实话,很多朋友在部署RoCE时,第一步就栽在DCB配置上。我刚开始接触时也踩过坑——明明配了PFC,流量一上来就丢包,查了半天发现是优先级映射没对齐。嗯,今天咱们就把这块彻底讲透。

4.1 DCB(数据中心桥接)是什么?

DCB说白了,就是给传统以太网打了一套「QoS补丁」。传统以太网只管尽力转发,丢了包就重传。但RoCE不行——它需要网络像高速公路一样,给不同车辆划出专用车道。

DCB包含两个核心机制:

  • PFC(优先级流控):按优先级做流量控制,防止丢包
  • ETS(增强传输选择):按优先级分配带宽,保证关键流量

我个人习惯把DCB理解为「交通警察」——PFC负责喊停,ETS负责分配车道宽度。

核心原则:RoCEv2要求网络零丢包,DCB就是实现零丢包的基础设施。

DCB 数据中心桥接 PFC 优先级流控 ETS 增强传输选择 按优先级暂停 防止丢包 带宽分配 流量整形 目标:为RoCE提供零丢包、低延迟通道 PFC + ETS = 无损以太网

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后,别急着跑业务。先做一轮验证:

  1. 检查PFC状态:用show interface priority-flow-control确认每个接口的PFC已启用
  2. 检查ETS带宽:用show policy-map interface查看带宽分配是否生效
  3. 压力测试:用iperf或自研工具打流,观察丢包率和延迟

如果发现丢包,优先排查:

  • PFC优先级是否和RoCE优先级一致
  • 接口流控是否开启
  • 对端设备是否也配置了PFC(两端必须一致)

小技巧:我习惯在交换机上开启debug priority-flow-control,实时观察PFC帧的交互。虽然会消耗CPU,但排障时特别有用。记得用完关掉。

好了,DCB、PFC、ETS这三板斧抡完,RoCE网络的基础就稳了。记住:配置不难,难在一致性——全网设备必须统一配置,否则一个环节掉链子,整个RoCE集群性能就崩了。


公众号:蓝海资料掘金营,微信deep3321