2. Definições do sistema e do provedor de eventos
Os perfis de gravação do WPR (Gravador de Desempenho do Windows) são armazenados em um arquivo XML que tem uma extensão .wprp. Uma definição de provedor do sistema especifica as palavras-chave do sistema, as pilhas e as marcas do pool de memória no arquivo .wprp.
Definição do provedor
Os itens no arquivo .wprp devem ser definidos na seguinte ordem:
Todos os coletores
Provedores de sistema
Provedores de eventos
Provedores de heap, se presentes
Todos os perfis
Em alguns casos, os provedores podem ser definidos em, em vez de antes, na definição de perfil. Por exemplo:
<EventCollector Id="Collector1" Name="Sample Event Collector">
<BufferSize Value="128"/>
<Buffers Value="64"/>
</EventCollector>
<Profile Id="Sample.Verbose.File" Name="Sample" Description="Sample profile" DetailLevel="Verbose" LoggingMode="File">
<Collectors>
<EventCollectorId Value="Collector1">
<EventProviders>
<EventProvider Id="EventProvider_Microsoft-Windows-Kernel-Power" Name="Microsoft-Windows-Kernel-Power" NonPagedMemory="true">
<Keywords>
<Keyword Value="0x4"/>
</Keywords>
</EventProvider>
</EventProviders>
</EventCollectorId>
</Collectors>
</Profile>
Provedores de sistema
O único atributo obrigatório para uma definição de provedor de sistema é id. As marcas XML internas especificam as palavras-chave, pilhas e marcas de pool a serem habilitadas. Para obter listas de todas as palavras-chave e pilhas com suporte, consulte Stack e Keyword (em SystemProvider).
O exemplo de código a seguir mostra uma definição de provedor do sistema.
<SystemProvider
Id="system-provider">
<Keywords>
<Keyword
Value="ProcessThread"/>
<Keyword
Value="Loader"/>
<Keyword
Value="CSwitch"/>
</Keywords>
<Stacks>
<Stack
Value="ThreadCreate"/>
<Stack
Value="ReadyThread"/>
<Stack
Value="CSwitch"/>
</Stacks>
<PoolTags>
<PoolTag
Value="a*"/>
<PoolTag
Value="b*"/>
<PoolTag
Value="c*"/>
<PoolTag
Value="d*"/>
</PoolTags>
</SystemProvider>
Provedores de Eventos
Uma definição de provedor de eventos especifica o provedor ETW (Rastreamento de Eventos para Windows) a ser usado e as palavras-chave e níveis a serem habilitados. Uma definição de provedor de eventos requer um atributo Name obrigatório e um atributo de ID obrigatório.
O atributo Name especifica um dos seguintes nomes:
O nome de um provedor Carmesim registrado, como "Microsoft-Windows-Search-Core".
O GUID do provedor, como "49c2c27c-fe2d-40bf-8c4e-c3fb518037e7".
O nome de um provedor anterior, como "IE6".
O nome de caso especial, como "PerfTrack" ou "DotNetProvider".
Você pode usar os seguintes atributos opcionais para ajustar os parâmetros do provedor:
Pilha: indica se o provedor captura pilhas. A configuração padrão é "false".
Nível: especifica o nível de log do ETW. A configuração padrão é 0xFF.
NonPagedMemory: indica se o WPR usa memória não paginada para o buffer para esse provedor. A configuração padrão é "false".
Aviso Alguns provedores de eventos do Windows exigem o uso de memória nãopagada durante a captura de rastreamento. Um exemplo de um provedor de eventos que requer NonPagedMemory é
EventProvider_Microsoft-Windows-Win32k
.CaptureStateOnly: se definido como "true", indica que o WPR habilita esse provedor somente no estado de captura especificado.
SID: especifica se os dados estendidos de eventos registrados incluem o SID (identificador de segurança) do usuário.
TSID: se definido como "true", especifica o identificador de sessão do terminal para dados estendidos de eventos registrados.
As marcas XML internas opcionais especificam as palavras-chave a serem habilitadas. Ao contrário dos provedores de sistema, os provedores de eventos não têm constantes textuais definidas. Portanto, os provedores de eventos têm valores hexadecimal. No entanto, a sintaxe é a mesma dos provedores de sistema. Se você não especificar palavras-chave, o valor padrão será 0xFFFFFFFFFFFFFFFF.
Provedores de eventos heap
A definição do provedor de heap especifica o identificador de processo do processo para o qual o WPR captura eventos de heap. Id é o único atributo obrigatório. O elemento filho HeapProcessId não é obrigatório. Esse elemento especifica o atributo ID do processo que você deseja analisar. O exemplo a seguir mostra como fazer isso.
<HeapEventProvider
Id="Base_Heap_Provider">
</HeapEventProvider>
<HeapEventProvider
Base="Base_Heap_Provider"
Id="Derived_Heap_Provider">
<HeapProcessIds Operation="Set">
<HeapProcessId Value="2314"/>
</HeapProcessIds>
</HeapEventProvider>
Provedores de estado de captura
Ao contrário dos provedores regulares habilitados em toda a sessão de rastreamento, os provedores de estado de captura são habilitados somente quando você salva ou inicia uma sessão de captura. O exemplo a seguir mostra provedores regulares e de estado de captura.
<EventProvider Id="sample-provider" Name="SampleProvider" NonPagedMemory="true" Level="5">
<Keywords>
<Keyword Value="0x98"/> <!-- Provider is enabled with these keywords throughout the tracing session. -->
</Keywords>
<CaptureStateOnStart>
<Keyword Value="0xff4"/> <!-- Provider is enabled with these keywords when tracing is started. -->
</CaptureStateOnStart>
<CaptureStateOnSave>
<Keyword Value="0x118"/> <!-- Provider is enabled with these keywords when tracing is saved. -->
</CaptureStateOnSave>
</EventProvider>
<EventProvider Id="EventProvider_DWMWin32k_CaptureState" Name="e7ef96be-969f-414f-97d7-3ddb7b558ccc" NonPagedMemory="true" CaptureStateOnly="true" >
<!-- CaptureStateOnly="true" means provider is not enabled throughout the tracing session. -->
<CaptureStateOnSave>
<Keyword Value="0x80000"/> <!-- Provider is enabled with these keywords when tracing is saved. -->
</CaptureStateOnSave>
</EventProvider>
Exemplo
O exemplo de código a seguir define dois provedores de eventos.
<EventProvider
Id="Win32K-provider"
Name="Microsoft-Windows-Win32K"
NonPagedMemory="true"
Stack="true">
<Keywords>
<Keyword
Value="0x240000"/>
</Keywords>
</EventProvider>
<EventProvider
Id="Search-Core-provider"
Name="Microsoft-Windows-Search-Core"/>