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

Анатомия игровых лагов › Проблемы только у части игроков

Ограничение обработки в фоновом окне Background window throttling

ID причины pt-background · Основной ответственный Команда разработки · Разработка клиента · Совместно Внешние стороны · Внешние стороны

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

Для клиента в фоновом окне игра, движок и ОС снижают частоту кадров и объём обработки. Полученные пакеты не успевают обрабатываться, копятся и переполняют буфер.

Почему Ограничение кадров в фоне в настройках игры или графического драйвера (например, в драйвере NVIDIA задаётся от 20 до 200 в секунду), энергосбережение, настройка движка останавливаться в фоне. ОС тоже отдаёт приоритет по CPU и GPU окну на переднем плане → Следствие За кадр обрабатывается меньше пакетов, очередь растёт, а при переполнении буфера приёма пакеты отбрасываются → На экране Когда окно выводят на передний план, всё появляется разом, или некоторые NPC так и не появляются

Симптомы
Невидимки / фантомы, Перемотка, Дисконнект
Факторы
Остановка, Потери
У кого
Один из клиентов на одном ПК
Когда
После бездействия, Всегда
Ответственные
Основной ответственный Команда разработки · Разработка клиента · Совместно Внешние стороны · Внешние стороны
Команда разработки: задачи
Продолжать приём сетевых данных в отдельном от игрового цикла потоке, гарантировать минимальный объём обработки и в фоне, включить в движке выполнение в фоне (в Unity это runInBackground).
Внешние стороны: задачи
Посоветовать игрокам отключить ограничение кадров в фоне в графическом драйвере и режим энергосбережения ПК.
Цифры для ориентира
В Unity при выключенном runInBackground игровой цикл останавливается в момент, когда окно теряет фокус. Если приём идёт только в этом цикле, всё это время пакеты вообще не обрабатываются.
На графике
Провал, затем пачка · интервал между кадрами клиента, число обработанных пакетов за кадр
Где смотреть
На одном ПК держать одно окно на переднем плане, а другое на заднем, менять их местами и сравнивать. Измерить в PresentMon интервал между кадрами обоих процессов, а если есть игровые логи, смотреть состояние фокуса окна и число обработанных пакетов за кадр
Подтверждает
Только в фоновом окне интервал между кадрами сильно растёт (при ограничении в драйвере выходит на плато на интервале, соответствующем заданной частоте кадров) или обработка останавливается, а если поменять окна местами, проблема переходит к другому клиенту
Опровергает
Если то же самое бывает и в окне на переднем плане, фоновые ограничения ни при чём. Если независимо от положения окна сбоит всегда один и тот же клиент, причина в разных настройках отображения или в несовпадении версий
Чем проверить
Проверка на стороне игрока

Источники

  1. Application.runInBackground Unity
    runInBackground по умолчанию false, и в этом случае приложение в фоне ставится на паузу
  2. Manage 3D Settings (reference) — NVIDIA Control Panel Help NVIDIA
    Background Application Max Frame Rate: ограничивает частоту кадров игры в фоне значением от 20 до 200 в секунду
  3. Priority Boosts Microsoft
    Windows поднимает приоритет процесса с окном на переднем плане так, чтобы он был не ниже приоритета фоновых процессов
  4. PresentMon README Intel
    Инструмент, который собирает время кадра на CPU, GPU и дисплее для каждого графического приложения Windows

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

Тот же слой: Проблемы только у части игроков

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

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