¿Cómo cambiar la prioridad de E / S de un proceso o subproceso en Win7?

32

Process Explorer puede mostrar la prioridad de E / S efectiva de un subproceso determinado, pero no cambiarla. Como el soporte prioritario de E / S es una característica relativamente nueva, la mayoría de los programas no establecen sus propias prioridades de E / S. Parece que, de forma predeterminada, la prioridad de E / S se deriva de la prioridad del subproceso (en lugar de la prioridad del proceso), que Process Explorer tampoco puede modificar.

¿Hay alguna otra herramienta que pueda ayudarme a cambiar la prioridad de E / S de un hilo dado / todos los hilos de un proceso dado?

RomanSt
fuente
Hay casi la misma pregunta sobre Stack Overflow: stackoverflow.com/questions/301290/…
Mehper C. Palavuzlar
3
@ [Mehper C. Palavuzlar] es cierto, pero esto no es para el software que desarrollo; estoy buscando una herramienta lista para hacerlo en software de terceros.
RomanSt

Respuestas:

11

Herramienta lista para usar

Process Lasso sería una herramienta de terceros para establecer las prioridades de E / S del proceso, ya sea mediante la acción manual del usuario o la automatización y persistencia . Puede establecer casi cualquier configuración de proceso, y hacerlo de forma persistente, o por reglas (por ejemplo, cuando esto sucede, cambie la prioridad de E / S de eso).

Respuesta programática

La respuesta es una simple llamada API a una API nativa de NT, NTSetInformationProcess . Se define como la clase 'IoPriority' en el DDK 2008. En NT6 solo se admiten dos niveles: Muy bajo (fondo) y Normal . Técnicamente, hay 5 niveles definidos: crítico, alto, normal, bajo y muy bajo. El nivel Crítico está reservado para operaciones de paginación. No hay datos sobre los demás.

Sin embargo, la forma correcta de usar la prioridad de E / S es solo iniciar un 'modo de fondo' a través de una llamada a la API SetProcessPriorityClass de Windows , proporcionando PROCESSS_MODE_BACKGROUND_BEGIN. Esto hará que use la prioridad de E / S muy baja (fondo), junto con una clase de prioridad de CPU IDLE. Cuando termine, revierta a través de PROCESS_MODE_BACKGROUND_END.

La API SetThreadPriority también permitirá este mismo modo de fondo para subprocesos específicos. Aquí proporcionaría THREAD_MODE_BACKGROUND_BEGIN / END.

dyasta
fuente
No estoy interesado en la programación de Windows y el nivel del sistema operativo, pero he oído hablar de cambiar la prioridad de un hilo, hasta THREAD_PRIORITY_TIME_CRITICAL, ¿es eso posible con su programa o cualquier otro programa? ¿o sigue siendo solo IO PRIORITY lo que se puede ajustar, y no la prioridad de la CPU del hilo? Supongo que cambiar la prioridad de IO no hará mucha diferencia en el uso de la CPU, ¿verdad?
barlop
Sí. Ambos se pueden configurar y persistir. También se pueden establecer muchas otras cosas, o cambiar dinámicamente según las reglas (por ejemplo, afinidad de la CPU). La prioridad de E / S es distinta de la prioridad de la CPU, a la derecha.
dyasta
Esa no es "una herramienta preparada para hacer esto en un software de terceros".
Cees Timmerman
Lo siento, creo que la pregunta puede haber sido editada, ya que claramente estaba respondiendo desde un lado programático (no editado). Process Lasso es una 'herramienta preparada para hacer esto en software de terceros'. Ver bitsum.com
dyasta
23

Desarrollé esto después de ver que nadie se molestó: https://sourceforge.net/projects/iopriority/ (código abierto)

Este programa puede establecer la prioridad de E / S de un proceso, y todos los subprocesos se ven afectados de inmediato. Es bastante fácil modificarlo para que funcione con hilos en lugar de procesos.

Wye
fuente
1
Acabo de notar que no permite que cambie un proceso a Alta prioridad en el Servidor 2012R2.
jftuga
14

ProcessHacker es una herramienta GUI que puede cambiar la prioridad de E / S de un proceso arbitrario.

RomanSt
fuente
¿Por qué se parece a algo que hizo Russinovich?
Daniel Mošmondor
1
@ DanielMošmondor ¿Tal vez fue inspirado por ProcExp y sus limitaciones? Personalmente cambié porque ProcExp mostró un uso de CPU completamente incorrecto en mi computadora portátil después de la versión 14.
RomanSt
1
No solo eso, ProcExp también pudo BSOD mi comp, etc. ¿Es gratis?
Daniel Mošmondor
@ DanielMošmondor Sí, además, en realidad parece hacer más que ProcExp en todos los sentidos. Interfaz de usuario ligeramente diferente pero muy capaz de hecho.
RomanSt
1

Soy partidario de una aplicación gratuita llamada PRIO, que es un protector de prioridad de proceso (entre otras cosas) con una huella muy pequeña (menos de 1 MB). Después de la instalación, se ejecuta silenciosamente en segundo plano hasta que lo necesite, y su interfaz se integra directamente en el Administrador de tareas de Windows, ampliando su funcionalidad y haciendo que las funciones agregadas siempre sean parte del Administrador de tareas. Cuando hace clic con el botón derecho en un proceso en el Administrador de tareas con la intención de cambiar su prioridad, algunas de las características adicionales de PRIO se vuelven aparentes, ya que puede cambiar no solo la prioridad de la CPU del proceso sino también su prioridad de E / S (ergo su pregunta) , y puede elegir GUARDAR la nueva configuración si así lo desea. Esto último hace que cada vez que se ejecute ese proceso (es decir, ese programa), entren en vigor las prioridades de proceso de CPU y E / S establecidas y guardadas por usted.

La aplicación tiene otras características que también amplían la funcionalidad de las diversas pestañas en el Administrador de tareas de Windows. Existen versiones para sistemas de 32 y 64 bits, y la aplicación es gratuita para uso personal.

Mike Mounier
fuente
Suena como una gran aplicación. ¿Tienes un enlace?
Stijn de Witt
1
Si te refieres a PRIO, está disponible en varios agregadores de contenido diferentes (como cnet), pero directamente desde el sitio web del desarrollador sería prnwatch.com/prio
Mike Mounier