Данная заметка описывает расширение функциональности Мета-диспетчера (GridWay), вернее увеличение числа одновременно выполняющихся процессов на вычислительном узле с 1 процессором.
Я думаю данная заметка достаточно актуальна, особенно в тех сиуациях, когда моделируемая система строится на ограниченных ресурсах (отсутсвие доступа к реальным GRID-системам). В этом случае используем совокупность виртуальных машин с развернутыми на них GRID-инструментарием Globus. Я не буду вдаваться в подробности установки и настройки Globus, документация по этому вопросу подробно изложена на сайте Globus проекта в разделе быстрый старт (QuickStart). С этого места будем предполагать, что у нас настроено GRID-окружение, состоящее из 3х вычислительных узлов с поддержкой GridFTP серверов:

Итак, у нас три вычислительных узла, все три узла могут выполнять вычисления, причем на одном из них установлен планировщик задач GridWay (ca.kulanov.org.ua). Произведем запуск необходимых служб GRID окружения на всех трех компьютерах (запуск GridFTP сервера и контейнера GRID служб):
[root@hosta ~]# globus-gridftp-server
[root@hosta ~]# service globus start
Starting Globus container. PID: 1656
При этом настройка произведена таким образом, что hosta и hostb регистрируют информацию о себе на хосте ca. Это позволяет получить информацию о состоянии узлов используя только сервер ca. :
[52]: https://hosta.kulanov.org.ua:8443/wsrf/services/mds/test/subsource/IndexService
[53]: https://hosta.kulanov.org.ua:8443/wsrf/services/mds/test/subsource/IndexServiceEntry
2008-05-22 11:50:39,802 INFO impl.DefaultIndexService [ServiceThread-43,processConfigFile:107] Reading default registration configuration from file: /usr/local/globus-4.0.7/etc/globus_wsrf_mds_ind
2008-05-22 11:50:39,813 INFO impl.DefaultIndexService [ServiceThread-43,performDefaultRegistrations:193] Processing upstream registration to https://ca.kulanov.org.ua:8443/wsrf/services/DefaultInd
Проверим состояние Всех узлов кластера используя MDS (Monitoring and Discovery Service) на хосте ca.kulanov.org.ua, при этом не забудем обновить прокси сертификат:
[kulanov@ca root]$ grid-proxy-init
Your identity: /O=Grid/OU=GlobusTest/OU=simpleCA-ca.kulanov.org.ua/OU=kulanov.org.ua/CN=Sergey Kulanov
Enter GRID pass phrase for this identity:
Creating proxy ................................................... Done
Your proxy is valid until: Thu May 22 23:57:04 2008
[kulanov@ca root]$ wsrf-query -a -z none -s https://ca.kulanov.org.ua:8443/wsrf/services/DefaultIndexService |grep Host
<ns1:Host ns1:Name="hosta.kulanov.org.ua" ns1:UniqueID="hosta.kulanov.org.ua">
</ns1:Host>
<ns1:Info ns1:GRAMVersion="4.0.7" ns1:HostName="hosta.kulanov.org.ua" ns1:LRMSType="Fork" ns1:LRMSVersion="1.0" ns1:TotalCPUs="1"/>
<ns1:Host ns1:Name="hosta.kulanov.org.ua" ns1:UniqueID="hosta.kulanov.org.ua">
</ns1:Host>
<ns1:Info ns1:GRAMVersion="4.0.7" ns1:HostName="hosta.kulanov.org.ua" ns1:LRMSType="Fork" ns1:LRMSVersion="1.0" ns1:TotalCPUs="1"/>
<ns1:Host ns1:Name="hostb.kulanov.org.ua" ns1:UniqueID="hostb.kulanov.org.ua">
</ns1:Host>
<ns1:Info ns1:GRAMVersion="4.0.7" ns1:HostName="hostb.kulanov.org.ua" ns1:LRMSType="Fork" ns1:LRMSVersion="1.0" ns1:TotalCPUs="1"/>
<ns1:Host ns1:Name="192.168.1.100" ns1:UniqueID="192.168.1.100">
</ns1:Host>
<ns1:Info ns1:GRAMVersion="4.0.7" ns1:HostName="ca.kulanov.org.ua" ns1:LRMSType="Fork" ns1:LRMSVersion="1.0" ns1:TotalCPUs="1"/>
[kulanov@ca root]$
Как видим, в нашем распоряжении Три вычислительных узла. Теперь запускаем метапланировщик GridWay. Последовательность его установки я описывать не буду, достаточно хороший справочный материал приведен на сайте разработчика. При этом лишь отмечу, что информацию о состоянии кластера будем получать с главного хоста — ca.kulanov.org.ua:
#MY SETTINGS ====================================
# информацию о состянии узлов брать с ca.kulanov.org.ua
IM_MAD = mds4:gw_im_mad_mds4_thr:-s ca.kulanov.org.ua:gridftp:ws
EM_MAD = ws:gw_em_mad_ws::rsl2
TM_MAD = gridftp:gw_tm_mad_ftp:
Запускам планировщи и смотрим журнал запуска:
Thu May 22 12:03:06 2008 [UM][I]: User pool initiated.
Thu May 22 12:03:06 2008 [GW][I]: Loading Information Manager MADs.
Thu May 22 12:03:07 2008 [IM][I]: MAD mds4 loaded (exec: gw_im_mad_mds4_thr, arg: -s ca.kulanov.org.ua).
Thu May 22 12:03:07 2008 [GW][I]: Loading the scheduler.
Thu May 22 12:03:07 2008 [DM][I]: Scheduler flood loaded (exec: gw_flood_scheduler, arg: -h 0 -u 0 -c 1 -s 0).
Thu May 22 12:03:07 2008 [GW][I]: Recovering GW state.
Thu May 22 12:03:07 2008 [DM][I]: Recovering job 1.
Thu May 22 12:03:07 2008 [UM][I]: Loading execution MADs for user kulanov.
Thu May 22 12:03:07 2008 [UM][I]: Execution MAD ws loaded (exec:gw_em_mad_ws, args:, mode:rsl2).
Thu May 22 12:03:07 2008 [UM][I]: Loading transfer MADs for user kulanov.
Thu May 22 12:03:08 2008 [UM][I]: Transfer MAD gridftp loaded (exec: gw_tm_mad_ftp, arg: ).
Thu May 22 12:03:08 2008 [UM][I]: User kulanov registered.
Thu May 22 12:03:08 2008 [DM][I]: Recovering job 0.
Thu May 22 12:03:08 2008 [DM][I]: Recovering job 2.
Thu May 22 12:03:08 2008 [DM][I]: Recovering job 3.
Thu May 22 12:03:08 2008 [DM][I]: Dispatch Manager started.
Thu May 22 12:03:08 2008 [TM][I]: Transfer Manager started.
Thu May 22 12:03:08 2008 [IM][I]: Information Manager started.
Thu May 22 12:03:08 2008 [UM][I]: User Manager started.
Thu May 22 12:03:08 2008 [RM][I]: Request Manager started.
Thu May 22 12:03:08 2008 [EM][I]: Execution Manager started.
Thu May 22 12:03:13 2008 [IM][I]: Discovering hosts.
Thu May 22 12:03:54 2008 [IM][I]: Hosts discovered by MAD (mds4): ca.kulanov.org.ua hosta.kulanov.org.ua hostb.kulanov.org.ua
Регистрация узлов в системе прошла успешно. Проверим это комнадной:
[kulanov@ca root]$ gwhost
HID PRIO OS ARCH MHZ %CPU MEM(F/T) DISK(F/T) N(U/F/T) LRMS HOSTNAME
0 1 Linux2.6.23.1-4 x86 2999 100 42/193 729/4789 0/1/1 Fork hostb.kulanov.org.ua
1 1 Linux2.6.23.1-4 x86 2999 99 74/276 641/4789 0/1/1 Fork ca.kulanov.org.ua
2 1 Linux2.6.23.1-4 x86 2999 100 123/276 730/4789 0/1/1 Fork hosta.kulanov.org.ua
[kulanov@ca root]$
Как видим все три машины успешно зарегистрированы в системе, при этом, следует отметить — колонка LRMS (Local Resource Manager) Локальный менеджер ресурсов или проще говоря исполнитель — система выполнения задач. Для верного отображения состояния системы (%CPU, %Mem) необходимо установить Ganglia (Ganglia is a scalable distributed monitoring system for high-performance computing systems such as clusters and Grids)
Как было сказано ранее, именно тут мы встречаемся с ограничением на количество одновременно выполняемых задач (колонка LRMS) означает U-занятые слоты, F — free свободные слоты, T — total всего слотов — итого 1. Т.е. при запуске 5 задач в системе будут выполнятться одновременно 3 задачи, две других будут ожидать выполнения (свободных словто).
[kulanov@ca gw_test]$ gwhost
HID PRIO OS ARCH MHZ %CPU MEM(F/T) DISK(F/T) N(U/F/T) LRMS HOSTNAME
0 1 Linux2.6.23.1-4 x86 2999 100 38/193 729/4789 1/1/1 Fork hostb.kulanov.org.ua
1 1 Linux2.6.23.1-4 x86 2999 99 28/276 641/4789 1/1/1 Fork ca.kulanov.org.ua
2 1 Linux2.6.23.1-4 x86 2999 100 119/276 730/4789 1/1/1 Fork hosta.kulanov.org.ua
[kulanov@ca gw_test]$ gwps
USER JID DM EM START END EXEC XFER EXIT NAME HOST
...
kulanov 4 prol ---- 12:17:34 --:--:-- 0:00:00 0:00:03 -- sleep.jt hostb.kulanov.org.ua/For
kulanov 5 prol ---- 12:17:34 --:--:-- 0:00:00 0:00:03 -- sleep.jt ca.kulanov.org.ua/Fork
kulanov 6 prol ---- 12:17:34 --:--:-- 0:00:00 0:00:03 -- sleep.jt hosta.kulanov.org.ua/For
kulanov 7 pend ---- 12:17:34 --:--:-- 0:00:00 0:00:00 -- sleep.jt --
kulanov 8 pend ---- 12:17:34 --:--:-- 0:00:00 0:00:00 -- sleep.jt --
[kulanov@ca gw_test]$
ВНИМАНИЕ!!! Это верная и правильная ситуация в GRID-системах, например число LRMS зависит от среды — если это кластер с 200 узлами, то число Total=200 и вы можете выполнять 200 задач одновременно. Для одиночного узла количество Fork слотов определяется количеством ядер в процессоре.
Однако данная ситуация не подходит для тестирования, например загруженности кластера или отдельного узла. В системе всегда будет решаться 3 задачи одновременно. Как же увеличить количество Fork слотов, и одновременно выполнять несколько параллельных задач?
Для этого обратимся к документации по GridWay. Как известно (см. документацию к GridWay) для получения информации о состоянии GRID-кластера, используется драйвер Information Middleware Access Driver (IN_MAD), который можно настроить на четыри разных режима работы с ПО GRID [1], причем эти режимы могут совмещаться, например, информацию об одном узле вы получаете динамически через MDS4, а другой узел вы описали сами — статически:
- Static Discovery and Monitoring (SS mode).
- Static Discovery and Dynamic Monitoring (SD mode).
- Dynamic Discovery and Monitoring (DD mode).
- Separate Storage and Computing Element (Mixed mode).
Особенности настройки вы также можете прочитать на сайте производителя. Нас же будет интересовать последний режим. Проще говоря этот режим позволяет совместить динамический мониторинг, а заодно изменить некоторые параметры хоста, например количество процессоров, объем свободной памяти и т.д. Для того, чтобы настроить этот режим работы необходимо в конфигурационном файле GridWay установить следуюжие значения:
#Файл gwd.conf
IM_MAD = mds4:gw_im_mad_mds4_thr:-l etc/gridway/host.list:gridftp:ws
которые дословно означают, использовать динамический мониторинг используя MDS4, при этом некоторые параметры кластера описаны (или взять из) в файле host.list.
Файл host.list в свою очередь, будет содержать ссылки на файлы свойств (характеристик) отдельных узлов кластера или кластера вцелом:
#формат строки:
#FQDN файл_с_параметрами
ca.kulanov.org.ua etc/host.ca.kulanov.org.ua
hosta.kulanov.org.ua etc/host.hosta.kulanov.org.ua
hostb.kulanov.org.ua etc/host.hostb.kulanov.org.ua
В этом примере, дополнительные параметры для перечисленных узлов расположены в файлах etc/имя_хоста
В соответсвующих файлах (etc/host.NAME.kulanov.org.ua) прописываем следующие значения переменных:
CPU_FREE=2000
NODECOUNT=20
QUEUE_NODECOUNT[0]=20
QUEUE_FREENODECOUNT[0]=20
Означающие, что у нас будет 20 узлов и 20 задач может быть запущенно одновременно:
HID PRIO OS ARCH MHZ %CPU MEM(F/T) DISK(F/T) N(U/F/T) LRMS HOSTNAME
0 1 Linux2.6.23.1-4 x86 2999 2000 81/276 640/4789 0/20/20 Fork ca.kulanov.org.ua
QUEUENAME SL(F/T) WALLT CPUT COUNT MAXR MAXQ STATUS DISPATCH PRIORITY
default 20/20 0 -1 0 -1 0 enabled NULL 0
Это менно то, чего мы и добивались — теперь количество одновременно выполняющихся задач на узле будет 20.
VN:F [1.9.17_1161]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.17_1161]