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.


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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.