DPC latence: když je příčinou trhání ovladač

Ovladač uvnitř přerušení běží nad každým vláknem v počítači, takže se neobjeví v žádném správci úloh ani v grafu časů snímků — co to stojí, jak to poctivě změřit, který soubor patří kterému zařízení a jediná oprava, která funguje.

Prošel jsi seznam. Nic neběží, teploty jsou v pořádku, disk je rychlý, hra leží na SSD, a počítač pořád škube. Správce úloh ukazuje nečinný systém. Graf časů snímků ukáže pozdní snímek, ale o tom, proč přišel pozdě, neřekne nic.

Existuje jedna příčina, která přesně tenhle tvar vysvětluje, a je neviditelná ve všech nástrojích, po kterých většina lidí sáhne — protože se děje pod nimi.

Nejdřív poctivá věta. Oprava pro ovladač, který drží jádro, je ten ovladač, a to od jeho výrobce. Úkolem w0a je měření, název souboru a oprava hodnot, které po sobě nechaly starší nástroje. Jediný přepínač, který tu dřív nabízela, směrování přerušení zařízení na vybraná jádra, je od 8. října 2026 jen pro čtení, protože žádný A/B test ve hře nikdy neukázal snímek, který by díky němu přibyl.

Co se doopravdy děje

Zařízení — síťová karta, řadič disku, zvukový čip, řadič USB — potřebuje pozornost procesoru. Vyvolá přerušení a Windows okamžitě spustí obslužnou rutinu přerušení toho ovladače. Ta rutina běží nad každou existující prioritou vlákna: ne „vysoká priorita“, ale úplně mimo plánovač vláken. Dokud se nevrátí, nedá se na to jádro naplánovat nic jiného.

Protože je tohle drahé místo, mají tam ovladače udělat jen minimum a zbytek odložit do odloženého volání procedury — DPC —, které proběhne o chvilku později, pořád ale před každým vláknem na tom jádru.

Dokud běží jedno nebo druhé, tohle jádro nic nevykreslí a nepřečte žádný vstup. Jestli na něm sedělo tvoje vykreslovací vlákno, snímek přijde pozdě. Jestli se za ním řadil report tvojí myši, přijde pozdě vstup. A ani jedna z těch událostí se ve správci úloh neobjeví, protože není proces, kterému by se dala připsat.

Proč je tady jedna milisekunda hodně

Za tím, že se tohle vyplatí honit, stojí prostá aritmetika:

Měření a dva způsoby, jak selže

Test latence ve w0a otevře trasovací relaci v jádře a po dvanáct sekund skutečného pohybu myší zaznamenává, jak dlouho který ovladač držel jádro procesoru. Potřebuje práva správce. Délku vysvětluje Proč test chce dvanáct sekund pohybu myší, barvy Čtení testu latence.

Dva výsledky nejsou odpovědi a oba se tak i hlásí, místo aby se zaokrouhlily dolů na „čisto“:

Je i třetí, jemnější: relace, která zahodila události, mohla to nejhorší spuštění minout úplně, a proto stránka řekne, že to číslo nemusí být skutečné maximum. Je to tentýž princip, který sken trhání uplatňuje všude — pravidlo, které nemohlo proběhnout, se počítá jako neověřené, nikdy jako čisté.

Čísla, přesně

ČísloPravidlo
Délka testuVe výchozím stavu dvanáct sekund: dost dlouho na to, aby se chytil ovladač, který zlobí jednou za sekundu, a dost krátce na to, abys myší opravdu hýbal celou dobu.
Dost dat z myšiDvě sekundy vlastních hlášení zařízení a nikdy méně než 250 vzorků; u myši s 1000 Hz je to 2 000. Pod tím je 99. percentil druhý nebo třetí nejhorší vzorek, ne statistika.
Verdikt o ovladačiNejhorší jednotlivé spuštění ovladače se od 1 ms označí jako varování a od 4 ms jako kritické. To jsou hranice, které tenhle obor používá dvě desetiletí; jsou to konvence, ne měření, které w0a provedla na tvém stroji.
Úplné měřeníČísla ovladačů se počítají jako úplná, jen když jaderná část proběhla a její zapisovač nezahodil žádné události. Čítač, který odmítne odpovědět, se bere jako běh se ztrátami, ne jako čistý.
Spodní hranice systému99. percentil myši plus polovina obnovovacího intervalu plus nejhorší spuštění ovladače — to poslední jen tehdy, když byla jaderná část změřena, protože přičíst nulu za nezměřené jádro by vypsalo hezčí číslo přesně ve chvíli, kdy nástroj ví nejméně. Je to spodní hranice, nikdy celek: vlastní vzorkování vstupu ve hře, její fronta vykreslování, práce grafické karty a odezva panelu leží všechny mimo ni. Zpoždění vstupu, které žádný software nespraví je zbytek řetězce.

