Share via


2. Définitions du système et du fournisseur d’événements

Les profils d’enregistrement WPR (Windows Performance Recorder) sont stockés dans un fichier XML qui a une extension .wprp. Une définition de fournisseur système spécifie les mots clés système, les piles et les balises de pool de mémoire dans le fichier .wprp.

Définition du fournisseur

Les éléments du fichier .wprp doivent être définis dans l’ordre suivant :

  1. Tous les collecteurs

  2. Fournisseurs système

  3. Fournisseurs d’événements

  4. Fournisseurs de tas, le cas échéant

  5. Tous les profils

Dans certains cas, les fournisseurs peuvent être définis dans, plutôt qu’avant, dans la définition de profil. Par exemple :

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

Fournisseurs système

Le seul attribut obligatoire pour une définition de fournisseur système est Id. Les balises XML internes spécifient les mots clés, les piles et les balises de pool à activer. Pour obtenir la liste de tous les mots clés et piles pris en charge, consultez Pile et mot clé (dans SystemProvider).

L’exemple de code suivant montre une définition de fournisseur système.

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

Fournisseurs d'événements

Une définition de fournisseur d’événements spécifie le fournisseur De suivi d’événements pour Windows (ETW) à utiliser, ainsi que les mots clés et les niveaux à activer. Une définition de fournisseur d’événements nécessite un attribut Name obligatoire et un attribut Id obligatoire.

L’attribut Name spécifie l’un des noms suivants :

  • Nom d’un fournisseur Crimson inscrit, tel que « Microsoft-Windows-Search-Core ».

  • GUID du fournisseur, tel que « 49c2c27c-fe2d-40bf-8c4e-c3fb518037e7 ».

  • Nom d’un fournisseur antérieur, tel que « Internet Explorer 6 ».

  • Nom de cas spécial, tel que « PerfTrack » ou « DotNetProvider ».

Vous pouvez utiliser les attributs facultatifs suivants pour affiner les paramètres du fournisseur :

  • Pile : indique si le fournisseur capture les piles. Le paramètre par défaut est « false ».

  • Niveau : spécifie le niveau de journalisation ETW. Le paramètre par défaut est 0xFF.

  • NonPagedMemory : indique si WPR utilise la mémoire non paginée pour la mémoire tampon de ce fournisseur. Le paramètre par défaut est « false ».

    Avertissement Certains fournisseurs d’événements Windows nécessitent l’utilisation de la mémoire non paginé lors de la capture de traces. Un exemple de fournisseur d’événements qui nécessite NonPagedMemory est EventProvider_Microsoft-Windows-Win32k.

  • CaptureStateOnly : si la valeur est « true », indique que WPR active ce fournisseur à l’état de capture spécifié uniquement.

  • SID : spécifie si les données étendues des événements journalisés incluent l’identificateur de sécurité (SID) de l’utilisateur.

  • TSID : si la valeur est « true », spécifie l’identificateur de session de terminal pour les données étendues des événements journalisés.

Les balises XML internes facultatives spécifient les mots clés à activer. Contrairement aux fournisseurs système, les fournisseurs d’événements n’ont pas de constantes textuelles définies. Par conséquent, les fournisseurs d’événements ont des valeurs hexadécimales. Toutefois, la syntaxe est la même que celle des fournisseurs système. Si vous ne spécifiez pas de mots clés, la valeur par défaut est 0xFFFFFFFFFFFFFFFF.

Fournisseurs d’événements de tas

La définition du fournisseur de tas spécifie l’identificateur de processus du processus pour lequel WPR capture les événements de tas. ID est le seul attribut obligatoire. L’élément enfant HeapProcessId n’est pas obligatoire. Cet élément spécifie l’attribut process Id du processus que vous souhaitez analyser. L’exemple suivant vous montre comment procéder.

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

Fournisseurs d’état de capture

Contrairement aux fournisseurs standard qui sont activés tout au long de la session de suivi, les fournisseurs d’état de capture sont activés uniquement lorsque vous enregistrez ou démarrez une session de capture. L’exemple suivant montre à la fois les fournisseurs d’état normal et de capture.

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

Exemple

L’exemple de code suivant définit deux fournisseurs d’événements.

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

Création de profils d’enregistrement

1. Définitions du collecteur

3. Définitions de profil

SystemProvider

Eventprovider

HeapEventProvider

Mot clé (dans SystemProvider)

Pile

PoolTag