(4 odpovědi)
Uzavřeno před 3 lety.
Jak omezit proces na jedno jádro procesoru?
Něco podobného jako ulimit
nebo cpulimit
by bylo hezké. (Jen pro zajištění:NECHCI omezovat procentuální využití ani dobu provádění. Chci aplikaci (se všemi jejími potomky, procesy (vlákny)) přinutit, aby používala jedno jádro CPU (nebo 'n' jader CPU)).
Přijatá odpověď:
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
Pro oba Perl existují moduly třetích stran (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 zrodu, 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