Инструкция-отчет по установке и настройке MPI кластера с бездисковыми клиентами на ОС Linux

Описание и технические характеристики оборудования

Cluster Cluster with notes

На данный момент кластер состоит из 4-х машин, объединенных в сеть на скорости 1 Гб/сек. через 16-ти портовый коммутатор. Все машины оснащены cd-rom, fdd, управляющая машина оснащена, также dvd-rw. Последний в перспективе можно использовать для кодирования DVD-видео с помощью пакета rvd::rip, который работает на основе технологии PVM.

ТТХ:
Процессор: 2xAMD Athlon MP 2400+
ОЗУ: 1024 Мб
HDD (на управляющей машине): 80 Гб. Maxtor 6Y080L0
Сеть:
1. 3com Corporation 3c905C-TX/TX-M (Tornado)
2. (на управляющей машине 2-я сетевая карта для связи с внешней сетью) D-link Systems Inc. RTL9139 Ethernet

ОС:RedHat Enterprice Linux 4 – Advanced Server
gcc: 3.4.5 20051201
lam: 7.0.6-5
pvm: 3.4.4-21

Настройка HPC MPI кластера с бездисковыми станциями

Ставим операционку, лучше, как впоследствии выяснилось RHEL-4 AS. При установке, выбираем обязательно «научные приложения» и в них, доотмечаем lam и pvm. Также не забываем про mc, tftp, dhcp, nfs, syslinux, system-config-netboot (если есть в дистрибутиве)

Подготовка ОС для бездисковых станций

После установки ОС. Создаем папку-корень для бездисковой станции:

mkdir –p /diskless
mkdir –p /diskless/root

Копируем корневую файловую систему в папку /diskless/root:

rsync –v –a –e ssh –exclude='/proc/' --exclude='/sys/*' –exclude='/diskless/*' 192.168.31.1:/ /diskless/root

Настраиваем DHCP

Настраиваем dhcp. Вот пример конфига для 3-х бездисковых рабочих станций, добавляются они по-аналогии, MAC адреса переписать самое главное. Настройки хранятся в файле /etc/dhcpd.conf

dhcpd.conf

#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.sample  
default-lease-time 600;
max-lease-time 7200;
authoritative;
ddns-update-style none;

option domain-name "cluster";
option routers 192.168.31.1;
option domain-name-servers 192.168.31.1;
option swap-path code 128 = string;
option swap-size code 129 = integer 32;
subnet 192.168.31.0 netmask 255.255.255.0 {
    range 192.168.31.11 192.168.31.21;
    option subnet-mask      255.255.255.0;
    option broadcast-address    192.168.31.255;
    group {
        filename "linux-install/pxelinux.0";
        option root-path "/diskless/root";
        next-server 192.168.31.1;
        host m01 {
            option host-name "m01.cluster";
            hardware ethernet 00:E0:81:25:63:50;
            fixed-address 192.168.31.11;
            }
        host m02 {
            option host-name "m02.cluster";
            hardware ethernet 00:E0:81:25:01:FA;
            fixed-address 192.168.31.12;
            }
        host m03 {
            option host-name "m03.cluster";
            hardware ethernet 00:E0:81:25:63:6A;
            fixed-address 192.168.31.13;
            }       
        }
    }
allow booting;
allow bootp;

Также в файле /etc/sysconfig/dhcpd указываем серверу слушать только eth0 в нашем случае, это внутренняя сеть кластера

# Command line options here
DHCPDARGS=eth0

Настраиваем NFS

Настраиваем nfs для экспорта файловых систем для бездисковых станций. Настройки хранятся в файле /etc/exports

/etc/exports:

#read
/diskless/root 192.168.31.0/24(ro,sync,no_root_squash)
#
/usr/local 192.168.31.0/24(ro,sync,no_root_squash)
#
/diskless/snapshot 192.168.31.0/24(rw,sync,no_root_squash)
#
#/diskless/swap 192.168.31.0/24(rw,sync,no_root_squash)
#/home
/home   192.168.31.0/24(rw,sync,no_root_squash)
#opt
/opt    192.168.31.0/24(ro,sync,no_root_squash)

Здесь несколько моментов /diskless/swap/ с ним еще не ясно, поэтому закомментируем. «Своп по сети» мне кажется не очень хорошей идеей. Нужно попытаться настроить своп на клиенте, об этом позже.

Настраиваем NTP

Настраиваем ntp для синхронизации времени на сервере и на нодах. Настройки хранятся в файле
/etc/ntp.conf:

    restrict 192.168.31.0 mask 255.255.255.0 nomodify notrap
    restrict 127.0.0.1
    restrict 127.127.1.0
    restrict 127.127.27.0 nomodify
    server 127.127.1.0 #local
    fudge 127.127.1.0 stratum 10
    
    driftfile /var/lib/ntp/drift
    broadcastdelay 0.008
    keys /etc/ntp/keys

Настройка служб на сервере

С конфигами разобрались. Теперь идем в настройки служб и проверям включен ли автозапуск служб portmap, nfs, nfslock, ntp, xinetd,, tftp, dhcpd. Сохраняем перегружаем машину.

Создание бездискового окружения

