Compartir a través de


2. Definiciones del proveedor de eventos y del sistema

Los perfiles de grabación de Windows Performance Recorder (WPR) se almacenan en un archivo XML que tiene una extensión .wprp. Una definición del proveedor del sistema especifica las palabras clave del sistema, las pilas y las etiquetas del grupo de memoria en el archivo .wprp.

Definición del proveedor

Los elementos del archivo .wprp deben definirse en el orden siguiente:

  1. Todos los recopiladores

  2. Proveedores del sistema

  3. Proveedores de eventos

  4. Proveedores de montón, si están presentes

  5. Todos los perfiles

En algunos casos, los proveedores se pueden definir en, en lugar de antes, la definición del perfil. Por ejemplo:

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

Proveedores del sistema

El único atributo obligatorio para una definición del proveedor del sistema es Id. Las etiquetas XML internas especifican las palabras clave, las pilas y las etiquetas de grupo que se van a habilitar. Para obtener listas de todas las palabras clave y pilas admitidas, vea Stack and Keyword (in SystemProvider).

En el ejemplo de código siguiente se muestra una definición del proveedor del 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>

Proveedores de eventos

Una definición del proveedor de eventos especifica el proveedor seguimiento de eventos para Windows (ETW) que se usará y las palabras clave y los niveles que se van a habilitar. Una definición del proveedor de eventos requiere un atributo Name obligatorio y un atributo Id obligatorio.

El atributo Name especifica uno de los siguientes nombres:

  • Nombre de un proveedor de Crimson registrado, como "Microsoft-Windows-Search-Core".

  • Guid del proveedor, como "49c2c27c-fe2d-40bf-8c4e-c3fb518037e7".

  • Nombre de un proveedor anterior, como "IE6".

  • El nombre de mayúsculas y minúsculas especiales, como "PerfTrack" o "DotNetProvider".

Puede usar los siguientes atributos opcionales para ajustar los parámetros del proveedor:

  • Stack: indica si el proveedor captura las pilas. El valor predeterminado es "false".

  • Nivel: especifica el nivel de registro etw. El valor predeterminado es 0xFF.

  • NonPagedMemory: indica si WPR usa memoria no paginada para el búfer para este proveedor. El valor predeterminado es "false".

    Advertencia Algunos proveedores de eventos de Windows requieren el uso de memoria no paginada durante la captura de seguimiento. Un ejemplo de proveedor de eventos que requiere NonPagedMemory es EventProvider_Microsoft-Windows-Win32k.

  • CaptureStateOnly: si se establece en "true", indica que WPR habilita este proveedor solo en el estado de captura especificado.

  • SID: especifica si los datos extendidos de los eventos registrados incluyen el identificador de seguridad (SID) del usuario.

  • TSID: si se establece en "true", especifica el identificador de sesión de terminal para los datos extendidos de los eventos registrados.

Las etiquetas XML internas opcionales especifican las palabras clave que se van a habilitar. A diferencia de los proveedores del sistema, los proveedores de eventos no tienen constantes textuales definidas. Por lo tanto, los proveedores de eventos tienen valores hexadecimales. Sin embargo, la sintaxis es la misma que la de los proveedores del sistema. Si no especifica palabras clave, el valor predeterminado es 0xFFFFFFFFFFFFFFFF.

Proveedores de eventos del montón

La definición del proveedor del montón especifica el identificador de proceso del proceso para el que WPR captura los eventos del montón. Id es el único atributo obligatorio. El elemento secundario HeapProcessId no es obligatorio. Este elemento especifica el atributo process Id del proceso que desea analizar. El ejemplo siguiente muestra cómo hacerlo.

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

Proveedores de estado de captura

A diferencia de los proveedores normales que están habilitados en toda la sesión de seguimiento, los proveedores de estado de captura solo se habilitan al guardar o iniciar una sesión de captura. En el ejemplo siguiente se muestran los proveedores normales y 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>

Ejemplo

En el ejemplo de código siguiente se definen dos proveedores 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"/>

Creación de perfiles de grabación

1. Definiciones del recopilador

3. Definiciones de perfil

SystemProvider

EventProvider

HeapEventProvider

Palabra clave (en SystemProvider)

Pila

PoolTag