Високий середній FPS, але погані 1% low: що це означає

Середнє — це середнє арифметичне всіх кадрів, а саме воно й ховає ті кадри, які ти відчуваєш: що таке 1% low, про що говорить велика різниця між ними двома і як зрозуміти, чи зрушила її твоя зміна.

Лічильник показує 200, а гра відчувається як 90. Нічого не зламано, ніщо не завмирає на цілу секунду, але бій ніколи не відчувається так, як обіцяє число. У цього відчуття є назва і є вимір, і щойно ти навчишся його читати, ти перестанеш ганятися не за тим числом.

Спершу чесне речення. Ця сторінка пояснює вимірювання, а не виправлення. w0a ніде не виводить числа «здобутих FPS», тож чи допомогла зміна, ти читаєш із власних записів до і після, на тлі власного шуму від прогону до прогону, — і кожне число нижче можна перерахувати з файла, який зберігає сторінка «Бенчмарк».

Що це за три числа насправді

Відсортуй усі кадри прогону від найповільнішого до найшвидшого.

Час кадру — це ті самі дані в мілісекундах, і цю арифметику варто запам'ятати, бо вона робить решту сторінки конкретною: 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 — і вона не заявить про різницю, яка потрапляє всередину нього. Ось і вся дисципліна в одній поведінці: результат, менший за твоє власне блукання від прогону до прогону, — це не результат.

Практична версія:

  1. Та сама гра, та сама карта або повтор, та сама тривалість, ті самі налаштування в грі.
  2. Грай однаково. Прогін, проведений перед стіною, і прогін, проведений у перестрілці, — непорівнянні.
  3. Прожени незмінену конфігурацію щонайменше тричі, перш ніж щось міняти, щоб знати, який вигляд має твій власний шум.
  4. Зміни одну річ. П'ять змін і одне вимірювання нічого не кажуть про те, яка з них важила, а додати п'ять окремо виміряних приростів — це арифметика, а не вимірювання.
  5. Порівнюй 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 мс і отримати ті самі числа.

Дві речі перед початком:

В електронній таблиці: відфільтруй один 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. Значення керування пам'яттю в ядрі та підміну роздільності таймера тут відхиляють прямо — не тому, що вони екзотичні, а тому, що ніхто не опублікував їх вимірювання, яке витримало б зіткнення з методикою.

Чого сторінка «Бенчмарк» не виводить

Якщо твої low погані й тобі потрібні причини, а не числа, то список — це Чому ігри фризять на Windows 11, а що шукає сканування фризів — це те, що w0a перевіряє автоматично. Конкретно для CS2 Низький FPS і фризи в CS2 застосовує все це до однієї гри.

Пов'язане

Граєш у CS2? Які параметри запуску ще щось роблять і де в меню відео насправді лежать кадри: Низький FPS і фризи в CS2: виміряний контрольний список

w0a не змінює жодного налаштування Windows, поки ти не попросиш, а твік зберігає старе значення, перш ніж записати нове. Бути в курсі

Ця сторінка допомогла?

Чого бракувало або що не спрацювало? Ми читаємо кожну таку відповідь.

Якщо ця сторінка не розв'язала проблему, напиши нам — скажи, яку статтю ти читав, і ми виправимо статтю.