En Linux, ejecute sched_setaffinity
llamada del sistema. La afinidad de un proceso es el conjunto de procesadores en los que puede ejecutarse. Hay un contenedor de shell estándar:taskset
. Por ejemplo, para anclar un proceso a la CPU #0 (debe elegir una CPU específica):
taskset -c 0 mycommand --option # start a command with the given affinity
taskset -c -pa 0 1234 # set the affinity of a running process
Hay módulos de terceros para Perl (Sys::CpuAffinity
) y Python (affinity
) para establecer la afinidad de un proceso. Ambos funcionan tanto en Linux como en Windows (Windows puede requerir otros módulos de terceros con Sys::CpuAffinity
); Sys::CpuAffinity
también funciona en varias otras variantes de Unix.
Si desea establecer la afinidad de un proceso desde el momento de su nacimiento, establezca la afinidad del proceso actual inmediatamente antes de llamar a execve
. Aquí hay un contenedor trivial que obliga a un proceso a ejecutarse en la CPU 0.
#!/usr/bin/env perl
use POSIX;
use Sys::CPUAffinity;
Sys::CpuAffinity::setAffinity(getpid(), [0]);
exec $ARGV[0] @ARGV
También puede crear conjuntos de CPU en la línea de comandos. man cpuset
Más adelante puede asignarles procesos (en ejecución).