How to troubleshoot rx_missed_errors?

23,396

Most drivers interchange their use of the counters rx_missed_errors, rx_fifo_errors, and rx_over_errors, but they typically set one or more of these counters to the MPC (missed packet count) counter, which is incremented when a packet arrives and is lost because the card's FIFO queue is full.

This is the case for the ixgbe driver:

$ 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;

So rx_missed_errors for ixgbe is the MPC.

There's a great blog post on the Intel website that describes the causes of MPC drops using a great analogy: https://communities.intel.com/community/tech/wired/blog/2009/11/04/how-the-kitchen-sink-and-statistics-explain-and-treat-dropped-packets

Also, make sure there isn't a speed and duplex mis-match between your NIC and the switch. If your switch thinks your NIC is faster than it really is, then you'll have problems on the NIC side of things.

Finally, maxing the size of your NIC's ring buffer might help if the root cause ends up being performance in the face of bursts. You can find the max value with ethtool -g eth2 and then set it with ethtool -G.

Share:
23,396

Related videos on Youtube

cuonglm
Author by

cuonglm

Updated on September 18, 2022

Comments

  • cuonglm
    cuonglm almost 2 years

    Migrating from old server to new one, after setting all services, I notice a big dropped rx packets in my NIC:

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

    But /sys/class/net/eth2/statistics/rx_dropped show nothing:

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

    Then, I see that rx_missed_errors:

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

    How can I troubleshoot and find out what cause rx_missed_errors?


    I'm running Ubuntu 12.04.5 LTS, with:

    $ 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
    
    • cuonglm
      cuonglm about 9 years
      @GeraintJones: I updated question.
    • Geraint Jones
      Geraint Jones about 9 years
      Have youu followed this ? sourceforge.net/p/e1000/bugs/383/#fb68
    • Mary
      Mary almost 9 years
      Free associating here: Possibility of configuration mismatch for your NICs between the two servers (and therefore between new server and your network infrastructure)? Any difference running ethtool against NIC on the older server (if that is an option)? Also, any difference plugging in a different port on the NIC in the server, or different port on the switch to which it is connected? For the comparison between the two NICs, use ethtool -k eth2 (instead of -i).
    • Kassandry
      Kassandry almost 9 years
      You might try putting the NIC into promiscuous mode, as outlined here novell.com/support/kb/doc.php?id=7007165 and seeing if the counter keeps incrementing. Was the old server running a kernel older than 2.6.37 as well?
    • vijay rajah
      vijay rajah over 8 years
      I would try to increase the ring buffer size. check with 'ethtool -s eth0'. See if rx_no_buffer_count is high as well. if it is then you need to increase the ring buffer size
  • Theuni
    Theuni almost 7 years
    The link is gone by now, but Google still has it in cache:webcache.googleusercontent.com/…
  • claymation
    claymation over 4 years
    And if Google's cache doesn't work, it's on the wayback machine: web.archive.org/web/20141220043139/https://…