Perché i tasti rispondono in ritardo nei giochi

Il ritardo fra lo switch che si chiude e il gioco che reagisce è fatto di sei fasi, e solo due sono software. Quali puoi accorciare, quali no, e come distinguerle sulla tua macchina.

La maggior parte del ritardo fra il tuo dito e il gioco sta nella tastiera, non in Windows. Una pressione attraversa sei fasi prima che un pixel cambi, e il software ne può accorciare esattamente due. Se sei arrivato qui per trovare un valore di registro che elimina il ritardo della tastiera, la risposta onesta è che un valore del genere non esiste — ma tre delle sei fasi hanno guasti veri e verificabili, e quelli valgono venti minuti.

Questa pagina divide il percorso, dice di chi è ogni pezzo e dichiara apertamente quali parti sono fuori portata.

Il percorso che una pressione compie davvero

FaseDi chi èIl software può accorciarla?
1. Lo switch si chiude; il controller della tastiera scandisce la sua matrice e filtra il rimbalzo del contattoFirmware della tastieraNo
2. La tastiera mette un report a disposizione sul suo endpoint di interrupt USB, all'intervallo che il suo firmware ha chiestoFirmware della tastieraNo
3. Il controller host raccoglie il report; kbdhid.sys e kbdclass.sys lo passano verso l'altoWindows + driver del chipsetSolo togliendo un driver che si sta inceppando
4. Il report attraversa gli eventuali driver filtro e gli hook di basso livello che stanno nel percorso dell'inputSuite della tastiera, livello macro, overlaySì
5. Il gioco legge l'input — nella maggior parte dei motori, una volta per frameIl giocoIndirettamente, alzando il frame rate
6. Il frame viene renderizzato, presentato, scansionato e accesoGPU, Windows, monitorIn parte — vedi La latenza che nessun software può risolvere

Fase 1 — la parte che nessuno può toccare

Una tastiera non manda un segnale nel momento in cui uno switch si chiude. Il suo controller passa in rassegna la matrice dei tasti in un ciclo continuo e, quando vede un contatto, aspetta che il rimbalzo finisca prima di dichiarare il tasto premuto. Quell'attesa è una costante del firmware. Non è esposta a Windows, nessun driver può leggerla, e nessun valore di registro da nessuna parte sulla tua macchina la cambia.

È per questo che due tastiere sullo stesso PC possono dare sensazioni diverse con ogni altra variabile identica, ed è per questo che il "ritardo della tastiera" è così spesso una risposta hardware travestita da software.

Fase 2 — l'intervallo di polling lo decide la tastiera, per iscritto

I dispositivi USB che mandano input lo fanno su un endpoint di interrupt, e il descrittore dell'endpoint porta un campo chiamato bInterval che dichiara ogni quanto l'host deve interrogarlo. Il riferimento di Microsoft su quella struttura non lascia margini: "This value reflects the device's configuration in firmware. Drivers cannot change it."

La stessa pagina dà la conversione. Su un dispositivo full-speed, bInterval uguale a 1 significa un periodo di polling di un frame da 1 millisecondo — i 1000 Hz che le tastiere mettono sulla scatola. Su un dispositivo high-speed il periodo si conta in microframe, otto per millisecondo, con la formula Period = 2 ** (bInterval - 1).

Ne discendono due cose, e sono le frasi più utili di questa pagina:

Alcune tastiere escono di fabbrica in una modalità di compatibilità (spesso etichettata "boot protocol", oppure legata a un interruttore di rollover a 6 tasti) che abbassa anche la frequenza di report. Controlla il manuale della tastiera stessa o il suo software di configurazione prima di concludere che sia Windows a essere lento.

Le due impostazioni che tutti cambiano e che non fanno questo

Compaiono entrambe in ogni elenco di "come togliere il lag della tastiera". Nessuna delle due accorcia il percorso da una pressione al gioco, e preferiamo dirlo piuttosto che venderti un placebo.

Ritardo e velocità di ripetizione dei tasti. KeyboardDelay e KeyboardSpeed sotto HKCU\Control Panel\Keyboard governano cosa succede quando tieni premuto un tasto: quanto passa prima che il carattere inizi a ripetersi, e quanto in fretta si ripete poi. La prima pressione non ne risente per niente. w0a può portare il ritardo al suo gradino più corto, e la descrizione del prodotto stesso dice cosa ci guadagni — una console, una chat e un menu più rapidi, non un colpo più rapido. Se uno strumento precedente ha lasciato questi valori su numeri strani, la scheda Velocità e ritardo di ripetizione dei tasti rimette i valori predefiniti di Windows.

Dimensione della coda dati della tastiera. KeyboardDataQueueSize stabilisce quanti report il driver class può tenere se il thread che li svuota si inceppa per un istante. Una coda più grande significa meno report persi durante un'inceppata. Non fa arrivare prima nessun report, e il prodotto lo dice nella sua stessa interfaccia invece che in una nota a piè di pagina. Code di input spiega cos'è quel valore e come rimetterlo a posto.

Se una pagina, da qualsiasi parte, ti dice che alzare la dimensione di una coda abbassa la latenza di input, adesso ne sai abbastanza per non crederci. Una coda è una protezione contro la perdita, non una scorciatoia.

Fase 4 — l'unica fase che è davvero tua

È qui che vive il ritardo di tastiera vero e misurabile su una macchina normale, ed è la fase che quasi nessuno controlla.

Tutto ciò che vuole vedere i tuoi tasti prima che li veda il gioco si installa nel percorso dell'input: le suite dei produttori di tastiere con i loro motori di macro, i demoni di illuminazione per tasto che reagiscono a quello che scrivi, gli overlay di streaming e di chat, i registratori di schermo, le utility di rimappatura, gli strumenti di accessibilità. Ognuno è un salto in più, e un salto occupato o bloccato tiene fermo tutto il percorso.

