Condividi tramite


2. Definizioni di sistema e provider di eventi

I profili di registrazione di Windows Performance Recorder (WPR) vengono archiviati in un file XML con estensione wprp. Una definizione del provider di sistema specifica le parole chiave di sistema, gli stack e i tag del pool di memoria nel file wprp.

Definizione del provider

Gli elementi nel file con estensione wprp devono essere definiti nell'ordine seguente:

  1. Tutti gli agenti di raccolta

  2. Provider di sistema

  3. Provider di eventi

  4. Provider heap, se presenti

  5. Tutti i profili

In alcuni casi, i provider possono essere definiti in, invece di prima, la definizione del profilo. Ad esempio:

<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>

Provider di sistema

L'unico attributo obbligatorio per una definizione del provider di sistema è ID. I tag XML interni specificano le parole chiave, gli stack e i tag del pool da abilitare. Per gli elenchi di tutte le parole chiave e gli stack supportati, vedere Stack e Keyword (in SystemProvider).

Nell'esempio di codice seguente viene illustrata una definizione del provider di 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>

Provider di eventi

Una definizione del provider di eventi specifica il provider Event Tracing for Windows (ETW) da usare e le parole chiave e i livelli da abilitare. Una definizione del provider di eventi richiede un attributo Name obbligatorio e un attributo Id obbligatorio.

L'attributo Name specifica uno dei nomi seguenti:

  • Nome di un provider Crimson registrato, ad esempio "Microsoft-Windows-Search-Core".

  • GUID del provider, ad esempio "49c2c27c-fe2d-40bf-8c4e-c3fb518037e7".

  • Nome di un provider precedente, ad esempio "Internet Explorer6".

  • Nome del caso speciale, ad esempio "PerfTrack" o "DotNetProvider".

È possibile usare gli attributi facoltativi seguenti per ottimizzare i parametri del provider:

  • Stack: indica se il provider acquisisce gli stack. L'impostazione predefinita è "false".

  • Livello: specifica il livello di registrazione ETW. L'impostazione predefinita è 0xFF.

  • NonPagedMemory: indica se WPR usa memoria non di paging per il buffer per questo provider. L'impostazione predefinita è "false".

    Avviso Alcuni provider di eventi di Windows richiedono l'uso di memoria non in pagine durante l'acquisizione di traccia. Un esempio di provider di eventi che richiede NonPagedMemory è EventProvider_Microsoft-Windows-Win32k.

  • CaptureStateOnly: se impostato su "true", indica che WPR abilita questo provider solo nello stato di acquisizione specificato.

  • SID: specifica se i dati estesi degli eventi registrati includono l'identificatore di sicurezza (SID) dell'utente.

  • TSID: se impostato su "true", specifica l'identificatore di sessione del terminale per i dati estesi degli eventi registrati.

I tag XML interni facoltativi specificano le parole chiave da abilitare. A differenza dei provider di sistema, i provider di eventi non hanno costanti testuali definite. Pertanto, i provider di eventi hanno valori esadecimali. Tuttavia, la sintassi è uguale a quella dei provider di sistema. Se non si specificano parole chiave, il valore predefinito è 0xFFFFFFFFFFFFFFFF.

Provider di eventi heap

La definizione del provider heap specifica l'identificatore del processo per il quale WPR acquisisce gli eventi dell'heap. ID è l'unico attributo obbligatorio. L'elemento figlio HeapProcessId non è obbligatorio. Questo elemento specifica l'attributo ID processo del processo da analizzare. L'esempio seguente illustra come farlo.

<HeapEventProvider
  Id="Base_Heap_Provider">
</HeapEventProvider>
<HeapEventProvider
  Base="Base_Heap_Provider"
  Id="Derived_Heap_Provider">
  <HeapProcessIds Operation="Set">
    <HeapProcessId Value="2314"/>
  </HeapProcessIds>
</HeapEventProvider>

Provider di acquisizione dello stato

A differenza dei normali provider abilitati nell'intera sessione di traccia, i provider di stato di acquisizione vengono abilitati solo quando si salva o si avvia una sessione di acquisizione. L'esempio seguente mostra sia i provider normali che i provider di stato di acquisizione.

<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>

Esempio

L'esempio di codice seguente definisce due provider di eventi.

<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"/>

Creazione di profili di registrazione

1. Definizioni dell'agente di raccolta

3. Definizioni di profilo

SystemProvider

EventProvider

HeapEventProvider

Parola chiave (in SystemProvider)

Tra elementi sovrapposti

PoolTag