4. 配置DCQCN拥塞控制

任务目标

在RoCEv2网络中启用DCQCN(Data Center Quantized Congestion Notification),完成交换机侧ECN配置与网卡侧QoS/中断参数调整,使网络在高带宽低延迟场景下具备端到端拥塞控制能力。

环境与依赖

  • 交换机:支持ECN的RoCEv2交换机(如Mellanox Spectrum系列),已配置无损PFC优先级
  • 网卡:Mellanox ConnectX-5及以上,驱动mlx5_core,已安装mlnx-tools
  • OS:Linux(内核≥4.9,支持dcbnl和iproute2)

核心实现

DCQCN依赖交换机ECN标记与网卡拥塞通知协同工作。交换机侧需为RoCE流量开启ECN并设置合理阈值;网卡侧需启用DCQCN、配置CNP(Congestion Notification Packet)生成速率与中断合并参数。

#!/bin/bash
# ========== 交换机侧配置(在交换机CLI执行) ==========
# 以Mellanox Spectrum为例,启用ECN并设置阈值
# 进入RoCE优先级(假设为3)的ECN配置
mlnx-qos -i eth1/1 -r 3 --ecn=1 --ecn_threshold=50000
# 设置ECN标记概率(1/255 ≈ 0.4%)
mlnx-qos -i eth1/1 -r 3 --ecn_probability=1

# ========== 网卡侧配置(在服务器执行) ==========
# 1. 启用DCQCN(默认开启,确认状态)
echo "=== DCQCN状态 ==="
cat /sys/class/infiniband/mlx5_0/ports/1/dcqcn/enable

# 2. 调整CNP生成速率(每秒最多发送的CNP包数)
# 高带宽低延迟场景建议提高速率以快速反馈拥塞
echo 10000 > /sys/class/infiniband/mlx5_0/ports/1/dcqcn/cnp_rate

# 3. 配置中断合并(减少CPU开销,同时保持低延迟)
# 使用mlnx-tools设置动态中断合并
mlnx_tune -p HIGH_PERFORMANCE

# 4. 设置网卡QoS优先级映射(确保RoCE流量使用配置ECN的优先级)
# 将RoCEv2流量(UDP端口4791)映射到优先级3
echo "priority 3" > /tmp/roce_qos.txt
echo "map 0 0" >> /tmp/roce_qos.txt
echo "map 1 1" >> /tmp/roce_qos.txt
echo "map 2 2" >> /tmp/roce_qos.txt
echo "map 3 3" >> /tmp/roce_qos.txt
echo "map 4 4" >> /tmp/roce_qos.txt
echo "map 5 5" >> /tmp/roce_qos.txt
echo "map 6 6" >> /tmp/roce_qos.txt
echo "map 7 7" >> /tmp/roce_qos.txt
cma_roce_tos -d mlx5_0 -t 3

# 5. 验证配置生效
echo "=== 验证DCQCN参数 ==="
cat /sys/class/infiniband/mlx5_0/ports/1/dcqcn/cnp_rate
cat /sys/class/infiniband/mlx5_0/ports/1/dcqcn/enable

echo "=== 验证QoS映射 ==="
cma_roce_tos -d mlx5_0

运行与验证

执行步骤:

  1. 在交换机上执行上述ECN配置命令,确认无报错
  2. 在服务器上以root权限运行网卡配置脚本
  3. 使用ibstat确认链路正常,ibv_devinfo查看端口状态

验证方法:

  • 检查/sys/class/infiniband/mlx5_0/ports/1/dcqcn/enable输出为1,表示DCQCN已启用
  • 确认cnp_rate已更新为设定值(如10000)
  • 在拥塞场景下(如多流并发),使用ethtool -S eth0 | grep ecn观察交换机侧ECN标记计数递增,说明ECN生效
  • 使用perftest中的ib_write_bw进行带宽测试,对比启用前后吞吐量,预期高拥塞下吞吐下降幅度减小

通过条件:DCQCN状态为启用,交换机ECN计数随拥塞增加,且RoCE流量无丢包(PFC计数不增长)即判定配置成功。

常见问题

  • ECN不生效:确认交换机端口优先级与网卡TOS映射一致(均为3),且PFC已在该优先级启用
  • 吞吐量异常下降:降低cnp_rate至5000,或调整交换机ECN阈值为100000,避免过度标记
  • CPU占用高:检查中断合并是否生效,必要时手动设置mlnx_tune -p LATENCY平衡延迟与CPU