Het grootste deel van de vertraging tussen je vinger en de game zit in het toetsenbord, niet in Windows. Een toetsaanslag legt zes fasen af voordat er een pixel verandert, en software kan er precies twee van verkorten. Kwam je hier voor een registerwaarde die toetsenbordvertraging wegneemt, dan is het eerlijke antwoord dat zo'n waarde niet bestaat — maar drie van die zes fasen kennen echte, controleerbare fouten, en die zijn twintig minuten waard.
Deze pagina splitst het pad op, noemt van elk stuk de eigenaar, en zegt ronduit welke delen buiten bereik liggen.
Het pad dat een toetsaanslag werkelijk aflegt
| Fase | Van wie is het | Kan software het verkorten? |
|---|---|---|
| 1. De switch sluit; de controller van het toetsenbord scant zijn matrix en dempt het contact (debounce) | Firmware van het toetsenbord | Nee |
| 2. Het toetsenbord zet een rapport klaar op zijn USB-interrupt-endpoint, met het interval waar zijn firmware om heeft gevraagd | Firmware van het toetsenbord | Nee |
3. De hostcontroller haalt het rapport op; kbdhid.sys en kbdclass.sys geven het naar boven door | Windows + chipsetdriver | Alleen door een driver weg te halen die blijft hangen |
| 4. Het rapport passeert elke filterdriver of low-level hook die in het invoerpad zit | Toetsenbordsuite, macrolaag, overlay | Ja |
| 5. De game leest invoer — in de meeste engines één keer per frame | De game | Indirect, door de framerate te verhogen |
| 6. Het frame wordt gerenderd, aangeboden, uitgescand en opgelicht | GPU, Windows, monitor | Deels — zie De invoervertraging die geen software oplost |
Fase 1 — het deel waar niemand aan kan komen
Een toetsenbord stuurt geen signaal op het moment dat een switch sluit. Zijn eigen controller loopt de toetsenmatrix in een lus af, en ziet hij een contact, dan wacht hij het stuiteren van dat contact af voordat hij de toets als ingedrukt aanmerkt. Die wachttijd is een firmwareconstante. Windows krijgt hem niet te zien, geen enkele driver kan hem uitlezen, en geen enkele registerwaarde waar dan ook op je machine verandert hem.
Daarom kunnen twee toetsenborden op dezelfde pc verschillend aanvoelen terwijl elke andere variabele gelijk is, en daarom is "toetsenbordvertraging" zo vaak een hardwareantwoord in een softwarejasje.
Fase 2 — het pollinginterval wordt door het toetsenbord vastgelegd, zwart op wit
USB-apparaten die invoer versturen, doen dat over een interrupt-endpoint, en de endpoint-descriptor bevat een veld bInterval dat vastlegt hoe vaak de host moet vragen. Microsofts eigen naslagwerk over die structuur is ondubbelzinnig: "This value reflects the device's configuration in firmware. Drivers cannot change it."
Dezelfde pagina geeft ook de omrekening. Op een full-speed-apparaat betekent een bInterval van 1 een pollingperiode van één frame van 1 milliseconde — het getal van 1000 Hz waarmee toetsenborden adverteren. Op een high-speed-apparaat wordt de periode in microframes geteld, acht per milliseconde, volgens de formule Period = 2 ** (bInterval - 1).
Daar volgen twee dingen uit, en dat zijn de nuttigste zinnen op deze pagina:
- Een toetsenbord dat op 125 Hz rapporteert, vraagt erom elke 8 ms gepolld te worden. Niets in Windows kan het sneller laten rapporteren. Vind je dat getal belangrijk, dan is het een firmwarekwestie of een aankoopbeslissing.
- Heeft je toetsenbord een schakelaar of configuratiesoftware waarmee je de rapportfrequentie instelt, dan schrijft dat gereedschap firmwareconfiguratie. Dat is de enige weg.
Sommige toetsenborden komen uit de doos in een compatibiliteitsmodus (vaak aangeduid als "boot protocol", of gekoppeld aan een schakelaar voor 6-key rollover) die ook de rapportfrequentie verlaagt. Raadpleeg de handleiding van het toetsenbord of zijn configuratiesoftware voordat je concludeert dat Windows traag is.
De twee instellingen die mensen wijzigen en die dit niet doen
Deze twee staan in elke "los toetsenbordvertraging op"-lijst. Geen van beide verkort het pad van een aanslag naar de game, en dat zeggen we liever dan je een placebo te verkopen.
Toetsherhalingsvertraging en -snelheid. KeyboardDelay en KeyboardSpeed onder HKCU\Control Panel\Keyboard bepalen wat er gebeurt als je een toets ingedrukt houdt: hoe lang het duurt voordat het teken zich begint te herhalen, en hoe snel het zich daarna herhaalt. Op de eerste aanslag hebben ze geen enkel effect. w0a kan de vertraging op de kortste stap zetten, en de eigen omschrijving van het product zegt wat je daarvoor terugkrijgt — een snellere console, chatbox en menu, geen sneller schot. Heeft een eerdere tool deze op vreemde waarden achtergelaten, dan zet de kaart Toetsherhalingssnelheid en -vertraging de Windows-standaarden terug.
Grootte van de toetsenbord-datawachtrij. KeyboardDataQueueSize bepaalt hoeveel rapporten de classdriver kan vasthouden als de thread die ze afvoert even blijft steken. Een grotere wachtrij betekent minder verloren rapporten tijdens zo'n stilstand. Het laat geen enkel rapport eerder aankomen, en het product zegt dat in zijn eigen interface in plaats van in een voetnoot. Invoerwachtrijen behandelt wat die waarde is en hoe je hem terugzet.
Vertelt een pagina je ergens dat een grotere wachtrij de invoervertraging verlaagt, dan weet je nu genoeg om dat niet te geloven. Een wachtrij is een buffer tegen verlies, geen sluiproute.
Fase 4 — de enige fase die werkelijk van jou is
Hier zit op een normale machine de echte, meetbare toetsenbordvertraging, en dit is de fase die bijna niemand controleert.
Alles wat je toetsaanslagen eerder wil zien dan de game, installeert zichzelf in het invoerpad: toetsenbordsuites van fabrikanten met macro-engines, verlichtingsdaemons per toets die op typen reageren, stream- en chatoverlays, schermopnameprogramma's, hulpprogramma's om toetsen om te wisselen, toegankelijkheidssoftware. Elk daarvan is een tussenstap, en een tussenstap die het druk heeft of vastloopt, houdt het hele pad op.
Windows heeft precies voor dit geval een time-out. Reageert een low-level hook niet binnen LowLevelHooksTimeout milliseconden, dan slaat Windows hem over en gaat door; Windows 10 1709 en later gebruiken hoogstens 1000 ms, hoe groot de waarde ook is. Hoe lang Windows wacht als de waarde niet is ingesteld, is niet gedocumenteerd, en we hebben het niet gemeten. De pagina Regedit-tweaks van w0a heeft een onderdeel dat die wachttijd op 1000 ms instelt door LowLevelHooksTimeout onder HKCU\Control Panel\Desktop te schrijven: Begrenzen hoe lang een vastgelopen invoerhook de muis blokkeert.
Lees dat eerlijk: die time-out begrenzen maakt een gezonde hook niet sneller. Het verkort de bevriezing wanneer een hook al is misgegaan. Dat is de moeite waard, en het is geen latencyverlaging.
Wat je werkelijk moet doen, op volgorde:
- Sluit de eigen software van het toetsenbord volledig af — niet minimaliseren naar het systeemvak. Afsluiten, en dan een potje spelen.
- Sluit overlays één voor één: de overlay van je spelplatform, die van je voicechat, opnamesoftware, de overlay van je GPU-fabrikant.
- Verandert het gevoel, dan heb je je antwoord gevonden, en kun je zelf bepalen welke functie welke vertraging waard is.
- Verandert er niets, stop dan met hier zoeken. Ga door naar fase 3.
Fase 3 — een driver die de kern bezet houdt die het toetsenbord nodig heeft
Een toetsenbordrapport komt binnen als een interrupt. Zit er een ongerelateerde driver op diezelfde processorkern in een interrupt of een uitgestelde aanroep, dan wacht je toetsaanslag — en hij wacht boven elke threadprioriteit in het systeem, dus hij duikt in geen enkele frametime-grafiek en in geen enkele taakbeheerder op.
Dit is meetbaar, en het is het enige deel van het pad waar op je eigen machine een getal op te plakken is:
- Open in w0a de Latencytest.
- Druk op start en blijf de volle 12 seconden met de muis bewegen — de muis is het verkeer waarmee de test het invoerpad bemonstert.
- Lees het getal Langste driveronderbreking en de driverlijst eronder, die op langste vasthoudtijd is gesorteerd en het bestand bij naam noemt.
- Alles vanaf 1 ms verdringt rapporten. Alles vanaf 4 ms is het ding dat je vóór al het andere moet aanpakken.
De eerste oplossing om te proberen voor een driver die een kern vasthoudt, is díé specifieke driver bijwerken bij de hardwarefabrikant. De latencytest lezen legt de kleuren uit en, nuttiger nog, wat het getal met opzet weglaat.
Fase 5 — de game leest invoer op zijn eigen schema
In de meeste engines bemonstert de game de invoer één keer per frame. Een game die op 60 FPS draait, kijkt elke 16,7 ms naar je toetsenbord; op 240 FPS elke 4,2 ms. Dat is rekenwerk, geen meting, en geen enkele engine publiceert zijn exacte invoertiming — behandel het dus als het mechanisme en niet als een getal per titel.
Het praktische gevolg is dat een lage framerate verhogen de wachttijd in deze fase verkort, en dat een toetsenbord niet is wat je op 40 FPS beperkt. Is je framerate eerder onstabiel dan laag, dan is Wat de stotterscan zoekt de pagina daarvoor.
Wat er overblijft, en wat je eraan doet

