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 o 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:
op_time
oprofpp
op_to_source
op_merge
Use estas ferramentas, juntamente aos binários perfilados, para gerar relatórios que podem ser analisados futuramente.
![]() | Atençã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 amostras assim como dos arquivos de amostra. |
As amostras de cada executável são gravadas em um único arquivo de amostra. As amostras de cada biblioteca ligada dinamicamente também são gravadas 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.
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.
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:
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.
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.
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.
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:
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.
Use <file-name> como o nome do executável para o qual recuperar dados.
Decodifica os nomes dos símbolos C++.
Decodifica os nomes dos símbolos C++ e simplifica os nomes decodificados da biblioteca STL.
Coleta informações de um contador específico. Caso não seja especificado, o contador default é 0.
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 |
Exclui a lista de símbolos separada por vírgulas do output.
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.
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:
Letra | Decrição |
---|---|
v | Endereço da memória virtual |
s | Número de amostras |
S | Número acumulado de amostras |
p | Porcentagem de amostras relativa ao número total de amostras do executável |
P | Porcentagem acumulativa de amostras relativa ao número total de amostras do executável |
q | Porcentagem de amostras relativa a todos os executáveis amostrados |
Q | Porcentagem acumulada das amostras relativa a todos os executáveis amostrados |
n | Nome do símbolo |
l | Nome do arquivo do código fonte e número da linha, incluindo a localidade completa |
L | Nome base do arquivo do código fonte e número da linha |
i | Nome do executável, incluindo a localidade completa |
I | Nome base do executável |
d | Detalhes da amostra |
h | Exibe os cabeçalhos das colunas |
Tabela 43-4. Letras para a Ordem das Colunas
Especifica a localidade completa da sessão ou de um diretório relativo ao diretório /var/lib/oprofile/samples/.
Especifica uma lista de localidades separadas por vírgulas, na qual localizam-se os executáveis a serem analisados.
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.
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.