V Linuxu spusťte sched_setaffinity
systémové volání. Afinita procesu je sada procesorů, na kterých může běžet. Existuje standardní obal shellu:taskset
. Chcete-li například připnout proces k CPU #0 (musíte vybrat konkrétní CPU):
taskset -c 0 mycommand --option # start a command with the given affinity
taskset -c -pa 0 1234 # set the affinity of a running process
Existují moduly třetích stran pro oba Perl (Sys::CpuAffinity
) a Python (affinity
) pro nastavení afinity procesu. Oba fungují na Linuxu i Windows (Windows může vyžadovat jiné moduly třetích stran s Sys::CpuAffinity
); Sys::CpuAffinity
funguje také na několika dalších unixových variantách.
Pokud chcete nastavit afinitu procesu od okamžiku jeho narození, nastavte afinitu aktuálního procesu bezprostředně před voláním execve
. Zde je triviální obal, který nutí proces ke spuštění na CPU 0.
#!/usr/bin/env perl
use POSIX;
use Sys::CPUAffinity;
Sys::CpuAffinity::setAffinity(getpid(), [0]);
exec $ARGV[0] @ARGV
Sady procesorů můžete sestavit také na příkazovém řádku. man cpuset
Později jim můžete přiřadit (běžící) procesy.