@ Карта сайта News Автора!

Bog BOS: Sun Grid Engine

Последние изменения:
2024.03.28: sysadmin: Файловая система zfs под Linux для архива (обновление от 0.6 до 2.2)

Последнее изменение файла: 2020.10.12
Скопировано с www.bog.pp.ru: 2024.04.26

Bog BOS: Sun Grid Engine

Sun Grid Engine (sge, gridengine) представляет собой распределённую систему управления очередями заданий, предназначенных для пакетного выполнения на узлах кластера (grid, cloud, distributed resource management). Кластер (grid) представляет собор набор вычислительных ресурсов, доступных пользователям через одну (обычно) точку доступа. SGE позволяет администратору задать политику управления ресурсами, следуя которой планировщик распределяет задания по узлам кластера в соответствии с целями организации (сроки завершения, приоритеты, SLA), имеющимися свободными ресурсами, возможностями вычислительных устройств и требованиями заданий к ресурсам. Пользователи запускают задания, не заботясь о месте их выполнения. Пакетная организация работ позволяет значительно увеличить пропускную способность кластера. Задания могут быть как обычными пакетными, так и интерактивными и параллельными, имеется поддержка нескольких систем контрольных точек с возможность динамической миграции заданий с узла на узел.

Разрабатывался фирмой Gridware (Distributed Resource Management - DRM), куплена Sun Microsystems в 2000. Лицензия - SISSL (open source). Версия - 6.2u3/6.1u6 (документация к последней версии только в виде wiki). Поддерживаемые ОС - Solaris 8/9/10, Mac OS X 10.4/10.5, HP-UX 11.0, IBM AIX 5.1/5.3, Linux (ядро 2.4 или 2.6, glibc 2.3.2), MS Windows XP Pro SP1, MS Windows Server 2003/2008, MS Windows Vista.

После покупки Sun Microsystems фирмой Oracle переименован в Oracle Grid Engine. В 2010 году отправлен в свободное плавание с передачей кодов и поддержки в Open Grid Scheduler (последняя завершённая версия - Grid Engine 2011.11p1). В 2013 году коммерческая поддержка клиентов Oracle передана фирме Univa, а код закрыт. Развитие открытой версии идёт под именем Son of Grid Engine (SoGE) - версия 8.1.8 (8.1.9 несовместим).

В RHEL5 - gridengine 6.1u4, в RHEL6 - gridengine 6.2u5, в RHEL7 - отсутствует (src.rpm для 8.1.8 и внутренняя сборка для CentOS 7).

Альтернативы: LSF, Torque, OpenPBS, Condor.

Архитектура

Кластер состоит из вычислительных хостов, управляющего (master) хоста, запасного управляющего хоста (shadow master), административных хостов и пользовательских (submit) хостов. Распределение хостов является ролевым - управляющий хост может одновременно являться и вычислительным. Роли хостов должны быть зарегистрированы на управляющем хосте. SGE может управлять отдельным кластером или группой кластеров (cells, переменная окружения SGE_CELL) - позволяет съэкономить 2MB ;) при оформлении кластера в виде ячейки. Имя кластера задаётся переменной окружения SGE_CLUSTER_NAME. Пользователи на всех вычислительных и пользовательских хостах должны иметь одинаковые имена и uid.

На каждом вычислительном хосте работает демон, контролирующий выполнение заданий на данном хосте и соответствующую очередь. Вычислительный хост может выполнять несколько заданий одновременно. Задание представляет собой запрос на определённые вычислительные ресурсы. Описание задания содержит требования (profile) к объёму памяти, скорости ЦП, наличию лицензий, имя пользователя и имя группы пользователей, имя проекта. Главный демон получает от рабочих демонов информацию о производительности и загрузке узлов, текущем состоянии выполняемых заданий, посылает им задания.

На главном хосте работает - понятное дело - главный демон (sge_qmaster), который принимает задания от пользовательских хостов и помещает их в очередь ожидания до освобождения подходящего вычислительного хоста, ведёт таблицы хостов (доступные ресурсы и текущий уровень нагрузки), заданий, очередей, пользователей и их прав, решает какую задачу помещать в какую очередь, как переупорядочить задания в очереди, чтобы соблюсти равномерную загрузку, приоритеты и сроки выполнения, посылает задания вычислительным хостам, отслеживает ход работ и пишет журналы. Имеется 3 политики упорядочивания заданий (используются одновременно, влияние каждой политики определяется её весом и нормализованным значением):

