Profiler no PHP com Cachegrind

Cachegrind é um cache profiler disponível no PHP e em diversas outras linguagens. Ele faz simulações detalhadas do cache do processador, e o mais legal de tudo: mostra quanto cada linha de código carregou o processador em milisegundos, ou %. Ele pode mostrar informações por função, por  módulo ou um resumo completo do programa.

Habilitando o cachegrind o programa pode ficar de 20 a 100 vezes mais lento, por isso vamos deixar pra brincar com ele só nos ambientes de teste/desenvolvimento, ok?

Cachegrind is a cache profiler. It performs detailed simulation of the I1, D1 and L2 caches in your CPU and so can accurately pinpoint the sources of cache misses in your code. It identifies the number of cache misses, memory references and instructions executed for each line of source code, with per-function, per-module and whole-program summaries. It is useful with programs written in any language. Cachegrind runs programs about 20–100x slower than normal.

Ouvi sobre cachegrind no Podcast do PHPSP, o PHPSPCast n. 3.  Pra mim o recurso ainda é novidade, mas vou mostrar como funciona.

Configurando o xDebug

No mês passado fiz um post explicando sobre como fazer debug no PHP com Wamp e Netbeans, usando o XDebug. Siga os passos até terminar de instalar o xDebug no seu PHP/Wamp Server.

Feito isso, vamos abrir o php.ini e configurar a pasta do profiler, onde queremos salvar os arquivos de cachegrind para leitura. Para isso basta adicionar (ou modificar) as linhas a seguir na seção [XDebug]:

xdebug.profiler_enable=1
xdebug.profiler_output_dir=”c:\wamp\xdebug

E pronto. Agora é só executar suas páginas normalmente e olhar na pasta para ver se estão sendo gerados arquivos com nome cachegrind.out. Agora precisaremos de uma ferramenta para analizar esses arquivos.

Analizando arquivos de profiler com WinCacheGrind

WinCacheGrind é gratuíto e pode ser baixado em http://sourceforge.net/projects/wincachegrind/. Como o nome diz, ele só funciona no Windows. Mas há dezenas de aplicativos que fazem isso (até melhores) via web e também em outros OS.

Após instalá-lo, basta abrir os arquivos cachegrind gerados pelo xdebug. Ele automaticamente analiza o arquivo e tudo mais. Não há muito o que explicar sobre ele. Veja:

Tela do WinCacheGrind
Você pode consultar linha por linha, ou um resumo completo do fonte.  Ele ainda mostra em formato de árvore, para que você possa ir abrindo as classes e ver que trecho prejudicou mais a performance do seu programa.

Como disse, há dezenas de programas que fazem a leitura da saída de profiling. Esse foi o que eu experimentei. Há o KCachegring que roda em vários sistemas operacionais, ou o WebGrind que roda no browser.

Espero ter dado o ‘empurrãozinho’ que você precisava pra melhorar a forma com que você fazia análise de performance.

Colabore! Deixe seu comentário!

Outras fontes

WebGrind – http://code.google.com/p/webgrind/
PHPSP – http://www.phpsp.org.br/ e http://phpsp.org.br/2009/05/04/analise-de-performance/
KCachegrind – http://kcachegrind.sourceforge.net/
WinCacheGrind – http://sourceforge.net/projects/wincachegrind/

Compartilhe com os amigos
  • Digg
  • StumbleUpon
  • Print
  • del.icio.us
  • Facebook
  • Twitter
  • Google Bookmarks
  • email
  • Google Buzz
  • LinkedIn
  • Live
  • MSN Reporter
  • Orkut
  • PDF
  • Reddit
  • Tumblr
Publicidade

1 comentário

  1. Rodrigo Maia disse:

    Muito bom isso, vou começar a fazer isso em meus códigos para testar e também melhorar o desempenho de minhas aplicações.

    Na IDE Open Komodo tem alguma integração com o xDebug?
    Abraço.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *