Führen Sie unter Linux den sched_setaffinity
aus Systemaufruf. Die Affinität eines Prozesses ist die Menge der Prozessoren, auf denen er ausgeführt werden kann. Es gibt einen Standard-Shell-Wrapper:taskset
. Um beispielsweise einen Prozess an CPU #0 anzuheften (Sie müssen eine bestimmte CPU auswählen):
taskset -c 0 mycommand --option # start a command with the given affinity
taskset -c -pa 0 1234 # set the affinity of a running process
Es gibt Module von Drittanbietern für beide Perl (Sys::CpuAffinity
) und Python (affinity
), um die Affinität eines Prozesses festzulegen. Beide funktionieren sowohl unter Linux als auch unter Windows (Windows erfordert möglicherweise andere Module von Drittanbietern mit Sys::CpuAffinity
); Sys::CpuAffinity
funktioniert auch auf einigen anderen Unix-Varianten.
Wenn Sie die Affinität eines Prozesses ab dem Zeitpunkt seiner Geburt festlegen möchten, legen Sie die Affinität des aktuellen Prozesses unmittelbar vor dem Aufruf von execve
fest . Hier ist ein trivialer Wrapper, der die Ausführung eines Prozesses auf CPU 0 erzwingt.
#!/usr/bin/env perl
use POSIX;
use Sys::CPUAffinity;
Sys::CpuAffinity::setAffinity(getpid(), [0]);
exec $ARGV[0] @ARGV
Sie können CPU-Sets auch auf der Befehlszeile erstellen. man cpuset
Später können Sie diesen (laufende) Prozesse zuweisen.