Лаборатория   информационных   технологий 

"Содержание"

2. Система локального мониторинга ЦИВК ОИЯИ

В 2011 г. был выполнен ряд работ по развитию и расширению функциональности системы локального мониторинга ресурсов ЦИВК ЛИТ ОИЯИ (http://litmon.jinr.ru/). Система была разработана на базе свободно распространяемого программного продукта Nagios, ряда дополнений, а также написанных специально для нужд ЦИВК плагинов (подключаемых программных модулей). В соответствии со спецификой контроля и обслуживания объекты локального мониторинга можно распределить по трем уровням.

1) На нижнем (аппаратном) уровне осуществляется сбор и отображение данных об отдельных узлах сети, их аппаратном и программном обеспечении; проверяется доступность их по сети, загруженность процессоров и памяти, состояние источников питания, температурный режим. К настоящему моменту в системе представлены:

    • мониторинг серверов с использованием Nagios Remote Plugin Executor (около 350 машин) — состояние процессоров, оперативной и дисковой памяти, аппаратное и программное обеспечение;

    • источники бесперебойного питания (APC) — SNMP-мониторинг;

    • вентиляционные блоки серверных стоек (APC) — SNMP-мониторинг;

    • установка климат-контроля (Stulz) — SNMP-мониторинг.

2) На сетевом уровне рассматриваются устройства и службы, обеспечивающие работу локальной сети, а также доступность необходимых для работы внешних сетей. Система осуществляет мониторинг:

    • коммутаторов HP Procurve (состояние памяти и загрузки процессоров, характеристики портов) — SNMP-мониторинг;

    • агрегированных соединений (trunks) — SNMP-мониторинг, MRTG;

    • внешнего канала.

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

    • базовые службы SMTP, POP, DNS, E-mail (с помощью стандартных Nagios-плагинов);

    • файловая система DCACHE (разработанные В. Трофимовым скрипты для сбора метрик, запускаемые с помощью NRPE);

    • служба gFTP;

    • RAID-массивы (3Ware, Adaptec), обеспечивающие работу DCACHE (интегрированные в единый плагин средства мониторинга RAID соответствующих фирм-производителей).

Кроме того, в рамках работ по развитию tier3-мониторинга была успешно исследована возможность мониторинга системы хранения данных XRootd с помощью модуля пассивных проверок Nagios под названием NSCA (Nagios Service Check Acceptor).

Текущий web-интерфейс системы локального мониторинга реализован на языке программирования PHP с использованием XHTML и Javascript для разметки страниц и представления данных. Для добавления возможности автоматического обновления графиков в реальном времени была использована технология AJAX (jQuery). В основном режиме работы пользователю доступно дерево объектов, где на верхнем уровне находятся группы хостов, а “листьями” дерева являются сами хосты и в некоторых случаях — отдельные сервисы-проверки (рис. 3). Слева — дерево объектов, справа — фрагмент отчета о состоянии коммутатора HP Procurve. Виден график изменения величины загрузки процессора, графики загруженности трех из 24 портов, а также данные о свободной памяти и работе системы охлаждения. Для каждого хоста динамически генерируется страница с данными по всем определенным для него сервисам — текущее состояние, график значений за прошедшие сутки и другие вспомогательные данные.

Создано несколько специальных отображений, позволяющих более наглядно оценить состояние той или иной группы сервисов и проследить взаимосвязь между объектами. Для этого задействован NagVis — обладающее широкими возможностями дополнение к Nagios для визуализации состояния хостов и сервисов, позволяющее размещать объекты на графических картах и визуализировать IT-процессы. Так, с его помощью создано обзорное отображение, где на структурную схему сети наложены маркеры, характеризующие состояние соответствующих объектов.

Рис. 3. Web-интерфейс системы

Для группы сервисов, относящихся к dCache, создано отображение, позволяющее сравнить наблюдаемые значения проверяемых параметров для экспериментов Atlas и CMS. Ряд отображений создан без помощи NagVis — это отчетная таблица по дисковым массивам с указанием состояния каждого контроллера и типа нештатной ситуации при ее наличии, а также сводки данных по серверам (с распределением их по стойкам, ИБП, администраторским группам).

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

П. Дмитриенко (orelnotre@mail.ru)

3. Библиотека программ ScaLAPACK

Введение

Библиотека с открытым исходным кодом ScaLAPACK (Scalable Linear Algebra Package) [1] является версией библиотеки LAPACK [2] для параллельных вычислений. Она содержит подпрограммы решения систем линейных уравнений, обращения матриц, нахождения собственных значений и собственных векторов и др. Библиотека написана на языке Fortran 77 (за исключением нескольких подпрограмм симметричных проблем на собственные значения, написанных на языке C) и ориентирована на работу в системах с архитектурой MIMD (Multiple Instruction stream, Multiple Data stream) и программным обеспечением PVM (Parallel Virtual Machine) [3] и/или MPI (Massage Passing Interface) [4].

ScaLAPACK относится к числу параллельных библиотек, при обращении к которым пользователю не приходится явно применять какие-либо конструкции специальных языков параллельного программирования или интерфейсов, поддерживающих взаимодействие параллельных процессов. Все необходимые действия по “распараллеливанию” выполняются подпрограммами из специально разработанных для этих целей пакетов.

В библиотеке ScaLAPACK можно выделить локальные и глобальные компоненты (рис. 4). К локальным компонентам относятся пакеты LAPACK (Linear Algebra Package) [2], BLAS (Basic Linear Algebra Subprograms) [5], BLACS (Basic Linear Algebra Communication Subprograms) [6]. Эти компоненты ориентированы на работу в однопроцессорном режиме. К глобальным компонентам относится параллельный вариант пакета BLAS — пакет PBLAS (Parallel BLAS) [7].

Библиотека LAPACK содержит последовательные подпрограммы линейной алгебры, оптимизированные для разнообразных процессоров, и в однопроцессорном режиме решает задачи обращения матриц, нахождения собственных векторов и собственных значений и др. Для повышения эффективности промежуточных операций умножения матрица—матрица используется библиотека BLAS, которая также ориентирована на работу на одиночных процессорах. Пакет PBLAS выполняет эти операции в распределенной памяти в параллельном виде. Особо примечателен пакет BLACS. Эта библиотека основана на модели одно- или двумерной сетки вычислительных процессов, где каждый процесс имеет дело только со своим фрагментом матрицы или вектора и занимается пересылкой/приемом данных между этими процессами с помощью соответствующего программного пакета (PVM и/или MPI).

Для работы с библиотекой программ ScaLAPACK пользователю необходимо выполнить:

1) построение модели сетки процессов;
2) ввод данных в необходимые области;
3) обращение к нужной подпрограмме для решения задачи;
4) компиляцию, запуск и получение результатов.

Рассмотрим каждый шаг более подробно.

Рис. 4. Иерархия библиотеки ScaLAPACK

Построение модели сетки процессов

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

CALL BLACS_PINFO (IAM, NPROCS)
CALL BLACS_GET (-1, 0, ICTXT)
CALL BLACS_GRIDINIT (ICTXT, 'Row-major', NPROW, NPCOL)

Как правило, выходной параметр IAM указывает номер текущего процесса, а NPROCS — общее количество процессов. Второй параметр подпрограммы BLACS_GET указывает на порядок расположения процессов в модельной сетке, при его нулевом значении порядок принимается по умолчанию. 'Row-major' ('Column-major') или просто 'R' ('C') указывают на строчную (столбцевую) ориентированность разделения областей. Если входные параметры NPROW и NPCOL заданы в виде пары (2, 3), то после этих трех строк программы мы получим сетку размером 2 ´  3. В данном случае для решения задачи нам требуется количество процессов, кратное 6.

Чтобы определить, какой процесс исполняется, можно использовать следующую подпрограмму библиотеки BLACS:

CALL BLACS_GRIDINFO (ICTXT, NPROW, NPCOL, MYROW, MYCOL)

В результате пара MYROW и MYCOL определит точку (текущий процесс) в сетке процессов. Полученную информацию о распределении области нужно использовать для ввода и манипулирования данными внутри пакета ScaLAPACK. Для этого информация помещается в целый одномерный массив (дескриптор) DESCA (или DESCB, если решается задача с правой частью) размерностью 9.

Построим модель сетки процессов для решения систем линейных уравнений AX = B с заполненной квадратной матрицей A.

С помощью подпрограммы DESCINIT пакета ScaLAPACK присвоим необходимые значения:

CALL DESCINIT (DESCA, M, N, MB, NB, RSRC, CSRC, ICTXT, MXLLDA, INFO)
CALL DESCINIT (DESCB, N, NRHS, NB, NBRHS, RSRC, CSRC, ICTXT, MXLLDB, INFO)

Это эквивалентно следующим операторам присваивания:

