DPC i wątki Kernel Executive w Windows 11 25H2
Na tej stronie
Krótka odpowiedź
Dział zatytułowany „Krótka odpowiedź”Grupa DpcQueueDepth, limitów workerów i parametrów watchdoga jest często postrzegana jako zestaw uniwersalnych tweaków na opóźnienia. W rzeczywistości są to wewnętrzne limity i mechanizmy ochronne jądra. Ich efekt ujawnia się tylko przy konkretnej kolejce DPC, liczbie procesorów, typie sterownika lub błędzie workera.
Co sprawdzano
Dział zatytułowany „Co sprawdzano”Sprawdzano, jakie limity DPC, wątków workerów i watchdoga odczytuje jądro, jak normalizowane są wartości i gdzie te mechanizmy są rzeczywiście stosowane.
Zakres badania
Dział zatytułowany „Zakres badania”Windows 11 25H2 build 26200.9168, gałęzie Session Manager\Kernel i Session Manager\Executive. Funkcje zależne od sprzętu i konkretne sterowniki nie wchodziły w zakres pomiarów.
Metodyka
Dział zatytułowany „Metodyka”Analiza statyczna ntoskrnl.exe: wyszukiwanie readers i konsumentów, sprawdzanie zakresów i normalizacji wartości; weryfikacja z publiczną dokumentacją Microsoft.
Kanoniczna ścieżka i wartości
Dział zatytułowany „Kanoniczna ścieżka i wartości”Ścieżka DPC i watchdoga:
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Kernel
| Value | Type | Default/normalization | Co kontroluje |
|---|---|---|---|
DpcQueueDepth |
REG_DWORD |
4 |
głębokość kolejki DPC |
MinimumDpcRate |
REG_DWORD |
3 |
minimalna częstotliwość przetwarzania DPC |
IdealDpcRate |
REG_DWORD |
20 |
docelowa częstotliwość DPC |
AdjustDpcThreshold |
REG_DWORD |
20 |
próg adaptacji polityki DPC |
ThreadDpcEnable |
REG_DWORD |
1 |
przetwarzanie thread-DPC |
DpcWatchdogPeriod |
REG_DWORD |
120000 |
okres watchdoga DPC |
DpcCumulativeSoftTimeout |
REG_DWORD |
120000 w badanej kompilacji |
skumulowany soft budget |
PassiveWatchdogTimeout |
REG_DWORD |
300 sekund |
watchdog poziomu passive przy KD |
ForceIdleGracePeriod |
REG_DWORD |
5 sekund |
okres karencji force-idle |
PerfIsoEnabled |
REG_DWORD |
0 |
izolacja wydajności |
CacheIsoBitmap |
REG_DWORD |
0 |
maska Intel CAT L3 |
SchedulerAssistThreadFlagOverride |
REG_DWORD |
0 |
nadpisanie scheduler assist |
VpThreadSystemWorkPriority |
REG_DWORD |
30, zakres 1..31 |
priorytet pracy wirtualnego procesora |
AlwaysTrackIoBoosting |
REG_DWORD |
0 |
diagnostyczne śledzenie I/O boost |
Ścieżka Kernel Executive workers:
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Executive
| Value | Type | Default/normalization | Co kontroluje |
|---|---|---|---|
AdditionalCriticalWorkerThreads |
REG_DWORD |
0, clamp 0..100 |
dodatkowe critical workers |
AdditionalDelayedWorkerThreads |
REG_DWORD |
0, clamp 0..100 |
delayed workers |
MaximumKernelWorkerThreads |
REG_DWORD |
4096, 32..16384 |
górny limit kernel workers |
ForceEnableMutantAutoboost |
REG_DWORD |
0 |
mutant autoboost |
WorkerThreadTimeoutInSeconds |
REG_DWORD |
600, 60..3600 |
timeout workera |
Session Manager\Kernel i Session Manager\Executive są różnymi gałęziami konfiguracji. Dla każdej wartości istotna jest ścieżka, którą otwiera reader jądra w danej kompilacji.
Kolejka DPC i częstotliwości
Dział zatytułowany „Kolejka DPC i częstotliwości”Jądro używa DpcQueueDepth, MinimumDpcRate, IdealDpcRate i AdjustDpcThreshold do kontroli kolejki i adaptacji przetwarzania DPC. Sprawdzone defaults 4/3/20/20 już pokrywają się ze standardowym stanem Windows 11 25H2; ponowny zapis tych liczb niczego nie zmienia.
Przydatność: te parametry mogą być przydatne przy analizie konkretnego backlogu DPC, ale bez tracy ETW/WPR zmiana na ślepo nie zdiagnozuje przyczyny. Duża kolejka może odroczyć przetwarzanie i zwiększyć ogon opóźnienia.
Thread DPC i limity workerów
Dział zatytułowany „Thread DPC i limity workerów”ThreadDpcEnable=1 włącza infrastrukturę threaded-DPC, 0 przywraca pracę do zwykłej ścieżki DIRQL i może wydłużyć okna interrupt-off. MaximumKernelWorkerThreads ogranicza wspólną pulę kernel workers. AdditionalCriticalWorkerThreads i AdditionalDelayedWorkerThreads są dodawane do pul bazowych: na klienckiej Windows to odpowiednio 5 critical i 7 delayed workers przed zastosowaniem override.
Więcej wątków nie oznacza mniejszego opóźnienia: dodatkowe workery zużywają stack, czas schedulera i zasoby cache, a kolejka może być ograniczona przez inny komponent. AdditionalDelayedWorkerThreads=32 rzeczywiście dodaje delayed workers, ale nie ma zmierzonego uniwersalnego zysku.
Watchdog i timeout
Dział zatytułowany „Watchdog i timeout”DpcCumulativeSoftTimeout ogranicza skumulowany czas DPC. DpcWatchdogPeriod=0 jest dopuszczalne i wyłącza ten watchdog; każda niezerowa wartość poniżej 2000 staje się 2000 ms. PassiveWatchdogTimeout jest używane tylko przy włączonym kernel debugger, więc na zwykłym systemie ten timer nie jest aktywny nawet przy standardowych 300 sekundach. WorkerThreadTimeoutInSeconds ogranicza zawieszenie operacji workera.
DpcCumulativeSoftTimeout ma dolną granicę 2000 ms i nie może przekroczyć DpcWatchdogPeriod. Aby uzyskać wartość 240000, okres watchdoga również musi wynosić 240000. WorkerThreadTimeoutInSeconds jest normalizowane do zakresu 60..3600 sekund; zapis 0 nie wyłącza timeoutu, a prowadzi do wartości minimalnej.
Wyłączenie ochronnego timeoutu usuwa diagnostykę, ale nie naprawia przyczyny blokady. Dla systemu produkcyjnego watchdog jest częścią mechanizmu wykrywania wadliwych sterowników.
Polityka Kernel Executive
Dział zatytułowany „Polityka Kernel Executive”ForceEnableMutantAutoboost znajduje się w gałęzi Executive, a ForceIdleGracePeriod, PerfIsoEnabled, CacheIsoBitmap, SchedulerAssistThreadFlagOverride, VpThreadSystemWorkPriority i AlwaysTrackIoBoosting są odczytywane z gałęzi Kernel. Ta różnica jest krytyczna: wpis o tej samej nazwie w sąsiednim podkluczu nie jest stosowany.
CacheIsoBitmap jest używane tylko przy wsparciu Intel Resource Director/CAT; bez CAT wartość nie tworzy izolacji. SchedulerAssistThreadFlagOverride=0 i 1 pozostawiają automatyczne włączanie, 2 wymusza wyłączenie gałęzi. VpThreadSystemWorkPriority dopuszcza 1..31, w przeciwnym razie jest resetowane do 1; default 30, a 31 jest jedynie górną granicą. AlwaysTrackIoBoosting=1 włącza diagnostyczne allocation i stack-capture na boost paths, a nie utrzymuje podwyższonego priorytetu I/O.
Przydatność: bez potwierdzonego efektu konsumenckiego wpływ jest zwykle nieobecny lub zbyt mały dla praktycznej decyzji. Takie wartości są przydatne jako przedmiot osobnej diagnostyki jądra, a nie jako ogólny zestaw optymalizacji.
Sprawdzone defaults 4/3/20/20 pokrywają się ze standardowym stanem Windows 11 25H2. Dodatkowe workery domyślnie wynoszą zero, górny limit kernel workers — 4096 z zakresem 32..16384. Parametry watchdoga są normalizowane: wartość poniżej 2000 ms staje się 2000, a DpcCumulativeSoftTimeout nie przekracza okresu watchdoga. Gałęzie Kernel i Executive nie są wzajemnie wymienne.
Co potwierdzono
Dział zatytułowany „Co potwierdzono”- Readers i konsumenci parametrów w
ntoskrnl.exebadanej kompilacji. - Wartości domyślne i granice normalizacji, w tym zależności między parametrami watchdoga.
- Rozdzielenie gałęzi
KerneliExecutive: wpis o tej samej nazwie w sąsiednim podkluczu nie jest stosowany.
Czego nie potwierdzono
Dział zatytułowany „Czego nie potwierdzono”- Wpływu zmiany parametrów na FPS, opóźnienie lub responsywność.
- Korzyści ze zmiany limitów bez potwierdzonego problemu z kolejką DPC lub workerem.
Wniosek praktyczny
Dział zatytułowany „Wniosek praktyczny”Nie zmieniaj tych parametrów na ślepo: bez tracy ETW/WPR nie można ustalić przyczyny backlogu. Dla działającego systemu pozostaw watchdog włączony, a parametry wykorzystuj do diagnostyki, a nie jako zestaw optymalizacji.
Przywracanie stanu
Dział zatytułowany „Przywracanie stanu”Przywróć standardowe wartości lub usuń opcjonalne wpisy. Parametry jądra są stosowane przy następnym rozruchu Windows.
Źródła i ograniczenia
Dział zatytułowany „Źródła i ograniczenia”Readers i consumers sprawdzono w ntoskrnl.exe Windows 11 25H2 build 26200.9168. Offsety ani pseudokod nie są publikowane. Końcowe metryki użytkownika nie wchodziły w zakres tej serii.
- DPCs and threads, Microsoft Learn, sprawdzono 2026-09-01.
- Bug checks 0x133 DPC_WATCHDOG_VIOLATION, Microsoft Learn, sprawdzono 2026-09-01.
Jak powtórzyć dynamiczną część obserwacji — zobacz Jak sprawdzić samodzielnie.
Badanie i użyte narzędzia należą do dewelopera BoosterX, dlatego deweloper ma bezpośredni interes w wynikach. Metodyka i granice stosowalności opisano powyżej, a wnioski można zweryfikować na podstawie otwartych danych i wymienionych publicznych źródeł.
Publiczne źródła sprawdzono: 2026-09-02.
Historia zmian
Dział zatytułowany „Historia zmian”- 2026-09-20: sekcja «Wyniki» przeniesiona na obowiązkowe miejsce przed «Przywracaniem stanu»; dodano disclaimer o konflikcie interesów i link do samodzielnej weryfikacji dynamicznych obserwacji w metodyce.
- 2026-09-02: pierwsza publikacja; potwierdzono readers, defaults i clamps, dodano granice praktycznej przydatności.
