(4 Antworten)
Vor 3 Jahren geschlossen.
Wie beschränke ich den Prozess auf einen CPU-Kern?
Etwas Ähnliches wie ulimit
oder cpulimit
wäre nett. (Nur um sicherzustellen:Ich möchte die prozentuale Nutzung oder die Ausführungszeit NICHT einschränken. Ich möchte die App (mit all ihren untergeordneten Prozessen (Threads)) zwingen, einen CPU-Kern (oder 'n' CPU-Kerne) zu verwenden). /P>
Akzeptierte Antwort:
Führen Sie unter Linux die 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 Nr. 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