No Linux, execute a sched_setaffinity
chamada do sistema. A afinidade de um processo é o conjunto de processadores nos quais ele pode ser executado. Há um wrapper de shell padrão: taskset
. Por exemplo, para fixar um processo à CPU nº 0 (você precisa escolher uma CPU específica):
taskset -c 0 mycommand --option # start a command with the given affinity
taskset -c -p 0 1234 # set the affinity of a running process
Existem módulos de terceiros para o Perl ( Sys::CpuAffinity
) e o Python ( affinity
) para definir a afinidade de um processo. Ambos funcionam no Linux e no Windows (o Windows pode exigir outros módulos de terceiros com Sys::CpuAffinity
); Sys::CpuAffinity
também funciona em várias outras variantes unix.
Se você quiser definir a afinidade de um processo a partir do momento de seu nascimento, defina a afinidade do processo atual imediatamente antes de chamar execve
. Aqui está um wrapper trivial que força um processo a ser executado na CPU 0.
#!/usr/bin/env perl
use POSIX;
use Sys::CPUAffinity;
Sys::CpuAffinity::setAffinity(getpid(), [0]);
exec $ARGV[0] @ARGV