Почему сетевой стек тормозит под нагрузкой и где искать узкое место
Первый шаг — не «ускорять сеть», а понять, где именно растёт задержка: в очередях NIC, в обработке прерываний, в ядре или на уровне приложения. Анализ показал, что одинаковые симптомы могут давать разные слои, поэтому начинать стоит с метрик: drops, softirq, retransmits, RTT, utilization.
Дальше проверяют три точки:
— нагрузку на CPU по ядрам и перекос по IRQ;
— размер очередей и кольцевых буферов сетевой карты;
— поведение сокета: backlog, window scaling, количество повторных передач.
Если на одном ядре копится softirq, а остальные простаивают, стек уже упёрся в распределение прерываний. Если растут retransmits при нормальной полосе, проблема чаще в потере пакетов или в слишком агрессивных таймаутах. Если приложение медленно читает из сокета, сеть будет выглядеть «забитой» даже при свободной линии.
Рекомендуется обратить внимание на метрику p99 latency, а не только на среднюю. Среднее значение скрывает короткие, но критичные всплески. Для устойчивой работы важнее выровнять путь обработки пакета: IRQ affinity, размер буферов, очереди, TCP backlog, batching на стороне приложения.
Итог простой: оптимизация сетевого стека начинается не с тюнинга параметров, а с локализации узкого места. Сначала измеряем, потом меняем одну переменную, затем снова измеряем.
Прокси-инфра
@proxy_infra_desk_arb
Почему сетевой стек тормозит под нагрузкой и где искать узкое место
Этот пост опубликован в Telegram-канале Прокси-инфра. Подписаться можно по ссылке: @proxy_infra_desk_arb.