首页> 系统技术> Linux 网卡fifo队列溢出

[文章]Linux 网卡fifo队列溢出

收藏
0 2519 0

【摘要】

一般情况下,大家对网卡的关注都是带宽,如千兆网卡、万兆网卡这些。一张网卡的数据处理能力不单与带宽有关,还是网卡的fifo有关,也就是缓存,一般默认的网卡配置为256,最大可以配置到4096。在对该值调整时,也需要同时考虑cpu和内存的性能,避免大量的数据包堆积,影响使用。

【正文】

一、 问题现象

Linux操作系统上执行Ifconfig命令,查看到bond0bond1网卡出现大量的droppedoverruns

1041分:




1718分:


从截图进行分析,该段时间内容,一共接收了约25百万个包,其中丢失约1000个包,都是为overruns丢包。

二、 原因分析

mmgl-2bond0是由eth0eth8组成的,bond1是由eth4eth6组成的, 同时也看网卡方面有如下信息:


rx_fifo_errors参数中显示的值表示RX中断无法足够快地分配缓冲区,所以网卡会丢弃数据包。从sosreport中的网卡设置来看,eth0网卡的ring buffer最大可以设置到4096,当前值是256eth8,eth4,eth6的设置也是同样的。


三、解决方案

1.      临时解决办法,增加ring buffer的大小:

# ethtool -G eth0 rx 4096

2.      永久解决办法:

# cat /etc/udev/rules.d/50-ethtool.rules添加

ACTION=="add", SUBSYSTEM=="net", NAME=="enp12s3", RUN+="/sbin/ethtool -G enp12s3 rx 4096"

详细操作可以参考https://access.redhat.com/solutions/2127401

四、 知识扩展

1.      是否可以使用抓包进行查看哪些包被丢弃了?

答案:ring buffer 是环形结构,如果它被填满,则第一个数据包将被覆盖,所以无法找到被丢弃的包。

系统技术
最近热帖
{{item.Title}} {{item.ViewCount}}
近期热议
{{item.Title}} {{item.PostCount}}