Теперь создадим бездисковое окружение и добавим клиентов. Запускаем утилиту system-config-netboot. При первом запуске появляется мастер: на первом шаге будет предложено скопировать корневую файловую систему в каталог корня для бездисковых станций, нажимаем далее, мы уже это сделали. На следущем слайде надо задать имя сети и описание, далее, затем задаем ip адрес nfs сервер, в нашем случае ip нашей машины 192.168.31.1 и корневой каталог для бездисковых станций, в нашем случае это /diskless/root, далее, если все сконфигурировано верно, то на след. Шаге будет выведен список доступных ядер, отмечаем необходимое, далее, все создано бездисковое окружение.

Добавление бездисковых клиентов

Теперь добавляем клиентов. В появившемся пустом окне нажимаем кнопку добавить вводим ip адрес клиента, например 192.168.31.13. Опции ядра оставляем пустыми, вводим название «снимка» (это будет папка в /diskless/snapshot/ в которой будут хранится настройки уникальные для каждой бездисковой станции) например m03. Опции логов по-вкусу. Нажимаем OK. Все станция добавлена.

Создание уникальной для каждой машины конфигурации

Редактируем настройки бездисковой станции. Идем в папку /diskless/snapshot/<название снимка>/etc
Там добавляем в файл fstab строчки для монтирования коневой файловой системы и наших экспортированных файловых систем (их количество и качество зависит от пожеланий кластеростроителя). Я монтирую корневую /, /home, /opt.

/etc/fstab:

192.168.31.1:/diskless/root / nfs defaults,ro 0 0
192.168.31.1:/home /home nfs defaults,rw 0 0
192.168.31.1:/opt /opt nfs defaults,ro 0 0

Службы

Теперь необходимо отключить на бездисковых станциях ненужные службы. Для этого необходимо chroot’нуться в корень станции, выглядит это так:

su
<пароль>
cd /diskless
/sbin/chroot root

Все теперь мы находимся в «песочнице» бездисковой станции и каталог /diskless/root становиться для текущего сеанса с терминалом корневым, если закрыть терминал или открыть новую вкладку, то там все будет «по-старому».
Смотрим какие службы вообще работают. Для удобства я обычно открываю графическую утилиту настройки служб и сверяюсь с ней system-config-services. Смотрим список служб:

/sbin/chkconfig –list

Листинг списка служб для всех «нод»:

crond0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
cups0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
microcode_ctl0:выкл1:выкл2:вкл3:вкл4:вкл5:вкл6:выкл
cpuspeed0:выкл1:вкл2:выкл3:выкл4:выкл5:выкл6:выкл
rpcgssd0:выкл1:выкл2:выкл3:вкл4:вкл5:вкл6:выкл
mdmonitor0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
arptables_jf0:выкл1:выкл2:вкл3:вкл4:вкл5:вкл6:выкл
rusersd0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
vncserver0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
portmap0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
lm_sensors0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
messagebus0:выкл1:выкл2:выкл3:вкл4:вкл5:вкл6:выкл
snmpd0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
anacron0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
bootparamd0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
autofs0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
rhnsd0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
rawdevices0:выкл1:выкл2:выкл3:вкл4:вкл5:вкл6:выкл
pcmcia0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
sshd0:выкл1:выкл2:вкл3:вкл4:вкл5:вкл6:выкл
nfs0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
ypbind0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
network0:выкл1:выкл2:вкл3:вкл4:вкл5:вкл6:выкл
xfs0:выкл1:выкл2:вкл3:вкл4:вкл5:вкл6:выкл
apmd0:выкл1:выкл2:вкл3:вкл4:вкл5:вкл6:выкл
psacct0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
gpm0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
saslauthd0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
netfs0:выкл1:выкл2:выкл3:вкл4:вкл5:вкл6:выкл
NetworkManager0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
xinetd0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
bluetooth0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
winbind0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
sendmail0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
smb0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
acpid0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
mdmpd0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
iptables0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
dc_client0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
tux0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
syslog0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
isdn0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
rstatd0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
smartd0:выкл1:выкл2:вкл3:вкл4:вкл5:вкл6:выкл
nfslock0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
cups-config-daemon0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
snmptrapd0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
squid0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
atd0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
irqbalance0:выкл1:выкл2:выкл3:вкл4:вкл5:вкл6:выкл
readahead0:выкл1:выкл2:выкл3:выкл4:выкл5:вкл6:выкл
rpcidmapd0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
haldaemon0:выкл1:выкл2:выкл3:вкл4:вкл5:вкл6:выкл
ntpd0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
irda0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
readahead_early0:выкл1:выкл2:выкл3:выкл4:выкл5:вкл6:выкл
diskdump0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
dc_server0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
rwhod0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
diskless0:выкл1:выкл2:выкл3:вкл4:выкл5:вкл6:выкл
dhcrelay0:выкл1:выкл2:выкл3:выкл4:выкл5:вкл6:выкл
netplugd0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
kudzu0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
netdump0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
dhcpd0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
nscd0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
httpd0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
auditd0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
rarpd0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
ipmi0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл
named0:выкл1:выкл2:выкл3:выкл4:выкл5:выкл6:выкл

