Sotto Linux, esegui sched_setaffinity
chiamata di sistema. L'affinità di un processo è l'insieme di processori su cui può essere eseguito. C'è uno shell wrapper standard:taskset
. Ad esempio, per bloccare un processo sulla CPU #0 (devi scegliere una CPU specifica):
taskset -c 0 mycommand --option # start a command with the given affinity
taskset -c -pa 0 1234 # set the affinity of a running process
Esistono moduli di terze parti sia per Perl (Sys::CpuAffinity
) e Python (affinity
) per impostare l'affinità di un processo. Entrambi funzionano sia su Linux che su Windows (Windows potrebbe richiedere altri moduli di terze parti con Sys::CpuAffinity
); Sys::CpuAffinity
funziona anche su molte altre varianti unix.
Se vuoi impostare l'affinità di un processo dal momento della sua nascita, imposta l'affinità del processo corrente immediatamente prima di chiamare execve
. Ecco un banale wrapper che forza l'esecuzione di un processo sulla CPU 0.
#!/usr/bin/env perl
use POSIX;
use Sys::CPUAffinity;
Sys::CpuAffinity::setAffinity(getpid(), [0]);
exec $ARGV[0] @ARGV
Puoi anche creare set di cpu sulla riga di comando. man cpuset
Successivamente puoi assegnare a questi processi (in esecuzione).