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.
- Průměrné FPS je střední hodnota ze všech. Je to nejméně užitečný údaj na celé stránce.
- 1% low je nejhorší procento z těch snímků. Obvykle se vypisuje jako FPS, takže „1% low 70“ znamená, že každý z tvých nejhorších snímků trval zhruba tak dlouho jako snímek ve hře běžící na 70 FPS.
- 0.1% low je nejhorší jeden z tisíce — ty vzácné, hluboké události.
Č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 sebe | Rovnoměrné dodávání snímků. Tomuhle se říká „plynulé“, i při skromné snímkové frekvenci. |
| 1% low hluboko pod průměrem | Něco přerušuje jinak zdravý běh — událost, ne zátěž. |
| 0.1% low hluboko pod 1% low | Vzácné, hluboké události: reset ovladače, bouře stránkování, dlouhé čtení z disku. |
| Všechno nízko dohromady | Prostě 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:
- Stejná hra, stejná mapa nebo replay, stejná délka, stejná nastavení ve hře.
- Hraj stejně. Běh strávený zíráním do zdi a běh strávený v přestřelce se porovnat nedají.
- Nezměněnou konfiguraci zaznamenej aspoň třikrát, ještě než cokoli změníš, ať víš, jak vypadá tvůj vlastní šum.
- 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í.
- 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á.
| Krok | Pravidlo | Proč 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é intervaly | Interval 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é FPS | Započítané snímky vydělené časem, který zabraly: snímky × 1000 ÷ celkový počet milisekund. | |
| 1% low | Seř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% low | Totéž s nejpomalejšími 0,1 %. | |
| Čas snímku na 99. a 99,9. percentilu | Hlá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érie | Když 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š:
- Čísla v souboru vždy používají jako desetinný oddělovač tečku, ať tvoje oblast ve Windows říká cokoli. V místním nastavení pro Česko je desetinným oddělovačem naopak čárka: při importu řekni tabulkovému procesoru, že soubor používá tečku, jinak
6.94dorazí jako text. - Názvy sloupců jsou pevné anglické identifikátory. Jsou určené pro skripty a v každém jazyce jsou stejné.
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
- Žádné číslo „získaných FPS“, pro žádné nastavení, nikde ve w0a. Zisk je to, co ukážou tvoje vlastní dva záznamy, nebo nic.
- Žádná příčina, jen načasování. Když se zásek kryje s něčím jiným, co se stalo, karta řekne, že obojí spadlo do stejného okna. Neříká, že jedno způsobilo druhé.
- Žádný rozdíl uvnitř hranice šumu se neukáže jako změna, v žádném směru.
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í
- Proč hry trhají na Windows 11
- GPU neběží na 100 %
- Jak číst výsledek benchmarku
- Jak snížit latenci (input lag): co software dokáže zkrátit a co ne
- Trhání při kompilaci shaderů
- Nízké FPS, trhání a sekání v CS2
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
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.