Использование счетчиков производительности режима ядра
Компоненты режима ядра предоставляют счетчики производительности с помощью API счетчиков производительности для Windows (PCW).
Чтобы разработать новые поставщики данных счетчиков, выполните следующие действия.
Напишите манифест счетчика , описывающий поставщик и его наборы счетчиков. Манифест счетчика — это XML-файл, определяющий поставщик счетчиков производительности и его наборы счетчиков.
- Присвойте
applicationIdentity
атрибуту имя двоичного файла, который будет установлен как часть компонента режима ядра и будет содержать строковые ресурсы, необходимые потребителям данных о производительности. - Задайте для атрибута
providerType
значениеkernelMode
. - Определите по крайней мере один
struct
элемент (в разделеcounterSet/structs
) с именем структуры C/C++, который будет использоваться при передаче значений счетчиков из компонента в API PCW. - В каждом
counter
определитеstruct
иfield
, из которых PCW должен считывать значение счетчика.
- Присвойте
В процессе сборки компонента используйте средство 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.
- Созданный CTRPP
При инициализации компонента вызовите созданную CTRPP функцию RegisterXxx , которая вызывает PcwRegister. При завершении работы компонента вызовите созданную CTRPP функцию UnregisterXxx , которая вызывает PcwUnregister.
Добавьте код для предоставления данных счетчика. Это можно сделать либо путем реализации функции обратного вызова PCW_CALLBACK , либо путем поддержки структур данных со значениями счетчиков для каждого экземпляра и вызова созданных CTRPP функций CreateInstanceXxx и CloseInstanceXxx при создании и уничтожении экземпляров.
При установке компонента используйте
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.
См. также раздел
Мониторинг производительности в режиме ядра