Opóźnienia DPC: kiedy to sterownik jest tym, co przycina

Sterownik w przerwaniu działa ponad każdym wątkiem na maszynie, więc nie pojawia się w żadnym menedżerze zadań ani na żadnym wykresie czasu klatki — ile to kosztuje, jak to uczciwie zmierzyć, który plik jest którym urządzeniem i jedyna naprawa, która działa.

Przeszedłeś całą listę. Nic nie działa, temperatury są w porządku, dysk jest szybki, gra siedzi na SSD, a maszyna dalej szarpie. Menedżer zadań pokazuje bezczynny system. Wykres czasu klatki pokazuje spóźnioną klatkę, ale nie mówi nic o tym, dlaczego się spóźniła.

Jest jedna przyczyna, która tłumaczy dokładnie ten kształt, i jest niewidoczna w każdym narzędziu, po które większość ludzi sięga, bo dzieje się pod nimi.

Najpierw uczciwe zdanie. Naprawą sterownika, który trzyma rdzeń, jest ten sterownik, od jego producenta. Rolą w0a jest pomiar, nazwa pliku i naprawianie wartości, które zostawiły starsze narzędzia. Jedyny przełącznik, który w0a kiedyś oferował w pobliżu — kierowanie przerwań urządzenia na wybrane rdzenie — od 8 października 2026 roku działa tylko do odczytu, bo żaden test A/B w grze nie pokazał zyskanej dzięki niemu klatki.

Co się naprawdę dzieje

Urządzenie — karta sieciowa, kontroler dysku, układ dźwiękowy, kontroler USB — potrzebuje uwagi procesora. Zgłasza przerwanie, a Windows natychmiast uruchamia procedurę obsługi przerwania ze sterownika. Ta procedura działa ponad każdym priorytetem wątku, jaki istnieje: nie „wysoki priorytet”, tylko całkowicie poza harmonogramem wątków. Nic innego nie może zostać zaplanowane na tym rdzeniu, dopóki ona nie wróci.

Ponieważ to drogie miejsce, sterowniki powinny robić tam minimum i odkładać resztę do wywołania odroczonego — czyli DPC — które wykonuje się chwilę później, wciąż przed każdym wątkiem na tym rdzeniu.

Kiedy wykonuje się jedno albo drugie, ten rdzeń nic nie rysuje i nie czyta wejścia. Jeśli był na nim twój wątek renderujący, twoja klatka jest spóźniona. Jeśli za nim stał w kolejce raport z twojej myszy, twoje wejście jest spóźnione. I żadne z tych zdarzeń nie pojawia się w menedżerze zadań, bo nie ma procesu, któremu można by je przypisać.

Dlaczego milisekunda to tutaj dużo

Wartym pogoni czyni to arytmetyka:

Mierzenie tego i dwa sposoby, na jakie pomiar zawodzi

Strona Test opóźnień w w0a otwiera sesję śledzenia jądra i zapisuje przez dwanaście sekund prawdziwego ruchu myszą, jak długo każdy sterownik trzymał rdzeń. Potrzebuje uprawnień administratora. Długość omawia Dlaczego test prosi o 12 sekund, a kolory Jak czytać test opóźnień.

Dwa wyniki nie są odpowiedziami i oba są zgłaszane właśnie tak, zamiast być zaokrąglane w dół do „czysto”:

Jest trzeci, subtelniejszy: sesja, która zgubiła zdarzenia, mogła całkiem przeoczyć najgorsze wykonanie, więc strona mówi, że ta liczba może nie być prawdziwym maksimum. To ta sama zasada, którą skan przycięć stosuje wszędzie — reguła, która nie mogła się wykonać, liczy się jako niesprawdzona, nigdy jako czysta.

Liczby, dokładnie

