跳转到内容

Windows 11 25H2 中的 DPC 与 Kernel Executive 工作线程

本页内容

DpcQueueDepth 组、worker limits 和 watchdog 参数常被视为一套通用的延迟 tweaks。实际上它们是内核的内部限制和保护机制。其效果仅在特定的 DPC 队列、处理器数量、驱动程序类型或 worker 错误下才会显现。

我们检查了内核读取哪些 DPC、worker threads 和 watchdog 限制,这些值如何被规范化,以及这些机制实际应用于何处。

Windows 11 25H2 build 26200.9168,分支 Session Manager\Kernel 和 Session Manager\Executive。硬件相关功能和特定驱动程序未纳入测量。

ntoskrnl.exe 静态分析:查找 readers 和 consumers,检查取值范围和值规范化;与 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 周期
DpcCumulativeSoftTimeout REG_DWORD 120000 在所研究的 build 中 累积 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 在此 build 中打开的是哪个路径。

内核使用 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 周期。分支 Kernel 和 Executive 不可互换。

  • 所研究 build 的 ntoskrnl.exe 中参数的 readers 和 consumers。
  • 默认值和规范化边界,包括 watchdog 参数之间的依赖关系。
  • 分支 Kernel 和 Executive 的区分:相邻子项中的同名记录不会被应用。
  • 修改参数对 FPS、延迟或响应速度的影响。
  • 在没有确认的 DPC 队列或 worker 问题的情况下修改限制的收益。

不要盲目修改这些参数:没有 ETW/WPR 跟踪就无法确定 backlog 的原因。对于工作系统,请保持 watchdog 启用,并将这些参数用于诊断,而不是作为一套优化。

恢复默认值或删除可选记录。内核参数会在下次 Windows 启动时应用。

Readers 和 consumers 已在 Windows 11 25H2 build 26200.9168 的 ntoskrnl.exe 中检查。不发布 offsets 或伪代码。最终用户指标未纳入本系列。

如何复现观察的动态部分——参见如何自行检查。

研究和所使用的工具属于 BoosterX 开发者,因此开发者对结果有直接利益。方法和适用范围已在上文描述,结论可通过公开数据和所列公开来源进行验证。

公开来源检查于:2026-09-02。

  • 2026-09-20: 将「结果」部分移至「恢复状态」之前的必选位置;在方法中增加了利益冲突免责声明和自行检查动态观察的链接。
  • 2026-09-02: 首次发布;确认了 readers、defaults 和 clamps,增加了实际收益的边界。