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:
Grupo no paginado: Asignaciones garantizadas para residir en memoria física.
Grupo paginado: Asignaciones que se pueden paginar fuera de memoria en el archivo de página.
Grupo no paginable de NX: Asignaciones no paginadas, que no son ejecutables.
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.
Abrir WPR desde el menú Inicio
Seleccione los proveedores de eventos adecuados:
Uso del grupo
Conjunto de residentes
Evaluación de prioridades de primer nivel
Seleccione arranque como escenario de rendimiento.
Seleccione Archivo como modo de registro.
Establezca 1 como número de iteraciones.
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.
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. |
Abra el seguimiento que capturó en el paso 1 con WPA.
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.
Abra el menú Seguimiento y seleccione Cargar símbolos.
Busque el gráfico Pool (Grupo ) en la categoría Memoria del Probador de Graph
Arrastre y coloque el gráfico Grupo en la pestaña Análisis .
Organice la tabla para mostrar estas columnas:
Módulo de etiquetas de grupo
Paginado
Tipo de impacto
Pila
Etiqueta de grupo
Recuento
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.
Deshabilitar todas las series del gráfico (haga clic con el botón derecho en ->Deshabilitar ->En todo el gráfico ->Todas las series)
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
Acercar los primeros 30 segundos de la escala de tiempo.
Seleccione un controlador (por ejemplo, ACPI.sys, pero lo hará).
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.
Habilite la leyenda para las categorías de impacto y transitorios .
Para ordenar por tamaño de impacto , haga clic en el encabezado de columna.
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).
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.
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.
Ordene por Tamaño haciendo clic en el encabezado de columna.
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.
Paso 4: Medir la superficie de código del controlador
Busque el gráfico Conjunto residente en la categoría Memoria del Probador de Graph.
Arrastre y coloque el gráfico Conjunto residente en la pestaña Análisis.
Asegúrese de deshacer el gráfico (Ctrl+Mayús+"-").
Seleccione el valor preestablecido de gráfico de páginas con copia de seguridad de archivo.
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).
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.