Лічильник показує 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 проходить цей список причину за причиною, а що шукає сканування фризів — це автоматична версія, яка позначає кожну знахідку як доведену, ймовірну, кандидата або неперевірену, замість видавати тобі оцінку впевненості, якої не заслужила.
Є й проміжний випадок: машина, яка в середньому не обмежена відеокартою, але впирається в межу в найзавантаженіші моменти. Кадри, що відстають, — це рівно ті кадри, у яких відбувається найбільше, тобто бій. Якщо твоя відеокарта тримається помітно нижче за повне завантаження, поки low страждають, відеокарта не на 100% — це сторінка діагнозу для цього.
Дисципліна вимірювання, без якої все це не має сенсу
Процентилі шумніші за середні, бо їх обчислюють із меншої кількості кадрів. Два прогони однієї незміненої конфігурації не дадуть однакового 1% low, і різниця між ними — це найменша зміна, яку ти взагалі здатен помітити.
Ось чому запис корисний лише поруч із власним шумом. Сторінка «Бенчмарк» обчислює шум вимірювання з власного розкиду кожного запису від хвилини до хвилини й друкує його окремо для середнього, для 1% low і для 0.1% low — і вона не заявить про різницю, яка потрапляє всередину нього. Ось і вся дисципліна в одній поведінці: результат, менший за твоє власне блукання від прогону до прогону, — це не результат.
Практична версія:
- Та сама гра, та сама карта або повтор, та сама тривалість, ті самі налаштування в грі.
- Грай однаково. Прогін, проведений перед стіною, і прогін, проведений у перестрілці, — непорівнянні.
- Прожени незмінену конфігурацію щонайменше тричі, перш ніж щось міняти, щоб знати, який вигляд має твій власний шум.
- Зміни одну річ. П'ять змін і одне вимірювання нічого не кажуть про те, яка з них важила, а додати п'ять окремо виміряних приростів — це арифметика, а не вимірювання.
- Порівнюй 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. | Одна пара «до і після» не може відрізнити зміну від прогрітого GPU чи іншої точки появи. |
Перевір сам: перерахуй із 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 розбирає опубліковані докази з джерелами, а затримка вводу, яку не виправить жодна програма — це чесний облік того, до чого робота із затримкою може дотягтися, а до чого ні.
Те саме застереження стосується списків значень реєстру, які обіцяють кращі low. Значення керування пам'яттю в ядрі та підміну роздільності таймера тут відхиляють прямо — не тому, що вони екзотичні, а тому, що ніхто не опублікував їх вимірювання, яке витримало б зіткнення з методикою.
Чого сторінка «Бенчмарк» не виводить
- Жодного числа «здобутих FPS» — для жодного налаштування, ніде у w0a. Виграш — це те, що показують твої власні два записи, або нічого.
- Жодної причини, лише час. Коли фриз збігається з чимось іншим, що сталося, картка каже, що обидва потрапили в одне часове вікно. Вона не каже, що одне спричинило інше.
- Жодна різниця в межах рівня шуму не показується як зміна, ні в той, ні в інший бік.
Якщо твої low погані й тобі потрібні причини, а не числа, то список — це Чому ігри фризять на Windows 11, а що шукає сканування фризів — це те, що w0a перевіряє автоматично. Конкретно для CS2 Низький FPS і фризи в CS2 застосовує все це до однієї гри.
Пов'язане
- Чому ігри фризять на Windows 11
- Відеокарта не на 100%
- Як читати результат бенчмарку
- Як зменшити input lag: що програма може скоротити, а що ні
- Фризи компіляції шейдерів
- Низький FPS і фризи в CS2
Граєш у CS2? Які параметри запуску ще щось роблять і де в меню відео насправді лежать кадри: Низький FPS і фризи в CS2: виміряний контрольний список
Ця сторінка допомогла?
Чого бракувало або що не спрацювало? Ми читаємо кожну таку відповідь.
Якщо ця сторінка не розв'язала проблему, напиши нам — скажи, яку статтю ти читав, і ми виправимо статтю.