Windows 11 25H2におけるDPCとKernel Executiveワーカー
目次
DpcQueueDepthのグループ、worker limits、watchdogパラメータは、しばしば汎用的なlatency tweaksのセットとして受け取られます。実際にはこれらはカーネルの内部リミットと保護メカニズムです。その効果は、特定のDPCキュー、プロセッサ数、ドライバーの種類、またはworkerのエラーがある場合にのみ現れます。
何を確認したか
Section titled “何を確認したか”カーネルがどのDPC、worker threads、watchdogのリミットを読み取るか、値がどのように正規化されるか、そしてこれらのメカニズムが実際にどこで適用されるかを確認しました。
Windows 11 25H2 build 26200.9168、ブランチSession Manager\KernelおよびSession Manager\Executive。ハードウェア依存の機能と特定のドライバーは測定に含まれていません。
ntoskrnl.exeの静的解析:readersとconsumersの検索、値の範囲と正規化の確認、Microsoftの公開ドキュメントとの照合。
正規のパスと値
Section titled “正規のパスと値”DPCとwatchdogのパス:
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Kernel
| Value | Type | Default/normalization | 何を制御するか |
|---|---|---|---|
DpcQueueDepth |
REG_DWORD |
4 |
DPC queueの深さ |
MinimumDpcRate |
REG_DWORD |
3 |
DPC処理の最小頻度 |
IdealDpcRate |
REG_DWORD |
20 |
目標DPC rate |
AdjustDpcThreshold |
REG_DWORD |
20 |
DPC policy適応のしきい値 |
ThreadDpcEnable |
REG_DWORD |
1 |
thread-DPC processing |
DpcWatchdogPeriod |
REG_DWORD |
120000 |
DPC watchdog period |
DpcCumulativeSoftTimeout |
REG_DWORD |
120000 調査対象ビルドにて |
累積soft budget |
PassiveWatchdogTimeout |
REG_DWORD |
300 秒 |
KD時のpassive-level watchdog |
ForceIdleGracePeriod |
REG_DWORD |
5 秒 |
force-idle grace period |
PerfIsoEnabled |
REG_DWORD |
0 |
performance isolation |
CacheIsoBitmap |
REG_DWORD |
0 |
Intel CAT L3 mask |
SchedulerAssistThreadFlagOverride |
REG_DWORD |
0 |
scheduler assist override |
VpThreadSystemWorkPriority |
REG_DWORD |
30、範囲1..31 |
virtual processor work priority |
AlwaysTrackIoBoosting |
REG_DWORD |
0 |
診断用I/O boost tracking |
Kernel Executive workersのパス:
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Executive
| Value | Type | Default/normalization | 何を制御するか |
|---|---|---|---|
AdditionalCriticalWorkerThreads |
REG_DWORD |
0、clamp 0..100 |
追加のcritical workers |
AdditionalDelayedWorkerThreads |
REG_DWORD |
0、clamp 0..100 |
delayed workers |
MaximumKernelWorkerThreads |
REG_DWORD |
4096、32..16384 |
kernel workersの上限 |
ForceEnableMutantAutoboost |
REG_DWORD |
0 |
mutant autoboost |
WorkerThreadTimeoutInSeconds |
REG_DWORD |
600、60..3600 |
worker timeout |
Session Manager\KernelとSession Manager\Executiveは異なる構成ブランチです。各値にとって、そのビルドでカーネルのreaderが開くパスが重要です。
DPC queueとrates
Section titled “DPC queueとrates”カーネルはDpcQueueDepth、MinimumDpcRate、IdealDpcRate、AdjustDpcThresholdを使用してキューの制御とDPC processingの適応を行います。確認されたdefaults 4/3/20/20はすでにWindows 11 25H2の標準状態と一致しており、これらの数値を再度書き込んでも何も変わりません。
有用性: これらのパラメータは特定のDPC backlogの解析には役立つ可能性がありますが、ETW/WPRトレースなしで盲目的に変更しても原因を診断することはできません。大きなキューは処理を遅延させ、latencyのテールを増加させる可能性があります。
Thread DPCとworker limits
Section titled “Thread DPCとworker limits”ThreadDpcEnable=1はthreaded-DPC infrastructureを有効にし、0は処理を通常のDIRQL pathに戻し、interrupt-offのウィンドウを延長する可能性があります。MaximumKernelWorkerThreadsはkernel workersの共通プールを制限します。AdditionalCriticalWorkerThreadsとAdditionalDelayedWorkerThreadsは基本プールに追加されます:クライアント版Windowsでは、override適用前はそれぞれ5 criticalおよび7 delayed workersです。
スレッドが多いほどlatencyが低くなるわけではありません:追加のworkersはstack、scheduler time、cache resourcesを消費し、キューは別のコンポーネントによって制限されている可能性があります。AdditionalDelayedWorkerThreads=32は確かにdelayed workersを追加しますが、測定された汎用的な利得はありません。
Watchdogとtimeout
Section titled “Watchdogとtimeout”DpcCumulativeSoftTimeoutは累積DPC時間を制限します。DpcWatchdogPeriod=0は許容され、このwatchdogを無効にします;2000未満の任意の非ゼロ値は2000 msになります。PassiveWatchdogTimeoutはkernel debuggerが有効な場合にのみ使用されるため、通常のシステムでは標準の300秒であってもこのtimerはアクティブではありません。WorkerThreadTimeoutInSecondsはworker operationのハングを制限します。
DpcCumulativeSoftTimeoutには下限2000 msがあり、DpcWatchdogPeriodを超えることはできません。値240000を得るには、watchdog periodも240000でなければなりません。WorkerThreadTimeoutInSecondsは60..3600秒の範囲に正規化されます;0を書き込んでもtimeoutは無効にならず、最小値になります。
保護timeoutを無効にすると診断は失われますが、ブロックの原因は修正されません。productionシステムにとって、watchdogは故障したドライバーを検出するメカニズムの一部です。
Kernel Executive policy
Section titled “Kernel Executive policy”ForceEnableMutantAutoboostはブランチExecutiveにあり、ForceIdleGracePeriod、PerfIsoEnabled、CacheIsoBitmap、SchedulerAssistThreadFlagOverride、VpThreadSystemWorkPriority、AlwaysTrackIoBoostingはブランチKernelから読み取られます。この違いは重要です:隣接するサブキーにある同名のエントリは適用されません。
CacheIsoBitmapはIntel Resource Director/CATのサポートがある場合にのみ使用されます;CATなしでは値は分離を生み出しません。SchedulerAssistThreadFlagOverride=0と1は自動有効化を残し、2はブランチを強制的に無効にします。VpThreadSystemWorkPriorityは1..31を許可し、そうでなければ1にリセットされます;defaultは30、31は単なる上限です。AlwaysTrackIoBoosting=1はboost pathsでの診断用allocationとstack-captureを有効にするものであり、I/O priorityを高いまま保持するものではありません。
有用性: 確認されたconsumerなしでは、効果は通常存在しないか、実用的な判断には小さすぎます。このような値は、一般的な最適化セットとしてではなく、個別のkernel診断の対象として有用です。
確認されたdefaults 4/3/20/20はWindows 11 25H2の標準状態と一致します。追加のworkersはデフォルトでゼロ、kernel workersの上限は4096で範囲は32..16384です。Watchdogパラメータは正規化されます:2000 ms未満の値は2000になり、DpcCumulativeSoftTimeoutはwatchdog periodを超えません。ブランチKernelとExecutiveは互換性がありません。
確認されたこと
Section titled “確認されたこと”- 調査対象ビルドの
ntoskrnl.exeにおけるパラメータのreadersとconsumers。 - watchdogパラメータ間の依存関係を含む、デフォルト値と正規化の境界。
- ブランチ
KernelとExecutiveの分離:隣接するサブキーにある同名のエントリは適用されません。
確認されなかったこと
Section titled “確認されなかったこと”- パラメータ変更がFPS、latency、応答性に与える影響。
- DPCキューまたはworkerに確認された問題がない状態でのリミット変更の有用性。
実用的な結論
Section titled “実用的な結論”これらのパラメータを盲目的に変更しないでください:ETW/WPRトレースなしではbacklogの原因を特定できません。稼働中のシステムではwatchdogを有効のままにし、パラメータは最適化セットとしてではなく診断に使用してください。
標準値に戻すか、オプションのエントリを削除してください。カーネルパラメータは次回のWindows起動時に適用されます。
ReadersとconsumersはWindows 11 25H2 build 26200.9168のntoskrnl.exeで確認されました。offsetsや疑似コードは公開されていません。エンドユーザー向けメトリクスはこのシリーズに含まれていません。
- DPCs and threads、Microsoft Learn、確認日2026-09-01。
- Bug checks 0x133 DPC_WATCHDOG_VIOLATION、Microsoft Learn、確認日2026-09-01。
観察の動的な部分を再現する方法については、自分で確認する方法を参照してください。
研究と使用されたツールはBoosterXの開発者に帰属するため、開発者は結果に対して直接の利害関係を持ちます。方法論と適用範囲は上記に記載されており、結論は公開データと列挙された公開ソースによって検証できます。
公開ソースの確認日:2026-09-02。
- 2026-09-20: 「結果」セクションを「状態の復元」の前の必須位置に移動;利益相反に関する免責事項と、方法論における動的観察の自主検証へのリンクを追加。
- 2026-09-02: 初回公開;readers、defaults、clampsを確認し、実用的な有用性の境界を追加。
