跳到內容

Windows 11 25H2 中的 DPC 與 Kernel Executive worker

本頁內容

DpcQueueDepth、worker limits 與 watchdog 參數這一組,常被視為一套通用的延遲微調。實際上它們是核心的內部限制與防護機制。只有在特定的 DPC 佇列、處理器數量、驅動程式類型或 worker 錯誤下,其效果才會顯現。

檢查了核心會讀取哪些 DPC、worker threads 與 watchdog 限制、這些值如何被正規化,以及這些機制實際套用於何處。

Windows 11 25H2 build 26200.9168,分支 Session Manager\Kernel 與 Session Manager\Executive。硬體相依功能與特定驅動程式不在測量範圍內。

ntoskrnl.exe 靜態分析:尋找 readers 與消費者、檢查數值範圍與正規化;與 Microsoft 公開文件交叉比對。

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 寬限期
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 工作優先順序
AlwaysTrackIoBoosting REG_DWORD 0 診斷用 I/O boost 追蹤

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 路徑。

核心使用 DpcQueueDepth、MinimumDpcRate、IdealDpcRate 與 AdjustDpcThreshold 來控制佇列與調適 DPC processing。已檢查的 defaults 4/3/20/20 已與 Windows 11 25H2 的標準狀態一致;重複寫入這些數字不會改變任何東西。

實用性: 這些參數在分析特定 DPC backlog 時可能有用,但若沒有 ETW/WPR 追蹤,盲目變更無法診斷出原因。過大的佇列可能延後處理並增加延遲尾端。

ThreadDpcEnable=1 會啟用 threaded-DPC infrastructure,0 會將工作交回一般 DIRQL path,並可能延長 interrupt-off 的時間窗。MaximumKernelWorkerThreads 限制 kernel workers 的整體集區。AdditionalCriticalWorkerThreads 與 AdditionalDelayedWorkerThreads 會加到基礎集區之上:在用戶端 Windows 上,套用 override 前分別為 5 個 critical 與 7 個 delayed workers。

更多執行緒並不代表更低延遲:額外的 workers 會消耗 stack、scheduler time 與 cache resources,而佇列可能受其他元件限制。AdditionalDelayedWorkerThreads=32 確實會增加 delayed workers,但沒有測得通用的效益。

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 是偵測故障驅動程式機制的一部分。

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 不可互換。

  • 受研究組建之 ntoskrnl.exe 中參數的 readers 與消費者。
  • 預設值與正規化邊界,包括 watchdog 參數之間的相依性。
  • 分支 Kernel 與 Executive 的區分:鄰近機碼中的同名項目不會被套用。
  • 變更參數對 FPS、延遲或回應性的影響。
  • 在沒有已確認的 DPC 佇列或 worker 問題時,變更限制的效益。

不要盲目變更這些參數:沒有 ETW/WPR 追蹤就無法確定 backlog 的原因。對工作系統而言,請保持 watchdog 啟用,並將這些參數用於診斷,而非當作一套最佳化組合。

請還原標準值或刪除選用項目。核心參數會在下次 Windows 開機時套用。

Readers 與 consumers 已在 ntoskrnl.exe Windows 11 25H2 build 26200.9168 中檢查。不公開 offsets 或虛擬碼。終端使用者指標不在此系列範圍內。

如何重現觀察的動態部分——請參閱如何自行檢查。

研究與所使用的工具均屬於 BoosterX 開發者,因此開發者對結果有直接利益關係。方法與適用範圍已於上文說明,結論可依公開資料與所列公開來源加以驗證。

公開來源已檢查:2026-09-02。

  • 2026-09-20: 「結果」章節移至「還原狀態」之前的必要位置;新增利益衝突免責聲明,以及方法中自行檢查動態觀察的連結。
  • 2026-09-02: 首次發布;確認 readers、defaults 與 clamps,新增實用效益的邊界。