Ir al contenido

Scheduler, timers y foreground boost en Windows 11 25H2

En esta página

Estos valores controlan el planificador, la resolución de temporizadores, la distribución de interrupciones de reloj y el presupuesto de DPC. Por un solo nombre no se puede determinar todo el efecto: Windows aplica máscaras de bits y normaliza los valores de entrada. Distintas entradas pueden definir el mismo modo de funcionamiento.

Se comprobó qué parámetros del planificador y de los temporizadores lee el kernel, cómo se normalizan los valores y qué campos de Win32PrioritySeparation responden a qué.

Windows 11 25H2 build 26200.9168, scheduler y timer paths del kernel. Los juegos y aplicaciones concretos no se incluyeron en las mediciones.

Tabla maestra de parámetros del kernel, observación de accesos en runtime al Registry y verificación de campos de bits y normalización de valores.

Registry path Value Type Default Reader/timing
HKLM\SYSTEM\CurrentControlSet\Control\PriorityControl Win32PrioritySeparation REG_DWORD 0x02 ntoskrnl.exe, luego session initialization
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Kernel GlobalTimerResolutionRequests REG_DWORD 0 kernel phase-0
la misma ruta MaxDynamicTickDuration REG_DWORD 0xFFFFFFFF dynamic tick duration limit
la misma ruta EnablePerCpuClockTickScheduling REG_DWORD 0 phase-1 clock init
la misma ruta DisableLowQosTimerResolution REG_DWORD 1 timer policy init
la misma ruta DpcCumulativeSoftTimeout REG_DWORD 120000 DPC budget init
la misma ruta ForceForegroundBoostDecay REG_DWORD 0 scheduler init
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\I/O System PassiveIntRealTimeWorkerPriority REG_DWORD 16 I/O worker init

El valor se compone de campos de bits. El kernel determina por separado el refuerzo de la aplicación activa (foreground boost), el tipo y la duración del cuanto. En la build estudiada, el valor inicial del cliente de Windows es 0x02. Al valor de entrada se le aplica la máscara 0x3F, por lo que distintas entradas pueden definir un mismo modo del planificador.

El desglose de los campos de bits bit a bit, la calculadora de valores equivalentes y las mediciones históricas de latencia y FPS se han trasladado a un estudio aparte «Win32PrioritySeparation: latencia y FPS con carga completa de CPU». El lado del usuario —elección, efecto y reversión— lo cubre la página de configuración de BoosterX.

El parámetro cambia las reglas de planificación. Para evaluar su utilidad en una tarea concreta hay que repetir la prueba con carga de CPU y medir la latencia; la configuración no garantiza una aceleración universal.

GlobalTimerResolutionRequests y los parámetros de temporizadores vecinos se leen de Session Manager\Kernel. Influyen en el ámbito de acción de las solicitudes de resolución del temporizador, local o de todo el sistema, y en la distribución de las interrupciones de reloj entre las CPU. En las plataformas compatibles, la planificación separada de los tics por CPU puede funcionar también sin configuración forzada.

MaxDynamicTickDuration limita la duración del sueño en reposo sin tics periódicos. La unidad de medida es de 100 nanosegundos: 7500 significa 0.75 ms, no 7.5 ms. El límite superior se restringe además por la resolución actual del temporizador. 0xFFFFFFFF elimina el límite adicional.

DisableLowQosTimerResolution cambia la restricción para las solicitudes de resolución del temporizador de baja prioridad. Una resolución alta constante no se establece por sí misma en este caso.

Solo conviene cambiar las reglas de los temporizadores para una carga que realmente ejecute dichas solicitudes. Una resolución alta constante aumenta el número de interrupciones del temporizador y el consumo de energía.

DpcCumulativeSoftTimeout define el presupuesto del tiempo total de ejecución de DPC. Sus límites de normalización, su relación con DpcWatchdogPeriod y los parámetros vecinos de DPC y los límites de workers se analizan en el estudio «DPC y Kernel Executive workers en Windows 11 25H2»; aquí no se repiten. ForceForegroundBoostDecay cambia las reglas de atenuación del refuerzo de la aplicación activa, y PassiveIntRealTimeWorkerPriority define la prioridad del hilo de trabajo especial de entrada/salida. Para PassiveIntRealTimeWorkerPriority el código acepta 17..21; si no existe la entrada se usa 16. El valor 18 es admisible y eleva la prioridad.

Al comparar, tenga en cuenta las unidades de medida y las restricciones de los rangos. El kernel normaliza los valores no compatibles, por lo que el número escrito puede diferir del aplicado realmente.

Estos parámetros pertenecen a la planificación del sistema y al diagnóstico de controladores. Sin una traza DPC/ISR no hay bases fiables para cambiarlos manualmente.

  • La lectura de todos los parámetros de la tabla se confirmó en ntoskrnl.exe de la build 26200.9168: Win32PrioritySeparation se lee durante la inicialización del planificador y session initialization, los parámetros de temporizadores — en las fases de inicialización del kernel.
  • Se confirmaron los valores iniciales y la normalización: la máscara 0x3F para Win32PrioritySeparation, el rango 17..21 con reserva 16 para PassiveIntRealTimeWorkerPriority, la unidad de 100 ns en MaxDynamicTickDuration.
  • Las observaciones en sí son cualitativas: en este estudio no se midieron valores de latencia, FPS ni carga en segundo plano.
  • Los readers y la normalización de los parámetros en ntoskrnl.exe de la build estudiada.
  • El valor inicial 0x02 para Win32PrioritySeparation y la máscara 0x3F.
  • El significado de los campos boost y cuantos, las unidades de MaxDynamicTickDuration.
  • La normalización de PassiveIntRealTimeWorkerPriority hasta el rango 17..21 con reserva 16.
  • La influencia del cambio en FPS, latencia o capacidad de respuesta.
  • La utilidad del cambio sin una carga que realmente use temporizadores y DPC.

Deje los valores predeterminados. Cambie los parámetros solo para una carga que realmente ejecute las solicitudes correspondientes, y compare los resultados en ejecuciones idénticas.

Devuelva los valores predeterminados o elimine las entradas opcionales. Los parámetros del kernel se aplican en el siguiente arranque de Windows.

Las lecturas en la fase 0 del arranque pueden no entrar en el intervalo de grabación de Procmon. El estudio confirma el código de lectura y la normalización en la build 26200.9168. El número de ejecuciones independientes de observación (arranques y trazas) no queda fijado en los datos del artículo, por lo que la repetibilidad de las propias observaciones de los readers no se evaluó cuantitativamente. No se estableció una influencia universal sobre el rendimiento o la latencia.

El estudio y las herramientas utilizadas pertenecen al desarrollador de BoosterX, por lo que el desarrollador tiene un interés directo en los resultados. La metodología y los límites de aplicabilidad se describen arriba, y las conclusiones se pueden verificar con los datos abiertos y las fuentes públicas enumeradas.

Fuentes públicas verificadas: 2026-09-02.

  • 2026-09-20: añadido el descargo de responsabilidad sobre el conflicto de intereses; armonizadas las fechas reviewed/modified.
  • 2026-09-19: añadidas la sección «Resultados», las referencias cruzadas a los estudios Win32PrioritySeparation y de parámetros DPC/worker y la página de configuración de BoosterX; fijada la ausencia del número de ejecuciones de observación.
  • 2026-09-02: primera publicación; confirmados los readers, la normalización y los campos de bits, añadidos los límites de la utilidad práctica.