O perf tool é uma ferramenta de análise de desempenho e coleta diversos eventos (de hardware, como TLB-load e alguns de software, como pagefaults). Achei bastante bastante completo. Seguem algumas dicas de como utilizá-lo. 1) Verifique se o pacote está instalado:
# rpm -qa | grep -i perf perf-2.6.34-8.1.x86_64
2) Pode-se gerar os dados e enviar para um arquivo para análise posterior:
# perf record -- <commando>
Exemplo:
# perf record -- lame -h -b teste.txt teste2.txt
3) Deve gerar um arquivo chamado perf.data
# ls
teste.txt teste2.txt perf.data
4) Para verificar seu conteúdo:
# perf report
[OUTPUT]
# Samples: 1137186
#
# Overhead Command Shared Object Symbol
# ........ ....... .................................................................... ......
#
22.68% lame lame [.] quantize_lines_xrpow
15.94% lame lame [.] choose_table_nonMMX
14.50% lame lame [.] count_bits
10.00% lame lame [.] L3psycho_anal_vbr
5.46% lame lame [.] count_bit_noESC_from3
4.60% lame lame [.] filterYule
3.15% lame lame [.] init_xrpow_core_c
2.61% lame lame [.] calc_noise_core_c
2.50% lame lame [.] noquant_count_bits
2.49% lame lame [.] fht
2.23% lame lame [.] outer_loop
Note que ele mostra qual parte do código gerou maior overhead na execução do Lame. 5) Outra forma de executar o perf, sem precisar gerar o arquivo:
# perf stat -- lame -h -b 320 teste.txt teste2.txt
…
Performance counter stats for 'lame -h -b 320 teste.txt teste2.txt:
104592.953262 task-clock-msecs # 0.999 CPUs
706 context-switches # 0.000 M/sec
0 CPU-migrations # 0.000 M/sec
568 page-faults # 0.000 M/sec
<not counted> cycles
<not counted> instructions
<not counted> branches
<not counted> branch-misses
<not counted> cache-references
<not counted> cache-misses
104.723311336 seconds time elapsed
Existem outras ferramentas para análise boas para o Linux, como o System Tap (análogo ao Dtrace do solaris) e o kprobes e jprobes (análise de chamadas a funções de kernel).
Créditos da explicação: Arthur Baruchi