2. 시스템 및 이벤트 공급자 정의

WPR(Windows Performance Recorder) 기록 프로필은 확장명이 .wprp인 XML 파일에 저장됩니다. 시스템 공급자 정의는 .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 태그는 사용하도록 설정할 키워드, 스택, 풀 태그를 지정합니다. 지원되는 모든 키워드 및 스택 목록은 스택키워드(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>

이벤트 공급자

이벤트 공급자 정의는 사용할 ETW(Windows용 이벤트 추적) 공급자 및 사용하도록 설정할 키워드 및 수준을 지정합니다. 이벤트 공급자 정의에는 필수 이름 특성과 필수 ID 특성이 필요합니다.

이름 특성은 다음 이름 중 하나를 지정합니다.

  • 등록된 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: 기록된 이벤트의 확장 데이터에 사용자의 SID(보안 식별자)가 포함되는지 여부를 지정합니다.

  • TSID: “true”로 설정된 경우 기록된 이벤트의 확장 데이터에 대한 터미널 세션 식별자를 지정합니다.

선택적 내부 XML 태그는 사용하도록 설정할 키워드를 지정합니다. 시스템 공급자와 달리 이벤트 공급자에는 정의된 텍스트 상수가 없습니다. 따라서 이벤트 공급자에는 16진수 값이 있습니다. 그러나 구문은 시스템 공급자의 구문과 동일합니다. 키워드를 지정하지 않으면 기본값은 0xFFFFFFFFFFFFFFFF입니다.

힙 이벤트 공급자

힙 공급자 정의는 WPR이 힙 이벤트를 캡처하는 프로세스의 프로세스 식별자를 지정합니다. Id는 유일한 필수 특성입니다. HeapProcessId 자식 요소는 필수가 아닙니다. 이 요소는 분석하려는 프로세스의 프로세스 ID 특성을 지정합니다. 다음 예제에 이 작업을 수행하는 방법이 나와 있습니다.

<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