DESCA(1) = 1
DESCA(2) = ICTXT
DESCA(3) = M
DESCA(4) = N
DESCA(5) = MB
DESCA(6) = NB
DESCA(7) = RSRC
DESCA(8) = CSRC
DESCA(9) = MXLLDA
DESCB(1) = 1
DESCB(2) = ICTXT
DESCB(3) = N
DESCB(4) = NRHS
DESCB(5) = NB
DESCB(6) = NBRHS
DESCB(7) = RSRC
DESCB(8) = CSRC
DESCB(9) = MXLLDB

Значения переменных:

M — число строк матрицы A системы (глобальный размер массива A);
N — число столбцов матрицы A системы (глобальный размер массива A);
MB — число строк блока в разбиении матрицы A;
NB — число столбцов блока в разбиении матрицы A;
NRHS — число столбцов матрицы B (число правых частей);
NBRHS — число столбцов в блоке в разбиении матрицы B;
RSRC, CSRC — начальная координата распределения матрицы по сетке;
MXLLDA — максимальный размер массива A, приходящийся на один процесс (локальный размер массива A);
MXLLDB — максимальный размер массива B, приходящийся на один процесс (локальный размер массива B).

Ввод данных в необходимые области

На рис. 5 продемонстрирован способ распределения исходной матрицы размерностью 9 ´  9 между процессами в сетке размерностью 2 ´  3:

Рис. 5. Распределение элементов матрицы между процессами (сетка 2 ´  3)

Правая часть будет распределена точно таким же способом. Для одномерной правой части уместно следующее распределение:

[b1 b2 b5 b6 b9 | b3 b4 b7 b8],

так как она распределяется только между процессами (0, 0) и (1, 0).

Приводим значения всех параметров, описанных выше, в рамках примера на рис. 5:

M = N = 9; MB = NB = 2; NRHS = 1; NBRHS = 1; RSRC = CSRC =0;
MXLLDA = 5; MXLLDB = 5
.

Все эти параметры определяются пользователем.

Обращение к подпрограмме

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

CALL PDGESV (N, NRHS, A, IA, JA, DESCA, IPIV, B, IB, JB, DESCB, INFO)

Здесь: IPIV — целый одномерный массив размерностью MXLLDA + NB;

IA, JA — индексы массива A (IA: IA + M - 1, JA: JA + N - 1);
IB, JB — индексы массива B (IB: IB + N - 1, JB: JB + NRHS - 1);
INFO — выходной параметр целого типа.

Параметры IA, JA, IB, JB чаще выбирают равными 1, тогда индексы массивов A и B, находящиеся в отдельных процессах, начинаются с (1, 1). Если глобальные массивы выбраны в полном размере, в соответствии с размером исходной матрицы, то эти индексы можно варьировать.

Компиляция, запуск и получение результатов

На вычислительной ферме ЦИВК библиотека ScaLAPACK и ее составляющие BLACS, BLAS и LAPACK собраны компилятором ifort версии 11.1 и размещены в директории

/afs/jinr.ru/scalapack/lib/

Пользовательская программа myprog.f, использующая программы из этой библиотеки с технологией MPI, может быть скомпилирована следующим образом:

lxpub01:~ > USRLIB=/afs/jinr.ru/scalapack/lib/
lxpub01:~ > mpif77 -o myprog myprog.f $USRLIB/libscalapack.a \
$USRLIB/libblacsF77init.a $USRLIB/libblacs.a $USRLIB/libblacsF77init.a \
$USRLIB/liblapack.a $USRLIB/libblas.a /opt/openmpi/lib/libmpi.so -lnsl

Запуск полученной в результате компиляции программы myprog на кластере ЦИВК осуществляется следующим образом:

lxpub01:~ > qsub myprog.sh,

где запускающий скрипт-файл myprog.sh может содержать строки:

#PBS -q defq

#PBS -l walltime=00:05:00
#PBS -l cput=00:20:00
#PBS -l nodes=4
echo "========= begin =========="
cd $PBS_O_WORKDIR 2>&1
if test -x myprog ; then
mpiexec ./myprog 2>&1
else
echo "executable not found in "`pwd`
fi
echo "========= end ==========="
echo "done"

Подпрограммы библиотеки ScaLAPACK

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

Символ X может принимать значения: S — для вычислений с одинарной точностью, D — с двойной точностью, C — с комплексными значениями и Z — с комплексными значениями двойной точности. Пара YY указывает вид матрицы и принимает следующие значения:

DB — ленточная общего вида (хорошо обусловленная);
DT — трехдиагональная общего вида (хорошо обусловленная);
GB — ленточная общего вида;
GE — общего вида (несимметричная, возможно прямоугольная);
GG — общего вида (обобщенные задачи);
HE — эрмитова;
OR — ортогональная;
PB — симметричная или положительно определенная ленточная эрмитова матрица;
PO — симметричная или положительно определенная эрмитова матрица;
PT — симметричная или положительно определенная трехдиагональная эрмитова матрица;
ST — симметричная трехдиагональная;
SY — симметричная;
TR — треугольная (квазитреугольная);
TZ — трапециевидная;
UN — унитарная.

ZZZ указывает на вычислительные особенности с указанными матрицами. Например, PDGESVX означает: D — подпрограмма с двойной точностью; GE — используемая в подпрограмме матрица имеет общий вид (квадратичный или прямоугольный, несимметричный); SVX — решение плохо обусловленных систем уравнений (экспертный случай), если задается только SV, то имеется в виду решение хорошо обусловленных систем уравнений (простой случай).

Ниже приводятся функциональные таблицы пакета ScaLAPACK. В таблицах обозначено: SPD — симметричная положительно определенная; GQR — обобщенное QR разложение; GRQ — обобщенное RQ разложение; BSPD — ленточная SPD; SVD — сингулярное разложение.

В таблицах использованы сокращения:

пр. — простой (simple) — хорошо обусловленная матрица;
эксперт. — экспертный (expert) — плохо обусловленная матрица или система уравнений;
факториз. — факторизация, разложение матрицы;
решение — решение с матрицей;
обращение — обращение матрицы;
оценка — вычисления различных оценок (норма, невязка) полученного результата, решения;
итерац. уточнение — итерационное уточнение полученного результата, решения;
редукция — приведение к специальному виду, например, симметричная матрица приводится к трехдиагональному.

Решения систем уравнений AX = B:

Матрица

пр.

эксперт.

факториз.

решение

обращение

оценка

итерац. уточнение

Треугольная

     

+

+

+

+

SPD

+

+

+

+

+

+

+

BSPD

+

 

+

+

     

SPD 3-диагональная

+

 

+

+

     

Общая

+

+

+

+

+

+

+

Общая ленточная

+

 

+

+

     

Общая
3-диагональная

+

 

+

+

     

Наименьших квадратов

+

 

+

+

     

GQR

   

+

       

GRQ

   

+

       

Собственные значения и собственные векторы:

Задача

простой

экспертный

редукция

решение

Симметричная

+

+

+

+

Общая

+

+

+

+

Обобщенная BSPD

+

 

+

+

SVD

   

+

+

Библиографический список

  1. ScaLAPACK Users’ Guide / Blackford L. S. [at al.] // Society for Industrial and Applied Mathematics. — PA, Philadelphia, 1997. — Электрон. дан. — Режим доступа: http://www.netlib.org/scalapack/.

  2. LAPACK Users’ Guide / Anderson E. [at al.] // Society for Industrial and Applied Mathematics. — second ed. — PA, Philadelphia, 1995. — Электрон. дан. — Режим доступа: http://www.netlib.org/lapack/.

  3. PVM: Parallel Virtual Machine. A Users’ Guide and Tutorial for Networked Parallel Computing / Geist A. — MA, Cambridge : MIT Press, 1994.

  4. MPI: A message passing interface standard // International Journal of Supercomputer Applications and High Performance Computing. — 1994. — № 8. — p. 3—4. (M. P. I. Forum. Special issue on MPI). — Электрон. дан. — Режим доступа: ftp://www.netlib.org/mpi/mpi-report.ps.

  5. Algorithm 679: A set of Level 3 Basic Linear Algebra Subprograms / Dongarra J. J. [at al.] // ACM Trans. Math. Soft. — 1990. — № 16. — p. 1—17.

  6. Dongarra, J. Two dimensional basic linear algebra communication subprograms / J. Dongarra and R. van de Geijn // Computer Science Dept. Technical Report CS-91-138. — TN, Knoxville : University of Tennessee, 1991.

  7. A proposal for a set of parallel basic linear algebra subprograms / Choi J. [at al.] // Computer Science Dept. Technical Report CS-95-292. — TN, Knoxville : University of Tennessee, 1995.

  8. Букатов, А. А. Программирование многопроцессорных вычислительных систем / А. А. Букатов, В. Н. Дацюк, А. И. Жегуло. — Ростов-н/Д. : ЦВВР, 2003. — Гл. 14. Библиотека подпрограмм ScaLAPACK. — Электрон. дан. — Режим доступа: http://www.ict.edu.ru/ft/003626/rsu_bukatov.pdf.
Э. Душанов (dushanov@jinr.ru)
Т. Сапожникова (tsap@jinr.ru)


"Содержание" "Раздел II (1)"