Анализируем вывод комманды, отключаем практически все. В первую очередь к отключению nfs, ntp, dhcpd, anacron, cron, kudzu и т.д.
По завершении настройки служб на бездисковой станции, закрываем терминал, чтобы выйти из «песочницы». Можно запустить бездисковую станцию, лучше сначала эксперименты ставить с одной станцией, остальные недолго добавить по-аналогии.

Подготовка BIOS бездисковой машины

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

Настройка беспарольного входа

На данном этапе имеем настроеную(ые) бездисковые станции. Теперь для необходимости работы системы lam-mpi необходимо настроить беспарольный вход с главной машины кластера на «ноды» (бездисковые станции). Это непременное условие работоспособности всей системы.
Алгоритм обеспечения беспарольного доступа следующий:

Логинимся к консоли кластера:

ssh user1@server

Переходим в каталог ssh:

cd ~/.ssh

Генерируем rsa-ключи:

ssh-keygen -t rsa

На вопрос задать имя файла жмем Enter — остается имя по умолчанию id_rsa.
На просьбу задать пароль жмем Enter два раза (второй раз для проверки).
Копируем публичный ключ на узел кластера:

scp id_rsa.pub user1@node1:~/.ssh

Логинимся к узлу node1:

ssh user1@node1

Переходим в каталог ssh:

cd ~/.ssh

Копируем публичный ключ:

cat id_rsa.pub >> authorized_keys2

Отключаемся от узла node1
Повторяем пункты 6-10 для остальных узлов кластера (node2 … nodeN)

И еще один момент для файла authorized_keys2 выставить права доступа 600. Можно это сделать прямо на сервере, благо дирректория /home у нас экспортируется на все машины и изменения сразу же отразятся на всех «нодах» Делается это командой chmod:

cd ~./ssh
chmod 600 autorized_keys2

Настройка системы LAM-MPI

Теперь наступает ответственный момент, необходимо проверить работоспособность lam-mpi системы. С помощью команды locate находим файл lam-bhost.def

su
<пароль>
updatedb
exit
locate lam-bhost.def

В этом файле уже будет одна машина – localhost. Просто закомментируйте эту строчку и допишите новые строки с перечнем машин и количеством процессоров на них, если оно отличается от единицы. Пример:

192.168.31.1 cpu=2
192.168.31.11 cpu=2
192.168.31.12 cpu=2
192.168.31.13 cpu=2

Я в качестве названия указываю ip адрес, у этого подхода есть свой плюс, не надо настраивать dns. Сохраняем.

В системе LAM-MPI предусмотрена программа проверки работоспособности recon. Алгоритм ее работы таков: в соответствии с выбранным типом аутентификации recon пробует соединиться с машинами из конфигурационного файла lam-bhost.def если соединение удачное (удачным считается отсутствие какого-либо вывода на консоль при попытке соединения с удаленной машиной, для этого и настраивается беспарольный доступ), то происходит попытка запуска какого-либо приложения напримеp ps.
Вводим команду recon если она скажет Woo Hoo! То значит все настроено, верно. И можно запустить «вселенную» lam, это делается коммандой:

lamboot –v

Запускать ее нужно от имени того пользователя, для которого настроен беспарольный вход на ноды кластера. Теперь проверим, какие машины у нас участвуют в системе. Даем комманду lamnodes и смотрим вывод. По идее их количество должно совпадать с перечнем в lam-bhost.def. Это конфигурационный файл lam он находится в /etc/lam/lam-bhost.def
Можно попробовать запустить какую-нибудь программу, например cpi. Загрузка программ на исполнение в системе mpi производится с помощью специального загрузчика mpirun. Пример запуска:

mpirun –np 4 cpi

Разберем данную комманду. Загрузчику mpirun передается в параметрах –np <количество процессов> в идеале должно бы по-одному на каждый процессор! Ну и, собственно, название программы. Следует учесть, что предварительно необходимо перейти в каталог с программой.

Установка системы мониторинга GANGLIA

Ganglia это масштабируемая системы для мониторинга распределенных высокопроизводительных вычислительных систем, таких как кластеры и сети. Она основана на иерархической структуре кластеров. Используются технологии, такие как XML для представления данных, XDR для компактных портативных передачи данных, и RRDtool для хранения данных и визуализации. При мониторинге используются тщательно отлаженные инженерных структуры данных и алгоритмы для достижения низкой нагрузки на узлы.
Исходные тексты всегда можно загрузить на официальном сайте проекта ganglia.
Сама процедура установки сложностей не представляет:

tar -zxvf ganglia-3.0.6.tar.gz
cd ganglia-3.0.6
./configure --with-gmetad
make
make install

Настройка веб-сервера. Для настройки необходимо отредактировать конфигурационный файл, он располагается в каталоге:

/var/www/html/ganglia/conf.php

Рассмотрим выдержку из данного конфига, т.к. остальное его содержимое нас не интересует.
Рассмотрим его содержание:

Jobmonarch состоит из 3-х частей:
  • Jobmond – собирает XML-статистику от модуля Gmond, демон Jobmond написан на Python и должен быть запущен. На данный момент поддерживаются следущие системы управления заданиями: PBS, Torque.
  • Jobarchived – модуль архивации и записи в базу данных XML-отчетов, статистики по нодам. В качестве СУБД предписано использовать Postgres
  • WEB – фронтэнд для Jobmonarch

WEB
web

Установка

Заключается в копировании демонов в каталог /usr/local/sbin

cp jobmond/jobmond.py /usr/local/sbin/jobmond.py
cp jobmond/jobmond.conf /etc/jobmond.conf

Создаем базу для jobarchived:

createdb jobarchive
psql -f jobarchived/job_dbase.sql jobarchive
cp jobarchived/jobarchived.conf /etc/jobarchived.conf
cp jobarchived/jobarchived.py /usr/local/sbin/jobarchived.py

Установка WEB-фронтэнда:

cp -a web/templates/job_monarch /var/www/html/ganglia/templates
cp -a web/addons/job_monarch /var/www/html/ganglia/addons

Конфигурирование

Необходимо отредактировать:

  • /etc/jobmond.conf,
  • /etc/jobarchived.conf,
  • /var/www/html/ganglia/conf.php,
  • /var/www/html/ganglia/addons/job_monarch/conf.php

/etc/jobmond.conf:

BATCH_SERVER : localhost
GMETRIC_TARGET      : cluster.vtpm.local:8649

Необходимо найти директивы и установить их в соответствие с текущими параметрами. В GMETRIC_TARGET прописать имя машины и порт на котором висит демон gmetad.

/etc/jobarchived.conf:

GMETAD_CONF         : /etc/gmetad.conf
ARCHIVE_XMLSOURCE       : cluster.vtpm.local:8651
ARCHIVE_DATASOURCES     : "MSAU_Cluster"
JOB_SQL_DBASE           : localhost/jobarchive
RRDTOOL             : /usr/bin/rrdtool

Также необходимо вышеприведенные директивы установить в соответствие с текущими настройками систем. GMETAD_CONF – указать расположение конфигурационного файла демона gmetad. ARCHIVE_XMLSOURCE – источник XML – данных для переработки и записи в базу. ARCHIVE_DATASOURCES – очень важный момент, имя кластера должно полностью совпадать с соответствующим в настройках Ganglia. JOB_SQL_DBASE – имя базы для хранения архивных данных. RRDTOOL – путь к предварительно установленной утилите RRDTool.

/var/www/html/ganglia/conf.php:

$template_name = "job_monarch";

В конфиге Ganglia необходимо указать использование шаблона Job_monarch

/var/www/html/ganglia/addons/job_monarch/conf.php:

$GANGLIA_PATH = "/var/www/html/ganglia";
$DATA_SOURCE = '127.0.0.1:8651';
$JOB_ARCHIVE_DBASE = "127.0.0.1/jobarch";
$RRDTOOL = "/usr/bin/rrdtool";

В конфиге WEB-фронтэнда jobmonarch подлежат изменению следующие директивы: $GANGLIA_PATH – указать путь к WEB – интерфейсу Ganglia, $DATA_SOURCE – адрес демона Ganglia, $JOB_ARCHIVE_DBASE – адрес и имя базы данных для хранения архива, $RRDTOOL – путь к утилите RRDTool

Настройка системы PVM

Если абстрагироваться от вопроса программирования и технической реализации, то в целом система PVM представляет собой некий аналог LAM-MPI. Так же как и в LAM-MPI для работы необходим демон, который загружается на каждой используемой «ноде», на его плечи ложиться весь труд по организации обмена сообщениями между запущенными на разных машинах процессами. Отличие заключается только в том, что для пользователя – программиста, PVM представляется единой машиной с виртуальной консолью, к которой можно подключаться, точно так же, если бы это была «физическая» машина. Система LAM-MPI позволяет запускать на исполнение параллельные программы, но той виртуальной «монолитности» уже нет.

Установка системы. Для успешного запуска системы необходимо отредактировать файл /etc/hosts чтобы он содержал следующие записи:

127.0.0.1       localhost.localdomain localhost
192.168.31.1        cluster.vtpm.local cluster
192.168.31.11 m01.cluster m01
192.168.31.12 m02.cluster m02
192.168.31.13 m03.cluster m03

Не следует забывать, что при любых изменениях конфигурационных файлов, их необходимо также переносить и в директорию бездисковых станций, в нашем случае, это /diskless/root.

Для обеспечения максимальной производительности лучше сразу собирать пакет из исходных текстов, либо пересобрать программу установленную из rpm-пакета. Перед выполением компиляции необходимо добавить в файл ~./.bashrc содержимое файла /usr/share/pvm3/lib/bashrc.stub
По умолчанию PVM использует протокол rsh для общения с другими компьютерами кластера. Если вы хотите rsh заменить на ssh, вы должны изменить файл /pvm3/conf/LINUX.def, прописав в переменной ARCHCFLAGS параметр RSHCOMMAND, определив для него полный путь к команде ssh (например /usr/bin/ssh).

Например, на моем кластере файл /pvm3/conf/LINUX.def выглядит так:

ARCHCFLAGS  =   -DSYSVSIGNAL -DNOWAIT3 -DRSHCOMMAND=\"/usr/bin/ssh\" -DNEEDENDIAN -DFDSETNOTSTRUCT -DHASERRORVARS -DCTIMEISTIMET -DSYSERRISCONST -DNOTMPNAM
ARCHDLIB    =
ARCHDOBJ    =
ARCHLIB     =
HASRANLIB   =   t
AR      =   ar
PVM_ARCH    =   LINUX
MAKE        =   make

