Seu Curso

  • Full Screen
  • Wide Screen
  • Narrow Screen
  • Increase font size
  • Default font size
  • Decrease font size

Criando um cluster HPC com duas máquinas virtuais

Imprimir
Avaliação do Usuário: / 4
PiorMelhor 

 

A máquina virtual utilizada será a VirtualBox. Apenas garanta que está com a última versão, certifique-se em https://www.virtualbox.org/wiki/Downloads

Vou ser o mais sucinto e direto ao objetivo possível, deixo a teoria para que você pesquise e estude por conta própria.

PVM é a abreviação para Parallel Virtual Machine, ou em português, Máquina Paralela Virtual.

PVM é um sistema de passagem de mensagens que habilita uma rede de computadores Unix/Linux serem utilizados como um computador único com processador e memória distribuídos. Essa rede é chamada de máquina virtual (não confunda com o VirtualBox, é outro tipo de máquina virtual).

PVM pode ser utilizado em muitos níveis diferentes. No nível mais alto, ou modo transparente, as tarefas são automaticamente executadas no computador pertencente à máquina virtual mais apropriado. No modo dependente de arquitetura, o usuário especifica qual dos computadores deve executar uma tarefa em particular. No modo baixo nível, o usuário precisa especificar qual computador deve executar qual tarefa. Em todos esses modos, PVM cuida das conversões de dados necessárias para cada computador, assim como deve acontecer no modo baixo nível.

PVM é um sistema de passagem de mensagem muito flexível. Ele suporta a maioria dos formatos de computação paralela. Ele permite que qualquer paradigma de linguagem de programação seja usado e todas as estruturas necessárias para que seja possível utilizar-se da PVM são fornecidas por ela própria.

O objetivo deste tutorial é mostrar como instalar e configurar uma PVM usando duas máquinas virtuais rodando Linux Debian hospedadas em um computador rodando Windows 8. Mas é possível adicionar, teoricamente, infinitos equipamentos, de qualquer maneira, seja heterogênea ou homogênea, à máquina virtual (PVM) a qualquer hora.

Sobre a programação para PVM vou deixar aqui apenas um pequeno exemplo para que possamos verificar o correto funcionamento da máquina virtual, sendo assim será necessária uma pesquisa mais aprofundada para conhecer todos os mecanismos e facilidades disponíveis para a programação paralela usando a PVM.

De início vou considerar que você tem duas máquinas virtuais, com o Debian instalado, em seu computador. A instalação pode ser a mais simples e leve possível, usarei apenas o console (terminal). Você pode dar uma olhada no Realizar uma instalação mínima do Debian em uma máquina virtual para ter uma ideia de como fazer isso.

O primeiro passo a ser dado, depois de ter o sistema operacional instalado, é atualizar o sistema em AMBAS as máquinas virtuais, para isso use:

apt-get update
apt-get dist-upgrade
apt-get autoclean

A rede dessas máquinas virtuais deve ser do tipo Rede Interna, para que elas se comportem como se fosse máquinas reais em uma rede própria, portanto faça essa configuração em ambas máquinas virtuais.

As máquinas devem ter nomes distintos, para alterar o nome:

vi /etc/hostname

Coloque nomes distintos que facilite a identificação dos componentes do seu cluster.

Também devem ter IP fixo:

vi /etc/network/interface

Usando a seguinte configuração:

allow-hotplug eth0
iface eth0 inet static
address 10.0.0.1
netmask 255.0.0.0
gateway 10.0.0.1
dns-server 10.0.0.1

Onde,

allow-hotplug permite que a placa funcione como plug-and-play.

iface determina que o endereço será fixo (estático).

address é o endereço IP.

netmask é a máscara de rede.

gateway é o endereço do gateway padrão (roteador).

dns-server é o endereço do servidor DNS.

Para uma máquina escolhi o IP 10.0.0.1 e para outra 10.0.0.2, sendo que os dois IPs devem fazer parte da mesma rede física (entre as máquinas virtuais, no caso) e lógica.

Vamos acertar a resolução de nomes entre os nós (máquinas):

vi /etc/hosts

Adicione ao final do arquivo o nome e IP do nó um no nó dois e vice-versa, usando o seguinte formato:

Endereço_IP   Nome_do_Host

No meu caso, no nó um:

10.0.0.1           maquina01
10.0.0.2           maquina02

No meu caso, no nó dois:

10.0.0.1           maquina01
10.0.0.2           maquina02

