43.5. Analisando os Dados

Periodicamente, o daemon do OProfile, oprofiled, coleta as amostras e as grava no diretório /var/lib/oprofile/samples/. Antes de ler, certifique-se de que todos os dados estão salvos neste diretório, executando seguinte comando como root:

opcontrol --dump

Cada nome de arquivo de amostra é baseado no nome do executável, com uma chave fechando (}) substituindo cada barra (/). O nome do arquivo termina com o jogo da velha (#), seguido pelo número do contador deste arquivo de amostra. Por exemplo: o arquivo a seguir inclui os dados de amostra do executável /sbin/syslogd coletado com o contador 0:

}sbin}syslogd#0

As seguintes ferramentas estão disponíveis para perfilar os dados de amostra após terem sido coletados:

Use estas ferramentas, juntamente aos binários perfilados, para gerar relatórios que podem ser analisados futuramente.

AtençãoAtenção
 

O executável sendo perfilado deve ser usado com estas ferramentas para analisar os dados. Se este deve mudar após a coleta dos dados, faça backup do executável usado para criar as amotras assim como dos arquivos de amostra.

As amostars de cada executável são gravadas em um único arquivo de amostra. As amostras de cada biblioteca ligada dinamicamente também são gravados em um arquivo único de amostra. Enquanto o OProfile está rodando, se o executável sendo monitorado alterar e existir um arquivo de amostra do executável, o arquivo de amostra existente é apagado automaticamente. Sendo assim, se precisar do arquivo de amostra existente, deve-se fazer backup junto ao executável usado para criá-lo, antes de substituir o executável por uma versão mais nova. Consulte a Seção 43.4 para detalhes sobre o backup do arquivo de amostra.

43.5.1. Usando o op_time

A ferramenta op_time oferece uma visão geral de todos os executáveis sendo perfilados.

Veja a seguir uma parte do exemplo de output:

581        0.2949  0.0000 /usr/bin/oprofiled
966        0.4904  0.0000 /usr/sbin/cupsd
1028       0.5218  0.0000 /usr/sbin/irqbalance
1187       0.6026  0.0000 /bin/bash
1480       0.7513  0.0000 /usr/bin/slocate
2039       1.0351  0.0000 /usr/lib/rpm/rpmq
6249       3.1722  0.0000 /usr/X11R6/bin/XFree86
8842       4.4885  0.0000 /bin/sed
31342     15.9103  0.0000 /usr/bin/gdmgreeter
58283     29.5865  0.0000 /no-vmlinux
82853     42.0591  0.0000 /usr/bin/perl

Cada executavel é listado em sua própria linha. A primeira coluna é o número de amostras gravadas para o executável. A segunda coluna é a porcentagem das amostras relativa ao número total de amostras. A terceira coluna não é usada e a quarta é o nome do executável.

Consulte a página man do op_time para obter uma lista das opções de linha de comandos, como a -r, usada para ordenar o output do executável, daquele com o maior número de amostras para o que tiver o menor número de amostras. A opção -c também é útil para especificar um número de contador.

43.5.2. Usando o oprofpp

Para recuperar informações detalhadas sobre um determinado executável, use o oprofpp:

oprofpp <mode> <executable>

<executable> deve ser a localidade completa do executável a ser analisado. O <mode> deve ser um dos seguintes:

-l

Lista os dados da amostra por símbolos. Por exemplo: veja a seguir uma parte do output da execução do comando oprofpp -l /usr/X11R6/bin/XFree86:

vma      samples  %           symbol name
...
08195d10 4        3.0303      miComputeCompositeClip
080b9180 5        3.78788     Dispatch
080cdce0 5        3.78788     FreeResource
080ce4a0 5        3.78788     LegalNewID
080ce640 5        3.78788     SecurityLookupIDByClass
080dd470 9        6.81818     WaitForSomething
080e1360 12       9.09091     StandardReadRequestFromClient
...

A primeira coluna é o endereço inicial da memória virtual (virtual memory address, vma). A segunda coluna é o número de amostras do símbolo. A terceira coluna é a porcentagem de amostras deste símbolo relativa ao número total de amostras do executável, e a quarta coluna é o nome do símbolo.

Para ordenar o output do maior número de amostras para o menor (ordem inversa), use -r em conjunto com a opção -l.

-s <symbol-name>

Lista os dados da amostra específicos a um nome de símbolo. Por exemplo: o seguinte output é do comando oprofpp -s StandardReadRequestFromClient /usr/X11R6/bin/XFree86:

vma      samples  %           symbol name
080e1360 12       100         StandardReadRequestFromClient
080e1360 1        8.33333
080e137f 1        8.33333
080e13bb 1        8.33333
080e13f4 1        8.33333
080e13fb 1        8.33333
080e144a 1        8.33333
080e15aa 1        8.33333
080e1668 1        8.33333
080e1803 1        8.33333
080e1873 1        8.33333
080e190a 2        16.6667

A primeira linha é um resumo da combinação símbolo/executável.

