Compartir a través de


Ejercicio 3: Seguimiento de la superficie del controlador y las asignaciones dinámicas durante el arranque

El grupo es el recurso de memoria para los componentes del modo kernel que usan los controladores de dispositivo y del sistema operativo para almacenar sus estructuras de datos. El grupo tiene cuatro áreas de asignación básicas:

  1. Grupo no paginado: Asignaciones garantizadas para residir en memoria física.

  2. Grupo paginado: Asignaciones que se pueden paginar fuera de memoria en el archivo de página.

  3. Grupo no paginable de NX: Asignaciones no paginadas, que no son ejecutables.

  4. Grupo de sesiones: Asignaciones realizadas por sesión. Se pueden paginar.

El uso del grupo es un colaborador significativo del uso general de memoria en una máquina: es el mayor consumidor de memoria inmediatamente después del arranque. Cualquier reducción del uso del grupo reduce el uso general de memoria del sistema en el sistema operativo, y la memoria no paginable es la categoría de prioridad más alta para impulsar las reducciones (para).

En este ejercicio, revisará las asignaciones de controladores de Microsoft de bandeja de entrada y su superficie (en su momento de inicialización) durante el arranque.

Paso 1: Recopilación de un seguimiento de memoria del grupo en una transición de arranque

En este paso, recopilará un seguimiento de arranque mediante Windows Performance Recorder (WPR) que contiene datos del grupo y del conjunto residente.

  1. Abrir WPR desde el menú Inicio

  2. Seleccione los proveedores de eventos adecuados:

    1. Uso del grupo

    2. Conjunto de residentes

    3. Evaluación de prioridades de primer nivel

  3. Seleccione arranque como escenario de rendimiento.

  4. Seleccione Archivo como modo de registro.

  5. Establezca 1 como número de iteraciones.

  6. Haga clic en Inicio y, a continuación, seleccione una ubicación para guardar el archivo ETL.

El sistema se reinicia automáticamente, recopila un seguimiento y se detiene después de que el escritorio se vea.

Captura de pantalla del cuadro de diálogo configuración de WPR.

Paso 2: Revisar los datos del grupo mediante WPA

Los datos del grupo se exponen a través de la tabla de resumen de Pool Graph en WPA. Las columnas clave de interés se encuentran en la tabla siguiente.

Puede agregar o quitar columnas si hace clic con el botón derecho en los encabezados de columna.

Terminología Descripción
Etiqueta de grupo Etiqueta asociada a una asignación de grupo.
Módulo de etiquetas de grupo Módulo (controlador) asociado a una etiqueta de grupo.
Pila Muestra la ruta de acceso del código en un subproceso que conduce a una asignación de memoria.
Paginado Indica si las asignaciones se colocaron o no en un grupo paginado o en un grupo no paginado.
Tipo de impacto Muestra si una asignación contribuye al uso de memoria de estado estable o es una asignación transitoria.
  1. Abra el seguimiento que capturó en el paso 1 con WPA.

  2. Abra el menú Seguimiento y seleccione Configurar ruta de acceso de símbolos.

    • Especifique la ruta de acceso de la memoria caché de símbolos. Para obtener más información sobre los símbolos, vea la página Compatibilidad con símbolos en MSDN.
  3. Abra el menú Seguimiento y seleccione Cargar símbolos.

  4. Busque el gráfico Pool (Grupo ) en la categoría Memoria del Probador de Graph

  5. Arrastre y coloque el gráfico Grupo en la pestaña Análisis .

  6. Organice la tabla para mostrar estas columnas:

    1. Módulo de etiquetas de grupo

    2. Paginado

    3. Tipo de impacto

    4. Pila

    5. Etiqueta de grupo

    6. Recuento

    7. Impacto en el tamaño y el tamaño

    **Nota sobre las etiquetas de grupo: **

    Si es desarrollador de controladores, asegúrese de que las etiquetas de grupo usadas por el controlador sean claras y fáciles de identificar para facilitar el análisis. Por ejemplo, si el nombre de la empresa es Fabrikam, podría agregar un prefijo "Fbk" a todas las etiquetas de grupo: FbkPool1, FbkPool2, FbkBuffer, etc.

    Captura de pantalla que muestra el aspecto de la tabla WPA reorganizada.

  7. Deshabilitar todas las series del gráfico (haga clic con el botón derecho en ->Deshabilitar ->En todo el gráfico ->Todas las series)

    Captura de pantalla de la opción de menú deshabilitar en WPA.

  8. Ordene por impacto en el tamaño haciendo clic en el encabezado de columna Tamaño de impacto .

    Los controladores que tienen el mayor uso de memoria de estado estable se muestran en la parte superior.

