Назад | Перейти на главную страницу

Как устранить ошибки rx_missed_errors?

Переходя со старого сервера на новый, после настройки всех сервисов я замечаю, что на моем сетевом адаптере пропадают большие пакеты 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;

Так rx_missed_errors для ixgbe - это MPC.

На веб-сайте Intel есть отличная запись в блоге, в которой с использованием отличной аналогии описываются причины падения MPC: https://communities.intel.com/community/tech/wired/blog/2009/11/04/how-the-kitchen-sink-and-statistics-explain-and-treat-dropped-packets

Также убедитесь, что между вашей сетевой картой и коммутатором нет несоответствия скорости и дуплексного режима. Если ваш коммутатор считает, что ваша сетевая карта быстрее, чем она есть на самом деле, у вас возникнут проблемы со стороны сетевой карты.

Наконец, максимальное увеличение размера кольцевого буфера вашей сетевой карты может помочь, если основная причина в конечном итоге заключается в производительности перед лицом всплесков. Вы можете найти максимальное значение с помощью ethtool -g eth2 а затем установите его с помощью ethtool -G.