GRO и LRO объединяют несколько пакетов в один, чтобы снизить нагрузку на CPU. При некоторых настройках маленький игровой пакет ненадолго ждёт следующий, чтобы объединиться с ним.
Почему NIC или ядро ОС объединяет пришедшие пакеты и обрабатывает их вместе → Следствие Если включено аппаратное объединение (LRO) или задано время ожидания объединения, пакет ненадолго ждёт следующий → На экране Небольшой рост задержки (обычно не больше нескольких десятков µs)
Основной ответственный Команда инфраструктуры · Серверная инфраструктура
Команда инфраструктуры: задачи
Подстроить под игровой трафик (выключить LRO, проверить настройку времени ожидания объединения), эффект обычно мал, поэтому проверять после других причин.
На графике
Высоко с самого начала · время туда и обратно внутри одного ЦОД
Где смотреть
Проверить состояние lro и gro через ethtool -k и значение gro_flush_timeout в настройках устройства в sysfs, сравнить время туда и обратно для маленьких пакетов внутри ЦОД до и после изменения
Подтверждает
LRO включён или gro_flush_timeout больше 0, и если выключить LRO или поставить 0, время туда и обратно для маленьких пакетов сокращается
Опровергает
Если разница после изменения в пределах единиц µs, причина в другом
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)
Источники
NAPILinux kernel Большой gro_flush_timeout даёт пакетную обработку, но при низкой нагрузке добавляет задержку