Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Konspekt_Trsipv_Ch_1.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.7 Mб
Скачать

13.8 Управление конфигурацией вычислительного кластера средствами pvm

Управление вычислительным кластером складывается из двух частей:

  1. сбора информации о состоянии кластера в целом и отдельных его хостов;

  2. изменение конфигурации или режима работы кластера.

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

Если какой-то из хостов не удается включить в ВМ или работающий хост перешел в состояние аварийного прекращения выполнения задачи, программа самостоятельно подключает другой хост из числа доступных.

Библиотека PVM позволяет раздельно контролировать состояние выполняющихся задач и состояние работающих в составе вычислительного кластера хостов. Для получения информации о процессе с идентификатором tid используется подпрограмма pvm_pstat:

Int status = pvm_pstat (tid);

Результатом выполнения данной подпрограммы является значение переменной status может принимать одно из трех значений:

1). Pvm Ok – задача выполняется;

2). Pvm No Task – задача не выполняется;

3). Pvm Bad Param – неправильно задан идентификатор tid.

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

Аналогично, может быть проконтролировано состояние хоста, входящего в состав ВМ. Для этого используется подпрограмма библиотеки PVM pvm_mstat:

Int mstat = pvm_mstat (host);

где параметр ''host'' определяет символьное имя хоста, состояние которого контролируется. Результатом выполнения этой подпрограммы является значение переменной mstat:

  1. Pvm Ok – работает нормально;

  2. Pvm No Host – хост не входит в состав виртуальной машины;

  3. Pvm Host Fail – хост недостижим по причине аппаратного сбоя.

Другим вариантом контроля работоспособности хостов вычислительного кластер и выполнения на них программ является использование подпрограммы pvm_notify. Данная подпрограмма активизирует режим оповещения вызвавшей ее задачи о событиях, происходящих на хосте, входящем в состав ВМ.

В случае реализации некоторого события на указанном хосте вызвавшая подпрограмму pvm_notify задача получает об этом уведомление и обрабатывает его самостоятельно.

Формат вызова подпрограммы pvm_notify:

Int ierr = pvm_notify (what, msq tag, cwt, tids);

Параметр what задает тип события, которое контролируется на хосте, входящем в состав ВМ, и о котором оповещается задача, вызвавшая подпрограмму pvm_notify:

  1. Pvm Task Exit – оповещать о завершении работы задачи на хосте;

  2. Pvm Host Delete – оповещать, если хост удаляется из ВМ или произошел аппаратный сбой;

  3. Pvm Host Add – оповещать о добавлении в виртуальную машину нового хоста.

Параметр msq tag (тип целый ), значение которого задается разработчиком, позволяет контролировать количество сформулированных сообщений о событиях. Параметр (массив) tids (тип целый) определяет идентификатор процесса (хост), контроль событий для которого осуществляется (к которому относится действие ключей TaskExit и HostDelete. При использовании ключа HostAdd данный массив должен быть пустым). Параметр cwt (тип целый) определяет количество сообщений, которое может быть передано одновременно. Результатом выполнения подпрограммы pvm_notify является возвращаемое значение переменной ierr, которое, будучи положительным, говорит о реализации заданного в подпрограмме события.

Сбор информации о вычислительном кластере осуществляется подпрограммой pvm_config, вызов которой имеет следующий формат:

Int ierr = pvm_config (nhost, narch, hostp);

Параметр nhost (тип целый) возвращает количество хостов в ВМ, параметр narch (тип целый) определяет количество различных форматов хранения данных на хостах ВМ.

Параметр hostp является указателем на массив структур pvm hostinfo. Структура pvm hostinfo состоит из следующих параметров:

  1. hi_tid (тип целый) – определяет идентификатор задачи на соответствующем хосте;

  2. hi_name (тип символьный) – определяет имя хоста, входящего в состав ВМ;

  3. hi_arch (тип символьный) – определяет наименование архитектуры хоста, входящего в состав ВМ;

  4. hi_speed (тип целый) – определяет относительное быстродействие центрального процессора на соответствующем хосте.

Изменение конфигурации кластера осуществляется путем вызова подпрограммы pvm_allhosts (добавление новых хостов в ВМ) и pvm_delhost (удаление хостов из ВМ), вызов которых осуществляется в следующем формате:

int ierr = pvm_addhosts (hosts, nhost, ierrs);

int ierr = pvm_delhosts (hosts, nhosts, ierrs);

Указываемые при вызове подпрограмм параметры предназначены для:

  1. hosts – указатель на массив из строк символов, содержащих имена добавляемых (удаляемых хостов (при добавлении/удалении одного хоста – указатель на строку символов с именем хоста);

  2. nhost – целочисленное количество добавляемых/удаляемых хостов;

  3. ierrs nhost – целочисленный массив из nhost элементов, содержащий коды завершения операций для каждого хоста. Отрицательные значения элементов массива соответствуют ошибкам при выполнении вызываемой подпрограммы.

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

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

# include ''pvm3.h''

main

{

//локальные объявления переменных

mytid1=pvm_mytid();

ierr1=pvm_spawn (“PROG1”, 1char**)0, 0, “host1”, tid1);

ierr=pvm_config (nhost, narch, hostp);

printf (''Текущая кофигурация ВМ'', nhost, hostp);

//контроль за реализацией задачи на хосте “host1”

ierr3=pvm_notify (PvmHostDelete, 1, 1, tid1);

(if ierr>3) {host=”host2”;

ierr4=pvm_addhosts (& host, 1, ierrs);

(if ierr4= = 1) {ierr1=pvm_spawn (“PROG1”, (char**)0, 0, “host2”, tid1);

ierr2=pvm_config (nhost, narch, hostp);

printf (''новая конфигурация ВМ'', nhost, hostp);

}}

… … … … …

Pvm_exit();

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]