Затем последовательно выполняем комманды:

cd /usr/share/pvm3
make

Затем необходимо перезагрузить систему. Если при установке выбрать пакет PVM, то он создан в стандартной директории /usr/bin/pvm скрипт для запуска PVM. Необходимо отредактировать для того чтобы использовать ssh вместо rsh:

/usr/bin/pvm:

#!/bin/sh

PVM_ROOT=/usr/share/pvm3

if [ "$PVM_RSH" = "" ]; then
    export PVM_RSH="/usr/bin/ssh"  #здесь необходимо заменить на ssh
fi

export PVM_ROOT

exec /usr/share/pvm3/lib/pvm "$@"

После перезагрузки можно запустить PVM для этого необходимо выполнить комманду:

pvm

Появится приглашение консоли:

pvm>

Теперь необходимо добавить в машины, делается это командой add, например:

pvm>add m01
pvm>add 192.168.31.11
pvm>add m01.cluster

Команда add позволяет задавать имя машины как в виде ip-адреса, так и в виде короткого и полного имени компьютера. В случае успешного добавления будет выводиться сообщение:

pvm>add 192.168.31.11
add 192.168.31.11
yuri@node1's password:
1 successful
        HOST        DTID
        192.168.31.11           80000
pvm>

Тестирование производительности

HPL

Тест HPL написан с использованием библиотеки Linpack. Она была разработана для работы на суперкомпьютерах, которые использовались в 1970-х и начале 1980-х годов. В настоящее время Linpack заменила другая библиотека – Lapack, которая работает более эффективно на современных компьютерах. Существуют версии библиотеки для чисел c плавающей точкой с разной точностью и для комплексных чисел. Появилась реализация библиотеки, написанная на Си.
На базе этой библиотеки был создан тест Linpack benchmark. Тест оценивает количество операций с плавающей точкой (FLOPS) в секунду. На основе этого теста составляется список 500 самых быстрых компьютеров мира. http://www.top500.org/

Для установки теста необходимо:
— наличие одной из реализаций MPIустановленная библиотека BLAS + VSIPL или ATLAS или goto_BLAS.

  • наличие последней более предпочтительно, т.к. она значительно более оптимизирована под современные процессоры

Установка MPICH

Ничего сложного собой не представляет.

tar -xzvf mpich.tar.gz
./configure –-prefix=/opt/mpich -–with-device=ch_p4 -–rsh=/usr/bin/ssh
make && make install

Конфигурация перед сборкой выполнена с назначение целевой директории, которую необходимо создать перед установкой. Это сделано, для того, чтобы не устанавливать mpich для бездисковых машин, благо у нас директория /opt экспортируется на все машины кластера.
Установка goto_BLAS. Будем так же устанавливать в директорию /opt.

mkdir /opt/goto_BLAS
tar zxvf GotoBLAS-<версия>.tar.gz

Следующим шагом нам необходимо отредактировать Makefile.rule:

BINARY64=0 #запрещаем использование 64 битных инструкций
SMP=1 #устанавливаем, многопроцессорную архитектуру
MAX_THREADS=2 #максимальное количество потоков на машину (2 процессора -2 потока)

Собираем:

./quickbuild.32bit

В итоге получаются 2 бинарника: libgoto_athlonp-r1.23.so и libgoto¬_athlonp-r1.23.a

Их необходимо скопировать в папку с исходниками HPL, что мы и выполним следующим шагом.
Установка HPL. Для успешной сборки необходимо создать Makefile, соответствующий нашей архитектуре, установленным библиотекам, пути к ним, успользуемым компиляторам и т.д.
Пример моего файла:

# Пример Make файла для компиляции HPL 

#################
# SHELL#
#################
SHELL        = /bin/sh
CD           = cd
CP           = cp
LN_S         = ln -s
MKDIR        = mkdir
RM           = /bin/rm -f
TOUCH        = touch

####################
#Название платформы#
####################
ARCH         = mpich_goto

#########################
#Структура каталогов HPL#
#########################
TOPdir       = /opt/hpl
INCdir       = $(TOPdir)/include
BINdir       = $(TOPdir)/bin/$(ARCH)
LIBdir       = $(TOPdir)/lib/$(ARCH)
HPLlib       = $(LIBdir)/libhpl.a

#############################
#Опции компилятора и линкера#
#############################
CC           = /opt/mpich/bin/mpicc
NOOPT        =
CCFLAGS      = -fomit-frame-pointer -O3 -funroll-loops -Bstatic
# На некоторых платформах необходимо указать линкер для Fortran
LINKER       =  /opt/mpich/bin/mpif77
LINKFLAGS    = $(CCFLAGS) -lm -B static
ARCHIVER     = ar
ARFLAGS      = r
RANLIB       = echo

#####
#MPI#
#####
# Настройки для подключения библиотеки MPI здесь не нужны.
# Они учтены в скриптах mpiсс, mpif77
MPdir        =/opt/mpich
MPinc        = -I$(MPdir)/include
MPlib        = -L$(MPdir)/lib $(MPdir)/lib/libmpich.a

