1 1 404

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

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

Для запуска виртуальной машины необходимо выполнить команду pvm. Эта команда запускает консоль параллельной виртуальной машины PVM. Команда pvm перед запуском консоли проверяет наличие в системе демона pvmd, запущенного от имени пользоватля, который выполняет команду pvm, и в случае отстутствия такового запускает его. Таким образом в системе может пристутствовать несколько демонов pvmd (несколько параллельных виртуальных машин), принадлежащих разным пользователям. С другой стороны два пользователя, подключившихся к консоли кластера под одним именем, будут пользоваться одной и той же виртуальной машиной. Доступ пользователей к консоли под разными именами обеспечить безопасность для выполняемых программ. Поскольку запускаемые программы будут выполнятся под разными виртуальными машинами, то пользователи не смогут помешать друг другу, например снять с исполнения чужую задачу. С другой стороны, работа всех пользователей под одним login'ом обеспечит простоту администрирования запускаемых задач. В этом случае пользователь может быть лишен необходимости самостоятельно конфигурировать состав кластера. Однако это добавит риск неправомочного воздействия пользователем на чужие задачи. Пользователь может, например, остановить виртуальную машину командой halt, сняв тем самым с исполнения все запущенные в рамках этой виртуальной машины задачи. Каким образом обеспечить пользователям доступ к консоли кластера вы должны решить самостоятельно.

Запустив команду pvm, пользователь попадает в командную строку виртуальной машины. Список допустимых в PVM команд можно получить, выполнив команду help. Далее мы рассмотрим только те команды, которые будут постоянно необходимы для выполнения задач на параллельном компьютере под управлением PVM.

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

pvm>add node1
pvm>add 192.168.1.3
pvm>add node3.cluster.mydomain.org

Параметром этой команды может быть ip-адрес, краткое или полное доменное имя включаемого узла. При подключении дополнительного узла, виртуальная машина связывается с подключаемым компьютером по протоколу SSH для выполнения действий связанных с запуском демона pvmd на этом компьютере. Поэтому следует синхронизировать список пользователей на узлах кластера со списком пользователей консоли кластера. Если вы не предпримите действий, направленных на обеспечение беспарольного доступа по протоколу SSH на узла кластера с консоли кластера, то при добавлении каждого нового узла в вашу виртуальную машину, система будет запрашивать пароль доступа. При отсутствии проблем, подключение нового узла может выглядеть на консоли так:

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

Посмотреть список подключенных к виртуальной машине узлов можно выдав команду conf:

pvm> conf
conf
2 hosts, 1 data format
                    HOST     DTID     ARCH   	SPEED            DSIG
                    server   40000    LINUX      1000  	   0x00408841
                     node1   80000    LINUX      1000      0x00408841
pvm>

Для каждой машины списка дана информация, включающая в себя имя машины (короткое или полное доменное имя, или ip-адрес) HOST, идентификатор задачи DTID демона PVM, название архитектуры подключаемой машины ARCH, некое число SPEED, отражающее скоростные характеристики машины и идентификатор самой виртуальной машины DSIG, который будет различен для виртуальных машин, запущенных разными пользователями.

Вместо того, чтобы вручную добавлять каждый узел кластера в виртуальную машину, можно при первом запуске pvm указать в качестве первого параметра команды имя текстового файла, в котором перечислены имена (краткие или полные доменные) или ip-адреса узлов кластера. Правило составления такого файла простое: один узел - одна строка. В случае использования списка узлов, PVM самостоятельно выполнит подключение перечисленных в файле машин. Вероятно привильным и удобным будет обеспечить беспарольный доступ по протоколу SSH к узлам кластера с консоли кластера и выполнение команды "pvm hostlist" из startup-файла пользователя (например .bashrc).

Следующее действие, которым систематически будет заниматься пользователь, находясь в виртуальной машине, это запуск параллельных задач. Запуск осуществляется командой spawn. В качестве параметра этой команды указывается название исполняемого файла, который следует запустить внутри виртуальной машины. Файл с таким названием ищется в каталоге /pvm3/bin/LINUX/.

pvm> spawn timing
spawn timing
1 successful
t40002
pvm>

В приведенном примере выполняется запуск программы "timing". В этом варианте программа запускается в фоновом режиме и весь вывод в STDOUT будет записываться в log-файл. Команду запуска можно модифицировать с тем, чтобы вывод в STDOUT от всех процессов задачи направлялся на консоль виртуальной машины. Для этого команда запуска и вывод программы на экране будут выглядеть так:

pvm>spawn -> hello
spawn -> hello
[1]
1 successful
t40004
[1:t40005] Message from slave process
[1:t40004] i'm t40004
[1:t40004] from t40005: hello, world from yis
[1:t40005] EOF
[1:t40004] EOF
[1] finished
pvm>

Для просмотра списка запущенных задач можно воспользоваться командой ps. Запуск с консоли этой команды без параметров покажет список процессов задач, которые запущены на консоли кластера. Используя параметр "-a", мы можем посмотреть, какие процессы запущены на всех узлах виртуальной машины. Пример:

pvm> ps -a
ps -a
                     HOST      TID       FLAG 0x COMMAND
       	           server    40002         6/c,f timing
                    node1    80002         6/c,f timing_slave
pvm>

В примере мы видим, что запущенная нами задача timing осталась работать на консоли кластера "server" и породила на узле "node1" дочерний процесс timing_slave.

Для снятия процеса со счета можно воспользоваться командой kill, параметрами которой являются идентификаторы задач (TID) процессов, которые подлежат удалению из системы. Идентификаторы задач можно посмотреть с помощью ранее описанной команды ps. Так, для удаления из системы процессов "timing" и "timing_slave" из предыдущего примера, команда ps будет выглядеть следующим образом:

pvm> kill 40002 80002

Для удаления всех задач следует воспользоваться командой reset.

pvm> reset

Часто бывает, что не вся пользовательская работа должна проводится внутри виртуальной машины. Некоторые программы могут запускаться на локальной машина как обычные задчи. Например визуализацию данных, получаемых в результате счета параллельной программы, можно осуществлять отдельной программой, которая может быть активна не все то время, когда идет счет, запускаться периодически. Такая программа может получать данные для визуализации через специальные файлы FIFO, известные так же как "именованные каналы". О такой методике мы поговорим ниже. В подобных случаях возникает необходимость консоль виртуальной машины и выйти в обычную командную строку локальной операционной системы. Выход в операционную систему без остановки виртуальной машины и всех ее процессов осуществялется командой quit.

pvm> quit

Повторный вход в консоль работающей виртуальной машины осуществляется запуском команды pvm.

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

pvm> halt

Результатом выполнения этой команды является, во-первых, "убивание" всех процессов виртуальной машины на всех присоединенных к ней узлах кластера (в том числе и на консоли кластера), во-вторых, остановка системы PVM на всех узлах кластера (отсоединение узлов), и, в заключение, остановка ситемы PVM на консоли кластера с выходом к командную строку локальной операционной системы.

Система комманд параллельной виртуальной машины PVM не ограничена перечисленными командами. Полный список разрешенных команд можно получить с помощью инструкции help, заданной в командной строке PVM. Однако, для начала работы с PVM и в подавляющем большинстве случаев описанные нами команды достаточны для продуктивной работы пользователя.


Copyright © 1998-2011 Юрий Сбитнев