Utilisation de compteurs de performances en mode noyau
Les composants en mode noyau fournissent des compteurs de performances à l’aide des API Compteurs de performances pour Windows (PCW).
Utilisez les étapes suivantes pour développer de nouveaux fournisseurs de données de compteur :
Écrivez un manifeste de compteur qui décrit le fournisseur et ses ensembles de compteurs. Le manifeste du compteur est un fichier au format XML qui définit le fournisseur de compteur de performances et ses compteurs.
- Définissez l’attribut
applicationIdentity
sur le nom d’un fichier binaire qui sera installé dans le cadre de votre composant en mode noyau et qui contiendra les ressources de chaîne nécessaires aux consommateurs de données de performance. - Affectez à l'attribut
providerType
la valeurkernelMode
. - Définissez au moins un
struct
élément (souscounterSet/structs
) avec le nom d’une structure C/C++ qui sera utilisée lors du passage des valeurs de compteur de votre composant aux API PCW. - Dans chaque
counter
, définissez lestruct
etfield
à partir duquel PCW doit lire la valeur du compteur.
- Définissez l’attribut
Dans le cadre du processus de génération de votre composant, utilisez l’outil CTRPP pour compiler le manifeste du compteur. (L’outil CTRPP (Counter Preprocessor) est inclus dans le WDK et est disponible à l’invite de commandes développeur en tapant
ctrpp
.) L’outil CTRPP génère un.rc
fichier et un.h
fichier.- Le fichier généré
.rc
par CTRPP doit être compilé par l’outil compilateur de ressources (RC.exe), et le fichier résultant.res
doit être lié au fichier binaire nommé dans l’attributapplicationIdentity
. Vous pouvez soit compiler directement le fichier généré par.rc
CTRPP, soit#include
le fichier généré par.rc
CTRPP dans un fichier existant.rc
qui est en cours de compilation dans le fichier binaire. - Le fichier généré par
.h
CTRPP contient des fonctions d’assistance qui encapsulent les API PCW sous-jacentes. Par exemple, le fichier généré par.h
CTRPP contient une fonction RegisterXxx qui appellePcwRegister
en votre nom. Dans la plupart des cas, vous appelez les fonctions d’assistance générées par CTRPP au lieu d’appeler directement les API PCW, mais vous pouvez consulter la documentation des API PCW pour comprendre ce que font les fonctions générées par CTRPP correspondantes. Les fonctions d’assistance gèrent la traduction de la disposition des données de compteur du composant dans laPCW_DATA
disposition attendue par les API PCW.
- Le fichier généré
Lors de l’initialisation du composant, appelez la fonction RegisterXxx générée par CTRPP, qui appelle PcwRegister. À l’arrêt du composant, appelez la fonction UnregisterXxx générée par CTRPP, qui appelle PcwUnregister.
Ajoutez du code pour fournir des données de compteur. Pour ce faire, vous implémentez une fonction de rappel PCW_CALLBACK ou en conservant des structures de données avec des valeurs de compteur pour chaque instance et en appelant les fonctions CreateInstanceXxx et CloseInstanceXxx générées par CTRPP lorsque les instances sont créées et détruites.
Lors de l’installation du composant, utilisez
lodctr /m:<CounterManifest> <InstallPath>
pour installer le fournisseur. Lors de la désinstallation du composant, utilisezunlodctr
(avec/m
ou/g
des paramètres) pour désinstaller le fournisseur. L’installation du fournisseur ajoute les compteurs du fournisseur à un référentiel à l’échelle du système de compteurs disponibles afin que les compteurs puissent être utilisés par les consommateurs de données de performance tels que perfmon, typeperf ou WMI. En particulier, l’installation du fournisseur enregistre le chemin d’accès complet au fichier binaire (fichier DLL, SYS ou EXE) qui contient la table de chaînes du fournisseur. Le chemin complet du fichier binaire est déterminé en combinant l’attribut duapplicationIdentity
manifeste avec les<CounterManifest>
valeurs et<InstallPath>
utilisées sur lalodctr
ligne de commande comme suit :- Si l’attribut
applicationIdentity
est un chemin d’accès complet, il sera utilisé. - Sinon, si le
<InstallationPath>
paramètre est un chemin d’accès complet, il sera utilisé. - Sinon, si le
<CounterManifest>
paramètre est un chemin d’accès complet, le répertoire de<CounterManifest>
sera combiné avec le nom de fichier de l’attributapplicationIdentity
. - Sinon, le répertoire de travail actuel sera combiné avec le nom de fichier de l’attribut
applicationIdentity
.
- Si l’attribut
Pour obtenir un exemple de fournisseur PCW en mode noyau, consultez l’exemple de compteur de noyau (Kcs) dans le référentiel d’exemples de pilotes Windows sur GitHub.
Voir aussi
Analyse des performances en mode noyau