다음을 통해 공유


버전 2.0을 사용하여 카운터 데이터 제공

최신 성능 데이터 공급자는 매니페스트를 사용하여 카운터 데이터를 정의하고 성능 카운터 공급자 API를 사용하여 공급자의 컨텍스트 내에서 데이터를 관리합니다. 매니페스트 및 성능 카운터 공급자 API를 사용하여 구현된 공급자를 종종 V2 공급자라고 합니다. Windows는 Windows Vista 이상의 사용자 모드 V2 공급자와 Windows 7 이상의 커널 모드 V2 공급자를 지원합니다.

이 페이지에서는 사용자 모드 V2 공급자에 대해 설명합니다. 커널 모드 V2 공급자에 대한 자세한 내용은 커널 모드 성능 모니터링을 참조하세요.

런타임에 V2 공급자는 다음과 같이 작동합니다.

  • 공급자 프로세스는 PerfStartProvider 및 PerfSetCounterSetInfo를 호출하여 Windows 성능 카운터 시스템에 등록합니다. 공급자는 필요에 따라 소비자 요청에 대해 알림을 받을 콜백 함수를 제공합니다.
  • 공급자 프로세스는 PerfCreateInstance 및 PerfDeleteInstance를 사용하여 인스턴스를 적절하게 추가하거나 제거합니다. 공급자는 PerfSet*** API를 사용하여 변경할 때 카운터 값을 업데이트합니다.
  • 소비자는 카운터 세트에서 데이터를 요청합니다. 시스템은 호출자에게 데이터를 수집할 수 있는 권한이 있음을 확인합니다. 그런 다음, 시스템은 공급자 프로세스에서 실행되는 작업자 스레드를 사용하여 요청을 처리하고 적절한 경우 공급자의 콜백 함수를 호출합니다. 작업자 스레드는 수집된 데이터를 시스템 관리 버퍼에 복사하고 시스템은 데이터를 소비자에게 반환합니다.

공급자를 만드는 단계

  1. 공급자가 제공할 카운터 데이터를 정의하는 매니페스트를 작성합니다. 매니페스트 작성에 대한 자세한 내용은 성능 카운터 스키마를 참조하세요.

  2. CTRPP를 사용하여 공급자에 포함하는 템플릿 코드를 생성합니다. 템플릿 코드에는 카운터 집합, CounterInitializeCounterCleanup 함수 및 리소스 문자열을 정의하는 구조체가 포함됩니다.

    공급자는 CounterInitializeCounterCleanup 함수를 호출해야 합니다. CounterInitializePerfStartProvider 함수를 호출하여 공급자를 등록하고 PerfSetCounterSetInfo 함수를 호출하여 카운터 집합을 초기화합니다. CounterCleanupPerfStopProvider 함수를 호출하여 공급자의 등록을 제거합니다.

  3. 프로젝트에 이전 단계의 템플릿 코드를 포함하고 공급자를 완료합니다.

    공급자를 완료하려면 제공하는 카운터 집합의 각 instance 대해 PerfCreateInstance 함수를 호출해야 합니다.

    카운터 값을 설정하려면 다음 함수 중 하나를 호출합니다.

    PerfSetCounterRefValue를 사용하면 카운터 값을 설정하거나 업데이트하기 위해 함수를 호출할 필요가 없으며, 로컬 카운터 변수(참조 지점이 있는 변수)를 업데이트하기만 하면 성능 카운터가 포인터를 사용하여 카운터 값에 액세스할 수 있다는 이점이 있습니다.

    PerfSetCounterRefValue를 사용하지 않는 경우 다음 함수를 사용하여 카운터 값을 증가 또는 감소시킬 수 있습니다.

    공급자가 종료되기 전에 만든 instance 각 카운터 집합에 대해 PerfDeleteInstance를 호출해야 합니다.

    매니페스트의 공급자 요소에 콜백 특성을 지정하거나 CTRPP를 호출할 때 -NotificationCallback 인수를 사용한 경우 ControlCallback 콜백 함수를 구현해야 합니다. CounterInitialize에 콜백 함수를 전달합니다.

    CTRPP를 호출할 때 -MemoryRoutines를 사용한 경우 AllocateMemoryFreeMemory 콜백 함수를 구현해야 합니다. CounterInitialize에 콜백 함수를 전달합니다.

  4. 공급자를 설치할 때 LodCtr 도구를 사용하여 지역화된 리소스 문자열 및 리소스 ID가 포함된 이진 파일의 이름을 레지스트리에 씁니다. LodCtr 사용에 대한 자세한 내용은 성능 카운터 스키마를 참조하세요.

  5. 공급자를 제거할 때 UnlodCtr 도구를 사용하여 레지스트리에서 공급자의 정보를 제거합니다.