Montagem de um cluster com o MOSIX

Demonstrarei a montagem de um cluster Mosix na distribuição Debian 6. Foram usados 4 PCs de uso doméstico.

[ Hits: 27.128 ]

Por: Francisco Aldevan Barbosa em 12/01/2015 | Blog: http://www.aldevan.com.br


Testes e benchmark



mon - Mostra as informações do cluster e utilização individual de cada Nó. Já dentro do terminal (TTY) de mon, digite uma das opções que deseje monitorar:
  • l - Carga da CPU (load)
  • m - Memória ou Swap usado em cada Nó
  • u - Utilização individual de cada Nó
  • d/D - Nós morto (dead)
  • h - Lista complete de ajuda para os comandos

Quando montamos um novo cluster, a primeira curiosidade que temos é saber o desempenho, o quanto é rápido ao rodar os aplicativos, sua capacidade de processamento. Várias métricas podem ser usadas para aferir a real capacidade do cluster, mas duas delas são as mais usadas. Em aplicações científicas o que mais importa é a quantidade de operações com ponto flutuante o computador é capaz de realizar por segundo, essa pode ser medida em unidades de kiloflops/s, megaflops/s, gigaflops/s, teraflops/s, exoflops/s, zettaflop/s e yottaflop/s. Em supercomputadores o mais habitual que encontramos são os gigaflop/s, que equivalem a bilhão e teraflop/s equivale a trilhão.

Para aplicações não cientificas a métrica mais importante é a capacidade que o computador tem de executar instruções por segundoe normalmente é medido em Mop/s (milhões de operações por segundo) e Gop/s (bilhões de operações por segundo). A expressão para calcular o desempenho de operações com ponto flutuante pode ser feita usando a fórmula: [STE 2002]

P = N ∗ C ∗ F ∗ R

Onde temos:
  • P=Performance, is typically given in Mflops or Gflops.
  • N=Number of nodes.
  • C=nnumber of CPUs per node.
  • F=number of Floating-point operations per clock period.
  • R=clock Rate, measured in cycles per second.

Para rodar um aplicativo no cluster, chame o aplicativo precedido do comando mosrun, com esse parâmetro a aplicação pode fazer a migração para os Nós que estejam disponíveis para fazer o processamento. No ANEXO III tem uma lista com os principais comandos usado no Mosix, no site oficial do Mosix também tem documentação completa.

No Mosix vem um aplicativo para testar o sistema, é um aplicativo que gera uma grande carga de processamento e com isso podemos verificar o processamento em cada Nó do sistema. Esse aplicativo é o testload, que pode ser chamado precedido do mosrun para que esse possa ser executado pelo Mosix distribuindo a carga para o Nó que esteja menos ocupado.

Se passado como parâmetro o Nó onde desejamos executar, esse será movido para o Nó especificado. Para testar todos os Nós foi executado uma cópia em nada Nó usando o parâmetro para especificar os Nós de 1 à 4, assim temos certeza que todos os computadores serão carregados com esse aplicativo de teste. Em qualquer um dos Nós foi executado o comando:

# mosrun -1 testload &
# mosrun -2 testload &
# mosrun -3 testload &
# mosrun -4 testload &
Ao fazer essas 4 chamadas do aplicativo testload e explicitando onde deve rodar, podemos monitorar o resultado com o comando "mon" de qualquer computador que esteja no cluster ou mesmo do computador onde foi executado o testload. Digite mon e em outro terminal foi usado o comando top para verificar os aplicativos que estão sendo executados.
Para testar o desempenho e termos uma ideia da capacidade de processamento do cluster foi desenvolvido um programa para testar a quantidade de Mflop/s individualmente entre cada Nó, esse teste é interessante pois com isso podemos saber a capacidade do cluster.

O comando mosrun pode vir acompanhado além da aplicação que desejamos rodar de mais opções, entre elas podemos informar em qual Nó (node) queremos executar o aplicativo, exemplo:

# mosrun -4 ./flops

Esse comando executa o aplicativo "./flops" no computador 4, mesmo tendo sido digitado de qualquer outro computador. Posso verificar se a aplicação realmente está sendo executada no computador que desejo fazendo o monitoramento com o comando mon, que mostra a carga das CPU individualmente.

Se não tivesse passado o parâmetro "-4" no mosrun, esse aplicativo seria executado em qualquer outro computador que estivesse menos ocupado e mesmo estando sendo executado em um determinado computador, caso o mesmo venha a ser sobrecarregado por aplicações locais, o processo é migrado automaticamente sem nenhuma intervenção do operador para outro computador menos carregado. Essa técnica também chamada de preemptive process migration, ou seja, dá preferência para a migração do processo de forma silenciosa.
Para completar o teste vou chamar o aplicativo cada um rodando em um computador diferente para somar e saber a capacidade em Mflops tem o cluster. Foi rodado o aplicativo "flops" ao mesmo tempo nos diferentes computadores, nesse tipo de medição é testado inclusive a capacidade da rede e por isso os resultados são sempre menores do que rodar o aplicativo individualmente em computadores isoladamente. Em todo caso a soma dos Nós deu 2320 Mflop/s, ou 2,3Gflop/s.
Durante esse teste foi monitorado a carga dos computadores e podemos observar que os 4 computadores processaram ao mesmo tempo, sendo que o PC 4 foi o que mais ficou sobrecarregado já que ele é o que tem menor poder de processamento entre os outros e por isso precisou trabalhar mais para executar a mesma tarefa.

