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), чтобы расчёты успевали.
VALORANT's 128-Tick ServersRiot Games 128-тиковый сервер должен укладываться в 7,8125 ms на кадр. Время серверного кадра измеряют по подсистемам и делят бюджет между ними
HED-GP Technical Retrospective: What a HED-acheCCP Games При перегрузке EVE Online замедляет игровое время через Time Dilation, нижний предел 10% (в 10 раз медленнее). В обычном режиме CPU узла ниже 80%
Handling variation in timeUnity Если симуляция с фиксированным шагом отстаёт, догоняющие шаги выполняются пачкой, а время сверх лимита отбрасывается, и игровое время идёт медленнее реального