diretrizes de performance e ajustes para linux

Leitura recomendada. Se você precisa ajustar alguma configuração do Linux, identificar algum gargalo no seu sistema, esse documento pode te ajudar. É o Redpaper da IBM Linux Performance and Tuning Guidelines, e um trecho do documento diz:

The use of Linux in an enterprise-class server requires monitoring performance and, when
necessary, tune the server to remove bottlenecks that affect users. This IBM Redpaper
publication describes the methods you can use to tune Linux, tools that you can use to
monitor and analyze server performance, and key tuning parameters for specific server
applications. The purpose of this paper is to explain how to analyze and tune the Linux
operating system to yield superior performance for any type of application you plan to run on
these systems.

Você pode baixá-lo aqui: http://www.redbooks.ibm.com/abstracts/redp4285.html?Open

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!