Параллельная работа только с ограниченным количеством ядер ЦП

Параллельная работа только с ограниченным количеством ядер ЦП

У меня есть сервер с 12 ядрами, и я хочу запустить скрипт, который принимает файл в качестве входного аргумента и выполняет его обработку. Я хочу использовать 8 ядер и не более того, чтобы выполнять параллельную обработку 8 файлов одновременно на 8 ядрах, а затем перейти к следующему, как только обработка 1 будет завершена.

Я пробовал сделать это xargsследующим образом:

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

Но когда я вижу ядро, загрузка ЦП прикрепляется к снимку.введите описание изображения здесь

Я также пробовал делать с параллелями следующим образом:

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

Мое условие — ограничиться 8 процессорами.

РЕДАКТИРОВАТЬ:

При запуске ps -ef | grep main.shотображается 11-12 процессов вместо 8.

решение1

Вы можете использоватьtasksetдля установки привязки к процессору процесса. Следующее гарантирует, что ваша xargsкоманда будет использовать только первые 8 виртуальных ядер процессора:

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

Обратите внимание, что изнабор задач человека:

Для изменения привязки процесса к ЦП пользователь должен обладать привилегиями CAP_SYS_NICE.

Связанный контент