Compter le nombre de CPU autorisés dans un conteneur Docker

14

Mon scénario spécifique est le suivant. Je lance un docker avec un cpuset spécifique:

docker run --cpuset-cpus="0-2" # ...

à l'intérieur de ce conteneur, je lance un script shell comme point d'entrée et ce script shell s'exécutera makeà un moment donné. Je voudrais savoir quel serait un bon nombre d'emplois ( -j). Je pourrais bien sûr transmettre le nombre de CPU alloués dans l'environnement, mais un moyen automatique de le détecter serait de loin préférable.

Je sais que je peux utiliser taskset -c -p $$ou cat /proc/self/status | grep Cpus_allowed_listpour récupérer le Cpus_allowedpour le processus en cours, mais je ne sais pas comment récupérer le nombre réel de CPU autorisés. Je voudrais éviter d'analyser la sortie de ces commandes ou de jouer avec le Cpus_allowedmasque, mais je le ferai quand je n'aurai plus d'options.

pmr
la source
1
nproc- imprimer le nombre d'unités de traitement disponibles
Brian
@Brian C'était trop facile.
pmr

Réponses:

19

Vous pouvez utiliser l' nprocoutil de script shell.

Ce serait donc -j$(nproc)dans la ligne de commande make en question.

Brian
la source
1
"docker run --rm --cpus 2 debian nproc" -> 8?
Evan Benn
2
@EvanBenn --cpus="2"ne limite pas le nombre d'unités de traitement et est équivalent à -cpu-period="100000" and --cpu-quota="200000".
Brian