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

Process Explorer est capable de montrer la priorité d'IO effective d'un thread donné, mais ne le modifie pas. Le fait d'être considéré comme un support prioritaire de l'OI est une fonctionnalité relativement nouvelle, la plupart des programmes ne définissent pas leurs propres priorités d'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é de processus), que Process Explorer ne peut pas modifier non plus.

Y a-t-il d'autres outils là-bas qui peuvent m'aider à modifier la priorité de l'IO d'un thread donné / tous les threads d'un processus donné?

    Outil prêt-à-porter

    Un outil tiers pour définir les priorités d'E / S des processus, soit par l'action manuelle des utilisateurs, soit par l'automatisation et la persistance, serait Process Lasso . Il peut définir presque tous les paramètres 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).

    Réponse programmatique

    La réponse est un appel API simple à une API NT Native, NTSetInformationProcess . Il est défini comme la classe 'IoPriority' dans le DDK 2008. En NT6 seulement deux niveaux pris en charge: très bas (fond) et normal . Il existe techniquement 5 niveaux définis – Critique, Haute, Normale, Faible et Très Faible. 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 est seulement de démarrer un «mode arrière-plan» via un appel à l'API Windows SetProcessPriorityClass , en fournissant PROCESSS_MODE_BACKGROUND_BEGIN. Cela entraînera l'utilisation de la priorité d'E / S très bas (arrière-plan), ainsi qu'une classe de priorité de CPU IDLE. Une fois terminé, revenez via PROCESS_MODE_BACKGROUND_END.

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

    J'ai développé ceci après avoir vu que personne ne l'avait dérangé: https://sourceforge.net/projects/iopriority/ (open source)

    Ce programme permet de définir la priorité d'E / S d'un processus, et tous les threads sont affectés par celui-ci immédiatement. Il est assez facile de le modifier pour fonctionner avec les threads au lieu des processus.

    ProcessHacker est un outil GUI qui peut modifier la priorité IO d'un processus arbitraire.

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

    L'application possède d'autres fonctionnalités qui étendent également la fonctionnalité des différents onglets dans le 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.