Feito a configuração de nome e IP verifique se há comunicação entre eles, use o ping entre o um nó e o outro usando o nome do nó.

ping maquina01

ping maquina02

A comunicação entre os nós deverá ser feita sem interferência (interação) do usuário, por isso precisaremos deixar o SSH sem senha entre o master (nó um) e o slave (nó dois).

No nó um (master):

ssh-keygen –t dsa –f ~/.ssh/id_dsa

Quando solicitado senha, apenas dê ENTER.

Para exportar a chave criptográfica para o nó dois (slave) faça o que é indicado abaixo. Note que você precisará da senha do usuário do computador remoto quando solicitado:

cat ~/.ssh/id_dsa.pub | ssh root@10.0.0.2 ‘cat - >> /root/.ssh/authorized_keys’

De novo no nó um:

cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

Para testar tente uma conexão entre o nó master e o slave, não deverá ser solicitado senha, apenas o cadastro de confiabilidade:

ssh maquina02

Feche o SSH. Foi apenas para teste.

Agora instale o PVM em AMBOS nós (nas duas máquinas):

apt-get install pvm pvm-dev

Para adicionar os nós ao PVM faça o que segue no nó master. Note o que o master não precisa ser adicionado a si mesmo:

pvm
add maquina02

Para confirmar se o nó foi adicionado, execute o seguinte comando ainda dentro do PVM:

conf

Para sair do PVM e deixa-lo rodando em segundo plano:

quit

Se você usar o comando halt o PVM será encerrado.

Vamos escrever um código exemplo para testar o PVM:

#include<stdio.h>
#include “pvm3.h”
 
int main() {
int mytid, info;
mytid = pvm_mytid();
printf(“\nOla, eu sou a tarefa numero %d\n\n”, mytid);
info = pvm_exit();
return info;
}

Esse programa exemplifica a programação básica para a PVM. O processo inicia na PVM, faz algum processamento (no caso o printf) que pode incluir passagem de mensagens e outras coisas, sai da PVM e finalmente encerra o programa. Esse é um pequeno exemplo para iniciar, mas exemplifica bem o funcionamento da programação para pvm.

Para compilar use:

gcc nome_do_programa.c –o nome_do_programa –I$PVM_ROOT/include –L$PVM_ROOT/lib/LINUX –lpvm3 –lnsl

Onde:

nome_do_programa.c é o nome do seu arquivo com o código fonte.

nome_do_programa é o arquivo que conterá o binário compilado (executável).

–I$PVM_ROOT/include local onde estão os includes da PVM.

–L$PVM_ROOT/lib/LINUX local das bibliotecas da PVM, no caso, para o sistema operacional Linux.

Para executá-lo:

./teste

Agora podemos executá-lo dentro da PVM:

pvm

Verifique se os nós já estão adicionados, caso contrário re-adicione:

conf

Executando com a criação de cinco processos do mesmo programa:

spawn -5 -> ./teste

Agora é com você: procure mais informações sobre programação para PVM e passagem de mensagens de maneira que seus programas possam ser executados parte em um nó (master) e parte em outros nós (slaves) aproveitando o máximo do cluster criado. Você pode aumentar ou diminuir o número de processos a serem criados para testar o desempenho e também aumentar ou diminuir o número de nós para verificar o desempenho.

Os comandos principais do console da PVM são:

add – adiciona nós à máquina virtual

alias – define ou cria apelidos para comandos

conf – mostra a configuração da máquina virtual com todos os dados dos nós adicionados nela

delete – remove nó da máquina virtual

echo – retorna argumentos

halt – interrompe a execução da máquina virtual

help – mostra ajuda interativa sobre os comandos da PVM

id – mostra a identificação da tarefa do console

jobs – mostra todos os processos em execução

kill – pode ser utilizado para interromper um processo na PVM

mstat – mostra o estado de um determinado nó

ps –a – lista todos os processos atuais na máquina virtual

pstat – mostra o estado de um determinado processo

quit – sai do console, mas deixa a PVM em funcionamento

reset – interrompe todos os processos da PVM

setenv – mostra ou ajusta variáveis de ambiente

sig – envia sinal a uma tarefa ou processo

spawn – executa uma aplicação na PVM

trace – ajusta ou mostra o caminho de um evento

unalias – remove apelido de comando

 

version – mostra a versão da PVM

Adicionar comentário


Código de segurança
Atualizar

You are here: