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

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

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

2 ответа

Решение

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

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

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

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

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

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

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

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

Другие вопросы по тегам