При большом PPS сервер может начать терять пакеты, хотя канал ещё далеко не забит.
Один из интересных параметров здесь -
netdev_budget: сколько пакетов kernel может обработать за один проход NAPI.Посмотреть текущее значение:
sysctl net.core.netdev_budget
Если входящий поток постоянно превышает этот лимит, обработка переносится на следующие проходы. В результате растут очереди и latency, а CPU может выглядеть вполне нормально.
Посмотреть, есть ли проблема именно на уровне softnet:
cat /proc/net/softnet_stat
Особенно интересны drops и количество обработанных пакетов. Если счётчики начинают быстро расти, проблема уже ближе к обработке пакетов ядром, а не к приложению.
Ещё один параметр связан со временем, которое kernel готов потратить на один такой проход:
sysctl net.core.netdev_budget_usecs
И вот здесь начинается интересный баланс: слишком маленький budget может оставить пакеты ждать следующего прохода, а слишком большой - позволить сетевой обработке надолго занять CPU и повлиять на остальные задачи.
На загруженном сервере поэтому полезно смотреть не только bandwidth, но и PPS, softirq, softnet drops и NAPI budget.
N.A.

