GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann ich sehen, in welchem ​​CPU-Kern ein Thread läuft?

Der Befehl "top" kann dabei helfen, er hat keine CPU-gruppierte Liste von Threads, sondern Sie können die Liste der Threads sehen (wahrscheinlich für einen einzelnen Prozess) und auf welchen CPU-Kernen die Threads laufen

top -H -p {PROC_ID}

dann f drücken um in die Feldauswahl zu gelangen, j um die CPU-Kernspalte zu aktivieren, und Enter anzuzeigen.


Sie können auch ps verwenden , etwa so:

ps -mo pid,tid,%cpu,psr -p `pgrep BINARY-NAME`

Die folgende Antwort ist seit 2014 nicht mehr korrekt

Aufgaben schlafen nicht in einem bestimmten Kern. Und der Planer weiß nicht im Voraus, auf welchem ​​Kern er einen Thread ausführen wird, da dies von der zukünftigen Nutzung dieser Kerne abhängt.

Um die gewünschten Informationen zu erhalten, schauen Sie in /proc//task//status nach. Das dritte Feld ist ein 'R', wenn der Thread läuft. Das sechste vom letzten Feld ist der Kern, auf dem der Thread gerade läuft, oder der Kern, auf dem er zuletzt lief (oder zu dem er migriert wurde), wenn er gerade nicht läuft.

31466 (v. Chr.) S 31348 31466 31348 34819 31466 4202496 2557 0 0 0 5006 16 0 0 20 0 1 0 10196934 121827328 1091 18446744073709551615 4194304 4271839 140737264235072 140737264232056 217976807456 0 0 0 137912326 18446744071581662243 0 0 17 3 0 0 0 0 0

Läuft derzeit nicht. Zuletzt ausgeführt auf Kern 3.

31466 (bc) R 31348 31466 31348 34819 31466 4202496 2557 0 0 0 3818 12 0 0 20 0 1 0 10196934 121827328 1091 184444440737095515 4194304 4271839 0 0 0 0 0

Wird derzeit auf Kern 2 ausgeführt.

Um zu sehen, was die restlichen Felder bedeuten, werfen Sie einen Blick auf die Linux-Kernel-Quelle – insbesondere do_task_stat Funktion in fs/proc/array.c oder Documentation/filesystems/stat.txt .

Beachten Sie, dass alle diese Informationen zum Zeitpunkt, an dem Sie sie erhalten, veraltet sein können. Es war irgendwann wahr, als Sie die open gemacht haben Aufruf der Datei in proc und wenn dieser Aufruf zurückgegeben wird.


Die Threads sind nicht erforderlich, um einen bestimmten Kern zu binden (wenn Sie ihn nicht gepinnt haben). Um das kontinuierliche Umschalten des Kerns zu sehen, können Sie daher (eine modifizierte Antwort von Dmitry) verwenden:

watch -tdn0.5 ps -mo pid,tid,%cpu,psr -p \`pgrep BINARY-NAME\`

Zum Beispiel:

watch -tdn0.5 ps -mo pid,tid,%cpu,psr -p \`pgrep firefox\`

Linux
  1. So überprüfen Sie, welche Version von Postgres ausgeführt/installiert wird

  2. Wie können Sie die Prozessornummer finden, auf der ein Thread läuft?

  3. Kann Python erkennen, unter welchem ​​Betriebssystem es läuft?

  4. Linux - Wie kann ich sehen, was auf Festplatten-E/A wartet

  5. Wie kann ich herausfinden, welches Server-Betriebssystem auf einer bestimmten Site ausgeführt wird?

So überwachen Sie eine CPU-Temperatur auf einem Redhat 7 Linux-System

Wie kann ich die CPU-Frequenzskalierung deaktivieren?

Wie kann ich C++-Code profilieren, der unter Linux ausgeführt wird?

So finden Sie heraus, welcher Prozess eine hohe CPU-Auslastung verursacht

Wie kann ich feststellen, auf welches Benutzerlimit ich stoße?

Wie bekomme ich alle Prozesse auf jedem CPU-Kern in Ubuntu zum Laufen?