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

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

Превышение бюджета тика Tick overrun

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

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

Если работа одного тика не укладывается в бюджет, интервал тиков сервера растягивается, и вся локация идёт замедленно или с микрофризами.

Почему Работа на один тик (например, 50 ms) не укладывается в бюджет → Следствие Состояние игры, которое нужно считать 20 раз в секунду, считается только 8 раз → На экране Слоумо во всей локации (в зависимости от архитектуры сервера микрофризы), умения срабатывают с опозданием

Симптомы
Слоумо, Задержка ввода, Микрофризы
Факторы
Остановка
У кого
Одна локация или канал, Весь сервер
Когда
При наплыве игроков, Вечерний пик
Ответственные
Основной ответственный Команда разработки · Разработка сервера · Совместно Команда инфраструктуры · Серверная инфраструктура
Команда разработки: задачи
Сократить дорогие расчёты, распределить тик по нескольким потокам, распределять игроков (по каналам), записывать время обработки тика в метрики.
Команда инфраструктуры: задачи
Добавить время тика и загрузку CPU по ядрам в мониторинг и алерты, рассмотреть CPU и инстансы с высокой однопоточной производительностью (частотой).
Цифры для ориентира
У 20-тикового сервера бюджет 50 ms, у 30-тикового 33 ms, у 60-тикового 16,7 ms. На случай внезапного наплыва безопаснее держать запас и в обычное время расходовать примерно половину бюджета.
На графике
Растёт вслед за онлайном и нагрузкой · время тика сервера, число игроков по зонам и каналам, CPU игрового потока
Где смотреть
Вывести на один график время обработки тика (p99) и число превышений бюджета тика из метрик сервера вместе с числом игроков по зонам и каналам. Если метрик тика нет, смотреть загрузку CPU игрового потока через pidstat -t 1
Подтверждает
В моменты наплыва игроков время тика превышает бюджет (50 ms для 20-тикового сервера), а загрузка CPU игрового потока всё это время держится около 100%
Опровергает
Если тик не укладывается в бюджет, а CPU игрового потока загружен слабо, причина в ожидании (пауза GC, блокировки, синхронные вызовы). Если bcc runqlat показывает долгое ожидание в очереди выполнения, потоку не достаётся CPU: дело в нехватке CPU или избытке потоков
Чем проверить
Нужны логи и метрики игрового сервера или клиента
Подробнее
Как выглядят опаздывающие тики, зависит от архитектуры сервера. Если сервер за каждый тик продвигает состояние игры на фиксированное время (например, 50 ms), замедляется само игровое время, и получается слоумо. Если сервер за раз продвигает игру на реально прошедшее время, скорость игры сохраняется, но пакеты приходят реже, а объекты сдвигаются рывками, и это выглядит как микрофризы и телепортация. В обоих случаях отклик на ввод запаздывает. Если весь сервер обслуживает один игровой поток, тормозит весь сервер, а если у каждой локации свой поток, тормозит эта локация. Некоторые игры, например EVE Online, в крупных сражениях намеренно замедляют игровое время до 10 раз (Time Dilation), чтобы расчёты успевали.
Реальные инциденты
CCP Games 2014: EVE Online: перегрузка сервера во время масштабной битвы флотов в HED-GP

Источники

  1. VALORANT's 128-Tick Servers Riot Games
    128-тиковый сервер должен укладываться в 7,8125 ms на кадр. Время серверного кадра измеряют по подсистемам и делят бюджет между ними
  2. HED-GP Technical Retrospective: What a HED-ache CCP Games
    При перегрузке EVE Online замедляет игровое время через Time Dilation, нижний предел 10% (в 10 раз медленнее). В обычном режиме CPU узла ниже 80%
  3. Handling variation in time Unity
    Если симуляция с фиксированным шагом отстаёт, догоняющие шаги выполняются пачкой, а время сверх лимита отбрасывается, и игровое время идёт медленнее реального
  4. pidstat(1) — Linux manual page sysstat
    -t дополнительно выводит статистику по потокам процесса (загрузку CPU и т. п.)
  5. Demonstrations of runqlat, the Linux eBPF/bcc version IO Visor
    Показывает гистограмму задержки в очереди выполнения планировщика (сколько задача ждала, пока получит CPU)

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

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

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

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