43.2. Configurando o OProfile

Antes de rodar o OProfile é necessário configurá-lo. Você deve, no mínimo, selecionar monitorar o kernel (ou selecionar não monitorar o kernel). As seções seguintes descrevem como usar o utilitário opcontrol para configurar o OProfile. Conforme os comandos opcontrol são executados, as opções de configurações são salvas no arquivo /root/.oprofile/daemonrc.

43.2.1. Especificando o Kernel

Primeiro, configure se o OProfile deve monitorar o kernel. Esta é a única opção de configuração requisitada antes de iniciar o OProfile. Todas as outras são opcionais.

Para monitorar o kernel, execute o seguinte comando como root:

opcontrol --vmlinux=/boot/vmlinux-`uname -r`

Para configurar o OProfile para não monitorar o kernel, execute o seguinte comand como root:

opcontrol --no-vmlinux

Este comando também carrega o módulo oprofile do kernel (se já não estiver carregado) e cria o diretório /dev/oprofile/ se já não existe. Consulte a Seção 43.6 para obter detalhes sobre este diretório.

NotaNota
 

Mesmo se o OProfile está configurado para não perfilar o kernel, o kernel SMP ainda deve rodar para que o módulo oprofile possa ser carregado a partir dele.

Determinar se as amostras devem ser coletadas dentro do kernel, altera somente quais dados são coletados e não como ou onde os dados coletados são armazenados. Para gerar arquivos de amostra diferentes para as aplicações e bibliotecas do kernel, consulte a Seção 43.2.3.

43.2.2. Determinando os Eventos a Monitorar

A maioria dos processadores contém contadores, que são usados pelo OProfile para monitorar eventos específicos. Conforme observa-se na Tabela 43-2, o número de contadores disponíveis depende do processador.

Processadorcpu_typeNúmero de Contadores
Pentium Proi386/ppro2
Pentium IIi386/pii2
Pentium IIIi386/piii2
Pentium 4 (não-hyper-threaded)i386/p48
Pentium 4 (hyper-threaded)i386/p4-ht4
Athloni386/athlon4
AMD64x86-64/hammer4
Itaniumia64/itanium4
Itanium 2ia64/itanium24
TIMER_INTtimer1
IBM eServer iSeriestimer1
IBM eServer pSeriestimer1
IBM eServer S/390timer1
IBM eServer zSeriestimer1

Tabela 43-2. Processadores e Contadores do OProfile

Use a Tabela 43-2 para verificar se o tipo correto de processador foi detectado e para determinar o número de eventos que pode ser monitorado simultaneamente. O timer é usado como o tipo de processador se o processador não tiver hardware de monioramento de desempenho.

Se o timer é usado, os eventos não podem ser determinados para nenhum processador porque o hardware não suporta contadores de desempenho de hardware. Ao invés disso, a interrupção do timer é usada para o perfilamento.

Se o timer não é usado como o tipo processador, os eventos monitorados podem ser alterados, e o contador 0 do processador é determinado para um evento baseado na hora, por default. Se há mais de um contador no processador, os contadores além do contador 0 não são determinados para um evento, por default. Os eventos monitorados por default são apresentados na Tabela 43-3.

ProcessadorEvento Default para o Contador 0Decrição
Pentium Pro, Pentium II, Pentium III, Athlon, AMD64CPU_CLK_UNHALTEDO relógio do processador não é desligado (halted)
Pentium 4 (HT e não-HT)GLOBAL_POWER_EVENTSO tempo durante o qual o processador não é parado
Itanium 2CPU_CYCLESCiclos da CPU
TIMER_INT(nenhum)Amostra de cada interrupção do timer

Tabela 43-3. Eventos Default

O número de eventos que podem ser monitorados de uma vez é determinado pelo número de contadores do processador. Entretanto, esta não é uma correlação um-pra-um; em alguns processadores, determinados eventos devem ser mapeados para contadores específicos. Para determinar o número de contadores disponíveis, execute o seguinte comando:

cat /dev/oprofile/cpu_type

Os eventos disponíveis variam de acordo com o tipo de processador. Para determinar os eventos disponíveis para perfilamento, execute o seguinte comando como root (a lista é específica ao tipo de processador do sistema):

op_help

Os eventos de cada contador podem ser configurados através da linha de comando ou com uma interface gráfica. Se o contador não puder ser configurado para um evento específico, aparece uma mensagem de erro.

Para determinar o evento para cada contador configurável através da linha de comando, use o opcontrol:

opcontrol --ctrlN-event=<event-name>

Substitua N pelo número do contador (começando por 0) e substitua <event-name> pelo nome exato do evento, encontrado no op_help.

43.2.2.1. Taxa de Amostragem

Por default, é selecionado um conjunto de eventos baseados na hora. São criadas aproximadamente 2000 amostras por segundo por processador. Se a interrupção do timer for usada, é definido um timer igual à taxa instantânea (jiffy rate), que não pode ser definido pelo usuário. Se o cpu_type não é timer, cada evento pode ter uma taxa de amostragem definida. A taxa de amostragem é o número de eventos entre cada amostra instantânea.

Ao definir o evento para o contador, também é possível especificar uma taxa de amostragem:

opcontrol --ctrN-event=<event-name> --ctrN-count=<sample-rate>

Substitua <sample-rate> pelo número de eventos a aguardar antes de fazer o 'sampling' novamente. Quanto menor a contagem, mais frequentes as amostras. Para eventos que ocorrem esporadicamente, pode-se precisar de uma contagem menor para capturar as instâncias do evento.

CuidadoAtenção
 

Seja muito cuidadoso ao determinar as taxas de amostragem. A amostragem muito frequente pode sobrecarregar o sistema, fazendo com que ele pareça estar congelado (frozen) ou fazendo com que realmente congele.

43.2.2.2. Máscaras de Unidade (Unit Masks)

Se o cpu_type não é timer, as máscaras de unidade também podem ser necessárias para definir o evento posteriormente.

As máscaras de unidade de cada evento estão listadas no comando op_help. Os vores de cada máscara de unidade estão listadas no formato hexadecimal. Para especificar mais de uma máscara de unidade, os valores hexadecimais devem ser combinados usando uma operação 'bitwise', ou bit-a-bit.

opcontrol --ctrN-event=<event-name> --ctrN-count=<sample-rate> --ctrN-unit-mask=<value>

43.2.3. Separando os Perfis do Kernel e do Espaço do Usuário

Por default, as informações do modo kernel e do modo usuário são coletadas para cada evento. Para configurar o OProfile a não contar os eventos no modo kernel em um contador específico, execute o seguinte comando (onde N é o número do contador):

opcontrol --ctrN-kernel=0

Execute o segunte comando para iniciar novamente o perfilamento do modo do kernel para o contador:

opcontrol --ctrN-kernel=1

Para configurar o OProfile a não contar os eventos no modo usuário para um contador específico, execute o seguinte comando (onde N é o número do contador):

opcontrol --ctrN-user=0

Execute o seguinte comando para iniciar novamente o perfilamento do modo usuário para o contador:

opcontrol --ctrN-user=1

Quando o daemon do OProfile grava os dados do perfil nos arquivos de amostra, pode separar os dados do perfil da biblioteca e do kernel em arquivos de amostra separados. Para configurar como o daemon grava os arquivos de amostra, execute o seguinte comando como root:

opcontrol --separate=<choice>

<choice> pode ser uma das seguintes:

Se --separate=library é usada, o nome do arquivo de amostras inclui os nomes dos executáveis, assim como o nome da biblioteca.