Většina zpoždění mezi tvým prstem a hrou sedí v klávesnici, ne ve Windows. Stisk klávesy projde šesti fázemi, než se změní jediný pixel, a software dokáže zkrátit přesně dvě z nich. Jestli jsi sem přišel hledat hodnotu v registru, která odstraní zpoždění klávesnice, poctivá odpověď zní, že žádná taková hodnota neexistuje — ale tři z těch šesti fází mají skutečné, ověřitelné závady, a ty za dvacet minut práce stojí.
Tahle stránka tu cestu rozdělí, u každého dílu pojmenuje majitele a rovnou řekne, které části jsou mimo dosah.
Cesta, kterou stisk klávesy opravdu projde
| Fáze | Kdo ji vlastní | Zkrátí ji software? |
|---|---|---|
| 1. Spínač sepne; řadič klávesnice projede svou matici a potlačí zákmit kontaktu | Firmware klávesnice | Ne |
| 2. Klávesnice připraví report na svém přerušovacím endpointu USB, v intervalu, o který si řekl její firmware | Firmware klávesnice | Ne |
3. Hostitelský řadič report vyzvedne; kbdhid.sys a kbdclass.sys ho předají výš | Windows + ovladač čipsetu | Jen odstraněním ovladače, který se zasekává |
| 4. Report projde každým filtračním ovladačem nebo nízkoúrovňovým hookem, který sedí ve vstupní cestě | Software ke klávesnici, makro vrstva, overlay | Ano |
| 5. Hra si přečte vstup — ve většině enginů jednou za snímek | Hra | Nepřímo, zvýšením snímkové frekvence |
| 6. Snímek se vykreslí, odešle k zobrazení, projde obrazovkou a rozsvítí se | GPU, Windows, monitor | Zčásti — viz Zpoždění vstupu, které žádný software nespraví |
Fáze 1 — část, na kterou nikdo nedosáhne
Klávesnice neposílá signál ve chvíli, kdy spínač sepne. Její vlastní řadič projíždí matici kláves pořád dokola, a když uvidí kontakt, počká, až doznějí zákmity, teprve pak klávesu prohlásí za stisknutou. To čekání je konstanta ve firmwaru. Windows ji nevidí, žádný ovladač ji nepřečte a nezmění ji žádná hodnota v registru nikde na tvém počítači.
Právě proto můžou dvě klávesnice na tomtéž počítači působit jinak, i když je všechno ostatní stejné, a právě proto je „zpoždění klávesnice“ tak často hardwarová odpověď převlečená za softwarovou.
Fáze 2 — interval dotazování si nastavuje klávesnice, a je to napsané
USB zařízení, která posílají vstup, to dělají přes přerušovací endpoint, a deskriptor toho endpointu nese pole bInterval, které říká, jak často se má hostitel ptát. Vlastní referenční dokumentace Microsoftu k té struktuře je jednoznačná: "This value reflects the device's configuration in firmware. Drivers cannot change it."
Tatáž stránka udává i převod. Na full-speed zařízení znamená bInterval s hodnotou 1 dotazovací periodu jednoho 1milisekundového rámce — tedy těch 1000 Hz, kterými se klávesnice chlubí. Na high-speed zařízení se perioda počítá v mikrorámcích, osmi na milisekundu, podle vzorce Period = 2 ** (bInterval - 1).
Plynou z toho dvě věci a jsou to nejužitečnější věty na téhle stránce:
- Klávesnice, která hlásí 125 Hz, si říká o dotaz každých 8 ms. Nic ve Windows ji nedonutí hlásit rychleji. Pokud ti na tom čísle záleží, je to rozhodnutí o firmwaru, nebo o nákupu.
- Pokud má tvoje klávesnice přepínač nebo konfigurační nástroj, kterým se nastavuje frekvence reportů, ten nástroj zapisuje konfiguraci firmwaru. Jiná cesta nevede.
Některé klávesnice se dodávají v režimu kompatibility (často označeném „boot protocol“ nebo svázaném s přepnutím na 6-key rollover), který zároveň snižuje frekvenci reportů. Než dojdeš k závěru, že jsou pomalé Windows, mrkni do manuálu klávesnice nebo do jejího konfiguračního softwaru.
Dvě nastavení, která lidé mění a která tohle nedělají
Obojí najdeš v každém seznamu „jak opravit zpoždění klávesnice“. Ani jedno nezkracuje cestu od stisku do hry, a my to raději řekneme, než abychom ti prodali placebo.
Prodleva a rychlost opakování kláves. KeyboardDelay a KeyboardSpeed pod HKCU\Control Panel\Keyboard řídí, co se stane, když klávesu držíš: jak dlouho trvá, než se znak začne opakovat, a jak rychle se pak opakuje. Na první stisk to nemá vliv vůbec žádný. w0a umí prodlevu nastavit na nejkratší stupeň a vlastní popis v produktu říká, co si tím koupíš — rychlejší konzoli, chat a menu, ne rychlejší výstřel. Pokud ti tyhle hodnoty nechal na podivných číslech nějaký starší nástroj, karta Rychlost a prodleva opakování kláves vrátí výchozí hodnoty Windows.
Velikost datové fronty klávesnice. KeyboardDataQueueSize určuje, kolik reportů si smí ovladač třídy podržet, když se vlákno, které je odebírá, na okamžik zasekne. Větší fronta znamená míň zahozených reportů během takového zaseknutí. Nezpůsobí, že by kterýkoli report dorazil dřív, a produkt to říká rovnou ve svém vlastním rozhraní, ne v poznámce pod čarou. Vstupní fronty popisují, co ta hodnota je a jak ji vrátit zpátky.
Jestli ti někde nějaká stránka tvrdí, že zvětšení fronty snižuje latenci vstupu, teď už víš dost na to, abys jí nevěřil. Fronta je pojistka proti ztrátě, ne zkratka.
Fáze 4 — jediná fáze, která je opravdu tvoje
Právě tady na běžném počítači bydlí skutečné, měřitelné zpoždění klávesnice, a je to fáze, kterou skoro nikdo nekontroluje.
Cokoli chce vidět tvoje stisky dřív než hra, se nainstaluje do vstupní cesty: firemní balíky ke klávesnicím s makro enginy, démoni podsvícení jednotlivých kláves reagující na psaní, streamovací a chatovací overlaye, nahrávače obrazovky, nástroje na přemapování kláves, asistenční technologie. Každý z nich je jedno přeskočení navíc, a přeskočení, které je zaneprázdněné nebo zaseknuté, drží celou cestu.
Windows mají pro přesně tenhle případ časový limit. Když nízkoúrovňový hook neodpoví do LowLevelHooksTimeout milisekund, Windows ho přeskočí a jdou dál; Windows 10 1709 a novější používají nejvýš 1000 ms, ať je hodnota jakkoli velká. Jak dlouho Windows čekají, když hodnota není nastavená, není zdokumentováno a neměřili jsme to. Stránka Regedit tweaky v w0a má položku, která tohle čekání nastaví na 1000 ms zápisem LowLevelHooksTimeout pod HKCU\Control Panel\Desktop.
Přečti si to poctivě: omezení limitu neudělá zdravý hook rychlejším. Zkrátí zamrznutí ve chvíli, kdy se hook už pokazil. To se hodí mít, a není to snížení latence.
Co s tím tedy dělat, po pořádku:
- Zavři úplně vlastní software klávesnice — ne minimalizovat do oznamovací oblasti. Ukonči ho a zahraj si kolo.
- Zavírej overlaye jeden po druhém: overlay herní platformy, overlay hlasového chatu, nahrávací software, overlay výrobce grafiky.
- Když se pocit změní, máš svou odpověď a můžeš se rozhodnout, která funkce ti stojí za které zpoždění.
- Když se nezmění nic, přestaň hledat tady. Přesuň se na fázi 3.
Fáze 3 — ovladač, který drží jádro potřebné klávesnici
Report klávesnice přichází jako přerušení. Pokud na tom jádru procesoru zrovna sedí nějaký nesouvisející ovladač uvnitř přerušení nebo odloženého volání, tvůj stisk čeká — a čeká nad každou prioritou vlákna v systému, takže se neobjeví v žádném grafu časů snímků ani ve správci úloh.
Tohle se dá změřit a je to jediná část cesty, na kterou se dá na tvém vlastním počítači nasadit číslo:
- Otevři v w0a Test latence.
- Zmáčkni start a celých 12 sekund hýbej myší — myš je provoz, kterým test vzorkuje vstupní cestu.
- Přečti si údaj Nejdelší přerušení ovladačem a pod ním seznam ovladačů, který je seřazený podle nejdelšího držení a pojmenuje soubor.
- Cokoli od 1 ms výš vytlačuje reporty. Cokoli od 4 ms výš je věc, kterou máš spravit dřív než cokoli jiného.
U ovladače, který drží jádro, zkus jako první aktualizovat ten konkrétní ovladač od výrobce hardwaru. Čtení testu latence vysvětluje barvy a — což je užitečnější — co to číslo záměrně nezahrnuje.
Fáze 5 — hra si čte vstup podle svého vlastního rozvrhu
Ve většině enginů hra vzorkuje vstup jednou za snímek. Hra běžící na 60 FPS se na tvou klávesnici podívá každých 16,7 ms; při 240 FPS každých 4,2 ms. To je aritmetika, ne měření, a žádný engine nezveřejňuje své přesné časování vstupu — takže to ber jako mechanismus, ne jako číslo ke konkrétní hře.
Praktický důsledek je, že zvednutí nízké snímkové frekvence čekání v téhle fázi zkrátí, a že při 40 FPS tě neomezuje klávesnice. Pokud je tvoje snímková frekvence spíš nestabilní než nízká, správná stránka je Co hledá sken trhání.
Co zbývá a co s tím

