o que é o cluster openmosix - compilação de um kernel linux para
Transcrição
o que é o cluster openmosix - compilação de um kernel linux para
O QUE É O CLUSTER OPENMOSIX - COMPILAÇÃO DE UM KERNEL LINUX PARA UM CLUSTER OPEN/MOSIX E MONTAGEM BÁSICA DE UM CLUSTER OPENMOSIX. O QUE É O CLUSTER OPENMOSIX COMPILAÇÃO DE UM KERNEL LINUX PARA UM CLUSTER OPEN/MOSIX E MONTAGEM BÁSICA DE UM CLUSTER OPENMOSIX. 1 André Avila Kaminski 2 Resumo Um cluster openMosix é formado por um conjunto de computadores que utilizam um sistema operacional distribuído. É construído a partir de computadores convencionais (nós) ligados em rede, os quais comunicam-se através do sistema de forma que ocorre um balanceamento de carga de processamento entre os nós do cluster. Utiliza-se o kernel Linux para a instalação do sistema, no qual é aplicado um patch que torna possível a compilação de suporte à migração de processos, bem como medição de carga e comunicação entre os nós do sistema diretamente no kernel. O openMosix é um projeto de Software Livre, motivo pelo qual garante o baixo custo de montagem de um cluster cujo desempenho é muito interessante. Palavras-chave: Cluster, Linux, Software Livre Abstract An openMosix Cluster is formed by a set of computers that use a distributed operational system. It is constructed from conventional computers (nodes) on a network, which communicate themselves through the system, occurring a balancing of load process by the nodes of the cluster. The kernel Linux is used for the installation of the system, a patch is applied in the kernel making possible the compilation of support to the migration of processes, as well as load measurement and communication by the nodes of the system directly in the kernel. The openMosix is a free software project, it is the reason for the guarantees to the low cost of assembly of cluster whose performance is very interesting. Key-words: Cluster, Linux, Free Software 1. CLUSTER Define-se um cluster como um conjunto de Pcs ou estações que, interligados, comportam-se como um sistema de imagem única (SSI - Single System Image). O conceito de SSI se resume em que um sistema paralelo ou distribuído independe de ser composto por vários processadores ou recursos físicamente distribuídos, deve comportar-se com um sistema centralizado do ponto de vista do usuário, sendo transparente ao mesmo todos os aspectos relativos à distribuição de dados e tarefas, comunicação e sincronização entre tarefas e a organização física do sistema. 1 Este artigo encontra-se sob a licença Creative Commons. http://creativecommons.org/licenses/by-ncsa/2.0/br/. Foi liberado pelo próprio autor para ser inserido na Revista Gestão e Conhecimento. 2 Bacharel em Relações Internacionais e estudante de pós-graduação em Software Livre. Bolsista há 2 anos no Instituto de Tecnologia do Paraná (http://www.tecpar.br), atuando em pesquisas de soluções em Software Livre para projetos de migração de plataformas. Pesquisador do desenvolvimento do Software Livre na América Latina, bem como dos impactos políticos e sociais gerados pela evolução do mesmo na região. E-mail: [email protected] Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006: 49 - 75 Kaminski, André Ávila Em uma rede, os nós tendem a ser menos complexos do que os nós de um cluster, pois em uma rede os nós correspondem a Pcs ou estações monoprocessadas. Em um cluster, os nós podem conter dois, quatro ou mais processadores, tendo uma complexidade igual ou até mesmo maior do que máquinas MPP (máquinas proprietárias de processamento massivo), se for considerado a presença de discos e sistemas operacionais. As máquinas SMP (máquinas multiprocessadas) geralmente são mais complexas, pois podem conter um número maior de processadores. As redes de comunicação dos computadores podem ser baseadas em switches de alta velocidade, que permitem a transmissão simultânea de pacotes pertencentes a diferentes pares de comunicação em alta velocidade, como no caso do fast ethernet e gigabit ethernet. A constante demanda de poder computacional vem gerando a necessidade de processadores cada vez mais rápidos. Na computação de alto desempenho, utilizada para programação científica, multimídia, gerenciamento de grandes volumes de dados etc., a solução passa por máquinas com múltiplos processadores ou ainda clusters proprietários fornecidos por grandes empresas. Ambas soluções são custosas e de pouca escalabilidade. O projeto openMosix viabiliza a computação de alto desempenho utilizando computadores ligados em rede e com sistema operacional GNU/Linux. 1.1 O Cluster openMosix Durante a década de 1980, foi utilizado pela força aérea americana, para a construção de um cluster de computadores PDP 11/45, o projeto Mosix (Multicomputer Operating System uniX), um sistema operacional distribuido originalmente desenvolvido pelos estudantes da Universidade Hebrew em Jerusalém, Israel, juntamente com o professor Ammon Barak. Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006 50 O QUE É O CLUSTER OPENMOSIX - COMPILAÇÃO DE UM KERNEL LINUX PARA UM CLUSTER OPEN/MOSIX E MONTAGEM BÁSICA DE UM CLUSTER OPENMOSIX. Em 10 de fevereiro de 2002 surgiu uma extensão do projeto Mosix, o openMsix, baseado na GPLv2 3 para manter os privilégios dessa solução Linux 4 para cluster disponível com software de código aberto, coordenado pelo Ph.D Moshe Bar. O openMosix é uma extensão do kernel Linux do sistema operacional GNU/Linux, que faz com que um cluster de computadores se comporte como um grande e único supercomputador através da utilização de migração preemptiva de processos e balenceamento dinâmico de carga. A implementação da migração preemptiva de processos é capaz de migrar qualquer processo do usuário, em qualquer instante e para qualquer nó disponível de maneira transparente. Para atingir um melhor desempenho este é controlado por algoritmos de balanceamento dinâmico de carga e de prevenção contra a falta de memória. Estes algoritmos são projetados para responder dinamicamente as variações da utilização dos recursos nos diversos nós. Isto garante que o cluster se comporte muito bem, seja numa configuração com poucas ou com muitas máquinas, propiciando uma maior escalabilidade. Se o programa que estamos rodando em uma máquina consumir muito recurso dela, o sistema varre a rede toda e procura uma máquina que esteja com seus recursos mais disponíveis em termos de memória e CPU, e desloca o processo, ou parte dele, para ser executado remotamente, assim, o sistema ganha desempenho. Os algoritmos de balanceamento dinâmico de carga e de prevenção contra a falta de memória são descentralizados, não existindo assim a configuração de um controlador mestre e nós escravos como ocorre no Cluster Beowulf 5 para computação paralela. Cada nó um mestre para os processos que são criados localmente, e um servidor para processos remotos, migrados de outros nós do cluster. Sendo assim, podemos acrescentar ou remover as máquinas do cluster em qualquer momento, com um mínimo de disturbio no sistema. Existem também algoritmos de monitoramento que identificam a velocidade de cada nó, a carga da CPU e a memória livre disponível, e 3 http://www.gnu.org/copyleft/gpl.html http://www.kernel.org/ 5 http://www.beowulf.org/ 4 Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006 51 Kaminski, André Ávila também como está a comunicação interprocessos IPC e a velocidade de acesso a cada processo. O openMosix opera de forma silenciosa, assim as operações são transparentes para as aplicações, pode-se executar aplicações sequenciais e paralelas como se fosse um único computador SMP (multiprocessamento simétrico). Você não precisa saber onde os processos estão sendo executados, nem se preocupar com o que as outras máquinas estão fazendo na rede, por isso ele usa o acrônimo “fork and forget”. O que ele faz é, pouco tempo depois de iniciar os processos, o openMosix enviaos para um melhor computador da rede, o openMosix continua a monitorar os novos processos e os demais, e poderá movimentá-los pelos computadores com pouca carga de trabalho maximizando o trabalho e melhorando a performance do cluster. Aplicações que se beneficiam com o openMosix: – processos CPU-bound: processos com longos tempos de execução e baixo volume de comunicação entre processos, como aplicações científicas e de engenharia, que necessitam de altas performances de computação; – grandes compilações; – processos I/O bound misturados com processos da CPU: executados através do servidor de arquivos, usando o sistema de arquivos distribuídos do openMosix, o MFS (Mosix File System) e o DFSA (Distributed File System Architeture); – banco de dados que não usem memória compartilhada; – processos que podem ser migrados manualmente. As desvantagens do openMosix: – processos com baixa computação, como aplicativos com alta comunicação interprocessos; – aplicações com memória compartilhada; Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006 52 O QUE É O CLUSTER OPENMOSIX - COMPILAÇÃO DE UM KERNEL LINUX PARA UM CLUSTER OPEN/MOSIX E MONTAGEM BÁSICA DE UM CLUSTER OPENMOSIX. – aplicações dependentes do hardware que necessitam de acesso a um periférico de um nó em especial; – aplicações com muitas threads não ganham desempenho; – não se ganha desempenho quando se roda um único processo, tal como seu browser por exemplo. Aplicações testadas que não migram sobre openMosix: – programas em Java usando threads nativas não migram desde que eles utilizem memória compartilhada. Green Threads JVMs, entretanto, podem ser migradas porque cada thread Java é um processo separado; – aplicações que usam pthreads; – MySQL, Apache, Oracle, Postgres, SAP, Baan, usam memória compartilhada; – python com threading habilitada; – Vmware. Este, ao rodar o Win98, algumas vezes trava e em outras o emulador do sistema operacional pára. Deve-se ter muito cuidado quando utilizar o Vmware com o openMosix. A característica de não migrar é uma situação normal para programas que falhariam ao serem movimentados pelo openMosix. Estes programas devem rodar como planejado no nó onde foram iniciados. 2. ALGORITMO DE COMPARTILHAMENTO DE RECURSOS DO CLUSTER OPENMOSIX 2.2 Balanceamento Dinâmico de Carga O algoritmo de balanceamento de carga tenta continuamente reduzir a diferença de carga entre pares de nós, transportando processos de um nó muito Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006 53 Kaminski, André Ávila carregado para um nó menos carregado. O esquema utilizado não é centralizado, todos os nós executam o mesmo algoritmo, e a tentativa de redução das diferenças é executada independentemente e aos pares. 2.3 Anunciador de Memória O algoritmo do anunciador de memória serve para evitar o exaurimento da memória. Este é direcionado para tentar colocar a maior ocupação possível da memória do cluster de computadores, evitando ao máximo que ocorra a paginação ou utilização da memória virtual. Inclusive, é quando um determinado nó começa a fazer muita paginação que o algoritmo entra em ação. Neste caso específico, este algoritmo tem a preferência sobre os demais, mesmo que a migração do processo cause um desbalanceamento de carga. 2.4 Migração Preemptiva de Processos A Migração Preemptiva de Processos (MPP) é capaz de migrar qualquer processo, em qualquer instante, para qualquer nó do cluste. Usualmente esta migração é baseada nas informações geradas pelos algoritmos automáticos, mas também podem ser sobrepostas por operações manuais, sejam estas executas pelo usuário ou por outros processos. Cada processo tem o seu UHN (Unique Home Node), máquina na qual o processo foi criado.Normalmente é onde o usuário está logado. O modelo que o openMosix segue é espelhado num Cluster de Computadores CC (Cluster of Computers) onde cada processo "pensa" que está rodando no seu UHN e todos os processos deste usuário compartilham este ambiente UHN. Os processos que são migrados para outros nós podem usar os recursos locais do novo nó, caso seja possível, mas interagem com o ambiente do usuário através do UHN. Para exemplificar esse conceito, podemos dizer que caso o usuário venha a executar um comando "top", este deverá listar todos os processos que o usuário disparou, inclusive aqueles que foram transferidos para os nós remotos. Outro exemplo seria: um dos processos que foi Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006 54 O QUE É O CLUSTER OPENMOSIX - COMPILAÇÃO DE UM KERNEL LINUX PARA UM CLUSTER OPEN/MOSIX E MONTAGEM BÁSICA DE UM CLUSTER OPENMOSIX. migrado invoca o método "gettimeofday()" que deve retornar o horário corrente da máquina UHN. O MPP é a principal ferramenta que os algoritmos de gerência de recursos utiliza, por exemplo, enquanto os recursos, como a memória ou a CPU, estão subutilizados ou abaixo do limite estabelecido o processo está confinado a ficar no UHN. Mas, se em um determinado instante estes limites forem extrapolados, alguns processos serão migrados para outros nós para aproveitar da melhor maneira possível os recursos disponíveis. Todo este processo é feito sem um controle central, não existindo nenhum relacionamento mestre/escravo entre os nós. Ou seja, cada nó do sistema opera de maneira independente e autônoma, tomando as suas decisões de maneira independente, o que permite uma configuração dinâmica, onde os nós podem entrar ou sair do grupo causando o mínimo de problema. Isto garante uma boa escalabilidade tanto em sistemas de grande porte quanto em pequenos sistemas. 2.5 Implementação da Migração de Processos O openMosix suporta e implementa de maneira transparente a migração de processos de modo preemptivo. Para realizar isso, o openMosix divide o processo que será migrado em duas partes, ou seja, em dois contextos: um que será transferido, que é chamado de contexto do usuário, e outro que é dependente da UHN e que não pode ser migrado, que chamamos de contexto do sistema. O contexto do usuário, chamado de representado, contém o código do programa, a pilha, os dados, os mapas de memória e o estado dos registradores do processo. O representado encapsula todas as informações do processo que estão rodando em modo usuário. O contexto do sistema, chamado de representante encapsula o processo quando este está rodando em modo supervisor. Este contém todas as descrições dos recursos os quais o processo faz uso ou está alocado para ele, e a pilha do sistema que Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006 55 Kaminski, André Ávila controla a execução do processo. Como ele contém a parte do processo que é dependente do contexto do sistema, ele deve permanecer no UHN. Como foi citado anteriormente, o representado pode ser transferido quantas vezes for necessário, para qualquer nó do cluster, mas o representante jamais pode ser movido. Como a interface entre o modo usuário e o modo supervisor é muito bem definida e conhecida, é possível e extremamente simples interceptar toda e qualquer interação que existe entre esses dois modos e encaminhá-la para outros nós da rede. Isto é feito numa camada que chamamos de camada de adaptação a qual contém um canal especial de comunicação para a interação entre elas. Por causa desta divisão o processo a ser migrado tem um tempo de migração também composto por duas partes, uma fixa que é o tempo para criar a imagem do processo no nó remoto, e uma parte linearmente proporcional ao número de páginas a serem transferidas do processo. Para tentar minimizar a sobrecarga imposta pela migração, somente a tabela de páginas e as páginas marcadas como "sujas" do processo são transferidas. No momento da execução o openMosix garante a transparência de localização, transferindo todas as chamadas de sistema que são dependentes do local para o representante que está no UHN do processo. Estas chamadas são síncronas, ou seja, são interceptadas pela camada de adaptação remota e transferidas pelo canal especial de comunicação para o nó onde o processo foi lançado, este é executado e o retorno é re-transferido para o nó remoto o qual segue na execução do processo. Se durante esta execução a camada de adaptação descobre que algumas dessas chamadas ao sistema são independentes da localização, esta decide por não mandar a chamada para o UHN e a executa localmente, melhorando assim o desempenho. Evidentemente existem outras formas de interação entre os dois contextos do processo, como sinais, dados chegando pela rede, eventos, etc. Estes tipos de interações fazem com que o representante assincronamente tente localizar e interagir com o representado. Para que isso funcione o representado fica monitorando o canal especial de comunicação para ver se algum evento ou dado chega para ele. Ao mesmo Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006 56 O QUE É O CLUSTER OPENMOSIX - COMPILAÇÃO DE UM KERNEL LINUX PARA UM CLUSTER OPEN/MOSIX E MONTAGEM BÁSICA DE UM CLUSTER OPENMOSIX. tempo o representante verifica sempre se alguma ação deve ser tomada quando algum tipo de evento ou dado chega para ele. Essa implementação é bastante robusta e independente de modificações que ocorram no núcleo do sistema, assim como não utiliza características especiais do sistema ou da máquina, o que garante que isso possa ser portado para diferentes arquiteturas de máquinas. Porém existe um pequeno problema. Para todas as chamadas do sistema existe uma sobrecarga para testar o que deve ser feito, e esta será ainda maior se tiver que ser transferida entre os nós. No entanto, normalmente, os ganhos são maiores o que justifica a implementação deste sistema. Algumas funções do núcleo do sistema não são compatíveis com esse esquema de divisão do processo em duas partes, como, por exemplo, escrita em memória compartilhada, aplicações em tempo real, instruções que acessem um barramento específico, dentre outras. Nestes casos, os processo são automaticamente confinados no UHN e, se por algum motivo eles já foram transportados, eles devem ser migrados de volta para o UHN. 2.6 Acesso à Arquivos Outro grande desafio dos clusters SSI é que cada nó tem que ser capaz de acessar o sistema de arquivos de todos os outros nós. Isso acontece porque caso seja executado um programa que abre o arquivo /tmp/teste para leitura e escrita este processo migra para outro nó do cluster e ele deve ser capaz de continuar fazendo I/O para o arquivo e a partir dele. Até agora existem duas opções para fazer isso. Na primeira, o cluster openMosix intercepta todos I/Os feitos por processos que foram migrados para o host corrente e depois para outro nó e manda estas requisições para o nó no qual o processo se originou. A segunda, seria criar uma visão global do sistema de arquivos através de NFS. A primeira é mais difícil de desenvolver, mas mais fácil de manter em operações do dia-a-dia. A segunda é mais fácil de implementar, mas pode ser mais Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006 57 Kaminski, André Ávila problemático montar todos sistemas de arquivos de maneira inteligente, permitindo que cada nó acesse todos os outros nós. Adicionalmente é preciso ter certeza que todos os UIDs (identificador de usuários no sistemas Linux) e GIDs (identificador de grupos nos sistemas Linux) são consistentes para todos os nós no cluster, em contrapatida sérios problemas de permissões de acessos aos arquivos irão aparecer. Até então o openMosix suportou as duas opções. Mas agora está surgindo um novo sistema de arquivos de cluster para Linux que permite uma visão compartilhada de todos os sistemas de arquivos. Desenvolvedores de clusters dizem que todas as soluções atuais para sistemas de arquivos de cluster do tipo cluster-wide são baseados num servidor de arquivos central, mas existem novas tecnologias de sistemas de arquivos sendo desenvolvidas que atendem todas as necessidades de um cluster SSI como o openMosix. Utilizando o melhor do que está sendo pesquisado atualmente em sistema de arquivos e aplicando isto ao openMosix, surgiu o DFSA (Direct File System Access). O sistema de arquivos DFSA foi projetado para reduzir o overhead causado pela execução de I/Os feitas por chamadas de sistemas de processos migrados. Isto foi feito permitindo que a execução de grande parte das chamadas de sistemas seja feita localmente - no nó onde o processo se encontra. Além disso, o DFSA possui um novo algoritmo que leva em conta as operações de I/O que foi adicionado à política de distribuição de processos do openMosix (balanceamento de carga). O resultado dessas inovações é que os processos que executam de moderado a alto volume de I/Os provavelmente serão migrados para o nó ao qual se dirigem a maior parte de seus I/Os. Uma vantagem óbvia disto é que os processos que tenhas I/O limitado terão uma flexibilidade maior para migrar de seus respectivos nós originais para que o sistema obtenha um melhor balanceamento de carga. Então, diferentemente de todos os sistemas de arquivos de rede existentes (se diz NFS) que trazem os dados do servidor de arquivos para o nó do cliente através da rede, um cluster openMosix tenta migrar os processos para um nó no qual o arquivo está armazenado. Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006 58 O QUE É O CLUSTER OPENMOSIX - COMPILAÇÃO DE UM KERNEL LINUX PARA UM CLUSTER OPEN/MOSIX E MONTAGEM BÁSICA DE UM CLUSTER OPENMOSIX. 3. CONSTRUINDO UM CLUSTER OPENMOSIX Pode-se ter um cluster openMosix basicamente de duas maneiras: – A primeira opção seria utilizar uma distribuição Linux diretamente de um CD bootavel. Estas distribuições são voltadas exatamente para a montagem de clusters, facilitando muito o aprendizado de iniciantes no mundo dos supercomputadores, pois é necessário apenas dar o boot pelo CD em duas ou mais máquinas interligadas em rede para ver um cluster funcionando. Pode-se citar como exemplo de distribuições a distribuição ClusterKnoppix 6 , que serve como um “Terminal Server” para máquinas clientes com boot via PXE e a distribuição dyne:bolic, voltada para produção multimídia. Outras distribuições bootáveis podem ser encontradas no site http://openmosix.sourceforge.net/instant_openm osix_clusters.html; – A segunda opção, a qual será descrita neste artigo, é utilizar uma distribuição Linux qualquer com instalação física na máquina. Deve-se utilizar um kernel Linux e aplicar um patch neste kernel, habilitando-o às necessidades do openMosix. 3.1 Escolhendo uma Distribuição Linux A distribuição Linux a ser utilizada depende muito da opção da pessoa responsável pelo cluster, pois o importante é o kernel Linux estar habilitado para trabalhar com o openMosix. Para a construção de um cluster openMosix a distribuição Debian GNU/Linux 7 é amplamente utilizada, mas pode-se encontrar tutoriais de montagem de um cluster openMosix com várias outras distribuições, como o tutorial “openMosix Cluster on Gentoo 8 ” do Gentoo Linux 9 , por exemplo. 6 7 8 http://bofh.be/clusterknoppix/ http://www.debian.org/ http://www.gentoo.org/doc/en/openmosix-howto.xml Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006 59 Kaminski, André Ávila Será utilizada o Debian GNU/Linux para a montagem do cluster openMosix. Existem nos repositórios da distribuição os pacotes necessários para a instalação do cluster e monitoração do mesmo, e pode-se encontrar também na internet shell scripts para demonstrar a migração de processos entre os nós do cluster. 3.2 Escolhendo um Kernel Linux para o Sistema A escolha do kernel pode ser definida pela finalidade da montagem do cluster e pelo hardware utilizado nas estações. No site oficial do projeto openMosix 10 apenas o patch para o kernel versão 2.4.26 é disponibilizado como estável, mas existem patchs para outras versões em um site não-oficial 11 , onde encontra-se até mesmo para as últimas versões. Na internet fica fácil encontrar resoluções de problemas para versões mais antigas do kernel, enquanto para as versões mais recentes encontrase pouca coisa, por isso é aconselhável utilizar versões mais velhas do kernel. Atualmente (10/11/2005) o kernel Linux está na versão estável 2.6.14.1, mas como o patch para esta versão ainda não está oficialmente declarado estável pelos mantenedores do projeto openMosix, será utilizado o kernel 2.4.26, o qual se mostra muito estável para a função. 3.3 Iniciando a Montagem do Cluster para Demonstração dos Testes Para demonstração do funcionamento de um cluster openMosix, serão utilizadas duas máquinas com sistema operacional Debian GNU/Linux com um kernel 2.4.26 com o patch devidamente aplicado. As configurações das máquinas (nós) do cluster são: • Máquina 01 (N1): – Notebook Acer / TravelMate 260 9 http://www.gentoo.org/ http://openmosix.sourceforge.net/ 10 11 http://openmosix.snarc.org/ Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006 60 O QUE É O CLUSTER OPENMOSIX - COMPILAÇÃO DE UM KERNEL LINUX PARA UM CLUSTER OPEN/MOSIX E MONTAGEM BÁSICA DE UM CLUSTER OPENMOSIX. – Processador Intel Mobile Pentium III 1000MHz, 512KB cache – 256MB de memória RAM – Placa de rede fast ethernet RealTek RTL-8139 10/100 • Máquina 02 (N2): – Processador AMD Athlon 2800+ (1800MHz), 64 bits, 512KB cache – 512MB de memória RAM – Placa de rede gigabit ethernet Realtek RTL8169/8110 10/100/1000 No sistema operacional Debian GNU/Linux da N1 está instalado a interface gráfica Gnome 12 , para que seja possível a visualização da migração de processos entre os nós do cluster através do aplicativo openMosixview 13 , versão 1.5. Neste aplicativo podem ser vistos a eficiência do balanceamento de carga entre os nós, a memória total do cluster, o número de processadores do cluster, a porcentagem de memória utilizada e também existem opções para visualizar a migração de processos entre os nós, os processos que estão em andamento e gráficos da carga dos nós do cluster, dando a opção de poder gravar e/ou imprimir estes gráficos. É necessária a interface gráfica na N1 por dois motivos: o primeiro seria a demonstração gráfica da migração de processos; o segundo seria por ser uma máquina com menor poder de processamento e memória RAM, facilitando a indução de migração de processos para a N2. Na máquina N2 não haverá necessidade de utilizar interface gráfica, pois assim haverá mais memória livre para os testes. No nó N2 não haverá mais nada rodando a mais do que o sistema operacional Debian GNU/Linux e o openMosix. A ligação entre os dois nós do cluster será feita por um cabo crossover, por ter apenas dois nós, e sem a necessidade de conexão com outra rede ou máquinas, será dispensado a utilização de switches ou hubs, para que haja uma maior performance e diminua a possibilidade de falhas na hora dos testes. A velocidade da placa de rede do N2 é gigabit ethernet, mas trabalhará apenas como fast ethernet, pois a limitação está na placa de rede do nó N1. 12 http://www.gnome.org/ Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006 61 Kaminski, André Ávila 4. COMPILADOR PARA UM KERNEL LINUX COM SUPORTE AO CLUSTER OPENMOSIX Para que se possa compilar um Kernel Linux openMosix é necessário utilizar a versão 3.3.2 do compilador gcc 14 , pois quando utilizada outra versão, a compilação apresentou muitos erros, impossibilitando a criação do kernel openMosix. Para isso foi necessário fazer o download do código fonte do gcc-3.3.2 15 , descompactá-lo com o comando: tar jxvf gcc-3.3.2.tar.bz2 E compilá-lo com a opção CC=”gcc-3.3”, para que fosse corretamente compilado e instalado, com os seguintes comandos: cd gcc-3.3.2 ./configure make CC=”gcc-3.3” make CC=”gcc-3.3” install Agora já existe no sistema o compilador necessário para a criação do kernel openMosix. O executável do compilador gcc versão 3.3.2 será instalado no diretório /usr/local/bin/ com o nome de “i686-pc-linux-gnu-gcc-3.3.2”. 5. COMPILANDO UM KERNEL LINUX PARA CLUSTER OPENMOSIX Como citado anteriormente, será utilizado um kernel Linux versão 2.4.26 para a utilização nos nós, tanto no N1 quanto no N2. Não há nada a mais nos kernels de ambas as máquinas do que o necessário para cada uma funcionar como um nó de 13 http://www.openmosixview.com/ http://gcc.gnu.org/ 15 http://mirrors.usc.edu/pub/gnu/gcc/gcc-3.3.2/gcc-3.3.2.tar.bz2 14 Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006 62 O QUE É O CLUSTER OPENMOSIX - COMPILAÇÃO DE UM KERNEL LINUX PARA UM CLUSTER OPEN/MOSIX E MONTAGEM BÁSICA DE UM CLUSTER OPENMOSIX. cluster openMosix e habilitar as funcionalidades necessárias para a demosntração do funcionamento do cluster. O primeiro passo foi fazer o download do código fonte do kernel 2.4.26 16 do site oficial do Kernel Linux, descompar o código fonte no diretório correto: mv linux-2.4.26.tar.bz2 /usr/src/ cd /usr/src/ tar jxvf linux-2.4.26.tar.bz2 Criar o link simbólico: ln -s /usr/src/linux-2.4.26 /usr/src/linux Fazer o download do patch 17 a ser aplicado no Kernel Linux do site oficial do openMosix e descompactá-lo diretório correto: bunzip2 openMosix-2.4.26-1.bz2 mv openMosix-2.4.26-1 /usr/src/linux/ O código fonte do kernel já está, juntamente com o patch apropriado, dentro do diretório correto. Agora, antes de aplicar o patch no kernel, é necessário retirar do código fonte do kernel tudo que não for necessário para a compilação, com os seguintes comandos: cd /usr/src/linux/ make clean make mrproper E copiar uma configuração básica para o kernel: cp arch/i386/defconfig .config E então aplicar o patch de modificação: 16 17 http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.26.tar.bz2 http://prdownloads.sourceforge.net/openmosix/openMosix-2.4.26-1.bz2?download Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006 63 Kaminski, André Ávila cat openMosix-2.4.26-1 | patch -Np1 Este último comando não deverá retornar erro algum. Se algum erro ocorrer, verifique se a versão do kernel e do patch são as mesmas citadas acima. Neste ponto está efetuada a modificação no código fonte do Kernel Linux. Isto modificou cerca de 3% do código fonte, acrescentando algumas entradas para que seja possível a correta compilação do kernel com suporte à todas as funcionalidades do openMosix. O próximo passo é selecionar no kernel o que for necessário e terminar a compilação. Deve-se ter em mente que o processo deverá ser efetuado em cada nó do cluster, pois cada um deles necessita de um kernel apropriado para ser hardware, a não ser que todas as máquinas do cluster tenhas exatamente a mesma configuração. O próximo comando para acessar a interface de configuração do kernel é: cd /usr/src/linux make menuconfig Uma interface com todas opções do kernel Linux é aberta, possibilitando a ativação do hardware necessário para uma boa compilação. Pode-se observar uma entrada “openMosix” na primeira linha, a qual não estaria presente se o patch não tivesse sido aplicado. É necessário que no kernel estejam presentes no mínimo as seguintes configurações: • Na entrada “openMosix”, para habilitar o suporte à cluster: – openMosix process migration support – Stricter security on openMosix ports – (3) Level of process-identity disclosure – Poll/Select exceptions on pipes • Deve ser escolhido o processador certo na entrada “Processor type and features” para suporte ao processador do nó em questão Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006 64 O QUE É O CLUSTER OPENMOSIX - COMPILAÇÃO DE UM KERNEL LINUX PARA UM CLUSTER OPEN/MOSIX E MONTAGEM BÁSICA DE UM CLUSTER OPENMOSIX. • Na entrada “Block devices”, para suporte à comunicação entre trabalhos cliente X servidor sobre rede TCP/IP: – Network block device support • Deve ser escolhido o modelo da placa de rede do nó em questão na entrada “Network device support” • Na entrada “File systems” devem ser selecionados todos os sitemas de arquivos que estejam presentes no sistema operacional do nó em questão Deve-se gravar as configurações e sair da interface. Basicamente é isso que deve estar no kernel. É aconselhável não colocar nada que não seja necessário, para maior performance do sistema. Agora, depois de ter configurado o kernel para ser compilado com suporte à todas as necessidades, já é possível começar a compilação do kernel para a máquina utilizando o gcc versão 3.3.2, com os comandos: make CC=”/usr/local/bin/i686-pc-linux-gnu-gcc-3.3.2” dep make CC=”/usr/local/bin/i686-pc-linux-gnu-gcc-3.3.2” bzImage make CC=”/usr/local/bin/i686-pc-linux-gnu-gcc-3.3.2” modules make CC=”/usr/local/bin/i686-pc-linux-gnu-gcc-3.3.2” modules_install Se nenhum erro ocorrer, o kernel já deverá estar compilado neste momento, e deve ser copiado para o diretório /boot : cp arch/i386/boot/bzImage /boot/kernel-2.4.26-om1 Neste ponto só falta configurar o loader. No caso está sendo utilizado o GRUB 18 , então: Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006 65 Kaminski, André Ávila vi /boot/grub/menu.lst E adiciona as entradas necessárias para o sistema bootar pelo novo kernel openMosix: Ao reiniciar o sistema pelo novo kernel, se for necessário fazer alguma mudança, é só adicionar ou remover as entradas na configuração do kernel (make menuconfig) e repetir os passos posteriores, deixando o kernel exatamente como o nó precisa para correto funcionamento. O processo deve ser repetido para cada um dos nós. 6. EXECUTANDO OS TESTES Para demonstrar o funcionamento do cluster openMosix, formado pelos nós N1 e N2, utilizou-se um shell script (teste-om.sh) elaborado com a função de testar a velocidade de processamento do cluster, que dispara cinco vezes outro shell script (stress-test.sh) com o comando awk que eleva o processamento do nó ao máximo, chegando a utilizar 100% da CPU dos nós. O nó utilizado para rodar o script foi o nó N1, que tem menor poder de processamento, já para demonstrar a migração dos processos para o nó N2, uma máquina maispotente. O tempo de processamento do script inicialmente sera medido rodando apenas no nó N1, com o cluster desativado, sendo comparado com o tempo obtido com o cluster ativado, rodando o nó N1 e o nó N2. Abaixo estao listados os comandos de cada shell script utilizado para testar o cluster: - Shell script teste-om.sh #!/bin/bash #por Andre Kaminski #[email protected] 18 http://www.gnu.org/software/grub/ Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006 66 O QUE É O CLUSTER OPENMOSIX - COMPILAÇÃO DE UM KERNEL LINUX PARA UM CLUSTER OPEN/MOSIX E MONTAGEM BÁSICA DE UM CLUSTER OPENMOSIX. echo 'Iniciando teste do openMosix' date "+%Hh %Mm %Ss" ./stress-test.sh & ./stress-test.sh & ./stress-test.sh & ./stress-test.sh & ./stress-test.sh date "+%Hh %Mm %Ss" echo 'Final do teste do openMosix' - Shell script stress-test.sh #!/bin/bash awk 'BEGIN {for (i=0;i<10000;i++)for(j=0;j<10000;j++);}' No primeiro script pode-se observar cinco chamadas para o segundo, que por sua vez pode ser modificado para conseguir um maior processamento do(s) nó(s) do cluster. O tempo inicial e final do script também são demonstrados, com a finalidade de medir quanto tempo foi necessário para rodar o script apenas no nó N1, com o cluster desativado, e também nos nós N1 e N2, com o cluster ativado, para posteriormente serem comparados e demonstrar a funcionalidade do openMosix. Foram elaborados cinco testes com o openMosix ativado e cinco testes com o openMosix desativado, para obter-se a media dos resultados. O resultado, com o cluster desativado, rodando no nó N1, ficou registrado no arquivo texto n1.txt, e está listado abaixo. Testes com o cluster openMosix desativado: Iniciando teste do openMosix 00h 46m 52s 00h 49m 13s Final do teste do openMosix Iniciando teste do openMosix 00h 49m 57s 00h 52m 15s Final do teste do openMosix Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006 67 Kaminski, André Ávila Iniciando teste do openMosix 00h 52m 22s 00h 54m 43s Final do teste do openMosix Iniciando teste do openMosix 00h 54m 56s 00h 57m 14s Final do teste do openMosix Iniciando teste do openMosix 00h 57m 18s 00h 59m 37s Final do teste do openMosix Organizando os resultados obteve-se a Tabela 01 abaixo relacionada: TABELA 01 - RESULTADO DOS TESTES COM CLUSTER DESATIVADO - inicio 00h 52s 00h 57s 00h 22s 00h 56s 00h 18s Teste 01 Teste 02 Teste 03 Teste 04 Teste 05 fim 46m 00h 13s 49m 00h 15s 52m 00h 43s 54m 00h 14s 57m 00h 37s - Media - 49m total (s) 141s 52m 138s 54m 141s 57m 138s 59m 139s 139,4s O tempo de processamento do script variou entre 138 segundos e 141 segundos, obtendo-se uma média de 139,4 segundos. Pode-se observar que o tempo de processamento nos cinco testes efetuados com o cluster openMosix desativado não tiveram uma variação muito considerável, isso demonstra que não houveram problemas durante nenhum dos testes. Nos testes efetuados com o cluster openMosix ativados percebe-se uma grande diferenca nos resultados. O arquivo texto n1+n2.txt, abaixo listado mostra a saida dos resultados obtidos. Testes com o cluster openMosix ativado: Iniciando teste do openMosix Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006 68 O QUE É O CLUSTER OPENMOSIX - COMPILAÇÃO DE UM KERNEL LINUX PARA UM CLUSTER OPEN/MOSIX E MONTAGEM BÁSICA DE UM CLUSTER OPENMOSIX. 00h 37m 31s 00h 38m 26s Final do teste do openMosix Iniciando teste do openMosix 00h 38m 36s 00h 39m 35s Final do teste do openMosix Iniciando teste do openMosix 01h 26m 25s 01h 27m 24s Final do teste do openMosix Iniciando teste do openMosix 01h 34m 04s 01h 35m 02s Final do teste do openMosix Iniciando teste do openMosix 15h 55m 38s 15h 56m 37s Final do teste do openMosix Organizando os resultados obteve-se a Tabela 02 abaixo relacionada: TABELA 02 - RESULTADO DOS TESTES COM CLUSTER ATIVADO Teste 01 Teste 02 Teste 03 Teste 04 Teste 05 Media inicio 00h 31s 00h 36s 01h 25s 01h 04s 15h 38s fim 37m 00h 26s 38m 00h 35s 26m 01h 24s 34m 01h 02s 55m 15h 37s - 38m total (s) 55s 39m 59s 27m 59s 35m 58s 56m 59s - 58s Pode-se observar a diferenca dos resultados entre os dois testes, o primeiro com o cluster openMosix desativado e o segundo com o cluster openMosix ativado. No segundo teste, os tempos variaram entre 55 segundos e 59 segundos, obtendo-se uma média de 58 segundos. Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006 69 Kaminski, André Ávila 7. ANALISANDO OS RESULTADOS Comparando os resultados, temos uma diferenca media de 81,4 segundos. Conseguiu-se um resultado surpreendentemente menor, demonstrando a eficiência do cluster openMosix. Ao rodar o script apenas no nó N1, o processador teve que dar conta de todos os processos, elevando a quase 100% a capacidade de processamento, por cerca de 139,4 segundos. Já com o cluster openMosix ativado, o algoritmo dinâmico de balanceamento de carga do no N1, utilizou a migração preemptiva de processos para migrar alguns processos para o nó N2, que, além de ser mais potente, não estava sobrecarregado, deste modo, o processamento do script foi distribuido pelos nos do cluster, diminuindo muito o tempo de execução do script. O aplicativo openMosixView, instalado no nó N1, demonstrou graficamente a migração dos processos. Pode-se observar três, ou, em alguns dos testes, até mesmo quatro processos sendo enviados do nó N1 para o nó N2, e depois sendo devolvidos com o resultado do processamento. Utilizando o aplicativo top para observar os processos e a utilizacao da CPU do nó N1, foi observado que os processos continuaram listados, como se estivessem no estado sleeping, mas na verdade estavam em outro nó, o nó N2. Já no outro nó, o processamento subiu para quase 100%, mas não foi observado o processo na lista do aplicativo top, porem observou-se a mudanca do nível do processamento da máquina. Se os testes estivessem sido efetuados em um cluster openMosix com tres, quatro, cinco nos ou mais, poderia ser observada a migração para todos os nos que estivessem sendo pouco utilizados, e o tempo de execucao do script seria muito menor. O cluster openMosix não tem a capacidade de dividir o processamento de apena um software para os seus nós, o openMosix apenas migra processos inteiros para nós menos sobrecarregados com a finalidade de balancear a carga dos nós. Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006 70 O QUE É O CLUSTER OPENMOSIX - COMPILAÇÃO DE UM KERNEL LINUX PARA UM CLUSTER OPEN/MOSIX E MONTAGEM BÁSICA DE UM CLUSTER OPENMOSIX. O Projeto Beowulf 19 , iniciado pela NASA em 1994, não tem a caracteristica de procesamento em tempo real, como jogos exemplo, mas tem a capacidade de quebrar grande quantidade de dados em pequenas partes, dividindo entre os nós o processamento, o que o cluster openMosix não faz. 8. O CLUSTER BEOWULF O cluster Beowulf é outro projeto em Software Livre, que utiliza o kernel Linux como base. Como já citado anteriormente, o cluster openMosix apenas migra processos inteiros para outros nós pela rede e recolhe os resultados, já o cluster Beowulf tem a capacidade de dividir grandes quantidades de dados em pequenas partes para que cada nó processe uma parte. Esse modelo de cluster é amplamente utilizado para aplicação de efeitos especiais e renderização de imagens em produções cinematográficas. A estrutura do cluster Beowulf necessita de um nó mestre (front-end) que controla a distribuição de tarefas entre os nós escravos, assim não há migração de processos entre os nós escravos, como no cluster openMosix. Por ser um tipo muito potente de cluster, é amplamente explorado em universidades e aplicado para várias finalidades. O sistema do cluster Beowulf necessite de bibliotecas para Parallel Virtual Machine (PVM) ou para Message Passing Interface (MPI), para troca de mensagens entre os nós do cluster. O MPI é mais avançado, pois trabalha com mensagens para todos os nós do cluster, ou apenas para um determinado grupo. Não pode-se comparar qual modelo de cluster é melhor, isso deve ser decidido dependendo da finalidade de utilização do cluster. No openMosix, por exemplo, todos os computadores podem continuar sendo utilizados, e quando algum estiver sobrecarregado de processamento, acontece a migração de processos para outro nó menos carregado, sempre procurando balancear a carga de todos os nós no cluster. No cluster Beowulf, os nós escravos não podem ser utilizados normalmente, eles apenas 19 http://www.beowulf.org/ Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006 71 Kaminski, André Ávila servem para processar dados enviados pelo nó mestre, utilçizando o MPI para comunicação. As tecnologia dos clusters possibilitam a solução de diversos problemas que envolvem grande volume de processamento. As aplicações que um cluster pode ter são diversas, indo desde a simples melhora no desempenho de um determinado sistema até o processo de pesquisas científicas complexas. O que chama a atenção, é que todo o processamento pode ser feito de maneira que pareça ser um único computador de alta capacidade. Assim, é possível que determinadas aplicações sejam implementadas em cluster, mas sem interferir no funcionamento de outras aplicações que estejam relacionadas. Empresas especializadas, centros de pesquisas e universidades costumam estudar este assunto a fundo. Como conseqüência, existem clusters com até milhares de nós. Um exemplo no Brasil, é um cluster que foi desenvolvido em 2003 por um aluno da Universidade Estadual Paulista (Unesp), de São Paulo. Baseado no tipo Beowulf, este cluster ficou bastante conhecido, por ajudar na pesquisa de medicamentos para o tratamento da tuberculose. O valor gasto neste projeto foi 60 mil reais. Se tivesse sido utilizado um supercomputador de capacidade equivalente, os gastos seriam até 17 vezes maior. Só por este exemplo, é possível ver os vários benefícios do uso de clusters. Processamento eficiente, custo baixo e ampla gama de aplicações. Quem se sujeita a estudar o conceito de clusters poderá não só ter sucesso profissional, mas ter um conhecimento grande sobre vários conceitos da computação em si. 8.1 Esquemas Simples de Clusters Os sistemas de clusters openMosix e Beowulf podem montados em estruturas simples de rede. Abaixo estão figuras representando os dois modelos. Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006 72 O QUE É O CLUSTER OPENMOSIX - COMPILAÇÃO DE UM KERNEL LINUX PARA UM CLUSTER OPEN/MOSIX E MONTAGEM BÁSICA DE UM CLUSTER OPENMOSIX. ILUSTRAÇÃO 1 - MODELO DE CLUSTER OPENMOSIX ILUSTRAÇÃO 2 - MODELO DE CLUSTER BEOWULF Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006 73 Kaminski, André Ávila Pode-se observar que a estrutura necessária para a montagem destes modelos de clusters é simples. Desde o hardware das máquinas até a infra-estrutura da rede são equipamentos facilmente encontrados para venda. O software necessário é livre, todos estão sobre a GPL e não necessitam de gastos para obtenção. Estes são os motivos pelos quais os clusters são facilmente implementados e motivo pelo qual são objeto de grandes estudos em universidades. 8.2 Clusters Instantâneos Pode-se utilizar live-CDs, ou seja, CDs bootáveis, pode-se fazer estudos para saber como funcionam os sistemas operacionais com funções de cluster, ou apenas por curiosidade, pois estes CDs não necessitam sistemas operacionais instalados no disco rígido, podem ser utilizados sem risco de dano aos seus dados. Existem muitas distribuições Linux que podem ser utilizadas para estudar os clusters que funcionam por live-CDs. Algumas delas são: • ClusterKnoppix – http://bofh.be/clusterknoppix/ Cluster openMosix que funciona como um terminal server para máquinas clientes com boot remoto pela rede. • Quantian - http://dirk.eddelbuettel.com/quantian.html Baseado no ClusterKnoppix, é modificado para funções científicas matemáticas para um DVD bootável. • CHAOS - http://midnightcode.org/projects/chaos/ Mini distribuição em um mini-cd que transforma um PC em um nó de cluster openMosix. Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006 74 O QUE É O CLUSTER OPENMOSIX - COMPILAÇÃO DE UM KERNEL LINUX PARA UM CLUSTER OPEN/MOSIX E MONTAGEM BÁSICA DE UM CLUSTER OPENMOSIX. • BCCD - http://bccd.cs.uni.edu/ CD bootável para estudos do cluster openMosix. • Grendelsbane - http://www.linux4all.de/livecd/ Distribuição baseada em RadHat. • Dyne:bolic - http://www.dynebolic.org/ Voltado à produção multimídia. Contém o software Blender 20 . • Mediainlinux -http://www.mediainlinux.org/index.php/mediainlinux Outra distribuição voltada à produção multimídia. • EucaristOS - http://eucaristos.sourceforge.net/ Distribuição em um floppy de 1.44Mb para montagem de cluster. • GoMF - http://gomf.sourceforge.net/ Outra distribuição em floppy de 1.44Mb. • Clusterix - http://clusterix.livecd.net/ Distribuição com openMosix + LAM/MPI. • OpenMosixLOAF - http://openmosixloaf.sourceforge.net/ Mais uma distribuição em floppy de 1.44Mb. Com estas distribuições pode-se montar clusters sem a necessidade de ter conhecimentos de como instalar o GNU/Linux, ou de compilar um kernel específico com aplicação de patch para openMosix. É uma ótima oportunidade de ver um supercomputador funcionando. 20 http://www.blender.org/cms/Home.2.0.html Gestão & Conhecimento, v. 4, n.1 , jan./jun. 2006 75