다음을 통해 공유


커널 모드 성능 카운터 사용

커널 모드 구성 요소는 PCW(Windows용 성능 카운터) API를 사용하여 성능 카운터를 제공합니다.

다음 단계를 사용하여 새 카운터 데이터 공급자를 개발합니다.

  1. 공급자 및 해당 카운터 세트를 설명하는 카운터 매니페스트를 작성합니다. 카운터 매니페스트는 성능 카운터 공급자 및 해당 카운터 세트를 정의하는 XML 형식 파일입니다.

    • applicationIdentity 특성을 커널 모드 구성 요소의 일부로 설치되고 성능 데이터 소비자가 필요로 하는 문자열 리소스를 포함하는 이진 파일의 이름으로 설정합니다.
    • providerType 특성을 kernelMode으로 설정합니다.
    • 구성 요소에서 PCW API로 카운터 값을 전달할 때 사용할 C/C++ 구조체의 이름으로 하나 struct 이상의 요소(아래 counterSet/structs)를 정의합니다.
    • counter에서 PCW에서 카운터 값을 읽어야 하는 및 field 을 정의 struct 합니다.
  2. 구성 요소에 대한 빌드 프로세스의 일부로 CTRPP 도구를 사용하여 카운터 매니페스트를 컴파일합니다. (CTRPP(카운터 전처리기) 도구는 WDK에 포함되어 있으며 를 입력하여 ctrpp개발자 명령 프롬프트에서 사용할 수 있습니다. CTRPP 도구는 파일과 파일을 생성 .rc 합니다 .h .

    • CTRPP 생성 .rc 파일은 리소스 컴파일러(RC.exe) 도구에서 컴파일해야 하며, 결과 .res 파일은 특성에 applicationIdentity 명명된 이진 파일에 연결되어야 합니다. CTRPP 생성 .rc 파일을 직접 컴파일하거나 CTRPP 생성 .rc 파일을 이진 파일로 컴파일되는 기존 .rc 파일로 컴파일할 수 있습니다#include.
    • CTRPP에서 .h 생성된 파일에는 기본 PCW API를 래핑하는 도우미 함수가 포함되어 있습니다. 예를 들어 CTRPP에서 생성된 .h 파일에는 사용자를 대신하여 를 호출 PcwRegister 하는 Register Xxx 함수가 포함됩니다. 대부분의 경우 PCW API를 직접 호출하는 대신 CTRPP 생성 도우미 함수를 호출하지만 PCW API에 대한 설명서를 참조하여 해당 CTRPP 생성 함수가 수행하는 작업을 이해할 수 있습니다. 도우미 함수는 구성 요소의 카운터 데이터 레이아웃을 PCW API에서 PCW_DATA 예상하는 레이아웃으로 변환하는 것을 관리합니다.
  3. 구성 요소 초기화 시 PcwRegister를 호출하는 CTRPP 생성 RegisterXxx 함수를 호출합니다. 구성 요소 종료 시 PcwUnregister를 호출하는 CTRPP 생성 등록 취소Xxx 함수를 호출합니다.

  4. 카운터 데이터를 제공하는 코드를 추가합니다. 이 작업은 PCW_CALLBACK 콜백 함수를 구현하거나 각 instance 대한 카운터 값으로 데이터 구조를 유지 관리하고 인스턴스가 만들어지고 제거될 때 CTRPP에서 생성된 CreateInstanceXxxCloseInstanceXxx 함수를 호출하여 수행됩니다.

  5. 구성 요소 설치 시 를 사용하여 lodctr /m:<CounterManifest> <InstallPath> 공급자를 설치합니다. 구성 요소 제거 시(또는 /g 매개 변수 포함/m)를 사용하여 unlodctr 공급자를 제거합니다. 공급자를 설치하면 성능 데이터 소비자(예: perfmon, typeperf 또는 WMI)가 카운터 세트를 사용할 수 있도록 공급자의 카운터 세트가 사용 가능한 카운터 세트의 시스템 전체 리포지토리에 추가됩니다. 특히 공급자를 설치하면 공급자의 문자열 테이블이 포함된 이진 파일(DLL, SYS 또는 EXE 파일)의 전체 경로가 기록됩니다. 이진 파일의 전체 경로는 다음과 같이 매니페스트의 applicationIdentity 특성을 <CounterManifest> 명령줄에 lodctr 사용되는 및 값과 <InstallPath> 결합하여 결정됩니다.

    • 특성이 applicationIdentity 전체 경로이면 사용됩니다.
    • 그렇지 않으면 매개 변수가 <InstallationPath> 전체 경로이면 이 매개 변수가 사용됩니다.
    • 그렇지 않으면 매개 변수가 <CounterManifest> 전체 경로이면 의 <CounterManifest> 디렉터리가 특성의 파일 이름과 applicationIdentity 결합됩니다.
    • 그렇지 않으면 현재 작업 디렉터리가 특성의 파일 이름과 applicationIdentity 결합됩니다.

커널 모드 PCW 공급자의 예제는 GitHub의 Windows 드라이버 샘플 리포지토리에서 Kcs(커널 카운터 샘플)를 참조하세요.

추가 정보

커널 모드 성능 모니터링

PcwRegister

PCW_CALLBACK

성능 카운터 스키마

CTRPP 도구