<b>Сетевой стек тормозит не на линии, а в очередях, прерываниях и копировании пакетов</b>
Оптимизация начинается с разделения узких мест. Если растёт latency, но канал не забит, ищите:
— очередь на приёмнике;
— перегрузку softirq;
— частые переключения контекста;
— лишние копирования между буферами;
— неверный размер буфера сокета.
Анализ показал, что «быстрый» интерфейс сам по себе ничего не гарантирует. Важны настройки обработки пакетов: распределение нагрузки по ядрам, batching, IRQ affinity и корректный выбор backlog. Если один поток принимает всё, стек упирается не в пропускную способность, а в планировщик.
На практике сначала снимают базовую картину: pps, drops, retransmits, load average по CPU, долю времени в sys и softirq. Затем сравнивают поведение на коротких и длинных потоках: для мелких пакетов критичны прерывания и очереди, для больших — копирование и лимиты буферов. Рекомендуется обратить внимание на метрику drop rate на каждом слое, а не только на интерфейсе.
Если система регулярно теряет пакеты, не начинайте с «тюнинга ради тюнинга». Сначала уберите лишний путь данных, затем выровняйте распределение по ядрам, и только после этого меняйте размеры буферов. Так стек становится предсказуемым, а не просто «покрученным».
Прокси-инфра
@proxy_infra_desk_arb
<b>Сетевой стек тормозит не на линии, а в очередях, прерываниях и копировании пакетов</b>
Этот пост опубликован в Telegram-канале Прокси-инфра. Подписаться можно по ссылке: @proxy_infra_desk_arb.