Если кольцевой буфер, где NIC ненадолго держит пакеты, маленький, при резком наплыве пакетов он переполняется, и пакеты отбрасываются.
Почему Кольцевой буфер оставлен маленьким, со значением по умолчанию (256–2 048 слотов в зависимости от драйвера) → Следствие Во время всплеска трафика буфер переполняется раньше, чем CPU успевает забрать пакеты → На экране Потери только в моменты всплесков (телепортация, съеденные умения). В логах игрового сервера следов нет
Основной ответственный Команда инфраструктуры · Серверная инфраструктура
Команда инфраструктуры: задачи
Увеличить кольцевой буфер (ethtool -G), следить за счётчиками отбрасываний (rx_missed_errors и другие в ethtool -S, названия зависят от драйвера).
Цифры для ориентира
При потоке 1 млн пакетов в секунду 1 024 слота заполняются примерно за 1 ms. Достаточно CPU один раз опоздать за это время, и буфер переполнится. У большинства NIC буфер можно увеличить до нескольких тысяч слотов.
На графике
Случайные всплески · счётчик отбрасываний при приёме в NIC
Где смотреть
Собирать с коротким интервалом счётчики отбрасываний при приёме из ethtool -S (rx_missed_errors, rx_fifo_errors и т. п., названия зависят от драйвера) и missed из ip -s -s link, через ethtool -g проверить текущий и максимальный размер кольцевого буфера
Подтверждает
В моменты всплесков счётчики отбрасываний растут, а текущий размер буфера намного меньше максимального. После увеличения буфера отбрасываний становится меньше
Опровергает
Если счётчики отбрасываний не меняются, а потери есть, дело на следующем этапе в ядре ОС («Нехватка буферов сокетов в ядре») или на сетевом участке. Если %soft одного ядра 100%, это «Все прерывания NIC на одном ядре»