Fornecedores CLR ETW
O runtime de linguagem comum (CLR) tem dois fornecedores: o fornecedor de runtime e o fornecedor de rundown.
O fornecedor de runtime gera eventos, consoante as palavras-chave (categorias de eventos) que estão ativadas. Por exemplo, pode recolher eventos do carregador ao ativar a LoaderKeyword
palavra-chave.
Os eventos de Rastreio de Eventos para Windows (ETW) são registados num ficheiro que tem uma extensão .etl, que pode ser posteriormente processada em ficheiros de valores separados por vírgulas (.csv), conforme necessário. Para obter informações sobre como converter o ficheiro .etl num ficheiro .csv, consulte Controlar o Registo de .NET Framework.
O Fornecedor de Runtime
O fornecedor de runtime é o principal fornecedor de CLR ETW.
O GUID do fornecedor de runtime clR é e13c0d23-ccbc-4e12-931b-d9cc2eee27e4.
Para obter exemplos de como registar e ver eventos CLR ETW com ferramentas normalmente disponíveis, veja Controling .NET Framework Logging (Controlar o Registo de .NET Framework).
Além de utilizar palavras-chave como LoaderKeyword
, poderá ter de ativar palavras-chave para eventos de registo que podem ser gerados com demasiada frequência. As StartEnumerationKeyword
palavras-chave e EndEnumerationKeyword
ativam estes eventos e são resumidas em Palavras-chave e Níveis DO CLR ETW.
O Fornecedor de Rundown
O fornecedor de rundown tem de estar ativado para determinadas utilizações para fins especiais. No entanto, para a maioria dos utilizadores, o fornecedor de runtime deve ser suficiente.
O GUID do fornecedor de rundown CLR é A669021C-C450-4609-A035-5AF59AF4DF18.
Normalmente, o registo ETW é ativado antes do início de um processo e o registo é desativado após a saída do processo. No entanto, se o registo ETW estiver ativado durante a execução do processo, são necessárias informações adicionais sobre o processo. Por exemplo, para a resolução de símbolos, tem de registar eventos do método para métodos que já foram carregados antes de o registo ser ativado.
Os DCStart
eventos e DCEnd
capturam o estado do processo quando a recolha de dados foi iniciada e parada. (Estado refere-se a informações a um nível elevado, incluindo os métodos que já eram compilados just-in-time (JIT) e assemblagens que foram carregadas.) Estes dois eventos podem fornecer informações sobre o que já aconteceu no processo; por exemplo, que métodos foram compilados pelo JIT, etc.
Apenas os eventos com DC
, DCStart
, DCEnd
ou DCInit
nos respetivos nomes são gerados no fornecedor de rundown. Além disso, estes eventos são gerados apenas no fornecedor de rundown.
Além dos filtros de palavra-chave do evento, o fornecedor de rundown também suporta as StartRundownKeyword
palavras-chave e EndRundownKeyword
para fornecer filtragem direcionada.
Iniciar Rundown
É acionado um rundown inicial quando o registo no fornecedor de rundown é ativado com a StartRundownKeyword
palavra-chave . Isto faz com que o DCStart
evento seja gerado e captura o estado do sistema. Antes do início da enumeração, o DCStartInit
evento é gerado. No final da enumeração, o DCStartComplete
evento é gerado para notificar o controlador de que a recolha de dados terminou normalmente.
End Rundown
É acionado um resumo final quando o registo no fornecedor de rundown é ativado com a EndRundownKeyword
palavra-chave . O rundown final para a criação de perfis num processo que continua a ser executado. Os DCEnd
eventos capturam o estado do sistema quando a criação de perfis é parada.
Antes do início da enumeração, o DCEndInit
evento é gerado. No final da enumeração, o DCEndComplete
evento é gerado para notificar o consumidor de que a recolha de dados terminou normalmente. O rundown inicial e o rundown final são utilizados principalmente para a resolução de símbolos geridos. O rundown de início pode fornecer informações sobre o intervalo de endereços para métodos que já eram compilados pelo JIT antes do início da sessão de criação de perfis. O rundown final pode fornecer informações de intervalo de endereços para todos os métodos que foram compilados com JIT quando a criação de perfis está prestes a ser desativada.
O resumo final não ocorre automaticamente quando uma sessão de criação de perfis é parada. Em vez disso, uma ferramenta que procura executar a resolução de símbolos geridos tem de invocar explicitamente uma sessão de fornecedor de rundown CLR com a EndRundownKeyword
palavra-chave ativada, imediatamente antes de a criação de perfis ser interrompida.
Embora o rundown inicial ou o rundown final possam fornecer informações do intervalo de endereços do método para a resolução de símbolos geridos, recomendamos que utilize a EndRundownKeyword
palavra-chave (que fornece eventos DCEnd
) em vez da StartRundownKeyword
palavra-chave (que fornece eventos DCStart
). A utilização StartRundownKeyword
faz com que o resumo ocorra durante a sessão de criação de perfis, o que pode perturbar o cenário de criação de perfis.
Recolha de Dados ETW Com Fornecedores de Runtime e Rundown
O exemplo seguinte demonstra como utilizar o fornecedor de rundown CLR de uma forma que permite a resolução de símbolos de processos geridos com um impacto mínimo, independentemente de os processos começarem ou terminarem dentro ou fora da janela de criação de perfis.
Ative o registo ETW com o fornecedor de runtime CLR:
xperf -start clr -on e13c0d23-ccbc-4e12-931b-d9cc2eee27e4:0x1CCBD:0x5 -f clr1.etl
O registo será guardado no ficheiro clr1.etl.
Para parar a criação de perfis enquanto o processo continua a ser executado, inicie o fornecedor de rundown para capturar os
DCEnd
eventos:xperf -start clrRundown -on A669021C-C450-4609-A035-5AF59AF4DF18:0xB8:0x5 -f clr2.etl
Isto permite que a coleção de
DCEnd
eventos inicie uma sessão de resumo. Poderá ter de aguardar entre 30 a 60 segundos para que todos os eventos sejam recolhidos. O registo será guardado no ficheiro clr1.et2.Desative toda a criação de perfis ETW:
xperf -stop clrRundown xperf -stop clr
Intercale os perfis para criar um ficheiro de registo:
xperf -merge clr1.etl clr2.etl merged.etl
O ficheiro merged.etl irá conter os eventos do runtime e as sessões do fornecedor de rundown.
Uma ferramenta pode executar os passos 2 e 3 (iniciar uma sessão de rundown e, em seguida, terminar a criação de perfis) em vez de desativar imediatamente a criação de perfis quando um utilizador pedir a paragem da criação de perfis. Uma ferramenta também pode executar o passo 4.