Déterminer sur quel processeur un processus s'exécute

19

À l'aide de l'Explorateur de processus de Sysinternals, existe-t-il une colonne qui peut être utilisée pour indiquer sur quel processeur un processus s'exécute? S'il n'y a pas de colonne, existe-t-il un autre moyen?

rory.ap
la source
3
@DavidPostill - La meilleure réponse pointe simplement vers la page Web de Process Explorer. Ma question est: étant donné l' explorateur de processus, comment déterminer sur quel cœur un processus est démarré?
rory.ap

Réponses:

47

Demandé en 2005 :

Je suis très impressionné par les fonctionnalités intégrées dans Process Explorer, mais j'aimerais voir une option pour afficher chaque affinité CPU du processus dans la fenêtre principale sous la forme d'une bascule de colonne.

Pas de réponse.

Demandé en 2007 :

Merci pour ces superbes utilitaires. Ma demande consiste à ajouter une option de colonne pour traiter l'explorateur afin d'afficher l'affinité CPU. C'est ça.

Pas de réponse.

Similaire discuté en 2013 :

Ce serait vraiment bien s'il y avait une nouvelle colonne d'affichage des performances du processus appelée Utilisation du cœur qui afficherait une somme de l'utilisation sur le cœur sur lequel le processus s'exécute.

Synopsis de base: Cela ne peut pas être fait.

Les threads sont ce qui est envoyé aux cœurs pour le traitement, pas les processus. La plupart des processus modernes ont plusieurs threads.

Si vous définissez manuellement l' affinité pour un processus, tous les threads du processus doivent rester sur un seul processeur. Puisque vous l'avez défini manuellement, vous devez savoir sur quel processeur il se trouve. ;)

Mais si vous ne le spécifiez pas, le ou les threads seront contrôlés par le système d'exploitation et le matériel de traitement sous-jacent, et passeraient d'un processeur à l'autre à une vitesse qui serait inaccessible et très probablement inexacte au moment où il a été affiché. vous.

Peut-être consultez ces questions SU pour plus:

De plus, à partir de StackOverflow:

Maintenant, si vous avez écrit le programme, vous pouvez utiliser le GetCurrentProcessorNumber , qui signale le processeur actuel utilisé par le thread à partir duquel la fonction a été appelée.

Son utilisation vous permettra de faire des estimations sur l'utilisation du processeur par vos threads, car vous ne pouvez jamais être sûr où les threads seront d'un cycle à l'autre (encore une fois, sauf si vous définissez l'affinité à dessein).

Plus d'informations:

Ƭᴇcʜιᴇ007
la source
3
Bonne
@DavidPostill - D'accord.
rory.ap
Grande réponse, car elle répond à la question spécifique, entre dans l'histoire et pourquoi, et aide à comprendre les concepts.
Smithers
1
Sous Linux et Windows, il est possible de définir l'affinité pour chaque thread. Cependant, cela est rarement utile, donc rarement fait, donc afficher une affinité par thread dans un programme de surveillance générique s'il est défini est plus ou moins inutile - la grande majorité laisserait simplement le noyau planifier à sa guise.
Bob
Le système d'exploitation pourrait même basculer votre thread vers un autre processeur juste après l'appel de GetCurrentProcessorNumber (mais avant qu'il ne commence à s'exécuter) et à nouveau juste après son retour, donc le résultat ne serait ni le processeur au moment de l'appel, ni le processeur au moment l'appel revient!
gnasher729
8

Cela peut être fait en capturant une trace xperf et en l'ouvrant avec Windows Performance Analyzer (WPA.exe) à partir de Windows Performance Toolkit, ici vous pouvez ajouter une colonne CPU pour voir quel CPU (Core) le processus est en cours d'exécution:

entrez la description de l'image ici

magicandre1981
la source
Agréable. Est-ce qu'il répertorie le même processus sous chaque CPU (s'il en utilise plusieurs)? Puisqu'il utilise une trace xperf capturée, cela signifie-t-il que ce n'est pas un rapport en direct?
Ƭᴇcʜιᴇ007
@ Ƭᴇcʜιᴇ007 Les événements ETW peuvent également être consommés lors de l'exécution. Les écrire dans un fichier ETL n'est qu'une façon. Oui, il répertorie les processus sous les deux CPU lorsqu'il utilise les deux.
magicandre1981