Execução paralela com apenas núcleos de CPU limitados

Execução paralela com apenas núcleos de CPU limitados

Eu tenho um servidor de 12 núcleos e quero executar um script que receba um arquivo como argumento de entrada e o processe. Quero usar 8 núcleos e não fazer mais processamento paralelo em 8 arquivos por vez em 8 núcleos e depois pular para o próximo quando o processamento de 1 for concluído.

Eu tentei fazer isso xargsassim:

ls /data/paths/ | grep new | xargs -i -P 8 -n 1 bash main.sh {}

Mas quando vejo o núcleo, a utilização da CPU está anexada ao instantâneo.insira a descrição da imagem aqui

Eu também tentei fazer com paralelo o seguinte:

ls /data/paths/ | grep new | parallel -j 8 --no-notice bash main.sh {}

Minha condição é mantê-lo limitado a 8 CPUs.

EDITAR:

Quando executo, ps -ef | grep main.shele mostra 11 a 12 processos em vez de 8.

Responder1

Você pode usartasksetpara definir a afinidade da CPU de um processo. O seguinte garantirá que seu xargscomando use apenas os primeiros 8 núcleos virtuais da CPU:

ls /data/paths/ | grep new | taskset -c 0-7 xargs -i -P 8 -n 1 bash main.sh {}

Observe que a partirconjunto de tarefas do homem:

Um usuário deve possuir CAP_SYS_NICE para alterar a afinidade de CPU de um processo.

informação relacionada