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 cgroupsspesso 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 cgexeccomando, 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 tasksetper 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 tasksetsolo:
$ 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 tasksetuno nuovo. Un approccio molto più ragionevole sarebbe quello di eseguire selettivamente applicazioni ad uso intensivo di CPU, tramite cgexeco 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 taskseto cgexecrichiede la comunicazione con gli utenti per far loro sapere quali applicazioni possono eseguire o la creazione di script wrapper che avvieranno applicazioni selezionate tramite taskselo 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.conffile .
Guarda anche