Foi desenvolvido um aplicativo em linguagem C para gastar tempo, é um laço for alinhado com outro for sendo executado 200.000 vezes 150.000 e durante o processamento é medido o seu tempo e com isso podemos saber exatamente quanto cada computador demora para realizar o calculo, esse código também pode funcionar em cluster do tipo Beowulf já que usa a biblioteca de "mpi" de paralelismo de instrução.

#include "mpi.h"
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int main(int argc,char *argv[])
{
double i, j;
double startwtime = 0.0, endwtime;
MPI_Init(&argc,&argv);
startwtime = MPI_Wtime();
for(i=0;i<200000;i++) { for(j=0;j<150000;j++);}
endwtime = MPI_Wtime();
printf("
Tempo de Processamento = %.3fmS
", endwtime-startwtime);
fflush( stdout );
printf("
Projeto: HPC - Cluster Mosix
©2012 - Francisco Aldevan


");
MPI_Finalize();
return 0;
}

Esse código foi compilado e rodado nos computadores PC 2 e PC 4, já que são computadores com recursos de hardware bem diferente e foi analisado quanto tempo cada computador demora para resolver e finalizar, no PC 2 demorou 43 segundos e no PC 4 demorou 81 segundos.
Toda a montagem do sistema foi feita de maneira experimental e com os computadores disponíveis no momento, para se interligar os computadores em rede foi usado um switch fabricado pela Cisco modelo Catalyst 2900XL, que estava montado no rack do Laboratório. É um switch que funciona em 10/100Mbps de 24 portas e configurado para funcionar em modo full duplex e em fastethernet, já que todos os computadores suportavam 100Mbps. Nesse mesmo rack tem diversos outros equipamentos como roteadores e switches para teste e experiências, no momento da montagem do cluster foi usado apenas o switch.

Conclusão

A necessidade cada vez maior por demanda de processamento e alta disponibilidade nos serviços que não podem parar e precisam de um alto uptime faz dos clusters uma alternativa altamente recomendada, dado seu baixo custo de implantação com componentes facilmente encontrados no mercado e dispensando tecnologias caras e proprietárias oferecidas no mercado de supercomputadores.

Com a popularização dos computadores pessoais cada vez mais poderosos e menor custo, ficam claras as vantagens de desenvolver grandiosos projetos com clusters de computadores de alto desempenho e confiável.

O uso de Software Livre também é outro grande atrativo, já que além da redução de custo existe a possibilidade de serem desenvolvidos novos dispositivos, drivers e sockets específicos para um determinado hardware, aumentando as possibilidades do projeto e dando total liberdade para seus idealizadores.

Outra grande vantagem econômica é a possibilidade implantação de clusters com computadores usados e mais antigos com recursos de hardware limitados e distintos, inclusive de diversos fabricantes, fazendo com que possa ser integrado à rede do cluster sem causar prejuízo ao sistema, já que funcionam de maneira independente e podem entrar e sair do cluster normalmente sempre que necessário sem a necessidade de paradas ou desligamento do mesmo.

Essa aplicação também pode ser muito útil em universidades para o ensino de programação em sistemas de paralelismo, pesquisas e simulações mais pesadas que exigem alto poder de processamento, visto que pode ser montado pelos próprios alunos aproveitando o parque tecnológico ou estações de trabalho dos laboratórios de informática da instituição para a montagem do sistema.

No projeto de um cluster a primeira análise a ser feita é saber exatamente a finalidade à que se propõe o projeto, visto que cada sistema tem finalidade distinta e especifica para rodar as aplicações dos usuários e é fator decisivo na escolha de um projeto de computação distribuída, seja para alto desempenho (HPC), alta disponibilidade (HA), balanceamento de carga (HS) ou computação em grade (Grid Computing), são sistemas completamente distintos e que fazem uso de aplicativos distintos, não sendo compatíveis na maioria das aplicações.

Quanto ao desempenho apresentado nos testes realizados foi bastante promissor, já que entre os computadores foi usado computadores mais antigos, inclusive computador com processador Intel Pentium 4 e no geral somando a capacidade de processamento dos quatro computadores do cluster deu uma capacidade de 2,3 bilhões de operações com ponto flutuante por segundo.

Bibliografia

[BOO 2012] Bookman, Charles. Building and Maintaining Linux Clusting
2012, News Riders Publisher

[MOS 2012] Site oficial MOSIX
Disponível em: http://www.Mosix.org
Acessado em 20 de Novembro de 2012

[STE 2002] Sterling, Thomas. Beowulf Cluster Computing with Linux
2002 Massachusetts Institute of Technology

[TAN 2002] Tanenbaum, Andrew S, Distributed System Principles and Paradigms, Edição 2002 Prentice-Hall

Página anterior    

Páginas do artigo
   1. Introdução
   2. Sistema operacional
   3. Instalação do Mosix e compilação do kernel
   4. Monitoramento e status do cluster
   5. Testes e benchmark
Outros artigos deste autor

Jogando Duke Nukem online com YANG e Ubuntu/Debian

Instalação do Asterisk - Distribuição Trixbox

Duke Nukem online com hDuke, Linux Mint e YANG

Instalação do Asterisk - Distribuição Meucci

Cabos de rede e conectorização

Leitura recomendada

Zoneminder: Substituindo um Unifi NVR

Nagios Core 4.0.8 com Debian 7 e Client Windows Server

Configurando serviço DHCP (Debian)

Trabalhando com subredes

Análise de Desempenho: Web API - Recursos técnicos

  
Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts