Desenvolvimento De Aplicações Grid: Uma Abordagem Prática . - UFRGS

Transcription

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SULINSTITUTO DE INFORMÁTICAPROGRAMA DE PÓS-GRADUAÇÃO EM COMPUTAÇÃOLUCAS MELLO SCHNORRDesenvolvimento de Aplicações Grid: umaAbordagem Prática orientada aMonitoramentoTrabalho Individual IIITI-1245Prof. Dr. Philippe Olivier Alexandre NavauxOrientadorPorto Alegre, Julho de 2006

“I believe that at every level of society - familial, tribal, national and international the key to a happier and more successful world is the growth of compassion. Wedo not need to become religious, nor do we need to believe in an ideology. Allthat is necessary is for each of us to develop our good human qualities.”— T ENZIN G YATSO , 14 TH DALAI L AMA

SUMÁRIOLISTA DE ABREVIATURAS E SIGLAS . . . . . . . . . . . . . . . . . . . .4LISTA DE FIGURAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5LISTA DE TABELAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .617INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2 REVISÃO DE LITERATURA .2.1MPI-Rastro . . . . . . . . . .2.2JRastro . . . . . . . . . . . .2.3DIMVisual . . . . . . . . . .2.4Pajé . . . . . . . . . . . . . .2.5MPICH-G2 . . . . . . . . . .2.6ProActive . . . . . . . . . . .2.7Grid Application Toolkit . . .2.8Síntese do Capítulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99101213141416173 IMPLEMENTAÇÃO E MONITORAMENTO DAS APLICAÇÕES . . . .3.1Filtro de Mediana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.2Mandelbrot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1919224 ANÁLISE DO MONITORAMENTO . . . . . . . . . . . . . . . . . . . .4.1Descrição dos Ambientes . . . . . . . . . . . . . . . . . . . . . . . . . . .4.2Análise do Monitoramento . . . . . . . . . . . . . . . . . . . . . . . . . .2727305CONCLUSÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .32REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33

LISTA DE ABREVIATURAS E SIGLASDIMVisualData Integration Model for VisualizationP2PPeer-to-PeerGMAGrid Monitoring ArchitectureMPIMessage-Passing InterfaceRMIRemote Method InvocationXMLExtensible Markup LanguageGATGrid Application ToolkitNTPNetwork Time ProtocolAPIApplication Program InterfaceP-GRADEParallel Grid Runtime and Application Development EnvironmentGRAMGrid Resource Allocation and ManagementDUROCDynamically-Updated Request Online CoallocatorMDSMonitoring and Directory ServiceJVMPIJava Virtual Machine Profiling InterfaceJVMTIJava Virtual Machine Tool InterfaceDECKDistributed Execution and Communication Environment

LISTA DE FIGURASFigura 2.1:Figura 2.2:Figura 2.3:Figura 2.4:Figura 2.5:Figura 2.6:Figura 3.1:Figura 3.2:Três fases do processo de monitoramento utilizando a biblioteca MPIRastro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Componentes da implementação do DIMVisual. . . . . . . . . . . .Tela de visualização do Pajé com uma aplicação ping-pong entre doisprocessos executando em diferentes máquinas. . . . . . . . . . . . .Lançamento de uma aplicação através do MPICH-G2, com Globus .Módulos do middleware ProActive e a sua relação com a aplicação .Camadas do Grid Application Toolkit: aplicação, GAT, serviço e núcleoFigura 3.7:Exemplo de ruído do tipo sal e pimenta em uma imagem. . . . . . . .Demonstração gráfica do funcionamento do algoritmo de filtro de mediana. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Dois tipos de distribuição da carga de trabalho do filtro de mediana. .Demonstração gráfica do funcionamento do algoritmo de filtro de mediana. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Cálculo paralelo do algoritmo de Mandelbrot . . . . . . . . . . . . .Classes criadas para implementação do cálculo do fractal de Mandelbrot. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Tela da aplicação Mandelbrot com ProActive. . . . . . . . . . . . . .Figura 4.1:Figura 4.2:Ambiente Grid com Globus, parte da GradeUFRGS . . . . . . . . .Ambiente Grid com ProActive . . . . . . . . . . . . . . . . . . . . .Figura 3.3:Figura 3.4:Figura 3.5:Figura 3.6:111213151617192021232425262829

