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

Анатомия игровых лагов › L9 Процесс игрового сервера

Патч изменил характер трафика Patch changes traffic pattern

ID причины sp-patch-traffic · Основной ответственный Команда разработки · Разработка сервера · Совместно Команда инфраструктуры · Серверная инфраструктура, Команда инфраструктуры · Сетевая инфраструктура

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

Если новый контент, эффекты и синхронизируемые поля увеличивают размер и частоту пакетов, сервер, который работал нормально, после патча упирается в MTU, пропускную способность или лимиты по числу пакетов.

Почему С патчем добавились эффекты умений, синхронизируемые поля и данные предметов, и пакеты стали больше или чаще → Следствие Большие пакеты превышают MTU и фрагментируются, а возросший объём упирается в пропускную способность, лимит PPS в облаке или буфер отправки → На экране Сразу после патча в людных местах телепортация, «съеденные» умения и задержка ввода. В инфраструктуре ничего не меняли, а потерь стало больше

Симптомы
Телепортация, Съеденные действия / роллбэк, Задержка ввода
Факторы
Потери, Задержка
У кого
Весь сервер, Одна локация или канал, Один регион или провайдер
Когда
При наплыве игроков, Вечерний пик, Всегда
Ответственные
Основной ответственный Команда разработки · Разработка сервера · Совместно Команда инфраструктуры · Серверная инфраструктура, Команда инфраструктуры · Сетевая инфраструктура
Команда разработки: задачи
Самим разбивать данные на пакеты не больше 1 200 байт. Для новых синхронизируемых полей отправлять только изменения и снижать частоту по расстоянию и важности. Перед деплоем сравнить на тестовом сервере число пакетов и байтов в секунду на игрока и размер самого большого пакета с предыдущей сборкой. Записывать версию сборки в метрики трафика.
Команда инфраструктуры: задачи
Серверы и ОС: отмечать время деплоя на графиках, сравнивать число пакетов и байтов в секунду на игрока и средний размер пакета до и после деплоя, настроить алерты по счётчикам превышения лимитов инстанса, при необходимости взять инстанс крупнее. Сеть: проверить пределы производительности файрвола, балансировщика нагрузки и оборудования защиты от DDoS и не блокируют ли они фрагменты.
Цифры для ориентира
Безопасный размер UDP-пакета не больше 1 200 байт. MTU пути в интернете обычно 1 500 байт, а через туннель ещё меньше (в GRE-туннеле 1 476 байт). Пакеты больше MTU пути фрагментируются или отбрасываются, а фрагментированный пакет теряется целиком при потере одного фрагмента. Если число пакетов в секунду на игрока растёт на 20%, на весь сервер оно тоже растёт на 20%, и инстанс, который работал близко к лимиту, сразу его превышает.
На графике
Ступенька вверх с определённого момента · пакеты и байты в секунду на игрока, средний размер пакета
Где смотреть
Разделить пакеты и байты в секунду на NIC сервера (rxpck/s, txpck/s, rxkB/s, txkB/s в sar -n DEV, для EC2 NetworkPacketsOut и NetworkOut) на онлайн и сравнить до и после деплоя. Средний размер пакета: байты ÷ пакеты, распределение размеров: статистика Packet Lengths в Wireshark по захвату пакетов
Подтверждает
Сразу после деплоя пакеты и байты на игрока или средний размер пакета ступенькой поднимаются и так и остаются, и с того же момента растут число фрагментов, созданных сервером (fragcrt/s в sar -n IP), или счётчики превышения лимитов инстанса (pps_allowance_exceeded и bw_out_allowance_exceeded в AWS ENA)
Опровергает
Если характер трафика до и после деплоя одинаковый, а выросли только задержки и потери, смотреть изменения инфраструктуры в то же время (настройки, маршруты, оборудование, обновления ОС и ядра)
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)
Подробнее
Если приходят жалобы «до патча всё было нормально», это первая причина на стороне игры, которую стоит проверить наряду с изменениями инфраструктуры. Даже если в патчноуте нет сетевых изменений, один новый эффект или синхронизируемое поле в людном месте умножается на сотни игроков. Где именно возросший трафик упирается в пределы, разобрано в причинах «IP-фрагментация UDP-пакетов», «Превышен лимит PPS в облаке», «Исчерпание пропускной способности NIC», «Нехватка буферов сокетов в ядре» и «Перегрузка промежуточного оборудования (файрвол, IPS, защита от DDoS)». Эта причина описывает случай, когда к пределу подвёл игровой патч, поэтому, прежде чем поднимать лимиты, сначала сокращают трафик, добавленный патчем. Если в то же время обновляли ОС и ядро, отличить эту причину от причины «Изменение производительности после обновления ОС, ядра, драйверов или прошивки» помогает то, изменился ли трафик на игрока.

Источники

  1. RFC 8085: UDP Usage Guidelines IETF
    UDP-приложениям не следует отправлять датаграммы больше MTU пути (SHOULD NOT). При потере одного фрагмента теряется весь фрагментированный пакет, а некоторые NAT и файрволы отбрасывают все фрагменты
  2. RFC 8899: Packetization Layer Path MTU Discovery for Datagram Transports IETF
    Для датаграммных протоколов вроде UDP базовым безопасным размером (BASE_PLPMTU) рекомендуется 1 200 байт
  3. Maximum transmission unit and maximum segment size Cloudflare
    MTU пути в интернете 1 500, через GRE-туннель 1 476
  4. Monitor network performance for ENA settings on your EC2 instance AWS
    pps_allowance_exceeded и bw_out_allowance_exceeded: число пакетов, попавших в очередь или отброшенных из-за превышения лимитов PPS или исходящей пропускной способности инстанса
  5. sar(1) — Linux manual page sysstat
    rxpck/s и txpck/s (пакеты в секунду), rxkB/s и txkB/s (KB в секунду) в sar -n DEV, fragcrt/s в sar -n IP (IP-фрагменты, созданные за секунду, ipFragCreates)
  6. CloudWatch metrics that are available for your instances AWS
    NetworkPacketsOut (число пакетов, отправленных инстансом через все сетевые интерфейсы) и NetworkOut (число отправленных байтов)
  7. 8.7. Packet Lengths Wireshark
    Делит захваченные пакеты на диапазоны длины и показывает для каждого количество, среднее, минимум и максимум

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

Тот же слой: L9 Процесс игрового сервера

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

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