UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA PROGRAMA DE PÓS-GRADUAÇÃO EM COMPUTAÇÃO MARCOS ENNES BARRETO RAFAEL BOHRER ÁVILA Estudo e Desenvolvimento de um Modelo de Integração de Agregados Heterogêneos Relatório de Pesquisa RP-666 Prof. Dr. Philippe Olivier Alexandre Navaux Orientador Porto Alegre, abril de 2003 SUMÁRIO LISTA DE FIGURAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 LISTA DE TABELAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2 COMPUTAÇÃO BASEADA EM GRIDS . . . . . . . . . . . . . . . . . . 2.1 Estudos de Casos: Ambientes de programação para grids . . . . . . . . 2.1.1 Globus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.2 Legion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.3 WebFlow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.4 NetSolve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.5 Síntese e Análise Comparativa . . . . . . . . . . . . . . . . . . . . . . . 7 8 8 10 13 14 16 3 A BIBLIOTECA DE PROGRAMAÇÃO DECK 3.1 Modelo de programação . . . . . . . . . . . . 3.2 Estrutura do modelo . . . . . . . . . . . . . . 3.2.1 DECK em redes Ethernet . . . . . . . . . . . 3.2.2 DECK em redes Myrinet . . . . . . . . . . . 3.2.3 DECK em redes SCI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 19 19 22 23 24 4 O MODELO DE INTEGRAÇÃO: MULTICLUSTER 4.1 Aspectos de hardware . . . . . . . . . . . . . . . . 4.2 Aspectos de software . . . . . . . . . . . . . . . . . 4.2.1 Nós lógicos e físicos . . . . . . . . . . . . . . . . 4.2.2 Comunicação . . . . . . . . . . . . . . . . . . . . 4.2.3 Heterogeneidade . . . . . . . . . . . . . . . . . . . 4.3 Protocolo de comunicação entre clusters . . . . . . 4.3.1 Avaliação de um protótipo do RCD . . . . . . . . . 4.4 Considerações adicionais sobre o modelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 26 27 27 28 29 30 30 32 CONCLUSÕES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 5 . . . . . . . . . . . . LISTA DE FIGURAS Figura 3.1: Figura 3.2: Figura 3.3: Figura 3.4: Figura 3.5: Interações no ambiente DECK . . . . . . . . . . . . . Estrutura do modelo conceitual do DECK. . . . . . . . Latência e largura de banda para a rede Fast Ethernet. . Latência e largura de banda para a rede Myrinet. . . . Largura de banda do DECK e ScaMPI na rede SCI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 20 23 24 25 Figura 4.1: Figura 4.2: Figura 4.3: Figura 4.4: Interconexão entre clusters Myrinet e SCI. . . . . . . . . . . . . . . Arquivo descritor para uma aplicação MultiCluster. . . . . . . . . . Trajeto da mensagem enviada de um cluster a outro através do RCD Latência e largura de banda obtidas com o protótipo do RCD . . . . . . . . 27 28 31 31 LISTA DE TABELAS Tabela 2.1: Síntese das funcionalidades dos ambientes de Grid Computing. . . . 17 5 1 INTRODUÇÃO A partir da metade dos anos 90, com o surgimento de redes de comunicação de alto desempenho, tais como Myrinet (BODEN et al., 1995) e SCI (INSTITUTE OF ELECTRICAL AND ELECTRONIC ENGINEERS, 1992; HELLWAGNER; REINEFELD, 1999), muitas instituições de ensino e pesquisa começaram a utilizar plataformas baseadas em computadores comuns conectados por essas redes. Essas plataformas foram denominadas clusters e a sua utilização ficou mundialmente conhecida como cluster computing (STERLING et al., 1999; BUYYA, 1999a,b; STERLING, 2002). O uso de clusters mudou drasticamente o panorama da programação paralela, uma vez que as bibliotecas de multiprogramação e comunicação até então utilizadas tiveram que ser adaptadas para protocolos específicos para essas redes de alto desempenho. Até o presente momento, muita pesquisa já foi realizada com esse tipo de plataforma, resultando em ambientes de programação e gerenciamento de clusters até mesmo com centenas de nós processadores. Atualmente, o foco das pesquisa nessa área evoluiu para o estabelecimento de grandes plataformas computacionais, onde cada nó corresponde não mais a um PC mono ou multiprocessado, mas sim a um cluster com dezenas ou centenas de PCs. Essa nova área de estudo é denominada metacomputing ou grid computing e seu objetivo principal é a junção de clusters geograficamente distribuídos com o intuito de formar uma única plataforma computacional, que possa ser compartilhada por diferentes usuários considerandose aspectos relacionados às interfaces de programação, questões de compartilhamento de dados e arquivos, segurança, autenticação, balanceamento de carga e tolerância a falhas. Nesse contexto, existem igualmente dezenas de ambientes que propõem-se a tal fim; muitos deles evoluiram de plataformas baseadas em clusters para plataformas de grids. Além dos ambientes, existem diferentes esforços da comunidade científica e industrial (grupos de trabalhos, fóruns, listas de discussão, etc.) para o estabelecimento de padrões para os serviços e protocolos que devem ser suportados nessas plataformas. Este projeto de pesquisa não trata diretamente da área de grid computing, pois está relacionado ao projeto MultiCluster (descrito no Capítulo 4), que tem por objetivo a integração de clusters que estão fisicamente próximos, mas que são heterogêneos em relação ao paradigma de comunicação entre processos e à rede de comunicação. Dessa forma, aspectos como segurança e autenticação não são prioritários nesse contexto. O foco está no estabelecimento de um ambiente de programação que possa integrar de forma eficiente clusters conectados por redes Myrinet, SCI e Fast Ethernet, por exemplo. O projeto apresenta também um estudo sobre alguns dos mais importantes ambientes utilizados em plataformas de grid atualmente, com o objetivo de ilustrar as funcionalidades providas por cada um, bem como aspectos de sua organização estrutural. Este trabalho está organizado da seguinte maneira: o Capítulo 2 descreve alguns 6 aspectos sobre a computação baseada em clusters e a sua evolução para a exploração de grids, bem como apresenta estudos de casos sobre alguns ambientes largamente utilizados em plataformas de clusters e grids e uma análise comparativa entre os mesmos; o Capítulo 3 apresenta o DECK, que corresponde a um ambiente de programação originalmente destinado para clusters e que vem sendo estendido para suportar as características advindas da integração de clusters, as quais são propostas pelo MultiCluster; nesse capítulo são ainda descritas algumas implementações disponíveis do DECK, bem como avaliações de desempenho da execução de aplicações paralelas. O modelo de integração de clusters heterogêneos proposto é apresentado no Capítulo 4, detalhando as características de integração definidas, juntamente com uma avaliação preliminar de desempenho. Por último, o Capítulo 5 apresenta algumas conclusões sobre o trabalho desenvolvido e considerações futuras. 7 2 COMPUTAÇÃO BASEADA EM GRIDS O termo metacomputing é originalmente atribuído a Larry Smarr, diretor do NCSA, que por volta de 1989 o divulgou mundialmente através de seu projeto CASA, que consistia em uma das primeiras redes Gigabit dos Estados Unidos (FOSTER; KESSELMAN, 1999). Um metacomputador ou grid pode ser definido como um ambiente dinâmico onde um conjunto de nós de processamento (agregados ou clusters) pode ser adicionado ou removido sempre que necessário. Cada conjunto de nós é, portanto, independente dos demais. De uma forma geral, um metacomputador corresponde a um conjunto de agregados interconectados via uma rede de comunicação e que pode ser usado de maneira transparente para a execução de aplicações paralelas ou distribuídas. O surgimento da computação baseada em grids deu-se como uma consequência direta do estabelecimento de plataformas baseadas em agregados individuais em universidades e na indústria para a execução de aplicações complexas. É claro que atualmente não existem ainda muitas plataformas desse tipo, pois muitos aspectos relacionados com segurança, compartilhamento de recursos, comunicação e gerenciamento têm sido estudados com o objetivo de se determinar quais os recursos mínimos necessários para que esse tipo de plataforma possa ser utilizada de maneira eficiente e segura para a execução de aplicações complexas de grande porte. Mesmo com tantas questões ainda pendentes, já existem diversos ambientes de programação e de gerenciamento voltados para esse tipo de arquitetura, tais como Globus, Legion, Condor, Codine, LSF, WebFlow e NetSolve. Todos esses ambientes provêem serviços e mecanismos que implementam a maioria dos aspectos relacionados com a utilização de grids. Basicamente, pode-se estabelecer que a exploração de grids requer as seguintes funcionalidades: • acesso homogêneo e transparente a todos os nós (agregados ou máquinas paralelas dedicadas) componentes do grid. Isto requer a definição de interfaces de acesso comuns a todos os nós, bem como esquemas de proteção e autenticação de usuários e aplicações. • manutenção da autonomia local de cada nó, compreendendo a sustentação de políticas de acesso, segurança, comunicação e de escalonamento. • definição de protocolos de comunicação comuns a todos os nós, bem como suporte para todas as linguagens e bibliotecas de programação usadas. É importante salientar que o usuário não deve ser obrigado a utilizar uma determinada 8 linguagem ou biblioteca simplesmente porque a plataforma não provê suporte para outras ferramentas. • estabelecimento de uma camada global de gerenciamento e alocação de recursos, uma vez que os usuários têm necessidades diferentes e a plataforma pode ser composta por nós heterogêneos em relação ao poder de processamento, representação de dados e mecanismos de comunicação. Isso requer igualmente que as políticas locais de gerenciamento sejam mantidas. • definição de mecanismos de tolerância a falhas, com possibilidade de migração de tarefas entre os nós do grid, visto que algumas aplicações requerem muito tempo de processamento e alto grau de confiabilidade. • definição de políticas e protocolos para compartilhamento e transferência de arquivos entre os nós. Ainda, é necessária a definição de regras para autenticação remota de usuários, visto que o mesmo não deve, obrigatoriamente, possuir cadastro (login e diretório home) em todas as máquinas componentes da plataforma. Como pode ser observado, a utilização de grids não é trivialmente realizável em um curto espaço de tempo, visto que demanda um conjunto de funcionalidades bastante complexo. Ainda pode-se salientar que, como a maioria das aplicações já possui uma ou mais implementações voltadas para arquiteturas de agregados ou para redes de estações, é necessário que um ambiente de programação para grid suporte linguagens e bibliotecas consideradas padrões de facto na comunidade científica, tais como PThreads e MPI. Entretanto, esse tipo de plataforma tem sido considerada “a quinta era” (FOSTER; KESSELMAN, 1999) da computação, onde vislumbra-se a total integração de plataformas geograficamente dispersas com o objetivo de prover um poder de processamento até hoje não disponível, com acesso seguro e utilização eficiente dos recursos compartilhados. A computação baseada em grids têm sido o novo desafio na área de computação distribuída, da mesma forma que a utilização eficiente de agregados afetou a área de computação paralela nos anos 90. 2.1 Estudos de Casos: Ambientes de programação para grids Atualmente, existem dezenas de ambientes de desenvolvimento de aplicações para plataformas baseadas em clusters e grids. Alguns desses ambientes correspondem a evoluções de ambientes já existentes, quando a computação paralela e distribuída era explorada em supercomputadores e em redes de computadores ou estações, respectivamente. Esta Seção apresenta alguns ambientes cujos propósitos estão inseridos no contexto da computação baseada em grids, escolhidos em razão de sua importância e unanimidade dentro da comunidade científica. 2.1.1 Globus Globus (FOSTER; KESSELMAN, 1998) é um projeto multi-institucional americano cujo objetivo é possibilitar a construção de grids computacionais. Um grid, na terminologia do projeto, corresponde a um infraestrutura de hardware e software que provê acesso a recursos computacionais, independente da localização geográfica dos mesmos. Dessa forma, uma aplicação que executa sobre o Globus é capaz 9 de gerenciar recursos distribuídos e até mesmos heterogêneos como se fossem uma única máquina virtual. O principal componente dessa infraestrutura é o Globus Metacomputing Toolkit (GMT), que corresponde a uma camada de software que implementa serviços e funcionalidades requeridos para o estabelecimento de um grid computacional, tais como localização e gerenciamento de recursos, serviço de nomes, comunicação, entre outros. Um ponto importante na filosofia do Globus é o fornecimento não de um único modelo de programação, mas sim de um conjunto de serviços elementares os quais os desenvolvedores de aplicações podem estender para implementar as funcionalidades que necessitam. Estruturado em módulos, o Globus provê serviços de baixo nível, necessários para a execução de qualquer aplicação; e serviços mais elaborados, construídos sobre os primeiros. Dessa forma, os desenvolvedores de aplicações têm bastante flexibilidade para interagir com um determinado serviço, sem precisar utilizar outros serviços desnecessários (por exemplo, utilizar o gerenciamento de recursos sem utilizar primitivas de comunicação). Essa característica também pode ser notada no DECK. Algumas das funcionalidades providas pelo GMT são: • gerenciamento de processos e alocação de recursos (GRAM); • primitivas de comunicação ponto-a-ponto e em grupo (Nexus); • serviços de autenticação e segurança (GSI); • interfaces seqüenciais e paralelas para acesso remoto a dados e caching(GASS); • acesso remoto a informações de estado e estrutura (MDS); • monitoramento dos recursos do sistema (HBM); • gerenciamento de executáveis (GEM). De uma maneira geral, o Globus pode ser visto como um framework composto por um conjunto de interfaces (APIs) para serviços básicos, possibilitando ao programador o desenvolvimento de ambientes de computação e aplicações complexas, capazes de explorarem os recursos providos por um grid. Algumas das principais características do Globus são: • A estrutura modular adotada pelo Globus torna todos os serviços iguais hierarquicamente, ou seja, existem interfaces de comunicação para qualquer par de serviços. • Todas as funcionalidades de comunicação são providas pela biblioteca Nexus, através de primitivas de comunicação que suportam diferentes semânticas (protocolos e suas características). Nexus é um exemplo de biblioteca que foi largamente usada para o desenvolvimento de aplicações em redes de estações e em clusters, e que mais tarde foi adaptada para a exploração de grids. • O MDS (Metacomputing Directory Service) é responsável por prover informações estáticas e dinâmicas sobre os recursos existentes dentro do ambiente de grid. Esse serviço está baseado em um servidor LDAP (Lightweight Directory Access Protocol) capaz de armazenar informações sobre potência e disponibilidade dos recursos. 10 • As entidades de computação são os processos. Dessa forma, todo o controle de concorrência e a comunicação entre threads deve ser feita via primitivas da biblioteca Nexus. • A resolução de nomes é realizada através de servidores LDAP, DNS e X.500; e o controle de tempo fica a cargo de cada site componente do grid. • Possui três interfaces para acesso remoto a dados: – GASS Global Access to Secondary Storage — rotinas para leitura e escrita remota de arquivos; – RIO Remote I/O — implementação distribuída para a biblioteca MPI-IO; – GEM Globus Executable Management — permite leitura e execução remota de arquivos através dos serviços GRAM e GASS. • Utiliza o serviço GSI (Generic Security Service) para implementar políticas de segurança e de autorização de acesso. O GSI é uma implementação de SSL (Secure Sockets Layers) que utiliza algoritmos RSA e chaves públicas e privadas, juntamente com certificados X509. Esses certificados é que identificam o usuário dentro de todo o sistema e que permitem acesso aos recursos do mesmo, de acordo com as políticas estabelecidas. • Oferece recursos básicos para a implementação de mecanismos de recuperação de falhas. Tanto o Nexus quanto o GHM (Globus Heartbeat Monitor) provêem funcionalidades básicas de monitoramento de processos. • Em relação ao gerenciamento de recursos e ao escalonamento, o Globus implementa o serviço GRAM (Globus Resource Allocation Manager). Esse serviço permite a criação, monitoramento e terminação de processos locais e remotos. Em cada site componente do grid, os processos são gerenciados de acordo com as políticas locais de alocação de recursos e escalonamento; sendo que essas políticas podem ser implementadas por outras ferramentas, tais como LSF, Codine ou Condor. Além dessas funcionalidades, o GRAM é também responsável por i) interpretar especificações RSL (Resource Specification Language), mecanismo pelo qual os processos são especificados e criados, ii) gerenciamento e monitoramento remoto de processos e iii) atualização do MDS com informações de estado dos recursos. Atualmente, o Globus está diponível para os sistemas Unix e Linux, e vem sendo portado para o Windows NT. O framework pode ser utilizado com as linguagens Java, Perl e C++, bem como as bibliotecas MPI e Simple RPC. Existem trabalhos em andamento para a integração de recursos de outros ambientes, tais como NetSolve e Legion. 2.1.2 Legion Legion (GRIMSHAW et al., 1999) é um projeto desenvolvido na Universidade de Virginia cujo objetivo é prover uma infraestrutura de software que permita aos usuários acessar, de forma transparente, recursos geograficamente distribuídos e possivelmente heterogêneos. A filosofia do Legion baseia-se na orientação a objetos como a maneira para prover transparência. Todo e qualquer serviço ou funcionalidade provida pelo Legion é vista pelo 11 programador como um objeto. Um objeto é um processo ativo que responde à invocações de métodos realizadas por outros objetos; entretanto, o Legion somente define a interface de comunicação entre objetos (através de uma IDL) e não especifica nenhuma linguagem de programação ou protocolo de comunicação. Estruturalmente, o Legion está organizado em classes que realizam tarefas de gerenciamento e cálculo, e metaclasses, que correspondem a classes de classes. Adicionalmente, existe um conjunto de objetos com funções distintas dentro do sistema: • objetos hospedeiros: são abstrações de recursos e podem representar desde um simples processador até múltiplos processadores, bem como outros elementos de software. • objetos persistentes: correspondem a objetos que armazenam informações sobre estados de execução dos objetos do sistema, para fins de persistência. • objetos de implementação e cache: os primeiros são semelhantes a arquivos executáveis Unix e correspondem a serviços providos dentro do sistema; os segundos correspondem a objetos cujos dados são freqüentemente acessados, simulando uma cache de dados. • objetos de contexto e de associação: os objetos de contexto mapeiam nomes de contexto para identificadores de objetos usados pelo Legion, permitindo que o programador possa nomear seus objetos com um string de tamanho arbitrário. Já os objetos de associação são responsáveis por mapear identificadores de objetos para endereços físicos. Por estar calcado na orientação a objetos como metodologia de desenvolvimento, o Legion provê uma série de vantagens, tais como abstração de dados, polimorfismo e herança; o que são características bastante desejáveis em aplicações complexas. Entretanto, esse paradigma não é totalmente adequado quando o Legion precisa interagir com sistemas legados, podendo causar alguns problemas. Outro ponto a considerar é o fato do Legion estar implementado com a linguagem MPL (Mentat Programming Language), uma linguagem C++ paralela que precisa ser adaptada para cada plataforma antes da instalação do Legion. Algumas das principais características do Legion são: • Não existe uma hierarquia definida entre os objetos; todos são iguais e capazes de comunicarem entre si através de uma camada de comunicação baseada em sockets Unix denominada MMPS (Modular Message Passing System). • Implementa um esquema de nomeação em três camadas: o usuário refere-se aos objetos através de nomes comuns (strings), denominados “nomes de contexto”, que são mapeados para LOIDs (Legion object identifiers) — independentes de localização e com chaves RSA. Por último, cada LOID é mapeado para um ou mais LOAs (Legion object address) para fins de comunicação. Um para LOID/LOA é chamado de “associação” na terminologia do Legion, sendo que as associações ficam armazenadas nos objetos de associação. • Similarmente ao Globus, o Legion não provê multiprogramação nem um serviço de tempo específico. A entidade computacional do Legion é o processo, sendo alocado um processo por objeto componente da aplicação. 12 • Possui um gerenciador de contextos implementado através de uma interface gráfica Java e que permite a manipulação de objetos, arquivos e contextos na forma de ícones. Os comandos básicos para a manipulação desses ícones são: move, alias, get interface, get attributes, destroy, activate e deactivate. • O compartilhamento de arquivos é suportado através de um sistema de arquivos virtual, implementado com uma bilioteca de rotinas para leitura e escrita remota com semântica semelhante a do Unix. • As questões de segurança e autorização são tratadas de forma simples, uma vez que o modelo de segurança do Legion é voltado para a proteção dos objetos e da comunicação entre eles. Cada usuário, ao definir um objeto, define também seus direitos e métodos que podem ser invocados. A cada objeto é adicionado um método chamado MayI, que é responsável por receber as invocações e verificar os direitos de acesso e a identidade do objeto chamador antes de invocar o método desejado. Essa verificação é baseada em um par de chaves — uma pública e outra privada —, onde a primeira faz parte do nome do objeto e é usada para criptografar toda a comunicação com esse objeto, e a segunda é usada como assinatura de qualquer mensagem enviada por um determinado objeto. • Provê apenas primitivas para replicação de objetos e checkpointing de comunicação entre eles. Se uma aplicação necessitar de um alto nível de tolerância a falhas, o programador deve especificar classes que implementem essa funcionalidade. • O gerenciamento de recursos é feito através dos objetos hospedeiros, que representam processadores. Esses objetos podem criar e gerenciar objetos Legion, através de comandos para criação, terminação e controle. As classes invocam métodos dos objetos hospedeiros para a instanciação de objetos nos nós que esses hospedeiros representam. • O escalonamento é implementado através de três componentes: – collection: responsável pela coleta de informações de estado do sistema. – scheduler: interage com o collection para determinar um conjunto de recursos que supra as necessidades de escalonamento. – enactor: responsável pela alocação de recursos, baseada em uma lista de escalonamentos desejados pelo scheduler. Além da linguagem MPL, o Legion também suporta a linguagem BFS (Basic Fortran Support), que corresponde a um conjunto de pseudo-comandos para Fortran e um pré-processador que habilita o acesso aos objetos do Legion através desses comandos. Adicionalmente, as bibliotecas PVM, MPI e HPF são suportadas, bem como a linguagem Java. De forma semelhante ao Globus, o Legion implementa interfaces gráficas e orientadas a caracteres para o desenvolvimento de aplicações. O gerenciador de contextos pode ser executado em qualquer plataforma que disponha de JDK 1.1.3, bem como existe uma implementação disponível para Windows 95 denominada Legion Server. O Legion está atualmente disponivel para os sistemas Linux (x86/Alpha), Solaris (SPARC), AIX (RS/6000), IRIX (SGI), DEC UNIX (Alpha) e Cray T90. 13 2.1.3 WebFlow WebFlow (2003) é um framework que estende o modelo da Web com recursos para computação distribuída e computação baseada em grids. O principal objetivo do WebFlow é permitir o desenvolvimento e o reuso de módulos computacionais, onde o usuário final pode, através de um navegador Web, utilizar módulos Webflow como componentes visuais e editores de texto como ferramentas de autoria para suas aplicações distribuídas. O WebFlow está organizado em uma arquitetura Java de três camadas que pode ser considerada como um sistema dataflow visual. A primeira camada corresponde a um conjunto de applets para permitir tarefas de autoria e controle do ambiente. Esses applets interagem com uma camada de controle, baseada em servlets, que por sua vez interagem com sistemas legados ou simuladores de alto desempenho. A última camada é implementada com recursos providos pelo ambiente Globus, onde: • o Metacomputing Directory Service — MDS é usado para mapear e identificar recursos; • o Globus Resource Allocation Manager — GRAM é usado para o controle de alocaçäo de recursos; • o Global Access to Secondary Storage — GRASS é usado para permitir a transferência rápida de dados. A filosofia do WebFlow é bastante semelhante à filosofia da própria Web. Os desenvolvedores de aplicações podem disponibilizar módulos computacionais em servidores Web, que são semelhantes a páginas Web. Cada link dentro do módulo pode ser comparado a um canal de transferência de dados (comunicação) entre módulos. Dessa forma, as saídas de um módulo podem ser conectadas nas entradas de outro módulo, formando uma espécie de grafo de computação distribuída (compute-webs na terminologia do WebFlow). Os usuário ativam os módulos computacionais simplesmente clicando nos links dentro de cada página disponível nos servidores Web. Novas aplicações podem ser criadas através do reuso de componentes prontos ou simplesmente clicando-se nos ícones que representam módulos, arrastando-os para a área de edição e especificando-se as linhas de conexão entre cada módulo (fluxo de execução e troca de informações). O protótipo do WebFlow executa com um conjunto de servidores Web capazes de interpretar Java (Apache), que executam servlets encarregados do gerenciamento de recursos distribuídos. Existem três servlets principais: session manager, module manager e connection manager. Esses servlets usam endereços URL e podem fornecer informações sobre seus serviços e estado de execução. Diferentemente do Legion e do Globus, o WebFlow é implementado de uma forma híbrida, através de uma arquitetura em três camadas que concilia a Web com serviços especializados providos por terceiros (como é o caso da utilização do Globus como última camada). Essa abordagem traz muitas vantagens, uma vez que é possível a adição de outras funcionalidades de maneira totalmente transparente ao usuário. Além disso, é extremamente portável, requerendo apenas um servidor Web capaz de interpretar servlets Java. Algumas características do WebFlow compreendem: 14 • Não existe uma hierarquia definida, uma vez que um nó WebFlow é um servidor Web com um único endereço URL e capaz de comunicar-se com qualquer outro nó. • O modelo de comunicação é ponto-a-ponto e dirigido a dados. O WebFlow provê diferentes protocolos para fins de comunicação: a comunicação entre applets e o servidor Web é feita via protocolo HTTP, entre servidores é feita através de TCP/IP e os módulos da aplicação podem trocar dados (objetos Java serializados) através de portas de entrada e saída, regidos por um política de eventos. Além desses protocolos de comunicação, estão também disponíveis diferentes protocolos para troca de arquivos (HTTP, FTP, IIOP e Globus GASS). • Cada módulo executa como uma thread Java independente, e o usuário é responsável pela sincronização entre cada módulo. Similarmente ao Legion e ao Globus, nenhum serviço de tempo é especificado, sendo utilizados os serviços disponíveis em cada nó componente do ambiente. • O compartilhamento e o acesso remoto a arquivos é realizado através de um “navegador de arquivos”, onde o usuário pode selecionar um conjunto de arquivos e enviá-lo para outro local através de HTTP, IIOP, FTP ou GRAM. • O esquema de segurança está estruturado em duas camadas: as transações entre os clientes e a camada intermediária, via navegador Web, são autenticadas pelo protocolo TLS 1.0; e o acesso aos recursos da camada inferior é autenticado pelos próprios fornecedores desses recursos, tais como o Globus. • Na implementação atual do WebFlow, aspectos de tolerância a falhas e monitoramento do sistema não estão disponíveis. A próxima versão irá prover essas funcionalidades, baseadas em serviços definidos no padrão CORBA. • O gerenciamento de recursos e o escalonamento são feitos através do GMT (Globus Metacomputing Toolkit) ou de pacotes específicos, tais como PBS e Condor. Todos os módulos do WebFlow são objetos Java, capazes de encapsular código de outras linguagens de programação, tais como C, Fortran, HPF e Pascal. Dessa maneira, qualquer plataforma que suporte a execução de uma máquina virtual Java é capaz de executar aplicações WebFlow. Em termos de interface gráfica, existe uma ferramenta de desenvolvimento que permite ao programador a criação de uma (meta)aplicação através da combinação de módulos pré-definidos. Também é possível ao programador o desenvolvimento de interfaces customizadas, através de uma API específica para tal. 2.1.4 NetSolve NetSolve (CASANOVA; DONGARRA, 1995) é um framework que emprega o paradigma Cliente/Servidor para permitir a solução de problemas computacionais de uma maneira distribuída. O sistema é baseada na conexão de diferentes recursos computacionais através de uma rede local ou a própria Internet. As aplicações podem ser escritas nas linguagens C ou Fortran e os usuários podem, ainda, utilizar o MatLab ou um navegador Web para interagir com serviços remotos. 15 Adicionalmente, o NetSolve permite que o usuário procure por um determinado serviço dentro do sistema, escolha qual o melhor, submeta o problema a ser resolvido (com possibilidade de recuperação em caso de falhas) e receba a resposta. A implementação do NetSolve permite que vários pacotes numéricos, tais como FitPack, ScaLAPACK, BLAS e QMR, sejam utilizados para a resolução de problemas. Estruturalmente, o NetSolve está organizado em: • Um conjunto de interfaces de programação (APIs) definidas em diferentes bibliotecas numéricas e que podem ser acessadas remotamente através de programas escritos em C, Fortran, MATLAB e Java. • Um conjunto de servidores que encapsulam essas rotinas numéricas, e • Um ou mais agentes responsáveis pela associação de requisições de serviços aos servidores que provêem esses serviços. Uma requisição de serviço é submetida a um agente, como resultado de uma chamada à interface de programação do cliente. O agente, então, determina o servidor mais adequado para a execução desse serviço e o mesmo, após executar o serviço, repassa ao cliente o resultado esperado. Um servidor pode estar executando em diferentes tipos de plataforma, tais como simples estações, uma rede de estações ou uma arquitetura paralela dedicada (MPP). O NetSolve provê um “linguagem de aplicação” — conjunto de comandos através do qual é possível invocar funções numéricas escritas em linguagem de alto nível (por exemplo, MATLAB) ou em linguagens de baixo nível (por exemplo, C e Java). Por exemplo, a porção de código em MATLAB para multiplicação de matrizes é c = a ∗ b, sendo a porção equivalente em NetSolve definida como c = netsolve(‘matmul 0 , a, b), onde matmul é o nome do serviço implementado em algum servidor do ambiente. A utilização de agentes para a realização de escalonamento das chamadas de serviços remotos é fundamentada na idéia de que um agente específico para cada nó componente do sistema pode prover melhor desempenho e confiabilidade na execução de aplicações. Um agente NetSolve tem duas funções principais: • Manter uma relação dos recursos computacionais disponíveis e suas características. • Fazer a associação de uma requisição de serviço, disparada por um cliente, para o servidor mais adequado para executá-la, considerando informações estáticas e dinâmicas de cada recurso, bem como informações sobre o problema a ser resolvido. A escolha do servidor “mais adequado” para a execução de um serviço é baseada em um mecanismo de balanceamento de carga que considera diferentes tipos de parâmetros para o seu modelo de custo: • parâmetros dependentes do cliente: tamanho dos dados a serem enviados, tamanho do resultado esperado e tamanho do problema. • parâmetros estáticos dependentes do servidor: características de rede entre o servidor e o cliente, complexidade do algoritmo executado no servidor e o desempenho teórico (raw performance) do servidor. 16 • parâmetros dinâmicos dependentes do servidor: corresponde a carga de trabalho em um determinado momento, calculada através de um modelo de custo específico (CASANOVA; DONGARRA, 1995). Com esses parâmetros, o NetSolve pode calcular o tempo (T ) estimado para que um determinado servidor execute um serviço, sendo que o menor tempo corresponde ao servidor mais adequado. Adicionalmente, o NetSolve executa estimativas de desempenho para cada candidato a melhor servidor. Os servidores NetSolve, que representam recursos computacionais, foram desenvolvidos com três objetivos principais: i) prover acesso uniforme a todo o software disponível, como se o usuário estivesse utilizando um único pacote de funções; ii) prover boa escalabilidade, permitindo que o ambiente possa incorporar diferentes bibliotecas de funções; e iii) prover independência de plataforma e garantir que todo o software necessário ao desenvolvimento de aplicações esteja instalado e configurado em cada nó participante do ambiente. Esses objetivos são alcançados através da utilização de uma linguagem de descrição de funções, que permite ao programador especificar arquivos com funções que devem ser providas por servidores. Essas funções são então traduzidas para módulos do NetSolve, acessíveis a partir de aplicações escritas em C, Java, Fortran e MATLAB, conforme já descrito. Além disso, esses arquivos descritivos podem ser trocados entre diferentes grupos de pesquisadores, colaborando para a extensão das funcionalidades providas pelo NetSolve. Outra funcionalidade provida pelo ambiente é a tolerância a falhas em servidores e agentes, através de um mecanismo chamado retry. Cada agente é responsável por manter informações sobre quais servidores estão operacionais em um determinado momento. Além disso, podem ser utilizados múltiplos agentes em cada nó do sistema, para casos de falhas em agentes. Se uma falha é detectada, uma requisição de serviços pode ser retransmitida a outro servidor capaz de executá-la. Para prover tal funcionalidade, o NetSolve emprega rotinas providas por outros ambientes, tais como o Globus e o Condor. 2.1.5 Síntese e Análise Comparativa Esta seção apresenta uma análise comparativa dos ambientes apresentados nas seções anteriores. Essa análise baseia-se na observação das funcionalidades providas por cada ambiente, e nos mecanismos e técnicas usadas para implementar essas funcionalidades. Uma análise mais detalhada pode ser obtida em (FOSTER; KESSELMAN, 1999). O primeiro ponto a observar, quando da comparação entre diferentes ambientes, é o estabelecimento de uma relação entre a terminologia empregada em cada um. Esse ponto não é trivialmente realizável, levando ao agrupamento por funcionalidades. Considerando a Tabela 2.1, é possível observar que todos os ambientes, exceto o NetSolve, não empregam nenhuma hierarquia organizacional, o que favorece a escalabilidade e diminiu os pontos suscetíveis a falhas. A escalabilidade no NetSolve é defendida através da facilidade de adição de novas funções, através de uma linguagem específica para essa finalidade; e a tolerância a falhas é garantida através de mecanismos de checkpoiting e serviços Globus e Condor. É importante salientar que, dentre os quatro ambientes apresentados, o NetSolve é o ambiente mais recente e com menos funcionalidades disponíveis. Quando da implementação de suas versões iniciais, nenhum mecanismo padrão para gerenciamento de recursos, comunicação e serviço de diretório estava definido; o que fez com que a equipe 17 Tabela 2.1: Síntese das funcionalidades dos ambientes de Grid Computing. Funcionalidade Hierarquia Comunicação Diretório e Registro Concorrência Globus Par Nexus MDS — LDAP Serv. de Tempo Nomeação Não definido LDAP + DNS Sistema de Arquivos Segurança GASS + ROMIO Tolerância a Falhas Gerenciamento de Recursos Programação Interfaces de Usuário Disponibilidade Processos GSI (RSA + X.509 cert.) Monitor heartbeat GRAM + RSL Legion WebFlow Par Par MMPS Sockets + MPI Agente de MDS — LDAP associação Processos e Processos objetos Não definido Não definido Gerenciador de LDAP + DNS contexto + DNS LegionFS GASS Baseado em objetos + RSA Não implem. NetSolve Cliente/Servidor Sockets e XDR Não implementado Servidores monoprocessados Não definido Agentes Não definido SSL Não definido Nenhum Retry + Globus e Condor Agentes + scripts C, Fortran, Java e MATLAB Interativas e shell Diversos paradigmas GUI + texto Objeto host MPL, BFS + wrappers GUI + texto GRAM Applets UNIX UNIX UNIX, NT MPI de desenvolvimento estabelecesse soluções proprietárias ou adotasse protocolos já difundidos (caso do TCP/IP e XDR) para a implementação de algumas funcionalidades. O Globus é construído de forma modular, onde serviços de alto nível são desenvolvidos sobre serviços de baixo nível. O GMT é organizado como um conjunto de serviços distintos, cada qual com uma API bem definida, permitindo ao programador escolher quais dos serviços serão usados para as suas aplicações. Adicionalmente, essas interfaces podem ser adaptadas para utilizarem outros ambientes, tais como Condor ou NQE para o gerenciamento de recursos. A principal vantagem do Globus, além da quantidade de serviços disponíveis, é o fato de os mesmos estarem abstraídos em interfaces bem definidas, permitindo uma fácil portabilidade, reescrita das funcionalidades sem alterar as aplicações e a inclusão de novas funcionalidades. O Legion adota uma filosofia diferente em relação ao Globus, pois encapsula todas as funcionalidades em objetos, o que lhe dá todas as vantagens advindas com o paradigma de orientação a objetos. De uma maneira geral, essa filosofia é bastante adequada para a construção de ambientes de programação para grids, pois consegue mapear e, ao mesmo tempo, abstrair detalhes de implementação da maioria das aplicações para esse tipo de plataforma. Entretanto, dependendo da funcionalidade a ser provida, é necessário converter as interfaces procedurais (como é o caso do DNS, por exemplo) para interfaces orientadas a objetos, o que é ralizado através de objetos wrappers. Em relação ao WebFlow, sua principal vantagem está na organização em múltiplas camadas, onde a camada mais básica geralmente é composta por serviços de terceiros, tais como o Globus e (ainda em desenvolvimento) o CORBA. Esta organização provê grande portabilidade as aplicações escritas em WebFlow, pois as mesmas podem executar em qualquer máquina capaz de executar um servidor Web. Os ambientes apresentados nesse capítulo são apenas alguns exemplos dos muitos esforços despendidos pela comunidade científica mundial para o desenvolvimento de 18 ambientes de programação e gerenciamento de arquiteturas de grids. Atualmente, existem várias dezenas de projetos em andamento ao redor do mundo, bem como existem foruns e grupos de trabalhos preocupados em estabelecer padrões de serviços que devem ser providos em um ambientes desse tipo. 19 3 A BIBLIOTECA DE PROGRAMAÇÃO DECK DECK (Distributed Execution and Communication Kernel) é um modelo para um ambiente de programação cujo objetivo é prover recursos que permitam o desenvolvimento de aplicações paralelas irregulares, através da combinação de multiprogramação e comunicação (BARRETO; NAVAUX; RIVIÈRE, 1998; BARRETO, 2000). A filosofia seguida pelo DECK é semelhante à filosofia seguida por outros ambientes de programação, em relação à integração de comunicação com multiprogramação e à obtenção de alto desempenho; entretanto, o DECK difere desses ambientes em três aspectos: a estrutura modular adotada, os serviços oferecidos e o suporte para diferentes arquiteturas de clusters. 3.1 Modelo de programação O modelo original destina-se ao suporte de aplicações irregulares, oferecendo recursos de troca de mensagens e memória distribuída para permitir a interação entre diferentes tarefas dentro da aplicação. Nesse modelo, cada thread em execução pode criar novos threads, local ou remotamente. A comunicação é feita por memória compartilhada, para threads locais e por primitivas de comunicação ponto a ponto, para threads em diferentes nós. Nesse último caso, são utilizadas mail boxes, que são estruturas de comunicação para o envio e recebimento de mensagens. Cada mail box é local a um determinado processo ou thread e possui um identificador único no sistema (nome), gerenciado por um servidor de nomes e que permite que um nó remoto possa obter uma referência a essa mailbox para fins de comunicação. Contextos de comunicação podem ser utilizados com o objetivo de permitir o gerenciamento individual dos nós do cluster, de maneira a facilitar tarefas relativas à multiplexação de redes e tolerância a falhas. Além dessas funcionalidades, o modelo original prevê mecanismos para a criação dinâmica de processos, com o intuito de melhor suportar aplicações irregulares. A Figura 3.1 ilustra as principais interações previstas no modelo original. Um conjunto de serviços mais elaborados é proposto pelo sistema, tais como balanceamento de carga, tolerância a falhas, visualização e depuração, usados de acordo com a necessidade de cada aplicação. 3.2 Estrutura do modelo A Figura 3.2 ilustra a estrutura geral do ambiente DECK, organizado internamente em dois níveis: uma camada inferior, denominada µDECK, que corresponde à parte de- 20 Processo 0 Processo 1 memória compartilhada memória compartilhada acesso à memória remota thread Nodo 0 Rede Nodo 1 criação remota de thread thread principal mailbox criação remota de processo dado memória compartilhada memória compartilhada Processo 2 Processo 3 Figura 3.1: Interações no ambiente DECK Serviços nomes mensagem comunicação em grupo tolerância a falhas balanceamento de carga multiplexação de redes uDECK comunicação multiprogramação sincronização abstração de interface de rede Figura 3.2: Estrutura do modelo conceitual do DECK. pendente de plataforma (sistema operacional e hardware utilizados) e é responsável pelo fornecimento de mecanismos de comunicação e multiprogramação. A camada superior, denominada camada de serviços, é a parte independente de plataforma, sendo responsável pela implementação de serviços mais elaborados (BARRETO et al., 2000). A camada inferior interage diretamente com o sistema operacional e protocolos de comunicação com o objetivo de explorar eficientemente os recursos da arquitetura e prover alto desempenho. Nesta camada são definidas abstrações relativas à: • multiprogramação, através de um módulo que fornece primitivas associadas à criação e destruição de threads, colocação em estado de espera e liberação do processador, o que faz com que o thread seja desescalonado. • sincronização, através de um módulo que fornece primitivas relacionadas ao controle de acesso a dados globais (conflitos de acesso para escrita e leitura, por exemplo), bloqueando e desbloqueando threads. 21 • comunicação, através de um módulo que fornece primitivas associadas à manipulação de mailboxes, para permitir o envio e recebimento de mensagens; e primitivas relacionadas com a criação e manutenção de um espaço de endereçamento global, para permitir a interação entre processos e/ou threads remotos por meio de leitura e escrita em dados compartilhados. Adicionalmente, são previstas primitivas para o cadastramento e consulta de mailboxes e áreas de memória compartilhada no servidor de nomes. • abstração de interfaces de rede, através de um módulo encarregado de prover mecanismos de endereçamento e controle de mensagens (polling) para cada interface de rede disponível em um determinado nó do cluster e que seja suportada pelo ambiente. A camada superior do ambiente corresponde aos serviços oferecidos, classificados em duas categorias: serviços globais, que são utilizados por qualquer aplicação DECK e correspondem ao serviço de nomes, ao serviço de mensagens e ao suporte à múltiplas interfaces de rede; e serviços locais, que são utilizados de acordo com as necessidades particulares de uma determinada aplicação e correspondem a serviços mais elaborados, tais como comunicação em grupo, tolerância a falhas e balanceamento de carga. O servidor de nomes é um elemento único no sistema cuja função é o cadastramento de mailboxes e de áreas de memória global, permitindo a associação de nomes lógicos a esses recursos. Uma vez associado a um nome, um mailbox pode ser obtido por um processo mediante a apresentação desse nome. No caso de memória compartilhada distribuída, um nome pode ser utilizado para realizar operações de leitura e escrita em dados dentro de uma área de memória compartilhada. O serviço de mensagens fornece uma área de armazenamento (mensagem) utilizada para o empacotamento e desempacotamento de dados. Este serviço fornece primitivas para realizar a conversão na representação de dados, no caso de arquiteturas heterogêneas, bem como primitivas que permitem a re-utilização de uma mensagem em diferentes operações de comunicação. O serviço de multiplexação de redes é responsável pelo suporte a diferentes interfaces de rede que possam co-existir nos nós de um cluster. A idéia básica por trás desse serviço é permitir uma melhor utilização das redes de comunicação, dividindo o tráfego entre elas. Dessa forma, é possível direcionar mensagens de controle do ambiente para a rede mais lenta, deixando a rede mais rápida dedicada somente à aplicação do usuário. Além disso, é responsabilidade desse serviço abstrair do usuário a interface de rede e o esquema de endereçamento utilizados, de maneira a prover portabilidade para qualquer aplicação. O serviço de comunicação em grupo permite que um conjunto de mailboxes possa ser tratado coletivamente como uma única abstração, de maneira a prover facilidades para a difusão confiável de mensagens entre os processos e/ou threads que mantêm esses mailboxes. Esse serviço define primitivas para a criação e destruição de grupos, inclusão e remoção de elementos, bem como envio de mensagens e sincronização. Esse serviço é especialmente útil em aplicações de cálculo paralelo (multiplicação de matrizes por vetores, por exemplo) que necessitam transmitir um conjunto de dados a diferentes threads em execução dentro de um tempo hábil, o que seria inviável através de primitivas ponto-a-ponto. O serviço de balanceamento de carga é responsável por duas tarefas básicas: prover técnicas de escalonamento eficientes para tirar proveito de arquiteturas multipro- 22 cessadas e oferecer mecanismos que permitam uma distribuição uniforme da carga de trabalho entre os nós do cluster. O serviço de tolerância a falhas tem como objetivo prover recursos que assegurem a correta execução das aplicações sobre o cluster, mesmo na presença de falhas. Para tanto, são previstos protocolos para o estabelecimento de pontos de recuperação (checkpoints) distribuídos orientados aos threads da aplicação. Esta facilidade não é atualmente oferecida pelos ambientes tradicionalmente utilizados para programação paralela e distribuída; mas é altamente desejável em aplicações paralelas que possuem um tempo razoavelmente alto de execução. Esta divisão em camadas provê grande portabilidade ao ambiente, uma vez que somente a camada básica precisa ser adaptada para a utilização do DECK em diferentes plataformas. É importante salientar ainda que a camada básica pode ser utilizada diretamente pela aplicação; os serviços da camada superior são inseridos na aplicação somente se necessários. Além disso, a organização em módulos facilita a alteração de um determinado recurso sem a necessidade de modificações em outros módulos. As seções a seguir apresentam as versões atualmente disponíveis do ambiente DECK. Em relação aos módulos de multiprogramação e sincronização, ambas as versões utilizam o pacote PTHreads como implementação básica. Nesse sentido, o principal ponto que distingue uma implementação de outra diz respeito ao módulo de comunicação, que utiliza diferentes protocolos, dependendo da rede de comunicação disponível no cluster. 3.2.1 DECK em redes Ethernet A primeira implementação do ambiente DECK foi realizada sobre a rede Fast Ethernet, utilizando o protocolo TCP/IP (sockets Unix) para realizar a comunicação. O objetivo dessa versão foi o de validar a estrutura modular do ambiente e definir uma interface básica de programação para permitir o desenvolvimento da camada de serviços. Para tanto, foram desenvolvidos os módulos de comunicação, sincronização, multiprogramação e o serviço de nomes. Os resultados obtidos com essa implementação foram bastante satisfatórios, considerando-se que o protocolo TCP/IP não é adequado para programação paralela. Dessa forma, tentou-se minimizar a sobrecarga introduzida por mensagens de confirmação do TCP adotando-se sockets do tipo datagrama para a comunicação. Os resultados obtidos para latência (a) e largura de banda (b) sobre a rede Fast Ethernet são ilustrados na Figura 3.3. A latência de comunicação do PVM e das implementações de MPI para mensagens grandes (acima de 2 KB) é bastante próxima à latência apresentada pelo DECK. Para mensagens de tamanho menor (até 1 KB aproximadamente), esses ambientes apresentam sobrecargas bastante significativas, com uma pequena vantagem para o LAM. Para mensagens de 1 byte, DECK apresentou uma latência de 162 µs, contra 199 µs do LAM, 267 µs do MPICH e 289 µs do PVM, o que representa um ganho de 18 %, 39 % e 44 %, respectivamente. A largura de banda apresentada é um reflexo direto da latência: para mensagens pequenas, DECK apresenta um ganho de 13 %, 21 % e 27 % em relação ao LAM, MPICH e PVM, respectivamente. Entretanto, para mensagens maiores (32 KB por exemplo), o resultado é bastante próximo para todos os ambientes (cerca de 8 MB), com uma pequena vantagem para o PVM, que atingiu 9 MB. Essa vantagem deve-se principalmente aos mecanismos empregados para o gerenciamento de buffers de comunicação e à fragmentação de mensagens. Para mensagens a partir de 1 KB, DECK apresenta uma queda na taxa de 23 Latência − Fast Ethernet (nodos SMP) Largura de banda − Fast Ethernet (nodos SMP) 1000 16M 8M tempo (us) largura de banda (bytes/s) 4M 100 2M 1M 512K 256K 128K 64K 32K DECK LAM 6.1 MPICH 1.1.2 PVM 3.4 DECK LAM 6.1 MPICH 1.1.2 PVM 3.4 16K 8K 1 2 4 8 16 32 64 128 256 512 tamanho da mensagem (bytes) (a) 1K 2K 4K 4 8 16 32 64 128 256 512 1K 2K tamanho da mensagem (bytes) 4K 8K 16K 32K (b) Figura 3.3: Latência e largura de banda para a rede Fast Ethernet. transmissão, o que é reflexo direto do aumento no tempo de latência para mensagens a partir desse tamanho. 3.2.2 DECK em redes Myrinet Para a implementação do DECK sobre a rede Myrinet (BARRETO et al., 2000) foi utilizada a biblioteca BIP, devido principalmente ao desempenho e a API simples. O BIP provê primitivas básicas de comunicação ponto-a-ponto (send() e recv() assíncronos) para a rede Myrinet, com a restrição de que a troca de mensagens longas (large messages na terminologia do BIP) deve seguir uma semântica síncrona (rendez-vous), o que significa que uma primitiva recv() deve vir sempre antes da primitiva send() correspondente. Para tal, o DECK emprega um protocolo de controle de fluxo (handshaking), onde o emissor envia uma mensagem pequena de requisição antes de realizar a transmissão da mensagem longa. Essa mensagem de requisição é tratada, no lado receptor, por um thread específico, denominado rv-daemon, criado quando da inicialização da aplicação. Na avaliação sobre a rede Myrinet, a implementação do DECK utiliza primitivas de comunicação orientadas às filas de recebimento (tags) do protocolo BIP. Por questões de comparação, foi utilizada a implementação MPICH-BIP (WESTRELIN, 1999) e o protocolo BIP diretamente, com o intuito de quantificar a sobrecarga imposta pelos dois primeiros ambientes sobre o protocolo BIP. Uma consideração importante sobre o DECK é que o thread adicional para tratamento de mensagens longas pode causar um impacto grande no desempenho das operações de comunicação Os resultados obtidos para latência (a) e largura de banda (b) sobre a rede Myrinet são ilustrados na Figura 3.4. A latência apresentada pelo DECK é menor do que a latência apresentada pelo MPICH, para mensagens com tamanho de até 1 KB. A partir desse tamanho, a influência do protocolo de controle de fluxo afeta em maior escala o desempenho do DECK em relação ao MPICH. Entretanto, para mensagens de 1 byte, DECK apresentou uma latência de apenas 8.2 µs contra 12.8 µs do MPICH. Se comparada com a latência apresentada pelo BIP, em torno de 7.3 µs, a diferença entre DECK e MPICH é de cerca de 35 %, o que reflete um ganho razoável do DECK sobre o MPICH. O resultado obtido para a largura de banda é reflexo, novamente neste caso, da latência de comunicação imposta pelos ambientes. Para mensagens de até 1 KB, DECK 24 Latência − Myrinet Largura de banda − Myrinet 120M 100M 100 tempo (us) largura de banda (bytes/s) 80M 40M 20M 10 BIP 0.99e DECK−BIP MPICH−BIP 1 2 4 8 16 32 64 128 256 tamanho da mensagem (bytes) (a) 512 10M 1K 2K 256 BIP 0.99e DECK−BIP MPICH−BIP 512 1K 2K 4K 8K 16K 32K 64K 128K 256K 512K 1024K tamanho da mensagem (bytes) (b) Figura 3.4: Latência e largura de banda para a rede Myrinet. apresentou uma largura de banda de aproximadamente 13 MB, enquanto que o MPICH apresentou um resultado de 11 MB. Isso representa um ganho de cerca de 10 % para esse tamanho de mensagem. A partir desse tamanho, a largura de banda obtida pelo DECK diminui bastante, ficando razoavelmente longe dos valores obtidos pelo MPICH e o próprio BIP, respectivamente 80 MB, 100 MB e 107 MB para mensagens com tamanho de 1 MB. Embora a latência de comunicação do DECK não apresente a mesma porcentagem de variação, a largura de banda é influenciada pela implementação não-otimizada do protocolo de controle de fluxo. É importante salientar que, para a obtenção dos resultados sobre o protocolo BIP, foram tomadas duas medições: a primeira medição não implementa nenhum tipo de controle de envio e recebimento de mensagens grandes, o que causa, em algumas execuções, erros de controle de fluxo no protocolo, fazendo com que o mesmo falhe. A segunda versão utiliza uma primitiva usleep() para forçar um pequeno atraso (delay) no processo emissor, a fim de que o receptor possa disponibilizar um buffer de recebimento. Em função desse cenário, os gráficos para o protocolo BIP apresentados na Figura 3.4 consideram para a latência os resultados da primeira versão e para largura de banda os resultados da segunda versão. Essas restrições impostas pelo protocolo BIP obrigam ambientes de programação de mais alto nível a implementar algum tipo de protocolo para tratamento de mensagens grandes, tais como os protocolos oferecidos pelo MPICH e o DECK. Os resultados apresentados na Figura 3.4 evidenciam que a implementação de tal protocolo no DECK precisa ser revista e otimizada, para permitir uma largura de banda mais próxima à apresentada pelo MPICH e o próprio BIP. Atualmente, o grupo trabalha também em uma implementação do DECK sobre o protocolo GM (1999). 3.2.3 DECK em redes SCI A implementação do DECK para a rede SCI (OLIVEIRA, 2001; OLIVEIRA et al., 2001) utiliza a interface de programação SISCI — Software Infrastructure for SCI. Essa API é uma especificação de primitivas padrão para a programação em redes SCI, baseadas em memória compartilhada. Essa especificação foi proposta por um comitê composto por representantes industriais e acadêmicos. Uma implementação da API SISCI está disponível no SSP (Scali Software Platform), um pacote de software distri- 25 90 80 bandwidth (bytes/s) 70 60 50 40 30 20 10 256 DECK−SCI ScaMPI 512 1K 2K 4K 8K 16K 32K 64K 128K 256K 512K 1M message size (bytes) Figura 3.5: Largura de banda do DECK e ScaMPI na rede SCI. buído com o Scali Wulfkits (SCALI HOMEPAGE—SCALABLE LINUX SYSTEMS— AFFORDABLE SUPERCOMPUTING, 2000). Três protocolos de comunicação foram desenvolvidos para a implementação do DECK sobre SCI, com o objetivo de garantir baixa latência e a mínima sobrecarga possível para troca de mensagens pequenas, bem como alta largura de banda para mensagens maiores. Um protocolo específico é encarregado da troca de mensagens pequenas, garantindo baixa latência através da combinação de comunicação e sinalização dentro do mesmo pacote SCI; enquanto que a alta largura de banda é atingida graças a um protocolo de comunicação que dispensa cópias intermediárias de mensagens (zero-copy protocol). A Figura 3.5 apresenta uma avaliação de desempenho do DECK/SCI e do ScaMPI, a implementação MPI fornecida pela Scali (HUSE et al., 1999). O gráfico ilustra que o desempenho do DECK/SCI é claramente melhor do que o do ScaMPI. É possível, com o DECK/SCI, atingir uma latência mínima de 4.66 µs e uma largura de banda máxima de cerca de 84 Mbytes/s. Esse resultados estão bem próximos dos resultados teóricos da rede SCI. Em contraste ao DECK/BIP, DECK/SCI é mais eficiente do que o MPI para qualquer tamanho de mensagem, devido principalmente ao fato de que nenhum thread adicional é empregado para o controle de fluxo. 26 4 O MODELO DE INTEGRAÇÃO: MULTICLUSTER O objetivo do projeto MultiCluster, desenvolvido no Instituto de Informática da UFRGS, é a definição de um modelo de integração de clusters independentes e heterogêneos em relação ao paradigma de comunicação, a fim de formar uma arquitetura integrada que possa ser utilizada através de uma única interface de programação. Dentro desse modelo, o usuário é capaz de configurar a arquitetura de acordo com as necessidades de suas aplicações e, posteriormente, decidir a melhor localização para as tarefas componentes da aplicação, de acordo com aspectos de comunicação e desempenho. No desenvolvimento deste Projeto de Pesquisa, foram definidas as características primordiais do modelo, complementando um trabalho iniciado no final de 1999 (BARRETO; ÁVILA; NAVAUX, 2000). Essas características têm a função de nortear os passos atuais e futuros no projeto, permitindo um planejamento a médio e longo prazo de atividades de pesquisa para os alunos de graduação e pós-graduação vinculados ao grupo. O modelo MultiCluster pode ser abordado em dois níveis: aspectos relacionados ao hardware e aspectos relacionados à organização do software. 4.1 Aspectos de hardware O modelo de integração assume, inicialmente, a existência de duas arquiteturas de clusters: a primeira arquitetura corresponde a um cluster onde os nós estão conectados pela rede de comunicação Myrinet, e a segunda arquitetura corresponde a um cluster que emprega a rede de comunicação SCI para a conexão dos nós. A escolha inicial dessas duas tecnologias se deve ao fato de serem as duas mais utilizadas em clusters, depois da Ethernet (BAKER, 2000). A Figura 4.1 ilustra detalhes estruturais dessas arquiteturas. A rede Myrinet é normalmente utilizada em conjunto com switches específicos, pois a topologia lógica é em barramento. Já no caso da SCI, o uso de switches é dispensado em clusters de pequeno porte (até 8 nós) pois a topologia natural é em anel. Em todo caso, switches e também placas com conexões adicionais estão disponíveis para a configuração de clusters maiores (no caso das placas, para topologia torus). Esses clusters correspondem a duas arquiteturas atualmente disponíveis no Instituto de Informática da UFRGS, sendo o primeiro (à esquerda na figura) um cluster composto por 4 nós Dual Pentium Pro de 200 MHz e o segundo composto por 4 nós Dual Pentium III de 500 MHz. Esses dois clusters foram diretamente utilizados nos testes relativos à definição do modelo MultiCluster, por isso são aqui apresentados como exemplo. Adicionalmente a esses dois, o Instituto também conta com um cluster de 16 nós Pentium III 1GHz conectados por redes Fast Ethernet e Myrinet, adquirido através de um projeto FINEP, e outro cluster de 20 nós Pentium III 1GHz conectados por Fast Ethernet, 27 Myrinet cluster Myrinet switch SCI cluster Fast Ethernet or Myrinet link Figura 4.1: Interconexão entre clusters Myrinet e SCI. adquirido no âmbito do convênio LabTeC UFRGS/Dell1 . A escolha da rede usada para a conexão dos clusters depende basicamente das necessidades das aplicações. É possível utilizar a rede Fast Ethernet ao invés da Myrinet para esse fim; entretanto, a escolha pela Myrinet deve-se a dois motivos: ela pode minimizar as perdas relacionadas com a comunicação entre os clusters, uma vez que provê melhor taxa de transmissão e não é necessária a implementação de um terceiro protocolo de comunicação, a ser utilizado na rede Fast Ethernet. É neste contexto que aparece a primeira característica do modelo MultiCluster: em cada cluster participante do sistema, é necessário que exista um nó que implemente as funções relacionadas com a comunicação com outros clusters. Esse nó deve conter duas ou mais interfaces de rede e age similarmente a um gateway de uma rede local, realizando o roteamento da comunicação entre as máquinas que compõem cada cluster (nas seções seguintes serão apresentadas algumas exigências em relação ao software que executa no nó gateway). Um aspecto importante do modelo MultiCluster é que o mesmo não considera questões relacionadas a custo e escalabilidade. Diferentemente das plataformas de grids, onde essas questões são extremamente pertinentes, o modelo MultiCluster aborda uma situação prática onde uma universidade ou empresa dispõe de pelo menos dois clusters e deseja utilizá-los conjuntamente para atividades de ensino, pesquisa ou desenvolvimento comercial e industrial. Nesse cenário, questões relacionadas com transparência, eficiência e confiabilidade são prioritárias. 4.2 Aspectos de software Em termos de software, o modelo MultiCluster estabelece algumas premissas que determinam como os clusters podem ser integrados e posteriormente utilizados. Essas premissas constituem a base para o funcionamento do modelo, sendo descritas a seguir. 4.2.1 Nós lógicos e físicos A primeira premissa diz respeito às diferentes visões da arquitetura integrada. Um nó físico corresponde a uma máquina pertecente a um determinado cluster e somente interessa para questões de organização física da arquitetura. Um nó lógico corresponde a um recurso computacional do ponto de vista da apli1 http://www.inf.ufrgs.br/LabTeC 28 // máquina virtual @virtual_machine: verissimo, quintana, euclides, dionelio, scliar, ostermann, meyer, luft // sub-redes @comm_contexts: myrinet 0 sci 1 // nós lógicos @logical_nodes: node 0:0 machines verissimo node 1:0 machines quintana node 2:0 machines euclides node 3:0 machines dionelio node 4:1 machines scliar, luft node 5:1 machines ostermann, meyer // nós gateway @gateways: quintana, scliar Figura 4.2: Arquivo descritor para uma aplicação MultiCluster. cação, sendo que para clusters baseados em comunicação por troca de mensagens (caso da Myrinet), cada nó lógico corresponde a um nó físico; e para clusters baseados em comunicação por memória distribuída (caso do SCI), cada nó lógico pode corresponder a mais de um nó físico. A determinação dos nós lógicos dentro da arquitetura fica a cargo do programador, através da especificação de um arquivo descritor. Nesse arquivo, exemplificado na Figura 4.2, o usuário deve determinar quais as máquinas que compõem a arquitetura integrada, quais os contextos, ou sub-redes, de comunicação que serão utilizados e quais máquinas (nós lógicos) pertencem a cada contexto. Um contexto de comunicação corresponde ao conjunto de nós capazes de se comunicar através de uma determinada rede. Assim, a distinção entre os nós lógicos da rede Myrinet e da rede SCI é feita pelo identificador de cada nó e pelo contexto de comunicação ao qual o nó pertence. No exemplo da Figura 4.2, “node 1:0” significa o segundo nó da sub-rede 0 (que é a Myrinet, no exemplo), enquanto que “node 4:1” significa o primeiro nó da sub-rede 1 (que é a rede SCI). É importante salientar que a numeração dos nós é seqüencial, independentemente da sub-rede à qual o mesmo pertence. No exemplo, existem 6 nós lógicos, numerados de 0 a 5. Esse esquema de numeração, embora complexo, é totalmente processado pelo ambiente de maneira transparente ao programador: o usuário somente precisa saber quantos nós lógicos existem na arquitetura e quais os seus respectivos identificadores e contextos. 4.2.2 Comunicação As questões relativas a comunicação são tratadas de acordo com a visão que o programador tem da arquitetura, ou seja, de acordo com a existência dos nós lógicos. Dessa forma, existe a distinção entre a comunicação interna a um nó lógico e externa a 29 um nó lógico. Dentro de um nó lógico, a comunicação é realizada através de memória compartilhada. Se o nó lógico corresponde a uma máquina pertencente ao cluster conectado pela rede Myrinet, é possível estabelecer comunicação entre processos ou threads executando nos diferentes processadores através de memória comum a todos esses processadores. Se o nó lógico corresponde a um conjunto de máquinas pertencentes ao cluster conectado pela rede SCI, é possível a criação de um espaço de endereçamento global através do mapeamento de porções individuais de memória de cada nó; mantendo, assim, a comunicação através de memória compartilhada. A comunicação entre nós lógicos distintos é obrigatoriamente realizada por primitivas de troca de mensagens, uma vez que esses nós lógicos podem pertencer a clusters diferentes. Quando a comunicação dá-se entre nós lógicos dentro de um mesmo contexto de comunicação, é possível otimizar essa comunicação através da utilização de um único protocolo de comunicação para a rede representada pelo contexto — por exemplo, pode-se utilizar o protocolo BIP para a rede Myrinet. Quando a comunicação envolve nós lógicos pertencentes a diferentes contextos, então é preciso realizar o roteamento de mensagens através do nó que comporta-se como gateway. Nesse caso, pode ser necessária a troca do protocolo de comunicação utilizado pelo gateway, uma vez que ele pode receber mensagens pela rede Myrinet e precisar mandá-las ao outro cluster através de uma rede Fast Ethernet, por exemplo. Estudos têm sido realizados pelos pesquisadores do projeto em relação aos problemas relacionados com a integração de diferentes arquiteturas e aos aspectos de comunicação entre as mesmas. A princípio, a escolha pela rede Myrinet justifica-se, conforme já mencionado, pela possibilidade de se diminuir as perdas com a comunicação entre clusters e pela eliminação de um terceiro protocolo de comunicação dentro do modelo. Entretanto, não se pode ignorar o fato de que a maioria dos clusters utilizados atualmente possui uma rede padrão Ethernet para a conexão de seus nós (geralmente utilizada como rede para aspectos administrativos); e que a mesma pode ser usada para a comunicação entre clusters. 4.2.3 Heterogeneidade Embora seja um problema menos freqüente, a heterogeneidade pode aparecer em razão da flexibilidade do modelo no que diz respeito ao hardware empregado. É possível pensar na integração de clusters com arquitetura Intel e SPARC ou ainda na integração de um cluster com uma máquina paralela dedicada. Nesses contextos, deve-se considerar a existência de diferentes formatos para representação de dados e o modelo de integração deve prover subsídios para que possa pensar em uma maneira de solucionar essa questão. Uma possível solução é acrescentar informações, no arquivo descritor do modelo, em relação ao formato de dados ou à arquitetura empregada em cada nó lógico ou em cada contexto de comunicação. Dessa forma, o ambiente que implementar o modelo poderá prover soluções do tipo XDR ou embutir em cada mensagem informações a respeito da arquitetura do emissor das mensagens. Independentemente da solução adotada, é importante salientar que o máximo de transparência possível é esperada pelo usuário de tal arquitetura. 30 4.3 Protocolo de comunicação entre clusters A fim de prover suporte ao modelo MultiCluster, um protocolo de comunicação entre clusters, denominado Remote Communication Daemon, é oferecido como uma extensão ao módulo de comunicação do DECK. No modelo MultiCluster, como em cada cluster integrado deve existir um nó com funcionalidade de “gateway”, o mesmo foi escolhido para servir de hospedeiro para a execução do protocolo RCD. Esse RCD segue a mesma semântica do servidor de nomes: possui uma caixa postal (mailbox) conhecida por todos os demais nós pertencentes ao cluster. O RCD atua sob demanda em duas situações específicas: quando um nome definido remotamente (isto é, em outro cluster) precisa ser encontrado, e quando uma mensagem precisa ser transmitida para caixas postais remotas. Quando uma pritimiva DECK não consegue descobrir um nome consultando o servidor de nomes local, ela interage com o RCD, a fim de que o mesmo repasse a consulta para outros RCDs que executam nos demais clusters pertencentes à plataforma integrada. No segundo caso, quando uma primitiva DECK precisa enviar uma mensagem para uma caixa postal remota, ela interage com o RCD para que o mesmo repasse a mensagem para o RCD do cluster onde encontra-se a caixa postal destinatária da mensagem. É importante salientar que a comunicação entre threads em diferentes nós lógicos, bem como em diferentes clusters, é sempre realizada via troca de mensagens. Mesmo no caso de clusters SCI, deve existir pelo menos uma caixa postal para permitir a comunicação com o RCD e, eventualmente, receber mensagens. O uso de um espaço de endereçamento global para o estabelecimento de comunicação entre clusters não está sendo considerado até o momento — embora suportado pelo SCI. 4.3.1 Avaliação de um protótipo do RCD A fim de permitir uma avaliação sobre o modelo proposto para o RCD, um protótipo foi implementado como um serviço da biblioteca DECK. Foram utilizadas duas partições do cluster Myrinet citados anteriormente. Cada partição é composta de 2 nós, onde um atua como gateway. O teste foi realizado dessa forma para permitir uma avaliação da comunicação inter-cluster através da Myrinet, visto que, atualmente, não existe uma versão do DECK capaz de se comunicar por duas tecnologias diferentes ao mesmo tempo. Como o objetivo é avaliar o desempenho do roteamento, o fato de os nós estarem no mesmo contexto não afeta os resultados obtidos. O protótipo implementado consiste de um serviço de simples roteamento das mensagens recebidas pelo RCD de um cluster para o RCD de outro cluster. Cada RCD declara uma mail box local, a qual será usada para o recebimento das mensagens, e, ao mesmo tempo, obtém referências para as mail boxes dos demais RCDs participantes. Assim, o trajeto de uma mensagem de um cluster para outro segue obrigatoriamente 3 etapas, conforme ilustra a Figura 4.3: 1. o nó originário da mensagem original a envia ao RCD do seu cluster, RCD #1; 2. o RCD #1 repassa a mensagem ao RCD do cluster que contém o nó destino — RCD #2; 3. o RCD #2 envia, finalmente, a mensagem ao nó destinatário. Para a devida integração desse serviço no ambiente DECK, seria necessária uma pequena adaptação nesse último, com a finalidade de verificar o destinatário de uma 31 RCD #1 RCD #2 (2) (1) (3) no originario no destinatario Figura 4.3: Trajeto da mensagem enviada de um cluster a outro através do RCD 110 8 Larg. banda RCD 7 90 6 Larg. banda (MB/s) Latência (us) Latência RCD 100 80 70 60 5 4 3 50 2 40 1 30 0 1 2 4 8 16 32 Tam. mensagem (bytes) 64 128 256 1 2 4 8 16 32 64 128 256 512 1K 2K 4K 8K 16K Tam. mensagem (bytes) Figura 4.4: Latência e largura de banda obtidas com o protótipo do RCD mensagem a ser enviada; se o destinatário pertence ao contexto de comunicação local, a mensagem é enviada diretamente, caso contrário ela é enviada ao RCD que por sua vez encarrega-se do roteamento. No caso da avaliação aqui apresentada, as mensagens foram explicitamente enviadas ao RCD. Os testes realizados consistem nas medidas de desempenho clássicas utilizadas em clusters, nomimalmente a latência mínima de comunicação e a largura de banda sustentada máxima para troca de dados. Os gráficos apresentando os valores obtidos são mostrados na Figura 4.4. Como esperado, observa-se um atraso no envio das mensagens, em comparação a um envio “local” (conforme apresentado no capítulo anterior). Adicionalmente, no gráfico relativo à largura de banda, nota-se uma mudança de comportamento da curva, a partir do tamanho 1K. Essa mudança é devido à troca de protocolo de comunicação, no DECK-BIP, justamente nesse tamanho de mensagem. Considera-se que o programador tem consciência da natureza fracamente acoplada da união dos clusters, e que a aplicação paralela deve ser devidamente adaptada para essa situação. Analogamente, assim como os algoritmos paralelos existentes no início dos anos 90 tiveram que ser adaptados para serem utilizados em ambientes de clusters (BAKER, 2000), devido ao menor desempenho da comunicação, acredita-se que os algoritmos podem também ser adaptados para tolerar a maior latência de comunicação entre clusters acoplados por um modelo como o MultiCluster. Julga-se que as possíveis vantagens obtidas pela união de recursos computacionais eventualmente disponíveis, mas a princípio isolados entre si, supera e compensa os problemas advindos da comunicação. 32 4.4 Considerações adicionais sobre o modelo O modelo apresentado nesse Projeto de Pesquisa está em constante desenvolvimento pelos pesquisadores do projeto MultiCluster. Atualmente, dois alunos de Doutorado, dois de Mestrado e diversos bolsistas de Iniciação Científica trabalham em temas ligados ao modelo e na adaptação do ambiente DECK para que o mesmo possa implementar as funcionalidades previstas dentro do modelo. A idéia básica é fornecer ao programador uma interface de programação que encapsule todos os aspectos relativos à integração dos clusters e que forneça-lhe todas as primitivas e funcionalidades necessárias para que o mesmo possa determinar como desejar configurar a arquitetura e posteriormente distribuir suas tarefas de cálculo de acordo com as necessidades de comunicação de cada uma, explorando a disponibilidade de memória compartilhada e troca de mensagens. Nesse sentido, a idéia é estender o ambiente DECK com novos módulos que implementem as funcionalidades previstas no modelo. Um módulo de comunicação entre clusters, que suporte e implemente o protocolo RCD é uma das extensões. Adicionalmente, o processamento do arquivo descritor e a correta configuração e inicialização do ambiente de acordo com esse arquivo é outra extensão prevista; bem como o gerenciamento de toda a arquitetura integrada para fins de balanceamento de carga e tolerância a falhas e a determinação de métricas para medir desempenho nessa arquitetura correspondem a outras extensões. 33 5 CONCLUSÕES A exploração de arquiteturas de clusters firmou-se ao longo dos anos 90 como uma revolução na área de computação paralela, provando que todos os benefícios trazidos por esse tipo de arqutiterua são perfeitamente alcançáveis e reais. Um reflexo desse panorama é o contexto atual, onde se pode encontrar clusters compostos por algumas centenas de nós processadores, cujos índices de desempenhos são bastante próximos ou até mesmo ultrapassam os índices providos por arquiteturas dedicadas. Aspectos relativos a novos protocolos de comunicação, controle de fluxo em transmissões de grandes quantidades de dados, gerenciamento de clusters compostos por muitos nós, escalonamento, balanceamento de carga e tolerância a falhas são praticamente dominados hoje em dia. Muitos grupos de pesquisa ao redor do mundo já publicaram e defenderam suas propostas no que concerne a esse tipo de arquitetura. O estabelecimento de plataformas baseadas em grids parece ser uma evolução lógica dessa panorama e a concretização de idéias surgidas ainda na metade dos anos 80 e que somente agora, com a disponibilidade de tecnologias de rede e ambientes de programação eficientes e robustos, parece ser possível. O projeto MultiCluster segue uma evolução parecida: com a finalização das atividades do projeto DPC++, o qual resultou em um ambiente de programação orientada a objetos distribuídos, que foi alvo de estudo de mestrandos e doutorando do Instituto de Informática da UFRGS, bem como assunto de algumas dezenas de artigos publicados; começou-se a exploração de computação baseada em clusters. Em 1997, o II/UFRGS adquiriu sua primeira plataforma de cluster, com tecnologia Myrinet. Em 1999, a segunda arquitetura (com tecnologia SCI) foi adquirida. Nesse período, a cooperação com pesquisadores da França e da Alemanha contribui para o entendimento desse novo paradigma para a construção de ambientes de programação, resultando em três versões do ambiente DECK, descritas ao longo desse projeto. Logicamente, a continuação dessa evolução seria a integração desses clusters com outros disponíveis no Brasil ou em outro lugar qualquer. Entretanto, busca-se em um primeiro momento a exploração de um aspecto um pouco menor, mas com igual importância no meio científico: a integração de diferentes paradigmas de comunicação e o fornecimento de desempenho e confiabilidade dentro desse novo cenário. Até o presente momento, nenhuma iniciativa específica com esse propósito foi encontrada, visto que a grande parte da comunidade científica está voltada para o estabelecimento de grandes plataformas computacionais baseadas em grids, sendo em parte financiadas e apoiadas por governos e indústrias com o mesmo objetivo. Entendemos que o estabelecimento de grids é algo extremamente relevante e realizável, daqui a pouco tempo, visto a grande quantidade de propostas já existentes. O modelo MultiCluster nada mais é que um subconjunto de grids, sua arquitetura modular- 34 pode ser facilmente estendida ou integrada a outros ambientes para permitir que o modelo seja usado em clusters geograficamente distantes, caracterizando uma espécie de grid. O trabalho apresentado nesse Projeto de Pesquisa corresponde aos estudos iniciais acerca do modelo, com o estabelecimento de aspectos básicos da funcionalidade e estrutura do mesmo. Adicionalmente, as diferentes versões do ambiente DECK foram descritas, com o objetivo de mostrar quais as direções e decisões que têm norteado o projeto. 35 REFERÊNCIAS BAKER, M. (Ed.). Cluster Computing White Paper. [S.l.]: IEEE Task Force in Cluster Computing, 2000. Available at http://www.dcs.port.ac.uk/∼mab/tfcc/WhitePaper/finalpaper.pdf. Final Release, Version 2.0. BARRETO, M.; ÁVILA, R.; CASSALI, R.; CARISSIMI, A.; NAVAUX, P. Implementation of the DECK Environment with BIP. In: MYRINET USER GROUP CONFERENCE, 1., 2000, Lyon, France. Proceedings. . . Lyon: INRIA Rocquencourt, 2000. p.82–88. BARRETO, M.; ÁVILA, R.; NAVAUX, P. The MultiCluster Model to the Integrated Use of Multiple Workstation Clusters. In: WORKSHOP ON PERSONAL COMPUTER BASED NETWORKS OF WORKSTATIONS, 3., 2000, Cancun. Proceedings. . . Berlin: Springer-Verlag, 2000. p.71–80. (Lecture Notes in Computer Science, v.1800). BARRETO, M. E. DECK: Um Ambiente para Programação Paralela em Agregados de Multiprocessadores. 2000. Dissertação (Mestrado em Ciência da Computação) — Instituto de Informática, Universidade Federal do Rio Grande do Sul, Porto Alegre. BARRETO, M. E.; ÁVILA, R. B.; OLIVEIRA, F. A. D. de; CASSALI, R.; NAVAUX, P. O. A. DECK: An Environment for Parallel Programming on Clusters of Multiprocessors. In: SYMPOSIUM ON COMPUTER ARCHITECTURES AND HIGH PERFORMANCE COMPUTING, 12., 2000, São Pedro, SP. Proceedings. . . São Carlos: UFSCAR, 2000. p.321–329. BARRETO, M. E.; NAVAUX, P. O. A.; RIVIÈRE, M. P. DECK: a New Model for a Distributed Executive Kernel Integrating Communication and Multithreading for Support of Distributed Object Oriented Application with Fault Tolerance Support. In: CONGRESO ARGENTINO DE CIENCIAS DE LA COMPUTACIÓN, 4., 1998, Neuquén, Argentina. Trabajos Seleccionados. . . Neuquén: Universidad Nacional del Comahue, 1998. v.2, p.623–637. BODEN, N. et al. Myrinet: a Gigabit-per-Second Local-Area Network. IEEE Micro, Los Alamitos, v.15, n.1, p.29–36, Feb. 1995. BUYYA, R. (Ed.). High Performance Cluster Computing: Architectures and Systems. Upper Saddle River: Prentice Hall PTR, 1999. 849p. BUYYA, R. (Ed.). High Performance Cluster Computing: Programming and Applications. Upper Saddle River: Prentice Hall PTR, 1999. 664p. 36 CASANOVA, H.; DONGARRA, J. NetSolve: a Network Server for Solving Computational Science Problems. [S.l.]: University of Tennessee, 1995. (TR-CS-95-313). FOSTER, I. T.; KESSELMAN, C. Globus: A Metacomputing Infrastucture Toolkit. Disponível por WWW em http://www.globus.org (dez. 1998). FOSTER, I. T.; KESSELMAN, C. (Ed.). The Grid: Blueprint for a New Computing Infrastructure. San Francisco: Morgan Kaufmann, 1999. 677p. GM. Disponível por WWW em http://www.myri.com/GM (dez. 1999). GRIMSHAW, A. S. et al. Legion: an Operating System for Wide-Area Computing. IEEE Micro, [S.l.], v.32, n.5, p.29–37, May 1999. HELLWAGNER, H.; REINEFELD, A. (Ed.). SCI: Scalable Coherent Interface: Architecture and Software for High-Performance Compute Clusters. Berlin: Springer-Verlag, 1999. 490p. (Lecture Notes in Computer Science, v.1734). HUSE, L. P.; OMANG, K.; BUGGE, H.; RY, H.; HAUGSDAL, A. T.; RUSTAD, E. ScaMPI—Design and Implementation. In: HELLWAGNER, H.; REINEFELD, A. (Ed.). SCI: Scalable Coherent Interface: Architecture and Software for High-Performance Compute Clusters. Berlin: Springer-Verlag, 1999. p.249–261. (Lecture Notes in Computer Science, v.1734). INSTITUTE OF ELECTRICAL AND ELECTRONIC ENGINEERS. IEEE Standard for Scalable Coherent Interface (SCI). New York: [s.n.], 1992. IEEE 1596-1992. OLIVEIRA, F. A. D. de. Uma Biblioteca para Programação Paralela por Troca de Mensagens de Clusters Baseados na Tecnologia SCI. 2001. Dissertação (Mestrado em Ciência da Computação) — Instituto de Informática, Universidade Federal do Rio Grande do Sul, Porto Alegre. OLIVEIRA, F. A. D. de; ÁVILA, R. B.; BARRETO, M. E.; NAVAUX, P. O. A.; DE ROSE, C. DECK-SCI: High-Performance Communication and Multithreading for SCI Clusters. In: IEEE INTERNATIONAL CONFERENCE ON CLUSTER COMPUTING, 3., 2001, Newport Beach, CA. Proceedings. . . Los Alamitos: CA: IEEE Computer Society, 2001. p.372–379. SCALI Homepage—Scalable Linux Systems—Affordable Supercomputing. Disponível por WWW em http://www.scali.com (abr. 2000). STERLING, T. L. Beowulf Cluster Computing with Linux. Cambridge: MIT Press, 2002. STERLING, T. L.; SALMON, J.; BECKER, D. J.; SAVARESE, D. F. How to Build a Beowulf: a Guide to the Implementation and Application of PC Clusters. Cambridge: MIT, 1999. 239p. WEBFLOW: Web based Metacomputing. <http://osprey7.npac.syr.edu>. Acesso em: mar. 2003. Disponível em: WESTRELIN, R. Une Implémentation de MPI Pour Réseaux Locaux à Très Haut Débit: MPI-BIP. In: RENCONTRES FRANCOPHONES DU PARALLÉLISME), 11., 1999, Rennes. Proceedings. . . Lyon: INRIA, 1999.