LiczbaReguła
Długość testuDomyślnie dwanaście sekund: wystarczająco długo, żeby złapać sterownik, który zawodzi raz na sekundę, i wystarczająco krótko, żebyś naprawdę ruszał myszą przez cały ten czas.
Wystarczająco danych z myszyDwie sekundy własnych raportów urządzenia i nigdy mniej niż 250 próbek; dla myszy 1000 Hz to 2000. Poniżej tego 99. percentyl to druga albo trzecia najgorsza próbka, a nie statystyka.
Werdykt dla sterownikaNajgorsze pojedyncze wykonanie sterownika jest oznaczane jako ostrzeżenie od 1 ms i jako krytyczne od 4 ms. To granice, których ta dziedzina używa od dwóch dekad; to konwencja, a nie pomiar, który w0a wykonał na twojej maszynie.
Pełny pomiarLiczby sterowników liczą się jako pełne tylko wtedy, gdy śledzenie jądra się wykonało i jego sesja nie zgubiła żadnych zdarzeń. Licznik, który odmawia odpowiedzi, jest traktowany jak przebieg ze stratami, a nie jak czysty.
Dolna granica systemu99. percentyl myszy plus połowa okresu odświeżania plus najgorsze wykonanie sterownika — to ostatnie tylko wtedy, gdy śledzenie jądra zostało zmierzone, bo dodanie zera za niezmierzone jądro wypisałoby ładniej wyglądającą liczbę dokładnie wtedy, gdy narzędzie wie najmniej. To dolna granica, nigdy suma: własne próbkowanie wejścia przez grę, jej kolejka renderowania, praca karty graficznej i reakcja matrycy są poza nią. Opóźnienie wejścia, którego nie naprawi żaden program to reszta łańcucha.

Czytanie listy

Każdy sterownik pojawia się z nazwą pliku, najdłuższym pojedynczym zatrzymaniem, swoim udziałem w mierzonym czasie i liczbą wykonań. Sortuj po najdłuższym zatrzymaniu; to ta liczba kosztuje cię klatkę.

Dwa odczyty, które ludzie biorą źle:

Który plik jest który i co zrobić z każdym

Nazwa pliku to cała wskazówka, a o naprawie decyduje rodzina, do której należy:

RodzinaCzym jestCo naprawdę pomaga
Sieć bezprzewodowaSterownik karty Wi-FiSterownik od samego producenta zamiast ogólnego, który dostarcza Windows Update. Kabel usuwa tę linię całkowicie.
Sieć przewodowaKarta sieciowa na płycie albo w slocieSterownik producenta płyty. Wyłączenie moderacji przerwań nie leczy tej linii: bez niej pakiety nie są już zbierane w paczki, każdy odebrany pakiet wywołuje własne przerwanie, a sterownik działa nie rzadziej, lecz częściej. Dlatego strona Połączenie nie rusza moderacji przerwań na maszynach z mniej niż sześcioma rdzeniami fizycznymi — zobacz tweaki sieciowe.
Pamięć masowaKontroler na drodze do twojego dyskuNa NVMe wypróbuj własny sterownik Windows i ten od producenta, i zostaw ten, przy którym test opóźnień pokazuje niższą wartość. Sterownik pamięci masowej od firmy trzeciej warto usunąć.
USBKontroler hostaSterowniki chipsetu i przełożenie myszy do portu na płycie zamiast za hubem.
AudioKodek i wszystko, co na nim nawarstwioneSterownik producenta; jeśli zostaje, ogólny sterownik audio Windows zwykle go obniża. Narzędzia RGB i audio działają na tej ścieżce.
EkranSterownik karty graficznejZe strony samego producenta. Jeśli zaczęło się po aktualizacji, wróć do poprzedniej wersji.
Własne komponenty WindowsCzas spędzony w imieniu jakiegoś innego sterownikaNie ma tu czego „zaktualizować” osobno — naprawienie sterowników powyżej obniża też tę linię.
Zarządzanie zasilaniemŚcieżka, która zmienia taktowanie i stany bezczynnościPodniesienie minimalnego stanu procesora i zmniejszenie głębokości stanów C w firmware skracają ją oba i oba podnoszą pobór mocy na biegu jałowym. To wymiana, a nie naprawa.

