CX6网卡的配置
#trust layer 3,即按照ip tos字段值来进行优先级映射
sudo mlnx_qos -i ens3f0 --trust dscp
#使能PFC
sudo mlnx_qos -i ens3f0 --pfc 0,0,0,1,0,0,0,0
#将ib设备mlx5_0的dscp优先级映射到26,对应了网卡优先级3
sudo cma_roce_tos -d mlx5_0 -t 106 #(dscp 26)
CE交换机配置(本文档使用的是CE6860,不同版本的CE交换机区别可能挺大,注意搜索文档)
步骤1:配置ECN模板
drop-profile dcqcn
#配置ECN水线,队列长度为最大队长的%1开始,按概率标记
color green low-limit 1 high-limit 30 discard-percentage 2
#提交配置
commit
步骤2:给100ge 1/0/1端口配置ECN,和端侧一样,一定要配置trust dscp,数据包才能进入正确buffer和队列
interface 100ge 1/0/1
trust dscp
qos queue 3 wred dcqcn
qos queue 3 ecn
#提交配置
commit
步骤3:给100ge 1/0/1端口配置PFC
dcb pfc
priority 3
interface 100ge 1/0/1
dcb pfc enable mode manual
dcb pfc buffer 3 xoff 310 xon 50 hdrm 740
#提交配置
commit
组网验证
(1)建立如下物理拓扑

(2)如下是ECN和PFC的作用原理:ECN作用于出端口队列,PFC作用于入端口buffer

(3)将所有相关端口配置成40G, 在1/0/1端口配置ECN,按照步骤2,在1/0/3、1/0/5端口配置PFC,按照步骤3
【CE交换机】
system-view
int 100ge 1/0/1
speed 40000
int 100ge 1/0/3
speed 40000
int 100ge 1/0/5
speed 40000
commit
【Server】将网卡速度与交换机端口速率适配
ethtool -s ens3f0 speed 40000 autoneg off
ethtool -s ens3f0 autoneg on
# ethtool ens3f0 #查看网卡是否up
(4)ECN验证实验
#安装perftest,apt安装即可
#client1
ib_send_bw -d mlx5_0 -R -D 10 --report_gbits &
#client2
ib_send_bw -d mlx5_0 -R -D 10 --report_gbits &
#server:
ib_send_bw -d mlx5_0 -R -D 10 --report_gbits 192.168.200.103 &
ib_send_bw -d mlx5_0 -R -D 10 --report_gbits 192.168.200.102 &
二打一验证结果如果能保证server的总带宽在端口最大带宽的36/40左右,ECN即配置成功,即40G的端口,必须跑满36G以上才可以;
(5)PFC验证实验
#还是重复上述二打一实验
#查看交换机是否发送pfc帧
display dcb pfc
#查看出端口队列是否丢包
display qos queue statistics interface 100ge 1/0/1

#查看入端口是否丢包
diaplay qos int 100ge 1/0/5
# 如果二打一情况下能够正常发送pfc帧,且出端口队列和入端口都不存在丢包,则配置正确;

(6)DCQCN在端侧仍然存在一些可调整的参数,一般默认参数效果就可以了
# 查看server端配置参数
ls /sys/class/net/ens3f0/ecn/roce_np/
# 查看client端配置参数
ls /sys/class/net/ens3f0/ecn/roce_rp/
用cat命令可以查看参数具体数值,echo命令可以修改数值,参数的意义可以参考dcqcn论文以及官网文档;

(7)如何在端侧计算丢包数来验证PFC效果
#查看mlx5_0 rdma报文发送数量
cat /sys/class/infiniband/mlx5_0/ports/1/counters/port_xmit_packets
#查看mlx5_0 rdma报文接收数量
cat /sys/class/infiniband/mlx5_0/ports/1/counters/port_rcv_packets
#丢包数量=server接收数量-client发送数量

(8)一些其它可参考的官方配置文档
[1]https://enterprise-support.nvidia.com/s/article/howto-configure-roce-over-a-lossy-fabric--ecn--end-to-end-using-connectx-4-and-spectrum--trust-l3-x
[2]https://enterprise-support.nvidia.com/s/article/recommended-network-configuration-examples-for-roce-deployment
[3]https://enterprise-support.nvidia.com/s/article/lossless-roce-configuration-for-linux-drivers-in-dscp-based-qos-mode