Il contatore dice 200 e il gioco dà la sensazione di 90. Non c'è niente di rotto, niente si blocca per un secondo intero, ma uno scontro a fuoco non è mai come il numero promette. Quella sensazione ha un nome e una misura, e appena la sai leggere smetti di inseguire il numero sbagliato.
Prima di tutto, la frase onesta. Questa pagina spiega una misura, non una soluzione. w0a non stampa da nessuna parte un numero di «FPS guadagnati», quindi se una modifica abbia aiutato è una cosa che leggi nelle tue catture prima e dopo, contro il tuo rumore da un'esecuzione all'altra — e ogni numero qui sotto si può ricalcolare dal file che salva la pagina Benchmark.
Che cosa sono davvero i tre numeri
Ordina tutti i frame di un'esecuzione dal più lento al più veloce.
- FPS medi sono la media di tutti quanti. È la cifra meno utile della pagina.
- L'1% low è l'uno per cento peggiore di quei frame. Di solito viene stampato come una cifra in FPS, quindi «un 1% low di 70» vuol dire che i tuoi frame peggiori sono durati ciascuno più o meno quanto un frame in un gioco a 70 FPS.
- Lo 0.1% low è il peggiore su mille — gli eventi rari e profondi.
I frame time sono gli stessi dati in millisecondi, e vale la pena imparare a memoria l'aritmetica perché rende concreto tutto il resto di questa pagina: 16.7 ms sono 60 FPS, 6.9 ms sono 144, 4.2 ms sono 240.
Quindi un'esecuzione con una media di 200 e un 1% low di 70 è un'esecuzione in cui il frame tipico è durato circa 5 ms e il centesimo peggiore circa 14 — quasi tre volte tanto. E a 200 FPS l'uno per cento dei tuoi frame sono due frame al secondo. Due volte al secondo l'immagine sta ferma per il tempo di tre frame. È questo che stai sentendo, e nessuna media te ne dirà mai niente.
Leggi il divario, non il numero
Un 1% low di 70 è ottimo in un'esecuzione a 90 FPS e allarmante in una a 200. La lettura utile è il rapporto fra i due:
| Che cosa vedi | Che cosa vuol dire di solito |
|---|---|
| Media e 1% low vicini fra loro | Consegna costante. È questo che vuol dire «fluido», anche con un frame rate modesto. |
| 1% low molto sotto la media | Qualcosa sta interrompendo un'esecuzione per il resto sana — un evento, non un carico di lavoro. |
| 0.1% low molto sotto l'1% low | Eventi rari e profondi: un reset del driver, una tempesta di paginazione, una lettura lunga dal disco. |
| Tutto basso insieme | Stai chiedendo più di quello che l'hardware consegna. Abbassa un'impostazione. |
La terza riga è facile da leggere male. Se il tuo 1% low è a posto e il tuo 0.1% low è pessimo, non hai un problema di ritmo — hai una manciata di episodi precisi, e gli episodi si possono trovare.
Perché una coda cattiva è un problema diverso da una media bassa
Una media bassa è una questione di carico di lavoro: la macchina sta facendo tutto quello che può e non basta. La risposta è un'impostazione, una risoluzione, o dell'hardware diverso.
Una coda cattiva è una questione di evento: la macchina per lo più tiene il passo e ogni tanto qualcosa la ferma. La risposta è trovare quel qualcosa. L'elenco è corto e ogni voce lascia una traccia — un driver che tiene occupato un core del processore, pagine che tornano dal disco, la lettura di un asset, un'attività in background, uno shader che viene compilato, un reset del driver. Perché i giochi scattano su Windows 11 percorre quell'elenco causa per causa, e cosa cerca la scansione degli scatti è la versione automatica, che etichetta ogni risultato come provata, probabile, candidata o non controllata invece di consegnarti un punteggio di confidenza che non si è guadagnata.
C'è anche un caso intermedio: una macchina che in media non è limitata dalla GPU ma che a un limite ci arriva nei momenti più affollati. I frame che restano indietro sono esattamente i frame in cui succede di più — cioè lo scontro a fuoco. Se la tua GPU se ne sta ben sotto la piena occupazione mentre i low soffrono, la pagina di diagnosi per quel caso è GPU non al 100%.
La disciplina di misura che rende utile tutto questo
I percentili sono più rumorosi delle medie, perché vengono calcolati su meno frame. Due esecuzioni della stessa configurazione non modificata non daranno lo stesso 1% low, e la differenza fra le due è il cambiamento più piccolo che tu sia in grado di rilevare.
Ecco perché una cattura è utile solo accanto al proprio rumore. La pagina Benchmark calcola un rumore di fondo dalla dispersione minuto per minuto di ogni cattura e lo stampa separatamente per la media, per l'1% low e per lo 0.1% low — e non sostiene una differenza che ci cade dentro. È tutta la disciplina in un solo comportamento: un risultato più piccolo del tuo vagare da un'esecuzione all'altra non è un risultato.
La versione pratica:
- Stesso gioco, stessa mappa o stesso replay, stessa durata, stesse impostazioni nel gioco.
- Gioca allo stesso modo. Un'esecuzione passata a guardare un muro e una passata in mezzo a uno scontro a fuoco non sono confrontabili.
- Esegui la configurazione non modificata almeno tre volte prima di cambiare qualsiasi cosa, così sai che aspetto ha il tuo rumore.
- Cambia una cosa sola. Cinque cambiamenti e una misura non ti dicono niente su quale abbia contato — e sommare fra loro cinque guadagni misurati separatamente è aritmetica, non misura.
- Confronta i low. Leggere il benchmark spiega a che cosa serve ogni numero della pagina.
L'aritmetica esatta, numero per numero
Ecco che cosa fa la pagina Benchmark con una cattura, nell'ordine in cui lo fa.
| Passo | La regola | Perché c'è |
|---|---|---|
| Quali frame contano | Solo i frame disegnati mentre il gioco era la finestra in primo piano. Quando il gioco torna in primo piano, il primo secondo resta fuori; prima di una perdita di focus rilevata, restano fuori gli ultimi 0,2 secondi. Il tempo lasciato fuori viene riportato insieme all'esecuzione. | Una cattura parte e si ferma dalla finestra di w0a, quindi i suoi bordi sono il gioco in background. In una cattura registrata, 94 dei 185 frame dietro l'1% low erano proprio quei bordi. Il secondo è un valore scelto, non misurato. |
| Blocchi | Un intervallo fra frame più lungo di 200 ms viene escluso dalla media e da ogni percentile, e contato a parte. | Oltre i 200 ms è una schermata di caricamento, un alt-tab o un blocco del driver, non rendering. Messo nella media, seppellirebbe ogni frame vero. |
| FPS medi | I frame contati divisi per il tempo che hanno impiegato: frame × 1000 ÷ millisecondi totali. | |
| 1% low | Ordina i frame time contati. Prendi l'1% più lento, arrotondato per eccesso e mai meno di un frame, fai la media di quei frame time e trasforma il risultato in FPS: 1000 ÷ quella media. | L'altra definizione comune, il frame rate al frame time del 99° percentile, è stata scartata di proposito: con esattamente l'1% dei frame che scattano cade sul confine e riporta quasi lo stesso numero della media. |
| 0.1% low | Lo stesso, con lo 0,1% più lento. | |
| Frame time al 99° e al 99,9° percentile | Riportati a parte, in millisecondi. | Per i lettori e gli strumenti che usano la definizione a percentile. |
| Troppo corta per essere letta | Sotto i 900 frame non ci sono abbastanza frame perché il percentile voglia dire qualcosa. | |
| Conteggio degli scatti | Un frame è uno scatto quando è più lungo sia del doppio della mediana dei tre secondi intorno sia di quella mediana più 8 ms, fino a un secondo. | Tre secondi invece di un numero fisso di frame, così la regola vuol dire la stessa cosa a 60 FPS e a 300. Il termine di 8 ms impedisce che il normale jitter ad alto frame rate conti come scatto. I frame fra 200 ms e un secondo sono esclusi dai percentili ma inclusi qui: un singhiozzo di 250 ms dovuto alla compilazione degli shader è esattamente quello che questo conteggio esiste per catturare. |
| Rumore di fondo | La cattura viene tagliata in blocchi da 60 secondi. Ogni lato di un confronto ha bisogno di almeno due blocchi interi, altrimenti la pagina dice «non confrontabile» invece di colorare un numero. Il rumore di fondo è un intervallo al 95% ricavato dalla dispersione da un blocco all'altro dei due lati (metodo di Welch), come percentuale del valore «prima». Contano solo i blocchi completi senza eventi persi, e un rumore di fondo pari a zero non viene mai prodotto. | Una differenza che sta dentro il tuo stesso vagare da un blocco all'altro non è un risultato. |
| Serie appaiata | Quando lanci una serie A/B, una modifica viene riportata solo se un test esatto dei ranghi con segno e un intervallo bootstrap al 95% della differenza mediana (10.000 ricampionamenti) escludono entrambi lo zero, e la mediana è almeno l'effetto più piccolo che un pilota da 10 esecuzioni ha mostrato che la configurazione può rilevare. La serie ha bisogno di almeno 6 coppie — con 5, il valore p più piccolo possibile è 0,0625 — e ne suggerisce 8, eseguite in ordine ABBA. | Una sola coppia prima-dopo non può separare una modifica da una GPU calda o da uno spawn diverso. |
Controlla da te: ricalcola dal CSV
Salva CSV nella pagina Benchmark scrive una tabella con le colonne side,kind,name,value. Le righe con kind = metric sono i numeri di riepilogo; le righe con kind = frame sono gli intervalli fra frame, uno per riga, con il frame time in millisecondi in value. Le righe dei frame contengono l'intera serie, blocchi compresi, proprio perché tu possa applicare da te la regola dei 200 ms e arrivare agli stessi numeri.
Due cose prima di cominciare:
- I numeri nel file usano sempre il punto come separatore decimale, qualunque cosa dica la tua area geografica di Windows. Nelle impostazioni internazionali per l'Italia il separatore decimale è invece la virgola: di' al tuo foglio di calcolo, quando importi il file, che usa il punto, altrimenti
6.94arriva come testo. - I nomi delle colonne sono identificatori inglesi fissi. Servono agli script e sono gli stessi in ogni lingua.
In un foglio di calcolo: filtra su un side e su kind = frame, togli le righe sopra 200, ordina value dal più grande al più piccolo, fai la media delle prime N righe, dove N è il numero di righe diviso per 100 e arrotondato per eccesso, e dividi 1000 per quella media. Il risultato deve essere uguale a low_1pct_fps per quel lato.
In PowerShell (sostituisci before con after per l'altro lato):
$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
Usa 0.001 invece di 0.01 per lo 0.1% low. Due controlli di coerenza rapidi dallo stesso file: il numero di righe dei frame fino a 200 compreso è uguale alla metrica frames, e il numero sopra 200 è uguale a excluded_over_stall_ms.
Due cose che rovinano un percentile senza farsi notare
La generazione di fotogrammi. I fotogrammi inseriti non portano nessuno stato di gioco nuovo. Un 1% low ricavato contando i frame produce comunque un numero, ma ha smesso di descrivere la reattività — che è l'unico motivo per cui lo stavi guardando. Spegni la generazione mentre misuri. È un punto di definizione, non l'affermazione che la generazione di fotogrammi causi scatti.
Le schermate di caricamento e le pause. Una pausa di caricamento di tre secondi è un solo «intervallo fra frame» da tremila millisecondi, e lasciata nei dati diventa il tuo 0.1% low e seppellisce tutto quello che è reale. Intervalli così lunghi vengono esclusi dai percentili proprio per questo motivo e riportati a parte, così un numero non viene mai costruito in silenzio sopra a uno di essi.
Che cosa non muove l'1% low
Vale la pena dirlo apertamente, perché è facile confondere le due cose: le funzioni per la latenza e la stabilità dei percentili sono affermazioni diverse. Le modalità a bassa latenza dei produttori riducono la profondità della coda di rendering, e quella riduzione è stata misurata. Non esiste nessuna misura pubblicata che mostri che migliorino i percentili dei frame time. Le due cose possono valere entrambe la pena; non sono la stessa cosa, e una pagina che presenta l'una come l'altra ti sta vendendo qualcosa. Installazione pulita per 1% low stabili passa in rassegna le prove pubblicate con le fonti, e la latenza che nessun software può risolvere è il resoconto onesto di che cosa il lavoro sulla latenza può raggiungere e che cosa no.
La stessa cautela vale per le liste di chiavi di registro che promettono low migliori. I valori di gestione della memoria del kernel e le forzature della risoluzione del timer qui vengono rifiutati in blocco, non perché siano esotici ma perché nessuno ne ha pubblicato una misura che sopravviva al contatto con un metodo.
Che cosa la pagina Benchmark non stampa
- Nessun numero di «FPS guadagnati», per nessuna impostazione, da nessuna parte in w0a. Un guadagno è quello che mostrano le tue due catture, o niente.
- Nessuna causa, solo il momento. Quando uno scatto coincide con qualcos'altro che è successo, la scheda dice che i due sono caduti nella stessa finestra di tempo. Non dice che uno ha causato l'altro.
- Nessuna differenza dentro il rumore di fondo viene mostrata come una modifica, in nessuna direzione.
Se i tuoi low sono scarsi e vuoi le cause invece dei numeri, Perché i giochi scattano su Windows 11 è l'elenco, e cosa cerca la scansione degli scatti è quello che w0a controlla da sola. Per CS2 in particolare, CS2, pochi FPS e scatti applica tutto questo a un solo gioco.
Correlati
- Perché i giochi scattano su Windows 11
- GPU non al 100%
- Leggere il benchmark
- Come ridurre l'input lag: cosa può accorciare un software e cosa no
- Scatti da compilazione degli shader
- CS2, pochi FPS e scatti
Giochi a CS2? Quali opzioni di avvio fanno ancora qualcosa e dove stanno davvero i frame nel menu video: CS2, pochi FPS e scatti: una lista di controllo misurata
Questa pagina ti è stata utile?
Cosa mancava, o cosa non ha funzionato? Le leggiamo tutte, una per una.
Se questa pagina non ha risolto il problema, scrivici — dicci quale articolo hai letto, e sistemiamo l'articolo.