
Wie kann ich die Prozessoraffinität eines Prozesses unter Linux einstellen?
Antwort1
Ich habe hierfür Taskset verwendet. Wenn Sie Taskset installiert haben, wird etwas wie Folgendes angezeigt:
taskset -cp 0,2 45678
würde den Prozess mit der ID 45678 so einstellen, dass er eine Affinität zu den CPUs 1 und 3 hat.
Antwort2
Innerhalb des Prozesses wäre der Aufruf sched_setaffinity()
oder für pThreads-Sachen:pthread_setaffinity_np()
In einem verwandten Hinweis: Wenn Sie sich über die CPU-Affinität Ihres Programms Gedanken machen, lohnt es sich möglicherweise, auch darauf zu achten, wie es die Speicherzuweisung durchführt. Größere Systeme mit Speicher, der an mehr als einen Controller angeschlossen ist (d. h. mehrere CPU-Sockel, jeder mit seinem eigenen), weisen eine variable Latenz und Bandbreite zwischen verschiedenen CPU-Speicher-Paaren auf. Sie sollten sich auch die NUMA-Affinität ansehen, indem Sie den numactl
Befehl oder die Systemaufrufe verwenden, mit denen sie funktioniert. Bei einem Programm, an dem ich gearbeitet habe, wurde dadurch die Leistung um 10 % verbessert.
Antwort3
Sie müssen schedutils
(Linux-Scheduler-Dienstprogramme) installieren. Ich habe es auf meinem Ubuntu-Desktop verwendet.
Antwort4
taskset -c 1-3 ./a.out arg1 arg2
startet den a.out
Prozess mit den angegebenen Argumenten und einer auf die Prozessoren 1, 2 oder 3 eingestellten Affinität (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