Sterownik filtrujący zasługuje tu na osobną linię. Narzędzia kształtujące ruch i trasujące połączenia przepuszczają każdy pakiet przez własny sterownik, a wielosekundowe szarpnięcia sieci to ich najlepiej znany efekt uboczny; skan przycięć nazywa je, kiedy je znajdzie. To samo dotyczy pakietów makr i narzędzi do podświetlenia, które instalują filtr na ścieżce myszy i klawiatury.

Naprawa i nie-naprawy

Naprawą jest aktualizacja tego jednego sterownika, od producenta sprzętu. Nie całego systemu, nie przez narzędzie do aktualizacji sterowników i nie przez ponowną instalację Windows. Strona podaje nazwę pliku dokładnie po to, żebyś mógł sprawdzić, do którego urządzenia należy.

Czego to nie naprawia i co jest tutaj z tego powodu odrzucane: wymuszanie rozdzielczości timera, wartości zarządzania pamięcią jądra (DisablePagingExecutive, LargeSystemCache) i listy wpisów do rejestru krążące pod słowem „latency”. Żadna z nich nie zmienia tego, jak długo sterownik trzyma rdzeń, bo trzyma go kod tego sterownika. Wyłączanie urządzeń na chybił trafił też nie jest diagnozą — choć wyłączenie jednego urządzenia na próbę, z pomiarem przed i po, to całkiem dobry eksperyment. To samo dotyczy wartości na poziomie urządzenia, które krążą razem z tymi listami: MSISupported przełącza tryb przerwań urządzenia, a ustawiony źle może skończyć się czarnym ekranem, więc w0a nigdy go nie zapisuje, a karta naprawcza kierowania przerwań opisana niżej zostawia go w spokoju.

Dwa ustawienia w pobliżu, których dotyka w0a

Zasada przerwań urządzenia: tylko do odczytu, z kartą naprawczą

Gdzie trzyma ją Windows: osobno dla każdego urządzenia, w HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI\<device>\<instance>\Device Parameters\Interrupt Management\Affinity Policy. DevicePolicy (DWORD) wybiera, jak rozmieszczane są przerwania urządzenia; gdy wynosi 4, „wskazane procesory”, AssignmentSetOverride to maska procesorów, z których mogą korzystać.

Wartość domyślna Windows: żadnej z tych dwóch wartości nie ma. Windows sam wtedy wylicza rozmieszczenie, a Microsoft zaleca zasadę domyślną wszędzie tam, gdzie ma zastosowanie.

Co robi w0a: odczytuje te wartości i ich nie zapisuje. Od 8 października 2026 roku kierowania, które kiedyś oferował ze strony Test opóźnień, już nie ma, z trzech powodów: żaden test A/B w grze nie pokazał zyskanej dzięki niemu klatki, Microsoft zaleca rozmieszczenie, które wylicza Windows, a zła maska to urządzenie, które się nie uruchamia.

Droga powrotu: jeśli jakieś narzędzie przypięło przerwania urządzenia i coś się zepsuło — mysz, która się odłącza, „Kod 10” w Menedżerze urządzeń — karta Kierowanie przerwań urządzenia usuwa obie wartości z każdego urządzenia PCI, łącznie z kierowaniem zostawionym przez starsze wersje w0a. Prosi o ponowne uruchomienie tylko wtedy, gdy naprawdę coś usunęła, i zostawia MSISupported w spokoju.

„Pod obciążeniem: kontrola przepływu, moderacja przerwań i łączenie segmentów wyłączone” (strona Połączenie)

