Recurso de rastreio
A instalação de rastreio ajuda a isolar problemas do sistema, monitorando eventos de sistema selecionados ou processos selecionados. Os eventos que podem ser monitorados incluem: entrada e saída para subroutines selecionadas, rotinas de kernel, rotinas de extensão do kernel e interruptores de interrupção.
O trace também pode ser restrito para rastrear um conjunto de processos ou threads em execução, ou pode ser usado para iniciar e rastrear um programa.
Quando a instalação de rastreio está ativa, as informações são registradas em um arquivo de log de rastreio do sistema. A instalação de rastreio inclui comandos para ativação e controle de rastreios e geração de relatórios de rastreio. Aplicativos e extensões de kernel podem usar várias subroutines para registrar eventos adicionais.
Para mais informações sobre a instalação de rastreio, consulte o seguinte:
A visão geral do recurso de rastreio
O recurso de rastreio está no conjunto de arquivos bos.sysmgt.trace Para ver se esse conjunto de arquivos está instalado, digite o seguinte na linha de comando:
lslpp -l | grep bos.sysmgt.trace
Se for produzida uma linha que inclua bos.sysmgt.trace , o conjunto de arquivos será instalado, caso contrário, será necessário instalá-lo..
O recurso de rastreio do sistema registra eventos de rastreio que podem ser formatados posteriormente pelo comando trace report. Os eventos de rastreio são compilados em kernel ou código de aplicação, mas são rastreados apenas se o rastreio estiver ativo.
O rastreio é ativado com o comando trace ou o subroutine trcstart . O rastreio é interrompido com o comando trcstop ou o subroutine trcstop . Enquanto ativo, o rastreio pode ser suspenso ou retomado com os comandos trcoff e trcon , ou os subroutines trcoff e trcon .
Uma vez que o rastreio foi interrompido com trcstop, um relatório de rastreio pode, então, ser gerado com o comando trcrpt . Este comando usa um arquivo de template, /etc/trcfmt, para saber como formatar as entradas. Os modelos são instalados com o comando trcupdate . Para uma discussão dos modelos, consulte o comando trcupdate .
Controlando o rastreio
O comando trace inicia o rastreio de eventos do sistema e controla o buffer de rastreio e os tamanhos de arquivo de log.
Existem três métodos de coleta de dados de rastreio.
- O método padrão é usar 2 buffers para coletar continuamente os dados de rastreio, escrevendo um buffer enquanto os dados estão sendo colocados no outro buffer. O arquivo de log agrupa quando ele fica cheio.
- O método circular reúne dados de rastreio continuamente, mas apenas grava os dados no arquivo de log quando o rastreio é interrompido. Isso é particularmente útil para depurar um problema em que você sabe quando o problema está acontecendo e você só quer capturar os dados naquele momento. Você pode iniciar o rastreio a qualquer momento, e então pará-lo logo após o problema ocorrer e você terá capturado os eventos em torno do problema. Este método é ativado com a sinalização do daemon de rastreio -l .
- A terceira opção utiliza apenas um buffer de rastreio, e quita o rastreio quando esse buffer preenche, e grava o buffer no arquivo de log. O rastreio não é interrompido neste ponto, em vez disso, o rastreio é desligado como se um comando trcoff tivesse sido emitido. Neste ponto você geralmente irá desejar parar o rastreio com o comando trcstop . Esta opção é mais frequentemente usada para reunir dados de desempenho onde não queremos traço para fazer eu / o ou buffer swapping até que os dados tenham sido reunidos. Use a sinalização -f para ativar esta opção.
Geralmente você vai querer executar o comando trace de forma assíncrona, em outras palavras, você quer entrar no comando trace e depois continuar com outros trabalhos. Para executar o rastreio de forma assíncrona, use o sinalizador -a ou a bandeira -x . Se você usar a bandeira -a , você deve então parar o rastreio com o comando trcstop . Se você usar a sinalização -x , trace automaticamente parar quando o programa terminar.
Geralmente é desejável limitar as informações que são rastreadas. Use os sinalizadores -j events ou -k events para especificar um conjunto de eventos para incluir (-j) ou excluir (-k).
Para exibir os nomes do programa associados aos ganchos de rastreio, certos ganchos devem estar habilitados. Estes são especificados usando o grupo de eventos de rastreio tidhk . Por exemplo, se você quiser rastrear o gancho mbuf , 254, e mostrar nomes de programas também, você precisa executar trace da seguinte forma:
trace -aJ tidhk -j 254
O rastreio ocorre. Para parar o rastreio, digite o seguinte em uma linha de comando:
trcstop
trcrpt -O exec=on
A opção de trcrpt -O exec=on mostra os nomes do programa, veja o comando trcrpt para obter mais informações.
Muitas vezes é desejável especificar o tamanho do buffer e o tamanho máximo do arquivo de log. Os buffers de rastreio requerem memória real para estar disponível para que nenhuma paginação seja necessária para gravar ganchos de rastreio. O arquivo de log irá preencher para o tamanho máximo especificado e, em seguida, enrole, descartando os dados de rastreio mais antigos. As bandeiras -T size e -L size especificam o tamanho dos buffers de memória e o tamanho máximo dos dados de rastreio no arquivo de log em bytes.
O rastreio também pode ser controlado a partir de um aplicativo. Veja os artigos trcstarte trcstop .
Gravação de dados de eventos de rastreio
Existem dois tipos de dados de rastreio.
- dados genéricos
- consiste em uma palavra de dados, um buffer de dados opacos e o comprimento de dados opacos. Isso é útil para rastrear itens como nomes de caminhos. Veja o artigo Generic Trace Canais na Visão Geral da Trace Facility. Ele pode ser encontrado em Trace Facility.Nota: Rastreamento de processos ou threads específicos é suportado apenas para o canal 0. Ele não é suportado para canais de rastreio genéricos.
- Dados não genéricos
- Isso é o que normalmente é rastreado pelo sistema operacional AIX. Cada entrada deste tipo consiste em uma palavra gancho e até 5 palavras de dados de rastreio. Para um aplicativo de 64-bit estas são 8-byte palavras. O programador C deve utilizar as macros TRCHKL0 através do TRCHKL5, e TRCHKL0T através do TRCHKL5T definido no arquivo /usr/include/sys/trcmacros.h , para registrar dados não genéricos. Se estas macros não puderem ser usadas, veja o artigo sobre a subroutine utrchook .
Gerar um relatório de rastreio
Veja o artigo de comando trcrpt para uma descrição completa de trcrpt. Este comando é usado para gerar um relatório de rastreio legível a partir do arquivo de log gerado pelo comando trace . Por padrão os formatos de comandos datados do arquivo de log padrão, /var/adm/ras/trcfile. A saída trcrpt é escrita para saída padrão.
Para gerar um relatório de rastreio a partir do arquivo de log padrão, e escreva-o em /tmp/rptout, digite
trcrpt>/tmp/rptout
Para gerar um relatório de rastreio a partir do arquivo de log /tmp/tlog para /tmp/rptout, que inclui nomes de programas e nomes de chamadas de sistema, use
trcrpt -O exec=on,svc=on /tmp/tlog /tmp/rptout
Extraindo dados de rastreio de um dump
Se o trace estava ativo quando o sistema leva um dump, o rastreio geralmente pode ser recuperado com o comando trcdead . Para evitar sobrescrever o arquivo de log de rastreio padrão no sistema atual, use a opção -o output-file .
Por exemplo:
trcdead -o /tmp/tlog /var/adm/ras/vmcore.0
cria um arquivo de log de rastreio /tmp/tlog que pode, então, ser formatado com o seguinte:
trcrpt /tmp/tlog
Rastrear comandos de instalação
Os seguintes comandos fazem parte da instalação de rastreio:
| Comando | Função |
|---|---|
| rastro | Inicia o rastreio de eventos do sistema. Com este comando, é possível controlar o tamanho e gerenciar o arquivo de log de rastreio, bem como os buffers de rastreio internos que coletam dados de eventos de rastreio. |
| trcdead | Extrai informações de rastreio de um dump do sistema. Se o sistema interrompe enquanto as instalações de rastreio estão ativas, o conteúdo dos buffers de rastreio interno são capturados. Este comando extrai os dados do evento de rastreio do dump e grava-o no arquivo de log de rastreio. |
| trcnm | Gera uma lista de nomes de kernel usada pelo comando trcrpt . Uma lista de nomes de kernel é composta por uma tabela de símbolos e uma tabela de símbolo do carregador de um arquivo objeto. O comando trcrpt usa o arquivo de lista de nomes do kernel para interpretar endereços ao formatar um relatório a partir de um arquivo de log de rastreio. Nota: É recomendado que você use a opção -n trace em vez de trcnm. Isso coloca informações de lista de nomes no arquivo de log de rastreio em vez de um arquivo separado, e inclui símbolos de extenções de kernel.
|
| trcrpt | Formata relatórios de dados de eventos de rastreio contidos no arquivo de log de rastreio. Você pode especificar os eventos a serem incluídos (ou omitidos) no relatório, bem como determinar a apresentação da saída com este comando. O comando trcrpt usa os modelos de formatação de rastreio armazenados no arquivo /etc/trcfmt para determinar como interpretar os dados registrados para cada evento. |
| trcstop | Pára o rastreio de eventos do sistema. |
| trcupdate | Atualiza os modelos de formatação de rastreio armazenados no arquivo /etc/trcfmt . Ao adicionar aplicativos ou extensões de kernel que registram eventos de rastreio, os modelos para estes eventos devem ser adicionados ao arquivo /etc/trcfmt . O comando trcrpt utilizará os modelos de formatação de rastreio para determinar como interpretar os dados registrados para cada evento. Produtos de software que registram eventos geralmente executam o comando trcupdate como parte do processo de instalação. |
Rastrear chamadas e subroutines
As chamadas e subroutines a seguir fazem parte da instalação de rastreio:
| Sub-rotina | Descrição |
|---|---|
| trcgen, trcgent | Registra eventos de rastreio de mais de cinco palavras de dados. O subroutine trcgen pode ser usado para gravar um evento como parte do rastreio de eventos do sistema (trace canal 0) ou para gravar um evento em um canal de rastreio genérico (canais 1 1). Especifique o número do canal em um parâmetro subroutine quando você gravar o evento de rastreio. A subroutine trcgent anexa um selo de hora aos dados do evento. Ao usar o AIX 5L Versão 5.3 com o Nível de Tecnologia 5300-05 e superior, o registro de data e hora é sempre anexado aos dados do evento, independentemente da sub-rotina usada Use trcgenk e trcgenkt no kernel. Os programadores C devem sempre utilizar as macros TRCGEN e TRCGENK . |
| utrchook, utrchook64 | Registra eventos de rastreio de até cinco palavras de dados. Estas subroutines podem ser usadas para gravar um evento como parte do rastreio de eventos do sistema (trace canal 0). Programadores de kernel podem usar trchook e trchook64. Os programadores C devem sempre usar o TRCHKL0 - TRCHKL5 e TRCHKL0T -TRCHKL5T macros. Se você não estiver usando essas macros, você precisa construir sua própria palavra de gancho de rastreio. O formato é documentado com o arquivo /etc/trcfmt . Observe que os traços de 32-bit e 64-bit possuem formatos de palavra gancho diferentes. |
| trcoff | Suspende a coleta de dados de rastreio no canal de rastreio de eventos do sistema (canal 0) ou em um canal de rastreio genérico (1 até 7). O canal de rastreio permanece ativo e a coleta de dados de rastreio pode ser retomada usando a subroutina do trcon . |
| trcon | Inicia a coleta de dados de rastreio em um canal de rastreio. O canal pode ser o canal de rastreio de eventos do sistema (0) ou um canal genérico (1 até 7). O canal de rastreio, no entanto, deve ter sido ativado anteriormente usando o comando trace ou o subroutine trcstart . Você pode suspender a coleta de dados de rastreio usando a subroutine trcoff . |
| trcstart | Fornece uma interface de biblioteca para o comando trace. Ele retorna o número do canal do rastreio que ele inicia. Se um canal genérico for solicitado, o número do canal é um dos seguintes números: 1,2,3,4,5,6, 7. Caso contrário, o número do canal é 0. |
| trcstop | Freia e desativa um canal de rastreio genérico. |
Rastrear arquivos de instalação
| Arquivo | Descrição |
|---|---|
| /etc/trcfmt | Contém os modelos de formatação de rastreio utilizados pelo comando trcrpt para determinar como interpretar os dados registrados para cada evento. |
| /var/adm/ras/trcfile | Contém o arquivo de log de rastreio padrão. O comando trace permite que você especifique um arquivo de log de rastreio diferente. |
| /usr/include/sys/trchkid.h | Contém definições identificador de gancho de rastreio. |
| /usr/include/sys/trcmacros.h | Contém macros comumente usados para gravação de eventos de rastreio. |
Rastrear dados do evento
Veja o arquivo /etc/trcfmt para o formato dos dados do evento de rastreio.
Rastrear identificadores de gancho
hhh00000onde hhh é o id do gancho.hhhh0000onde hhhh é o id do gancho.Um identificador de três dígitos tem um implícito 0 em seu dígito menos significativo para que um identificador de gancho de 32-bit seja equivalente a um gancho de 64-bit do formulário hhh0.
A maioria dos identificadores de gancho de rastreio são definidos no arquivo /usr/include/sys/trchkid.h . Os valores 0x0100 através do 0x0FF0 estão disponíveis para uso por 64-bit aplicativos de usuário. Os valores 0x010 através do 0x0FF estão disponíveis para uso por 32-bit aplicativos de usuário. Todos os outros valores são reservados para uso do sistema. Os identificadores de gancho de rastreamento definidos atualmente podem ser listados usando o comando trcrpt -j.
Rastrear canais de rastreio genéricos de instalação
A instalação de rastreio suporta até oito sessões de rastreio ativas por vez. Cada sessão de rastreio usa um canal do arquivo especial de rastreio multiplexado, /dev/systrace. O canal 0 é usado pela facilidade de rastreio para registrar eventos do sistema. O rastreio de eventos do sistema é iniciado e interrompido pelos comandos trace e trcstop . Se você traçar processos ou threads específicos, ou se um programa é rastreado, apenas o canal 0 é usado. Os canais 1 até 7 são referidos como canais de rastreio genéricos e só podem ser utilizados por subsistemas para outros tipos de rastreio, como rastreio de link de dados.
Para implementar o rastreio usando os canais de rastreio genéricos da instalação de rastreio, um subsistema chama a subroutine trcstart para ativar um canal de rastreio e determinar o número do canal. Os módulos do subsistema podem então registrar eventos de rastreio usando as macros TRCGEN ou TRCGENT , ou se necessário, trcgen, trcgent, trcgenk, ou trcgenkt subroutine. O número do canal retornado pela subroutine trcstart é um dos parâmetros que devem ser passados para essas subroutines. O subsistema pode suspender e retomar a coleta de dados de rastreio usando as subroutines trcoff e trcon e pode desativar um canal de rastreio usando a subroutine trcstop . O subsistema deve fornecer a interface do usuário para ativar e desativar o rastreio do subsistema.
Os IDs de gancho de rastreio, a maioria dos quais são armazenados no arquivo /usr/include/sys/trchkid.h , e os modelos de formatação de rastreamento, que são armazenados no arquivo /etc/trcfmt , são compartilhados por todos os canais de rastreio.