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


Использование счетчиков производительности режима ядра

Компоненты режима ядра предоставляют счетчики производительности с помощью API счетчиков производительности для Windows (PCW).

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

  1. Напишите манифест счетчика , описывающий поставщик и его наборы счетчиков. Манифест счетчика — это XML-файл, определяющий поставщик счетчиков производительности и его наборы счетчиков.

    • Присвойте applicationIdentity атрибуту имя двоичного файла, который будет установлен как часть компонента режима ядра и будет содержать строковые ресурсы, необходимые потребителям данных о производительности.
    • Задайте для атрибута providerType значение kernelMode.
    • Определите по крайней мере один struct элемент (в разделе counterSet/structs) с именем структуры C/C++, который будет использоваться при передаче значений счетчиков из компонента в API PCW.
    • В каждом counterопределите struct и field , из которых PCW должен считывать значение счетчика.
  2. В процессе сборки компонента используйте средство CTRPP для компиляции манифеста счетчика. (Средство препроцессора счетчика (CTRPP) входит в состав WDK и доступно в командной строке разработчика , введя ctrpp.) Средство CTRPP создаст .rc файл и .h файл.

    • Созданный CTRPP .rc файл должен быть скомпилирован средством компилятора ресурсов (RC.exe), а полученный .res файл должен быть связан с двоичным файлом с именем в атрибуте applicationIdentity . Можно либо напрямую скомпилировать файл, созданный .rc CTRPP, либо #include файл, созданный .rc CTRPP, в существующий .rc файл, который компилируется в двоичный файл.
    • Созданный CTRPP-файл .h содержит вспомогательные функции, которые упаковывают базовые API PCW. Например, созданный .h CTRPP-файл будет содержать функцию RegisterXxx , которая вызывает PcwRegister от вашего имени. В большинстве случаев вы будете вызывать вспомогательные функции, созданные CTRPP, вместо прямого вызова каких-либо API PCW, но вы можете ознакомиться с документацией по API PCW, чтобы понять, что делают соответствующие функции, созданные CTRPP. Вспомогательные функции управляют преобразованием макета данных счетчика компонента в PCW_DATA макет, ожидаемый API PCW.
  3. При инициализации компонента вызовите созданную CTRPP функцию RegisterXxx , которая вызывает PcwRegister. При завершении работы компонента вызовите созданную CTRPP функцию UnregisterXxx , которая вызывает PcwUnregister.

  4. Добавьте код для предоставления данных счетчика. Это можно сделать либо путем реализации функции обратного вызова PCW_CALLBACK , либо путем поддержки структур данных со значениями счетчиков для каждого экземпляра и вызова созданных CTRPP функций CreateInstanceXxx и CloseInstanceXxx при создании и уничтожении экземпляров.

  5. При установке компонента используйте lodctr /m:<CounterManifest> <InstallPath> для установки поставщика. При удалении компонента используйте unlodctr/m параметрами или /g ), чтобы удалить поставщик. Установка поставщика добавляет наборы счетчиков поставщика в общесистемный репозиторий доступных наборов счетчиков, чтобы эти наборы могли использоваться потребителями данных о производительности, такими как perfmon, typeperf или WMI. В частности, при установке поставщика записывается полный путь к двоичному файлу (DLL, SYS или EXE-файлу), который содержит строковую таблицу поставщика. Полный путь к двоичному файлу определяется путем объединения атрибута манифеста applicationIdentity со значениями <CounterManifest> и , <InstallPath> используемыми в командной lodctr строке, следующим образом:

    • applicationIdentity Если атрибут является полным путем, он будет использоваться.
    • В противном случае, если <InstallationPath> параметр является полным путем, он будет использоваться.
    • В противном случае, если <CounterManifest> параметр является полным путем, каталог из <CounterManifest> будет объединен с именем файла из атрибута applicationIdentity .
    • В противном случае текущий рабочий каталог будет объединены с именем файла из атрибута applicationIdentity .

Пример поставщика PCW в режиме ядра см. в примере счетчика ядра (Kcs) в репозитории примеров драйверов Windows на сайте GitHub.

См. также раздел

Мониторинг производительности в режиме ядра

PcwRegister

PCW_CALLBACK

Схема счетчиков производительности

Средство CTRPP