(4 risposte)
Chiuso 3 anni fa.
Come limitare il processo a un core della CPU?
Qualcosa di simile a ulimit
o cpulimit
sarebbe bello. (Solo per garantire:NON voglio limitare l'utilizzo percentuale o il tempo di esecuzione. Voglio forzare l'app (con tutti i suoi figli, processi (thread)) a utilizzare un core della CPU (o 'n' core della CPU)).
Risposta accettata:
Sotto Linux, esegui sched_setaffinity
chiamata di sistema. L'affinità di un processo è l'insieme di processori su cui può essere eseguito. C'è un wrapper di shell standard:taskset
. Ad esempio, per aggiungere un processo alla CPU #0 (è necessario scegliere una CPU specifica):
taskset -c 0 mycommand --option # start a command with the given affinity
taskset -c -pa 0 1234 # set the affinity of a running process
Esistono moduli di terze parti per entrambi Perl (Sys::CpuAffinity
) e Python (affinity
) per impostare l'affinità di un processo. Entrambi funzionano sia su Linux che su Windows (Windows potrebbe richiedere altri moduli di terze parti con Sys::CpuAffinity
); Sys::CpuAffinity
funziona anche su molte altre varianti Unix.
Se desideri impostare l'affinità di un processo dal momento della sua nascita, imposta l'affinità del processo corrente immediatamente prima di chiamare execve
. Ecco un banale wrapper che forza l'esecuzione di un processo su CPU 0.
#!/usr/bin/env perl
use POSIX;
use Sys::CPUAffinity;
Sys::CpuAffinity::setAffinity(getpid(), [0]);
exec $ARGV[0] @ARGV