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.
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 comando 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.
![]() | Nota |
---|---|
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.
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.
Processador | cpu_type | Número de Contadores |
---|---|---|
Pentium Pro | i386/ppro | 2 |
Pentium II | i386/pii | 2 |
Pentium III | i386/piii | 2 |
Pentium 4 (não-hyper-threaded) | i386/p4 | 8 |
Pentium 4 (hyper-threaded) | i386/p4-ht | 4 |
Athlon | i386/athlon | 4 |
AMD64 | x86-64/hammer | 4 |
Itanium | ia64/itanium | 4 |
Itanium 2 | ia64/itanium2 | 4 |
TIMER_INT | timer | 1 |
IBM eServer iSeries | timer | 1 |
IBM eServer pSeries | timer | 1 |
IBM eServer S/390 | timer | 1 |
IBM eServer zSeries | timer | 1 |
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.
Processador | Evento Default para o Contador 0 | Decrição |
---|---|---|
Pentium Pro, Pentium II, Pentium III, Athlon e AMD64 | CPU_CLK_UNHALTED | O relógio do processador não é desligado (halted) |
Pentium 4 (HT e não-HT), Intel® EM64T | GLOBAL_POWER_EVENTS | O tempo durante o qual o processador não é parado |
Itanium 2 | CPU_CYCLES | Ciclos 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.
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.
![]() | Atençã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. |
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 valores de cada máscara de unidade estão listados 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> |
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 seguinte 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:
none — não separa os perfis (default)
library — gera perfis por aplicação para as bibliotecas
kernel — gera perfis por aplicação para o kernel e seus módulos
all — gera perfis por aplicação para as bibliotecas e perfis por aplicação para o kernel e seus módulos
Se --separate=library é usada, o nome do arquivo de amostras inclui os nomes dos executáveis, assim como o nome da biblioteca.