UNIVERSIDADE FEDERAL DE SANTA CATARINA CURSO DE GRADUAÇÃO EM CIÊNCIAS DA COMPUTAÇÃO Guilherme Arthur Geronimo Estudo em Terminais Leves como nós de um Cluster. Trabalho de Conclusão de Curso André Zimmermann José Eduardo De Lucca, Dr. Florianópolis, Fevereiro de 2007 Estudo em Terminais Leves como nós de um Cluster. Guilherme Arthur Geronimo Este Trabalho de Conclusão de Curso foi aprovado em sua forma final pelo Curso de Ciências da Computação da Universidade Federal de Santa Catarina. André Zimmermann José Eduardo De Lucca, Dr. Prof. José Mazzuco Júnior, Dr. Banca Examinadora André Zimmermann Prof. José Eduardo De Lucca, Dr. Mario Dantas, Dr. iii "Okite hanjô, nete itijô. Tenka tottemo nigôhan." (Provérbio Japonês) Agradecimentos Agradeço a todos que aqueles que não acreditaram na minha idéia. Pois a dúvida destes me apontou o caminho. Agradeço mais ainda à todos do NPD da UFSC, que apesar de me considerarem louco nunca me negaram tempo e material para minha o meu estudo. E aos meus pais agradeço pelo interesse, pois mesmo sem me entender ouviam pacientes e interessados. Sumário Sumário v Lista de Figuras vii Resumo viii Abstract ix 1 Objetivos 1 1.1 1 2 3 4 Objetivos Específicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introdução 2 2.1 Servidor de Terminais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2.2 Terminais Leves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.3 Clusters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.4 Grids . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Estado da Arte e Motivações 6 3.1 Terminais Leves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.2 openMosix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.2.1 Exemplificação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.2.2 Vantagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.2.3 Desvantagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Metodologia 12 4.1 Sobre o Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 4.2 Sobre a Rede . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4.3 Sobre o Linux e o openMosix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 vi 4.3.1 5 4.4 Sobre as ferramentas de monitoração . . . . . . . . . . . . . . . . . . . . . . . . . 15 4.5 Sobre os Testes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Resultados 5.1 6 Configuração do openMosix . . . . . . . . . . . . . . . . . . . . . . . . . 14 20 Dados Obtidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 5.1.1 Teste Sem openMosix . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 5.1.2 Teste com openMosix . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 5.2 Análise dos Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 5.3 Problemas Encontrados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 5.4 Considerações Finais e Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . 39 Referências Bibliográficas 40 Lista de Figuras 3.1 oMFS - openMosix Filesystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4.1 Rich Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 4.2 CluxtMaxter - Servidor do Cluster . . . . . . . . . . . . . . . . . . . . . . . . . . 12 4.3 openMosixView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 4.4 openMosix Migration Monitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 5.1 Memória Livre do Servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 5.2 Número de Processos no Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 5.3 Carga do Média do Sistema (a cada minuto) . . . . . . . . . . . . . . . . . . . . . 22 5.4 Carga do Média do Sistema (a cada 5 minutos) . . . . . . . . . . . . . . . . . . . 23 5.5 Numero de Operações de Escrita e Leitura . . . . . . . . . . . . . . . . . . . . . . 24 5.6 Carga Total e Eficiência do Balanceamento de Carga . . . . . . . . . . . . . . . . 25 5.7 Carga e Memória do Nó 1 (Servidor) . . . . . . . . . . . . . . . . . . . . . . . . . 26 5.8 Carga e Memória do Nó 248 (Rich Client) . . . . . . . . . . . . . . . . . . . . . . 27 5.9 Carga e Memória do Nó 247 (Thin Client) . . . . . . . . . . . . . . . . . . . . . . 28 5.10 Carga do Média do Sistema (a cada minuto) . . . . . . . . . . . . . . . . . . . . . 29 5.11 Carga do Média do Sistema (a cada 5 minutos) . . . . . . . . . . . . . . . . . . . 30 5.12 Lista de Processos Migrados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 5.13 Memória Livre do Servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 5.14 Memória Total Utilizada no Cluster . . . . . . . . . . . . . . . . . . . . . . . . . 33 5.15 Número de Processos no Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 5.16 Número de Operações de Escrita e Leitura . . . . . . . . . . . . . . . . . . . . . . 35 5.17 Entrada de Rede . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.18 Saída de Rede . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Resumo Nos dias de hoje, com a melhora das redes de comunicação, cada vez mais estamos usufruindo da tecnologia de acesso remoto à servidores de terminais. Mas com esta convergência em massa, mais e mais é exigido do hardware do servidor, mas nem sempre há possibilidade de atualizações da máquina. Por este motivo o trabalho testa a viabilidade de utilizar o poder de processamento e a memória ociosos do cliente para compartilhar a carga do servidor. Para isso utilizaremos a solução em cluster openMosix. Abstract Now days, with the improve of the communication networks, more we are using the remote access technology to connect to terminal servers. That mass convergence demands more and more from the server’s hardware, but sometime we don’t have ways (reads, money) to upgrade the machine. For that reason, this paper tries to test the viability of use idle processor’s cycles and idle memory of the clients to balance the load of the server. To do this we’ll try to use the openMosix solution. Capítulo 1 Objetivos O presente trabalho tem como objetivo verificar a viabilidade da utilização de terminais leves como nós (nodes) de um cluster OpenSource (openMosix) servidor de aplicações. Os mesmos terminais leves (Thin Clients) que exibem as aplicações para os usuários, ajudarão no processamento das mesmas incluindo-se no cluster. A idéia é utilizar o processamento de cada terminal que apesar de não ser muito, normalmente fica ocioso - para diminuir a carga do servidor. 1.1 Objetivos Específicos • Estudar o projeto OpenSource OpenMosix. Visando aprender sua estrutura de funcionamento. • Montar um cluster OpenMosix, o qual servirá como um servidor de aplicações e utilizará como nós (nodes) terminais leves. • Testar o desempenho do cluster executando softwares básicos, softwares normalmente utilizados por usuários em um escritório e/ou laboratório de informática. • Verificar viabilidade da implantação de uma estrutura como esta em um Escritório/Laboratório. Capítulo 2 Introdução Devemos primeiramente narrar ao leitor a conjuntura a qual este se desenvolveu. Este é um trabalho prático, que foi executado no Núcleo de Processamento de Dados (NPD) da Universidade Federal de Santa Catarina (UFSC). Sua idéia surgiu devido a uma crise de hardwares que estávamos passando durante a implantação dos Servidores de Terminais (Terminal Server) Linux no Laboratório de Informática dos Alunos de Graduação e Pós-Graduação da UFSC (LabUFSC). Tínhamos algumas máquinas boas, mas que não seriam o bastante para suportar todo os usuários do laboratório, o que contabilizava algo na faixa de 150 máquinas mais ou menos. Surgiu então a idéia: "Já que os Terminais não processam nada (além da imagem que vem do servidor), porque não colocar eles para ajudar o servidor?!". E assim surgiu a idéia deste. No Capítulo anterior (Objetivos) assim como no parágrafo acima, foram citados deliberadamente uma série de termos e expressões que, além de serem chaves para este trabalho, para alguns podem não ser tão usuais assim. Acredito então que antes de mais nada devemos conceituar alguns destes termos chaves que trataremos ao longo do texto, tais como: Servidor de Terminais, Terminais Leves, Clusters e Grids. Os quais serão imprescindíveis para a compreensão do trabalho. 2.1 Servidor de Terminais Também conhecido por "Servidor de Aplicações", o Servidor de Terminais nada mais é que um servidor de Interfaces Gráficas. Utilizando um sistema operacional multi usuário, este permite e gerencia a abertura de Ambientes Gráficos (sessões) de usuários remotos. Separando então o sistema operacional nativo (que o usuário utiliza em seu computador pessoal), do sistema operacional visualizado (o qual ele necessita para executar suas aplicações). Aos olhos do usuário 3 é como se o sistema operacional remoto estivesse na sua máquina. É claro que existem algumas restrições por exemplo, o acesso aos dispositivos locais de sua máquina é um caso complicado. Se o usuário desejar utilizá-los estes deverão ser montados remotamente no servidor. Existem uma série de maneiras - leia-se protocolos - de acessar remotamente o ambiente gráfico de um servidor. Uma das primeiras soluções de acesso remoto que mais se difundiu (além dos antigos terminais Citrix ICA e Tarantella) foi o VNC, com ele um usuário utilizando (praticamente) qualquer sistema operacional pode acessar um ambiente gráfico de outro sistema operacioná completamente diferente. Característica essa que ajudou em muito a sua difusão, mesmo apresentando uma qualidade de imagem e tempo de resposta não muito satisfatórios. O VNC é baseado no protocolo RFB, Remote FrameBuffer. Todos os eventos de mouse e teclado são enviados para o servidor e adicionados no buffer, o mesmo acontece (mas de maneira inversa) com as imagens enviadas ao dispositivo de vídeos. Desde o lançamento da plataforma NT o Windows trouxe com ele o sistema de acesso remoto RDP (Remote Desktop Protocol) baseado no protocolo T.128. Inicialmente utilizado para administração remota de servidores, permitia apenas o acesso de um usuário por vez. Logo notouse o potencial do mesmo e em um curto espaço de tempo a Microsoft lança seu primeiro Servidor de Terminais, o Windows NT 4.0 Server - Terminal Server Edition. O RDP trás com ele uma série de funcionalidades que auxiliam o usuário, tais como redirecionamento de áudio, encriptação de dados, redirecionamento de sistemas de arquivo, redirecionamento de impressora, entre outros que careciam no VNC. Um dos "protocolos exclusivos"(e um dos mais antigos) do UNIX é o XDMCP , protocolo padrão do servidor gráfico X11. Praticamente todos os sistemas linux e BSD utililizam ele, mesmo não sendo um servidor de terminais ele é utilizado via comunicação interna (sockets) nestes S.O.’s. Ele oferece uma qualidade de imagem vezes superior ao VNC, mas também gera um tráfego de rede de maneira proporcional. Apartir de 2002, a empresa NoMachine vem trazendo uma solução para sanar este problema, o NX. Este por sua vez utiliza-se da encriptação do SSH, da compressão JPEG e do GZIP para enviar seus dados para os clientes de forma rápida e segura. 4 2.2 Terminais Leves Terminais Leves (Thin Clients), por definição são computadores desprovidos de hardwares de alto desempenho, que interligados em rede, se utilizam do processamento de um servidor para processar seus aplicativos. Geralmente se conectam apenas na interface gráfica do servidor de aplicações, passando assim a ser uma "janela"deste para com o usuário. Os Terminais Diskless são uma ramificação dos Terminais Leves. Estes por sua vez não possuem Disco Rígido (Hard Disk HD). Desta forma, eles buscam seu Sistema Operacional da unidade de CD/Diskete, da Rede (Network Boot) e/ou de uma unidade remota na rede (geralmente via NFS , Network Filesystem). Neste trabalho utilizamos Terminais Diskless que iniciam pelo driver de CD. Os Terminais Diskless são uma ramificação dos Terminais Leves. Estes por sua vez não possuem Disco Rígido (Hard Disk - HD). Desta forma, eles buscam seu Sistema Operacional da unidade de CD/Diskete ou da Rede (Network Boot). Neste trabalho utilizamos Boot pelo driver de CD. 2.3 Clusters Um cluster é uma estrutura computacional Multi-Computada. Esta é formada por um con- junto de computadores, interconectados por uma rede, que pode-se utilizar de um software especial (PVM,MPI,etc) e/ou um tipo especial de sistema operacional classificado como sistema distribuído, trabalhando assim de uma forma unificada. Estes são construídos muitas vezes a partir de computadores convencionais (Commodity Off-The-Shelf, ou COTS), interligados por uma rede comunicam-se de uma forma tal que o sistema trabalha como se fosse uma única máquina de grande porte. O custo benefício desta estrutura é superior, pois ao invés de investir em um grande computador (de alto custo), investe-se em vários computadores (de baixo custo) e colocam eles para trabalharem juntos. Joseph D. Sloan em seu livro High Performance Linux Clusters mostra um case de sucesso desta arquitetura computacional de Multicomputada: "(...)O cluster "Big Mac"construído pelo Virginia Polytechnic Institute e a State University foi inicialmente construído com 1100 computadores bi-processados Macintosh G5. Sua velocidade era da ordem de 10 teraflops, fazendo dele um dos supercomputadores mais rápidos que existiam. Enquanto supercomputadores desde tipo geralmente levam alguns anos para serem construídos e 5 custavam em entre $100 milhões e $250 milhões de dólares, o Big Mac foi construído em menos de um mês e custou em torno de $5 milhões de dólares." 2.4 Grids Os termos Cluster e Grid muitas vezes andam juntos, e geralmente são tidos como sinô- nimo, o que não o são. A Computação em Grid, assim como os clusters, é um modelo computacional emergente que fornece um throughput elevado, utilizando muitos computadores interligados em rede, montando uma arquitetura de computador virtual que pode distribuir a execução de um processo através de uma infraestrutura em paralelo. O Grid utiliza-se dos recursos de diferentes computadores ligados em rede (geralmente a Internet) para resolver problemas computacionais de grandes escalas (Ex. Cura do Câncer, Previsão do Tempo, Análise de sinais de RádioTelescópios, etc). Diferentemente dos Clusters, esta provê a habilidade de computar grandes escalas de dados, quebrando-os em pedaços menores e os processando-os em paralelo, dividindo o "problema"igualmente entre vários computadores. A Computação em Grid pode ser realizada de forma heterogênea e em rede (Internet ou dedicada). Não existe necessariamente uma rede tal como existe, por exemplo, na interligação dos nós em um cluster. Podemos dizer que: "Podemos ter um cluster dentro de um Grid, mas não podemos ter um Grid dentro de um cluster". Um dos projetos mais famosos que utiliza Grid é o SETI@Home, da Universidade de Berkeley. Este é uma experiência científica que utiliza computadores conectados à Internet na procura por Inteligência Extraterrestre. Cada computador conectado ao projeto ajuda na análise de dados recebidos pelo radio telescópio do mesmo. Capítulo 3 Estado da Arte e Motivações 3.1 Terminais Leves A idéia de utilizar Terminais não é algo recente. Desde a época dos MainFrames esta idéia ja era aplicada. Um terminal nada mais é que equipamento disponibilizado ao usuário, que serve de interface para um sistema de informação. Nos Mainframes, existiam vários terminais conectados (diretamente e/ou através da rede) possibilitando assim a utilização de seus recurso por vários usuários simultâneos. Com a popularização dos PC’s (Personal Computers), pouco a pouco os MainFrames foram caindo em desuso sendo substituidos por máquinas Standalone, com seu próprio Sistema Operacional, Disco-Rígido, etc. Esta mudança tecnológica possibilitou uma maior flexibilidade nestas estação de trabalho, o que deixou os usuários mais a vontade com seu ambiente de trabalho, possibilitando o mesmo ter a liberdade de escolher seu Sistema Operacional, utilizar seus programas preferidos, etc. Custando assim aos Profissionais de T.I. noites mal dormidas e implantes capilares, pois nesta estrutura necessitou-se de sistemas de intercâmbio de informações, investimento em hardwares e monitoramento dos mesmos. Sem contar com as eventuais falhas de hardwares, pois a probabilidade de dar algum erro é vezes maior pelo fato de estarem tratando com vários computadores e não uma máquina só. Apesar disto hoje em dia, em muitos ambientes corporativos e acadêmicos (como Call Centers e Laborátorios) não podemos ceder tais privilégios para nossos usuários, e muito menos correr o risco de perder dados de usuários (ainda mais aqueles que são desenvolvedores) por "crash"de hardware. Voltou-se então a idéia de ceder aos usuário Terminais. Como a tecnologia em software (e Sistemas Operacionais Multi-Usuários principalmente) avançou em passos largos na ultima dé- 7 cada, oferecer um terminal para o funcionário não teria grande impacto para o usuário final, afinal a interface a qual o mesmo teria de lidar seria praticamente a mesma o qual ele estava acostumado. Centralizando o Sistema Operacional, facilitaria a monitoração do sistema e os gastos com hardware diminuiriam. Afinal, é mais fácil monitorar e mais barato investir em uma máquina só que em várias máquinas ao mesmo tempo. Isto abriu uma série "portas"para os Administradores de T.I., eles poderiam se concentrar em garantir a segurança do sistema e investir na integridade dos dados (através de espelhamento, RAID, etc.) e ainda assim podendo garantir (ou não) as configurações dos usuários, e sua saúde capilar. 3.2 openMosix O próprio projeto do openMosix define o mesmo como "uma extensão de kernel para clus- terização SSI. Ele é proeminente do projeto MOSIX mas esta sobre a licença GPL (Gnu Public License)". Não explica muito, mas Joseph D. Sloan, diz que "basicamente, o software openMosix inclui tanto uma extensão de kernel quanto um pacote de ferramentas de suporte. A extensão de kernel prove suporte para a movimentação de processos entre as máquinas do cluster. Tipicamente a migração de processos é totalmente transparente para o usuário. Porém, usando as ferramentas providas pelo openMosix, juntamente com outras aplicações, o usuário pode controlar a migração dos processos entre as máquinas do cluster.". Uma vez instalado, os nós do cluster mantém comunicações entre eles sobre a disponibilidade dos recursos (processador e memória), permitindo a cada nó ter conhecimento do status dos outros nós, podendo assim disponibilizar os seus próprios recursos. Desta forma, se um nó com vários processos detecta que outro nó tem disponibilidade superior (tem menos carga no processador/RAM), o openMosix encarrega-se de migrar um desses processos para esse nó, dando origem ao processamento distribuído. O openMosix tenta continuamente classificar os custos de transladação e fazer previsões sobre a viabilidade da mesma, atribuindo pesos a cada nó. O openMosix utiliza um sistema de arquivos próprio, o openMosix FileSystem (oMFS). Ele permite trocas de dados entre vários processos. Este mecanismo suporta algumas das funcionalidades de Inter Process Communication (IPC) mais simples, como pipes, fifos, e redirecionamento de arquivos. Utilizando oMFS e uma configuração adequada, é ainda possível permitir aos processos remotos o acesso direto a arquivos, dados e dispositivos existentes no servidor, ainda que estes não existam no nó anfitrião do processo. Segue abaixo uma imagem exemplificando. 8 Figura 3.1: oMFS - openMosix Filesystem 9 3.2.1 Exemplificação Se você é um daqueles que leu as definições anteriores, entendeu mas ainda não sabe ao certo como funciona, vamos exemplificar o funcionamento dele antes de aprofundar um pouco mais. Existem uma série de exemplos que poderíamos dar, uns simples, outros mais complexo. Falaremos sobre dois então, um tradicional (o qual aparece até mesmo na documentação do openMosix) e outro funcional, demonstrando assim a ligação entre a tecnologia ao objetivo inicial deste trabalho. Imagine que você durante sua graduação esteja dividindo um quarto com um colega da faculdade. Ambos são aficionados por Linux e softwares livres. Como cada um tem seu computador sem duvida instalaram o openMosix desde sua primeira versão. Um certo dia você consegue aquele novo CD do Julio Iglesias que a sua namorada tanto pediu de presente. Depois de passar todas as musica (digamos umas 20) do CD para .WAV no computador, você começa a converte-las para .MP3. Mas como seu PC é mais antigo (leia-se lento) que Silvio Santos, cada musica demora em torno de 120 segundos para converter. Enquanto isto, seu companheiro de quarto (o qual é apaixonado por jogos online) esta em seu computador ultra-moderno no Messenger com sua namorada virtual sem rodar nada pesado em seu PC. Você então executa 4 processos de conversão (um convertendo cada musica) e manda o openMosix migrar 3 deles para o PC de seu colega. Ou seja, ao invés de demorar 40 minutos convertendo as MP3, você demoraria 10 minutos (supondo que o PC de seu colega converta 3 arquivos a cada 120 segundos). No caso do Servidor de Terminais aconteceria mais ou menos a mesma coisa. Quando o servidor estivesse com uma carga alta devido a quantidade de processos dos usuários, ele começaria a enviar os mesmos para serem executados pelos nós/clientes. Diferentemente dos clusters Ad-Hoc, nos quais os nós distribuem seus próprios processos no cluster, neste existe apenas um servidor que distribui os processos e os nós não podem migrar os seus processos para o servidor. Ou seja, quando o servidor esta com uma carga alta, ele distribui sua carga para os nós, mas quando os nós precisam de ajuda no processamento, seu processos são impedidos de migrar para o servidor. 3.2.2 Vantagens Como citado acima, o openMosix oferece um ambiente clusterizado SSI (Single System Image). O Servidor funciona como uma máquina SMP virtual (continua sendo uma arquitetura Multi-Computada, mas parece uma Multi-processada), onde cada nó prove seu processador e me- 10 mória para o cluster. O fato de todos o nós rodarem (impreferivelmente) o mesmo kernel e tornar a migração dos processos transparente para os usuários, torna desnecessário qualquer alteração dos códigos dos programas executados. Ou seja, não é necessário a utilização de nenhuma biblioteca especial para os programas rodarem no cluster, tais como PVM e MPI. Os processos não são quebrados para serem processados, eles são apenas migrados para outras máquinas e processados remotamente. As versões mais novas do openMosix vem com uma ferramenta chamada Auto Discovery. Que por sua vez fica monitorando a rede em busca de novos nós que vão surgindo e os incorporam automaticamente em sua relação de nós. Auxiliando assim no gerenciamento do cluster e por sua vez aumentando a escalabilidade do sistema. Como o openMosix precisa praticamente apenas do kernel e nenhum outro pacote adicional isso possibilita gerar facilmente um novo nó no cluster. Geralmente quando tratamos de terminais leves, tratamos com máquinas que não possuem disco rígido e por este motivo fazem boot via Rede ou CD, puxando seu kernel e seu sistema operacional de um servidor. Basta então disponibilizar um kernel com o patch do openMosix e um initial RAM disk com as configurações padrão para o nó e liga-lo. Como o sistema depende do kernel e da versão do openMosix (todos os nós devem ter a mesma versão do kernel com a mesma versão do openMosix) pode-se teoricamente utilizar uma infinidade de hardwares como nós, basta compila-lo no mesmo. Permitindo assim a criação de um cluster em um ambiente heterogêneo. 11 3.2.3 Desvantagens Como vimos acima, o núcleo do openMosix é o kernel, e isto é considerado por muitos uma grande vantagem. Mas podemos considerar isso uma faca de dois cumes, pois pode ser considerado uma grande desvantagem também. Infelizmente o projeto openMosix (além de um tanto estagnado) foca seu desenvolvimento em versões de kernel, não há um patch genérico que sirva para qualquer versão, aliás, todas sua versões estáveis ainda são para 2.4.X, e recentemente lançaram uma versão beta para o 2.6.1. Então se você possuir algum hardware que é suportado apenas pelas versões mais recentes do kernel e não funciona com as versões as quais o openMosix trabalha você terá, ou melhor, não terá mais um nó. Como citamos no sub-item "Vantagens", a granularidade da estrutura esta relacionada ao nível dos processos. Sendo assim, se utilizarmos aplicativos "monolíticos"que não geram processos menores ou que geram vários processos rápidos (menos que 5 segundos) não haverá ganho algum de desempenho, pois estes não migrarão. Processos que lidam diretamente com dispositivos de I/O também não migrarão. O que torna o sistema um tanto instável no quisito de balanceamento de carga. Capítulo 4 Metodologia 4.1 Sobre o Hardware Foram utilizados 3 (três) computadores na fase de experimentos. Um de cada categoria. Estes foram escolhidos devido sua similaridade para com as que existem no parque de máquinas do LabUFSC: Um workstation com Hard Disk (HD) o qual foi utilizado como servidor, uma maquina depreciada sem Hard Disk (Diskless) mas com uma quantidade considerável de memória a qual foi nomeada como Rich Client e uma máquina depreciada sem Hard Disk e com pouca memória que nomeamos de Thin Client. Segue abaixo suas respectivas fotos e especificações técnicas: Figura 4.1: Rich Client Figura 4.2: CluxtMaxter - Servidor do Cluster Servidor • Processador - AMD Athlon(tm) XP 1800+ (1.494 MHz) 13 • Cache Size - 256 KB • Memória - 754 MB • Rede - SiS900 100baseTx-FD Rich Client • Processador - Petium II 350 MHz • Cache Size - 512KB • Memória - 384 MB • Rede - 10/100Mbps Thin Client • Processador - Pentium 133MHz • Cache Size - 256KB • Memória - 64MB Ram • Rede - Realtek 10/100Mbps 4.2 Sobre a Rede Para a estrutura da rede, foi utilizado um Hub Ethernet da Encore de 10/100Mbps e cabos da Furokawa clipados de forma paralela. A decisão de utilizar um Hub 10/100Mbps (e não um Switch) foi decorrido pela necessidade de tornarmos o ambiente mais hostil. Seria irreal pensar que em um cluster teríamos uma Taxa de Transmissão alta para cada nó (node), por isto a rede de 10/100Mbps foi compartilhada entre 3 (três) computadores. Segue abaixo respectivamente suas fotos e suas especificações técnicas. 4.3 Sobre o Linux e o openMosix Primeiramente tentou-se fazer a unificação do projeto LTSP e do projeto ThinStation como um kernel com o patch do openMosix e suas devidas ferramentas para controle e monitoração 14 (User Space Tool) do mesmo. Nos demos conta então, depois de um certo tempo perdido, de que este passo que deveria ser inicial e teoricamente rápido tomaria muito tempo do projeto, tempo este que não tínhamos. Partiu-se então para uma solução um tanto mais prática e simples, utilizar uma distribuição de Linux que já utilizasse o openMosix em seu kernel padrão. Identificou-se então um leque considerável de distribuições Linux para utilizarmos em nosso trabalho. Entre elas o clusterKnoppix, o Quantian e o BCCD, projetos os quais se destacavam entre os mesmos de sua categoria. O Quantian, como uma distribuição voltada para o meio Científico oferece uma gama gigantesca de softwares Físicos, Matemáticos, Astronômicos, Mecânicos, Contábeis e etc, e por este motivo é distribuído como uma imagem de DVD, ou seja, sua instalação era muito maior e mais pesada que as outras distribuições. O BCCD pareceu bem enxuto em termos de softwares, tão enxuto que não proporcionou os softwares necessários para posteriormente fazermos os testes. Já o clusterKnoppix, além de ter uma certa maturidade (foi uma das primeiras distros que veio com o patch do openMosix) cedia todas as ferramentas necessárias tanto para os testes quanto para a monitoração dos mesmos, e por este motivo foi utilizado neste trabalho. 4.3.1 Configuração do openMosix Apesar da próprio distribuição oferecer uma configuração padrão do openMosix, uma série de otimizações foram feitas. Afinal de contas a configuração dos nós devem ser diferentes da do servidor. Para o servidor, a entrada de todo e qualquer processo imigrante foi bloqueada. Ele não aceitava processos vindo de outros nós. Tanto a migração de seus processos quanto a utilização do oMFS foram habilitadas. O último (oMFS) foi removido das novas versões do openMosix, mas sem ele o sistema não funcionou. Nos nós, a chegada de processos imigrante foi habilitada e a saida de processos locais/imigrante que poderiam migrar foi bloqueada, para evitar a sobrecarga da rede. Como não há possibilidade dos processos dos nós migrarem, não havia necessidade de habilitar o oMFS neles, por este motivo o mesmo foi desabilitado nos nós. Nos Anexos constam as configurações utilizadas tanto no servidor quanto nos nós 15 4.4 Sobre as ferramentas de monitoração O openMosix possui uma série de ferramentas de monitoração própria. Dentre elas utiliza- mos o openMosixWebView, openMosixView, Migration Monitor, openMosixcollector e o openMosixprocs. Foi utilizado também o Zabbix, ferramenta a qual não esta atrelada ao projeto openMosix. O openMosixView e o Migration Monitor foram utilizados apenas durante a fase de testes, para monitorar a migração dos processos, pois não apresentavam muitos dados sobre o sistema, mas mesmo assim se mostraram muito úteis. As figuras 4.1 e 4.2 são screenshots dos mesmos. Figura 4.3: openMosixView 16 Figura 4.4: openMosix Migration Monitor As ferramentas mais utilizadas foram openMosixWebView que forneceu em forma de gráficos praticamente todos os dados condizentes ao cluster, o openMosixcollector que serve de backend para o openMosixWebView, o openMosixprocs que lista quais os processos que migraram e para onde foram (entre outros dados) e o Zabbix, o qual forneceu também em forma de gráficos um leque imenso de dados do sistema, tanto quando o mesmo estava utilizando o sistema openMosix, quanto sem o openMosix (ambiente o qual o openMosixWebView funcionou). 17 4.5 Sobre os Testes Para testarmos o desempenho da estrutura formulamos um protocolo a ser seguido durante os testes. Cada usuário que abrisse uma sessão no servidor executaria uma série de programas pré determinados e assim que estes tivesse carregado, os mesmo interagiriam com estes de acordo outro protocolo. Após 10 minutos a sessão seria encerrada. E os dados seriam recolhidos. Como em um sistema de terminais geralmente existem N-1 sessões abertas no servidor, sendo X o número de computadores na rede contando com o servidor, em nossos testes utilizamos duas sessões abertas. A conexão com a interface gráfica do servidor foi feito via NX. Sistema parecido com o VNC, mas com grande diferença na conexão feita entre o cliente e o servidor. Esta é feita via um túnel SSH, o mesmo compacta a imagem se ser exibida na tela e a envia de forma compactada e encriptada para o cliente. Além de fornecer segurança, ocupa uma banda irrisória, mas consome um certo processamento de ambas as partes, para compactar/descompactar e encriptar/decriptar. Voltando aos softwares. Como a idéia do trabalho era verificar a viabilidade da estrutura em um ambiente de escritório/laboratório, escolhemos uma série de aplicativos um tanto difundidos dentro do mundo OpenSource e que são usualmente encontrados e utilizados neste meio. Bom frisar que alguns foram escolhidos pela sua exigência de de hardware, tanto no quesito de memória quanto no de processador. Escolhemos então: • Konqueror - Navegador de Internet. • BrOffice - Editor de texto, planilhas, Apresentações e etc. • Gimp - Editor de imagem. • Gaim - Programa de mensagens. Assim que a sessão abrisse e os programas supracitados fossem devidamente executados e carregados, o usuário: • Abriria uma sessão no Gaim e se conectaria a rede de mensagens instantâneas. • Entraria no site www.terra.com.br com janela 01 do navegador. • Entraria no site www.fuskerxp.com com janela 02 do navegador. • Entraria no site webmail.inf.ufsc.br com janela 03 do navegador e logaria entraria em sua conta. 18 • Carregaria um arquivo predeterminado com o BrOffice. • Carregaria uma imagem pré determinada com o Gimp. • Salvaria o arquivo do BrOffice. • Salvaria a imagem do Gimp. Os sites utilizados nos testes foram escolhidos pela quantidade de seu conteúdo (e pela qualidade também), o que refletiria (em nossa concepção) na utilização da memória cache do navegador de Internet, ja que o mesmo utiliza a memória RAM do computador para armazenar o seu cache antes de passar para o disco rígido. Já o BrOffice e o Gimp representavam a abertura e o carregamento de arquivos em disco para a memória (além do processamento). Ambos os programas têm fama de sobrecarregar a maioria dos computadores, e nossa maior preocupação era ver como ele reagiria tendo seu processo em uma máquina e seus arquivos em outra. Um pouco antes do tempo dos testes expirarem e após as sessões serem fechadas, os seguintes dados e gráficos foram coletados das ferramentas de monitoração: • Carga Total e Eficiência do Balanceamento de Carga. • Carga e Memória do Nó 1 (Servidor). • Carga e Memória do Nó 248 (Rich Client). • Carga e Memória do Nó 247 (Thin Client). • Carga do Sistema (a cada segundo). • Carga do Sistema (a cada 5 segundos). • Entrada da Rede do servidor. • Lista de Processos Migrados. • Memória Livre do Servidor. • Memória Total Utilizada no Cluster. • Numero de Operações de Escrita e Leitura. • Número de Processos no Sistema. 19 • Saída da Rede do Servidor Para poder ter uma base de comparação repetimos este teste de duas maneiras, com a utilização dos nós e sem a utilização do nós. Em um primeiro momento desabilitamos a migração de processos para o cluster, e em um segundo momento os habilitamos. Capítulo 5 Resultados 5.1 5.1.1 Dados Obtidos Teste Sem openMosix Após a execução da bateria de testes, os dados recolhidos foram: Figura 5.1: Memória Livre do Servidor 21 Figura 5.2: Número de Processos no Sistema 22 Figura 5.3: Carga do Média do Sistema (a cada minuto) 23 Figura 5.4: Carga do Média do Sistema (a cada 5 minutos) 24 Figura 5.5: Numero de Operações de Escrita e Leitura 25 5.1.2 Teste com openMosix Após habilitar o openMosix e execução da bateria de testes, os dados recolhidos foram: Figura 5.6: Carga Total e Eficiência do Balanceamento de Carga 26 Figura 5.7: Carga e Memória do Nó 1 (Servidor) 27 Figura 5.8: Carga e Memória do Nó 248 (Rich Client) 28 Figura 5.9: Carga e Memória do Nó 247 (Thin Client) 29 Figura 5.10: Carga do Média do Sistema (a cada minuto) 30 Figura 5.11: Carga do Média do Sistema (a cada 5 minutos) 31 Figura 5.12: Lista de Processos Migrados 32 Figura 5.13: Memória Livre do Servidor 33 Figura 5.14: Memória Total Utilizada no Cluster 34 Figura 5.15: Número de Processos no Sistema 35 Figura 5.16: Número de Operações de Escrita e Leitura 36 Figura 5.17: Entrada de Rede 37 Figura 5.18: Saída de Rede 38 5.2 Análise dos Dados Observandos os gráficos de memória livre logo podemos ver a diferença que o openMosix proporcionou. Sem o mesmo a memória do servidor foi utilizada quase 100% do tempo enquanto o com ele houve um suave ocupação da memória, restando ainda em seu píco de utilização mais de 60MB livres, certa de 10% do total. Já quando comparamos os Load Averege nos dois casos, notamos que a carga do sistema foi relativamente maior durante a utilização do cluster. O Load Averege é o valor médio de processos sendo executados ou esperando para serem executados durante o período de 1, 5 e 15 minutos. Como o número de processos não mudou de um cenário para o outro (como visto nos gráficos), só pode ser decorrido ao delay de acesso aos dispositivos de I/O. Se analisarmos o gráfico de I/O podemos ver que de um cenário para o outros, o número de leitura e escrita dobrou, passou de 24.000 para 48.000 operações de leitura e escrita. O que era de se esperar, afinal o oMFS também é considerado um sistemas de arquivos, o qual é acessado frequentemente pelos nós. Visto que o oMFS ja foi um ponto extremamente relevante no quisito de carga do sistema, ja era de se esperar que tivesse muita relevância (e peso) no quisito de rede. Mas quando foi posto os dados no papel, ele surpreendeu. Durante os testes, a média da taxa de transferência de entrada de dados no servidor foi de 850 Kbps e a de saída dados foi 845 Kbps. 5.3 Problemas Encontrados A primeira tentativa que realizamos, resolvemos começar com o auxílio do cluster. O servidor estava ligado já faziam alguns dias. Quando começamos a rodar o teste, tudo esta saindo com o planejado. Os processos estavam migrando normalmente e o nós estavam comunicando corretamente com o servidor. Quando começamos a monitorar os dados dos nós, o servidor travou. Após o servidor ter reiniciado, foi verificado os registros (logs) do sistema mas nada parecia estar errado. Quando fomos checar os nós, descobrimos que o Thin Client havia travado devido sobrecarga na memória. O programa que fica coletando os dados dos nós do cluster (o qual só é realmente útil no servidor) consumiu toda a memória disponível. Desabilitamos então o sistema de coleta de dados dos nós. Aproveitando, desabilitamos também o sistema de arquivos oMFS dos nós, afinal, o mesmo só é utilizado pelos nós que migram seus processos para outros. O que não é o caso dos nós. Com os devidos ajustes feitos reiniciamos a bateria de testes. Assim como o primeiro tudo 39 corria bem, até travar novamente. O Servidor travou de vez. Reiniciamos ele e voltamos a checar os registros do sistema. Ao que parece estavam ocorrendo problemas de comunicação com o Rich Client, ele não retornou alguns processos vitais da interface gráfica. Mas o motivo, não estava claro. Após algumas horas de intensa concentração em cima do problema e nenhum resultado, irritados (com o problema) e injuriados (pelo calor) resolvemos ligar o ar condicionado. Foi onde nosso problemas acabaram. Realmente estávamos lidando com problemas de hardware. Pagamos o preço pela reciclagem da "sucata". Daí por diante, tudo correu bem. 5.4 Considerações Finais e Trabalhos Futuros Durante outros testes realizamos experiências do tipo ShutDown. Ou seja, durante o fun- cionamento do cluster desligamos os computadores. Os computadores que possuiam ACPI (Advanced Configuration and Power Interface) ao executarem os procedimentos de saída, expulsavam (expurgavam) os processos recebidos para o nó original (o servidor) e desligavam sem causar problemas para com o cluster. Mas aqueles que não possuiam nenhum tipo de Power Management simplesmente desligavam e comprometiam todo o cluster. Muitas vezes travavam o servidor. Por este motivo devo consideramos o projeto um tanto inviável, pois o usuário pode travar com todo o sistema com o apertar de um botão. Apesar dos dados terem sido positivos, acredito que a falta de um ambiente industrial (por assim dizer) contribuiu em muito para os mesmos. Por este motivo o proximo passo do trabalho será montar o mesmo em um cenário mais realista, utilizando um Switch Gerenciavel 10/100, boot via PXE e no mínimo 24 nós e usuarios utilizando estes ao mesmo tempo. Deixe de legado para quem continuar este trabalho um conselho e insentivo, se conseguir compilar (com o kernel 2.6) e fundir o projeto ThinStation com o mesmo, milhares de usuários serão eternamente gratos. Pois aí sim qualquer usuário leigo poderá ter um cluster HPC em sua casa. Capítulo 6 Referências Bibliográficas MAIA, Luiz F. J. Fragmentos da História da computação. Lages: Faculdade de Ciência da Computação, Sociedade Lageana de Educação, 1999. BRANCO, M. O caso a Rede Escolar e da Uergs. 2002. Acesso em 27/07/2006. Disponnível em: http://www.softwarelivre.org/articles/54/print LINUX Terminal Server Project. Acesso em 27/07/2006. Dispon?vel em: http://www.ltsp.org PERRY,Alexander. Clusters for Nothing and Nodes for Free. Acesso em 31/07/2006 Disponível em: http://delivery.acm.org/10.1145/1010000/1005578/7185.html FROM a single PC to Terminals and Servers. Acesso em 28/07/2006. Disponível em: http://wiki.ltsp.org/twiki/bin/view/Ltsp/XServersAndXclients Pros of openMosix. Acesso 29/07/2006 Disponível em: http://www.tldp.org/HOWTO/openMosixHOWTO/x229.html BUYTAERT, Kris. The openMosix HOWTO. Acesso 29/07/2006 Disponível em: http://www.tldp.or HOWTO/ TREZENTOS, Paulo. Contribuições para o Glossário da Sociedade de Informação . Acesso 30/07/2006 Disponível em: http://paulo.trezentos.gul.pt/artigos/ContribuicoesGlossarioAPDSI/ LOTTIAUX Renaud. GALLARD, Pascal. OpenMosix, OpenSSI and Kerrighed: A Com- parative Study. Acesso em 31/07/2006 Disponível em: http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber= OpenMosix . Acesso 30/07/2006 Disponível em: http://pt.wikipedia.org/wiki/OpenMosix OpenMosix . Acesso 30/07/2006 Disponível em: http://en.wikipedia.org/wiki/OpenMosix Cluster. Acesso 30/07/2006 Disponível em: http://pt.wikipedia.org/wiki/Cluster LTSP-MOSIX. Acesso 30/07/2006 Disponível em: http://www.femto-st.fr/ daniau/ltspmosix/ 41 DHCP. Acesso 30/07/2006 Disponível em: http://en.wikipedia.org/wiki/DHCP DHCP. Acesso 30/07/2006 Disponível em: http://pt.wikipedia.org/wiki/DHCP TFTP. Acesso 30/07/2006 Disponível em: http://pt.wikipedia.org/wiki/TFTP Trivial File Transfer Protocol. Acesso 30/07/2006 Disponível em: http://en.wikipedia.org/wiki/TFTP Linux Terminal Server Project (LTSP) . Acesso 30/07/2006 Disponível em: http://pt.wikipedia.org/w X display manager. Acesso 30/07/2006 Disponível em: http://en.wikipedia.org/wiki/XDMCP BAR, Moshe [et. Al.], Introduction to openMosix[online], Edição em Adobe Acrobat PDF, 2003, Acesso em 15/03/2006. Disponível em: http://openmosix.sourceforge.net/linux-kongress_2003_open Computer Cluster. Acesso 30/07/2006 Disponível em: http://en.wikipedia.org/wiki/Computer_cluster