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

Анатомия игровых лагов › L2 ОС и устройство клиента

Разрешение таймера Timer resolution (Windows 15.6ms)

ID причины co-timer · Основной ответственный Команда разработки · Разработка клиента

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

Стандартный таймер Windows работает с шагом 15,6 ms, поэтому «подождать всего 1 ms» на деле растягивается до следующего тика таймера, то есть до 15,6 ms.

Почему Ограничение FPS и отправка пакетов сделаны через Sleep (короткое ожидание) → Следствие ОС будит поток только с шагом 15,6 ms → На экране Интервалы между кадрами и между отправками ввода неравномерные

Симптомы
Микрофризы
Факторы
Джиттер
У кого
Только у меня
Когда
Всегда
Ответственные
Основной ответственный Команда разработки · Разработка клиента
Команда разработки: задачи
Использовать таймеры высокого разрешения, выдерживать интервалы кадров по событиям или V-Sync вместо Sleep.
Цифры для ориентира
С шагом 15,6 ms интервал 16,7 ms выдержать нельзя, поэтому интервал между кадрами прыгает между 15,6 ms и 31,2 ms.
На графике
Высоко с самого начала · распределение интервалов между кадрами
Где смотреть
Смотреть распределение MsBetweenPresents (интервал между кадрами) в PresentMon и пункт «Platform Timer Resolution» в отчёте powercfg /energy (процессы, изменившие разрешение таймера)
Подтверждает
Интервалы между кадрами скапливаются на значениях, кратных 15,6 ms (15,6 ms и 31,2 ms), и игра не запрашивает более высокое разрешение таймера
Опровергает
Если интервалы разбросаны равномерно, дело скорее в причине «Фоновые процессы занимают CPU» или в тяжёлых кадрах, чем в таймере
Чем проверить
Проверка на стороне игрока
Подробнее
В старых версиях Windows, если одна программа переключала таймер на 1 ms, это действовало на все программы. Отсюда и поверье «с открытым браузером игра идёт плавнее». Начиная с Windows 10 версии 2004 настройка действует только на запросившую программу, а Windows 11 может не выполнять запрос окна, которое свёрнуто или полностью перекрыто и не издаёт звука.

Источники

  1. _WDF_TIMER_CONFIG (wdftimer.h) Microsoft
    Точность обычного таймера равна интервалу системного тика, по умолчанию 15,6 ms, у таймера высокого разрешения 1 ms
  2. timeBeginPeriod function (timeapi.h) Microsoft
    До Windows 10 версии 2004 настройка глобальная, начиная с неё действует только на запросивший процесс. Windows 11 не гарантирует высокое разрешение процессам со свёрнутыми или перекрытыми окнами
  3. CreateWaitableTimerExW function (synchapi.h) Microsoft
    Флаг ожидающего таймера высокого разрешения CREATE_WAITABLE_TIMER_HIGH_RESOLUTION
  4. PresentMon Capture Application (README-CaptureApplication.md) Intel
    MsBetweenPresents: время между текущим и предыдущим вызовом Present() (ms)
  5. Results for the Idle Energy Efficiency Assessment Microsoft
    Разрешение системного таймера по умолчанию 15,6 ms, процессы, изменившие его, видны в пункте «Platform Timer Resolution» отчёта об энергопотреблении
  6. Powercfg command-line options Microsoft
    powercfg /energy: анализирует систему и создаёт отчёт об энергопотреблении (HTML)

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

Тот же слой: L2 ОС и устройство клиента

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

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