Мигрируя от старого сервера до нового, после установки всех сервисов, я замечаю, что большое отбросило rx пакеты в моем NIC:
$ 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-раковина-и-статистика-объяснить-и-лечить-сброшенные-пакеты
Также убедитесь, что нет несоответствия скорости и дуплексного режима между вашей сетевой картой и коммутатором. Если ваш коммутатор считает, что ваш сетевой адаптер работает быстрее, чем он есть на самом деле, тогда у вас будут проблемы со стороны сетевого адаптера.
Наконец,Максимальный размер кольцевого буфера вашей сетевой карты может помочь, если основная причина в конечном итоге заключается в производительности перед лицом всплесков. Вы можете найти максимальное значение с помощью ethtool -g eth2
, а затем установить его с помощью ethtool -G
.