Leonardo Sant Anna Antunes Maciel Um Estudo sobre Instrumentação da Máquina Virtual de Lua para Análise de Desempenho Dissertação de Mestrado Dissertação apresentada como requisito parcial para obtenção do grau de Mestre pelo Programa de Pós graduação em Informática do Departamento de Informática da PUC Rio Orientador: Prof. Renato Fontoura de Gusmão Cerqueira Rio de Janeiro Setembro de 2008
Leonardo Sant Anna Antunes Maciel Um Estudo sobre Instrumentação da Máquina Virtual de Lua para Análise de Desempenho Dissertação apresentada como requisito parcial para obtenção do grau de Mestre pelo Programa de Pós graduação em Informática do Departamento de Informática do Centro Técnico Científico da PUC Rio. Aprovada pela Comissão Examinadora abaixo assinada. Prof. Renato Fontoura de Gusmão Cerqueira Orientador Departamento de Informática PUC Rio Prof. Noemi Rodriguez Departamento de Informática PUC Rio Prof. Roberto Ierusalimschy Departamento de Informática PUC Rio Prof. José Eugênio Leal Coordenador Setorial do Centro Técnico Científico PUC Rio Rio de Janeiro, 24 de Setembro de 2008
Todos os direitos reservados. É proibida a reprodução total ou parcial do trabalho sem autorização da universidade, do autor e do orientador. Leonardo Sant Anna Antunes Maciel Graduou-se em Engenharia de Computação pela PUC Rio em Janeiro de 2006, tendo passado um ano em intercâmbio na Escola Superior de Informática e Matemática Aplicada de Grenoble, França, e contabilizado quase 4 anos de estágio. Ingressou no programa de Mestrado, desenvolvendo junto ao seu orientador uma implementação do Sistema de Eventos de CORBA para o projeto OiL do TecGraf, além de portes de Lua para a plataforma BREW e Windows Mobile. Ainda no Mestrado realizou experimentos com a instrumentação da máquina virtual de Lua, que finalmente resultou neste trabalho. Maciel, Leonardo Sant Anna Antunes Ficha Catalográfica Um Estudo sobre Instrumentação da Máquina Virtual de Lua para Análise de Desempenho / Leonardo Sant Anna Antunes Maciel; orientador: Renato Fontoura de Gusmão Cerqueira. 2009. 91 f. : il. ; 30 cm Dissertação (Mestrado em Informática) - Pontifícia Universidade Católica do Rio de Janeiro, Rio de Janeiro, 2008. Inclui bibliografia. 1. Informática Teses. 2. Instrumentação de Máquinas Virtuais. 3. Linguagens Dinâmicas. 4. Lua. I. Cerqueira, Renato Fontoura de Gusmão. II. Pontifícia Universidade Católica do Rio de Janeiro. Departamento de Informática. III. Título. CDD: 004
Agradecimentos Ao meu orientador Professor Renato Cerqueira pela paciência e apoio, principalmente nos momento críticos, próximos à defesa. À Wiz Technologies e mais uma vez ao meu orientador, pela concessão da bolsa, sem a qual não estaria aqui hoje. Ao meu amigo e treinador, Professor Walter Tuche, que me ensinou muito sobre superação. Aos meus pais, irmão e avós e namorada, cujo carinho tem sido fundamental. Aos amigos de todas as horas, por entenderem minha ausência. A todos vocês, muito obrigado!
Resumo Maciel, Leonardo Sant Anna Antunes; Cerqueira, Renato Fontoura de Gusmão. Um Estudo sobre Instrumentação da Máquina Virtual de Lua para Análise de Desempenho. Rio de Janeiro, 2008. 91p. Dissertação de Mestrado Departamento de Informática, Pontifícia Universidade Católica do Rio de Janeiro. Tem-se observado uma crescente popularidade das linguagens de programação ditas dinâmicas. Hoje uma miríade dessas linguagens são empregadas nas mais diversas áreas, tais como na programação para Internet, desenvolvimento de Jogos, e até mesmo em missões críticas de exploração espacial. Este fenômeno pode ser atribuído em parte às facilidades que essas linguagens oferecem ao programador, como estruturas de dados poderosas e flexíveis, gerenciamento automático de memória e tipagem dinâmica, entre outras. Entretanto, os mesmos mecanismos de abstração, que facilitam a programação nessas linguagens, introduzem também custos muitas vezes não facilmente identificados pelos programadores de aplicações. Provavelmente o melhor exemplo disto é o custo da coleta de lixo, um processo não-determinístico presente em várias dessas linguagens. Por estas e outras razões, há uma grande demanda por desenvolver ferramentas de apoio à análise de desempenho de programas escritos nessas linguagens. O objetivo deste trabalho é estudar técnicas para instrumentação de máquinas virtuais de linguagens dinâmicas. Para realizar este estudo foi implementada uma solução para instrumentação da máquina virtual da linguagem Lua. Através deste estudo, apresentamos algumas técnicas de instrumentação, e descrevemos as decisões de projeto e experiências adquiridas no desenvolvimento da mesma. Além disso, avaliamos o impacto dessa solução no desempenho do programa instrumentado e apresentamos exemplos de uso. Concluímos com uma análise crítica deste trabalho, além de sugestões de trabalhos futuros. Palavras chave Instrumentação de Máquinas Virtuais. Linguagens Dinâmicas. Lua.
Abstract Maciel, Leonardo Sant Anna Antunes; Cerqueira, Renato Fontoura de Gusmão. A Study of Instrumentation of the Lua Virtual Machine for Performance Analysis. Rio de Janeiro, 2008. 91p. MsC Thesis Departamento de Informática, Pontifícia Universidade Católica do Rio de Janeiro. Recently there has been a significant rise in the popularity of the so called dynamic languages. Today a myriad of such languages can be found on a wide range of applications, from Web programming, through game development, up to critical space missions. This phenomenon is partially due to high-level constructs that they offer to the programmer, such as powerful and flexible data structures, automatic memory management and dynamic typing, to name a few. However, the same abstractions that ease the development with such languages, also introduce costs often difficult to identify by application developers. Garbage collection is probably the best example of such an abstraction. While relieving the programmer from manual memory management, it also introduces a non-deterministic cost. For those reasons there has been an increasing interest in tools to support the process of performance analysis of programs written in such languages. This work aims to study techniques for instrumentation of virtual machines of dynamic languages. To accomplish this, we implemented a solution for the instrumentation of the virtual machine of the Lua language. Throughout this study we present some instrumentation techniques, then describe the design decisions and experience acquired during the development of this solution. Furthermore, we evaluate the performance impact and present some examples of use of the proposed solution. We conclude with a critical review of this work, as well as suggestions for future work. Keywords Instrumentation of Virtual Machines. Dynamic Languages. Lua.
Sumário 1 Introdução 11 1.1 Objetivos e contribuições esperadas 13 1.2 Organização do documento 13 2 Profilers 15 2.1 Coleta de dados 15 2.2 Análise de dados 19 3 Trabalhos relacionados 22 3.1 Linguagem Ruby 23 3.2 Linguagem Python 24 3.3 Linguagem Lua 25 3.4 Linguagem Perl 26 4 Instrumentação da máquina virtual de Lua 29 4.1 Arquitetura 29 4.2 Impacto no desempenho 40 4.3 Validação da ferramenta 42 5 Conclusão 51 A Apêndices 56 A.1 Interface de programação do LuaTrace 56 A.2 Representação de uma mensagem em memória 57 A.3 Código-fonte do script life.lua 61 A.4 Relatório de chamadas de função do script life.lua 63 A.5 Relatório de uso de objetos do script life.lua 67 A.6 Relatório de chamadas de função do canal de eventos do OiL 69 A.7 Relatório de uso de objetos do canal de eventos do OiL 85
Lista de figuras 4.1 Arquitetura do núcleo do LuaTrace 30 4.2 Arquitetura do escritor de mensagens padrão 38 4.3 Arquitetura do arcabouço de análise de dados 42 4.4 Eliminação de ciclos no LuaTrace 43
Lista de tabelas 3.1 Ganchos nativos das linguagens 22 3.2 Características de profilers da linguagem Ruby 24 3.3 Características de profilers da linguagem Python 25 3.4 Características de profilers da linguagem Lua 26 3.5 Características de profilers da linguagem Perl 27 4.1 Características do profiler LuaTrace 29 4.2 Pontos de instrumentação do LuaTrace 31 4.2 Pontos de instrumentação do LuaTrace (continuação) 32 4.3 Benchmark do LuaTrace 41 4.4 Sobrecargas das funções de relógio 41
Falar é completamente fácil, quando se tem palavras em mente que expressem sua opinião... Difícil é expressar por gestos e atitudes, o que realmente queremos dizer. Fácil é julgar pessoas que estão sendo expostas pelas circunstâncias... Difícil é encontrar e refletir sobre os seus próprios erros. Fácil é fazer companhia a alguém, dizer o que ela deseja ouvir... Difícil é ser amigo para todas as horas e dizer a verdade quando for preciso. Fácil é analisar a situação alheia e poder aconselhar sobre a mesma... Difícil é vivenciar esta situação e saber o que fazer. Fácil é demonstrar raiva e impaciência quando algo o deixa irritado... Difícil é expressar o seu amor a alguém que realmente te conhece. Fácil é viver sem ter que se preocupar com o amanhã... Difícil é questionar e tentar melhorar suas atitudes impulsivas e as vezes impetuosas, a cada dia que passa. Fácil é mentir aos quatro ventos o que tentamos camuflar... Difícil é mentir para o nosso coração. Fácil é ver o que queremos enxergar... Difícil é saber que nos iludimos com o que achávamos ter visto. Fácil é ditar regras e, Difícil é segui-las... Carlos Drummond de Andrade, Reverência ao Destino.