Come modificare la priorità I / O di un process o thread in Win7?

Process Explorer è in grado di mostrare la priorità IO efficace di un determinato thread, ma non modificarla. Considerando che il supporto prioritario di IO è una caratteristica relativamente nuova, la maggior parte dei programmi non definisce le proprie priorità. Sembra che per impostazione predefinita la priorità IO sia derivata dalla priorità del thread (piuttosto che dalla priorità di process), che Process Explorer non può modificare.

Ci sono altri strumenti che possono aiutarmi a cambiare la priorità IO di un determinato thread / tutti i thread di un determinato process?

Strumento pronto

Uno strumento di terze parti per impostare le priorità di I / O di process, sia per l'azione dell'utente manuale, sia per l'automazione e la persistenza, sarebbe Process Lasso . Può impostare quasi tutte le impostazioni di process, e farlo in modo persistente o in base a regole (ad esempio, quando ciò accade, modificare la priorità I / O di quella).

Risposta programmata

La risposta è una semplice chiamata API ad un'API Native NT, NTSetInformationProcess . È definito come la class 'IoPriority' nel DDK 2008. In NT6 sono supportti solo due livelli: molto basso (background) e normale . Ci sono tecnicamente 5 livelli definiti – Critico, Alta, Normale, Basso e Molto Basso. Il livello critico è riservato alle operazioni di paging. Nessun dato sugli altri.

Tuttavia, il modo corretto di utilizzare la priorità di I / O è solo quello di avviare una "modalità di background" tramite una chiamata all'Appone API Windows SetProcessPriorityClass , fornendo PROCESSS_MODE_BACKGROUND_BEGIN. In questo modo verrà utilizzata la priorità I / O molto bassa (background), insieme a una class di priorità CPU IDLE. Al termine, ripristina via PROCESS_MODE_BACKGROUND_END.

L'API SetThreadPriority consente anche questa stessa modalità di background per thread specifici. Qui potresti fornire THREAD_MODE_BACKGROUND_BEGIN / END.

Ho sviluppato questo problema dopo aver visto nessuno che lo ha disturbato: https://sourceforge.net/projects/iopriority/ (open source)

Questo programma è in grado di impostare la priorità I / O di un process e tutti i thread sono interessati da esso immediatamente. È abbastanza facile da modificare per lavorare con i thread anziché i processi.

ProcessHacker è uno strumento GUI che può cambiare priorità IO di un process arbitrario.

Sono parziale ad una app gratuita denominata PRIO, che è un risparmio di priorità di process (tra le altre cose) con un piccolo footprint (less di 1 MB). Dopo l'installazione viene eseguito in silenzio in background finché non ne è necessario e la sua interface si basa direttamente nel Task Manager di Windows, estendendone la funzionalità e rendendola come se le funzionalità aggiunte fossero sempre parte di Task Manager. Quando fa clic con il button destro del mouse su un process in Task Manager con l'intento di cambiare la sua priorità, alcune delle funzioni aggiunte di PRIO diventano evidenti, in quanto è ansible modificare non solo la priorità della CPU, ma anche la priorità I / O (ergo la tua domanda) , e puoi scegliere di SALVA le nuove impostazioni se lo desideri. Quest'ultimo lo rende così che each volta che il process (cioè quel programma) viene eseguito, entrambe le priorità di process e I / O impostate e salvate da voi entreranno in vigore.

L'applicazione dispone di altre funzionalità che estendono anche le funzionalità delle varie tabs del Task Manager di Windows. Esistono versioni per entrambi i sisthemes a 32 e 64 bit e l'applicazione è gratuita per uso personale.