TL; DR: есть ли способ заставить SGE выполнять циклический перебор между серверами при планировании заданий вместо выделения всех заданий одному и тому же серверу, когда это возможно?
Подробности:
У меня большой вычислительный процесс, состоящий из множества небольших заданий.Я использую SGE для распределения работы по нескольким серверам в кластере.
Этот процесс требует различного количества задач в разные моменты времени (технически это группа данных).Иногда количество параллельных заданий очень велико (~ 1 на процессор в кластере), иногда оно намного меньше (~ 1 на сервер).Группа обеспечения доступности баз данных является динамической и неоднородной, поэтому нелегко определить, сколько параллельных заданий существует / будет в любой заданной точке.
Задания используют много ресурсов ЦП, но также выполняют несколько нетривиальных операций ввода-вывода.(особенно при запуске и завершении работы).Они получают доступ к общему NFS-серверу, подключенному ко всем вычислительным серверам.Каждый вычислительный сервер имеет более узкое соединение (10 Гбит / с), но NFS-сервер имеет несколько широких подключений (40 Гбит / с) к коммутатору связи.Не уверен, какова пропускная способность магистрали коммутатора, но это монстр, поэтому он должен быть высоким.
Для оптимальной производительности задания должны планироваться на разных серверах , когда это возможно .То есть, если у меня 20 серверов, каждый с 20 процессорами, отправка 20 заданий должна запускать по одному заданию на каждом.Отправка 40 заданий должна выполняться по 2 на каждом и т. Д. Отправка 400 заданий приведет к насыщению всего кластера.
Однако SGE извращенно стремится минимизировать производительность ввода-вывода.Отправка 20 заданий запланирует их все на одном сервере.Таким образом, все они борются за одно ничтожное сетевое подключение 10 Гбит, когда 19 других машин с пропускной способностью 190 Гбит бездействуют.
Я могу заставить SGE выполнить каждое задание на другом сервере несколькими способами(использование ресурсов, использование специальных очередей, использование моей параллельной среды и указание '-t 1-' и т. д.).Однако это означает, что я смогу выполнять только одно задание на сервер, period .Когда DAG открывается и порождает много заданий, задания останавливаются в ожидании полностью свободного сервера, в то время как 19 из 20 процессоров каждой машины будут простаивать.
Мне нужен способ сообщить SGE:назначить каждую работу следующему серверу, имеющему свободный слот в порядке кругового выбора.Лучшим способом было бы назначить задание на наименее загруженный сервер (максимальное количество неиспользуемых слотов, или максимальная доля неиспользуемых слотов, или минимальное количество используемых слотов и т. Д.).Но мёртвый простой циклический перебор подойдет.
Это выглядит как гораздо более разумная стратегия в целом , по сравнению с политикой SGE по выполнению каждого задания на том же сервере, что и предыдущийзадание, которое является едва ли не худшей стратегией для моего случая.
Я просмотрел параметры конфигурации SGE, но не смог найти способ изменить стратегию планирования.Тем не менее, документация SGE не совсем проста в навигации, поэтому я мог бы легко что-то пропустить.
Кто-нибудь знает о любом способе заставить SGE изменить свою стратегию планирования на круговую?Робин или наименее загруженный или что-нибудь по этим направлениям?
Спасибо!