现象
基于nccl的多轨通信算力中心出现交换机端口出入方向丢包
分析
机间通信使用RoCE网络,为了避免因丢包导致大量重传报文影响训练性能,我们基于PFC和ECN在交换机和服务器配置搭建了无损网络,理论上是不允许丢包的,现在出现交换机大量丢包,不知道是哪里配置不对。检查交换机配置没问题,但是服务器配置失效。由于服务器收到pause包之后未进行流控降速导致突发流量很大交换机端口队列出现丢包现象。和运维沟通明明已经配置了,但是为什么配置会失效呢?于是再配置一次。命令如下:
mlnx_qos -i ens108 --pfc=0,0,0,0,0,1,0,0
通过执行mlnx_qos -i ens108查看配置是否生效,查看了几次发现刚开始配置正常,过会配置没了,神奇!!!此命令的执行结果中有WARNINGG提示lldpad service is running and may overwrite your settings,于是把lldpad进程停掉,重新配置后过一段时间检查一切正常,好吧,确实是lldpad的问题。
原因
server端的PFC配置有两种方式:
- 本地手动配置:通过mlnx_qos -i eth1 --pfc 0,0,0,0,1,0,0,0命令;
- 通过lldpad进程自动配置;
两种配置方式见文档
由于我们服务端启动了lldpad进程,但是未通过lldpad配置PFC,而是在服务端手动通过mlnx_qos配置,导致lldpad自动覆盖mlnx_qos的配置,所以出现了配置丢失的情况,使用原理没搞清楚。
改进
lldpad关闭之后PFC配置正常,但是无法使用lldp协议发现邻居关系,为解决此问题,有两种方案:
- 使用lldpad管理PFC配置,不要使用mlnx_qos单独管理
- mlnx_qos手工配置,使用lldpd代替lldpad发送lldp协议
由于第一种方案生产环境未验证过,而且当前正在使用中,如果大规模调整风险比较大,太贵担不起!因此我们选用lldpd,既能获取端口的邻居关系又不影响现有PFC的配置,如何使用细节不描述了,见参考文档
参考
交换机和服务器PFC配置
如何enable server端LLDP
lldpad和lldpd对比