Vysoké průměrné FPS, ale špatné 1% low: co to znamená

Průměr je střední hodnota ze všech snímků, a právě to skrývá ty snímky, které cítíš — co je 1% low, co ti říká velký rozdíl mezi těmi dvěma čísly a jak poznat, jestli s ním nějaká změna pohnula.

Počitadlo ukazuje 200 a hra působí jako 90. Nic není rozbité, nic nezamrzne na celou vteřinu, ale souboj nikdy nepůsobí tak, jak to číslo slibuje. Tenhle zážitek má jméno i měření, a jakmile ho umíš přečíst, přestaneš honit špatné číslo.

Nejdřív poctivá věta. Tahle stránka vysvětluje měření, ne opravu. w0a nikde nevypisuje číslo „získaných FPS“, takže jestli změna pomohla, vyčteš z vlastních záznamů před a po, proti vlastnímu šumu mezi běhy — a každé číslo níže se dá znovu spočítat ze souboru, který ukládá stránka Benchmark.

Co ta tři čísla doopravdy jsou

Seřaď všechny snímky jednoho běhu od nejpomalejšího k nejrychlejšímu.

Čas snímku jsou tatáž data v milisekundách a tuhle aritmetiku se vyplatí umět zpaměti, protože dělá zbytek téhle stránky konkrétním: 16,7 ms je 60 FPS, 6,9 ms je 144, 4,2 ms je 240.

Běh s průměrem 200 a 1% low 70 je tedy běh, ve kterém typický snímek trval zhruba 5 ms a nejhorší setina zhruba 14 — skoro třikrát tak dlouho. A při 200 FPS je jedno procento tvých snímků dva snímky každou sekundu. Dvakrát za sekundu obraz stojí po dobu tří snímků. Tohle je to, co cítíš, a žádný průměr ti o tom neřekne nic.

Čti ten rozdíl, ne to číslo

1% low 70 je v běhu na 90 FPS výborné a v běhu na 200 FPS alarmující. Užitečné čtení je ten vztah mezi nimi:

Co vidíšCo to obvykle znamená
Průměr a 1% low blízko sebeRovnoměrné dodávání snímků. Tomuhle se říká „plynulé“, i při skromné snímkové frekvenci.
1% low hluboko pod průměremNěco přerušuje jinak zdravý běh — událost, ne zátěž.
0.1% low hluboko pod 1% lowVzácné, hluboké události: reset ovladače, bouře stránkování, dlouhé čtení z disku.
Všechno nízko dohromadyProstě chceš víc, než hardware dodá. Sniž nějaké nastavení.

Třetí řádek se snadno přečte špatně. Když je tvoje 1% low v pořádku a 0.1% low příšerné, nemáš problém s rovnoměrností — máš hrstku konkrétních událostí, a události se dají najít.

Proč je špatný ocas jiný problém než nízký průměr

Nízký průměr je otázka zátěže: stroj dělá, co může, a nestačí to. Odpovědí je nastavení, rozlišení nebo jiný hardware.

Špatný ocas je otázka události: stroj většinou stíhá a něco ho pravidelně zastavuje. Odpovědí je najít tu věc. Seznam je krátký a každá položka po sobě nechá stopu — ovladač držící jádro procesoru, stránky vracející se z disku, načtení assetu, práce na pozadí, kompilace shaderu, reset ovladače. Proč hry trhají na Windows 11 prochází ten seznam příčinu po příčině, a co hledá sken trhání je jeho automatická verze, která každý nález označí jako prokázaný, pravděpodobný, kandidáta nebo neověřený, místo aby ti podala skóre jistoty, které si nezasloužila.

Je tu i mezipřípad: stroj, který v průměru není limitovaný grafickou kartou, ale v nejrušnějších okamžicích na limit narazí. Snímky, které zaostanou, jsou přesně ty snímky, kde se děje nejvíc — tedy souboj. Když tvoje grafická karta sedí hluboko pod plným vytížením, zatímco low hodnoty trpí, diagnostická stránka k tomu je GPU neběží na 100 %.

Kázeň při měření, bez které tohle všechno nemá cenu

Percentily jsou hlučnější než průměry, protože se počítají z menšího počtu snímků. Dva běhy téže nezměněné konfigurace nedají stejné 1% low a rozdíl mezi nimi je ta nejmenší změna, kterou jsi vůbec schopný rozeznat.

