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!