Paso 3: Interceptar datos de asignación de grupos

  1. Acercar los primeros 30 segundos de la escala de tiempo.

  2. Seleccione un controlador (por ejemplo, ACPI.sys, pero lo hará).

    1. Revise la memoria NonPaged y expanda la fila.

      La memoria no paginada debe ser el foco de las investigaciones, ya que no se puede mover al archivo de página cuando hay presión de memoria en el sistema.

    2. Habilite la leyenda para las categorías de impacto y transitorios .

      Captura de pantalla de los datos de ejemplo que muestran el uso de memoria.

  3. Para ordenar por tamaño de impacto , haga clic en el encabezado de columna.

  4. El impacto de la memoria contribuye directamente a la superficie de memoria general del controlador en todo momento. En el ejemplo anterior, puede indicar que ACPI.sys usa alguna memoria no paginada en todo momento y que este uso de estado estable aumenta dos veces (primero cuando se carga el controlador y, a continuación, una segunda vez en unos 3 segundos).

    1. Expanda la pila y desplácese por ella. En la parte superior, debería ver las llamadas de función que conducen a las asignaciones de grupos de estado estable más grandes.

    2. En el ejemplo siguiente, puede ver que ACPI.sys realiza un total de 255 asignaciones de grupos, con un total de 1,2 MB en la función ACPIInitStartACPI . Aquí es donde el desarrollador del controlador debe centrarse para mejorar el uso de memoria de estado estable del controlador, ya que esta función tiene en cuenta la mayoría de las asignaciones de controladores.

      Captura de pantalla de la tabla de datos de ejemplo que muestra el uso de memoria por ACPI.sys con nodos de proceso expandibles

  5. Ordene por Tamaño haciendo clic en el encabezado de columna.

  6. Haga lo mismo para la categoría Transitorio . Expanda la pila y desplácese por ella. En la parte superior, debería ver las llamadas de función que conducen a las asignaciones de grupos transitorios más grandes.

    • En el ejemplo siguiente, puede ver que el pico inicial de uso de memoria transitorio se debe principalmente a la ejecución de DPC acpI de dispositivos (ACPI.sys! ACPIBuildDeviceDpc). El pico que introdujo el código en esta llamada de función tiene un total de 455 KB.

      Captura de pantalla del gráfico de datos de ejemplo que muestra el uso de memoria por ACPI.sys por tamaño pendiente máximo mediante el tiempo de recurso como AllocTime, FreeTime (Agregación: Suma)

Paso 4: Medir la superficie de código del controlador

  1. Busque el gráfico Conjunto residente en la categoría Memoria del Probador de Graph.

  2. Arrastre y coloque el gráfico Conjunto residente en la pestaña Análisis.

  3. Asegúrese de deshacer el gráfico (Ctrl+Mayús+"-").

  4. Seleccione el valor preestablecido de gráfico de páginas con copia de seguridad de archivo.

    Captura de pantalla de la opción Página con copia de seguridad de archivo.

  5. A través de la columna de árbol de ruta de acceso, vaya al controlador seleccionado en el paso 3 (por ejemplo, ACPI.sys en C:/Windows/drivers).

  6. Expanda la categoría Controlador y céntrese en las páginas activas .

    El valor de la columna Tamaño representa el impacto que tiene el código de controlador en la superficie de memoria. En el ejemplo siguiente, es de 0,48 MB. Captura de pantalla de datos de ejemplo que muestran páginas activas.