2013-07-30 3 views
5

У меня есть сценарий оболочки. В этом скрипте я запускаю 6 новых процессов. Моя система имеет 4 процессора. Если я запустил сценарий оболочки, новые обработанные процессы автоматически распределяются по одному из процессоров по умолчанию операционной системой. Теперь я хочу сократить общее время работы моего скрипта. Есть ли способ, которым я могу проверить бесплатное использование процессора, а затем выбрать один для запуска моего процесса?Могу ли я запрограммировать выбор свободного процессора, у меня есть несколько, чтобы запустить мой сценарий оболочки?

Я не хочу запускать процесс на процессоре, который использует> 75%. Я бы подождал вместо этого и работал на процессоре, который используется < 75%.

Мне нужно запрограммировать свой сценарий таким образом, чтобы он проверял использование четырех процессоров, а затем запускал процесс на выбранном ЦП.

Может кто-нибудь, пожалуйста, помогите мне с примером?

+1

Вам ничего не нужно. Планировщик будет выполнять гораздо лучшую работу, чем выбрать ядро ​​для запуска. Если ваши задания могут выполняться параллельно, сделайте это. Какое ядро ​​запускается - это деталь, о которой вы не должны беспокоиться. –

ответ

2

Я рекомендую GNU Parallel:

GNU параллельно является инструментом оболочки для выполнения заданий параллельно с использованием одного или нескольких компьютеров. Задание может быть одной командой или маленьким скриптом, который должен быть запущен для каждой из строк на входе. Типичным входом является список файлов, список хостов, список пользователей, список URL-адресов или список таблиц. Задание также может быть командой, которая считывает из трубы. Параллель GNU может разделить вход и параллельно подключить его к командам.

Кроме того, используйте nice.

1

Вы можете сказать, планировщик, который должен быть использован определенный процессор, используя команду taskset:

taskset -c 1 process 

расскажет планировщик, который process должен работать на CPU1.

Однако, я думаю, что в большинстве случаев встроенный планировщик Linux должен работать хорошо.

+0

Btw, на BSD есть аналогичная команда под названием 'cpuset' с небольшими именами опций. Это будет: 'cpuset -l 1 process' на BSD – hek2mgl

Смежные вопросы