LISTA DE TABELASTabela 4.1:Tabela 4.2:Tempos em milisegundos calculados através da aplicação ping naGradeUFRGS a partir da máquina carpa.inf.ufrgs.br . . . . 28Tempos em milisegundos calculados através da aplicação ping no ambiente ProActive Grid criado a partir da máquina carpa.inf.ufrgs.br 30

71INTRODUÇÃOA área de processamento paralelo tem evoluído rapidamente desde a década de 70. Nofim da década de 90 e início do século 21, houve um tremendo avanço no processamentoparalelo através da utilização de máquinas paralelas conhecidas como clusters. Esse tipode máquina tem como principais características a homogeneidade de seus nós de processamento e a existência de uma rede dedicada. Atualmente, existem clusters de mais demil nós de processamento.Durante a solidificação do conceito e utilização clusters começou a surgir outro tipode organização de máquina paralela, chamada Grid. Usualmente, essa nova organização é considerada como uma evolução de clusters para um ambiente mais distribuído ecomplexo. As principais características desse novo ambiente são heterogeneidade, altaslatências na comunicação entre os nós e o dinamismo das máquinas, podendo de uma horapara a outra se tornar indisponíveis (FOSTER; KESSELMAN, 2003; FOSTER; KESSELMAN; TUECKE, 2001).As características de ambientes Grid trazem junto de si uma gama de desafios para odesenvolvimento de aplicações paralelas. Grande parte desses desafios acontecem principalmente em como distribuir os dados a serem calculados entre máquinas que podemeventualmente deixar de fazer parte da aplicação, em como a aplicação deve se comportarquando necessita utilizar máquinas com configurações diferentes, entre outras. Grandeparte desses desafios deve ser resolvido através da construção de middlewares que dão aodesenvolvedor de aplicações paralelas uma visão mais simples do Grid. Atualmente, existem middlewares para o desenvolvimento de aplicações paralelas em ambientes Grid emvárias linguagens de programação, como o MPICH-G2 para a linguagem C, e o ProActivepara a linguagem Java.Seja qual for a linguagem de desenvolvimento de aplicações paralelas para ambienteGrid, uma etapa importante desse processo é o monitoramento da aplicação. Isso acontece principalmente por causa das características de heterogeneidade e dinamismo, ondeo monitoramento deve agir no sentido de informar, ou ao middleware ou à aplicação,métricas de monitoramento e de estados dos recursos envolvidos na computação. Essasinformações de monitoramento podem auxiliar na execução da aplicação para, por exemplo, melhorar a escolha de quais recursos a aplicação deve utilizar. Os dados monitoradosainda podem auxiliar a detecção de situações onde a aplicação deve se adaptar ou se recuperar de uma falha.Existem várias ferramentas para realizar o monitoramento de aplicações paralelas quepodem ser executadas em ambientes Grid. No trabalho individual anterior (SCHNORR;NAVAUX, 2005) foi feito um estudo para explorar as ferramentas de monitoramento edesenvolvimento para esse tipo de ambiente. A principal constatação deste trabalho éque existem várias ferramentas, cada uma com suas particularidades e vantagens. No

8entanto, nenhuma apresenta uma metodologia completa de como deve ser realizado omonitoramento. Entende-se por metodologia completa de monitoramento todo o processoque deve ser realizado para se obter de forma satisfatória os dados, analisá-los e ter umresultado dessa análise. Este processo deve ter definições da forma de realizar o registrodos eventos, como a sincronização deve ser realiza, a análise integrada dos dados e quemétricas são importantes nas diferentes situações, por exemplo. Algumas ferramentasde monitoramento voltadas para ambientes Grid são Ganglia (SACERDOTI; MASSIE;CULLER, 2003), Mercury (BALATON; GOMBAS, 2003) e Monalisa (NEWMAN et al.,2003).Ainda a respeito do trabalho individual anterior, foi feito um estudo a respeito dasferramentas de desenvolvimento de aplicações Grid. Neste estudo, as ferramentas maisproeminentes são GAT (ALLEN et al., 2005), MPICH-G2 (KARONIS; TOONEN; FOSTER, 2003) e ProActive (CAROMEL; KLAUSER; VAYSSIÈRE, 1998). Cada uma delasconta com estilos de programação diferentes. Ferramentas de monitoramento para essasbibliotecas de programação Grid existem, mas nenhuma delas tem a especificação de todoo processo de monitoramento. Por exemplo, MPICH-G2 tem a biblioteca MPE - Multiprocessing Environment, que pode ser utilizada, mas que não tem funções específicas paraambientes Grid.O trabalho individual proposto neste texto tem como objetivo a utilização de algumadas ferramentas para desenvolver e monitorar na prática aplicações Grid. Para fazer isto,está incluso no trabalho o desenvolvimento de aplicações paralelas voltadas para esse tipode ambiente. Duas aplicações paralelas foram escolhidas para este trabalho: filtro de mediana, desenvolvido com a implementação MPICH-G2 da especificação MPI; e o cálculode mandelbrot, desenvolvido com na linguagem Java com a biblioteca ProActive. O monitoramento dessas aplicações é feito com a MPI-Rastro, no caso do filtro de mediana, ecom a JRastro, no caso do ProActive.Este texto está organizado da seguinte forma. O capítulo 2 apresenta uma revisão deliteratura, descrevendo as ferramentas relacionadas a este trabalho. O capítulo 3 apresenta a implementação das aplicações, mostrando como foi feita a modelagem delas, quala técnica de paralelização usada em cada uma e como se deseja realizar o monitoramentodessas aplicações. O capítulo 4 apresenta os resultados obtidos, que consiste basicamentena descrição dos ambientes Grid criados e na análise dos problemas de monitoramentoencontrados. Por fim, no capítulo 5 são apresentadas as conclusões deste trabalho e trabalhos futuros.

92REVISÃO DE LITERATURAAtualmente, existem várias ferramentas projetadas para o monitoramento e análise docomportamento de aplicações paralelas. Essas ferramentas podem ser divididas por tipos,de acordo com as suas funcionalidades. Os tipos mais comuns são ferramentas de obtenção de dados, filtragem e análise/visualização. As ferramentas de obtenção de dadosnormalmente funcionam como bibliotecas de instrumentação para diferentes linguagensde programação. Essas bibliotecas, em algumas situações, trazem consigo uma gamade ferramentas para que o programador possa instrumentar sua aplicação de forma maisinterativa. Outro tipo de ferramenta de obtenção de dados são as bibliotecas de comunicação, utilizadas pelo programador, que já tem recursos de obtenção de dados a respeitoda execução da aplicação.As ferramentas de filtragem de dados atuam normalmente como intermediários entrea obtenção e a análise propriamente dita. Essas ferramentas tem como responsabilidadeprincipal o tratamento dos dados de forma que o processo de análise se torne mais objetivo. Os filtros utilizados por esse tipo de ferramenta são definidos pelo usuário e podemincluir, por exemplo, o cálculo de determinada média de um valor quantitativo, a reduçãodos dados, a criação de um dado novo baseado em outros dados obtidos, entre outros.O último tipo de ferramenta é o de análise/visualização. Ferramentas desse tipo tempor objetivo dar ao programador uma forma de se construir uma opinião a respeito docomportamento que a aplicação teve durante a sua execução. Nesta fase, o programador deve poder analisar se sua aplicação teve um baixo ou alto desempenho, e entenderquais as razões desses comportamentos. Existem diferentes abordagens e técnicas paraa construção de ferramentas de análise. Uma abordagem amplamente usada é a técnicade visualização, onde o programador analise os dados obtidos através de gráficos e telas.Outras formas de análise incluem relatórios textuais com dados estatísticos, por exemplo.Neste capítulo, serão abordados diferentes tipos de ferramentas de monitoramento:MPI-Rastro, uma biblioteca que pode ser integrada a implementações MPI para obtenção de dados da aplicação; JRastro, uma biblioteca para obtenção de dados de aplicaçõesJava; DIMVisual, uma ferramenta de filtragem utilizada para a integração das informações e Pajé, uma ferramenta para visualização e análise de dados. Além disso, serãoexplicadas três ferramentas para desenvolvimento de aplicações Grid e que são relevantesneste trabalho: MPICH-G2, GAT e ProActive.2.1 MPI-RastroMPI-Rastro é a composição de um conjunto de funções que utilizam a libRastro(SILVA; OLIVEIRA STEIN, 2002) para registrar o comportamento de uma aplicação paralela desenvolvida com alguma implementação da especificação MPI. Ela foi construída

