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


32

Process Explorer è in grado di mostrare l'effettiva priorità di I / O di un determinato thread, ma non di cambiarlo. Considerando che il supporto delle priorità di I / O è una funzione relativamente nuova, la maggior parte dei programmi non imposta le proprie priorità di I / O. Sembra che per impostazione predefinita la priorità di I / O sia derivata dalla priorità del thread (anziché dalla priorità del processo), che neanche Process Explorer può modificare.

Ci sono altri strumenti là fuori che possono aiutarmi a cambiare la priorità di I / O di un determinato thread / tutti i thread di un determinato processo?


Non v'è quasi la stessa domanda su Stack Overflow: stackoverflow.com/questions/301290/...
Mehper C. Palavuzlar

3
@ [Mehper C. Palavuzlar] vero, ma questo non è per il software che sviluppo - Sto cercando uno strumento pronto per farlo su software di terze parti.
Roman,

Risposte:


11

Strumento pronto

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

Risposta programmatica

La risposta è una semplice chiamata API a un'API nativa NT, NTSetInformationProcess . È definita come la classe "IoPriority" nel DDK 2008. In NT6 sono supportati solo due livelli: Molto basso (sfondo) e Normale . Sono definiti tecnicamente 5 livelli: Critico, Alto, Normale, Basso e Molto basso. Il livello critico è riservato alle operazioni di paginazione. Nessun dato sugli altri.

Tuttavia, il modo corretto di utilizzare la priorità I / O è solo l'avvio di una "modalità in background" tramite una chiamata all'API SetProcessPriorityClass di Windows , fornendo PROCESSS_MODE_BACKGROUND_BEGIN. Ciò farà sì che usi la priorità I / O molto bassa (in background), insieme a una classe di priorità CPU IDLE. Al termine, ripristina via PROCESS_MODE_BACKGROUND_END.

L' API SetThreadPriority consentirà anche questa stessa modalità in background per thread specifici. Qui forniresti THREAD_MODE_BACKGROUND_BEGIN / END.


Non mi occupo di programmazione di Windows e roba a livello di sistema operativo, ma ho sentito parlare di saltare la priorità di un thread, fino a THREAD_PRIORITY_TIME_CRITICAL è possibile con il tuo programma o qualsiasi programma? o è ancora solo IO PRIORITY che può essere regolato e non filettare la priorità della CPU? Immagino che cambiare la priorità di IO non farà molta differenza per l'utilizzo della CPU, giusto?
barlop

Sì. Entrambi possono essere impostati e persistono. Molte altre cose possono anche essere impostate o modificate dinamicamente in base alle regole (ad es. Affinità della CPU). La priorità di I / O è distinta dalla priorità della CPU, a destra.
dyasta,

Questo non è "uno strumento pronto per farlo su software di terze parti".
Cees Timmerman,

Mi dispiace, penso che la domanda potrebbe essere stata modificata, poiché chiaramente stavo rispondendo da un punto di vista programmatico (non modificato). Process Lasso è uno "strumento pronto per farlo su software di terze parti". Vedi bitsum.com
dyasta il

23

L'ho sviluppato dopo aver visto nessuno disturbato: https://sourceforge.net/projects/iopriority/ (open source)

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


1
Ho appena notato che non gli permetti di cambiare un processo con una priorità alta su Server 2012R2.
jftuga,

14

ProcessHacker è uno strumento GUI che può modificare la priorità di I / O di un processo arbitrario.


Perché sembra qualcosa che Russinovich ha fatto?
Daniel Mošmondor,

1
@ DanielMošmondor Forse è stato ispirato da ProcExp e dai suoi limiti? Personalmente sono passato perché ProcExp mostrava un utilizzo della CPU completamente errato sul mio laptop dopo la versione 14.
RomanSt

1
Non solo, ProcExp è stato anche in grado di BSOD il mio computer, ecc. È gratuito?
Daniel Mošmondor,

@ DanielMošmondor Sì, inoltre in realtà sembra fare più di ProcExp in ogni modo. Interfaccia utente leggermente diversa ma davvero molto capace.
Roman,

1

Sono parziale di un'app gratuita chiamata PRIO, che è un risparmiatore di priorità del processo (tra le altre cose) con un footprint molto piccolo (meno di 1 MB). Dopo l'installazione viene eseguito in modalità silenziosa in background fino a quando non è necessario e la sua interfaccia si integra direttamente nel Task Manager di Windows, estendendone le funzionalità e rendendolo come se le funzionalità aggiunte fossero sempre parte del Task Manager. Quando si fa clic con il pulsante destro del mouse su un processo in Task Manager con l'intenzione di cambiarne la priorità, alcune delle funzionalità aggiunte di PRIO diventano evidenti, in quanto è possibile modificare non solo la priorità della CPU del processo ma anche la sua priorità I / O (ergo domanda) e puoi scegliere di SALVARE le nuove impostazioni se lo desideri. Quest'ultimo fa sì che ogni volta che viene eseguito quel processo (cioè quel programma), entreranno in vigore sia le priorità del processo CPU che I / O impostate e salvate dall'utente.

L'app ha altre funzionalità che estendono anche la funzionalità delle varie schede nel Task Manager di Windows. Esistono versioni per sistemi a 32 e 64 bit e l'app è gratuita per uso personale.


Sembra un'ottima app. Hai un link?
Stijn de Witt,

1
Se intendi PRIO, è disponibile da un numero di aggregatori di contenuti diversi (come cnet), ma direttamente dal sito Web dello sviluppatore sarebbe prnwatch.com/prio
Mike Mounier,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.