Proto je záznam užitečný jen vedle svého vlastního šumu. Stránka Benchmark počítá hranici šumu z rozptylu každého záznamu mezi minutami a vypisuje ji zvlášť pro průměr, pro 1% low a pro 0.1% low — a rozdíl, který se do ní vejde, netvrdí. To je celá ta kázeň v jednom chování: výsledek menší než tvoje vlastní kolísání mezi běhy není výsledek.

Prakticky:

  1. Stejná hra, stejná mapa nebo replay, stejná délka, stejná nastavení ve hře.
  2. Hraj stejně. Běh strávený zíráním do zdi a běh strávený v přestřelce se porovnat nedají.
  3. Nezměněnou konfiguraci zaznamenej aspoň třikrát, ještě než cokoli změníš, ať víš, jak vypadá tvůj vlastní šum.
  4. Změň jednu věc. Pět změn a jedno měření ti neřeknou nic o tom, která z nich zabrala — a sečíst pět samostatně změřených zisků je aritmetika, ne měření.
  5. Porovnej low hodnoty. K čemu je které číslo na stránce, popisuje Jak číst výsledek benchmarku.

Přesná aritmetika, číslo po čísle

Tohle dělá stránka Benchmark se záznamem, v pořadí, v jakém to dělá.

KrokPravidloProč tam je
Které snímky se počítajíJen snímky vykreslené v době, kdy byla hra oknem v popředí. Po návratu hry do popředí se vynechá první sekunda; před zjištěnou ztrátou fokusu se vynechá posledních 0,2 sekundy. Vynechaný čas se hlásí u běhu.Záznam začíná a končí z vlastního okna w0a, takže jeho okraje jsou hra v pozadí. V jednom uloženém záznamu bylo 94 ze 185 snímků za 1% low právě těmi okraji. Ta jedna sekunda je zvolená hodnota, ne změřená.
Dlouhé intervalyInterval mezi snímky delší než 200 ms se vyřadí z průměru i ze všech percentilů a počítá se zvlášť.Nad 200 ms jde o načítací obrazovku, alt-tab nebo zaseknutí ovladače, ne o vykreslování. Kdyby se zprůměroval, pohřbil by každý skutečný snímek.
Průměrné FPSZapočítané snímky vydělené časem, který zabraly: snímky × 1000 ÷ celkový počet milisekund.
1% lowSeřaď započítané časy snímků. Vezmi nejpomalejší 1 % z nich, zaokrouhlené nahoru a nikdy méně než jeden snímek, zprůměruj tyto časy snímků a výsledek převeď na FPS: 1000 ÷ ten průměr.Druhá běžná definice, snímková frekvence při času snímku na 99. percentilu, byla záměrně odmítnuta: když se zasekává přesně 1 % snímků, padne na hranici a hlásí skoro stejné číslo jako průměr.
0.1% lowTotéž s nejpomalejšími 0,1 %.
Čas snímku na 99. a 99,9. percentiluHlásí se zvlášť, v milisekundách.Pro čtenáře a nástroje, které používají percentilovou definici.
Příliš krátké na čteníPod 900 snímků není dost snímků na to, aby percentil cokoli znamenal.
Počet zásekůSnímek je zásek, když je delší než dvojnásobek mediánu okolních tří sekund i než ten medián plus 8 ms, a to až do jedné sekundy.Tři sekundy místo pevného počtu snímků, aby pravidlo znamenalo totéž při 60 FPS i při 300. Člen 8 ms brání tomu, aby se běžný jitter při vysokých snímkových frekvencích počítal jako zásek. Snímky mezi 200 ms a jednou sekundou jsou z percentilů vyřazené, ale tady se počítají: 250ms zaškobrtnutí při kompilaci shaderů je přesně to, co má tenhle počet zachytit.
Šum měřeníZáznam se rozřeže na bloky po 60 sekundách. Každá strana srovnání potřebuje aspoň dva celé bloky, jinak stránka místo obarvení čísla napíše „nelze porovnat“. Hranice šumu je 95% interval z rozptylu mezi bloky na obou stranách (Welchova metoda), vyjádřený v procentech hodnoty „před“. Počítají se jen úplné bloky bez ztracených událostí a nulová hranice šumu nevznikne nikdy.Rozdíl uvnitř tvého vlastního kolísání mezi bloky není výsledek.
Párová sérieKdyž spustíš sérii A/B, změna se nahlásí jen tehdy, když přesný znaménkový pořadový test i 95% bootstrapový interval mediánového rozdílu (10 000 převzorkování) vyloučí nulu a medián je aspoň tak velký jako nejmenší efekt, který podle pilotního měření o 10 bězích dokáže sestava zachytit. Série potřebuje aspoň 6 párů — s 5 je nejmenší možná p-hodnota 0,0625 — a navrhuje 8, v pořadí ABBA.Jeden pár před a po nedokáže oddělit změnu od zahřáté grafické karty nebo jiného spawnu.