Een korte, omkeerbare checklist. Alles hierin is terug te draaien, en waar hieronder naar Fix-kaarten wordt verwezen, schrijven die de Windows-standaard terug ongeacht welke tool de wijziging heeft gemaakt.
- Steek het toetsenbord in een poort op de machine zelf, niet in een monitorhub, een hub zonder eigen voeding of een KVM. Elk daarvan is nóg een controller tussen het apparaat en de host.
- Controleer wat de poort werkelijk doet. De pagina USB-poorten van w0a toont per apparaat het Polling-interval (bInterval) waar zijn firmware om vroeg, naast de Rapportfrequentie die uit echte invoer is gemeten. Een apparaat dat om 1 ms vraagt en veel minder levert, is een verbindings- of driverprobleem, geen toetsenbordprobleem.
- Draai oude invoertweaks terug. Muis, toetsenbord en touchpad en Invoerwachtrijen zetten de Windows-standaarden terug als een oudere tool ze heeft gewijzigd.
- Voorkom dat USB-energiebeheer de poort in slaap legt, als je toetsenbord traag is bij de eerste aanslag na een pauze. Energie-instellingen van USB-poorten is die kaart.
- Meet, en beslis dan. Draai de Latencytest voor en na elke wijziging. Een wijziging die je niet in een meting terugziet, is een wijziging die je moet terugdraaien.
Wat software hier niet kan
- Het kan het scaninterval of de debouncetijd van je toetsenbord niet veranderen. Die zitten in firmware, en Windows krijgt ze nooit te zien.
- Het kan een apparaat niet sneller laten rapporteren dan het interval waar zijn eigen descriptor om vraagt — Microsofts documentatie zegt dat drivers dat veld niet kunnen wijzigen.
- Het kan de invoerbemonstering per frame van de game niet weghalen.
- Het kan het deel van het pad dat van de monitor is niet verkorten. Dat hoort bij De invoervertraging die geen software oplost.
Wat het wél kan: een vastgelopen hook eruit halen, een driver aanwijzen die een kern vasthoudt, en voorkomen dat een poort in slaap valt. Op een gezonde machine telt dat bij elkaar op tot minder dan mensen hopen, en op een zieke machine is het het hele verschil. Meten is hoe je erachter komt welke van de twee je hebt.
Gerelateerd
- Waarom mijn aim vertraagd aanvoelt
- Ik hoor voetstappen pas nadat ik ze zie
- Input lag verminderen: wat software kan verkorten en wat niet
- De latencytest lezen
- Muis- en toetsenbord-tweaks
Van de ongeveer twaalf fasen tussen een klik en een pixel die verandert, zijn er drie van de software; de rest is van de firmware, het beeldscherm en de game: Input lag verminderen: wat software kan verkorten en wat niet
Heeft deze pagina geholpen?
Wat ontbrak, of wat werkte er niet? We lezen elk van deze berichten.
Heeft deze pagina het niet opgelost, schrijf ons dan — noem het artikel dat je hebt gelezen, dan verbeteren we het.