em sysadmin, ubuntu

SystemTap no Ubuntu 7.04

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!