Wie überprüfe ich unter Linux die CPU-Affinität eines Prozesses und seiner Threads?
Wie überprüfe ich unter Linux die CPU-Affinität eines Prozesses und seiner Threads?
Antworten:
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
…
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).
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 bash
set -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}"
done
done
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
…
Getestet auf Ubuntu 12, Bash 4.
tasksetHerzen liegt, cgroups nicht ausführen oder nutzen, damit alle Kinder die Affinitäten respektieren?