comunicação DECK em Pajé
Lucas Mello Schnorr1 Philippe Navaux2 Benhur Stein3
Resumo
A depuração de programas paralelos é uma fase importante para a otimização e o desen- volvimento dessas aplicações. Uma das técnicas utilizadas para depuração é a visualização do comportamento de um programa após a sua execução. Este trabalho descreve as altera- ções efetuadas no DECK para possibilitar a visualização de programas desenvolvidos com essa biblioteca na ferramenta de visualização genérica Pajé.
1 Introdução
A depuração de aplicações paralelas é uma tarefa complexa quando comparada à depu- ração de programas seqüenciais. Isso acontece porque os programas paralelos não tem um comportamento determinístico, isto é, diferentes resultados e comportamentos podem acon- tecer para o mesmo conjunto de entradas para esse programa.
A visualização do comportamento dos programas após a execução é uma forma de se re- alizar a depuração de aplicações paralelas. Esse processo consiste em registrar os principais eventos de uma aplicação durante a sua execução, de forma que eles possam ser analisa- dos posteriormente. A vantagem principal desta forma de se depurar é a sua simplicidade, quando comparada a outras formas de depuração, como as que oferecem a possibilidade de depurar programas paralelos durante a sua execução (ARVIND; YOKOTSUKA, 1991;BERA- NEK, 1992)
DECK (BARRETO; NAVAUX; RIVIÈRE, 1998) é um ambiente composto por um sistema de execução e uma biblioteca de comunicação e gerenciamento de fluxos de execução. Atu- almente, não existe uma forma de se fazer a visualização, após a execução, de aplicações desenvolvidas com essa biblioteca. Existe, em contrapartida, esforços para possibilitar a
1[email protected] Bolsista CNPq
2[email protected] Orientador
3[email protected] Co-Orientador
depuração durante a execução de aplicações paralelas com DECK (STRINGHINI; NAVAUX;
KERGOMMEAUX, 2000).
Este texto relata o desenvolvimento do trabalho que permite a visualização de programas paralelos desenvolvidos no ambiente DECK usando a ferramenta Pajé (STEIN; KERGOM- MEAUX; BERNARD, 2000). A seção 2 descreve a biblioteca de comunicação DECK e a ferramenta de visualização Pajé. Na seção 3 é descrita a implementação do trabalho. Por fim é apresentada uma conclusão e os trabalhos futuros.
2 DECK e Pajé
DECK é um ambiente de programação paralela para cluster. Esse ambiente é composto por uma biblioteca e por ferramentas para execução de aplicações paralelas. A biblioteca oferece, entre outras coisas, funções que permitem a comunicação entre processos e funções para gerenciamento de fluxos de execução.
A biblioteca DECK é estruturada em dois níveis: µDECK e a camada de serviço. O µDECK é responsável por interagir com o sistema operacional e os protocolos de comuni- cação. A camada de serviço é responsável por fornecer funcionalidades como tolerância a falhas, balanceamento de carga e comunicação de grupo para as aplicações paralelas.
A comunicação no DECK é feita através da abstração de caixas de correio. Um processo que deseja receber dados deve criar uma caixa de correio. Quando outros processos que- rem enviar dados para esse primeiro processo, eles devem clonar aquela caixa de correio e então colocar nela a mensagem a ser enviada. Com essa abstração, para dois processos se comunicarem devem ser criadas duas caixas de correio, uma por cada processo.
Pajé é uma ferramenta de visualização interativa, extensível e escalável (STEIN; KER- GOMMEAUX; BERNARD, 2000). Com essas características, a ferramenta pode ser adaptada a diferentes ambientes de desenvolvimento de programas paralelos.
O arquivo de entrada de Pajé (KERGOMMEAUX; STEIN; MOUNIÉ, 1999) não apresenta eventos específicos a um ambiente de programação ou a uma biblioteca de comunicação. Ele possui, ao contrário, eventos capazes de criar abstrações na visualização.
3 Implementação
O processo de visualização desenvolvido neste trabalho foi composto por três etapas:
registro de informação durante a execução de uma aplicação com DECK, conversão desses registros para um arquivo no formato do Pajé e a visualização em si.
3.1 Registro de eventos
Para a primeira etapa, utilizou-se a técnica de instrumentação do código da biblioteca DECK para que os principais eventos fossem registrados durante a execução de uma aplica-
ção com essa biblioteca. Esses eventos são registrados na forma de rastros de execução. A técnica de instrumentação consiste basicamente na inserção de pedaços de código que cha- mam funções capazes de registrar um determinado evento.
Antes da instrumentação do DECK foi decidido qual a forma de visualização desejada para aplicações desenvolvidas com essa biblioteca. A figura 1 mostra qual é a visualiza- ção desejada. Nessa figura, os retângulos horizontais representam os fluxos de execução da aplicação desenvolvida com DECK e as suas diferentes cores representam os estados desses fluxos. As flechas entre dois retângulos representam a comunicação entre os dois fluxos de execução.
Comunicações Estados Fluxos de execução
Figura 1: Esquema de visualização possível com eventos Pajé
Para realizar o registro das informações, foi utilizada a biblioteca libRastro (SILVA; STEIN, 2002). Essa biblioteca fornece facilidades como a sincronização de eventos, baixa sobrecarga na sua utilização e a possibilidade de se criar um conjunto de eventos próprio. Com esta bibli- oteca de geração de rastros, é criado um arquivo com os eventos registrados para cada fluxo de execução.
Para se atingir a visualização desejada da figura 1, foram registradas as funções da bi- blioteca DECK que realizam a comunicação através de caixas de correio (deck_mbox_), comunicações de grupo (deck_collective_) e as funções de gerenciamento de fluxos de execução (deck_thread_). Em cada uma dessas instrumentações, foi registrada a in- formação necessária para se atingir a visualização desejada de cada caso. Por exemplo, para se visualizar uma comunicação no DECK através da caixas de mensagens, foi necessário re- gistrar o fluxo de execução que executou a funçãodeck_mbox_poste o fluxo de execução que executoudeck_mbox_retrv. Com essas informações, é possível criar uma flecha do fluxo de execução que enviou até o que recebeu a mensagem.
3.2 Conversão dos eventos
Os eventos da biblioteca DECK foram registrados com a libRastro. Foi construído um programa que realiza a conversão dos eventos registrados durante a execução de uma aplica- ção paralela com DECK aos eventos que descrevem a visualização desejada para esses dados
em Pajé.
Esse conversor mapeia para cada tipo de evento registrado durante a execução da apli- cação um conjunto de eventos Pajé que descrevem a visualização desejada. Utilizando o exemplo da seção 3.1, o evento registrado na execução da funçãodeck_mbox_postdeve ser mapeado no evento Pajé que inicia uma flecha. De forma análoga, a evento registrado na funçãodeck_mbox_retrvé mapeado no evento Pajé que indica o fim de uma flecha.
A próxima seção mostra o resultado da conversão dos eventos registrados durante a exe- cução de uma aplicação desenvolvida com DECK para o formato Pajé, considerando o ma- peamento dos eventos de cada caso.
3.3 Visualização
Foram desenvolvidas algumas aplicações com o objetivo de mostrar os resultados da ins- trumentação da biblioteca DECK. Cada uma dessas aplicações proporcionou a visualização de cada uma das funcionalidades do DECK.
A primeira imagem da figura 2 mostra a visualização de um programa desenvolvido com DECK com fluxos de execução. Ela mostra o resultado da conversão dos eventos registrados nas seguintes funções:deck_thread_create, onde é registrado o identificador do fluxo de execução criado e quem o criou,deck_thread_sleeponde é registrado qual fluxo de execução entrou no estado bloqueado, edeck_thread_join, indicando que determinado fluxo de execução está esperando o fim de outro. Nessa figura, as flechas da visualização se originam em quem criou o fluxo de execução e terminam no fluxo de execução criado. As tonalidades diferentes em cada retângulo horizontal indicam os diferentes estados de deter- minado fluxo de execução.
A segunda imagem da figura 2 mostra a visualização de um programa com comunica- ção através de caixas de correio. Para esta imagem, foram convertidos eventos registrados nas funçõesdeck_mbox_post,deck_mbox_retrv. Nesta imagem, o programa visu- alizado tem 5 processos, sendo que cada um deles envia um dado para o primeiro processo, representado como o retângulo superior.
A terceira e última imagem da figura 2 mostra a visualização de um programa desenvol- vido em DECK que explora o serviço de comunicação de grupo. Nessa figura, são executadas várias chamadas a funçãodeck_collective_bcast, sendo que entre cada uma dessas chamadas é feita a sincronização em uma barreiradeck_collective_barrier. Depois são feitas chamadas a funçãodeck_collective_reduce.
Essas visualizações mostram o resultado desse trabalho, que é a visualização em Pajé do comportamento de programas desenvolvidos com a biblioteca de comunicação DECK. A forma de geração de rastros que possibilita essa visualização é feita de forma transparente ao desenvolvedor DECK. A baixa sobrecarga no registro desses rastros é proporcionada pela biblioteca libRastro, utilizada na instrumentação do DECK.
Figura 2: Visualizações de programas desenvolvidos com DECK. A primeira imagem mostra um programa com fluxos de execuções. A segunda mostra um programa com 5 processos re- alizando comunicação através de caixas de correio. A terceira imagem mostra a visualização de um programa que explorar o serviço de comunicação de grupo do DECK.
4 Conclusão
Este texto descreveu as alterações efetuadas no DECK para possibilitar a visualização de programas desenvolvidos com essa biblioteca na ferramenta de visualização Pajé. A seção 3 mostrou que o processo de visualização desses programas é feito em três etapas: registro de eventos, conversão após a execução e por fim, visualização. Esse processo teve por objetivo ser transparente ao desenvolvedor DECK e ter baixa sobrecarga na sua utilização.
Este trabalho faz parte da dissertação do autor deste texto. O objetivo dessa dissertação é construir um sistema que permita a análise de informações oriundas de diferentes fontes de dados. Essas fontes de dados podem ser diferentes monitoradores de clusters, informações de escalonamento do sistema operacional e também informações do ambiente de execução paralelo. Dessa forma, o trabalho descrito neste artigo é a publicação dos resultados parciais dessa dissertação.
A instrumentação e visualização da biblioteca DECK tem como trabalhos futuros a am- pliação da instrumentação, de forma que se possa registrar mais informação. Fazer com que seja possível o controle de registro dos eventos de acordo com ordens do desenvolvedor. Isso permitirá que o desenvolvedor aumente o grau de detalhe na geração de eventos em locais específicos da aplicação em desenvolvimento. Além desses trabalhos futuros, pretende-se registrar informações mais detalhes doµDECK, de forma que a visualização proposta neste trabalho também seja utilizada no desenvolvimento da biblioteca de comunicação DECK.
Referências Bibliográficas
ARVIND, D. K.; YOKOTSUKA, D. Debugging concurrent programs using static analysis and run-time hardware monitoring. In: Proceedings of IEEE Symposium on Parallel and Distributed Processing.
Dallas, Texas: [s.n.], 1991.
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 applica- tion with fault tolerance support. In: Congreso Argentino de Ciencias de la Computacion. Neuquém, Argentina: [s.n.], 1998. v. 2, p. 623–637.
BERANEK, A. Data race detection based on execution replay for parallel applications. In: Proceedings of CONPAR ’92. Lyon, France: [s.n.], 1992. p. 109–114.
KERGOMMEAUX, J. C. de; STEIN, B. O.; MOUNIÉ, G. Pajé trace format. Technical Paper, 1999.
SILVA, G. J. da; STEIN, B. O. Uma biblioteca genérica de geração de rastros de execução para visua- lização de programas. Anais do I Simpósio de Informática da Região Centro, 2002.
STEIN, B. O.; KERGOMMEAUX, J. C. de; BERNARD, P.-E. Pajé, an interactive visualization tool for tuning multi-threaded parallel applications. Parallel Computing, v. 26, p. 1253–1274, 2000.
STRINGHINI, D.; NAVAUX, P.; KERGOMMEAUX, J. C. de. A selection mechanism to group pro- cesses in a parallel debugger. In: International Conference on Parallel and Distributed Processing Techniques and Applications. Las Vegas, USA: CSREA Press, 2000. v. 2.