Comment changer la priorité d'E / S d'un processus ou d'un thread dans Win7?

32

Process Explorer est capable d'afficher la priorité d'E / S effective d'un thread donné, mais pas de la modifier. Étant donné que la prise en charge des priorités d'E / S est une fonctionnalité relativement nouvelle, la plupart des programmes ne définissent pas leurs propres priorités d'E / S. Il semble que par défaut, la priorité IO est dérivée de la priorité du thread (plutôt que de la priorité du processus), que Process Explorer ne peut pas modifier non plus.

Existe-t-il d'autres outils qui peuvent m'aider à modifier la priorité d'E / S d'un thread donné / tous les threads d'un processus donné?

RomanSt
la source
Il y a presque la même question sur Stack Overflow: stackoverflow.com/questions/301290/…
Mehper C. Palavuzlar
3
@ [Mehper C. Palavuzlar] vrai, mais ce n'est pas pour les logiciels que je développe - je recherche un outil prêt à l'emploi pour le faire sur des logiciels tiers.
RomanSt

Réponses:

11

Outil prêt à l'emploi

Un outil tiers pour traiter ensemble les priorités d' E / S, soit par action manuelle de l' utilisateur ou de l' automatisation et de la persistance, serait Lasso de processus . Il peut définir presque n'importe quel paramètre de processus, et le faire de manière persistante, ou par des règles (par exemple, lorsque cela se produit, modifiez la priorité d'E / S de cela).

Réponse programmatique

La réponse est un simple appel d'API à une API native NT, NTSetInformationProcess . Elle est définie comme la classe «IoPriority» dans le DDK 2008. Dans NT6, seuls deux niveaux sont pris en charge: très faible (arrière-plan) et normal . Techniquement, 5 niveaux sont définis: critique, élevé, normal, bas et très bas. Le niveau Critique est réservé aux opérations de pagination. Aucune donnée sur les autres.

Cependant, la bonne façon d'utiliser la priorité d'E / S consiste uniquement à démarrer un «mode d'arrière-plan» via un appel à l'API Windows SetProcessPriorityClass , en fournissant PROCESSS_MODE_BACKGROUND_BEGIN. Cela lui fera utiliser la priorité d'E / S très faible (en arrière-plan), ainsi qu'une classe de priorité CPU IDLE. Une fois terminé, revenez via PROCESS_MODE_BACKGROUND_END.

L' API SetThreadPriority autorisera également ce même mode d'arrière-plan pour des threads spécifiques. Ici, vous fournirez THREAD_MODE_BACKGROUND_BEGIN / END.

dyasta
la source
Je ne suis pas dans la programmation Windows et les choses au niveau du système d'exploitation, mais j'ai entendu parler de la suppression de la priorité d'un thread, jusqu'à THREAD_PRIORITY_TIME_CRITICAL est-ce possible avec votre programme ou tout autre programme? ou est-ce seulement la PRIORITÉ IO qui peut être ajustée, et non la priorité du processeur de thread? Je suppose que changer la priorité IO ne fera pas beaucoup de différence pour l'utilisation du processeur, non?
barlop
Oui. Les deux peuvent être définis et persistent. De nombreuses autres choses peuvent également être définies ou modifiées dynamiquement en fonction de règles (par exemple l'affinité CPU). La priorité des E / S est distincte de la priorité du processeur, à droite.
dyasta
Ce n'est pas "un outil prêt à l'emploi pour le faire sur des logiciels tiers".
Cees Timmerman
Désolé, je pense que la question a peut-être été modifiée, car je répondais clairement d'un côté programmatique (non modifié). Process Lasso est un «outil prêt à l'emploi pour le faire sur des logiciels tiers». Voir bitsum.com
dyasta
23

J'ai développé cela après avoir vu que personne ne s'en souciait: https://sourceforge.net/projects/iopriority/ (open source)

Ce programme est capable de définir la priorité d'E / S d'un processus, et tous les threads en sont affectés immédiatement. Il est assez facile de le modifier pour qu'il fonctionne avec des threads plutôt qu'avec des processus.

Wye
la source
1
Je viens de remarquer que vous ne lui permettez pas de changer un processus en priorité élevée sur le serveur 2012R2.
jftuga
14

ProcessHacker est un outil GUI qui peut changer la priorité d'E / S d'un processus arbitraire.

RomanSt
la source
Pourquoi ça ressemble à quelque chose que Russinovich a fait?
Daniel Mošmondor
1
@ DanielMošmondor Peut-être qu'il a été inspiré par ProcExp et ses limites? Personnellement, j'ai changé car ProcExp a montré une utilisation du processeur complètement incorrecte sur mon ordinateur portable après la version 14.
RomanSt
1
Non seulement cela, ProcExp a également pu BSOD mon comp, etc. Est-ce gratuit?
Daniel Mošmondor
@ DanielMošmondor Oui, de plus, il semble en fait faire plus que ProcExp dans tous les sens. Interface utilisateur légèrement différente mais très efficace.
RomanSt
1

Je suis friand d'une application gratuite appelée PRIO, qui est un économiseur de priorité de processus (entre autres) avec une très petite empreinte (moins de 1 Mo). Après l'installation, il s'exécute silencieusement en arrière-plan jusqu'à ce que vous en ayez besoin, et son interface s'intègre directement dans le Gestionnaire des tâches de Windows, étendant ses fonctionnalités et faisant comme si les fonctionnalités ajoutées faisaient toujours partie du Gestionnaire des tâches. Lorsque vous cliquez avec le bouton droit sur un processus dans le Gestionnaire des tâches avec l'intention de modifier sa priorité, certaines des fonctionnalités ajoutées de PRIO deviennent évidentes, car vous pouvez modifier non seulement la priorité du processeur du processus, mais également sa priorité d'E / S (ergo votre question) , et vous pouvez choisir d'enregistrer les nouveaux paramètres si vous le souhaitez. Ce dernier fait en sorte que chaque fois que ce processus (c'est-à-dire ce programme) est exécuté, les priorités de processus CPU et E / S définies et enregistrées par vous entrent en vigueur.

L'application possède d'autres fonctionnalités qui étendent également les fonctionnalités des différents onglets du Gestionnaire des tâches de Windows. Des versions existent pour les systèmes 32 et 64 bits, et l'application est gratuite pour un usage personnel.

Mike Mounier
la source
Cela ressemble à une excellente application. Vous avez un lien?
Stijn de Witt
1
Si vous voulez dire PRIO, il est disponible à partir d'un certain nombre d'agrégateurs de contenu différents (comme cnet), mais directement depuis le site Web du développeur serait prnwatch.com/prio
Mike Mounier