了解更多银河麒麟操作系统全新产品,请点击访问
麒麟软件产品专区:product.kylinos.cn
开发者专区:developer.kylinos.cn
文档中心:document.kylinos.cn
交流论坛:forum.kylinos.cn
服务器环境以及配置
【内核版本】
4.19.90-25.22.v2101.ky10.x86_64
【OS镜像版本】
银河麒麟高级服务器操作系统
Kylin Linux Advanced Server release V10 (SP2) /(Sword)-x86_64-Build09/20210524
现象描述
服务器业务访问很慢,可能存在网卡丢包,交换机侧有收到反压帧(有反压帧,说明服务器网卡的接收缓存区可能满了)。
网卡品牌是:Mellanox,有多个优先级缓存区(8个,优先级0-7)。目前通过ethtool -S查看,发现rx_prio0_buf_discard值很大,不为0。但是rx_out_of_buffer为0。
关于迈络思网卡有几个问题:
- 数据包到服务器网卡,到底走哪个优先级缓存区(因为有8个,走哪个缓存区是网卡判定的还是操作系统判定的,还是说交换机上面控制的)?
- 如果某个优先级的缓存区满了,继续有包过来是不是会丢弃,还是说等待排队,如果这个优先级的缓存区没有开启PFC功能,是不是数据包就会丢弃?
- 迈洛思网卡是不是可以调整各个优先级的缓存区大小(通过命令mlnx_qos -i 网卡名 --buffer_size),这个调整是不是调整的网卡的硬件缓存区大小?
现象分析
现象1分析
数据包到服务器网卡,走哪个优先级缓存区,由报文DSCP和网卡配置决定。
通过mlnx_qos工具将不同DSCP绑定到不同优先级缓存区,以设置具备不同DSCP的报文走哪个优先级缓存区。
DSCP(Differentiated Services Code Point,差分服务代码点)是一种用于网络报文优先级分类的标记,使用每个数据包IP头部的TOS字段进行标识,通过不同的编码值来区分不同优先级。
用户可以将不同DSCP绑定到网卡不同的接收缓冲区。网卡收到某个报文后从IP头部读取DSCP值,根据DSCP值和网卡配置规则,确定该报文进入哪个硬件缓存区。
现象2分析
如果某个优先级的缓存区满了,后续包的处理逻辑受PFC(优先级流量控制)功能影响:
- 若开启了PFC功能,处理过程如下:
接收该报文,并向对端发送PFC PAUSE帧,通知对端设备暂时停止发送该类报文;对端设备在接收到PFC PAUSE帧后,将暂时停止向本端发送该类报文;当拥塞仍然存在时,此过程将重复进行,直至拥塞解除。
需要注意,必须保证本端和对端的PFC功能都处于开启状态,PFC功能才能生效。PFC中流量暂停只针对某一个或几个优先级队列,不针对整个接口进行中断,每个队列都能单独进行暂停或重启,而不影响其他队列上的流量。
- 若没有开启PFC功能,处理过程如下:
系统不进行反压处理,即在发生拥塞时直接丢弃报文。
现象3分析
迈洛思网卡可以调整缓存区大小。
通过迈络思官方文档,可以查到通过命令“mlnx_qos -i 网卡名 --buffer_size sizelist”来设置接收缓冲区大小,如下说明:
图2 迈络思参数说明
官方文档链接:
https://enterprise-support.nvidia.com/s/article/mlnx-qos