Wie kann ich die Prozessoraffinität eines Prozesses unter Linux einstellen?

Wie kann ich die Prozessoraffinität eines Prozesses unter Linux einstellen?

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 numactlBefehl 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.

SFVerknüpfung

Antwort4

taskset -c 1-3 ./a.out arg1 arg2

startet den a.outProzess 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

verwandte Informationen