Windows ha un timeout esattamente per questo caso. Quando un hook di basso livello non risponde entro LowLevelHooksTimeout millisecondi, Windows lo salta e va avanti; Windows 10 1709 e successivi usano al massimo 1000 ms, per quanto grande sia il valore. Quanto aspetti Windows quando il valore non è impostato non è documentato, e noi non l'abbiamo misurato. La pagina Tweak Regedit di w0a ha una voce che imposta quell'attesa a 1000 ms scrivendo LowLevelHooksTimeout sotto HKCU\Control Panel\Desktop.

Leggilo per quello che è: limitare il timeout non rende più veloce un hook sano. Accorcia il blocco quando un hook si è già guastato. È una cosa che vale la pena avere, e non è una riduzione di latenza.

Cosa fare davvero, in ordine:

  1. Chiudi completamente il software della tastiera — non ridurlo a icona nell'area di notifica. Esci, poi gioca una partita.
  2. Chiudi gli overlay uno alla volta: quello della piattaforma di gioco, quello della chat vocale, il software di registrazione, l'overlay del produttore della scheda video.
  3. Se la sensazione cambia, hai trovato la tua risposta, e puoi decidere quale funzione vale quale ritardo.
  4. Se non cambia niente, smetti di cercare qui. Passa alla fase 3.

Fase 3 — un driver che tiene occupato il core che serve alla tastiera

Un report della tastiera arriva come un interrupt. Se un driver qualsiasi sta occupando quel core del processore dentro un interrupt o una chiamata differita, la tua pressione aspetta, e aspetta al di sopra di ogni priorità di thread del sistema — quindi non compare in nessun grafico dei frame time e in nessun gestore attività.

Questo è misurabile, ed è l'unica parte del percorso su cui si può mettere un numero preso dalla tua macchina:

  1. Apri Test di latenza in w0a.
  2. Premi avvia e continua a muovere il mouse per tutti e 12 i secondi — il mouse è il traffico che il test usa per campionare il percorso dell'input.
  3. Leggi il valore Interruzione di driver più lunga e l'elenco dei driver sotto di esso, ordinato per occupazione più lunga e con il nome del file.
  4. Qualunque cosa da 1 ms in su sta spostando dei report. Qualunque cosa da 4 ms in su è la cosa da sistemare prima di ogni altra.

La prima soluzione da provare per un driver che tiene occupato un core è aggiornare quel driver preciso, dal produttore dell'hardware. Leggere il test di latenza spiega i colori e, cosa più utile, che cosa quel numero lascia fuori di proposito.

Fase 5 — il gioco legge l'input secondo i suoi tempi

Nella maggior parte dei motori il gioco campiona l'input una volta per frame. Un gioco a 60 FPS guarda la tua tastiera ogni 16,7 ms; a 240 FPS, ogni 4,2 ms. Questa è aritmetica, non una misurazione, e nessun motore pubblica i suoi tempi esatti di lettura dell'input — quindi prendila come il meccanismo e non come una cifra valida titolo per titolo.

La conseguenza pratica è che alzare un frame rate basso accorcia l'attesa in questa fase, e che a 40 FPS non è la tastiera a limitarti. Se il tuo frame rate è instabile invece che basso, la pagina giusta è Cosa cerca la scansione degli scatti.

Quello che resta, e cosa farne

La pagina Fix: una scheda di riparazione per ogni cosa che può essere cambiata, ognuna ripristina il valore predefinito di Windows.
La pagina Fix: una scheda di riparazione per ogni cosa che può essere cambiata, ognuna ripristina il valore predefinito di Windows.

Una lista di controllo breve e reversibile. Ognuna di queste cose si può annullare, e i punti qui sotto che rimandano a una scheda Fix riscrivono il valore predefinito di Windows a prescindere da quale strumento abbia fatto la modifica.

  1. Collega la tastiera a una porta della macchina stessa, non a un hub del monitor, a un hub non alimentato o a un KVM. Ognuno di quelli è un altro controller fra il dispositivo e l'host.
  2. Controlla cosa sta facendo davvero la porta. La pagina Porte USB di w0a elenca ogni dispositivo con l'intervallo di polling che il suo firmware ha chiesto accanto alla frequenza di report misurata dall'input reale. Un dispositivo che chiede 1 ms e ne consegna molti di meno è un problema di collegamento o di driver, non un problema di tastiera.
  3. Annulla i vecchi tweak sull'input. Mouse, tastiera e touchpad e Code di input ripristinano i valori predefiniti di Windows se uno strumento più vecchio li ha cambiati.
  4. Impedisci al risparmio energetico USB di mandare a dormire la porta, se la tua tastiera è lenta alla prima pressione dopo una pausa. La scheda è Impostazioni di alimentazione delle porte USB.
  5. Misura, poi decidi. Fai il Test di latenza prima e dopo ogni modifica. Una modifica che non riesci a vedere in una misurazione è una modifica da annullare.

Cosa il software non può fare qui

Quello che può fare è togliere di mezzo un hook inceppato, mettere in evidenza un driver che tiene occupato un core e impedire a una porta di addormentarsi. Su una macchina sana la somma è meno di quanto la gente speri, e su una malata è tutta la differenza. Misurare è il modo per scoprire quale delle due hai.

Correlati

Delle circa dodici fasi fra un clic e un pixel che cambia, tre sono del software; il resto è del firmware, dello schermo e del gioco: Come ridurre l'input lag: cosa può accorciare un software e cosa no

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.