2. 启用PFC(优先级流控制)

任务目标

在RoCEv2部署中,PFC(Priority Flow Control,优先级流控制)用于防止无损网络中的缓冲区溢出导致丢包。本案例在交换机上为RoCE流量所使用的802.1p优先级队列启用PFC,并验证配置生效。

环境与依赖

  • 支持PFC的以太网交换机(本案例以Cisco Nexus 9000系列为例,命令语法适用于NX-OS)
  • RoCE流量使用802.1p优先级3(典型值,需与服务器端RoCE网卡设置一致)
  • 已配置RoCEv2所需的其他基础项(如DCBX、ETS),本案例仅聚焦PFC部分

配置实现

以下配置在交换机接口上启用PFC,并将优先级3设置为无丢弃(no-drop)队列:

! 进入系统级PFC配置
switch(config)# priority-flow-control mode on

! 进入接口配置(以上行/下行连接RoCE服务器的端口为例)
switch(config)# interface ethernet 1/1

! 在该接口上启用PFC
switch(config-if)# priority-flow-control mode on

! 将802.1p优先级3映射为无丢弃类
switch(config-if)# priority-flow-control no-drop cos 3

! 确认该接口的优先级3流量使用无丢弃队列
switch(config-if)# show priority-flow-control interface ethernet 1/1

若交换机连接多个RoCE服务器,需在每个相关接口上重复执行上述接口级配置。系统级priority-flow-control mode on只需全局开启一次。

验证方法

配置完成后,执行以下命令确认PFC生效:

switch# show priority-flow-control interface ethernet 1/1

预期输出中应包含:

  • PFC Mode: On(接口PFC已启用)
  • No-drop COS: 3(优先级3已配置为无丢弃)
  • 该接口的优先级3队列统计中Tx Pause Frames与Rx Pause Frames计数存在(当实际流量触发流控时计数增长)

进一步验证:在服务器端向RoCE流量打流(如使用perftest中的ib_write_bw),同时观察交换机接口计数器。若PFC正常工作,当网络拥塞时交换机应发出pause帧,且Rx Pause Frames计数增加,而RoCE流量不应出现丢包(通过ib_write_bw输出的丢包率为0确认)。

常见问题

  • 服务器与交换机优先级不一致:服务器RoCE网卡设置的优先级(如3)必须与交换机no-drop cos配置一致,否则PFC不会作用于RoCE流量。
  • PFC未生效:检查是否在物理接口(而非port-channel子接口)上配置;确认交换机全局PFC模式已开启。
  • pause帧风暴:若对端设备不支持PFC,交换机持续发送pause帧可能导致对端缓冲区溢出。需确保链路两端均启用PFC且优先级映射一致。