Счётчик показывает 200, а игра ощущается как 90. Ничего не сломано, ничего не замирает на целую секунду, но перестрелка ни разу не ощущается так, как обещает число. У этого ощущения есть название и есть измерение, и как только ты научишься его читать, ты перестанешь гоняться не за тем числом.
Сначала честная фраза. Эта страница объясняет измерение, а не исправление. w0a нигде не печатает цифру «выигрыш FPS», так что помогло ли изменение, ты читаешь по собственным записям до и после, на фоне собственного шума от прогона к прогону, — а каждое число ниже можно пересчитать из файла, который сохраняет страница Бенчмарк.
Что эти три числа означают на самом деле
Отсортируй все кадры прогона от самого медленного к самому быстрому.
- Средний FPS — это среднее по всем ним. Самая бесполезная цифра на странице.
- 1% low — это худший процент этих кадров. Обычно его печатают как значение FPS, так что «1% low, равный 70» означает, что каждый из твоих худших кадров занял примерно столько же, сколько занимает кадр в игре на 70 FPS.
- 0.1% low — это худший кадр из тысячи, то есть редкие глубокие события.
Время кадра — это те же данные в миллисекундах, и арифметику стоит запомнить, потому что она делает всю остальную страницу предметной: 16,7 мс — это 60 FPS, 6,9 мс — 144, 4,2 мс — 240.
Значит, прогон со средним 200 и 1% low, равным 70, — это прогон, где типичный кадр занял около 5 мс, а худшая сотая — около 14, почти втрое дольше. А на 200 FPS один процент твоих кадров — это два кадра каждую секунду. Дважды в секунду картинка стоит на месте столько времени, сколько ушло бы на три кадра. Именно это ты и чувствуешь, и никакое среднее тебе об этом не скажет.
Читай разрыв, а не число
1% low, равный 70, — прекрасный результат в прогоне на 90 FPS и тревожный в прогоне на 200. Полезно читать соотношение:
| Что ты видишь | Что это обычно значит |
|---|---|
| Среднее и 1% low близки друг к другу | Ровная выдача кадров. Вот что такое «плавно», даже на скромной частоте кадров. |
| 1% low сильно ниже среднего | Что-то прерывает в остальном здоровый прогон: событие, а не нагрузка. |
| 0.1% low сильно ниже 1% low | Редкие глубокие события: сброс драйвера, шторм подкачки, долгое чтение с диска. |
| Всё низкое разом | Ты просто просишь больше, чем выдаёт железо. Понизь настройку. |
Третью строку легко прочитать неправильно. Если 1% low у тебя в порядке, а 0.1% low ужасен, у тебя проблема не с равномерностью — у тебя горстка конкретных происшествий, а происшествия можно найти.
Почему плохой хвост — это другая проблема, чем низкое среднее
Низкое среднее — это вопрос нагрузки: машина делает столько, сколько может, и этого не хватает. Ответ — настройка, разрешение или другое железо.
Плохой хвост — это вопрос события: машина в основном справляется, а что-то периодически её останавливает. Ответ — найти это «что-то». Список короткий, и каждый пункт оставляет след: драйвер, удерживающий ядро процессора, страницы, возвращающиеся с диска, чтение ассета, фоновая задача, компилируемый шейдер, сброс драйвера. Почему игры фризят на Windows 11 проходит этот список причину за причиной, а Что ищет сканер фризов — автоматическая версия того же: она помечает каждую находку как доказанную, вероятную, кандидата или непроверенную, вместо того чтобы выдавать тебе процент уверенности, которого не заслужила.
Есть и промежуточный случай: машина, которая в среднем не упирается в видеокарту, но упирается в самые загруженные моменты. Отстающие кадры — ровно те кадры, где происходит больше всего, то есть перестрелка. Если видеокарта сидит заметно ниже полной загрузки, а нижние значения при этом страдают, страница диагноза для этого — Видеокарта не на 100%.
Дисциплина измерения, без которой всё это не имеет смысла
Процентили шумнее средних, потому что считаются по меньшему числу кадров. Два прогона одной и той же неизменённой конфигурации не дадут одинаковый 1% low, и разница между ними — это самое маленькое изменение, которое ты вообще способен заметить.
Поэтому запись полезна только рядом с собственным шумом. Страница Бенчмарк «до / после» вычисляет шум измерений из разброса самой записи от минуты к минуте и печатает его отдельно для среднего, для 1% low и для 0.1% low — и не станет заявлять о разнице, которая попадает внутрь него. В одном поведении здесь вся дисциплина: результат меньше твоего собственного разброса от прогона к прогону — не результат.
Практическая версия:
- Та же игра, та же карта или повтор, та же длительность, те же настройки в игре.
- Играй одинаково. Прогон, проведённый лицом к стене, и прогон, проведённый в перестрелке, несравнимы.
- Прогони неизменённую конфигурацию хотя бы три раза, прежде чем что-либо менять, — чтобы знать, как выглядит твой собственный шум.
- Меняй одну вещь. Пять изменений и одно измерение не говорят ничего о том, какое из них сработало, а сложить пять измеренных по отдельности выигрышей — это арифметика, а не измерение.
- Сравнивай нижние значения. Как читать результаты бенчмарка разбирает, зачем нужно каждое число на странице.
Точная арифметика, число за числом
Вот что страница Бенчмарк делает с записью — в том порядке, в каком делает.
| Шаг | Правило | Зачем оно |
|---|---|---|
| Какие кадры считаются | Только кадры, нарисованные, пока игра была окном на переднем плане. После того как игра возвращается на передний план, первая секунда отбрасывается; перед обнаруженной потерей фокуса отбрасываются последние 0,2 секунды. Отброшенное время сообщается вместе с прогоном. | Запись начинается и останавливается из собственного окна w0a, так что её края — это игра в фоне. В одной сохранённой записи 94 из 185 кадров, стоявших за 1% low, оказались этими краями. Одна секунда — выбранное значение, а не измеренное. |
| Паузы | Интервал кадра длиннее 200 мс исключается из среднего и из всех процентилей и считается отдельно. | Свыше 200 мс — это экран загрузки, alt-tab или остановка драйвера, а не отрисовка. Попав в среднее, он похоронил бы под собой каждый настоящий кадр. |
| Средний FPS | Учтённые кадры, делённые на время, которое они заняли: кадры × 1000 ÷ общее число миллисекунд. | |
| 1% low | Отсортируй учтённые времена кадров. Возьми самый медленный 1% из них — с округлением вверх и не меньше одного кадра, — усредни эти времена кадров и переведи результат в FPS: 1000 ÷ это среднее. | Другое распространённое определение — частоту кадров при времени кадра на 99-м процентиле — отвергли намеренно: когда фризит ровно 1% кадров, оно попадает на границу и показывает почти то же число, что и среднее. |
| 0.1% low | То же самое, с самыми медленными 0,1%. | |
| Время кадра на 99-м и 99,9-м процентиле | Сообщается отдельно, в миллисекундах. | Для читателей и инструментов, которые пользуются определением через процентиль. |
| Слишком коротко, чтобы читать | Меньше 900 кадров — недостаточно, чтобы процентиль что-то значил. | |
| Число фризов | Кадр длиной до одной секунды считается фризом, когда он длиннее и удвоенной медианы окружающих трёх секунд, и этой медианы плюс 8 мс. | Три секунды, а не фиксированное число кадров, — чтобы правило значило одно и то же на 60 FPS и на 300. Слагаемое в 8 мс не даёт обычному дрожанию на высокой частоте кадров считаться фризом. Кадры от 200 мс до одной секунды исключены из процентилей, но здесь учитываются: заминка в 250 мс от компиляции шейдеров — ровно то, ради чего этот счёт и существует. |
| Порог шума | Запись режется на блоки по 60 секунд. Каждой стороне сравнения нужно хотя бы два целых блока, иначе страница пишет «несравнимо», а не раскрашивает число. Порог — это 95-процентный интервал из разброса двух сторон от блока к блоку (метод Уэлча), в процентах от значения «до». Учитываются только целые блоки без потерянных событий, и нулевой порог не выдаётся никогда. | Разница внутри твоего собственного разброса от блока к блоку — не результат. |
| Парные серии | Когда ты гоняешь серию A/B, об изменении сообщается, только если точный знаково-ранговый критерий и 95-процентный бутстреп-интервал медианной разницы (10 000 повторных выборок) оба исключают ноль, а медиана не меньше наименьшего эффекта, который, как показал пилот из 10 прогонов, эта конфигурация способна обнаружить. Серии нужно минимум 6 пар — при 5 наименьшее возможное p-значение равно 0,0625, — а рекомендуется 8, в порядке ABBA. | Одна пара «до/после» не отделит изменение от прогретой видеокарты или другой точки появления. |
Проверь сам: пересчитай из CSV
Сохранить CSV на странице Бенчмарк записывает одну таблицу со столбцами side,kind,name,value. Строки с kind = metric — это итоговые цифры; строки с kind = frame — интервалы кадров, по одному на строку, с временем кадра в миллисекундах в value. Строки кадров хранят всю серию, включая паузы, — ровно для того, чтобы ты мог сам применить правило 200 мс и прийти к тем же числам.
Перед началом — две вещи:
- Числа в файле всегда используют точку как десятичный разделитель, что бы ни говорили региональные настройки Windows. В русских региональных настройках десятичный разделитель — запятая, поэтому при импорте скажи об этом своей таблице, иначе
6.94придёт как текст. - Имена столбцов — фиксированные английские идентификаторы. Они предназначены для скриптов и одинаковы во всех языках.
В таблице: отфильтруй один side и kind = frame, убери строки больше 200, отсортируй value от большего к меньшему, усредни первые N строк, где N — число строк, делённое на 100 и округлённое вверх, и раздели 1000 на это среднее. Результат должен совпасть с low_1pct_fps для этой стороны.
В PowerShell (для другой стороны замени before на after):
$ms = Import-Csv .\capture.csv |
Where-Object { $_.kind -eq 'frame' -and $_.side -eq 'before' } |
ForEach-Object { [double]::Parse($_.value, [Globalization.CultureInfo]::InvariantCulture) } |
Where-Object { $_ -le 200 } |
Sort-Object
$take = [Math]::Max(1, [Math]::Ceiling($ms.Count * 0.01))
1000 / ($ms | Select-Object -Last $take | Measure-Object -Average).Average
Для 0.1% low используй 0.001 вместо 0.01. Две быстрые проверки согласованности по тому же файлу: число строк кадров со значением 200 и меньше равно метрике frames, а число строк больше 200 — excluded_over_stall_ms.
Две вещи, которые тихо портят процентиль
Генерация кадров. Вставленные кадры не несут нового состояния игры. 1% low, посчитанный по кадрам, всё ещё даёт число, но перестаёт описывать отзывчивость — а ради неё ты на него и смотрел. На время измерения генерацию выключи. Это вопрос определения, а не утверждение, что генерация кадров вызывает фризы.
Экраны загрузки и паузы. Трёхсекундная пауза на загрузке — это один «интервал кадра» длиной в три тысячи миллисекунд, и, оставшись в данных, он становится твоим 0.1% low и хоронит под собой всё настоящее. Именно поэтому такие длинные интервалы исключаются из процентилей и сообщаются отдельно — чтобы ни одно число не выросло втихую поверх одного из них.
Что не двигает 1% low
Это стоит сказать прямо, потому что эти две вещи легко смешать: функции снижения задержки и стабильность процентилей — разные утверждения. Режимы низкой задержки от производителей уменьшают глубину очереди отрисовки, и это уменьшение измерено. Опубликованных измерений, показывающих, что они улучшают процентили времени кадра, нет. Обе вещи могут быть полезны; это не одно и то же, и страница, выдающая одно за другое, тебе что-то продаёт. Чистая установка ради стабильных 1% low разбирает опубликованные свидетельства со ссылками на источники, а Задержка ввода, которую не исправит ни одна программа — честный отчёт о том, куда работа над задержкой дотягивается, а куда нет.
То же предостережение относится к спискам значений реестра, обещающим лучшие нижние значения. Значения управления памятью ядра и подмена разрешения таймера здесь отвергаются прямо — не потому, что они экзотические, а потому, что никто не опубликовал их измерения, которое выдержало бы встречу с методикой.
Чего страница Бенчмарк не печатает
- Никакой цифры «выигрыш FPS» — ни для одной настройки, нигде в w0a. Выигрыш — это то, что показывают две твои собственные записи, или ничего.
- Никакой причины, только время. Когда фриз совпадает с чем-то ещё, что произошло, карточка говорит, что они попали в одно и то же окно. Она не говорит, что одно вызвало другое.
- Никакая разница внутри порога шума не показывается как изменение — ни в одну, ни в другую сторону.
Если нижние значения у тебя плохие и нужны причины, а не числа, список — в Почему игры фризят на Windows 11, а то, что w0a проверяет автоматически, — в Что ищет сканер фризов. Для CS2 отдельно Низкий FPS и фризы в CS2 применяет всё это к одной игре.
Похожие статьи
- Почему игры фризят на Windows 11
- Видеокарта не на 100%
- Как читать результаты бенчмарка
- Как уменьшить input lag в CS2 и других играх: что может программа, а что нет
- Фризы компиляции шейдеров
- Низкий FPS и фризы в CS2
Играешь в CS2? Какие параметры запуска ещё что-то делают и где в меню видео на самом деле лежат кадры: Как повысить FPS в CS2 и откуда берутся микрофризы: чек-лист по замерам
Эта страница помогла?
Чего не хватило или что не сработало? Мы читаем каждый такой ответ.
Если эта страница не решила проблему, напиши нам — скажи, какую статью ты читал, и мы её исправим.