Можно комбинировать (под)политики, использующие плюшки, назначая им размер пула плюшек для каждой (под)политики):

При использовании плюшечной политики каждое задание при запуске получает набор плюшек из пула каждой используемой политики. Размер функционального и разделяемого пула задаётся администратором. Администратор и оператор могут вбросить порцию плюшек в систему (override). Через определённые интервалы времени (Shedule Interval) задание может получить очередную порцию плюшек (или потерять, если использует больше ресурсов, чем обещало). Планировщик через определённые интервалы времени пытается запустить задания из списка ожидания на выполнение:

Административный хост управляет распределённой системой.

Пользовательский хост может посылать задания главному демону (qsub) и проверять их состояние (qstat). Имеется графический интерфейс (QMON) и программный интерфейс DRMAA (Distributed Resource Management Application API).

Запасной управляющий хост (демон sge_shadowd) готовится заместить главный демон в случае проблем.

Хосты могут объединяться в группы хостов (иерархически), Группа "@allhosts" включает в себя все вычислительные хосты.

Консоль ARCo (Accounting and Reporting Console) позволяет собирать данные, хранить их в СУБД (SQL) и создавать отчёты.

Модуль SDM (Service Domain Manager) помогает обеспечивать соблюдение SLA.

SGE использует системные учётные записи пользователей. Любой пользователь, имеющий учётные записи на пользовательском и вычислительном хостах может запускать задания на выполнение в рамках SGE. Имя и uid пользователя должны быть одинаковы на всех пользовательских и вычислительных хостах. SGE ведёт свои группы пользователей двух типов: списки доступа и списки подразделения (группа одновременно может быть обоих типов). Группа SGE может содержать имена пользователей и имена UNIX групп (имеют префикс '@'). При установке создаются группы пользователей deadlineusers (список доступа) и defaultdepartment (список подраздления). Можно ограничить доступ пользователей (через списки доступа) к кластеру, отдельным очередям, окружениям параллельного доступа и проектам. Пользователь может входить в несколько списков доступа. Списки подразделений (department) используются при определении политики планирования. Пользователь может быть членом только одного подразделения. SGE может автоматически создавать пользователей (настройки кластера - Enforce User - Auto; не забыть задать параметры для пользователей по умолчания там же). Типы пользователей:

Очередь (cluster queue) определяет класс заданий, которые могут выполняться на одном или нескольких вычислительных хостах. Один хост может быть указан в нескольких очередях. Каждый исполнительный хост имеет экземпляр (instance) очереди (имя-очереди@имя-хоста). Экземпляр очереди может быть связан с группой хостов (домен очереди, имя-очереди@@имя-группы). Настройки экземпляра очереди могут отличаться от общих настроек очереди. При установке создаётся очередь all.q, в которую помещаются все исполнительные хосты. Класс заданий определяется набором допустимых атрибутов заданий (например, возможность миграции на другие хосты). Очередь при запуске задания может быть выбрана автоматически, исходя из требований задания к ресурсам или назначена явно. Задание ожидает выполнения в списке ожидания планировщика, при помещении его в экземпляр очереди оно немедленно начинает выполняться. Каждое задание привязывается к одному экземпляру очереди на всё время выполнения. Очередь (экземпляр очереди) может иметь владельца (владельцев), которые могут закрывать очередь и приостанавливать задания.

Очереди могут храниться в текстовом формате (локально, classic) или в Berkeley DB (локально или на выделенном сервере - интерфейс RPC). Berkeley DB в отличие от текстового формата обеспечивает неблокирующую запись и большую устойчивость. Обязателен при использовании запасного упраавляющего сервера (в варианте с выделенным сервером).

Календарь (только один), привязанный к очереди, позволяет автоматически изменять состояние очереди (закрывать и открывать, приостанавливать и возобновлять) в указанное время и/или день недели/года.

Имеется понятие подчинённых (subordinate) очередей - в настройке очереди (целиком или для отдельного хоста) можно указать приостанавливать (SIGSTOP/SIGCONT) работу указанной подчинённой очереди (экземпляра очереди на том же хосте) при заполнении указанного количества слотов в исходной очереди.

