Wie kann ich die Prozessoraffinität eines Prozesses unter Linux einstellen?
29
Ich habe Task-Set dafür verwendet. Wenn Sie ein Task-Set installiert haben, etwa:
taskset -c 1,3 -p 45678
würde den Prozess mit der ID 45678 so einstellen, dass er eine Affinität zu CPU 1 und 3 hat.
taskset -p -c 1,3 45678
statttaskset -c 1,3 -p 45678
; dh, dass das-c 1,3
eine Maskenspezifikation ist und als solche zwischen das-p
und das gesetzt werden musspid
.Innerhalb des Prozesses wäre der Aufruf
sched_setaffinity()
, oder für pthreads Zeug,pthread_setaffinity_np()
Wenn Sie sich Sorgen über die CPU-Affinität Ihres Programms machen, kann es sich lohnen, auch auf die Speicherzuweisung zu achten. Größere Systeme mit Speicher, der an mehr als einen Controller angeschlossen ist (dh mehrere CPU-Sockel, jeder mit einem eigenen), weisen eine variable Latenz und Bandbreite zwischen verschiedenen CPU-Speicherpaaren auf. Sie möchten auch die NUMA-Affinität untersuchen, indem Sie den
numactl
Befehl oder die Systemaufrufe verwenden, mit denen er funktioniert. Bei einem Programm, an dem ich gearbeitet habe, wurde die Leistung um 10% verbessert.quelle
Sie müssen installieren
schedutils
(Linux Scheduler-Dienstprogramme). Ich habe es auf meinem Ubuntu Desktop verwendet.SF Link
quelle
Startet den
a.out
Prozess mit den angegebenen Argumenten und der angegebenen Affinität für die Prozessoren 1, 2 oder 3 (nullbasiert).Hier ist ein minimales C-Testprogramm, mit dem Sie es in Aktion sehen können: https://stackoverflow.com/questions/10490756/how-to-use-sched-getaffinity-and-sched-setaffinity-in-linux-from -c / 50117787 # 50117787
quelle