Il tuo contatore dice 160. Il gioco dà uno scossone lo stesso — una frazione di secondo in cui l'immagine si ferma, la tua mira finisce in un punto in cui non l'avevi messa, e poi va tutto di nuovo bene. Il contatore non si è mosso, ed è per questo che niente di quello che fai per alzarlo serve a qualcosa.
Quella distanza è tutto l'argomento di questa pagina. Uno scatto è un frame arrivato in ritardo, non un frame rate basso. Un contatore di frame fa la media su un secondo, quindi un solo frame durato 90 ms sparisce dentro i 159 frame corti che gli stanno accanto. Il numero che descrive quello che hai sentito è il frame time, e uno scatto è un frame molto più lento dei suoi vicini.
Prima di tutto, la frase onesta. Due delle dieci cause qui sotto corrispondono a una singola casella di w0a: il valore dello scheduler nella causa 8 e il registratore di gioco in background nella causa 9. Le due caselle si limitano a rimettere un'impostazione dove deve stare, e su una macchina che nessuno ha toccato la prima non trova niente da cambiare. Se lo scatto che senti fosse uno di questi, te lo può dire solo una cattura prima e dopo.
Prima di tutto, capisci quale dei tre problemi hai
Vengono chiamati con la stessa parola e non hanno quasi niente in comune.
- Gli intoppi. La base è a posto e ogni tanto succede qualcosa di lungo. È questa pagina.
- Una base irregolare. Niente di drammatico, ma il gioco non è mai fluido. È un problema di percentili: FPS medi alti ma 1% low scarsi.
- Un calo. Il frame rate scende e resta giù per secondi o minuti. Cause del tutto diverse: cali di FPS improvvisi nei giochi.
Prendi una registrazione prima di cambiare qualsiasi cosa
È tirare a indovinare che fa durare settimane questa cosa. Una cattura del gioco a cui giochi davvero, nel punto in cui scatta davvero, trasforma «che cosa potrebbe essere» in «che cosa è successo a quel picco» — ed è il «prima» rispetto a cui verrà giudicato ogni cambiamento successivo. Leggere il benchmark spiega come.
Le cause, una per una
1. Un driver che tiene occupato un core del processore
Mentre un driver sta dentro un interrupt o una chiamata differita, quel core gira sopra ogni priorità di thread che esista: non disegna niente e non legge input finché il driver non lascia la presa. È una causa che sfugge facilmente: non compare in nessun grafico dei frame time e in nessun task manager.
Come lo scopri: misuralo. La sezione sul kernel di leggere il test di latenza elenca ogni driver che ha tenuto occupato un core, ordinato per occupazione più lunga, con il nome del file. Oltre circa 1 ms un driver sta spostando i report di input; da 4 ms in su la macchina non riesce a tenere un frame time stabile qualunque altra cosa tu cambi.
Che cosa fai: aggiorna quel singolo driver dal produttore dell'hardware — non tutto il sistema, il file che ti viene nominato. I driver di rete, di archiviazione e audio sono tra i driver che possono farlo.
2. Shader che vengono compilati
Effetto nuovo, area nuova, arma nuova, e il gioco deve compilare uno shader prima di poterlo disegnare. La compilazione avviene sulla CPU mentre il frame aspetta.
Come lo scopri: è peggiore nei primi minuti di una sessione o di una mappa, sfuma mentre giochi, e torna dopo un aggiornamento del driver o del gioco. Se i tuoi scatti non sfumano, non è questo — scatti da compilazione degli shader è la versione lunga.
Che cosa fai: giocaci attraverso, e non fare benchmark dentro quella finestra; misureresti il compilatore.
3. Il disco da cui il gioco carica in streaming
Un gioco che tira dentro gli asset mentre ti muovi fa scatti quando la lettura è lenta, e il frame che aspetta quei dati è quello in ritardo.
Come lo scopri: gli intoppi coincidono con l'ingresso in un'area nuova, e gli intervalli fra frame lunghi cadono nella stessa finestra dell'attività del disco. Controlla le cose ovvie: se il gioco sta su un disco meccanico, se il disco è quasi pieno, se la cartella del gioco sta dentro una cartella sincronizzata sul cloud che carica ogni scrittura, se il file di paging sta su un disco a piatti rotanti. Un SSD per un gioco che carica in streaming non è un tweak, è la risposta.
4. Pressione sulla memoria
Quando la RAM si riempie, Windows sposta delle pagine sul disco, e quelle che tornano indietro si sentono come intoppi. Il caso meno ovvio è il limite di commit: man mano che si esaurisce la memoria totale che Windows può distribuire, il gestore della memoria toglie pagine ai programmi ancora in esecuzione, e il gioco sente quei prelievi come blocchi di meno di un secondo. Tutti e due migliorano nel momento in cui chiudi un browser con quaranta schede.
5. Qualcos'altro in esecuzione
Il processo di lavoro di Windows Update, un'attività di manutenzione, una scansione antimalware pianificata, un'esportazione video di cui ti eri dimenticato. Quel lavoro non si ferma quando parte un gioco; si mette in coda per lo stesso core del thread di rendering, quindi si presenta come picchi nei frame time invece che come una media più bassa. Aspettare che finisca è una soluzione legittima.
Come lo scopri: una cattura del benchmark conserva i suoi intervalli di frame più lunghi insieme agli accessi al disco e agli hard fault caduti nella stessa finestra. Se erano processi di manutenzione o dell'antivirus di Windows, la scheda degli intervalli lunghi conta gli intervalli e nomina i processi. È ciò che è coinciso, non la prova che quel lavoro abbia ritardato il frame: l'antivirus legge tutto ciò che apre qualsiasi programma.
6. Calore e limiti di potenza
Quando un chip arriva al suo tetto di temperatura o di potenza il clock viene tirato giù e rispinto su di continuo, e i frame time ondulati sono quello che si sente da dentro. Questa decisione la prende il firmware da sé, senza chiedere niente a Windows. Comincia dopo un po' invece che subito, e segue quanto è calda la stanza.
7. Lo schermo
Un monitor che gira sotto la frequenza di aggiornamento che supporta mette sotto il tuo ritmo dei frame un pavimento che l'hardware non richiede. Controlla la frequenza reale invece di darla per scontata; dopo un'installazione pulita o un cambio di cavo è sbagliata su un numero sorprendente di macchine.
8. Un valore dello scheduler lasciato indietro da un vecchio strumento
Win32PrioritySeparation decide per quanto tempo un thread tiene il processore e quanto tempo in più riceve l'applicazione in primo piano. I valori con quanti lunghi o fissi, o con una quota del primo piano sotto 3:1, cambiano il modo in cui il processore viene diviso tra il gioco e tutto il resto; non è stato misurato che cosa facciano ai frame time. La scheda Memoria e impostazioni di sistema della pagina Fix rimette il valore predefinito di Windows.
9. Gli overlay e lo strato di cattura
Gli overlay disegnano dentro il frame del gioco stesso, e un registratore in background codifica ogni frame perché si possano salvare gli ultimi minuti. Chiudili uno alla volta e prova, invece che tutti insieme.
10. La partita, non la macchina
Un gioco online può fare intoppi per tutti quelli sul server nello stesso momento. Se i contenuti in giocatore singolo sulla stessa macchina sono puliti e la registrazione dei frame time mostra il gioco che presenta normalmente, quella è una risposta davvero utile: non è il tuo PC.
Le due cause per cui w0a ha una casella
Causa 8: «Mantieni la priorità in primo piano al valore giusto (Win32PrioritySeparation)» (pagina Ottimizzazioni)
Un valore DWORD: Win32PrioritySeparation sotto HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\PriorityControl.
Il riferimento di Microsoft per questo valore è una pagina archiviata scritta per Windows 2000; descrive sei bit letti in tre coppie, scritti come AABBCC:
| Coppia | Che cosa decide | Valori |
|---|---|---|
| AA (i due bit più alti) | Per quanto tempo un thread può girare ogni volta | 01 più lungo, 10 più corto, 00 o 11 il valore predefinito dell'edizione (più corto su un'edizione workstation) |
| BB (i due centrali) | Se quella durata varia | 01 variabile, 10 fissa, 00 o 11 il valore predefinito dell'edizione (variabile su un'edizione workstation) |
| CC (i due più bassi) | Quanto tempo in più riceve il programma in primo piano | 00 uguale (e fisso), 01 2:1, 10 o 11 3:1. Usata solo quando la coppia centrale vuol dire variabile. |
- Valore predefinito di Windows:
0x2(binario 000010). Su un'edizione workstation vuol dire quanti più corti e variabili, con il programma in primo piano che riceve tre volte il tempo del background. Lo stesso riferimento dà0x26(100110: più corto, variabile, 3:1) per la scelta delle opzioni prestazioni che favorisce i programmi, e0x18(011000: più lungo, fisso, uguale) per quella che favorisce i servizi in background. - Che cosa fa la casella: legge prima il valore. Un valore che dà già al primo piano la quota di 3:1, senza quanti più lunghi e senza quanti fissi, resta esattamente com'è, e la casella lo dice. Viene riscritto, a
0x26, solo un valore che manca una di queste tre condizioni. Sul valore predefinito di Windows la casella non scrive niente: su un'edizione client0x2pianifica già come chiede0x26. - Quando ha effetto: dopo un riavvio. Il kernel trasforma questo valore nella sua tabella di scheduling all'avvio, quindi cambiarlo nel registro non cambia niente dello scheduler che è già in esecuzione, e la casella chiede un riavvio quando scrive.
- Come tornare indietro: la scheda Memoria e impostazioni di sistema riscrive
2e chiede un riavvio. Nello stesso momento ripristina altri valori predefiniti della memoria e dello scheduler.
Causa 9: «Disattiva Xbox Game DVR» (pagina Ottimizzazioni)
| Valore | La casella scrive | Valore predefinito di Windows (quello che ripristina la scheda di riparazione) |
|---|---|---|
HKCU\System\GameConfigStore, GameDVR_Enabled | 0 | 1 |
HKLM\SOFTWARE\Policies\Microsoft\Windows\GameDVR, AllowGameDVR | 0 | assente |
HKCU\Software\Microsoft\Windows\CurrentVersion\GameDVR, AppCaptureEnabled | 0 | 1 |
HKCU\Software\Microsoft\GameBar, ShowStartupPanel | 0 | assente |
HKCU\Software\Microsoft\GameBar, UseNexusForGameBarEnabled | 0, tranne su un Ryzen X3D a due CCD | assente |
Sono tutti DWORD. Su un processore X3D a due CCD la casella lascia stare l'ultimo valore: la catena di registrazione viene comunque spenta, ma la parte di Game Bar che il driver di AMD ascolta resta in funzione. È una precauzione, non una causa provata, e il messaggio della casella dice quale strada ha preso. Ryzen X3D, Game Bar e core parking spiega perché quella parte conta su quei chip.
- Quando ha effetto: w0a non chiede un riavvio per questa casella.
- A che cosa rinunci: alla registrazione di Game Bar. Se Win+G smette di aprirsi o rivuoi la registrazione, la scheda Game Bar / registrazione di gioco riattiva Game Bar e Game DVR con i valori predefiniti di Windows.
- Che cosa dice la scansione degli scatti: annota, come informazione, quando
GameDVR_EnabledoAppCaptureEnabledè ancora attivo; entrambi valgono 1 su un'installazione pulita, quindi questo è il valore predefinito, non un guasto. Legge anche un terzo valore,HistoricalCaptureEnabled(registrazione in background), ma solo per scegliere come formulare il messaggio; la casella non scrive quel valore.
Controlla da te
Questi comandi si limitano a leggere:
reg query "HKLM\SYSTEM\CurrentControlSet\Control\PriorityControl" /v Win32PrioritySeparation
reg query "HKCU\System\GameConfigStore" /v GameDVR_Enabled
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\GameDVR"
reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\GameDVR" /v AllowGameDVR
reg query "HKCU\Software\Microsoft\GameBar"
Come leggere le risposte:
- I valori vengono stampati in esadecimale:
Win32PrioritySeparation REG_DWORD 0x26vuol dire0x26. 0x2è il valore predefinito di Windows e0x26è la scelta del riferimento che favorisce i programmi; su un'edizione client i due pianificano allo stesso modo.0x18è la scelta che favorisce i servizi in background: quanti più lunghi e fissi, e nessuna quota in più per il primo piano, che è esattamente il tema della causa 8. Per qualsiasi altro valore, scrivilo come sei cifre binarie e leggilo con la tabella qui sopra.- Per Game DVR,
0x0vuol dire disattivato (la casella) e0x1vuol dire attivo (il valore predefinito di Windows). - Se la query su
AllowGameDVRtermina con un errore invece che con una riga, il valore dei criteri non esiste, e quello è il valore predefinito di Windows.
Che cosa ne fa la scansione
Cosa cerca la scansione degli scatti esegue questi controlli su quello che Windows e i tuoi driver hanno già registrato, ed etichetta ogni risultato come provata, probabile, candidata o non controllata. Due cose che vale la pena sapere: una scansione che trova sempre dieci problemi ti sta vendendo le soluzioni, e un controllo che non è potuto girare viene contato invece che trattato in silenzio come pulito.
Poi cambia una cosa sola e cattura di nuovo la stessa scena. Cinque cambiamenti e una misura non ti dicono niente su quale abbia contato, e tutto quello che non ha mosso un numero va annullato.
Cose che non sono la causa
Tutto questo circola senza fine come soluzione per gli scatti, e w0a si rifiuta di scrivere ognuno di questi valori, per motivi documentati:
DisablePagingExecutive,LargeSystemCacheeDisablePageCombiningcambiano il gestore della memoria del kernel;NtfsMemoryUsagecambia il pool del driver NTFS; ancheIoPageLockLimiteSecondLevelDataCachesono presupposti del kernel. I valori a livello di kernel sono una regola del prodotto: non vengono mai scritti.GlobalTimerResolutionRequestssta sottoSession Manager\kernel, una chiave che il prodotto rifiuta in blocco.MSISupportedcambia la modalità di interrupt di un dispositivo; impostato male, il risultato può essere uno schermo nero.FeatureSettingsOverrideeFeatureSettingsOverrideMaskdisattivano le mitigazioni per Spectre e Meltdown.OverlayTestModeeDisableOverlaysdisattivano il multi-plane overlay (MPO). Su una macchina vera con Windows 11 25H2 hanno bloccato CS2 del tutto, in modo ripetibile.TdrDelayeTdrDdiDelayallungano il watchdog del driver grafico, il che rende solo più lungo ogni blocco;TdrLeveldisattiva il ripristino.
Su una macchina a cui la memoria non manca, un pulitore di memoria non cambia niente di misurabile.
Correlati
- Cali di FPS improvvisi nei giochi
- Scatti da compilazione degli shader
- Leggere il test di latenza
- Cosa cerca la scansione degli scatti
- FPS medi alti ma 1% low scarsi
- Latenza DPC: quando è un driver a fare scatti
- Annullare le modifiche fatte da w0a
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.