A primeira coluna consiste dos endereços da memória virtual amostrados. A segunda coluna é o número de amostras do endereço da memória. A terceira coluna é a porcentagem das amostras do endereço da memória relativa ao número total de amostras do símbolo.

-L

Lista os dados da amostra por símbolos, com mais detalhes que a -l. Exemplo:

vma      samples  %           symbol name
08083630 2        1.51515     xf86Wakeup
 08083641 1        50
 080836a1 1        50
080b8150 1        0.757576    Ones
 080b8179 1        100
080b8fb0 2        1.51515     FlushClientCaches
 080b8fb9 1        50
 080b8fba 1        50
...

Os dados são os mesmos que da opção -l, exceto que, para cada símbolo, é exibido um endereço usado da memória virtual. Para cada endereço da memória virtual, são apresentados o número de amostras e a porcentagem de amostras realativa ao número total de amostras do símbolo.

-g <file-name>

Gera o output para um arquivo no formato gprof. Se o arquivo gerado tiver o nome gmon.out, o gprof pode ser usado para analisar os dados detalhadamente.. Consulte a página man do gprof para detalhes.

Veja a seguir outras opções para restringir os dados:

-f <file-name>

Usa o arquivo de amostra especificado <file-name>. Por default, o arquivo de amostra do /var/lib/oprofile/samples/ é usado. Use esta opção para especificar um arquivo de amostra de uma sessão anterior.

-i <file-name>

Use <file-name> como o nome do executável para o qual recuperar dados.

-d

Decodifica os nomes dos símbolos C++.

-D

Decodifica os nomes dos símbolos C++ e simplifica os nomes decodificados da biblioteca STL.

--counter <number>

Coleta informações de um contador específico. Caso não seja especificado, o contador default é 0.

-o

Exibe o número da linha no código fonte de cada amostra. O executável deve ser compilado, com a opção -g do GCC. Caso contrário, esta opção não pode exibir os números das linhas. Por default, nenhum dos executáveis do Red Hat Enterprise Linux são compilados com esta opção.

vma      samples  %      symbol name        linear info
0806cbb0 0        0      _start             ../sysdeps/i386/elf/start.S:47
-e <symbol-name>

Exclui a lista de símbolos separada por vírgulas do output.

-k

Apresenta uma coluna adicional contendo a biblioteca compartilhada. Esta opção produz resultados somente se a opção --separate=library do opcontrol é especificada ao configurar o OProfile e se a opção --dump-gprof-file não for usada em conjunto com esta.

-t <format>

Apresenta o output em uma ordem específica de colunas. Esta opção não pode ser usada com a -g.

Use as seguintes letras para representar as colunas:

LetraDecrição
vEndereço da memória virtual
sNúmero de amostras
SNúmero acumulado de amostras
pPorcentagem de amostras relativa ao número total de amostras do executável
PPorcentagem acumulativa de amostras relativa ao número total de amostras do executável
qPorcentagem de amostras relativa a todos os executáveis amostrados
QPorcentagem acumulada das amostras relativa a todos os executáveis amostrados
nNome do símbolo
lNome do arquivo do fonte e número da linha, incluindo a localidade completa
LNome base do arquivo do código fonte e número da linha
iNome do executável, incluindo a localidade completa
INome base do executável
dDetalhes da amostra
hExibe os cabeçalhos das colunas

Tabela 43-4. Letras para a Ordem das Colunas

--session <name>

Especifica a localidade completa da sessão ou de um diretório relativo ao diretório /var/lib/oprofile/samples/.

-p <path-list>

Especifica uma lista de localidades separadas por vírgulas, na qual localizam-se os executáveis a serem analisados.

43.5.3. Usando op_to_source

A ferramenta op_to_source tenta juntar as amostras para instruções específicas às linhas correspondentes no código fonte. Os arquivos resultantes gerados devem ter as amostras das linhas à esquerda. Também insere um comentário no começo de cada função, listando as amostras totais da função.

Para que este utilitário funcione, o executável deve ser compilado com a opção -g do GCC. Por default, os pacotes do Red Hat Enterprise Linux não são compilados com esta opção.

A sintaxe geral do op_to_source é a seguinte:

op_to_source --source-dir <src-dir> <executable>

O diretório contendo o código fonte e o executável a ser analisado deve ser especificado. Consulte a página man do op_to_source para ver uma lista das opções de linha de comando.

43.5.4. Usando o op_merge

Se há diversos arquivos de amostra para exatamente o mesmo executável ou biblioteca, os arquivos de amostra podem ser fundidos (merged) para facilitar a análise.

Por exemplo: para fundir arquivos da biblioteca /usr/lib/library-1.2.3.so, execute o seguinte comando como root:

op_merge /usr/lib/library-1.2.3.so

O arquivo resultante é /var/lib/oprofile/samples/}usr}lib}library-1.2.3.so.

Para limitar as amostras fundidas em um contador específico, use a opção -c seguida pelo número do contador.