TL; DR : De brèves recherches, il semble qu'il soit possible de restreindre les commandes à un nombre spécifique de cœurs, mais dans tous les cas, vous devez utiliser une commande qui applique réellement la restriction.
groupes de contrôle
Linux a cgroups
qui est fréquemment utilisé exactement dans le but de restreindre les ressources disponibles pour les processus. À partir d'une très brève recherche, vous pouvez trouver un exemple dans Arch Wiki avec la configuration Matlab (un logiciel scientifique) définie dans /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;
}
}
Pour qu'une telle configuration prenne effet, vous devez exécuter le processus via une cgexec
commande, par exemple à partir de la même page wiki:
$ cgexec -g memory,cpuset:matlab /opt/MATLAB/2012b/bin/matlab -desktop
ensemble de tâches
Une question connexe sur Ask Ubuntu et comment limiter un processus à un cœur de processeur sous Linux? [duplicate] sur le site Unix et Linux montre un exemple d'utilisation taskset
pour limiter les processeurs pour le processus. Dans la première question, il est réalisé en analysant tous les processus pour un utilisateur particulier
$ ps aux | awk '/^housezet/{print $2}' | xargs -l taskset -p 0x00000001
Dans l'autre question, un processus est lancé via taskset
lui-même:
$ taskset -c 0 mycommand --option # start a command with the given affinity
Conclusion
Bien qu'il soit certainement possible de limiter les processus, il semble que ce ne soit pas si simple de le faire pour des utilisateurs particuliers. L'exemple dans le post Ask Ubuntu lié nécessiterait une analyse cohérente des processus appartenant à chaque utilisateur et utilisant taskset
chaque nouveau. Une approche beaucoup plus raisonnable consisterait à exécuter de manière sélective des applications gourmandes en ressources CPU, via cgexec
ou taskset
; il est également inutile de restreindre tous les processus à un nombre spécifique de CPUS, en particulier pour ceux qui utilisent réellement le parallélisme et la concurrence pour exécuter leurs tâches plus rapidement - les limiter à un nombre spécifique de CPU peut avoir pour effet de ralentir le traitement. De plus, comme la réponse de Terdon l'a mentionné, c'est un gaspillage de ressources
L'exécution de certaines applications via taskset
ou cgexec
nécessite de communiquer avec vos utilisateurs pour leur faire savoir quelles applications ils peuvent exécuter, ou la création de scripts d'encapsulation qui lanceront certaines applications via tasksel
ou cgexec
.
En outre, envisagez de définir le nombre de processus qu'un utilisateur ou un groupe peut générer au lieu de définir une limite sur le nombre de processeurs. Cela peut être réalisé via un /etc/security/limits.conf
fichier .
Voir également