SGE имеет набор встроенных атрибутов ресурсов и возможность добавлять свои атрибуты и средства их измерения (sensors). Совокупность известных системе атрибутов называется complex. Атрибут может быть привязан к очереди (например, h_vmem - максимально допустимый размер виртуальной памяти), текущему состоянию хоста (например, mem_free или место на диске) или всему кластеру (место на сетевом диске) и идентифицирует наличие ресурса определённой величины. При установке к каждой очереди и хосту привязывается набор атрибутов по умолчанию. Их нельзя изменить или удалить. Планировщик принимает во внимание наличие ресурсов требуемой заданием величины. Также планируется и учитывается потребление расходуемых ресурсов (consumable) - ОП, лицензии, дисковое пространство, пропускная способность сети - исходя из запросов заданий. Исходное значение расходуемого ресурса задаётся администратором (для кластера и/или отдельной очереди и/или хоста) или измеряется, т.е. ресурс может одновременно быть учитываемым (consumable) и реально измеряемым (load).

Контрольные точки.

Типы заданий: пакетные, интерактивные.

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

Профили планировщика определяют интервал планирования, тщательность планирования и объём доступной информации о планировании:

Правила переименования путей (в файлах $SGE_ROOT/имя-ячейки/common/sge_aliases и ~/.sge_aliases) позволяют задать правила преобразования имёни текущего рабочего каталога (cwd) при запуске заданий с определённых пользовательских хостов на определённых вычислительных хостах.

Журналы выводятся в /usr/share/gridengine/$SGE_CELL/spool/qmaster/messages и /usr/share/gridengine/$SGE_CELL/spool/имя-хоста/messages.

Между версиями 1.6 и 1.8 куда-то затерялся sge_schedd.

Установка 6.1u3/6.1u6

Предварительно ответить себе на вопросы:

Убедиться, что на всех узлах в /etc/services имеются строки (UDP лишнее?):

sge_qmaster	6444/tcp		# Grid Engine Qmaster Service
sge_qmaster	6444/udp		# Grid Engine Qmaster Service
sge_execd	6445/tcp		# Grid Engine Execution Service
sge_execd	6445/udp		# Grid Engine Execution Service

Убедиться, что на всех узлах в /etc/passwd есть пользователь sgeadmin в группе (/etc/group) sgeadmin (/usr/share/gridengine и /sbin/nologin) с одинаковыми gid и uid.

Создать на NFS общий каталог для ячейки default.

Пакеты для установки SGE имеются в репозитариях (SGE_ROOT=/usr/share/gridengine): общие файлы в пакете gridengine (6.2-6.fc10.x86_64 в F10, 6.1u3-6.el5 в EPEL для RHEL5/CentOS5 - требуется fedora-usermgmt), пакет gridengine-qmaster для главного демона (включает работу с Berkley DB), пакет gridengine-execd для исполнительных демонов, пакет gridengine-qmon для администрирования (требуется /usr/X11R6/lib/libXm.so.2 из openmotif21-2.1.30-11.RHEL4.6), пакет gridengine-devel для DRMAA. Имеются "родные" пакеты sun-sge-common-6.2-3 и sun-sge-bin-linux24-x64-6.2-3 (SGE_ROOT=/gridware/sge/) и просто архивы ge-6.1u6-common.tar.gz и ge-6.1u6-bin-lx24-amd64.tar.gz.

Установка главного хоста (обязательно до пользовательских и административных хостов, автоматически регистрируется в качестве административного и пользовательского хоста скриптом установки):

Установка вычислительного хоста (пакеты из репозитариев EPEL5 6.1u3 и EPEL6 6.2u5 несовместимы! EPEL5 6.1u3 и EPEL5 6.1u4 совместимы не совсем!):

Установка вычислительного хоста (6.2, "родные" пакеты - не получилось):

Установка вычислительного хоста (6.1, из архивов):

Установка административного хоста:

Регистрация дополнительных пользовательских хостов на главном хосте: "qconf -as имя-хоста" (разрешение на запуск с них).

Настройка:

Добавление в группу: "qconf -aattr hostgroup hostlist имя-хоста @имя-группы"

Добавление в очередь: "qconf -aattr queue slots количество имя-очередь"

Переменные окружения

Устанавливаются в /usr/share/gridengine/default/common/settings.sh (/etc/profile.d/sge.sh) или /usr/share/gridengine/default/common/settings.csh (/etc/profile.d/sge.csh):

