Compartir a través de


Conjuntos de referencia y los efectos en todo el sistema sobre el uso de memoria

Un conjunto de referencia es la manera recomendada de comprender los efectos reales de un proceso en la disponibilidad de memoria del sistema en su conjunto.

Tradicionalmente, el uso de memoria se ha medido por el conjunto de trabajo del proceso en un momento dado. El conjunto de trabajo de un proceso es el conjunto de páginas del espacio de direcciones virtuales del proceso que actualmente residen en memoria física. (Para obtener más información sobre los conjuntos de trabajo, consulta Working Set on Windows Dev Center).

Limitaciones de un conjunto de trabajo

Un conjunto de trabajo proporciona información limitada, ya que no muestra toda la memoria que se usa para admitir el proceso, como los archivos almacenados en caché y la memoria usada por los servicios del sistema que utiliza el proceso. Además, un conjunto de trabajo depende en gran medida del estado de la máquina, su cantidad de RAM y el nivel de actividad requerido del subsistema de memoria para suministrar todos los procesos en el sistema con la memoria que solicitan (el nivel de presión de memoria). Además, un conjunto de trabajo se ve afectado en gran medida por las directivas de recorte del sistema operativo. Por lo tanto, un espacio de trabajo es solo una medida momentánea y omite los efectos fuera del proceso de destino.

Ventajas de un conjunto de referencias

Por el contrario, un conjunto de referencias es una medida del conjunto de páginas de memoria que cualquier proceso o actividad del sistema ha accedido durante un escenario determinado. Incluye todas las páginas a las que se accede en nombre del componente que se está investigando, independientemente del proceso al que se acceda a la página. El conjunto de referencias no varía en función del tamaño de la RAM, la presión de memoria ni las directivas de recorte del sistema operativo. Medir un conjunto de referencias es una manera extremadamente precisa de evaluar el uso de memoria en todo el sistema para cualquier carga de trabajo, ya que las páginas que están actualmente en el conjunto de trabajo de cualquier proceso, o a las que acceden los procesos o controladores del sistema, se incluyen en el conjunto de referencia. Un conjunto de referencias es específico de un escenario, no en un momento: no es válido preguntar, ¿Cuál es el conjunto de referencias de mi proceso en este momento? Sin embargo, es válido preguntar, ¿Cuál es el conjunto de referencia del sistema en este escenario? o ¿Cuál es el conjunto de referencias de mi proceso en este escenario?

La idea de un conjunto de referencias es sencilla: para proporcionar una imagen precisa de la memoria a la que se hace referencia en todo el sistema durante el escenario, las páginas se cuentan cuando se accede a ellas y cuándo se liberan. Este método proporciona una vista completa de los picos de uso de memoria, así como en lo que está pendiente al final del escenario (es decir, uso de estado estable).

Nota

Solo se captura la primera referencia de una página.

Un conjunto de referencias se puede considerar aproximadamente como una medida de la cantidad de memoria que podría quitarse del resto del sistema durante la ejecución del escenario o, de forma equivalente, la cantidad de memoria que tendría que ser errónea y leída del disco para ejecutar el escenario (si otras partes del sistema han provocado que se paginase la memoria). Por lo tanto, un conjunto de referencias es útil para determinar el impacto en el rendimiento del uso de memoria.

Recopilación de datos de conjuntos de referencia

Puedes usar dos herramientas de línea de comandos diferentes para recopilar datos del conjunto de referencia: Windows Performance Recorder (WPR) y Xperf. También puede usar la interfaz gráfica de usuario de WPR.

WPR y Xperf forman parte de Windows Performance Tookit, que se incluye en Windows Assessment and Deployment Kit (ADK). Puedes descargar el ADK para Windows 10 desde el siguiente vínculo: Windows Assessment and Deployment Kit.

Nota

Use un símbolo del sistema con privilegios elevados al recopilar datos del conjunto de referencias.

Recopilar datos con WPR

Para recopilar datos con WPR, escriba:

      wpr -start referenceset -filemode

Ejecute el escenario y, a continuación, detenga la recopilación de datos escribiendo:

      wpr -stopfile-name.etl

Recopilación de datos con Xperf

Al usar Xperf para recopilar seguimientos de memoria, especifique el mismo tamaño para los búferes mínimo y máximo para asegurarse de que hay una cantidad coherente de memoria del sistema reservada para seguimiento de eventos para Windows (ETW). Esta coherencia facilita la comparación entre las ejecuciones debido a la disminución de la variabilidad. (Estos búferes se establecen automáticamente en el mismo tamaño al usar WPR).

Para recopilar datos con Xperf, escriba:

xperf -on referenceset -minbuffers 50 -maxbuffers 50 -buffersize 1024 -stackwalk PageAccess+PageRelease+PageRangeAccess+PageRangeRelease+PagefileMappedSectionCreate+VirtualFree+PagefileMappedSectionDelete -start user -on Win32HeapRanges -minbuffers 10 -maxbuffers 10 -buffersize 1024

Ejecute el escenario y, a continuación, detenga la recopilación de datos escribiendo:

      xperf -stop user -stop -dfile-name.etl

Recopilación de datos con la aplicación de escritorio WPR

También puede recopilar datos mediante la aplicación de escritorio de WPR, wprui.exe. En la GUI, en Análisis de recursos, seleccione Análisis del conjunto de referencia. (Si no ve esta opción, es posible que tenga que hacer clic en Más opciones y, a continuación, expandir Análisis de recursos).

Cuadro de diálogo inicial de Windows Performance Recorder (WPR).

Para iniciar la grabación, haga clic en Iniciar y, a continuación, ejecute el escenario.

Para detener la grabación y guardar los datos de seguimiento, haga clic en Guardar.

Cuadro de diálogo de Windows Performance Recorder (WPR) que muestra la grabación activa.

Funcionamiento del seguimiento del conjunto de referencias

Cuando WPR comienza a recopilar el seguimiento de un conjunto de referencias, el sistema quita inmediatamente todas las páginas de memoria de los conjuntos de trabajo de todos los procesos, incluido el sistema. Además, todas las páginas que permanecen en los conjuntos de trabajo de un proceso o el sistema se registran para tener en cuenta las páginas bloqueadas o marcadas como no paginables. Después, en el primer acceso de una página que se movió a la lista en espera, el sistema registra un error suave en el seguimiento del conjunto de referencia, la página se agrega al conjunto de trabajo del proceso y el proceso continúa ejecutándose. Los accesos posteriores a una página del conjunto de trabajo del proceso o sistema no provocarán otro error de página temporal, ya que la página ya está en el espacio de trabajo. Como resultado, la ejecución continúa sin registrar ningún acceso adicional a las páginas de un espacio de trabajo y, por lo tanto, el número total de accesos a una página no se registra en el seguimiento.

Del mismo modo, el primer acceso de cualquier otra página del mismo proceso se registra en el seguimiento, incluidas las páginas recién asignadas. Las páginas que se liberan (por ejemplo, HeapFree) y los archivos que se eliminan tienen su tamaño pendiente quitado del conjunto de referencia al final del intervalo de medición, pero todavía se muestran como accesibles. Los archivos cerrados o ejecutables que se quitan de la memoria no se quitan del tamaño pendiente, ya que no se purgan de la RAM al cerrar o quitar. Si una página se comparte entre dos o más procesos, el seguimiento registrará el primer acceso a esa página en cada proceso que lo toque.

Nota

Registrar el seguimiento de un conjunto de referencias puede tener un efecto significativo en el rendimiento del sistema, ya que todos los procesos deben devolver un gran número de páginas a sus conjuntos de trabajo después de vaciar sus conjuntos de trabajo.

Visualizaciones de conjuntos de referencia

WPA ofrece las siguientes vistas de los datos del conjunto de referencia:

Tamaño pendiente del conjunto de referencias por proceso

Esto muestra la memoria dividida por proceso para la ventanilla. Este es un buen lugar para empezar si está investigando el efecto en la memoria de una aplicación determinada.

Ejemplo de la vista

Para conocer los significados de las columnas de esta vista, vea Definiciones de columna importantes, más adelante en este tema.

Conjunto de referencias tamaño pendiente por categoría

Esto muestra las páginas de memoria por categoría de la ventanilla.

Ejemplo de la vista

Para obtener una explicación de las categorías de página, vea Categoría de página (dinámica) y Categoría de página (archivo), más adelante en este tema.

Tamaño pendiente del conjunto de referencias por dinámica o archivo

Esto muestra la memoria clasificada por si está respaldada por memoria o con respaldo de archivo para la ventanilla.

Ejemplo de la vista

Nota

Las páginas con respaldo de memoria están respaldadas por el archivo de página o, en el caso del grupo no paginado, nunca se paginan. Las páginas con respaldo de memoria incluyen pila, montón, VirtualAlloc y otras categorías de página que no se asignan directamente a un archivo en el disco. Las páginas con respaldo de archivos están respaldadas por archivos individuales en disco, como imágenes de módulo.

Descripción de los datos del conjunto de referencia

Como se mencionó antes, el conjunto de referencias representa la memoria que se tocó durante la ejecución del escenario de interés. A este respecto, el conjunto de referencia es el costo real de ejecutar la carga de trabajo y representa la contabilidad más precisa de la superficie de memoria de la carga de trabajo.

Normalmente, le interesa la superficie de memoria de un proceso determinado, por lo que querrá empezar con la tabla Conjunto de referencias pendiente por proceso . Querrá examinar los lugares en los que el uso de memoria aumentó o disminuyó, así como dónde alcanzó el pico y dónde estaba estable.

Estado máximo frente a estable

Dado que el conjunto de referencias es la medida de la cantidad de memoria a la que se hace referencia durante un escenario, es posible que no sea intuitivo que su tamaño pueda disminuir. Cuando se libera la memoria y se devuelve al sistema que se va a usar con otros fines, se resta del conjunto de referencia para reflejar el hecho de que se puede reutilizar posteriormente.

Esto hace que un escenario tenga dos métricas principales del conjunto de referencias: estado estable y pico.

MétricaDescripción
Estado estable 

Costo de línea base de la aplicación o escenario. Esto se puede medir ejecutando un escenario (o varios escenarios) y esperando a que el sistema vuelva a alcanzar un estado inactivo. Al minimizar el número de páginas a las que la aplicación accede en un estado estable en varios escenarios, puede ver que los escenarios se ejecutan más rápido (por ejemplo, reanudar más rápidamente) y proporcionar una experiencia que sea mejor para el usuario, ya que reducirá la presión de memoria en el sistema.

Peak

Uso transitorio elevado de memoria, que puede insertar información más valiosa fuera de la memoria física. Al reducir la frecuencia y la magnitud de los picos de uso, la aplicación o característica será un mejor "ciudadano del sistema" reduciendo el potencial de intercambio o finalización de otros procesos.

Definiciones de columna importantes

Al examinar el seguimiento de un conjunto de referencias en WPA, las columnas siguientes de la vista de tabla son especialmente importantes:

Si falta una de estas columnas en la vista en WPA, puede agregarla haciendo clic con el botón derecho en un encabezado de columna en la vista actual y seleccionando la columna que falta en la lista.

Las tres vistas del conjunto de referencias proporcionan 4 columnas diferentes que proporcionan tamaños de la memoria que se cuentan:

  • Tamaño (Vista proceso):el conjunto total de páginas a las que hace referencia el proceso especificado.
  • Tamaño (Vista del sistema):el conjunto de páginas a las que hace referencia
  • Tamaño de impacto (vista Proceso)
  • Tamaño de impacto (vista del sistema)

Las distintas vistas muestran columnas diferentes de forma predeterminada, pero todas están disponibles en todas las vistas de conjunto de referencias si las busca y suman tamaños de la misma manera, independientemente de las vistas en las que los use.

Tipo de impacto

La columna Tipo de impacto identifica el tipo de efecto que tiene una asignación de memoria en la memoria actualmente en uso: Impacto, Transitorio y Persistente.

Tipo de impacto Descripción
Impactando

Memoria que se asignó (A) antes del inicio de la ventanilla y se liberó durante la ventanilla (asignada fuera y libre dentro) o (B) asignada durante la ventanilla y se liberó después del final de la ventanilla (asignada dentro y libre fuera). Una asignación que afecta a la memoria en uso al final de la ventanilla.

Transitorio

Memoria que se asignó y liberó durante la ventanilla (asignada dentro y libre dentro). Una asignación transitoria solo está activa dentro de la ventanilla actual. Las asignaciones transitorias suelen contribuir a los picos de uso dentro de una ventanilla.

Persistente

Asignaciones que se asignaron antes del inicio de la ventanilla y se liberaron después del final (asignadas fuera y libres fuera). Una asignación persistente está activa durante toda la ventanilla.

Tamaño e impacto

La columna Tamaño del conjunto de referencias pendiente por proceso representa la magnitud de los accesos, independientemente del tipo de efecto (que se muestra en la columna Tipo de impacto) que provoca una asignación, que podría ser una de Impacto, Transitorio o Persistente. Esto no es muy valioso para el análisis, pero es necesario para el grafo en WPA.

El tamaño de impacto representa el efecto en el tamaño desde la marca de tiempo inicial hasta la marca de tiempo final para el nivel de zoom actual. Una comparación de los valores gráficos al principio y al final del campo de vista, en términos simples, corresponde a la diferencia. Los accesos transitorios o persistentes no hacen que el valor grafo cambie para la ventana de zoom, por lo que no cuentan.

Cuando dos procesos hacen referencia a la misma página de memoria física, la página se cuenta para cada proceso de la columna Tamaño . Agregar los dos valores no genera un total de todo el sistema para el conjunto de referencias, porque después de agregar la página al conjunto de trabajo, no se cuenta el acceso posterior. La página también se cuenta en la columna Tamaño de impacto , justo una vez, para el primer proceso que accede a la página. Agregar los valores en Tamaño de impacto para un proceso genera un total válido en todo el sistema para el conjunto de referencia y lo hace sin faltar ni multiplicar el recuento de ninguna página. Por lo tanto, los valores de Tamaño de impacto representan los efectos reales en todo el sistema en la memoria.

Considere un ejemplo, de t_start a t_end, con los siguientes valores:

  • Gráfico en t_start: 10 MB

  • Nuevos accesos (impacto) en la ventana: 10 MB

  • Acceso transitorio en la ventana: 10 MB

  • Gráfico en t_end: 10 (persistente) + 10 (impacto) = 20

  • Columna tamaño: 10 (persistente) + 10 (transitorio) + 10 (impacto) = 30

  • Columna Tamaño de impacto: 10 (impacto)

Nota

Acercar y alejar cambia la ventanilla y hace que estos tamaños se vuelvan a calcular.

Clase Category

Hay dos categorías de acceso para las páginas de memoria, identificadas en WPA en la columna Clase de categoría : Dinámica o Archivo.

Clase Category Descripción
Dinámica

Se trata de asignaciones a petición de memoria asociadas a un proceso o estado del sistema que no se conservan en un apagado del sistema. Las asignaciones pueden ser no paginadas o respaldadas por el archivo de página, y pueden ser Montón, VirtualAlloc, etc., como se identifica en la columna Categoría de página. La memoria dinámica que se puede compartir también se identifica en categoría de página como PFMappedSection.

Archivo

Estos son archivos a los que se hace referencia mediante el procesamiento respaldado por un archivo en el disco. Archivos cargados como datos, archivos cargados como imágenes (ejecutables o DLL) y archivos de asignación.

Categoría de página (dinámica)

En la columna Categoría de página , cuando la clase de categoría es Dinámica, WPA muestra una o varias de las categorías descritas en la tabla siguiente.

Categoría de página , asignación dinámica Descripción
VirtualAlloc Esta categoría de página incluye asignaciones dinámicas grandes (mayores de 512 KB o 1 MB, según el sistema) asignaciones dinámicas realizadas por la aplicación (o realizadas por el marco en nombre de la aplicación) mediante las API de asignación virtual.
Montón Esta categoría de página incluye asignaciones pequeñas y dinámicas realizadas por la aplicación (o realizadas por el marco en nombre de la aplicación) mediante las API de asignación del montón.
UserStack Pila en modo de usuario para un subproceso.
PFMappedSection Memoria dinámica que se puede compartir. Esta categoría de página suele medir la cantidad de memoria gastada en las asignaciones de gráficos. Desde una perspectiva de la aplicación, esto incluye no solo imágenes, vídeos, otras asignaciones de "canalización multimedia" que la aplicación usa, sino que también incluye los bloques de creación básicos de la interfaz de usuario, como las superficies usadas para representar una ListView.
CopyOnWriteImage Copiar páginas de escritura para los módulos cargados en el proceso.
LargePage
AWEPage Páginas físicas asignadas por un proceso.
PageTable
PagedPool Montón de kernel.
Non-PagedPool Montón de kernel no paginable.
SessionPrivate
KernelStack Pila de modo kernel.
Controlador
DriverLockedSystemPage
PTE del sistema

Categoría de página (archivo)

En la columna Categoría de página , cuando la clase de categoría es File, WPA muestra una o varias de las categorías descritas en la tabla siguiente.

Categoría de página, archivo Descripción
Imagen Un archivo cargado como ejecutable, como un archivo DLL.
MapFile Un archivo cargado como datos.
Metarchivo Un directorio o un registro del sistema.
RegistryFile Un archivo del Registro.
Captura previa Información que se usa para acelerar el inicio de una aplicación.
DriverFile Controlador que se carga como ejecutable.

Pila de asignación

La columna Pila de asignación identifica dónde se asigna la memoria.

Impacto de la pila

En la columna Pila de impacto se muestra por qué se accede a la memoria.

Recomendaciones para medir y mejorar el rendimiento en un conjunto de referencia

Las siguientes recomendaciones generales son útiles para medir un conjunto de referencias y mejorar los efectos de una aplicación o característica en el sistema. Use estas recomendaciones en el orden siguiente:

Nota El seguimiento usa memoria, que es visible como grupo no paginado con la descripción "ETWB" para los búferes ETW.