Co zapisuje: 0 do słowa kluczowego *FlowControl karty sieciowej, na każdej karcie, która je deklaruje. *InterruptModeration, *RscIPv4 i *RscIPv6 są zapisywane tylko na maszynach z co najmniej sześcioma rdzeniami fizycznymi i tylko na kartach, o których wiadomo, że działają poniżej 2,5 Gbit/s; na tych maszynach pole wyłącza też łączenie segmentów na poziomie stosu sieciowego, chyba że jest już wyłączone.

Dlaczego na mniejszych maszynach moderacja zostaje włączona: gdy moderacja i łączenie są wyłączone, każdy odebrany pakiet staje się osobnym przerwaniem zamiast jednego na okres moderacji, a obciążenie wywołań odroczonych spada na rdzeń, który odbiera. Wyłączenie moderacji nie jest więc sposobem na skrócenie linii sterownika sieci w teście opóźnień: według własnego opisu w0a usuwa ono czekanie od kilkudziesięciu do kilkuset mikrosekund, które pakiet spędza w karcie, aż skończy się zegar paczki, a dodaje przerwanie na każdy pakiet. Jego wpływu na listę sterowników nie zmierzono. Jeśli twoją linią jest sterownik sieci, uruchom test z zastosowanym polem i bez niego.

Co obiecuje samo pole: mikrosekundy, w pingu pod obciążeniem. Jego komunikat mówi, że średni ping się nie zmienia.

Kiedy zaczyna działać: gdy karta uruchomi się ponownie; w0a prosi o ponowne uruchomienie zawsze, gdy coś zapisał.

Droga powrotu: karta Odciążanie sprzętowe karty sieciowej przywraca sprzętowe odciążanie, moderację przerwań, Energy Efficient Ethernet, selektywne wstrzymywanie i bufory odbiorcze do własnych wartości domyślnych sterownika, tak jak sterownik je deklaruje.

Sprawdź sam

Te polecenia tylko czytają. W wierszu polecenia albo w PowerShell:

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

Odpowiedź, że wyszukiwanie się zakończyło i nie znaleziono żadnych dopasowań (w angielskim Windows End of search: 0 match(es) found.), oznacza, że żadne urządzenie nie ma nadpisania: to wartość domyślna Windows. Dopasowanie jest wypisywane pod kluczem, w którym je znaleziono, a część PCI tej ścieżki wskazuje urządzenie.

W PowerShell, dla karty sieciowej:

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

To polecenie wypisuje bieżące ustawienie każdej karty dla czterech słów kluczowych, które może zapisać pole ze strony Połączenie. Karta, która nie pojawia się przy danym słowie kluczowym, go nie deklaruje, a pole niczego tam nie zapisuje.

Potem zmierz jeszcze raz

Ta sama metoda, te same dwanaście sekund, ta sama maszyna. Strona porównuje z twoim poprzednim przebiegiem i zmianę poniżej 5% zgłasza jako brak zmiany, a nie jako poprawę, bo dwa przebiegi na nietkniętej maszynie i tak różnią się o kilka procent — ręka za każdym razem porusza się inaczej.

Jeśli linia sterownika spadła, a przycięcia nie, dowiedziałeś się czegoś prawdziwego: to nie była twoja przyczyna, a resztę listy ma Dlaczego gry przycinają na Windows 11. Jeśli masz liczbę klatek, która spada i zostaje na dole, a nie szarpnięcie, to nigdy nie było to — jej listą są Nagłe spadki FPS w grach.

Powiązane

Grasz w CS2? Które opcje uruchamiania jeszcze coś robią i gdzie w menu wideo naprawdę leżą klatki: Mało FPS, spadki FPS i przycięcia w CS2: zmierzona lista kontrolna

w0a nie zmienia żadnego ustawienia Windows, dopóki o to nie poprosisz, a tweak zapamiętuje starą wartość, zanim zapisze nową. Powiadom mnie

Czy ta strona pomogła?

Czego zabrakło albo co nie zadziałało? Czytamy każdą taką wiadomość.

Jeśli ta strona nie rozwiązała problemu, napisz do nas — podaj, który artykuł czytasz, a poprawimy ten artykuł.