Измерение задержек и PresentMon
На этой странице
PCBenchmarkX отдельно меряет внутреннюю задержку обработки и задержку вывода кадра. Эти программные метрики не описывают весь путь от щелчка мыши до свечения пикселя на экране. Полный измерительный цикл описан в методике.
Собственный программный стимул
Заголовок раздела «Собственный программный стимул»Постоянный поток генерирует сигналы с детерминированными интервалами 8-12 мс. Если Windows позволяет, он создаёт ожидающий таймер высокой точности; иначе использует обычный ожидающий таймер. Ожидание события обходится без непрерывного опроса, который занимал бы ядро. Глобальное разрешение системного таймера при этом не меняется.
Для каждого сигнала логируются запланированный срок, пробуждение генератора, фактический сигнал, пробуждение получателя, симуляция, отправка команд, таймстемпы GPU и события показа. Общий идентификатор кадра связывает все этапы.
Плановый срок → пробуждение генератора → сигнал ↓ пробуждение получателя ↓ CPU → команды → GPU ↓ Present → событие выводаВ этих лентах отдельно видны и опоздание таймера, и задержка пробуждения получателя. Начало Core Latency — это фактический сигнал, поэтому шаг от планового срока до сигнала в этой метрике не считается.
Постадейная разбивка пути задержки
Заголовок раздела «Постадейная разбивка пути задержки»Результат содержит постадейную разбивку измеренного пути latency_path — отдельно для Baseline и Loaded. Стадии считаются от фактического сигнала:
| Стадия | Что измеряет |
|---|---|
signal_to_consumer_wake |
от сигнала до пробуждения получателя |
cpu_processing |
CPU-обработку: симуляцию и подготовку данных кадра |
cpu_end_to_submit_start |
паузу от конца CPU-работы до начала подготовки отправки |
workload_submit_cpu_span |
подготовку и запись команд графического API |
submit_start_to_gpu_begin |
от начала подготовки до начала GPU-работы; это не чистая задержка очереди |
gpu_execution |
само выполнение GPU-работы, в тактах GPU |
| presentation spans | показ: обёртку Present и интервалы от сигнала и от конца GPU-работы до ScreenTime |
Каждая стадия даётся распределением со статистиками и перцентилями. Сегменты считаются по каждой паре отметок отдельно, а не вычитанием двух медиан. Если конечная отметка стадии отсутствует или недостоверна, её распределение остаётся пустым — подставных значений нет. Опоздание таймера (расхождение планового срока и фактического сигнала) записывается как отдельная диагностика до сигнала и в суммарные значения пути не входит.
QPC и собственные GPU timestamps
Заголовок раздела «QPC и собственные GPU timestamps»CPU-время записывается через QueryPerformanceCounter. Для GPU движок размещает две timestamp query вокруг измеряемой работы, получает частоту очереди через GetTimestampFrequency и переводит разность тиков в миллисекунды:
GPU work, ms = (GPU_end − GPU_begin) × 1000 / GPU_frequencyПо документации Microsoft по D3D12 timing, timestamp query отражает прохождение работы до конца конвейера, а GPU- и CPU-счётчики увязываются через GetClockCalibration.
Калибровочная пара GPU/QPC позволяет выразить завершение GPU-работы на той же временной шкале, что и сигнал:
GPU_completion_QPC = calibration_QPC + (GPU_end − calibration_GPU) × QPC_frequency / GPU_frequency
Core Latency, ms = (GPU_completion_QPC − signal_QPC) × 1000 / QPC_frequencyТочность этой оценки во многом зависит от того, насколько точно сопоставлены часы CPU и GPU. Она всё равно не покрывает USB-путь мыши, время сканирования матрицы или отклик пикселя. Microsoft отдельно описывает нюансы высокоточных отметок QPC.
Baseline и Loaded
Заголовок раздела «Baseline и Loaded»Baseline замеряет задержку в минимальной конфигурации этой нагрузки. Loaded работает с GPU-нагрузкой, откалиброванной на 8,333333 мс, то есть на вычислительный бюджет примерно 120 Гц. Физический монитор может иметь другую частоту.
Калибровка изменяет сложность внутри шейдера в диапазоне 1-4096. Число проходов остаётся фиксированным: четыре постпрохода. Сначала подбирается диапазон вокруг целевого времени, затем он уточняется и выбранная конфигурация проверяется. Чтобы занять то же время на быстрой видеокарте, нужна более сложная работа.
В Performance объём работы фиксирован. В Loaded Latency нагрузка калибруется, чтобы время GPU-работы было близким на разных видеокартах. Полученные временные отметки после измерения не нормализуются.
Вывод кадров теста задержки идёт через отдельный презентационный путь: безрамочное окно в режиме flip-discard, максимальная задержка кадра (maximum frame latency) 1, ожидаемый объект DXGI и tearing, если система его поддерживает. Этот путь отделён от фиксированной нагрузки производительности, которая выполняется вне экранного буфера и не вызывает Present.
Роль PresentMon
Заголовок раздела «Роль PresentMon»Для событий показа используется библиотека PresentMon 2.5.1. Это ETW-проект анализа графических событий в Windows, описанный его авторами. Procmon / Process Monitor в этом измерительном конвейере не применяется.
PCBenchmarkX поднимает собственную сессию сбора, отбирает события своего процесса и связывает кадры с программными сигналами. Для этого не нужна отдельная служба и ручной запуск отдельного PresentMon.
Сохраняются дополнительные интервалы:
- от сигнала до
Present; - от
PresentдоScreenTime; - от сигнала до
ScreenTime.
ScreenTime — это программное событие показа кадра; фотодиод для измерения света с экрана не используется. Метрики показа не входят в PC Score; что в него входит, описано в расчёте баллов. Поднятие сессии ETW может требовать запуска от имени администратора или членства в группе «Пользователи журнала производительности». Если сессию поднять не удалось, блока этой диагностики не будет, а сбой фиксируется в результате явно. Отсутствие данных не равно нулевой задержке.
GPU-время PresentMon также хранится отдельно от собственного D3D12-времени. Разработчики PresentMon отмечают ограничения точности GPU-метрик при HAGS. Поэтому движок не подменяет собственные GPU timestamps оценкой из ETW.
Что разработано в PCBenchmarkX
Заголовок раздела «Что разработано в PCBenchmarkX»В PCBenchmarkX разработаны генератор сигналов, сопоставление этапов кадра, CPU-симуляция, D3D12-нагрузки, калибровка Loaded, порядок повторяющихся блоков, сбор измерений, статистическая обработка и модель баллов. QPC и D3D12 предоставляет Windows. Для сбора графических событий через ETW используется открытый проект PresentMon.
Технические сведения и внешние источники проверены 2026-09-20 для движка 0.5.2.
