Sous Linux, exécutez le sched_setaffinity
appel système. L'affinité d'un processus est l'ensemble des processeurs sur lesquels il peut s'exécuter. Il existe un wrapper shell standard :taskset
. Par exemple, pour épingler un processus au CPU #0 (vous devez choisir un CPU spécifique) :
taskset -c 0 mycommand --option # start a command with the given affinity
taskset -c -pa 0 1234 # set the affinity of a running process
Il existe des modules tiers pour Perl (Sys::CpuAffinity
) et Python (affinity
) pour définir l'affinité d'un processus. Les deux fonctionnent à la fois sur Linux et Windows (Windows peut nécessiter d'autres modules tiers avec Sys::CpuAffinity
); Sys::CpuAffinity
fonctionne également sur plusieurs autres variantes d'Unix.
Si vous souhaitez définir l'affinité d'un processus à partir de sa naissance, définissez l'affinité du processus en cours juste avant d'appeler execve
. Voici un wrapper trivial qui force un processus à s'exécuter sur le CPU 0.
#!/usr/bin/env perl
use POSIX;
use Sys::CPUAffinity;
Sys::CpuAffinity::setAffinity(getpid(), [0]);
exec $ARGV[0] @ARGV
Vous pouvez également créer des ensembles de processeurs sur la ligne de commande. man cpuset
Plus tard, vous pourrez leur attribuer des processus (en cours d'exécution).