Ir al contenido

DPC y workers de Kernel Executive en Windows 11 25H2

En esta página

El grupo de DpcQueueDepth, worker limits y parámetros de watchdog a menudo se percibe como un conjunto de latency tweaks universales. En realidad, son límites internos y mecanismos de protección del kernel. Su efecto se manifiesta solo ante una cola DPC concreta, una cantidad de procesadores, un tipo de controlador o un error de worker.

Se comprob\u00f3 qu\u00e9 l\u00edmites de DPC, worker threads y watchdog lee el kernel, c\u00f3mo se normalizan los valores y d\u00f3nde se aplican realmente estos mecanismos.

Windows 11 25H2 build 26200.9168, ramas Session Manager\Kernel y Session Manager\Executive. Las funciones dependientes del hardware y los controladores concretos no se incluyeron en las mediciones.

An\u00e1lisis est\u00e1tico de ntoskrnl.exe: b\u00fasqueda de readers y consumidores, verificaci\u00f3n de rangos y normalizaci\u00f3n de valores; contraste con la documentaci\u00f3n p\u00fablica de Microsoft.

Ruta de DPC y watchdog:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Kernel

Value Type Default/normalization Qu\u00e9 controla
DpcQueueDepth REG_DWORD 4 profundidad de la cola DPC
MinimumDpcRate REG_DWORD 3 frecuencia m\u00ednima de procesamiento DPC
IdealDpcRate REG_DWORD 20 DPC rate objetivo
AdjustDpcThreshold REG_DWORD 20 umbral de adaptaci\u00f3n de la pol\u00edtica DPC
ThreadDpcEnable REG_DWORD 1 procesamiento de thread-DPC
DpcWatchdogPeriod REG_DWORD 120000 per\u00edodo del DPC watchdog
DpcCumulativeSoftTimeout REG_DWORD 120000 en la build investigada soft budget acumulado
PassiveWatchdogTimeout REG_DWORD 300 segundos watchdog de nivel pasivo con KD
ForceIdleGracePeriod REG_DWORD 5 segundos per\u00edodo de gracia de force-idle
PerfIsoEnabled REG_DWORD 0 aislamiento de rendimiento
CacheIsoBitmap REG_DWORD 0 m\u00e1scara Intel CAT L3
SchedulerAssistThreadFlagOverride REG_DWORD 0 override de asistencia del planificador
VpThreadSystemWorkPriority REG_DWORD 30, rango 1..31 prioridad de trabajo del procesador virtual
AlwaysTrackIoBoosting REG_DWORD 0 seguimiento de boost de I/O de diagn\u00f3stico

Ruta de Kernel Executive workers:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Executive

Value Type Default/normalization Qu\u00e9 controla
AdditionalCriticalWorkerThreads REG_DWORD 0, clamp 0..100 critical workers adicionales
AdditionalDelayedWorkerThreads REG_DWORD 0, clamp 0..100 delayed workers
MaximumKernelWorkerThreads REG_DWORD 4096, 32..16384 l\u00edmite superior de kernel workers
ForceEnableMutantAutoboost REG_DWORD 0 autoboost de mutantes
WorkerThreadTimeoutInSeconds REG_DWORD 600, 60..3600 timeout de worker

Session Manager\Kernel y Session Manager\Executive son ramas de configuraci\u00f3n distintas. Para cada valor es importante la ruta que abre el reader del kernel en esta build.

El kernel usa DpcQueueDepth, MinimumDpcRate, IdealDpcRate y AdjustDpcThreshold para controlar la cola y la adaptaci\u00f3n del procesamiento DPC. Los defaults verificados 4/3/20/20 ya coinciden con el estado est\u00e1ndar de Windows 11 25H2; reescribir estos n\u00fameros no cambia nada.

Utilidad: estos par\u00e1metros pueden ser \u00fatiles al analizar un DPC backlog concreto, pero sin una traza ETW/WPR el cambio a ciegas no diagnostica la causa. Una cola grande puede posponer el procesamiento y aumentar la cola de latencia.

ThreadDpcEnable=1 activa la infraestructura de threaded-DPC, 0 devuelve el trabajo a la ruta DIRQL normal y puede alargar las ventanas de interrupt-off. MaximumKernelWorkerThreads limita el pool com\u00fan de kernel workers. AdditionalCriticalWorkerThreads y AdditionalDelayedWorkerThreads se suman a los pools base: en Windows de cliente esto es respectivamente 5 critical y 7 delayed workers antes de aplicar el override.

M\u00e1s hilos no significa menos latencia: los workers adicionales consumen stack, tiempo del planificador y recursos de cach\u00e9, y la cola puede estar limitada por otro componente. AdditionalDelayedWorkerThreads=32 s\u00ed a\u00f1ade delayed workers, pero no hay una ganancia universal medida.

DpcCumulativeSoftTimeout limita el tiempo acumulado de DPC. DpcWatchdogPeriod=0 es admisible y desactiva este watchdog; cualquier valor distinto de cero inferior a 2000 pasa a ser 2000 ms. PassiveWatchdogTimeout se usa solo con el kernel debugger activado, por lo que en un sistema normal este timer no est\u00e1 activo incluso con los 300 segundos est\u00e1ndar. WorkerThreadTimeoutInSeconds limita el bloqueo de una operaci\u00f3n de worker.

DpcCumulativeSoftTimeout tiene un l\u00edmite inferior de 2000 ms y no puede superar DpcWatchdogPeriod. Para obtener el valor 240000, el per\u00edodo del watchdog tambi\u00e9n debe ser 240000. WorkerThreadTimeoutInSeconds se normaliza al rango 60..3600 segundos; escribir 0 no desactiva el timeout, sino que da el valor m\u00ednimo.

Desactivar el timeout de protecci\u00f3n elimina el diagn\u00f3stico, pero no corrige la causa del bloqueo. Para un sistema de producci\u00f3n, el watchdog es parte del mecanismo de detecci\u00f3n de controladores defectuosos.

ForceEnableMutantAutoboost est\u00e1 en la rama Executive, mientras que ForceIdleGracePeriod, PerfIsoEnabled, CacheIsoBitmap, SchedulerAssistThreadFlagOverride, VpThreadSystemWorkPriority y AlwaysTrackIoBoosting se leen de la rama Kernel. Esta diferencia es cr\u00edtica: una entrada con el mismo nombre en la subclave vecina no se aplica.

CacheIsoBitmap se usa solo con soporte de Intel Resource Director/CAT; sin CAT el valor no crea aislamiento. SchedulerAssistThreadFlagOverride=0 y 1 dejan la activaci\u00f3n autom\u00e1tica, 2 desactiva la rama de forma forzada. VpThreadSystemWorkPriority admite 1..31, de lo contrario se restablece a 1; el default es 30, y 31 es solo el l\u00edmite superior. AlwaysTrackIoBoosting=1 activa la asignaci\u00f3n de diagn\u00f3stico y la captura de stack en las rutas de boost, y no mantiene elevada la prioridad de I/O.

Utilidad: sin un consumidor confirmado, el efecto suele estar ausente o ser demasiado peque\u00f1o para una decisi\u00f3n pr\u00e1ctica. Estos valores son \u00fatiles como objeto de un diagn\u00f3stico de kernel aparte, no como un conjunto general de optimizaci\u00f3n.

Los defaults verificados 4/3/20/20 coinciden con el estado est\u00e1ndar de Windows 11 25H2. Los workers adicionales por defecto son iguales a cero, el l\u00edmite superior de kernel workers es 4096 con un rango de 32..16384. Los par\u00e1metros de watchdog se normalizan: un valor inferior a 2000 ms pasa a ser 2000, y DpcCumulativeSoftTimeout no supera el per\u00edodo del watchdog. Las ramas Kernel y Executive no son intercambiables.

  • Readers y consumidores de los par\u00e1metros en ntoskrnl.exe de la build investigada.
  • Valores por defecto y l\u00edmites de normalizaci\u00f3n, incluidas las dependencias entre par\u00e1metros de watchdog.
  • Separaci\u00f3n de las ramas Kernel y Executive: una entrada con el mismo nombre en la subclave vecina no se aplica.
  • El impacto de cambiar los par\u00e1metros sobre FPS, latencia o capacidad de respuesta.
  • La utilidad de cambiar los l\u00edmites sin un problema confirmado de cola DPC o worker.

No cambie estos par\u00e1metros a ciegas: sin una traza ETW/WPR no se puede establecer la causa del backlog. Para un sistema en uso, mantenga el watchdog activado y use los par\u00e1metros para diagn\u00f3stico, no como un conjunto de optimizaci\u00f3n.

Devuelva los valores est\u00e1ndar o elimine las entradas opcionales. Los par\u00e1metros del kernel se aplican en el siguiente arranque de Windows.

Los readers y consumers se verificaron en ntoskrnl.exe Windows 11 25H2 build 26200.9168. No se publican offsets ni pseudoc\u00f3digo. Las m\u00e9tricas finales de usuario no se incluyeron en esta serie.

C\u00f3mo repetir la parte din\u00e1mica de las observaciones: consulte C\u00f3mo verificar por su cuenta.

La investigaci\u00f3n y las herramientas utilizadas pertenecen al desarrollador de BoosterX, por lo que el desarrollador tiene un inter\u00e9s directo en los resultados. La metodolog\u00eda y los l\u00edmites de aplicabilidad se describen arriba, y las conclusiones se pueden verificar con los datos abiertos y las fuentes p\u00fablicas enumeradas.

Fuentes p\u00fablicas verificadas: 2026-09-02.

  • 2026-09-20: la secci\u00f3n «Resultados» se movi\u00f3 al lugar obligatorio antes de «Restauraci\u00f3n del estado»; se a\u00f1adieron el descargo de responsabilidad sobre el conflicto de intereses y el enlace a la verificaci\u00f3n independiente de las observaciones din\u00e1micas en la metodolog\u00eda.
  • 2026-09-02: primera publicaci\u00f3n; se confirmaron readers, defaults y clamps, se a\u00f1adieron los l\u00edmites de utilidad pr\u00e1ctica.