TL; DR : da una breve ricerca sembra che sia possibile limitare i comandi a un numero specifico di core, tuttavia in tutti i casi è necessario utilizzare un comando che imponga effettivamente la restrizione.
cgroups
Linux ha cgroups
spesso utilizzato esattamente allo scopo di limitare le risorse disponibili per i processi. Da una breve ricerca, puoi trovare un esempio nella configurazione di Arch Wiki con Matlab (un software scientifico) in /etc/cgconfig.conf
:
group matlab {
perm {
admin {
uid = username;
}
task {
uid = username;
}
}
cpuset {
cpuset.mems="0";
cpuset.cpus="0-5";
}
memory {
memory.limit_in_bytes = 5000000000;
}
}
Affinché tale configurazione abbia effetto, è necessario eseguire il processo tramite cgexec
comando, ad esempio dalla stessa pagina wiki:
$ cgexec -g memory,cpuset:matlab /opt/MATLAB/2012b/bin/matlab -desktop
taskset
Una domanda correlata su Ask Ubuntu e come limitare un processo a un core della CPU in Linux? [duplicato] sul sito Unix e Linux mostra un esempio dell'uso taskset
per limitare le CPU per il processo. Nella prima domanda, si ottiene analizzando tutti i processi per un determinato utente
$ ps aux | awk '/^housezet/{print $2}' | xargs -l taskset -p 0x00000001
Nell'altra domanda, un processo viene avviato da taskset
solo:
$ taskset -c 0 mycommand --option # start a command with the given affinity
Conclusione
Sebbene sia certamente possibile limitare i processi, sembra che non sia così semplice raggiungerlo per determinati utenti. L'esempio nel post Ask Ubuntu collegato richiederebbe una scansione coerente per i processi appartenenti a ciascun utente e che ne utilizzino taskset
uno nuovo. Un approccio molto più ragionevole sarebbe quello di eseguire selettivamente applicazioni ad uso intensivo di CPU, tramite cgexec
o taskset
; inoltre non ha senso limitare tutti i processi a un numero specifico di CPUS, specialmente per quelli che utilizzano effettivamente il parallelismo e la concorrenza per eseguire i propri compiti più velocemente; limitarli a un numero specifico di CPU può avere l'effetto di rallentare l'elaborazione. Inoltre, come indicato dalla risposta di Terdon, si tratta di uno spreco di risorse
L'esecuzione di applicazioni selezionate tramite taskset
o cgexec
richiede la comunicazione con gli utenti per far loro sapere quali applicazioni possono eseguire o la creazione di script wrapper che avvieranno applicazioni selezionate tramite tasksel
o cgexec
.
Inoltre, considera l'impostazione del numero di processi che un utente o un gruppo può generare anziché impostare il limite sul numero di CPU. Ciò può essere ottenuto tramite /etc/security/limits.conf
file .
Guarda anche