从旧服务器迁移到新服务器,设置完所有服务后,我注意到我的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
大多数驱动程序交换使用计数器rx_missed_errors , rx_fifo_errors和rx_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;
所以ixgbe的rx_missed_errors是MPC。
英特尔网站上有一篇很棒的博客文章,用一个很好的比喻来描述MPC掉线的原因: https : //communities.intel.com/community/tech/wired/blog/2009/11/04/how-the-kitchen -sink-和统计的解释和治疗掉线,包
另外,请确保您的网卡和交换机之间没有速度和双工错误匹配。 如果你的交换机认为你的网卡速度比实际速度快,那么你在网卡方面会遇到问题。
最后,如果根本原因在突发情况下最终导致性能下降,那么最大化NIC的环形缓冲区的大小可能会有所帮助。 你可以用ethtool -g eth2find最大值,然后用ethtool -G设置它。