Cuente el número de CPU permitidas en un contenedor Docker

14

Mi escenario específico es el siguiente. Lanzo un contenedor acoplable con un cpuset específico:

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

dentro de ese contenedor ejecuto un script de shell como punto de entrada y ese script de shell se ejecutará makeen algún momento. Me gustaría saber cuál sería un buen número de trabajos ( -j). Por supuesto, podría pasar el número de CPU asignadas a través del entorno, pero sería preferible una forma automática de detectarlo.

Sé que puedo usar taskset -c -p $$o cat /proc/self/status | grep Cpus_allowed_listrecuperar el Cpus_allowedproceso actual, pero no sé cómo recuperar el número real de CPU permitidas. Me gustaría evitar analizar la salida de esos comandos o jugar con la Cpus_allowedmáscara, pero lo haré cuando no tenga opciones.

pmr
fuente
1
nproc- imprima el número de unidades de procesamiento disponibles
Brian
@Brian Eso fue demasiado fácil.
pmr

Respuestas:

19

Puedes usar el nproc herramienta de script de shell.

Por lo tanto, estaría -j$(nproc)en la línea de comando make en cuestión.

Brian
fuente
1
"docker run --rm --cpus 2 debian nproc" -> 8?
Evan Benn
2
@EvanBenn the --cpus="2"no limita el número de unidades de procesamiento y es equivalente a -cpu-period="100000" and --cpu-quota="200000".
Brian