Compteur de priorité de base de décodage de l'Analyseur de performances [Windows 10]

0

Je peux donc attacher un compteur de priorité de base à un processus tel que Google Chrome. Cela montre sa priorité comme "8". Si je regarde dans le gestionnaire de tâches google chrome ont "priorité normale".

Ma question est la suivante: existe-t-il un tableau montrant qu'un 8 sur 8 est la même que la priorité normale?

EDIT: Je viens de remarquer que la marche au ralenti a la priorité 0. Mais selon cette

https://docs.microsoft.com/en-us/windows/desktop/procthread/scheduling-priorities

"Seul le fil de page zéro peut avoir une priorité de zéro."

Je suis tellement dérouté par ceci: & lt;

mrmagin
la source

Réponses:

0

Ce tableau était assez facile à trouver sur microsoft.com et d’innombrables autres endroits.

enter image description here

La colonne "Priorité de base" du Gestionnaire des tâches affiche la classe de processus (appelée "classe de priorité de processus" dans certains documents). Notez que le Gestionnaire des tâches (au moins dans Windows 10) attribue à la classe de priorité "Inactif" la valeur "Faible" (probablement pour éviter toute confusion avec le processus d'inactivité, etc.).

La classe de processus sert uniquement à initialiser la priorité des threads créés dans le processus. Chaque thread est créé avec la priorité de thread "normale". Si le processus appartient à la classe de processus "normale", cela signifie que le thread a une priorité de base de 8.

(Bizarrement, l'API CreateProcess utilise un argument pour la classe de processus, mais pas CreateThread. Pour créer un thread avec une priorité de thread autre que la priorité "normale", vous devez créer le thread, puis modifier sa priorité ultérieurement avec SetThreadPriority.)

Les programmes peuvent modifier les priorités de leurs propres threads dans leur classe de processus. Dans un processus "normal", définir un thread sur THREAD_PRIORITY_HIGHEST définit la priorité de base de ce thread sur 10. Si vous modifiez la classe de priorité d'un processus (par exemple avec le gestionnaire de tâches), la priorité de base de chaque thread change en fonction du tableau.

Il y a beaucoup d’anomalies de noms dans ce tableau. "Le plus élevé" n'est pas la priorité la plus élevée du thread, "le plus bas" n'est pas le plus bas, "inactif" ne signifie pas que vous ne faites rien ou ne le ferez pas, et "temps réel" ne garantit pas un comportement de planification adapté au travail en temps réel ( c'est simplement plus prévisible que les classes non temps réel, en partie parce qu'il est au-dessus de toutes, et en partie parce que l'ajustement automatique des priorités est désactivé dans la classe "temps réel").

Pour les processus, il est supposé utiliser les classes de processus pour indiquer l’importance - ou non - de gagner du temps CPU pour chaque processus, par rapport à un processus "normal". Et au sein de chaque processus, le développeur est supposé définir les priorités du thread de la même manière, par rapport à un thread "normal" du processus. En pratique, très peu de développeurs s'embêtent. (Et ils devraient le faire. Par exemple, une tâche liée au calcul, telle que le rendu vidéo, doit être définie sur une priorité inférieure à la normale, afin d'éviter toute interférence avec l'utilisation interactive du système.)

Et la classe de processus "inactive" et la priorité de thread "inactive" au sein d'un processus ne signifient pas que rien ne sera fait par ce processus ou par ce thread. Cela signifie simplement que le thread ou le processus est prêt à vivre avec des cycles de processeur que personne d'autre ne veut.

Vous remarquerez qu'il n'y a pas de "0" sur la table. Les applications ordinaires ne peuvent pas demander à exécuter à la priorité 0 via les API normales. Seuls les threads en mode noyau peuvent être exécutés avec une priorité zéro. Comme vous l'avez constaté, il est réservé au fil de page zéro - ou aux fils de discussion; il peut y en avoir plusieurs sur une machine NUMA.

En ce qui concerne le processus inactif - il et ses threads sont des cas particuliers. Chaque objet de thread a un membre "priority" et est défini sur 0 pour les threads inactifs. Toutefois, les membres de priorité des threads inactifs ne sont jamais réellement utilisés, et il n'y a pas de file d'attente prête pour les threads inactifs. Au lieu de cela, si le planificateur de système d'exploitation ne peut trouver aucun autre thread à exécuter sur un processeur disponible, il sélectionne simplement le thread inactif pour ce processeur. (Chaque unité centrale a son propre thread inactif dédié.) Ainsi, bien qu'il semble avoir la priorité 0, il est planifié comme s'il avait la priorité négative 1. Même un thread de priorité 0 prévaut sur le thread inactif.

Le terme "inactif" a au moins une autre signification commune dans Windows. Un processus peut "s'inscrire pour la détection d'inactivité". Dans ce cas, "inactif" signifie qu’il n’ya eu aucune saisie de l’utilisateur (clavier ou souris) et pas plus de 10% d’utilisation d’un processeur ou d’un disque au cours des quinze dernières minutes. Windows peut lancer diverses tâches de "maintenance" ou de "nettoyage", telles que l'optimisation de l'emplacement des fichiers, lorsque ce type "d'inactivité" est détecté. Le code qui s'exécute en réponse à ceux-ci ne s'exécute pas nécessairement dans la classe de processus inactive ou à la priorité du thread inactif. Vous avez peut-être vu une petite méthode de ligne de commande pour demander l'exécution de "tâches inactives":

C:\> Rundll32.exe advapi32.dll,ProcessIdleTasks

et c'est ce que cela fait référence. Cela n'a rien à voir avec le processus inactif ni avec le processus dit "inactif" ou la priorité du thread.

J'ai écrit une réponse avec plus de détails sur la manière dont le planificateur utilise les priorités de thread pour effectuer ses sélections. ici .

Référence: https://docs.google.com/viewer?url=https%3A%2F%2Fdownload.microsoft.com%2Fdownload%2F1%2F4%2F0%2F1ownloads2fdownload.microsoft.com/fr Ceci est un ensemble d'extraits de Windows Internals 6ème éd. par Salomon, Russinovich, et al . Le matériel souhaité commence à la page 62 du document PDF, numéro de page 408 du livre.

Jamie Hanrahan
la source
Désolé pour une réponse tardive ici, mais est-il prudent de dire que l'inactivité est un type de fil zéro page? J'ai du mal à trouver cette information sur une page officielle de Microsoft.
mrmagin
Non, les fils de page zéro sont appelés ainsi car ils ont une tâche spécifique. ils écrasent les pages libres de RAM avec des zéros et les déplacent de la liste libre vers la liste zéro. Les threads inactifs ne font pas ça. Avant que Windows ne se lance dans la gestion de l’alimentation, il ne faisait littéralement rien; Aujourd'hui, ils ne sont pas complètement inactifs; la plupart du temps, ils font un peu du travail associé à la gestion de l'alimentation du processeur. Et comme je le disais, ils sont sélectionnés pour exécution comme s'ils étaient prioritaires au dessous de zéro, c’est-à-dire un négatif, même si leurs membres prioritaires sont définis sur zéro.
Jamie Hanrahan
En ce qui concerne "les pages microsoft officielles", j'ai ajouté une référence à ma réponse.
Jamie Hanrahan
0

L'article est une bonne et très détaillée source d'information
Windows OS Hub: Gestion des priorités de processus sous Windows .

Voici quelques extraits:

Il existe 32 niveaux de priorité dans Windows, de 0 à 31.

Ils sont regroupés comme suit:

  • 31 - 16 sont des niveaux en temps réel
  • 15 - 1 sont des niveaux dynamiques
  • 0 est un niveau système réservé au fil zéro page

Lorsqu'un processus est créé, il se voit attribuer l'une des six priorités.   Des classes:

  • Classe en temps réel (valeur 24),
  • Haute classe (valeur 13),
  • Au-dessus de la classe normale (valeur 10),
  • Classe normale (valeur 8),
  • En dessous de la classe normale (valeur 6),
  • ou classe inactive (valeur 4).

La priorité 8 que vous avez observé est la priorité "normale". La priorité 0 est la priorité la plus basse possible, de sorte que le processus ne sera jamais être exécuté tant qu'il existe un processus ou un thread de priorité supérieure.

Si vous souhaitez entrer dans les détails internes du fonctionnement de Windows, voir l'article de Mark E. Russinovich et David A. Solomon:
Processus, threads et travaux dans le système d'exploitation Windows .

harrymc
la source