10neste trabalho com o intuito de preencher lacunas que a biblioteca MPE () apresenta. Abiblioteca MPE é mais utilizada pois é desenvolvida em conjunto com a implementaçãoMPICH.As lacunas da biblioteca MPE se referem principalmente ao registro das comunicaçõescoletivas que podem ser utilizadas na definição MPI. Essas comunicações incluem, porexemplo, operações de broadcast, reduções entre outras. Além dessas funcionalidades,MPE oferece ao programador um conjunto limitado de funções que podem ser utilizadaspara adicionar novos eventos. Com MPI-Rastro, um número ilimitado de informações podem ser adicionadas aos rastros que os processos podem gerar, aumentando a quantidadede informações disponíveis durante a análise do programa. Embora essas funcionalidadesfaltem nesta biblioteca, sua principal limitação é na realidade a falta de suporte para omonitoramento de aplicações Grid.MPI-Rastro está integrada ao DIMVisual (SCHNORR; OLIVEIRA STEIN; NAVAUX,2006). Dessa forma, os rastros registrados pela biblioteca podem ser integrados com informações de monitoramento de cluster, coletadas durante a execução da aplicação. Essetipo de integração pode beneficiar ao programador, uma vez que fornece dados adicionaispara o melhor entendimento do comportamento que a aplicação teve durante sua execução. MPI-Rastro, ao contrário da MPE, tem suporte dedicado a ambientes Grid.A figura 2.1 apresenta as fases que devem ser realizadas para o monitoramento deuma aplicação desenvolvida com a biblioteca MPICH-G2. Inicialmente, o programadorconstrói a sua aplicação, através da utilização de funções da especificação MPI. Essaconstrução é a fase de desenvolvimento. É importante salientar que, como a MPI-Rastroé uma biblioteca que não altera a aplicação do programador, ela pode ser usada em aplicações já existentes. No fim da fase de desenvolvimento, o programador deve compilar suaaplicação em conjunto com a MPI-Rastro. Isso é feito através da adição de um cabeçalhoadicional nos arquivos fontes de sua aplicação paralela que contém chamadas MPI.A segunda fase do monitoramento utilizando MPI-Rastro, representado na figura 2.1,é a fase de execução e rastreamento. Nesta fase, o programador coloca em execução aaplicação, tanto em um ambiente Grid, quanto em um ambiente Cluster. Cada processoem execução da aplicação estará associada a biblioteca, gerando arquivo com os eventosgerados pela aplicação MPI. Dessa forma, o fim desta fase acontece quando a execuçãoda aplicação termina. O resultado é um conjunto de arquivos com informações de rastreamento de cada processo da aplicação.A terceira e última fase do processo de monitoramento de uma aplicação com MPIRastro (figura 2.1), é a fase de tradução e visualização. Nesta fase, os vários arquivosregistrados durante a segunda fase são integrados utilizando a implementação do modelode integração de dados DIMVisual. A saída desse processo de integração é um únicoarquivo que pode ser então visualizado e analisado pelo programador utilizando a ferramenta de visualização Pajé. Essa ferramenta permite análises estatísticas, pontuais evisuais das informações coletadas, e pode ser usada para detectar gargalos na execução,por exemplo.2.2 JRastroJRastro (SILVA; SCHNORR; STEIN, 2003) é um agente de rastreamento para aplicações Java. Esse agente permite registrar quais métodos foram executados pela aplicação,quais classes foram carregadas e as atividades dos monitores que uma aplicação Java podevir a utilizar.