Ověř si to sám: přepočítej to z CSV

Uložit CSV na stránce Benchmark zapíše jednu tabulku se sloupci side,kind,name,value. Řádky s kind = metric jsou souhrnná čísla; řádky s kind = frame jsou intervaly mezi snímky, jeden na řádek, s časem snímku v milisekundách ve value. Řádky snímků obsahují celou řadu včetně dlouhých intervalů, právě proto, abys mohl pravidlo 200 ms použít sám a dojít ke stejným číslům.

Dvě věci, než začneš:

V tabulkovém procesoru: vyfiltruj jednu hodnotu side a kind = frame, odstraň řádky nad 200, seřaď value od největší po nejmenší, zprůměruj prvních N řádků, kde N je počet řádků vydělený 100 a zaokrouhlený nahoru, a vyděl 1000 tím průměrem. Výsledek se má rovnat low_1pct_fps pro tu stranu.

V PowerShellu (pro druhou stranu nahraď before za 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

Pro 0.1% low použij 0.001 místo 0.01. Dvě rychlé kontroly konzistence ze stejného souboru: počet řádků snímků do 200 včetně se rovná metrice frames a počet nad 200 se rovná excluded_over_stall_ms.

Dvě věci, které percentil potichu zničí

Generování snímků. Vložené snímky nenesou žádný nový stav hry. 1% low odvozené z počítání snímků pořád vydá nějaké číslo, ale přestalo popisovat odezvu — a to byl jediný důvod, proč ses na něj díval. Při měření generování vypni. Tohle je věc definice, ne tvrzení, že generování snímků způsobuje trhání.

Načítací obrazovky a pauzy. Třísekundová pauza při načítání je jediný „interval snímku“ dlouhý tři tisíce milisekund, a když se v datech nechá, stane se z ní tvoje 0.1% low a pohřbí všechno skutečné. Právě proto se takhle dlouhé intervaly z percentilů vyřazují a hlásí se zvlášť, aby se na nich potichu nepostavilo žádné číslo.

Co s 1% low nepohne

Tohle si zaslouží říct natvrdo, protože se ty dvě věci snadno zaměňují: funkce pro latenci a stabilita percentilů jsou dvě různá tvrzení. Režimy nízké latence od výrobců zkracují hloubku vykreslovací fronty a to zkrácení změřené je. Žádné zveřejněné měření neukazuje, že by zlepšovaly percentily časů snímků. Obojí může stát za to; není to totéž, a stránka, která ti jedno vydává za druhé, ti něco prodává. Čistá instalace pro stabilní 1% low probírá zveřejněné důkazy i se zdroji a zpoždění vstupu, které žádný software nespraví je poctivé vyúčtování toho, kam práce s latencí dosáhne a kam ne.

Totéž opatrné čtení platí pro seznamy klíčů registru slibující lepší low hodnoty. Hodnoty pro správu paměti v jádře a přepisování rozlišení časovače se tady odmítají rovnou — ne proto, že by byly exotické, ale protože nikdo nezveřejnil jejich měření, které by přežilo setkání s metodou.

Co stránka Benchmark nevypisuje

Když máš špatné low hodnoty a chceš místo čísel příčiny, seznam je proč hry trhají na Windows 11 a to, co w0a kontroluje automaticky, je co hledá sken trhání. Konkrétně pro CS2 tohle všechno na jednu hru aplikuje Nízké FPS, trhání a sekání v CS2.

Související

Hraješ CS2? Které možnosti spuštění ještě něco dělají a kde v menu obrazu opravdu leží snímky: Nízké FPS, trhání a sekání v CS2: změřený kontrolní seznam

w0a nezmění žádné nastavení Windows, dokud o to nepožádáš, a tweak si před zápisem nové hodnoty uloží tu starou. Upozornit mě

Pomohla ti tahle stránka?

Co chybělo, nebo co nefungovalo? Čteme každou jednu takovou zprávu.

Jestli tahle stránka problém nevyřešila, napiš nám — uveď, který článek jsi četl, a my ten článek opravíme.