Счётчик показывает 160. Игру всё равно дёргает — доля секунды, за которую картинка замирает, прицел оказывается не там, куда ты его вёл, а потом всё снова в порядке. Счётчик при этом не шелохнулся — поэтому ничего из того, что ты делаешь ради его повышения, не помогает.
Этот разрыв и есть тема всей страницы. Фриз — это опоздавший кадр, а не низкая частота кадров. Счётчик кадров усредняет за секунду, поэтому один кадр длиной 90 мс растворяется среди 159 коротких рядом с ним. Число, описывающее то, что ты почувствовал, — это время кадра, а фриз — это кадр, который сильно медленнее своих соседей.
Сначала честная фраза. Две из десяти причин ниже соответствуют одной галочке в w0a: значение планировщика в причине 8 и фоновая запись игры в причине 9. Обе галочки лишь ставят настройку туда, где ей место, и на машине, которую никто не настраивал, первая не находит, что менять. Был ли твой фриз одной из них, скажет только запись до и после.
Сначала разберись, какая из трёх проблем у тебя
Их называют одним и тем же словом, а общего у них почти нет.
- Рывки. База в порядке, и время от времени случается что-то длинное. Вот это и есть тема этой страницы.
- Неровная база. Ничего драматичного, но игра никогда не ощущается плавной. Это проблема процентилей: Высокий средний FPS, но плохие 1% low.
- Просадка. Частота кадров падает и остаётся внизу секунды или минуты. Причины совсем другие: Внезапные просадки FPS в играх.
Получи запись, прежде чем что-то менять
Недели на это уходят именно из-за догадок. Запись той игры, в которую ты действительно играешь, там, где она действительно фризит, превращает «что бы это могло быть» в «что произошло на этом всплеске» — и она же становится тем «до», по которому судят каждое последующее изменение. Как читать результаты бенчмарка разбирает, как это сделать.
Причины, одна за другой
1. Драйвер, удерживающий ядро процессора
Пока драйвер находится внутри прерывания или отложенного вызова процедуры, это ядро работает выше любого приоритета потоков, какой только есть: оно ничего не рисует и не читает ввод, пока драйвер не отпустит. Эту причину легко пропустить: её нет ни на одном графике времени кадра и ни в одном диспетчере задач.
Как это понять: измерить. Раздел ядра в Как читать тест задержки перечисляет каждый драйвер, удержавший ядро, по самому долгому удержанию и с именем файла. Начиная примерно с 1 мс драйвер вытесняет отчёты ввода; от 4 мс и выше машина не удержит ровное время кадра, что бы ты ещё ни менял.
Что делать: обновить именно этот драйвер у производителя железа — не всю систему, а названный файл. Сетевые драйверы, драйверы накопителей и звука — среди тех, что могут так делать.
2. Компиляция шейдеров
Новый эффект, новая область, новое оружие — и игре надо скомпилировать шейдер, прежде чем его нарисовать. Компиляция идёт на процессоре, а кадр ждёт.
Как это понять: хуже всего в первые минуты сессии или карты, по ходу игры сходит на нет и возвращается после обновления драйвера или игры. Если твои фризы на нет не сходят — это не оно; Фризы компиляции шейдеров — развёрнутая версия.
Что делать: переиграть это и не запускать бенчмарк внутри этого окна: ты будешь измерять компилятор.
3. Диск, с которого игра подгружает данные
Игра, подтягивающая ассеты по мере твоего движения, фризит, когда чтение медленное, и опоздавшим оказывается тот кадр, который ждал эти данные.
Как это понять: рывки совпадают с входом в новую область, а длинные интервалы кадров попадают в то же окно, что и активность диска. Проверь очевидное: не лежит ли игра на механическом диске, не заполнен ли накопитель почти под завязку, не находится ли папка игры внутри синхронизируемой с облаком папки, которая отправляет каждую запись, не лежит ли файл подкачки на вращающемся диске. SSD для игры с подгрузкой — не твик, а ответ.
4. Давление на память
Когда RAM заполняется, Windows выгружает страницы на диск, и возвращающиеся страницы ощущаются как рывки. Менее очевидный случай — предел выделения: когда общий объём памяти, который Windows может раздать, подходит к концу, диспетчер памяти отбирает страницы у ещё работающих программ, и игра чувствует эти отъёмы как подвисания меньше секунды. И то и другое становится лучше в тот момент, когда ты закрываешь браузер с сорока вкладками.
5. Работает что-то ещё
Рабочий процесс Центра обновления Windows, задача обслуживания, запланированная проверка на вредоносные программы, забытый экспорт видео. Эта работа не прекращается, когда запускается игра: она встаёт в очередь к тому же ядру, что и поток отрисовки, и поэтому проявляется всплесками времени кадра, а не снижением среднего. Переждать — законное решение.
Как это понять: запись бенчмарка сохраняет самые длинные интервалы кадров вместе с работой диска и hard fault, попавшими в то же окно. Если это были процессы обслуживания или антивируса Windows, карточка длинных интервалов считает эти интервалы и называет процессы. Это то, что совпало, а не доказательство, что кадр задержала именно эта работа: антивирус читает всё, что открывает любая программа.
6. Нагрев и лимиты мощности
Когда чип упирается в свой потолок по температуре или по мощности, частота раз за разом опускается и снова поднимается, и изнутри это ощущается как волнистые времена кадров. Решение принимает сама прошивка, не спрашивая Windows. Начинается это не сразу, а спустя какое-то время, и следует за тем, насколько тепло в комнате.
7. Дисплей
Монитор, работающий ниже поддерживаемой им частоты обновления, кладёт под равномерность твоих кадров пол, которого железо не требует. Проверь настоящую частоту, а не предполагай: после чистой установки или смены кабеля она неверна на удивительном числе машин.
8. Значение планировщика, оставшееся от старой программы
Win32PrioritySeparation решает, как долго поток удерживает процессор и насколько больше времени получает приложение на переднем плане. Значения с длинными или фиксированными квантами или с долей переднего плана ниже 3:1 меняют то, как процессор делится между игрой и всем остальным; что это делает со временем кадра, не измерялось. Карточка Память и системные значения по умолчанию на странице Fix возвращает значение Windows по умолчанию.
9. Оверлеи и слой записи
Оверлеи рисуются внутри собственного кадра игры, а фоновая запись кодирует каждый кадр, чтобы последние несколько минут можно было сохранить. Закрывай их по одному и проверяй, а не все разом.
10. Матч, а не машина
Онлайн-игру может рвануть сразу у всех на сервере. Если одиночный контент на той же машине чистый, а запись времён кадров показывает, что игра выводит кадры нормально, это по-настоящему полезный ответ: дело не в твоём ПК.
Две причины, для которых у w0a есть галочка
Причина 8: «Держать приоритет активного окна на правильном значении (Win32PrioritySeparation)» (страница «Оптимизации»)
Одно значение DWORD: Win32PrioritySeparation в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\PriorityControl.
Справка Microsoft о нём — архивная страница, написанная для Windows 2000; она описывает шесть битов, которые читаются тремя парами и записываются как AABBCC:
| Пара | Что решает | Значения |
|---|---|---|
| AA (два старших бита) | Как долго поток может работать за один раз | 01 дольше, 10 короче, 00 или 11 — значение по умолчанию для редакции (на редакции для рабочих станций — короче) |
| BB (два средних) | Меняется ли эта длительность | 01 переменная, 10 фиксированная, 00 или 11 — значение редакции по умолчанию (на редакции для рабочих станций — переменная) |
| CC (два младших) | Насколько больше времени получает программа на переднем плане | 00 поровну (и фиксированно), 01 2:1, 10 или 11 3:1. Используется, только когда средняя пара означает «переменная». |
- Значение Windows по умолчанию:
0x2(двоичное 000010). На редакции для рабочих станций это значит более короткие переменные интервалы, причём программа на переднем плане получает втрое больше времени, чем фоновая. Та же справка даёт0x26(100110: короче, переменно, 3:1) для варианта в параметрах быстродействия, отдающего предпочтение программам, и0x18(011000: дольше, фиксированно, поровну) для варианта, отдающего предпочтение фоновым службам. - Что делает галочка: сначала читает значение. Значение, которое уже даёт переднему плану долю 3:1, без более длинных интервалов и без фиксированных интервалов, остаётся ровно как есть, и галочка так и говорит. Переписывается, на
0x26, только значение, которое не проходит одно из этих трёх условий. На собственном значении Windows по умолчанию галочка ничего не пишет: на клиентской редакции0x2уже планирует так, как просит0x26. - Когда вступает в силу: после перезагрузки. Ядро превращает это значение в свою таблицу планирования при загрузке, так что изменение в реестре ничего не меняет в уже работающем планировщике, и галочка, когда пишет, просит перезагрузку.
- Путь назад: карточка Память и системные значения по умолчанию записывает обратно
2и просит перезагрузку. Заодно она возвращает и другие значения памяти и планировщика по умолчанию.
Причина 9: «Отключить Xbox Game DVR» (страница «Оптимизации»)
| Значение | Что пишет галочка | Значение Windows по умолчанию (его возвращает карточка восстановления) |
|---|---|---|
HKCU\System\GameConfigStore, GameDVR_Enabled | 0 | 1 |
HKLM\SOFTWARE\Policies\Microsoft\Windows\GameDVR, AllowGameDVR | 0 | отсутствует |
HKCU\Software\Microsoft\Windows\CurrentVersion\GameDVR, AppCaptureEnabled | 0 | 1 |
HKCU\Software\Microsoft\GameBar, ShowStartupPanel | 0 | отсутствует |
HKCU\Software\Microsoft\GameBar, UseNexusForGameBarEnabled | 0, кроме Ryzen X3D с двумя CCD | отсутствует |
Все — DWORD. На процессоре X3D с двумя CCD галочка не трогает последнее значение: конвейер записи всё равно выключается, но часть Game Bar, которую слушает драйвер AMD, продолжает работать. Это предосторожность, а не доказанная причина, и сообщение галочки говорит, по какому пути она пошла. Ryzen X3D, Game Bar и парковка ядер объясняет, почему эта часть важна на таких чипах.
- Когда вступает в силу: для этой галочки w0a не просит перезагрузки.
- Чем платишь: записью Game Bar. Если Win+G перестал открываться или запись нужна обратно, карточка Game Bar / запись игр снова включает Game Bar и Game DVR со значениями Windows по умолчанию.
- Что говорит сканер фризов: он отмечает как информацию, когда
GameDVR_EnabledилиAppCaptureEnabledвсё ещё включены; на чистой установке оба равны 1, так что это значение по умолчанию, а не неисправность. Он читает и третье значение,HistoricalCaptureEnabled(фоновая запись), но только чтобы выбрать формулировку; галочка это значение не пишет.
Проверь сам
Эти команды только читают:
reg query "HKLM\SYSTEM\CurrentControlSet\Control\PriorityControl" /v Win32PrioritySeparation
reg query "HKCU\System\GameConfigStore" /v GameDVR_Enabled
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\GameDVR"
reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\GameDVR" /v AllowGameDVR
reg query "HKCU\Software\Microsoft\GameBar"
Как читать ответы:
- Значения печатаются в шестнадцатеричном виде:
Win32PrioritySeparation REG_DWORD 0x26означает0x26. 0x2— значение Windows по умолчанию, а0x26— вариант из справки, отдающий предпочтение программам; на клиентской редакции оба планируют одинаково.0x18— вариант, отдающий предпочтение фоновым службам: более длинные фиксированные интервалы и никакой доли для переднего плана, а это как раз то, о чём причина 8. Любое другое значение запиши шестью двоичными цифрами и прочитай по таблице выше.- Для Game DVR
0x0означает «выключено» (галочка), а0x1— «включено» (значение Windows по умолчанию). - Если запрос
AllowGameDVRвместо строки завершается ошибкой, значения политики нет — а это и есть значение Windows по умолчанию.
Что со всем этим делает сканер
Что ищет сканер фризов прогоняет эти проверки по тому, что Windows и твои драйверы уже записали, и помечает каждую находку как доказанную, вероятную, кандидата или непроверенную. Две вещи, которые стоит знать: сканер, который всегда находит десять проблем, продаёт тебе решения, а проверка, которая не смогла выполниться, считается отдельно, а не считается по-тихому чистой.
Потом меняй одну вещь и снимай запись той же сцены заново. Пять изменений и одно измерение не говорят ничего о том, какое из них сработало, а всё, что не сдвинуло число, стоит отменить.
Что причиной не является
Всё это бесконечно ходит по рукам как средство от фризов, и w0a отказывается писать каждое из этих значений — по задокументированным причинам:
DisablePagingExecutive,LargeSystemCacheиDisablePageCombiningменяют диспетчер памяти ядра;NtfsMemoryUsageменяет пул драйвера NTFS;IoPageLockLimitиSecondLevelDataCache— тоже допущения ядра. Значения уровня ядра — правило продукта: они не пишутся никогда.GlobalTimerResolutionRequestsживёт вSession Manager\kernel— разделе, который продукт отвергает целиком.MSISupportedпереключает режим прерываний устройства; если выставить его неправильно, результатом может стать чёрный экран.FeatureSettingsOverrideиFeatureSettingsOverrideMaskотключают защиту от Spectre и Meltdown.OverlayTestModeиDisableOverlaysотключают многоплоскостное наложение (MPO). На реальной машине с Windows 11 25H2 они наглухо и воспроизводимо замораживали CS2.TdrDelayиTdrDdiDelayудлиняют сторожевой таймер графического драйвера, от чего каждое зависание лишь длится дольше;TdrLevelотключает восстановление.
На машине, которой памяти хватает, чистильщик памяти не меняет ничего измеримого.
Похожие статьи
- Внезапные просадки FPS в играх
- Фризы компиляции шейдеров
- Как читать тест задержки
- Что ищет сканер фризов
- Высокий средний FPS, но плохие 1% low
- Задержка DPC: когда фризит сам драйвер
- Отмена того, что изменила w0a
Играешь в CS2? Какие параметры запуска ещё что-то делают и где в меню видео на самом деле лежат кадры: Как повысить FPS в CS2 и откуда берутся микрофризы: чек-лист по замерам
Эта страница помогла?
Чего не хватило или что не сработало? Мы читаем каждый такой ответ.
Если эта страница не решила проблему, напиши нам — скажи, какую статью ты читал, и мы её исправим.