11DesenvolvimentoExecução e RastreamentoTradução e VisualizaçãoMPI rastroMPI rastroCódigo da Aplicação#include mpi.h #include MPI rastro.h MPI rastrDIMVisualint main (.) {PajeMPI rastr(.)MPI rastr}Figura 2.1: Três fases do processo de monitoramento utilizando a biblioteca MPI-RastroInicialmente, JRastro foi construída para ser transparentemente utilizado em máquinasvirtuais Java que possuíssem a interface de monitoramento JVMPI - Java Virtual MachineProfiler Interface. JRastro, nesta versão, pode registrar o comportamento de qualqueraplicação Java já existente e que fosse capaz de ser executada em uma máquina virtualcom JVMPI. Basicamente, o programador deve fornecer, no comando de execução, omódulo com o agente e um arquivo de configuração listando quais os métodos e classesdevem ser monitorados. Uma das características fundamentais da JRastro é o de nãoalterar nem a máquina virtual Java nem a aplicação que deve ser rastreada. Por causadessa limitação e das características das máquinas virtuais antigas, não era possível, comJVMPI, monitorar apropriadamente as invocações remotas de métodos.O agente JRastro registra as informações em arquivo, um para cada processo Java.As informações ficam em um formato binário, definido pela utilização de outra bibliotecade mais baixo nível, que usa buffers em memória e técnicas para reduzir o tamanho doarquivo de registro de eventos.A interface JVMPI foi descontinuada na versão 1.5 da definição da máquina virtualJava. Por causa disso, o agente JRastro evoluiu (WIEDENHOFT; STEIN, 2006), para aoinvés de utilizar a JVMPI descontinuada, passar a usar a JVMTI - Java Virtual MachineTool Interface, que deve ser a interface a ser utilizada nas máquinas virtuais a partir daversão 1.5. O funcionamento do agente JRastro nesta nova versão é semelhante a versãoanterior, com exceção pela forma como o agente interage com a JVMTI. Nesta novaversão, o agente registra quais funções devem ser chamadas quando determinado tipo deevento ocorre durante a execução.Por fim, JRastro permite o rastreamento da criação e destruição de fluxos de execução,chamadas e retornos de métodos, operações em monitores e gerenciamento de memória.O rastreamento das invocações remotas de métodos continua sendo um desafio quandonão se deseja alterar a máquina virtual nem a aplicação, pois a JVMTI não oferece nenhumtipo de registro de operações específicas para RMI. Para realizar a análise das informaçõesregistradas com o agente, existe um conversor específico para a ferramenta de visualizaçãoPajé.

122.3 DIMVisualDIMVisual (SCHNORR; OLIVEIRA STEIN; NAVAUX, 2006) é um modelo de integração de dados para visualização do comportamento de aplicações paralelas. O modelofoi criado para que o programador possa analisar os dados de monitoramento da sua aplicação juntamente com informações do ambiente onde a aplicação foi executada. Issopermite obter um melhor entendimento do comportamento da aplicação.O modelo de integração de dados DIMVisual é composto de três fases: a coleta dosdados de múltiplas fontes de informação; a integração dessas informações e por fim avisualização e análise conjunta dos dados. A primeira fase, coleta, é quando determinadaaplicação e os recursos por ela utilizados são monitorados. Durante essa fase, as informações são registradas em arquivos por uma ou mais ferramentas de monitoramento oubibliotecas de comunicação instrumentadas. A segunda fase, integração, recebe os arquivos registrados na primeira fase e integra as informações. O resultado da segunda fase éum arquivo com as informações integradas. A terceira fase, de visualização e análise, éonde o programador vai procurar entender o comportamento da sua aplicação.A figura 2.3 mostra os componentes da implementação da fase de integração do modelo. Cada fonte de dados possui um leitor, um sincronizador e um conversor. O leitor éresponsável por ler o formato específico daquela fonte de dados. O sincronizador realizaa sincronização dos eventos de acordo com informações coletadas no período de coleta.O conversor, juntamente com o controlador de integração, é responsável por realizar apadronização das informações, de acordo com o formato dos dados de saída.Dados AFonte de dados ALDados BControladorda aplicaçãoCDados FinaisFonte de dados BLDados CSSCOrdenadorControladorde integraçãoFonte de dados CLSCC onversor de dadosS incronizador de dadosLeitor de dadosFigura 2.2: Componentes da implementação do DIMVisual.Uma vantagem do DIMVisual é que ele é independente tanto de quem coleta as informações quanto de quem visualiza ou analisa os dados após a integração. Essa independência se reflete na implementação do DIMVisual, onde é possível adicionar novas fontes dedados apenas implementando um protocolo pré-definido (veja figura 2.3). Em termos devisualização, essa implementação pode gerar informações em qualquer formato de saídapossível, bastante alterar a forma de registro dos dados de saída. Atualmente, é possívelintegrar informações oriundas de aplicações desenvolvidas com a biblioteca DECK emsua versão instrumentada e aplicações MPI com dados coletados pelo Ganglia (MASSIE;CHUN; CULLER, 2004) e Performance Co-Pilot (SGI, 1999). O formato de saída doDIMVisual é um arquivo que pode ser carregado pela ferramenta de visualização Pajé.