Jak číst seznam

Každý ovladač je uvedený se svým názvem souboru, nejdelším jednotlivým držením, podílem na změřeném čase a počtem spuštění. Seřaď to podle nejdelšího držení; to je číslo, které tě stojí snímek.

Dvě čtení, ve kterých se lidi pletou:

Který soubor je který a co s ním

Celá stopa je název souboru a o řešení rozhoduje rodina, do které patří:

RodinaCo to jeCo doopravdy pomůže
Bezdrátová síťOvladač adaptéru Wi-FiVlastní ovladač od výrobce místo obecného, který dodá Windows Update. Kabel ten řádek odstraní úplně.
Drátová síťSíťová karta na desce nebo ve slotuOvladač od výrobce desky. Vypnutí moderace přerušení tento řádek neřeší: bez ní se pakety už neshromažďují do dávek, každý přijatý paket vyvolá vlastní přerušení a ovladač běží ne méně často, ale častěji. Proto stránka Připojení na strojích s méně než šesti fyzickými jádry moderaci přerušení nechává být — viz Tweaky sítě.
ÚložištěŘadič v cestě k tvému diskuU NVMe vyzkoušej vlastní ovladač Windows i ten od výrobce a nech si ten, u kterého test latence ukáže nižší hodnotu. Cizí ovladač úložiště stojí za odstranění.
USBHostitelský řadičOvladače čipsetu a přesunout myš do portu přímo na desce, ne za rozbočovač.
ZvukKodek a všechno, co je na něm navrstvenéOvladač od výrobce; když to trvá dál, obecný zvukový ovladač Windows to obvykle sníží. Po téhle cestě běží i RGB a zvukové utility.
ObrazovkaOvladač grafikyPřímo ze stránek výrobce. Jestli to začalo po aktualizaci, vrať se na předchozí verzi.
Vlastní součásti WindowsČas strávený za nějaký jiný ovladačNení tu co samo o sobě „aktualizovat“ — spravením ovladačů výš klesne i tenhle řádek.
Správa napájeníCesta, která mění takty a klidové stavyZvednout minimální stav procesoru a snížit hloubku C-stavů ve firmwaru to zkracuje, obojí ale zvýší odběr v klidu. To je výměna, ne oprava.

Filtrační ovladač si tady zaslouží vlastní řádek. Nástroje na tvarování provozu a na přesměrování spojení posílají každý paket skrz svůj vlastní ovladač a několikasekundové síťové záseky jsou jejich nejznámější vedlejší účinek; sken trhání je pojmenuje, když je najde. Totéž platí pro sady maker a nástroje na podsvícení, které si instalují filtr do cesty myši a klávesnice.

Oprava a neopravy

Oprava je aktualizovat ten jeden ovladač, a to od výrobce hardwaru. Ne celý systém, ne přes nástroj na aktualizaci ovladačů a ne přeinstalováním Windows. Stránka soubor pojmenuje přesně, abys mohl dohledat, kterému zařízení patří.

Co tohle nespraví, a proto se to tady odmítá: přepisování rozlišení časovače, hodnoty pro správu paměti v jádře (DisablePagingExecutive, LargeSystemCache) a seznamy klíčů registru, které kolují pod slovem „latence“. Ani jedno z toho nezmění, jak dlouho ovladač drží jádro, protože to drží kód toho ovladače. Vypínat zařízení namátkou taky není diagnóza — i když vypnout jedno zařízení jako test, s měřením před a po, je naprosto dobrý pokus. Totéž platí pro hodnoty na úrovni zařízení, které kolují spolu s těmito seznamy: MSISupported přepíná režim přerušení zařízení a při špatném nastavení může být výsledkem černá obrazovka, takže ho w0a nikdy nezapisuje a opravná karta pro směrování přerušení níže ho nechává na pokoji.

Dvě nastavení poblíž, na která w0a sahá

Zásada přerušení zařízení: jen pro čtení, s opravnou kartou

Kde to Windows uchovávají: pro každé zařízení zvlášť, pod HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI\<device>\<instance>\Device Parameters\Interrupt Management\Affinity Policy. DevicePolicy (DWORD) volí, jak se přerušení zařízení rozmístí; když je 4, „zadané procesory“, je AssignmentSetOverride maska procesorů, které smějí používat.