######
#BLAS#
######
# LAdir – каталог установки BLAS
# LAinc – каталог заголовочных файлов BLAS
# LAlib – путь к библиотекам
# F2CDEFS не определяется в случае использования интерфейса на языке с к
# библиотеке BLAS
F2CDEFS      =
LAdir        = /opt/hpl
LAinc        =
#LAlib        = $(LAdir)/libcblas.a $(LAdir)/libatlas.a
#LAlib     = $(LAdir)/libPLAPACK.a
LAlib       =$(LAdir)/libgoto_athlonp-r1.23.a
#
# Опции компилятора и линковщика указывающие пути к заголовочным файлам
# и библиотекам
#
HPL_INCLUDES = -I$(INCdir) -I$(INCdir)/$(ARCH) $(LAinc) $(MPinc)
HPL_LIBS     = $(HPLlib) $(LAlib) $(MPlib)
#
# Используем интерфейс С к BLAS
#
HPL_OPTS     = -DHPL_CALL_CBLAS
#
# ----------------------------------------------------------------------
#
HPL_DEFS     = $(F2CDEFS) $(HPL_OPTS) $(HPL_INCLUDES)
#
# ----------------------------------------------------------------------

Данный файл создаем в директории /opt/hpl, он называется Make.mpich_goto, соответственно команда для сборки будет выглядеть так:

cp libgoto* /opt/hpl
cd /opt/hpl
make arch=mpich_goto

После чего в директории /opt/hpl/bin/mpich_goto появятся 2 файла, один xhpl – бинарный файл, другой HPL.dat – содержит описание настроек для запуска теста.

HPLinpack benchmark input file
Innovative Computing Laboratory, University of Tennessee
HPL.out      output file name (if any)
6            device out (6=stdout,7=stderr,file)
1            # of problems sizes (N)
35  Ns
1            # of NBs
20      NBs
0            PMAP process mapping (0=Row-,1=Column-major)
1            # of process grids (P x Q)
1        Ps
2        Qs
16.0         threshold
3            # of panel fact
0 1 2        PFACTs (0=left, 1=Crout, 2=Right)
2            # of recursive stopping criterium
2 4          NBMINs (>= 1)
1            # of panels in recursion
2            NDIVs
3            # of recursive panel fact.
0 1 2        RFACTs (0=left, 1=Crout, 2=Right)
1            # of broadcast
0            BCASTs (0=1rg,1=1rM,2=2rg,3=2rM,4=Lng,5=LnM)
1            # of lookahead depth
0            DEPTHs (>=0)
2            SWAP (0=bin-exch,1=long,2=mix)
64           swapping threshold
0            L1 in (0=transposed,1=no-transposed) form
0            U  in (0=transposed,1=no-transposed) form
1            Equilibration (0=no,1=yes)
8            memory alignment in double (> 0)

Предварительно необходимо указать mpich доступные машины, записываем их в файл /opt/mpich/share/examples. Команды для запуска теста:

cd /opt/hpl/bin/mpich_goto
/opt/mpich/bin/mpirun –np 8 ./xhpl

Для различных параметров –np необходимо подбирать соответствующих размер матрицы, для этого перед каждым прогоном редактируем файл HPL.dat изменяя в нем параметры Ps и Qs.

Таблица 1
Таблица соответствия размера матрицы количеству запускаемых процессов

Значение-np 2-np 4-np 6-np 8
Ps1111
Qs2434

Таблица 2
Таблица прогона теста при различных значениях параметра –np

Тест-np 2-np 4-np 6-np 8
WR00L2L21.164e-031.247e-032.168e-032.386e-03
WR00L2L41.199e-031.712e-038.657e-038.642e-03
WR00L2C21.208e-031.744e-038.916e-039.277e-03
WR00L2C41.243e-031.735e-039.312e-039.306e-03
WR00L2R21.239e-031.778e-039.430e-039.453e-03
WR00L2R41.266e-031.845e-039.551e-039.524e-03
WR00C2L21.220e-031.710e-037.240e-039.255e-03
WR00C2L41.211e-031.718e-039.185e-039.263e-03
WR00C2C21.216e-031.740e-039.336e-039.329e-03
WR00C2C41.228e-031.689e-039.337e-039.378e-03
WR00C2R21.245e-031.726e-039.533e-039.533e-03
WR00C2R41.249e-031.810e-039.309e-039.450e-03
WR00R2L21.251e-031.787e-039.442e-039.380e-03
WR00R2L41.249e-031.789e-039.483e-039.462e-03
WR00R2C21.250e-031.773e-039.445e-039.433e-03
WR00R2C41.249e-031.770e-039.468e-039.421e-03
WR00R2R21.278e-031.905e-039.557e-039.539e-03
WR00R2R41.277e-031.888e-039.677e-039.688e-03
Среднее значение1.407e-031.853e-038.835e-038.984e-03

График

Вывод:
На основе данных прогона теста HPL с различными параметрами (размером матрицы, количеством процессов, размером пересылаемого блока и т.д.) определился максимально достижимый на практике «потолок» производительности кластера. Напомню, что кластер состоит из 4-х одинаковых машин, в каждой 2 процессора Athlon MP 2Ghz и 1Gb ОЗУ. «Потолок» производительности, так называемая «пиковая производительность» равна 9,7 GFlop.

