Contar o número de CPUs permitidas em um contêiner Docker

14

Meu cenário específico é o seguinte. Eu inicio um contêiner de docker com um cpuset específico:

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

dentro desse contêiner, eu executo um script de shell como ponto de entrada e esse script de shell será executado makeem algum momento. Gostaria de descobrir qual seria um bom número de empregos ( -j). É claro que eu poderia passar o número de CPUs alocadas pelo ambiente, mas uma maneira automática de detectá-lo seria muito preferida.

Sei que posso usar taskset -c -p $$ou cat /proc/self/status | grep Cpus_allowed_listrecuperar o Cpus_allowedprocesso atual, mas não sei como recuperar o número real de CPUs permitidas. Gostaria de evitar analisar a saída desses comandos ou mexer com a Cpus_allowedmáscara, mas farei isso quando estiver fora das opções.

pmr
fonte
1
nproc- imprima o número de unidades de processamento disponíveis
Brian
@ Brian Isso foi muito fácil.
Pmr

Respostas:

19

Você pode usar a nprocferramenta de script de shell.

Portanto, seria -j$(nproc)na linha de comando make em questão.

Brian
fonte
1
"docker run --rm --cpus 2 debian nproc" -> 8?
Evan Benn
2
@EvanBenn --cpus="2"não limita o número de unidades de processamento e é equivalente a -cpu-period="100000" and --cpu-quota="200000".
Brian