Как найти, какие пакеты упали

Я получаю тысячи упакованных пакетов с сетевой карты Broadcom:

eth1      Link encap:Ethernet  HWaddr 01:27:B0:14:DA:FE
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:2746252626 errors:0 dropped:1151734 overruns:0 frame:0
          TX packets:4109502155 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:427998700000 (408171.3 Mb)  TX bytes:3530782240047 (3367216.3 Mb)
          Interrupt:40 Memory:d8000000-d8012700

Вот установленная версия:

filename:       /lib/modules/2.6.27.54-0.2-default/kernel/drivers/net/bnx2.ko
version:        1.8.0
license:        GPL
description:    Broadcom NetXtreme II BCM5706/5708/5709 Driver

Пакеты упаковываются в пакеты объемом от 500 до 5000 пакетов несколько раз в час. Сервер (работает Postgres) работает нормально - только dropps раздражают.

Попробовав много разных вещей, я спрашиваю: как я могу узнать, откуда появились пакеты и почему они были сброшены?

Ответ 1

(Для тех, кто приходит к этому с помощью поиска), я видел ту же проблему (также с модулем bnx2, IIRC).

Вы можете попытаться отключить сервис irqbalance. В моем случае это полностью остановило решение.

Также обратите внимание, что не так давно было много обновлений (RHEL 6) для irqbalance. Обновления прошивки также должны быть проверены как для основной системы, так и для платы ethernet.

Мы видели, что это только очень большая подсеть с очень большим количеством широковещательной/многоадресной активности. Мы не видели это на одном и том же оборудовании на менее шумной, но все еще очень активной части сети.

Потенциально, настройка размера буфера Ethernet-сети для сетевого адаптера также может быть полезна. Я знаю, что в sysctl произошли некоторые изменения в этой загруженной сети...

Ответ 2

Отброшенный пакет означает, что буфер, который используется для хранения пакета для пересылки/обработки, заполнен. Акт поиска пакетов данных для информации подразумевает, что у вас есть данные, которые нужно посмотреть в первую очередь (чего вы не делаете, потому что не было места для его хранения).

Хороший способ обойти это, чтобы вы могли видеть, какие данные отбрасываются, - это просмотр дампа вашего трафика для запросов повторной передачи TCP, выходящих из вашего сервера. Когда TCP-пакет отсутствует, по какой-либо причине ваш сервер попросит его переслать. Повторная передача даст вам контекст беседы, который вы ищете.

Я действительно предлагаю взглянуть на коммутатор/маршрутизатор, к которому подключен ваш сервер. Он сможет дать вам представление о потерях и пропускной способности интерфейса на вашем сервере, что позволит вам диагностировать, например, если ваша карта слишком медленная для провода.

ИЗМЕНИТЬ

В этом сообщении в блоге приводится инструмент под названием dropwatch, который также может дать вам некоторые подсказки.

Ответ 3

Вы можете столкнуться с https://www.novell.com/support/kb/doc.php?id=7007165.

цитата:

Начиная с ядра 2.6.37, он изменил значение количества выпавших пакетов. Раньше упавшие пакеты, скорее всего, были связаны с ошибкой. Теперь, rx_dropped counter показывает статистику для отброшенных кадров из-за:

Софтнет backlog full - (Измерено из /proc/net/softnet _stat)

Плохие/неумышленные теги VLAN

Неизвестные/незарегистрированные протоколы

Кадры IPv6, если сервер не настроен для IPv6

Если какие-либо фреймы соответствуют этим условиям, они удаляются до стека протоколов, а счетчик rx_dropped увеличивается.