如何解决rx_missed_errors?


8

设置所有服务后,从旧服务器迁移到新服务器,我发现NIC中的rx数据包丢失了很多:

$ ifconfig eth2 | grep 'RX.*drop'
          RX packets:2059646370 errors:0 dropped:7142467 overruns:0 frame:0

但是/sys/class/net/eth2/statistics/rx_dropped什么也不要显示:

$ cat /sys/class/net/eth2/statistics/rx_dropped
0

然后,我看到rx_missed_errors

$ cat /sys/class/net/eth2/statistics/rx_missed_errors
7142467

如何排除故障并找出原因rx_missed_errors


我正在运行Ubuntu 12.04.5 LTS,具有:

$ ethtool -i eth2
driver: ixgbe
version: 3.15.1-k
firmware-version: 0x800003e1
bus-info: 0000:07:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes

什么牌子/型号的NIC?
Geraint Jones

@ GeraintJones:我更新了问题。
cuonglm 2015年


@GeraintJones:谢谢您的链接,我已阅读它,但似乎未显示该问题?
cuonglm

在此免费关联:两台服务器之间(以及新服务器与网络基础结构之间)的NIC配置不匹配的可能性吗?在较旧的服务器上针对NIC运行ethtool有什么区别(如果可以的话)?另外,插入服务器NIC上的其他端口或连接到其的交换机上的其他端口有什么区别吗?为了比较两个NIC,请使用ethtool -k eth2(而不是-i)。
玛丽

Answers:


8

大多数驱动程序会互换使用计数器rx_missed_errorsrx_fifo_errorsrx_over_errors,但通常会将这些计数器中的一个或多个设置为MPC(丢失数据包计数)计数器,当数据包到达并由于卡的FIFO队列已满而丢失时,该计数器会增加。

ixgbe驱动程序就是这种情况:

$ grep rx_missed_errors drivers/net/ixgbe/*
drivers/net/ixgbe/ixgbe_ethtool.c:      {"rx_missed_errors", IXGBE_STAT(net_stats.rx_missed_errors)},
drivers/net/ixgbe/ixgbe_main.c: adapter->net_stats.rx_missed_errors = total_mpc;

因此,rx_missed_errors对于ixgbe是MPC。

英特尔网站上有一篇很棒的博客文章,使用了一个很好的类比来描述MPC下降的原因:https : //communities.intel.com/community/tech/wired/blog/2009/11/04/how-the-kitchen水槽和统计数据解释和处理丢包

另外,请确保NIC和交换机之间没有速度和双工不匹配。如果您的交换机认为您的NIC比实际速度快,那么您在NIC方面就会遇到问题。

最后,如果根本原因最终是面对突发性能,则最大化NIC环形缓冲区的大小可能会有所帮助。您可以使用找到最大值ethtool -g eth2,然后使用进行设置ethtool -G


该链接现在走了,但谷歌仍然有它的缓存:webcache.googleusercontent.com/...
Theuni

而如果谷歌的缓存不起作用,这是自由之路的机器上:web.archive.org/web/20141220043139/https://...
粘土动画
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.