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 xargs
así:
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.
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.sh
muestra 11-12 procesos en lugar de 8.
Respuesta1
Puedes usartaskset
para establecer la afinidad de CPU de un proceso. Lo siguiente asegurará que su xargs
comando 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.