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 xargs
assim:
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.
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.sh
ele mostra 11 a 12 processos em vez de 8.
Responder1
Você pode usartaskset
para definir a afinidade da CPU de um processo. O seguinte garantirá que seu xargs
comando 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.