Construindo Supercomputadores com Linux - Resumido versão 29-05-13.
Transcript of Construindo Supercomputadores com Linux - Resumido versão 29-05-13.
Construindo Supercomputadores com Linux - Resumido
versão 29-05-13
2 - Cluster de Computadores
• Quando se utilizam dois ou mais computadores em conjunto para resolver um problema, você tem um cluster, que do inglês significa agrupamento
Categorias dos Clusters
• Alta Disponibilidade (HA - High Availability)– Os clusters HA tem a finalidade de manter um
determinado serviço de forma segura o maior tempo possível
• Alto Desempenho (HPC - High Performance Computing)– configuração designada a prover grande poder
computacional do que somente um único computador poderia oferecer em capacidade de processamento
Alta Disponibilidade
• alta disponibilidade garantir a continuidade de operação do sistema de serviços de rede, armazenamento de dados ou processamento, mesmo se houver falhas em um ou mais dispositivos, sejam eles hardware ou software
Clusters de Alta Disponibilidade
• Nos clusters de alta disponibilidade os equipamentos são utilizados em conjunto para manter um serviço ou equipamento sempre ativo, replicando serviços e servidores, o que evita máquinas paradas, ociosas, esperando o outro equipamento ou serviço paralisar, passando as demais a responder por ela normalmente
Vantagens em usar Cluster de Computadores
• Alto Desempenho
• Escalabilidade
• Tolerância a Falhas
• Baixo custo
• Independência de fornecedores
Aplicabilidades
• Servidores da Internet• Segurança• Bases de Dados• Computação Gráfica• Aerodinâmica• Análise de elementos finitos• Aplicações em sensoriamento remoto• Inteligência Artificial e automação• Engenharia Genética
Aplicabilidades (2)
• Exploração sísmica
• oceanografia e astrofísica
• previsão do tempo
• pesquisa militares
• problemas de pesquisas básicas
• segurança de reatores nucleares
Divisão dos clusters segundo a sua propriedade
• dedicados utilizam seus nós exclusivamente para computação paralela
• não-dedicados as aplicações são executadas baseadas na ociosidade das estações de trabalho
Cluster Beowulf (1994)
• 16 computadores pessoais - microprcessador 486
• sistema operacional Linux
• rede padrão Ethernet (10Mbps)
• marca de 70 megaflops (70 milhões de operações de ponto flutuante por segundo)
• custo: aproximadamente US$ 50,000.00
Característica chave de um cluster Beowulf
• uso do SO Linux
• uso das bibliotecas de troca de mensagens (PVM e MPI) - de livre distribuição
• “Faça você mesmo o seu próprio supercomputador”
O Cluster Beowulf pode ser dividido em duas classes
• Cluster Classe I
• Cluster Classe II
Cluster Beowulf
• Um cluster Beowulf é construído de vários nós escravos (back-end) controlados por um computador principal (front-end), ao qual se tem acesso direto, ligados por uma rede fast ethernet e fazendo um gateway entre o cluster e uma rede local (LAN)
Cluster Beowulf
• o computador principal é o responsável pela distribuição das tarefas
• os computadores escravos limitam-se a processar os cálculos que lhe são enviados
Principais componentes de um cluster de computadores
• Nó ou node• Sistema Operacional• Rede Local• Protocolos• cluster middleware• Ferramentas de Comunicação• Sistemas de Arquivos Paralelos
– PVFS2– Lustre– PNFS– GPFS
3 - Construindo um Cluster de Alto Desempenho
Tipos de Cluster
• Cluster Homogêneo todos os seus nós possuem as mesmas características e a mesma rede de comunicação
• Cluster Heterogêneo seus nós possuem diferentes características ou diferentes redes de comunicação entre grupos de máquinas
Top 500
Veja o link para a lista dos 500 maiores supercomputadores da atualidade
http://www.top500.org/
5 - Configurando o Cluster
Roteiro de Configuração
• Configuração dos endereços lógicos (IP) para o controlador mestre e os nós computacionais
• Projetar um ambiente de resolução de nomes, podendo ser utilizado arquivo hosts, NIS ou DNS
• Criar o relacionamento de confiança entre as máquinas
Roteiro de Configuração
• Permitir o uso de comandos remotos para colocar as aplicações em execução nos nós
• Distribuir o sistema de arquivos do controlador mestre para os nós escravos via NFS
• Instalar uma aplicação que permita o gerenciamento dos nós
Roteiro de Configuração
• Instalação das principais bibliotecas de passagem de mensagens; PVM MPI
• Instalar sistemas de gerenciamento de recursos para aproveitar nós ociosos no cluster
• Instalar bibliotecas de otimização do sistema• Criar um ambiente propicio para um sistema de
arquivos de alta performance para processos de I/O
• Instalar linguagens, compiladores, depuradores, visualizadores
1º Passo: definir os endereços IP
Neste passo vamos configurar os endereços IPs das máquinas que formarão o cluster
• Vamos usar o endereço de rede 192.168.7.x
• Máscara de rede: 255.255.255.0
• Criar uma interface lógica
ifconfig eth0:1 192.168.7.x netmask 255.255.255.0
1º Passo (b) - Estabelecendo o nome dos hosts
• Edite o arquivo /etc/sysconfig/network e altere a variável HOSTNAME=mestre.meudominio.com.br
• Obs: cada host deverá ter seu próprio nome: mestre, escravo1, escravo2, ...
2º Passo: Definição dos hosts
A função do arquivo hosts é resolver o nome da máquina no endereço lógico de rede (IP)
• alterar o arquivo /etc/hosts para resolver o nome das máquinas
Exemplo:192.168.7.71 mestre.meudominio.com.br mestre
192.168.7.72 escravo1.meudominio.com.br escravo1
192.168.7.73 escravo2.meudominio.com.br escravo2
3º Passo: Configuração de relacionamento de confiança
• Configurar o relacionamento de confiança entre os hosts
• Ele define a relação de confiança entre os hosts através da equivalência, sem haver necessidade de autenticação por senha
/etc/hosts.equiv
mestreescravo1escravo2
4º Passo: o arquivo .rhosts
• Esse arquivo deverá constar em cada diretório de trabalho do usuário como /home e /root
• Esse arquivo será usado pelo protocolo RSH para execução de comandos remotos e por algumas aplicações de monitoramento
• Ele deverá ser criado nos diretórios: /home e /root
.rhostsmestreescravo1escravo2
5º Passo - habilitação do servidor RSH
• Execute o ntsysv e habilite os serviços de rexec, rlogin e rsh
Servidor RSH
• Inclui as seguintes funções:– emulador de terminal de comandos (rlogin)– execução remota de comandos (rexec)– copia remota de arquivos (rcp)
6º Passo - Configuração dos dispositivos para conexão
O arquivo /etc/securetty permite especificar quais dispositivos tty que o usuário root pode conectar-se
• O formato do arquivo /etc/securetty é a lista de dispositivo tty onde a conexão é permitida
• Acrescentar as entradas abaixo ao final do arquivo /etc/securetty :rsh
rlogin
7º Passo - Habilitar os comando “R”
Inicie o xinetd.
Ele poderá ser iniciado através do comando:# service xinetd start
Outra opção para iniciar o xinetd é ir até diretório /etc/rc.d/init.d e iniciar o xinetd com o comando ./xinetd para que , toda vez que ao iniciar, o supervisor seja carregado automaticamente
8º Passo - Replicação
• Os arquivos /etc/hosts, /etc/hosts.equiv, /etc/securettty e /home/.rhosts e /root/.rhosts devem ser replicados em todos os computadores que formam o cluster
6 - Gerenciando os Clusters
• Ferramentas:– bWatch - permite o monitoramento remoto
dos nós do cluster– Ganglia - é uma ferramenta distribuída que
permite monitorar sistemas de alto desempenho de computação
– Nagios - Gerencia Servidores e Serviços
bWatch (Beowulf Watch)
• Permite o monitoramento remoto dos nós do cluster– monitoramento de carga– uso de memória
• Script escrito em Tcl/Tk (linguagem de programação de scripts)
Pré-requisitos para uso do bWatch
• assume que na máquina onde ele está sendo executado ele tenha acesso remoto via rsh a todos os computadores do cluster
• assume também que o interpretador wish (do Tcl/Tk) esteja em /usr/bin/wish
Instalação do bWatch
• O site do bWatch localiza-se em: http://bwatch.sourceforge.net/
• crie o diretório /usr/local/bWatch-1.1.0.a
• copie o arquivo bWatch-1.1.0a.tar.gz para o diretório /usr/local/bWatch-1.1.0a onde você instala suas aplicações
# cd /usr/local/bWatch-1.1.0a# tar zxvf bWatch-1.1.0a.tar.gz
Instalação do bWatch
• Edite o arquivo Makefile• Altere wishx por wish• Digite make bwatch• Inicie a aplicação usando bWatch.tcl (somente
após esse passo é que será criado o arquivo ~/.bWatchrc.tcl)
• Faça o make install para instalá-lo em /usr/local/bin
• Altere a variável listOfHosts localizado no arquivo ~/.bWatchrc.tcl (/root/.bWatchrc.tcl)
Instalação do bWatch
• Liste o nome da cada host que será monitorado
• Exemplo:set listOfHosts { mestre escravo1 escravo2 escrado3 }
Ganglia
• O Ganglia é uma ferramenta distribuída que permite monitorar sistemas de alto desempenho de computação
• É um projeto open source hospedado em http://ganglia.sourceforge.net
Ganglia
• Ganglia Monitor Daemon (gmond) aplicação principal de monitoramento do Ganglia
• Ganglia Meta Daemon (gmetad) executado na máquina central coletando e armazenando as informações de estados dos nós
• Ganglia Metad Web Interface
Ganglia Monitor Daemon (gmond)
• deve ser instalado em todos os nós do cluster que desejamos monitorar
• principais características:
Ganglia Meta Daemon (gmetad)
– Deve ser instalado e executado no webfrontend
– funções: • reunir todos os dados de cada gmond dos nós• armazenar as informações em um banco de dados• fazer o resumo de todos as informações para ser
apresentado pelo nó de gerência
Ganglia Metad Web Interface
• utiliza um servidor web
• páginas são dinâmicas
• escrito em PHP
Programas
• gmond executado em cada nó do cluster
• gmetad é executado na máquina central coletando todas as informações de estado dos nós
• gstat conecta ao gmond e lista as informações de saída dos nós do cluster
• gexec
Passo 0
Instalação dos arquivos de dependência:# rpm -ivh rrdtool-1.2.30-1.el4.wrl.i386.rpm
# rpm -ivh rrdtool-python-1.2.30-1.el4.wrl.i386.rpm
Passo 1 - Instalação do gmond
• Instalar o gmond em todas as máquinas do cluster
# rpm -ivh ganglia-3.0.6-1.el4.i386.rpm
# rpm -ivh ganglia-gmond-3.0.6-1.el4.i386.rpm
Passo 1-a - Configuração do gmond
Abrir o arquivo /etc/gmond.conf e alterar os parâmetros name e owner dentro da “tag” cluster
name=“MyCluster” este nome deve ser único pois identifica o cluster
owner=“Mauro”
Passo 1-b - Iniciar o serviço gmond
Levantar o processo em todas as máquinas# service gmond start
Passo 2 - Instalação do gmetad
• Instalar o gmetad apenas no host mestre# rpm -ivh ganglia-gmetad-3.0.6-1.el4.i386.rpm
Passo 2-a - Configuração do gmetad
Abrir o arquivo de configuração: /etc/gmetad.conf
• Alterar o parâmetro:
data_source “MyCluster” localhost• Alterar o parâmetro:
gridname “MyGrid”• Levantar o processo daemon no nó de gerencia
# service gmetad start
Passo 3 - Configuração do Ganglia Frontend
# rpm -ivh ganglia-web-3.0.6-1.el4.noarch.rpm
Inicie o serviço de httpd# service httpd starte marque o serviço para inicializar
automaticamente quando se inicia o host# ntsysvmarcar httpd para iniciar
• Abra o navegador em: http://localhost/ganglia
Passo 4 - Marcar os daemons para execução
Execute o comando ntsysv:
# ntsysv
selecione e marque os serviços gmond e gmetad (se instalado) para que sejam iniciados automaticamente
# service gmond restart
# service gmetad restart (se necessário)
Verificar /var/log/messages se há alguma mensagem de erro
Programação Paralela
PVM - Máquina Virtual Paralela
• O PVM é uma biblioteca de programação paralela por passagem de mensagens para facilitar o campo de computação paralela homogênea
• o PVM já encontra suporte em linguagens como: Java, Python, Perl, além das linguagens tradicionais como C, C++ e Fortran
Componentes do PVM
• Composto por duas partes:– primeira parte: daemon pvmd3– segunda parte: biblioteca de rotinas PVM
PVM
• O software PVM deve ser instalado especificamente em cada máquina que é para ser usada em sua “máquina virtual”
• $PVM_ROOT/lib
• $PVM_ROOT/bin
Alguns diretórios importantes são:
• bin/$PVM_ARCH/
• conf/
• console/
• doc/
• examples/
• gexamples/
• hoster/
Alguns diretórios importantes são:
• include/
• lib/
• lib/$PVM_ARCH/
• libfpvm/
• man/man[13]/
• misc/
• patches/
Alguns diretórios importantes são:
• pvmgs/• rm/• shmd/• src/• src/$PVM_ARCH/• tasker/• tracer/• xep/
PVM
• pvmd3 daemon executable
• pvm o programa de console
• libpvm3.a (biblioteca de funções em C)
• libfpvm3.a (biblioteca de funções em Fortran)
• As bibliotecas e executáveis são instalados em:
$PVM_ROOT/lib/$PVM_ARCH
PVM
• os scripts $PVM_ROOT/lib/pvm e $PVM_ROOT/lib/pvmd são usados para iniciar o console e o daemon PVM
• O PVM poderá ser configurado para usar o ssh ao invés do rsh
Instalando e configurando o PVM
Criar o arquivo pvm.sh em /etc/profile.d
export PVM_ROOT=/usr/share/pvm3export PVM_ARCH=LINUXexport PATH=$PATH:$PVM_ROOT/lib:
$PVM_ROOT/lib/$PVM_ARCHexport PATH=$PATH:$PVM_ROOT/lib/pvmdexport XPVM_ROOT=/usr/share/pvm3/xpvm
Instalando e configurando o PVM
• altere a permissão do arquivo /etc/profile.d/pvm.sh para 755
# chmod 0755 /etc/profile.d/pvm.sh
Instalando e configurando o PVM
• Criar no diretório /root o arquivo /root/.xpvm_hosts e o arquivo pvmhosts com o seguinte conteúdo:
/root/.xpvm_hostsmestreescravo1escravo2
/root/pvmhostsmestreescravo1escravo2
Utilizando o PVM
Execute o PVM:
#pvm
pvm>add mestre
pvm>add escravo1
pvm>add escravo2
O comando add adiciona os hosts a máquina virtual do PVM
Comandos
• halt encerra todos os processos do PVM, inclusive o próprio PVM
• delete host exclui uma máquina do front-end• conf lista a configuração das máquinas
virtuais– hostname– dtiv (pvmd task id - identificador da tarefa pvmd)– arch (tipo de arquitetura)– speed (velocidade relativa)
Comandos
• help mostra todos os comandos e suas funções– help comando
• id exibe o id do console• jobs lista os processos em execução• kill usado para encerrar os processos do PVM• mstat exibe o status dos hosts especificados• ps -a lista todos os processos na máquina virtual, sua
localização, seus id’s e os pais dos id’s• quit sai do console• reset encerra todos os processos exceto os consoles
e reinicia as tabelas internas e filas de mensagens do PVM
Comandos
• setenv exibe ou seta variáveis de ambiente
• sig emite um sinal a tarefa
• spawn inicia uma aplicação no PVM
Compilando os programas exemplos
• Vá para o diretório $PVM_ROOT/examples
• Todos os exemplos assumem que pvm está instalado e rodando concorrentemente
Exemplo: hello + hello_other
• Dois programas que cooperam - mostra como criar uma nova tarefa e passar (trocar) mensagens entre as tarefas
• Para compilar:# aimk hello hello_other
Os arquivos serão gerados em: $PVM_ROOT/bin/LINUX
# hello
Observação
• Os programas deverão ser compilados tanto nas máquinas mestre quanto nas máquinas escravo
Exemplo: hello + hello_other
• Como executar a partir do console pvm:
pvm> spawn hello
Exemplo de saída:
i’m t40002
from t40003: hello, world from escravo1
Exemplo de Execução (1)[root@mestre LINUX]# pvmpvmd already running.pvm> confconf3 hosts, 1 data format HOST DTID ARCH SPEED DSIG mestre.mltech.com.br 40000 LINUX 1000 0x00408841 escravo1 80000 LINUX 1000 0x00408841 escravo2 c0000 LINUX 1000 0x00408841pvm> ididt4000a
Exemplo de Execução (2)pvm> spwan -> hellospawn -> hello[1]1 successfult80004pvm> [1:t80004] i'm t80004[1:t80004] from tc0003: hello, world from
escravo2.mltech.com.br[1:tc0003] EOF[1:t80004] EOF[1] finished
Outros exemplos
• Vejam outros exemplos no arquivo $PVM_ROOT/examples/Readme
Utilizando o XPVM
• É uma interface gráfica desenvolvida para mostrar informações, combinando a capacidade do PVM console com todas as vantagens de uma ambiente gráfico e um único nível de depurador de fácil utilização na interface X-Windows
XPVM - Instalação
#yum install pvm-gui
#xpvm
Obs: a instalação default não está funcionando - Alguém se habilita a consertar o problema ?
Links
• https://www.millennium.berkeley.edu/
Ferramenta RRDTool - usada pelo Ganglia– http://www.rrdtool.com/
– http://oss.oetiker.ch/rrdtool/
• gexec– http://ganglia.info/talks/lug_lbl_talk/index.html– http://www.theether.org/gexec/
Links
• MPICH– http://www.mcs.anl.gov/research/projects/mpi/– http://www.mcs.anl.gov/research/projects/
mpi/mpich1/docs/mpichman-chp4/mpichman-chp4.htm
– ftp://ftp.mcs.anl.gov/pub/mpi/ 1.2.7
• Atlas– http://math-atlas.sourceforge.net/
Links
• FFTW– http://www.fftw.org/
• PVM (Parallel Virtual Machine)– http://www.csm.ornl.gov/pvm/
• LAM (Local Area Multicomputer)– http://www.lam-mpi.org/
• Open-MPI– http://www.open-mpi.org/
Links
• http://www.rocketcalc.com/vct/4.html
• XMTV– http://www.lam-mpi.org/software/xmtv/
• Open-MPI– http://www.open-mpi.org/software/ompi/v1.3/
• OpenMP– http://scv.bu.edu/documentation/tutorials/
OpenMP/
Instalação
• criar o arquivo /etc/yum.repos.d/DVDlocal.repo com o seguinte conteúdo:
[DVDlocal]
name=Repositorio Local
baseurl=http://10.0.10.177/repo
enabled=1
gpgcheck=0
Instalação
• garantir que a variável http_proxy não esteja habilitada
• execute o comando abaixo:
#unset http_proxy
Crie o diretório temp no diretório /etc/yum.repos.d
Mova os arquivos CentOS-Base, CentOS-Media localizados em /etc/yum.repos.d para o diretório temp