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