Krátký a vratný seznam. Všechno z toho jde vzít zpátky a body níže, které odkazují na kartu na stránce Fix, zapíšou výchozí hodnotu Windows bez ohledu na to, který nástroj tu změnu udělal.
- Zapoj klávesnici do portu přímo na počítači, ne do hubu v monitoru, do nenapájeného hubu nebo do KVM. Každá z těch věcí je další řadič mezi zařízením a hostitelem.
- Podívej se, co ten port doopravdy dělá. Stránka USB porty v w0a vypíše u každého zařízení interval dotazování, o který si řekl jeho firmware, vedle frekvence reportů změřené ze skutečného vstupu. Zařízení, které si říká o 1 ms a dodává výrazně míň, má problém s linkou nebo s ovladačem, ne problém s klávesnicí.
- Vrať staré vstupní tweaky. Myš, klávesnice a touchpad a Vstupní fronty obnoví výchozí hodnoty Windows, pokud je změnil starší nástroj.
- Zabraň správě napájení USB v uspávání portu, pokud je klávesnice po pauze pomalá na první stisk. Přesně to je karta Nastavení napájení portů USB.
- Změř, pak se rozhodni. Před každou změnou a po ní si udělej Test latence. Změna, kterou neuvidíš v měření, je změna, kterou máš vrátit.
Co tady software nedokáže
- Nedokáže změnit interval skenování tvé klávesnice ani její dobu na potlačení zákmitu. To je firmware a Windows ho nikdy nevidí.
- Nedokáže donutit zařízení hlásit rychleji, než o jaký interval si říká jeho vlastní deskriptor — dokumentace Microsoftu říká, že ovladače tohle pole změnit nemůžou.
- Nedokáže odstranit vzorkování vstupu, které hra dělá jednou za snímek.
- Nedokáže zkrátit tu část cesty, která patří monitoru. Ta patří do Zpoždění vstupu, které žádný software nespraví.
Co dokáže: odstavit zaseknutý hook, ukázat ovladač, který drží jádro, a zabránit uspání portu. Na zdravém počítači to dohromady dá míň, než v co lidé doufají, na nemocném je to celý rozdíl. Který z těch dvou počítačů máš, zjistíš měřením.
Související
- Proč mi míření připadá opožděné
- Slyším kroky později, než je vidím
- Jak snížit latenci (input lag): co software dokáže zkrátit a co ne
- Čtení testu latence
- Tweaky myši a klávesnice
Ze zhruba tuctu fází mezi kliknutím a změnou pixelu vlastní software tři, zbytek patří firmwaru, obrazovce a hře: Jak snížit latenci (input lag): co software dokáže zkrátit a co ne
Pomohla ti tahle stránka?
Co chybělo, nebo co nefungovalo? Čteme každou jednu takovou zprávu.
Jestli tahle stránka problém nevyřešila, napiš nám — uveď, který článek jsi četl, a my ten článek opravíme.