Назад | Перейти на главную страницу

Пакетная обработка заданий против ядра Linux

У меня есть несколько больших заданий по сценарию hugin, которые я хотел бы обработать своевременно. Каждый сценарий иногда будет использовать все ядра машины, а в других случаях быть однопоточным в течение некоторого времени.

Мне интересно, как быстрее всего выполнить все мои работы по шитью. Не лучше ли позволить ядру Linux разобраться в этом? Например, позволить всем скриптам сразу хлопать по процессору? Или лучше разделить рабочие места? - Что-то вроде Sun grid Engine / Maui (есть только один сервер)? Или, как вариант, переписать все мои сценарии в один сценарий? Последний вариант не будет очень портативным.

Пока ваш ресурс ограничен временем ЦП, вы можете позволить планировщику ядра выполнять свою работу, и вы получите в некоторой степени оптимальный результат.

Однако, если у вас есть другие ограничения, такие как использование ОЗУ или дискового ввода-вывода, может быть действительно полезно каким-то образом разложить задания, но вам нужно самостоятельно понаблюдать за своей системой, чтобы узнать, какие фактические ограничения должны придумать оптимальные стратегия.

Использование классического планировщика заданий, скорее всего, не поможет или не поможет вообще, если фазы однопоточной или многопоточной обработки происходят в одном процессе / задании.

Как быстро тебе нужно идти?

Один из подходов - продолжать добавлять задания до тех пор, пока ваши ресурсы не достигнут определенного предела, например порога загрузки ЦП. Это позволяет контролировать накладные расходы на планирование процессов и использование памяти. Например, GNU make имеет параметр --load-average, который приостанавливает выполнение новых заданий, пока средняя загрузка не станет ниже порогового значения.

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

Некоторые облачные приложения можно легко масштабировать на несколько хостов, часто автоматически. Если приложение может быть структурировано таким образом, один хост может увеличиваться до сотен по запросу.

Есть много инструментов, которые можно использовать при работе над методологией производительности. Я рекомендую одну ссылку: Руководство по настройке производительности Red Hat Enterprise Linux.