Ermitteln Sie, auf welcher CPU ein Prozess ausgeführt wird

19

Gibt es in Sysinternals Process Explorer eine Spalte, in der angegeben werden kann, auf welcher CPU ein Prozess ausgeführt wird? Wenn keine Spalte, gibt es einen anderen Weg?

rory.ap
quelle
3
@DavidPostill - Die beste Antwort verweist nur auf die Webseite von Process Explorer. Meine Frage lautet: Wie bestimme ich bei gegebenem Prozess-Explorer, auf welchem ​​Kern ein Prozess gestartet wird?
rory.ap

Antworten:

47

Beantragt im Jahr 2005 :

Ich bin sehr beeindruckt von den in Process Explorer integrierten Funktionen, hätte aber gerne die Option, jede Prozess-CPU-Affinität im Hauptfenster als Spaltenumschaltung anzuzeigen.

Keine Antwort.

Beantragt in 2007 :

Vielen Dank für die hervorragenden Hilfsprogramme. Ich möchte dem Explorer eine Spaltenoption hinzufügen, um die CPU-Affinität anzuzeigen. Das ist es.

Keine Antwort.

Ähnliches wurde 2013 diskutiert :

Es wäre wirklich schön, wenn es eine neue Spalte mit der Bezeichnung "Core Usage" für die Prozessleistungsansicht geben würde, die die Summe der Nutzung über dem Kern anzeigt, auf dem der Prozess ausgeführt wird.

Grundlegende Zusammenfassung: Es kann nicht getan werden.

Threads werden zur Verarbeitung an Kerne gesendet, nicht an Prozesse. Die meisten modernen Prozesse haben mehrere Threads.

Wenn Sie die Affinität für einen Prozess manuell festlegen , sollten sich alle Threads für den Prozess auf einen einzelnen Prozessor beschränken. Da Sie es manuell einstellen, sollten Sie wissen, auf welcher CPU es sich befindet. ;)

Wenn Sie dies jedoch nicht angeben, werden die Threads vom Betriebssystem und der zugrunde liegenden Verarbeitungshardware gesteuert und springen mit einer Geschwindigkeit zwischen den Prozessoren, die nicht überwacht werden kann und die zum Zeitpunkt der Anzeige sehr wahrscheinlich ungenau ist Sie.

Vielleicht sehen Sie sich diese SU-Frage an, um mehr zu erfahren:

Auch von StackOverflow:

Wenn Sie das Programm geschrieben haben, können Sie die GetCurrentProcessorNumber verwenden , die den aktuellen Prozessor angibt , der von dem Thread verwendet wird, von dem aus die Funktion aufgerufen wurde.

Auf diese Weise können Sie Schätzungen zur Prozessorauslastung Ihrer Threads vornehmen , da Sie nie sicher sein können, wo sich die Threads in einem Zyklus zum nächsten befinden (es sei denn, Sie legen die Affinität absichtlich fest).

Mehr Info:

ƬᴇcƬᴇιʜ007
quelle
3
Schöne Antwort ... :)
DavidPostill
@ DavidPostill - Einverstanden.
rory.ap
Eine gute Antwort, da sie die spezifische Frage beantwortet, in die Geschichte eingeht und hilft, die Konzepte zu verstehen.
Smithers
1
Sowohl unter Linux als auch unter Windows kann die Affinität pro Thread festgelegt werden. Dies ist jedoch selten nützlich und wird daher selten durchgeführt. Daher wird in einem generischen Überwachungsprogramm eine pro-Thread-Affinität angezeigt, wenn dies mehr oder weniger nutzlos eingestellt ist. Die überwiegende Mehrheit lässt den Kernel-Zeitplan nur so, wie es gefällt.
Bob
Das Betriebssystem könnte sogar Ihren Thread auf einen anderen Prozessor umstellen, unmittelbar nachdem GetCurrentProcessorNumber aufgerufen wurde (aber bevor die Ausführung beginnt) und erneut, unmittelbar nachdem es zurückkehrt, sodass das Ergebnis weder der Prozessor zum Zeitpunkt des Aufrufs noch der Prozessor zum Zeitpunkt des Aufrufs ist Der Anruf kehrt zurück!
gnasher729
8

Dies kann erreicht werden, indem ein Xperf-Trace erfasst und mit Windows Performance Analyzer (WPA.exe) aus dem Windows Performance Toolkit geöffnet wird. Hier können Sie eine Spalten-CPU hinzufügen, um zu sehen, welche CPU (Core) der Prozess ausführt:

Bildbeschreibung hier eingeben

magicandre1981
quelle
Nett. Wird unter jeder CPU derselbe Prozess aufgelistet (wenn mehr als eine verwendet wird)? Bedeutet das, dass es keine Live-Berichterstellung ist, da es einen erfassten Xperf-Trace verwendet?
ƬᴇcƬᴇιᴇ007
@ ƬᴇcƬᴇιᴇ007 ETW-Ereignisse können auch zur Laufzeit verarbeitet werden. Das Schreiben in eine ETL-Datei ist nur eine Möglichkeit. Ja, es werden Prozesse unter beiden CPUs aufgelistet, wenn beide verwendet werden.
magicandre1981