Поделиться через


2. Определения систем и поставщиков событий

Профили записи средства записи производительности Windows (WPR) хранятся в XML-файле с расширением WPRP. Определение поставщика системы указывает системные ключевые слова, стеки и теги пула памяти в WPRP-файле.

Определение поставщика

Элементы в WPRP-файле должны быть определены в следующем порядке:

  1. Все сборщики

  2. Системные поставщики

  3. Поставщики событий

  4. Поставщики кучи, если они есть

  5. Все профили

В некоторых случаях поставщики могут быть определены в определении профиля, а не раньше. Пример:

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

Системные поставщики

Единственным обязательным атрибутом для определения поставщика системы является Id. Внутренние XML-теги указывают ключевые слова, стеки и теги пула для включения. Списки всех поддерживаемых ключевых слов и стеков см. в разделе Stack and Keyword (in SystemProvider).

В следующем примере кода показано определение поставщика системы.

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

Поставщики событий

Определение поставщика событий указывает используемый поставщик трассировки событий Windows (ETW), а также ключевые слова и уровни для включения. Определение поставщика событий требует обязательного атрибута Name и обязательного атрибута Id .

Атрибут Name задает одно из следующих имен:

  • Имя зарегистрированного поставщика Crimson, например Microsoft-Windows-Search-Core.

  • GUID поставщика, например "49c2c27c-fe2d-40bf-8c4e-c3fb518037e7".

  • Имя более раннего поставщика, например "IE6".

  • Специальное имя, например PerfTrack или DotNetProvider.

Для точной настройки параметров поставщика можно использовать следующие необязательные атрибуты:

  • Стек. Указывает, фиксирует ли поставщик стеки. Значение по умолчанию — false.

  • Уровень: задает уровень ведения журнала ETW. Значение по умолчанию — 0xFF.

  • NonPagedMemory. Указывает, использует ли WPR нестраничную память для буфера для этого поставщика. Значение по умолчанию — false.

    Предупреждение Некоторые поставщики событий Windows требуют использования непагруженной памяти во время отслеживания трассировки. Пример поставщика событий, которому требуется NonPagedMemory, — EventProvider_Microsoft-Windows-Win32k.

  • CaptureStateOnly: если задано значение true, указывает, что WPR включает этот поставщик только в указанном состоянии записи.

  • SID. Указывает, включают ли расширенные данные зарегистрированных событий идентификатор безопасности пользователя .

  • TSID: если задано значение true, указывает идентификатор сеанса терминала для расширенных данных зарегистрированных событий.

Необязательные внутренние XML-теги указывают ключевые слова для включения. В отличие от системных поставщиков, поставщики событий не имеют определенных текстовых констант. Поэтому поставщики событий имеют шестнадцатеричные значения. Однако синтаксис аналогичен синтаксису системных поставщиков. Если ключевые слова не указаны, значение по умолчанию — 0xFFFFFFFFFFFFFFFF.

Поставщики событий кучи

Определение поставщика кучи указывает идентификатор процесса, для которого WPR фиксирует события кучи. Идентификатор является единственным обязательным атрибутом. Дочерний элемент HeapProcessId не является обязательным. Этот элемент задает атрибут идентификатора процесса, который требуется проанализировать. В приведенном ниже примере показано, как это сделать.

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

Поставщики состояний записи

В отличие от обычных поставщиков, которые включены на протяжении всего сеанса трассировки, поставщики состояний отслеживания включаются только при сохранении или запуске сеанса записи. В следующем примере показаны как обычные поставщики, так и поставщики состояний записи.

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

Пример

В следующем примере кода определяются два поставщика событий.

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

Создание профилей записи

1. Определения сборщика

3. Определения профилей

SystemProvider

EventProvider

HeapEventProvider

Ключевое слово (в SystemProvider)

Стек

PoolTag