web-dev-qa-db-fra.com

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

Process Explorer peut afficher la priorité effective IO d'un thread donné, mais ne pas la modifier. Considérant que IO priorité est une fonctionnalité relativement nouvelle, la plupart des programmes ne définissent pas leurs propres priorités IO. Il semble que par défaut la priorité IO soit 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 pouvant m'aider à changer la priorité IO d'un thread/de tous les threads d'un processus donné?

31
RomanSt

Outil prêt à l'emploi

Un outil tiers permettant de définir les priorités d'E/S de processus, par action manuelle ou automatisation et persistance, serait Processus Lasso . Il peut définir presque tous les paramètres de processus et le faire de manière persistante ou à l'aide de règles (par exemple, si cela se produit, modifiez sa priorité d'E/S).

Réponse programmatique

La réponse est un simple appel d'API à une API native NT, NTSetInformationProcess . Il est défini comme la classe 'IoPriority' dans le DDK 2008. Sous NT6, seuls deux niveaux sont pris en charge: Très faible (arrière-plan) et Normal . Il existe techniquement 5 niveaux définis - Critique, Elevé, Normal, Bas et Très bas. Le niveau critique est réservé aux opérations de pagination. Pas de données sur les autres.

Cependant, la manière appropriée d'utiliser la priorité d'E/S consiste à démarrer un "mode arrière-plan" via un appel à l'API Windows SetProcessPriorityClass , qui fournit PROCESSS_MODE_BACKGROUND_BEGIN. Cela lui fera utiliser la priorité d'E/S très basse (arrière-plan), ainsi qu'une classe de priorité de processeur 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 fournissez THREAD_MODE_BACKGROUND_BEGIN/END.

9
dyasta

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 que des processus.

23
Wye

ProcessHacker est un outil graphique capable de changer la priorité IO d'un processus arbitraire.

14
RomanSt

Je participe à une application gratuite appelée PRIO, qui est un économiseur de priorité de processus (entre autres choses) avec une très petite empreinte (moins de 1 Mo). Après l'installation, il fonctionne silencieusement en arrière-plan jusqu'à ce que vous en ayez besoin. Son interface est directement intégrée au gestionnaire de tâches Windows, ce qui étend ses fonctionnalités et lui donne l'impression que les fonctionnalités ajoutées faisaient toujours partie du gestionnaire de tâches. Lorsque vous cliquez avec le bouton droit de la souris sur un processus du Gestionnaire des tâches dans le but de modifier sa priorité, certaines des fonctionnalités ajoutées à PRIO deviennent évidentes, car vous pouvez modifier non seulement la priorité du processeur du processus, mais également sa priorité d'E/S (ainsi que 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 de la CPU et d'E/S définies et enregistrées par vous entrent en vigueur.

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

1
Mike Mounier