Устанавливаются в ? перед выполнением задания

  • SGE_ACCOUNT=sge
  • SGE_ARCH=lx26-amd64 - архитектура вычислительного хоста
  • ARC=lx26-amd64
  • SGE_BINARY_PATH - путь к программам
  • SGE_CLUSTER_NAME (вычисляется автоматически по номеру порта главного демона) - удалёно?
  • SGE_CWD_PATH
  • SGE_JOB_SPOOL_DIR - служебные рабочие файлы на время выполнения задания
  • SGE_O_{HOME,HOST,LOGNAME,MAIL,PATH,SHELL,WORKDIR} - предыдущие значения
  • SGE_STDERR_PATH
  • SGE_STDIN_PATH
  • SGE_STDOUT_PATH
  • SGE_TASK_ID, SGE_TASK_FIRST, SGE_TASK_LAST, SGE_TASK_STEPSIZE - номер подзадачи в задании
  • QUEUE - имя-очереди
  • SGE_QMASTER_PORT - ?
  • SGE_EXECD_PORT - ?
  • PATH=/tmp/$JOB_ID.1.$QUEUE:/usr/local/bin:/bin:/usr/bin
  • HOME
  • USER - имя пользователя
  • JOB_ID - номер задания
  • JOB_NAME - имя-задания
  • PWD
  • RESTARTED (0 или 1)
  • HOSTNAME
  • SHELL=/bin/sh
  • TERM=linux
  • TMPDIR=/tmp/$JOB_ID.1.$QUEUE
  • JOB_SCRIPT=/var/spool/gridengine/default/$HOSTNAME/job_scripts/$JOB_ID
  • ENVIRONMENT={BATCH|?}
  • Конфигурационные файлы

    Файл /etc/sysconfig/gridengine содержит переменные окружения, используемые при запуске сервисов sgemaster и sge_execd:

    Файл /usr/share/gridengine/my_configuration.conf содержит шаблон для пакетной установки (в виде переменных окружения):

    Реальная конфигурация лежит в $SGE_ROOT/$SGE_CELL или в Berkley DB.

    Настройка пользователей и проектов

    Пользователи должны иметь право на чтение каталога $SGE_ROOT/имя-ячейки/common. Вычислительный демон создаёт на время выполнения задания рабочий каталог, его расположение определяется параметров tpdir настроек очереди. Задания являются пакетными, так что не надо вставлять в .bashrc команды типа stty.

    Настройка ресурсов

    Параметры атрибуты (ресурса):

    Стандартные атрибуты, значения которых мониторятся для каждого вычислительного хоста:

    Можно добавлять свои "сенсоры" (load sensor) для мониторинга добавленных атрибутов (работают как демоны, путь определяется в настройке кластера - конфигурации хоста - Load Sensor). Примеры приведены в /usr/share/gridengine/util/resources/loadsensors/ (nuser.sh подсчитывает количество работающих в данный момент пользователей). sge_execd проверяет наличие глобального скрипта qloadsensor в каталоге исполняемых файлов (/usr/share/gridengine/bin/lx26-amd64/) и запускает его (предварительно добавить ресурс mem_total_neg в настройки комплекса). Руками можно прописать в complex_values, а скрипт (ни qloadsensor, ни прописанный явно) не добавляет ни в load_values, ни в complex_values (/usr/share/gridengine/util/resources/centry/mem_total_neg делал) Например:

    #!/bin/sh
    
    #host=`hostname -s`
    host=`hostname`
    mem_total=`free -b|grep Mem:|awk '{print $2}'`
    
    echo "$host:mem_total_neg:${mem_total}M"
    

    Отслеживаемые атрибуты можно приписывать к кластеру (будут доступны как глобальные значения и для всех вычислительных хостов) или к хостам.

    Значение фиксированных атрибутов добавлять так: "qconf -me имя хоста", далее в строке complex_values вписать "имя_атрибута=значение". Посмотреть значения измеряемых и фиксированных аттрибутов: "qconf -se имя-хоста". Получить список хостов, отфильтрованный по значению атрибута: "qhost -l имя-атрибута=значение". Получить значения атрибута для хостов: "qhost -F имя-атрибута".

    Добавление расходуемых ресурсов slot_req и mem_req (можно объявить расходуемыми h_vmem и s_vmem?):

    Общий расходуемый ресурс надо привязывать к хосту по имени global.

    Задание правил квотирования ресурсов осуществляется с помощью набора правил (RQS, resource quota sets).

    Пример набора, ограничивающего количество заданий во всех очередях на каждом хосте двукратным числом ядер:

    {
      name         limit_slots_to_cores_rqs
      description  Prevents core oversubscription across
      enabled      true
      limit        hosts {*} to slots=$num_proc*2
    }
    

    Настройка кластера и вычислительных хостов

    Хост с именем global задаёт общие настройки.

    Настройки параметров кластера (sge_conf(5)):

    Настройки параметров вычислительного хоста (sge_host_conf(5)). Перебивает параметры кластера, перебивается параметрами очереди.

    Добавить административные полномочия: qconf -ah имя-рабочего-хоста (посмотреть - "qconf -sh"; удалить qconf -dh имя-рабочего-хоста).

    Разрешить запускать задания: "qconf -as имя-хоста".

    Добавление в группу: "qconf -aattr hostgroup hostlist имя-хоста @имя-группы".

    Добавление в очередь: "qconf -aattr queue slots количество очередь@имя-хоста".

    Множители текущей нагрузки позволяют отмасштабировать ценность ресурсов данного хоста относительно некоторого базового уровня при получении отчётов о текущей нагрузке с целью планирования выполнения заданий (по умолчанию - 1).

    Множители использованных заданиями ресурсов позволяют отмасштабировать ценность ресурсов данного хоста относительно некоторого базового уровня для отчётности (по умолчанию - 1):

    Права доступа для пользователей (предварительно необходимо определить перечни пользователей типа списков доступа).

    Права доступа для имеющихся проектов.

    Значения потребляемые и фиксированных ресурсов (список потенциальных типов ресурсов определяется отдельно).

    Какие типы ресурсов включать в отчёты (список потенциальных типов ресурсов определяется отдельно).

    Настройка очередей и календарей

    При создании (модификации) очереди задаются (sge_queue_conf.5):

    Формат описания календаря - /usr/share/man/man5/sge_calendar_conf.5.gz. Позволяет задать интервалы времени (по дням года и/или недели и по времени суток), в которые задания должны быть запрещены (по умолчанию), остановлены или разрешены.

    Запуск пакетных заданий (qsub)

    Пакетные задания запускаются командой qsub, в качестве параметра указывается имя скрипта, который должен находиться в текущем рабочем каталоге на каждом вычислительном узле. Аргументы скрипта указываются следом за строкой "--". Скрипт должен иметь управляющий комментарий ('#!'). qsub интерпретирует управляющие комментарии '#$', извлекая из них дополнительные ключи запуска. Скрипт должен самостоятельно подготовить окружение (установить пути доступа, загрузить модули, перейти в нужный каталог) и затем запустить приложение. Список командных интерпретаторов для login задаётся в настройках кластера (чтобы выполнялся .bash_profile). Имеется возможность определить требования по умолчанию для всех пользователей кластера ($SGE_ROOT/имя-ячейки/common/sge_request) или для отдельных пользователей (~/.sge_request или рабочий-каталог/.sge_request), файлы содержат ключи команды qsub (значения -q из файлов сливаются, а не замещаются). Ключи:

    Приоритеты источников ключей (слева направо, сверху вниз)

    1. командная строка
    2. управляющие комментарии в скрипте
    3. рабочий-каталог/.sge_request
    4. ~/.sge_request
    5. $SGE_ROOT/имя-ячейки/common/sge_request

    При запуске задания (qsub, qsh и пр.) заполняется перечень требований (значений атрибутов) к кластеру в целом (глобальные атрибуты, например, место на сетевом диске), вычислительному хосту (атрибуты хоста, например, архитектура или свободная память) или очереди (параметры очереди, например, максимально допустимое время счёта) - профиль задания (profile). При выборе очереди для выполнения планировщик учитывает эти требования. Требования к атрибутам могут быть обязательными (hard) или желательными (soft).

    Командный интерфейс настройки

    Утилита qconf (qconf.1)

    Утилиты

    Ссылки

    @ Карта сайта News Автора!

    Bog BOS: Sun Grid Engine

    Последние изменения:
    2024.03.28: sysadmin: Файловая система zfs под Linux для архива (обновление от 0.6 до 2.2)



    Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru