Latenza DPC: quando è un driver a fare scatti

Un driver dentro un interrupt gira sopra ogni thread della macchina, quindi non compare in nessun task manager e in nessun grafico dei frame time — quanto costa, come misurarlo onestamente, quale file corrisponde a quale dispositivo, e l'unica soluzione che funziona.

Hai passato in rassegna tutta la lista. Non c'è niente in esecuzione, le temperature sono a posto, il disco è veloce, il gioco sta su un SSD, e la macchina continua a dare scossoni. Gestione attività mostra un sistema fermo. Il grafico dei frame time mostra il frame in ritardo ma non dice niente sul perché fosse in ritardo.

C'è una causa che spiega esattamente questa forma, ed è invisibile in tutti gli strumenti a cui la maggior parte delle persone ricorre, perché avviene sotto di loro.

Prima di tutto, la frase onesta. La soluzione per un driver che tiene occupato un core è quel driver, dal suo produttore. La parte di w0a è la misura, il nome del file e la riparazione dei valori lasciati indietro da strumenti più vecchi. L'unico interruttore che offriva in questa zona, instradare gli interrupt di un dispositivo verso core scelti, è in sola lettura dall'8 ottobre 2026, perché nessun test A/B in un gioco ha mai mostrato un frame guadagnato grazie a lui.

Che cosa sta succedendo davvero

Un dispositivo — una scheda di rete, un controller del disco, un chip audio, un controller USB — ha bisogno dell'attenzione del processore. Solleva un interrupt, e Windows esegue subito la routine di servizio dell'interrupt del driver. Quella routine gira sopra ogni priorità di thread che esista: non «priorità alta», ma proprio fuori dallo scheduler dei thread. Su quel core non si può mettere in esecuzione nient'altro finché non ritorna.

Siccome è un posto costoso in cui stare, i driver dovrebbero farci il minimo indispensabile e rimandare il resto a una chiamata differita — un DPC — che gira un istante dopo, sempre davanti a ogni thread di quel core.

Mentre una delle due è in esecuzione, quel core non disegna niente e non legge input. Se il tuo thread di rendering era lì sopra, il tuo frame è in ritardo. Se il report del tuo mouse era in coda dietro di essa, il tuo input è in ritardo. E nessuno dei due eventi compare in un task manager, perché non c'è nessun processo a cui attribuirlo.

Perché qui un millisecondo è tanto

È l'aritmetica a rendere la cosa degna di essere inseguita:

Misurarla, e i due modi in cui la misura fallisce

Il Test di latenza di w0a apre una sessione di tracciamento del kernel e registra, per dodici secondi di movimento reale del mouse, per quanto tempo ogni driver ha tenuto occupato un core. Servono i diritti di amministratore. Perché il test chiede 12 secondi parla della durata; leggere il test di latenza parla dei colori.

Due risultati non sono risposte, ed entrambi vengono riportati come tali invece di essere arrotondati a «pulito»:

Ce n'è un terzo, più sottile: una sessione che ha perso degli eventi può essersi lasciata sfuggire del tutto l'esecuzione peggiore, perciò la pagina dice che quel numero potrebbe non essere il vero peggiore. È lo stesso principio che la scansione degli scatti applica ovunque — una regola che non è potuta girare viene contata come non controllata, mai come pulita.

I numeri, esattamente

NumeroLa regola
Durata del testDodici secondi per impostazione predefinita: abbastanza per beccare un driver che si comporta male una volta al secondo, e abbastanza pochi perché tu continui davvero a muovere il mouse per tutto il tempo.
Dati del mouse sufficientiDue secondi dei rapporti del dispositivo stesso, e mai meno di 250 campioni; per un mouse a 1000 Hz sono 2.000. Sotto questa soglia il 99° percentile è il secondo o il terzo campione peggiore, non una statistica.
Verdetto sul driverLa singola esecuzione peggiore di un driver viene segnata come avviso da 1 ms e come critica da 4 ms. Sono le soglie che questo campo usa da due decenni; sono una convenzione, non una misura che w0a ha fatto sulla tua macchina.
Una misura completaI numeri dei driver contano come completi solo quando la sessione di tracciamento del kernel è girata e non ha perso nessun evento. Un contatore che si rifiuta di rispondere viene trattato come un'esecuzione con perdite, non come una pulita.
Minimo di sistemaIl 99° percentile del mouse, più mezzo intervallo di aggiornamento, più l'esecuzione peggiore di un driver — quest'ultima solo quando la parte del kernel è stata misurata, perché sommare zero per un kernel non misurato stamperebbe un numero più bello proprio quando lo strumento ne sa di meno. È un minimo, mai un totale: il campionamento dell'input del gioco stesso, la sua coda di rendering, il lavoro della GPU e la risposta del pannello restano tutti fuori. La latenza che nessun software può risolvere è il resto della catena.

Leggere l'elenco

Ogni driver compare con il nome del suo file, la sua occupazione singola più lunga, la sua quota del tempo misurato e quante volte è stato eseguito. Ordina per occupazione più lunga; è quello il numero che ti costa un frame.

Due letture che la gente sbaglia:

Quale file è quale, e che cosa fare per ciascuno

Il nome del file è tutto l'indizio, e la famiglia a cui appartiene decide la soluzione:

FamigliaChe cos'èChe cosa aiuta davvero
Rete senza filiIl driver dell'adattatore Wi-FiIl driver del produttore invece di quello generico che fornisce Windows Update. Un cavo toglie la riga del tutto.
Rete cablataScheda di rete della scheda madre o aggiuntivaIl driver del produttore della scheda madre. Spegnere la moderazione degli interrupt non risolve questa riga: senza di essa i pacchetti non vengono più raggruppati, ogni pacchetto ricevuto genera un proprio interrupt e il driver gira più spesso, non meno. Per questo la pagina Connessione non tocca la moderazione degli interrupt sulle macchine con meno di sei core fisici — vedi tweak di rete.
ArchiviazioneIl controller sul percorso verso il tuo discoSu NVMe prova il driver di Windows e quello del produttore, e tieni quello con cui il test di latenza mostra il valore più basso. Un driver di archiviazione di terze parti vale la pena toglierlo.
USBController hostI driver del chipset, e spostare il mouse su una porta della scheda madre invece che dietro un hub.
AudioCodec, e tutto quello che gli sta sopraIl driver del produttore; se persiste, il driver audio generico di Windows di solito lo abbassa. Le utility RGB e audio girano su questo percorso.
SchermoDriver videoIl sito del produttore. Se è cominciato dopo un aggiornamento, torna alla versione precedente.
Componenti di Windows stessoTempo speso per conto di qualche altro driverNon c'è niente da «aggiornare» di per sé — sistemare i driver qui sopra abbassa anche questa riga.
Gestione dell'energiaIl percorso che cambia clock e stati di riposoAlzare lo stato minimo del processore e ridurre la profondità dei C-state nel firmware la accorciano entrambi, ed entrambi alzano il consumo a riposo. È uno scambio, non una soluzione.

Un driver di filtro merita una riga a sé. Gli strumenti che modellano il traffico e instradano le connessioni fanno passare ogni pacchetto attraverso un driver loro, e gli intoppi di rete da più secondi sono il loro effetto collaterale più noto; la scansione degli scatti li nomina quando li trova. Lo stesso vale per le suite di macro e per i programmi di illuminazione che installano un filtro sul percorso di mouse e tastiera.

La soluzione, e le non-soluzioni

La soluzione è aggiornare quel singolo driver, dal produttore dell'hardware. Non tutto il sistema, non attraverso uno strumento che aggiorna driver, e non reinstallando Windows. La pagina nomina il file con precisione, così puoi cercare a quale dispositivo appartiene.

Quello che non risolve il problema, e che proprio per questo qui viene rifiutato: le forzature della risoluzione del timer, i valori di gestione della memoria del kernel (DisablePagingExecutive, LargeSystemCache) e le liste di chiavi di registro che circolano sotto la parola «latenza». Nessuna di queste cose cambia per quanto tempo un driver tiene occupato un core, perché a tenerlo occupato è il codice del driver. Nemmeno disattivare dispositivi a caso è una diagnosi — anche se disattivare un dispositivo come prova, con una misura prima e una dopo, è un esperimento perfettamente valido. Lo stesso vale per i valori a livello di dispositivo che circolano insieme a queste liste: MSISupported cambia la modalità di interrupt di un dispositivo e, impostato male, il risultato può essere uno schermo nero, quindi w0a non lo scrive mai, e la scheda di riparazione dell'instradamento degli interrupt qui sotto lo lascia stare.

Le due impostazioni vicine che w0a tocca

Criterio degli interrupt del dispositivo: sola lettura, con una scheda di riparazione

Dove lo tiene Windows: per dispositivo, sotto HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI\<device>\<instance>\Device Parameters\Interrupt Management\Affinity Policy. DevicePolicy (DWORD) sceglie come vengono collocati gli interrupt del dispositivo; quando vale 4, «processori specificati», AssignmentSetOverride è la maschera dei processori che possono usare.

Valore predefinito di Windows: nessuno dei due valori esiste. Windows calcola allora da sé la collocazione, e Microsoft raccomanda il criterio predefinito ovunque sia applicabile.

Che cosa fa w0a: legge questi valori e non li scrive. Dall'8 ottobre 2026 l'instradamento che offriva dalla pagina Test di latenza non c'è più, per tre motivi: nessun test A/B in un gioco ha mostrato un frame guadagnato grazie a lui, Microsoft raccomanda la collocazione che calcola Windows, e una maschera sbagliata è un dispositivo che non si avvia.

Come tornare indietro: se uno strumento ha fissato gli interrupt di un dispositivo e qualcosa si è rotto — un mouse che si disconnette, un «Codice 10» in Gestione dispositivi —, la scheda Instradamento degli interrupt del dispositivo cancella i due valori da tutti i dispositivi PCI, compreso l'instradamento lasciato dalle versioni più vecchie di w0a. Chiede un riavvio solo quando ha davvero tolto qualcosa, e lascia stare MSISupported.

«Sotto carico: controllo di flusso, moderazione degli interrupt e coalescenza dei segmenti spenti» (pagina Connessione)

Che cosa scrive: 0 nella parola chiave *FlowControl dell'adattatore di rete, su ogni adattatore che la dichiara. *InterruptModeration, *RscIPv4 e *RscIPv6 vengono scritte solo sulle macchine con almeno sei core fisici, e solo sugli adattatori che si sa che funzionano sotto i 2,5 Gbit/s; su quelle macchine la casella spegne anche la coalescenza dei segmenti a livello dello stack di rete, a meno che non sia già spenta.

Perché la moderazione resta attiva sulle macchine più piccole: con moderazione e coalescenza entrambe spente, ogni pacchetto ricevuto diventa un interrupt a sé invece di uno per intervallo di moderazione, e il carico di chiamate differite finisce sul core che riceve. Spegnere la moderazione non è quindi un modo per accorciare la riga del driver di rete nel Test di latenza: secondo la descrizione di w0a stessa, quello che toglie è l'attesa di decine o centinaia di microsecondi che un pacchetto passa nell'adattatore finché non scade il timer del lotto, e quello che aggiunge è un interrupt per pacchetto. Il suo effetto sull'elenco dei driver non è stato misurato. Se la tua riga è il driver di rete, esegui il test con la casella applicata e senza.

Che cosa promette la casella stessa: microsecondi, sul ping sotto carico. Il suo messaggio dice che il ping medio non cambia.

Quando ha effetto: quando l'adattatore si riavvia; w0a chiede un riavvio ogni volta che ha scritto qualcosa.

Come tornare indietro: la scheda Offload della scheda di rete rimette gli offload hardware, la moderazione degli interrupt, Energy Efficient Ethernet, la sospensione selettiva e i buffer di ricezione ai valori predefiniti del driver stesso, come li dichiara il driver.

Controlla da te

Questi comandi si limitano a leggere. Nel prompt dei comandi o in PowerShell:

reg query "HKLM\SYSTEM\CurrentControlSet\Enum\PCI" /s /v DevicePolicy
reg query "HKLM\SYSTEM\CurrentControlSet\Enum\PCI" /s /v AssignmentSetOverride

Una risposta che dice che la ricerca è finita senza nessuna corrispondenza (in un Windows in inglese, End of search: 0 match(es) found.) vuol dire che nessun dispositivo ha una forzatura: il valore predefinito di Windows. Una corrispondenza viene elencata sotto la chiave in cui è stata trovata, e la parte PCI di quel percorso identifica il dispositivo.

In PowerShell, per l'adattatore di rete:

Get-NetAdapterAdvancedProperty -Name "*" -RegistryKeyword "*FlowControl","*InterruptModeration","*RscIPv4","*RscIPv6" -AllProperties

Questo elenca, per ogni adattatore, l'impostazione attuale delle quattro parole chiave che la casella della pagina Connessione può scrivere. Un adattatore che non compare per una parola chiave non la dichiara, e lì la casella non scrive niente.

Poi misura di nuovo

Stesso metodo, stessi dodici secondi, stessa macchina. La pagina confronta con la tua esecuzione precedente e riporta un cambiamento sotto il 5% come nessun cambiamento invece che come un miglioramento, perché due esecuzioni su una macchina non toccata differiscono comunque di qualche punto percentuale — una mano si muove ogni volta in modo diverso.

Se la riga del driver è scesa e gli scatti no, hai imparato qualcosa di vero: la tua causa non era questa, e perché i giochi scattano su Windows 11 ha il resto della lista. Se quello che hai è un frame rate che cala e resta giù invece di uno scossone, non è mai stato questo — la lista giusta è cali di FPS improvvisi nei giochi.

Correlati

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

w0a non cambia nessuna impostazione di Windows finché non glielo chiedi, e un tweak salva il valore precedente prima di scriverne uno nuovo. Avvisami

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.