Výchozí hodnota Windows: žádná z obou hodnot neexistuje. Windows pak rozmístění spočítají samy a Microsoft doporučuje výchozí zásadu všude, kde se uplatní.

Co w0a dělá: tyto hodnoty čte a nezapisuje je. Od 8. října 2026 je směrování, které dřív nabízela ze stránky Test latence, pryč, ze tří důvodů: žádný A/B test ve hře neukázal snímek, který by díky němu přibyl, Microsoft doporučuje rozmístění, které spočítají Windows, a špatná maska je zařízení, které nenaběhne.

Cesta zpět: pokud nějaký nástroj připnul přerušení zařízení a něco se rozbilo — myš, která vypadává, Kód 10 ve Správci zařízení —, karta Směrování přerušení zařízení odstraní obě hodnoty ze všech zařízení PCI, včetně směrování, které po sobě nechaly starší verze w0a. O restart požádá, jen když opravdu něco odstranila, a MSISupported nechá na pokoji.

„Pod zátěží: flow control, moderace přerušení a slučování segmentů vypnuto“ (stránka Připojení)

Co zapisuje: 0 do klíčového slova *FlowControl síťového adaptéru, na každém adaptéru, který ho deklaruje. *InterruptModeration, *RscIPv4 a *RscIPv6 se zapisují jen na strojích s aspoň šesti fyzickými jádry a jen na adaptérech, o kterých je známo, že běží pod 2,5 Gbit/s; na těchto strojích políčko také vypne slučování segmentů na úrovni síťového zásobníku, pokud už vypnuté není.

Proč moderace na menších strojích zůstává zapnutá: když je moderace i slučování vypnuté, každý přijatý paket vyvolá vlastní přerušení místo jednoho za interval moderace a zátěž odložených volání dopadne na jádro, které přijímá. Vypnutí moderace tedy není způsob, jak zkrátit řádek síťového ovladače v testu latence: podle vlastního popisu w0a odstraní čekání desítek až stovek mikrosekund, které paket stráví v adaptéru, než vyprší časovač dávky, a přidá přerušení na každý paket. Jeho vliv na seznam ovladačů změřený nebyl. Když je síťový ovladač tvůj řádek, spusť test s použitým políčkem i bez něj.

Co slibuje samotné políčko: mikrosekundy, u pingu pod zátěží. Jeho zpráva říká, že průměrný ping se nezmění.

Kdy se projeví: když se adaptér restartuje; w0a požádá o restart, kdykoli něco zapsala.

Cesta zpět: karta Offloady síťové karty vrátí hardwarové offloady, moderaci přerušení, Energy Efficient Ethernet, selektivní uspávání a přijímací buffery na výchozí hodnoty samotného ovladače, tak jak je ovladač deklaruje.

Ověř si to sám

Tyhle příkazy jen čtou. V příkazovém řádku nebo v PowerShellu:

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

Odpověď, že hledání skončilo bez jediné shody (v anglických Windows End of search: 0 match(es) found.), znamená, že žádné zařízení nemá přepsání: výchozí stav Windows. Shoda se vypíše pod klíčem, ve kterém byla nalezena, a část PCI té cesty určuje zařízení.

V PowerShellu, pro síťový adaptér:

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

Tohle vypíše pro každý adaptér aktuální nastavení čtyř klíčových slov, která může zapsat políčko na stránce Připojení. Adaptér, který se u některého klíčového slova neobjeví, ho nedeklaruje, a políčko tam nezapíše nic.

A pak změř znovu

Stejná metoda, stejných dvanáct sekund, stejný počítač. Stránka to porovná s tvým předchozím během a změnu pod 5 % hlásí jako žádnou změnu, ne jako zlepšení, protože dva běhy na nezměněném počítači se stejně liší o pár procent — ruka se pokaždé pohybuje jinak.

Jestli řádek ovladače klesl a trhání ne, zjistil jsi něco skutečného: tohle nebyla tvoje příčina a zbytek seznamu má Proč hry trhají na Windows 11. A jestli máš místo škubnutí snímkovou frekvenci, která spadne a zůstane dole, nikdy to nebylo tohle — ten seznam jsou Náhlé propady FPS ve hrách.

Související

Hraješ CS2? Které možnosti spuštění ještě něco dělají a kde v menu obrazu opravdu leží snímky: Nízké FPS, trhání a sekání v CS2: změřený kontrolní seznam

w0a nezmění žádné nastavení Windows, dokud o to nepožádáš, a tweak si před zápisem nové hodnoty uloží tu starou. Upozornit mě

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.