Warum tust du das? Könnten Sie bei einem Multithread-Prozess, bei dem Ihnen die Affinität am tasksetHerzen liegt, cgroups nicht ausführen oder nutzen, damit alle Kinder die Affinitäten respektieren?
ewwhite
@ewwhite Ich mache das, um die Affinität zu überprüfen, nachdem ich sie eingestellt habe. Ich frage nicht, wie oder warum die Affinität eingestellt werden soll.
JamesThomasMoon1979
OI C ... Eigentlich nicht wirklich. Sie haben nicht erklärt, warum Sie nach diesen Informationen suchen.
ewwhite
@ewwhite Das Warum ist zu überprüfen, ob für die Threads eines Programms die erwartete Affinität festgelegt wurde. Dies sind meist unabhängige Verarbeitungsthreads auf einem Multicore-Computer.
JamesThomasMoon1979
Antworten:
11
Es ist ziemlich einfach. Sammeln Sie alle Prozess-IDs und Thread-IDs und rufen Sie das Programm auf taskset. Mögen,
taskset -cp 2
taskset -cp 4
…
Alle nach Prozessnamen drucken
tasksethat das --all-tasksoptionale Argument
taskset --all-tasks -p $(pgrep java)
Bei einigen Prozessen werden --all-tasksanscheinend nicht alle untergeordneten Prozesse gedruckt (in meinen Tests wurden keine untergeordneten Prozesse gedruckt kthreadd, ich bin mir nicht sicher, warum das so ist).
Drucken Sie alles nach Hilfeskript für den Prozessnamen
Hier ist ein kurzes Linux-Shell-Skript zum Drucken der CPU-Affinität für einen Prozess nach Namen und allen untergeordneten Threads.
#!/usr/bin/env bashset-eu
pname=${1:-kthreadd}# default to 'kthreadd'for pid in $(pgrep "${pname}");do
echo "PID: ${pid} (${pname})"for tid in $(pgrep -P "${pid}"| tr '\n'' ');do
taskset -cp "${tid}"donedone
Ausgänge
PID: 2 (kthreadd)
pid 4's current affinity list: 0
pid 6's current affinity list: 0
pid 7's current affinity list: 0
pid 8's current affinity list: 0
…
taskset
Herzen liegt, cgroups nicht ausführen oder nutzen, damit alle Kinder die Affinitäten respektieren?Antworten:
Es ist ziemlich einfach. Sammeln Sie alle Prozess-IDs und Thread-IDs und rufen Sie das Programm auf
taskset
. Mögen,Alle nach Prozessnamen drucken
taskset
hat das--all-tasks
optionale ArgumentBei einigen Prozessen werden
--all-tasks
anscheinend nicht alle untergeordneten Prozesse gedruckt (in meinen Tests wurden keine untergeordneten Prozesse gedrucktkthreadd
, ich bin mir nicht sicher, warum das so ist).Drucken Sie alles nach Hilfeskript für den Prozessnamen
Hier ist ein kurzes Linux-Shell-Skript zum Drucken der CPU-Affinität für einen Prozess nach Namen und allen untergeordneten Threads.
Ausgänge
Getestet auf Ubuntu 12, Bash 4.
quelle