13Está em estudo a adição de módulos na implementação que serão capazes de integrar informações oriundas de um sistema de arquivos de rede, de um injetor de falhas ede dados coletados durante a execução de aplicações Java. Essas novas fonte de dadosmostram a adaptabilidade do modelo a novas situações e tem como objetivo explorar arelação entre o sistema de arquivos e aplicações que utilizam de forma intensiva o disco,o impacto da injeção artificial de uma falha em uma aplicação em execução, por exemplo.2.4 PajéPajé (KERGOMMEAUX; OLIVEIRA STEIN, 2003; STEIN; KERGOMMEAUX;BERNARD, 2000) é uma ferramenta para a visualização de uma aplicação paralela quepode ter potencionalmente um número muito grande de processos e fluxos de execução.Essa ferramenta pode ser adaptada para visualizar outro tipos de dados, como aquelesprovenientes do monitoramento de recursos de um cluster.A figura 2.4 mostra uma tela de visualização da ferramenta Pajé apresentando o comportamento de uma aplicação do estilo ping-pong com dois processos. Cada retângulohorizontal representa uma processo da aplicação e as diferentes cores ou tonalidades queesse retângulo apresenta são os diferentes estados nos quais determinado processo estevedurante sua execução. As setas entre os processos indicam as comunicações que ocorreram e os dados gráficos, neste exemplo, mostram informações obtidas dos recursos ondea aplicação foi executada.Cada elemento em uma tela de visualização do Pajé pode ser interativamente inspecionado. Ao clicar sobre um elemento, informações detalhadas são apresentadas, com omomento em que esse elemento foi instancionado e por quanto tempo durou. Quando háum relacionamento deste elemento com outros, esse relacionamento também é YTES INCPU USERBYTES OUTMachineall load 1minuteDECKStatepaple03BYTES INCPU USERBYTES OUTall load 1minuteFigura 2.3: Tela de visualização do Pajé com uma aplicação ping-pong entre dois processos executando em diferentes máquinas.A ferramenta apresenta as informações através da definição de uma hierarquia de entidades. Na figura 2.4, o lado esquerdo da figura mostra duas máquinas, onde cada máquinapode ter processos, e informações dos recursos das máquinas. A utilização de tal hierarquia permite ao Pajé uma adaptação da ferramenta a visualização de diferentes modelos

14de programação, como programação por fluxos de execução ou aplicações com passagemde mensagem.Atualmente, Pajé está evoluindo para que seja possível a visualização das informaçõesdurante a execução de uma aplicação (ARAUJO; STEIN, 2004). Outras característicasadicionais também estão sendo ou já foram incorporadas ao Pajé. Dentre elas, destacase a geração de dados estatísticos a partir das informações visualizadas, a adição de umcontrole de memória de forma que arquivos possivelmente maiores possam ser analisados,filtros que permitem refinar a análise visual dos dados.Existem vários trabalhos que já usam Pajé. Por exemplo, a ferramenta foi utilizadapara visualizar informações de rastreamento de aplicações desenvolvidas com a bibliotecade comunicação DECK (SCHNORR; STEIN; NAVAUX, 2004); foi usada para a análisede aplicações paralelas em MPI (SCHNORR; OLIVEIRA STEIN; NAVAUX, 2006).2.5 MPICH-G2MPICH-G2 (KARONIS; TOONEN; FOSTER, 2003) é uma implementação da especificação MPI (GROPP; LUSK; SKJELLUM, 1994) para ambientes Grid. Essa implementação estende MPICH (GROPP et al., 1996) para utilizar os serviços do Globus(FOSTER; KESSELMAN, 1997, 1998), como autenticação, autorização, alocação de recursos, estágios de execução e entrada/saída, além de serviços para criação, monitoramento e controle de processos.A figura 2.4 mostra o funcionamento do lançamento de uma aplicação MPI utilizandoa implementação MPICH-G2. Antes do usuário executar o mpirun, ele já deve ter criadoum proxy local através de grid-proxy-init. A criação desse proxy permite que sejamcriados certificados que depois serão utilizados para o lançamento da aplicação. Feitoisso, o usuário executa mpirun. Esse programa utiliza componentes do Globus assimcomo a linguagem de descrição de recursos - RSL (CZAJKOWSKI et al., 1998) - paradescrever as máquinas que serão utilizadas para a execução da aplicação. O componentedo Globus chamado DUROC fica responsável por coordenadar o início da aplicação, quepode ser executada em diferentes locais com diferentes escalonadores de recursos diferentes, como OAR (CAPIT et al., 2005) e OpenPBS por exemplo. A interface entre oDUROC e os diferentes escalonadores é feito através do GRAM. Além dessa interface, oGRAM fica responsável por detectar o término da execução de cada processo, e informarisso ao DUROC. Os componentes do Globus MDS e GASS são utilizados, respectivamente, para descoberta de recursos e para redirecionamento da saída do programa para oterminal do programador.Após o início da execução, a comunicação entre os diferentes processos acontece através dos protocolos TCP/IP ou de implementações proprietárias MPI. Resultados apresentados no artigo sobre MPICH-G2 (KARONIS; TOONEN; FOSTER, 2003) mostram quea utilização destas alternativas para a comunicação entre os processos tem desempenhosemelhante aquele apresentado pela implementação TCP/IP tradicional do MPICH.2.6 ProActiveProActive (HUET; CAROMEL; BAL, 2004) é um middleware totalmente escrito como padrão da linguagem Java. Ele foi construído para dar suporte a programação paralela,distribuída e concorrente. Atualmente, o ProActive pode ser configurado sobre três tiposde comunicação: RMI, Jini e um protocolo baseado em XML.

