Анализ потерь пакетов на интерфейсах Linux: RX/TX drops, ethtool и Ring Buffers
- Счетчики
RX dropped,TX droppedилиRX errorsв выводеip -s linkнепрерывно растут. - В
dmesgпоявляются сообщенияeth0: rx queue 0 full, packet droppedили переполнениеnetdev backlog. - Падение производительности High-Load серверов (NGINX, Redis, Kafka) при всплесках сетевого трафика (Microbursts).
- Неравномерная утилизация ядер процессора прерываниями сетевых адаптеров (SoftIRQ bottleneck).
1. Локализация уровня сброса пакетов
В сетевом стеке Linux пакет может быть отброшен на трех уровнях:
- Hardware / NIC Driver Ring Buffer: переполнение кольцевого буфера сетевой карты до вызова ядра.
- Kernel Backlog (NAPI / SoftIRQ): ядро не успевает забирать пакеты из очередей подсистемы NAPI.
- Socket Buffer: переполнение буфера сокета приложения (TCP/UDP Rmem).
2. Диагностика и увеличение Ring Buffers с помощью ethtool
# Просмотр текущих и максимально поддерживаемых размеров буферов RX/TX
ethtool -g eth0
# Увеличение кольцевых буферов до аппаратного максимума (например, 4096)
ethtool -G eth0 rx 4096 tx 40963. Анализ переполнения системных очередей ядра (/proc/net/softnet_stat)
# Чтение статистики softnet_stat (вывод в hex)
cat /proc/net/softnet_statЗначение колонок:
- 1 колонка: общее количество обработанных пакетов.
- 2 колонка: количество пакетов, сброшенных из-за переполнения
netdev_max_backlog(должно быть 0). - 3 колонка: количество раз, когда обработка прерываний завершилась по тайм-ауту
netdev_budget.
4. Тюнинг системных параметров в Sysctl
# /etc/sysctl.d/99-network-performance.conf
# Увеличение максимальной очереди входящих пакетов драйвера
net.core.netdev_max_backlog = 10000
# Увеличение кванта времени на обработку пакетов за один цикл прерывания
net.core.netdev_budget = 600
net.core.netdev_budget_usecs = 8000
# Увеличение максимального размера очередей сокетов
net.core.optmem_max = 20485760
net.core.rmem_default = 26214400
net.core.rmem_max = 67108864sysctl --system5. Распределение прерываний по ядрам CPU (RSS и RPS)
# Включение многопоточной обработки очередей RSS
systemctl enable --now irqbalance
# Проверка детальной статистики аппаратных очередей сетевой карты
ethtool -S eth0 | grep -E "drop|over|miss|error|buff" Частые вопросы (FAQ)
В чем разница между счетчиками 'RX dropped' и 'RX errors' в выводе 'ip -s link'?
'RX errors' указывает на физические ошибки на линии (битые биты, сбои контрольной суммы CRC, повреждение кабеля или SFP модуля). 'RX dropped' означает, что аппаратно целый пакет был выброшен из-за нехватки буферной памяти в операционной системе или драйвере.
Что такое RSS (Receive Side Scaling) на сетевой карте?
RSS — это аппаратная технология сетевых адаптеров, которая распределяет входящие пакеты по нескольким аппаратным очередям на основе хеша (IP, порты), привязывая каждую очередь к отдельному ядру CPU для параллельной обработки прерываний.
Сохраняются ли настройки 'ethtool -G' после перезагрузки сервера?
Нет, команды ethtool сбрасываются после ребута. Для постоянного сохранения добавьте директиву в конфигурационные файлы сетевых интерфейсов (systemd-networkd, netplan или /etc/sysconfig/network-scripts).
Что такое SoftIRQ перегрузка (ksoftirqd)?
Когда частота прерываний превышает возможности ядра, обработка сетевых пакетов перекладывается на системный процесс ksoftirqd/X. Если процесс ksoftirqd утилизирует ядро на 100%, новые входящие пакеты начинают немедленно отбрасываться.