Compartir a través de


Uso de contadores de rendimiento del modo kernel

Los componentes en modo kernel proporcionan contadores de rendimiento mediante las API contadores de rendimiento para Windows (PCW).

Siga estos pasos para desarrollar nuevos proveedores de datos de contadores:

  1. Escriba un manifiesto de contador que describa el proveedor y sus conjuntos de contadores. El manifiesto del contador es un archivo de formato XML que define el proveedor de contadores de rendimiento y sus conjuntos de contadores.

    • Establezca el applicationIdentity atributo en el nombre de un binario que se instalará como parte del componente en modo kernel y que contendrá los recursos de cadena necesarios para los consumidores de datos de rendimiento.
    • Defina el atributo providerType a kernelMode.
    • Defina al menos un struct elemento (en counterSet/structs) con el nombre de una estructura de C/C++ que se usará al pasar valores de contador del componente a las API de PCW.
    • En cada counter, defina y fieldstruct desde el que PCW debe leer el valor del contador.
  2. Como parte del proceso de compilación del componente, use la herramienta CTRPP para compilar el manifiesto del contador. (La herramienta Preprocesador de contadores (CTRPP) se incluye en el WDK y está disponible en el símbolo del sistema para desarrolladores escribiendo ctrpp.) La herramienta CTRPP generará un .rc archivo y un .h archivo.

    • La herramienta Compilador de recursos (RC.exe) debe compilar el archivo generado .rc por CTRPP y el archivo resultante .res debe estar vinculado al binario denominado en el applicationIdentity atributo . Puede compilar directamente el archivo generado por .rc CTRPP o puede #include el archivo generado por .rc CTRPP en un archivo existente .rc que se compila en el binario.
    • El archivo generado por .h CTRPP contiene funciones auxiliares que encapsulan las API de PCW subyacentes. Por ejemplo, el archivo generado por .h CTRPP contendrá una función RegisterXxx que llama PcwRegister a en su nombre. En la mayoría de los casos, llamará a las funciones auxiliares generadas por CTRPP en lugar de llamar directamente a cualquier API de PCW, pero puede consultar la documentación de las API de PCW para comprender lo que hacen las funciones generadas por CTRPP correspondientes. Las funciones auxiliares administran la traducción del diseño de datos del contador del componente al PCW_DATA diseño esperado por las API de PCW.
  3. En la inicialización de componentes, invoque la función RegisterXxx generada por CTRPP, que llama a PcwRegister. Al apagar el componente, invoque la función UnregisterXxx generada por CTRPP, que llama a PcwUnregister.

  4. Agregue código para proporcionar datos de contador. Esto se hace implementando una función de devolución de llamada PCW_CALLBACK o manteniendo estructuras de datos con valores de contador para cada instancia e invocando las funciones CreateInstanceXxx y CloseInstanceXxx generadas por CTRPP a medida que se crean y destruyen las instancias.

  5. En la instalación de componentes, use lodctr /m:<CounterManifest> <InstallPath> para instalar el proveedor. En la desinstalación de componentes, use unlodctr (con /m o /g parámetros) para desinstalar el proveedor. La instalación del proveedor agrega los conjuntos de contadores del proveedor a un repositorio de conjuntos de contadores disponibles para que los consumidores de datos de rendimiento puedan usar los conjuntos de contadores, como perfmon, typeperf o WMI. En concreto, al instalar el proveedor se registra la ruta de acceso completa al archivo binario (DLL, SYS o EXE) que contiene la tabla de cadenas del proveedor. La ruta de acceso completa al archivo binario se determina mediante la combinación del atributo del applicationIdentity manifiesto con los <CounterManifest> valores y <InstallPath> usados en la línea de comandos de la lodctr siguiente manera:

    • Si el applicationIdentity atributo es una ruta de acceso completa, se usará.
    • De lo contrario, si el <InstallationPath> parámetro es una ruta de acceso completa, se usará.
    • De lo contrario, si el <CounterManifest> parámetro es una ruta de acceso completa, el directorio de <CounterManifest> se combinará con el nombre de archivo del applicationIdentity atributo .
    • De lo contrario, el directorio de trabajo actual se combinará con el nombre de archivo del applicationIdentity atributo .

Para obtener un ejemplo de un proveedor PCW en modo kernel, consulte el ejemplo de contador de kernel (Kcs) en el repositorio de ejemplos de controladores de Windows en GitHub.

Consulte también

Supervisión del rendimiento del modo kernel

PcwRegister

PCW_CALLBACK

Esquema de los contadores de rendimiento

Herramienta CTRPP