Avaliação do Usuário

Estrela inativaEstrela inativaEstrela inativaEstrela inativaEstrela inativa
 

 

 

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:

 

{code}

apt-get update

apt-get dist-upgrade

apt-get autoclean

{/code}

 

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:

 

{code}

vi /etc/hostname

{/code}

 

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

 

Também devem ter IP fixo:

 

{code}

vi /etc/network/interface

{/code}

 

Usando a seguinte configuração:

 

{code}

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

{/code}

 

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):

 

{code}

vi /etc/hosts

{/code}

 

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:

 

{code}

10.0.0.1           maquina01

10.0.0.2           maquina02

{/code}

 

No meu caso, no nó dois:

 

{code}

10.0.0.1           maquina01

10.0.0.2           maquina02

{/code}

 

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ó.

 

{code}

ping maquina01

{/code}

 

{code}

ping maquina02

{/code}

 

 

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):

 

{code}

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

{/code}

 

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:

 

{code}

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

{/code}

 

 

De novo no nó um:

 

{code}

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

{/code}

 

 

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

 

{code}

ssh maquina02

{/code}

 

 

Feche o SSH. Foi apenas para teste.

 

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

 

{code}

apt-get install pvm pvm-dev

{/code}

 

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:

 

{code}

pvm

add maquina02

{/code}

 

 

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

 

{code}

conf

{/code}

 

 

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

 

{code}

quit

{/code}

 

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

 

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

 

{code}

#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;

}

{/code}

 

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:

 

{code}

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

{/code}

 

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:

 

{code}

./teste

{/code}

 

 

Agora podemos executá-lo dentro da PVM:

 

{code}

pvm

{/code}

 

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

 

{code}

conf

{/code}

 

 

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

 

{code}

spawn -5 -> ./teste

{/code}

 

 

 

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