Ejecución en paralelo con núcleos de CPU limitados

Ejecución en paralelo con núcleos de CPU limitados

Tengo un servidor de 12 núcleos y quiero ejecutar un script que tome un archivo como argumento de entrada y lo procese. Quiero usar 8 núcleos y no más para realizar un procesamiento paralelo en 8 archivos a la vez en 8 núcleos y luego pasar al siguiente una vez que se complete el procesamiento de 1.

He intentado hacerlo xargsasí:

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

Pero cuando veo el núcleo, la utilización de la CPU se adjunta en la instantánea.ingrese la descripción de la imagen aquí

También intenté hacerlo con paralelo de la siguiente manera:

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

Mi condición es que tengo que mantenerlo limitado a 8 CPU.

EDITAR:

Cuando lo ejecuto, ps -ef | grep main.shmuestra 11-12 procesos en lugar de 8.

Respuesta1

Puedes usartasksetpara establecer la afinidad de CPU de un proceso. Lo siguiente asegurará que su xargscomando solo use los primeros 8 núcleos de CPU virtuales:

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

Tenga en cuenta que desdeconjunto de tareas del hombre:

Un usuario debe poseer CAP_SYS_NICE para cambiar la afinidad de CPU de un proceso.

información relacionada