unicação através de MPI ou TCP/IPFigura 2.4: Lançamento de uma aplicação através do MPICH-G2, com GlobusUma aplicação construída com o ProActive é composta de entidades chamadas Objetos Ativos. Cada um desses objetos tem seu próprio fluxo de controle e decide em queordem as chamadas de métodos serão executadas. As chamadas de métodos feitas paraos objetos ativos são sempre assíncronas, e o retorno dos métodos pode ser obtido atravésda definição de Objetos Futuros. Com objetos futuros, as aplicações construídas tem oseu fluxo de execução de acordo com a espera por necessidade (CAROMEL; KLAUSER;VAYSSIÈRE, 1998). Todos os objetos ativos que executam em uma determinada máquinavirtual Java pertencem a um nó. Uma máquina virtual pode ter dentro de si um ou maisnós.Além das conceitos básicos de objetos ativos e futuros, o ProActive tem um mecanismo de comunicação de grupo (BADUEL; BAUDE; CAROMEL, 2002). Esse mecanismo permite que uma aplicação realize invocação remota de métodos em um conjuntode objetos remotos, com apenas uma chamada. As informações de retorno dessa invocação de método são disponibilizadas automaticamente pelo ProActive.O ProActive também tem recursos para descrever a forma como uma aplicação deveser colocada em execução nos recursos disponíveis (BAUDE et al., 2002). A idéia é disponibilizar a aplicação em qualquer lugar sem ter que mudar o código fonte da aplicação.Toda a informação necessária para a disponibilização fica em um arquivo XML. Este arquivo tem três tipos de dados: VirtualNode, utilizado para declarar os nomes dos nósque são usados no código da aplicação; Mapping, que descreve como os nós virtuais serão mapeados para as máquinas virtuais java; e Infrastructure, que descreve como asmáquinas virtuais devem ser criadas.A figura 2.5 mostra os componentes do ProActive e a sua relação com a aplicação e acamada de comunicação. Além dos recursos de disponiblização e de grupo já mencionados, o ProActive tem também módulos de segurança (ATTALI; CAROMEL; CONTES,2005), mobilidade (BAUDE et al., 2000) e de componentes (BAUDE; CAROMEL; MOREL, 2003). O ambiente de execução do ProActive é independente da camada de comunicação. Dessa forma, as classes do ProActive e a aplicação construída com essas classesnão precisam ser alteradas caso seja necessária a adaptação da camada de comunicaçãode RMI para Ibis, por exemplo.

eGrupoComponentesAmbiente de Execução ProActiveRMIJINIXMLFigura 2.5: Módulos do middleware ProActive e a sua relação com

de mandelbrot, desenvolvido com na linguagem Java com a biblioteca ProActive. O mo-nitoramento dessas aplicações é feito com a MPI-Rastro, no caso do filtro de mediana, e com a JRastro, no caso do ProActive. Este texto está organizado da seguinte forma. O capítulo 2 apresenta uma revisão de