Examen del uso de estado estable y el uso máximo de la memoria

Dos aspectos son importantes: (1) la cantidad de uso de memoria que se encuentra en un estado estable al final del escenario y (2) donde se producen los picos de uso en el conjunto de referencia y por qué. El análisis debe centrarse primero en el impacto de estado estable del escenario y, a continuación, examinar los picos específicos en los gráficos del conjunto de referencia.

Céntrese en el proceso con los mayores efectos

Céntrese en los procesos que tengan el mayor efecto en el conjunto de referencia, incluido el proceso de interés, así como en otros procesos del sistema.

Caracterización y categorización de páginas de memoria

La caracterización debe ser para ambas clases de categorías de páginas de memoria, dinámicas y archivos, y dividirse aún más en subcategorías.

Examinar páginas de memoria en la categoría Archivo

La mejor manera de examinar los accesos a archivos suele ser agruparlos por árbol de ruta de acceso y, a continuación, identificar accesos a archivos relacionados con el sistema (como archivos DLL) y accesos a archivos específicos del proceso (como bases de datos locales, archivos de texto, JPEG, etc.).

Minimizar el acceso a archivos específicos del proceso reduce el tamaño del conjunto de referencias. También mejora el rendimiento para iniciar las pruebas antes de que se cargue la aplicación o la característica ( un escenario en frío).

Básicamente, el diagnóstico de la parte de archivo de un conjunto de referencia requiere saber qué archivos DLL son únicos para su escenario y por qué se cargan, así como los archivos a los que accede la aplicación o característica (por ejemplo, archivos de imagen al descodificar para una presentación).

Examinar páginas de memoria en la categoría Dinámica

Use la secuencia siguiente para analizar el seguimiento de un conjunto de referencias:


Clasificación por categoría de página

Clasifique por categoría de página en lo siguiente: Win32Heap, VirtualAlloc o PFMappedSection. La categoría se puede atribuir directamente al proceso.

Normalmente, se pueden omitir categorías específicas del sistema para el análisis inicial, aunque las contribuciones principales (más de 2-3 MB) del grupo paginado o la pila de kernel suelen merecer la pena examinar, ya que este volumen suele indicar un uso excesivo de subprocesos o componentes, como el Registro.

Aplicación de etiquetas de pila

La aplicación de etiquetas de pila para clasificar el uso de memoria por pila puede ser muy útil para identificar de dónde procede el uso de memoria.

Realizar un seguimiento específico del montón

Aunque las etiquetas de pila de un conjunto de referencia pueden proporcionarle una idea general de qué procesos usan el montón, a menudo debe realizar un seguimiento específico del montón si el uso del montón tiene un efecto significativo en su escenario. Un conjunto de referencias no proporciona la granularidad necesaria para analizar el montón desde el punto de vista de la asignación, ya que el conjunto de referencias solo identifica a qué páginas de memoria se hace referencia. Un montón muy fragmentado puede mostrar una superficie de estado estable grande para el uso del montón incluso si las asignaciones del montón son pequeñas pero dispersas a lo largo del montón.

Examen de las pilas de asignaciones que tienen un uso elevado

VirtualAlloc: examine las pilas de asignación específicas que tienen un uso elevado de VirtualAlloc. La visualización de VirtualAlloc Commit LifeTimes en la pestaña Análisis muestra detalles sobre el uso de confirmación por proceso.

Examinar los procesos del sistema que tienen efectos significativos

¿Hay otros procesos del sistema que tengan mayores efectos en la memoria como resultado de este escenario? Algunos ejemplos de candidatos son los servicios, los agentes de aplicaciones y los escáneres antivirus.

Clasificar para analizar los costos e identificar las opciones de reducción

Después de haber trabajado en las recomendaciones anteriores, use el procedimiento siguiente para analizar las pilas que tienen el mayor efecto en el sistema y explorar formas de reducir los costos de memoria.

  1. Identifique las pilas que tienen los costos más altos.

  2. Use anotaciones para clasificar las pilas con un nombre para lo que se supone que debe hacer cada una.

  3. Tenga en cuenta si el costo de cada categoría y pila es una cantidad esperada para el escenario.

  4. Tenga en cuenta si puede reducir los picos en el escenario activo, por ejemplo, asignando memoria solo cuando sea necesario.

  5. Considere si puede reducir el uso de memoria de estado estable. Por ejemplo, ¿puede liberar recursos durante el estado estable que son específicos del escenario y no son necesarios? Algunos ejemplos pueden incluir cachés y recursos agrupados. Liberar recursos puede reducir la superficie de memoria de estado estable.