Твій лічильник показує 160. Гру все одно смикає — частка секунди, коли картинка зупиняється, приціл опиняється не там, куди ти його вів, а потім усе знову гаразд. Лічильник при цьому не зрушив — і саме тому ніщо з того, що ти робиш, аби його підняти, не допомагає.
Ця розбіжність — і є вся тема цієї сторінки. Фриз — це кадр, який прийшов із запізненням, а не низька частота кадрів. Лічильник кадрів усереднює за секунду, тож один кадр, що тривав 90 мс, зникає серед 159 коротких поруч. Число, яке описує те, що ти відчув, — це час кадру, а фриз — це кадр, значно повільніший за сусідні.
Спершу чесне речення. Дві з десяти причин нижче відповідають одному прапорцю у w0a: значення планувальника в причині 8 і фоновий записувач гри в причині 9. Обидва прапорці лише ставлять налаштування туди, де йому місце, і на машині, яку ніхто не налаштовував, перший не знаходить чого змінювати. Чи був фриз, який ти відчуваєш, одним із них, може сказати лише запис до і після.
Спершу з'ясуй, яка з трьох проблем у тебе
Їх називають одним словом, а спільного в них майже нічого.
- Ривки. Базовий рівень нормальний, і час від часу стається щось довге. Це — ця сторінка.
- Нерівний базовий рівень. Нічого драматичного, але гра ніколи не відчувається плавною. Це проблема процентилів: високий середній FPS, але погані 1% low.
- Просідання. Частота кадрів падає й лишається внизу на секунди або хвилини. Причини цілком інші: раптові просідання FPS в іграх.
Здобудь запис, перш ніж щось міняти
Саме через здогади це затягується на тижні. Запис тієї гри, у яку ти справді граєш, і саме там, де вона справді фризить, перетворює «що це могло б бути» на «що сталося на тому викиді» — і саме він стає тим «до», за яким судять кожну наступну зміну. Як читати результат бенчмарку розповідає як.
Причини, одна за одною
1. Драйвер, який тримає ядро процесора
Поки драйвер перебуває всередині переривання або відкладеного виклику, це ядро працює вище за будь-який пріоритет потоку, який взагалі існує: воно нічого не малює й не читає ввід, доки драйвер не відпустить. Цю причину легко пропустити: її немає ні на графіку часу кадрів, ні в диспетчері завдань.
Як зрозуміти: виміряй. Розділ ядра в як читати тест затримки перелічує кожен драйвер, який тримав ядро, за найдовшим утриманням і з ім'ям файла. Приблизно від 1 мс драйвер витісняє звіти вводу; від 4 мс і вище машина не втримає рівного часу кадру, хоч що б ти ще змінював.
Що робити: онови саме цей один драйвер у виробника заліза — не всю систему, а названий файл. Мережеві драйвери, драйвери накопичувачів і звуку — серед тих, що можуть так робити.
2. Компіляція шейдерів
Новий ефект, нова зона, нова зброя — і гра мусить скомпілювати шейдер, перш ніж зможе його намалювати. Компіляція відбувається на процесорі, поки кадр чекає.
Як зрозуміти: найгірше це в перші хвилини сеансу або карти, воно згасає, поки ти граєш, і повертається після оновлення драйвера чи гри. Якщо твої фризи не згасають, то це не воно — фризи компіляції шейдерів — це довга версія.
Що робити: переграй це, і не знімай бенчмарк усередині цього вікна — ти вимірював би компілятор.
3. Диск, з якого гра підвантажує дані
Гра, яка підтягує ресурси, поки ти рухаєшся, фризить, коли читання повільне, і кадр, що чекає на ці дані, і є запізнілим.
Як зрозуміти: ривки збігаються з входом у нову зону, а довгі інтервали кадрів припадають на те саме вікно, що й активність диска. Перевір очевидне: чи не стоїть гра на механічному диску, чи не заповнений диск майже вщент, чи не лежить папка гри всередині хмарної синхронізованої папки, яка вивантажує кожен запис, чи не стоїть файл підкачки на диску, що обертається. SSD для гри з підвантаженням — це не твік, це відповідь.
4. Тиск на пам'ять
Коли RAM заповнюється, Windows виносить сторінки на диск, і сторінки, що повертаються, відчуваються як ривки. Менш очевидний випадок — ліміт виділення: коли загальна пам'ять, яку Windows може роздати, добігає кінця, менеджер пам'яті обрізає сторінки в програм, які ще працюють, і гра відчуває ці обрізання як завмирання коротші за секунду. І те, і те кращає в ту саму мить, коли ти закриваєш браузер із сорока вкладками.
5. Запустилося щось іще
Робочий процес Windows Update, завдання обслуговування, заплановане сканування на шкідливе ПЗ, експорт відео, про який ти забув. Ця робота не зупиняється, коли починається гра; вона стає в чергу до того самого ядра, що й потік рендеру, тож проявляється як викиди часу кадру, а не як нижче середнє. Перечекати — цілком законне виправлення.
Як зрозуміти: запис бенчмарку зберігає найдовші інтервали між кадрами разом із роботою диска й жорсткими помилками сторінки, що потрапили в те саме вікно. Якщо це були процеси обслуговування чи антивіруса 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: виміряний контрольний список
Ця сторінка допомогла?
Чого бракувало або що не спрацювало? Ми читаємо кожну таку відповідь.
Якщо ця сторінка не розв'язала проблему, напиши нам — скажи, яку статтю ти читав, і ми виправимо статтю.