Um dos utilitários mais interessantes que conheci recentemente, enquanto estava lendo um Redbook da IBM sobre Perfomance Tuning de Linux em ambientes System p, é o SystemTap.
Do sítio principal, o SystemTap pode ser descrito como: “Uma ferramenta que fornece uma infra-estrutura baseada em software livre (GPL) para simplificar a obtenção de informações sobre um sistema Linux em execução” (tradução literal).
Graças aos desenvolvedores (Debian/Ubuntu), o pacote está disponível na seção universe/devel e pode ser instalado com um simples apt-get:
$ sudo apt-get install systemtap Lendo Lista de Pacotes... Pronto Construindo Árvore de Dependências Lendo informação de estado... Pronto Os pacotes extra a seguir serão instalados: libelf1 libpfm3-3.2 Os NOVOS pacotes a seguir serão instalados: libelf1 libpfm3-3.2 systemtap 0 pacotes atualizados, 3 pacotes novos instalados, 0 a serem removidos e 22 não atualizados. É preciso fazer o download de 739kB de arquivos. Depois de desempacotamento, 2683kB adicionais de espaço em disco serão usados. Quer continuar [S/n] ? S [...] Instalando systemtap (0.0.20070113-1) ... $
Aqui no meu sistema, foi necessário instalar outros dois pacotes, libelf1 e libpfm3, que são para manipular arquivos ELF, e bibliotecas para suporte a PMU (Performance Monitor Unit), respectivamente.
Após a instalação, é interessante verificar o diretório de documentação do software (em /usr/share/doc/NOMEDOPACOTE), pois geralmente traz exemplos bem interessantes. No caso do SystemTap, eu realizei o seguinte:
$ cd /usr/share/doc/systemtap/examples $ sudo ./top.stp semantic error: libdwfl failure (dwfl_linux_kernel_report_offline): No such file or directory while resolving probe point kernel.function("sys_*") Pass 2: analysis failed. Try again with more '-v' (verbose) options.
Humm, estranho. Usando o nosso amigo Google, descobri que existe o Bug #106957, que faz sentido pois o SystemTap precisa de informações de depuração para prover as informações do ambiente, que estão presentes nos pacotes linux-image-debug-VERSAO-DO-KERNEL. Além disso, é necessário criar um link simbólico para o nome de arquivo que o SystemTap tenta acessar:
$ sudo apt-get install linux-image-debug-$(uname -r) Password: Lendo Lista de Pacotes... Pronto Construindo Árvore de Dependências Lendo informação de estado... Pronto Os NOVOS pacotes a seguir serão instalados: linux-image-debug-2.6.20-16-generic 0 pacotes atualizados, 1 pacotes novos instalados, 0 a serem removidos e 22 não atualizados. É preciso fazer o download de 0B/24,2MB de arquivos. Depois de desempacotamento, 59,9MB adicionais de espaço em disco serão usados. Selecionando pacote previamente não selecionado linux-image-debug-2.6.20-16-generic. (Lendo banco de dados ... 138496 arquivos e diretórios atualmente instalados.) Descompactando linux-image-debug-2.6.20-16-generic (de .../linux-image-debug-2.6.20-16-generic_2.6 .20-16.29_i386.deb) ... Instalando linux-image-debug-2.6.20-16-generic (2.6.20-16.29) ... $ sudo ln -sf /boot/vmlinux-dbg-$(uname -r) /boot/vmlinux-$(uname -r) $ sudo ./top.stp SYSCALL COUNT sys_gettimeofday 65187 sys_ioctl 54202 sys_poll 11467 sys_read 3790 sys_gettid 2471 sys_write 1110 sys_kill 803 sys_time 673 sys_select 597 sys_futex 442 sys_clock_gettime 248 sys_fcntl64 207 sys_setitimer 196 sys_socketcall 183 sys_rt_sigprocmask 176 sys_writev 150 sys_close 103 sys_sigreturn 99 sys_recvfrom 97 sys_recv 91 --------------------------------------
No exemplo acima, o SystemTap lista as 20 chamadas de sistema que estão sendo mais utilizadas. O aplicativo não se resume apenas a isso, o propósito principal dele é ajudar a identificar possíveis gargalos no sistema, seja de CPU, I/O, memória ou rede. Vale a pena!

em discussão