POVRAY

Благодаря доступности и распространенности, Povray часто используется для тестов производительности компьютеров, а полученные результаты публикуются в Интернете.
Например, на сайте http://www.tabsnet.com отмечается время рендеринга с определенными настройками качества и размера одной и той же картинки — модели с шахмат на разных вычислительных платформах.

Сборка и установка дистрибутива povray

Оригинальный дистрибутив не имеет возможности распараллеливания процесса рендеринга и вообще использования технологии MPI. Для получения данной возможности необходима пересборка povray с наложением патча от Andreas Dilger данный патч добавляет в исходный код процедуры для взаимодействия с библиотекой lam/mpi. Есть также модификация povray под PVM.
Процесс установки и сборки выглядит следующим образом:

  1. Скачиваем архив с исходными текстами povray версии 3.1g с www.povray.org
  2. Также необходим сам патч mpi-povray-1.0.patch.gz он написан строго под версию 3.1g
  3. Распаковываем povray:tar xvfz povuni_s.tga
  4. Накладываем патч:

    cd povray31; gzip -dc mpi-povray*.patch.gz | patch -p1

  5. Переходим в директорию для сборки исполняемого файла:

    cd povray31/source/mpi-unix

  6. Необходимо отредактировать Makefile для выбора типа архитектуры и задания ключей оптимизации. Находим в файле Makefile строку вида:

    CFLAGS = -O6 –finline-functions –ffast-math –c –ansi –march=i386 –DCPU=i586 –DCOMPILER_VER=\”.uname.$(CC)\” –DPOV_LIB_DIR=\”$(POVLIBDIR)\” $(SRCINC) $(LIBPNGINC) $(ZLIBINC) $(MPIINC)

В данной строке ключевое значение имеют директивы –march и –DCPU, у меня они заданы –march=i386 и –DCPU=i586 соответственно.
7. Собираем исполняемый файл: make newxwin
8. Структура команды запуска povray на исполнение:

mpirun -np ? ./mpi-x-povray [options]

В качестве измерения производительности кластера, помимо расчета классического числа pi. Можно использовать более наглядные методы, например рендеринг изображений, что все-таки более полезно. Рассмотрим ряд распространенных тестов. Например, skyvase.pov, chess2.pov.

Тест skyvase.pov

skyvase

Вся суть теста заключается в рендеринге изображения и регистрации затраченного времени.
Скачивается специальный файл для Povray под названием skyvase.pov он представляет из себя описание приведенной выше вазы, на основе которого будет происходить рендеринг изображения. Povray у нас установлен в директорию:

/home/vrn/p/povray31/source/mpi-unix

Команда для запуска рендеринга будет выглядеть следующим образом:

cd  /home/vrn/p/povray31/source/mpi-unix
mpirun –np 8 ./mpi-x-povray –i skyvase.pov +v1 –d +ft –x +a0.300 +r3 –q9 –w640 –h480 –mv2.0 +b1000 +L../../include
lamclean

Как я уже рассказвал чуть выше. Запускаем с помощью загрузчика mpirun в качестве количества процессов, выбираем по одному на каждый процессор, у нас их 8 поэтому параметр выглядит следующим образом:

-np 8

Далее идет запуск пропатченного и собранного povray из текущей директории, затем указываются параметры для самого povray.

график

В заключение этого теста можно сделать следующие выводы: минимально достижимое время это 2 сек., наступает после запуска 6 процессов. Дальнейшее наращивание количества процессов никакой роли не играет (замечу, что при запуске 6 процессов задействуются только 3 машины, 4-я стоит без дела). Сей факт наводит на мысль о том, что или мы уже начинаем «упираться» в пропускную способность сети кластера или просто тест так написан.

Тест chessmark
Теперь рассмотрим популярный тест chessmark с сайта tabsnet.de Вот изображение, которое получается в итоге:

chessmark

Строка для запуска теста на нашем кластере выглядит следующим образом:

mpirun –np 9 ./mpi-x-povray –d –q9 +w800 +h600 +b1000 +r3 +a0.300 +ft –i../../scenes/advanced/chess2.pov +L../../include

Тем самым запускаем 9 процессов (максимально допустимое полезное количество). Посмотрев в список задач, я обнаружил два процесса, один из которых занимал 100% вычислительных ресурсов, а второй… как будто ничего не делал. Запуск с ключом -np 3 подтвердил догадку, дав выигрыш в производительности! Таким образом, оптимальное количество процессов рассчитывает по формуле, с учетом того, что у нас 2-х процессорные машины и собрано специальное ядро для многопроцессорных машин:

формула (1)

Где Knp – значение параметра –np для загрузчика mpirun, Kм – количество доступных машин. Тем самым и получаем искомое значение в 9 процессов. 8 рабочих и 1 управляющий, см. рис. ниже.

View post on imgur.com

Результаты теста:

График

Минимально достижимое время составляет 47 секунд. Данный результат показывает, что мы должны находиться на 15-й строчке в итоговом протоколе результатов.

chessmark results

По результатам этого теста могу сделать следующий вывод:
Данный тест более корректный, чем предыдущий, так как время работы системы значительно больше и уже можно отбросить гипотезу, «упираемся в потолок производительности сети». Но в целом кривая результатов схожая. И дальнейшее увеличение количества процессов никакого выигрыша в производительности не играет. Таким образом, мы вывели формулу для оптимального количества процессов для запуска на кластере (1).

Сборка и установка системы transcode

Пакет transcode предназначен для кодирования видео и аудио файлов в различные форматы. Самый важный для нас момент заключается в том, что пакет transcode можно собрать с поддержкой pvm3 и получить выигрыш в производительности. А, как всем известно, сжатие и перекодирование мультимедийных файлов является одной из самых «тяжелых» для процессора операций. Так же он хорош тем, что для него существует специальная надстройка dvd::rip с удобным графическим интерфейсом.
Для установки transcode необходимо иметь полностью настроенную систему PVM, а также минимально необходимый перечень кодеков, для работы с различными форматами мультимедиа. Вот их краткий перечень:

  • ffmpeg
  • libavcodec
  • mpeg2dec
  • libmpeg2
  • libmp3lame
  • libdvdread

Качаем архив с http://www.transcoding.org/. Я пробовал собирать версии 1.0.4 и 1.0.5, последняя собираться отказалась.
Для того чтобы при сборке не иметь проблем с ffmpeg, последнего необходимо сконфигурировать для поддержки динамической линковки библиотек, для этого команду конфигурации перед сборкой необходимо выполнить со следующими параметрами:

./configure --enable-pp --enable-liba52 --enable-liba52bin --enable-libmp3lame --enable-libvorbis --enable-gpl --enable-x11grab --enable-shared

Распаковываем куда-нибудь архив с исходниками. Переходим в папку с распакованными исходниками и конфигурируем transcode:

env CFLAGS="-O3 -march=athlon" ./configure --enable-pvm3 --with-pvm3-includes=/usr/share/pvm3/include --with-pvm3-libs=/usr/share/pvm3/lib/LINUX --with-libavcodec-prefix=/usr/local --with-libavcodec-includes=/usr/local/include --enable-netstream --with-libmpeg2-prefix=/usr/local --with-libmpeg2-includes=/usr/local/include --with-libmpeg2-libs=/usr/local/lib --with-x --enable-libpostproc --with-libpostproc-prefix=/usr/local --with-libpostproc-includes=/usr/local/include/postproc --with-libpostproc-libs=/usr/local/lib --enable-libdv --enable-gtk --enable-ogg –enable-libxml2 –enable-lzo –enable-vorbis –enable-freetype2 –enable-a52

Разберем кратко данную команду:
Перед запуском скрипта ./configure мы предварительно сообщаем компилятору, тип оптимизации при сборке и архитектуру нашей системы athlon. Если скрипт не вывел никаких ошибок то можно приступать к сборке, набираем make, затем make install.

Установка GUI интерфейса для transcode dvd::rip

Данная надстройка написана на языке Perl и специально предназначена для удобной работы с кодировщиком transcode. Плюс у нее есть одно неоспоримое преимущество, оно для нас самое важное – это возможность обеспечить кодирование видео в параллельном режиме, здесь используется технология pvm. Поэтому, чтобы иметь возможность кодировать необходимо иметь полностью настроенный и рабочий кластер.

transcode gui

Как видно из рисунка, dvd::rip настроен на использование 3-х машин в кластере, также представлен скриншот окна консоли удаленной бездисковой машины, в котором выведен вывод команды top. В нем представлены процессы выполняющиеся на удаленной машине. Видно что запущен процесс transcode.

Сборка и установка системы перебора паролей cisilia

Проект cisilia был создан с целью провести различные тесты и оценить возможность исследования различных способов перебора паролей методом, т.н. «грубой силы» — bruteforce.
Для этого необходимы высокопроизводительные компьютеры. Это может быть достигнуто с помощью суперкомпьютера или кластера из дешевых компьютеров, соединенных вместе. В настоящее время известно большое количество утилит для подбора паролей (например, l0phtcrack, john the ripper и т.д.), но проект cisilia был специально разработан для работы на кластерах.
Cisilia это мультипроцессная система для перебора паролей для платформы Linux. Последняя версия Cisilia (0.7.3) может «восстанавливать» пароли Windows NT/2000/XP или Samba путем расчета DES/MD4 хэшей. Несмотря на наличие возможности атаки по словарю, задача Cisilia заключается в том, чтобы подобрать пароль путем параллельного брутфорса. Вот почему данное приложение было написано как многопроцессная система для многопроцессорных систем (SMP), и параллельных кластерных систем с функцией балансировки нагрузки (например: openMosix).
Процесс установки не вызывает особых сложностей. Скачиваем исходные тексты или rpm-пакеты с сайта разработчика http://www.citefa.gov.ar
Затем, если решили собирать из исходников, то команды стандартные:

tar -xzvf cisilia-0.7.3.tar.gz
cd cisilia-version 
./configure
make &  make install

Если решено производить установку из rpm-пакетов, то последовательность команд следующая:

rpm –ihv cisilia-<version>.i386.rpm
rpm –ihv xisilia-<version>.i386.rpm

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

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.