한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Анатомия игровых лагов › L6 Сетевая карта сервера

Избыточное объединение прерываний Interrupt coalescing

ID причины nic-coalesce · Основной ответственный Команда инфраструктуры · Серверная инфраструктура

Открыть карточку в основной версии с иллюстрациями и экспериментами →

Если ради разгрузки CPU NIC копит пакеты и сообщает о них разом, пакеты задерживаются на время накопления.

Почему NIC копит пакеты определённое время или до определённого числа и только потом сообщает о них → Следствие Пока идёт накопление, пакеты ждут → На экране Небольшой рост задержки. Обычно он мал, но при чрезмерных настройках доходит до миллисекунд

Симптомы
Задержка ввода
Факторы
Задержка
У кого
Весь сервер
Когда
Всегда
Ответственные
Основной ответственный Команда инфраструктуры · Серверная инфраструктура
Команда инфраструктуры: задачи
Включить адаптивное объединение, подобрать значения под игровой сервер (ethtool -C).
Цифры для ориентира
Обычно от десятков до сотен µs. Для игр это, как правило, пренебрежимо мало, но при чрезмерных настройках вырастает до миллисекунд.
На графике
Высоко с самого начала · время туда и обратно внутри одного ЦОД
Где смотреть
Посмотреть текущие настройки объединения через ethtool -c (adaptive-rx, rx-usecs, rx-frames) и сравнить время ping туда и обратно до другого сервера в том же ЦОД до и после изменения настроек
Подтверждает
rx-usecs задан большим, сотни µs и больше, и при его уменьшении время туда и обратно внутри ЦОД сокращается на ту же величину
Опровергает
Если после уменьшения время туда и обратно не меняется, причина в другом
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)

Источники

  1. Linux Driver for Intel(R) Ethernet Network Connection (e1000e) Linux kernel
    По умолчанию адаптивное управление прерываниями, 4 000–20 000 раз в секунду (интервал 50–250 µs), меньше прерываний экономит CPU, но увеличивает задержку
  2. Linux Base Driver for Intel(R) Ethernet Network Connection (e1000) Linux kernel
    RxIntDelay позволяет задержать прерывание приёма с шагом 1,024 µs на значение до 65 535 (около 67 ms), чем больше значение, тем больше задержка приёма
  3. ethtool(8) — Linux manual page ethtool
    Настройки adaptive-rx, rx-usecs и rx-frames в ethtool -C

Смотрите также

Тот же слой: L6 Сетевая карта сервера

Причины с тем же симптомом (Задержка ввода) на других слоях

Карточка в основной версии с иллюстрациями и экспериментами