Interioridades de la memoria de Windows (parte 2) — El ciclo de vida de la página física: las cinco listas y la verdad sobre el archivo de paginación

· Actualizado el: · · Windows, Gestión de memoria, Archivo de paginación, Working Set, Standby, RAMMap, Supervisión del rendimiento

En la entrega anterior, «Interioridades de la memoria de Windows (parte 1) — El instante en que una dirección virtual se convierte en RAM física», seguimos el proceso hasta el momento en que el manejador de errores de página asigna una página física al tocar por primera vez una página con Commit. Pero, ¿adónde va esa página física una vez que sale del Working Set?

Es habitual encontrar explicaciones que se conforman con decir «se expulsa al archivo de paginación», pero en realidad existen varios estados antes y después de eso. Una página que no ha sido modificada puede pasar a Standby conservando su contenido. Una página modificada primero espera en Modified a que se la vuelva a escribir. Al reutilizarse, puede pasar por Free o Zeroed, y si el mismo contenido vuelve a necesitarse, incluso puede recuperarse desde Standby mediante un error de página leve (soft fault).

En este artículo, tomando como eje la base de datos PFN, seguimos cómo se mueve una sola página física entre Active, Modified, Standby, Free y Zeroed. Damos por supuesta la forma de leer las cifras que se explicó en el artículo introductorio «¿Qué representa realmente el “uso de memoria” de Windows?».

La serie completa “Interioridades de la memoria de Windows” (3 partes)

  1. Parte 1: Direcciones virtuales y errores de página
    Seguimos el momento en que una página virtual con Commit obtiene RAM física.
  2. Parte 2 (este artículo): El ciclo de vida de la página física
    Seguimos la transición de estados de una página que sale del Working Set y el papel del archivo de paginación.
  3. Parte 3: Objetos de sección y copy-on-write
    Seguimos cómo las DLL, las asignaciones de archivos y la memoria compartida comparten páginas físicas.

La pregunta que responde esta segunda entrega es una sola:

Cuando una página física sale del Working Set, ¿desaparece, va al disco o permanece en la RAM?

El público objetivo son desarrolladores y responsables de operaciones que quieren entender, desde su funcionamiento interno, por qué hay mucho Available y a la vez mucho Standby, el comportamiento tras el recorte del Working Set, la configuración del archivo de paginación y la compresión de memoria. El entorno previsto es Windows 10/11 o una versión actual de Windows Server, y los conocimientos previos son los fundamentos de Working Set, Commit y los errores de página leves/graves (soft/hard fault). El nivel es intermedio: se usan términos internos como PFN y listas de páginas, pero el foco está en lo que se puede observar con RAMMap y PerfMon, sin necesidad de un depurador de kernel.

1. Conclusión inicial

Antes que nada, resumimos los puntos que suelen malinterpretarse.

  • Una página que sale del Working Set no necesariamente desaparece de inmediato.
    Una página limpia (clean) permanece en Standby, y si vuelve a necesitarse el mismo contenido, puede recuperarse sin leer del disco.
  • Una página modificada no puede reutilizarse de inmediato.
    Si el contenido es privado, se lleva a un estado en el que puede escribirse de vuelta en el archivo de paginación; si es un archivo mapeado, en el archivo correspondiente, y solo entonces se reutiliza.
  • Available incluye Standby.
    Standby es a la vez una caché que conserva contenido y un candidato a reutilización que puede arrebatarse de inmediato si es necesario.1
  • La escritura en el archivo de paginación no es un proceso masivo que empieza cuando la RAM se agota por completo.
    Avanza en segundo plano según la lista Modified y la presión de memoria.23
  • El archivo de paginación no es solo “RAM lenta”.
    Amplía el Commit Limit, sirve de respaldo para las páginas privadas modificadas y sostiene el volcado de memoria en caso de fallo.4
  • Deshabilitar el archivo de paginación no corrige las fugas de memoria.
    Reduce el Commit Limit y puede disminuir tanto las opciones para aprovechar la RAM eficientemente como la capacidad de obtener volcados de memoria.

Resumido en una frase: antes de descartar una página, Windows comprueba la probabilidad de que vuelva a necesitarse y el lugar desde el que puede restaurarse su contenido original.

2. La base de datos PFN — el libro de registro del lado de la RAM física

En la primera entrega vimos que la PTE representa la traducción de una página virtual a una página física. Vista ahora desde el lado de la página física, la base de datos PFN es el libro de registro que hace seguimiento de «para qué se usa en este momento esta página de RAM». PFN son las siglas de Page Frame Number, es decir, la numeración de la RAM física por unidades de página.

Conceptualmente, cada entrada PFN hace seguimiento de la siguiente información:

  • Estado actual de la página física
  • Número de referencias y de recursos compartidos
  • La PTE correspondiente
  • Si ha sido modificada o no
  • A qué lista de páginas pertenece
  • Información relacionada con el nodo NUMA y la prioridad

En WinDbg, !pfn muestra la información de un PFN concreto y !memusage muestra el estado de uso de la memoria física y el resumen de cada lista de páginas.56 Si desea observar el mismo panorama sin usar un depurador de kernel, puede recurrir a RAMMap, de Sysinternals. En Use Counts se ve el uso y la lista de páginas, en Priority Summary el Standby desglosado por prioridad, y en Physical Pages el uso por página individual.7

3. Cómo se conectan los cinco estados en un solo diagrama

En este artículo simplificamos el flujo de la página física a los siguientes cinco estados. Para ser estrictos, el Windows actual tiene estados y listas que no se representan aquí, como el Standby desglosado por prioridad, Transition o Bad, y Active tampoco es tanto una única «lista Active» como un estado en el que la página está siendo referenciada, por ejemplo desde el Working Set, a través de una PTE válida. Aun así, este esquema resulta suficiente para interpretar el comportamiento de memoria de una aplicación.

Diagrama simplificado de una página física de Windows moviéndose entre Active, Modified, Standby, Free y Zeroed

Figura 1: Una página referenciada desde el Working Set pasa a Standby si está limpia (clean) o a Modified si está modificada (dirty). Si vuelve a necesitarse el mismo contenido, se recupera; si es para otro fin, se reutiliza directamente o pasa por Free/Zeroed en previsión de una asignación que requiera ceros.

Código fuente Mermaid de la figura 1 ```text flowchart LR zeroed["Zeroed\nCon ceros"] -->|Primer Touch| active["Active / Valid\nReferenciada desde el Working Set"] active -->|Recorta clean| standby["Standby\nCandidata a reutilización con contenido"] active -->|Recorta dirty| modified["Modified\nEsperando escritura de vuelta"] modified -->|Escritura completada| standby standby -->|Recupera por soft fault| active standby -->|Descarta identidad anterior| free["Free\nSin poner a cero"] standby -->|Reutiliza directamente para otro fin| active free -->|Para asignación que requiere ceros| zeroed ```

Lo más importante de este esquema es que salir del Working Set y perder el contenido no son lo mismo. Además, cuando se arrebata una página de Standby para otro fin, no siempre se pasa en orden por Free/Zeroed. Si se va a entregar como una nueva página privada de demanda cero al modo usuario, es necesario borrar el contenido anterior, pero si el uso implica sobrescribir toda la página, como al ser destino de una lectura de contenido de archivo, basta con quitar la identidad de Standby y reutilizarla directamente.

4. Active / Valid — la página física a la que se puede acceder ahora mismo

Una página Active/Valid está referenciada desde el Working Set de un proceso o desde el espacio del sistema a través de una PTE válida. La CPU puede alcanzarla mediante la traducción de direcciones normal, por lo que ese acceso en sí no requiere un error de página.

Sin embargo, no hay garantía de que una página permanezca Active. Para mantener la memoria disponible, el administrador de memoria observa el tamaño del Working Set y el uso reciente de cada página, y recorta las candidatas. La documentación de Microsoft sobre Working Set también explica que el administrador de memoria elimina páginas del Working Set para generar memoria disponible.8

4.1. Recortar no es liberar

Lo que cambia con el recorte del Working Set es, principalmente, solo el estado residente al que se puede acceder ahora mismo mediante una PTE válida. Distinga los cuatro puntos siguientes como sucesos independientes:

  • Sacar de Working Set
  • Liberar el Commit
  • Liberar el rango de direcciones virtuales
  • Perder los datos originales

Ejecutar EmptyWorkingSet o la opción «Trim Working Set» de alguna herramienta no sustituye a VirtualFree ni a la liberación del heap. Si se vuelve a tocar la misma página, esta regresa mediante un error de página leve (soft fault) desde Standby o un error de página grave (hard fault) desde el respaldo. Por lo tanto, haber «reducido el Working Set» no significa haber «corregido una fuga».

5. Las páginas limpias (clean) van a Standby

Aunque una página salga del Working Set, si su contenido es igual al del archivo original o ya cuenta con un respaldo seguro, puede colocarse en Standby. Los ejemplos representativos son los siguientes:

  • Código de EXE/DLL sin modificar
  • Archivos mapeados en memoria sin modificar
  • Páginas privadas ya escritas de vuelta
  • Datos que permanecen en la caché de archivos

Una página en Standby conserva la correspondencia con su contenido anterior. Cuando el mismo proceso u otro proceso necesita ese contenido, si todavía no se ha reutilizado, puede recuperarse con solo un error de página leve que reconecte la PTE.

Por otro lado, si otra asignación necesita una página física, puede descartarse la identidad anterior de Standby y reutilizarla. Si el destino de reutilización es una página privada de modo usuario que requiere inicialización a cero, se prepara mediante Zeroed; pero si el uso sobrescribe toda la página, como con contenido de archivo, puede reasignarse directamente sin ponerla a cero.

Esta doble naturaleza es precisamente la razón por la que Standby es a la vez una caché y parte de Available.

5.1. Por qué Standby forma parte de Available

MEMORYSTATUSEX.ullAvailPhys representa la memoria física que puede reutilizarse de inmediato sin escribir en disco, y es la suma de Standby, Free y Zeroed.1

Las tres listas de páginas que componen AvailableLa memoria física disponible es la suma de Standby, Free y Zeroed, y no incluye las páginas Active referenciadas desde el Working SetNo incluidaStandby (candidata a reutilización con contenido)Available (memoria física disponible)Free (espacio libre sin poner a cero)Zeroed (espacio libre con ceros)Active (referenciada desde el Working Set)

Figura 2: Available es la suma de Standby, Free y Zeroed. Incluso Standby, que conserva su contenido, se cuenta como “disponible”.

Por eso no hay contradicción en que el Administrador de tareas muestre «Free es bajo, pero Cached/Standby es alto y Available es suficiente». Windows no deja la RAM libre sin más: conserva en Standby los archivos y el código usados recientemente para reutilizarlos rápidamente como caché cuando hace falta, y los arrebata cuando se necesitan para otro fin.

No concluya que hay escasez de memoria solo porque Free es bajo: observe en conjunto Available, Commit, los errores de página graves y la latencia de procesamiento.

6. Las páginas modificadas (dirty) esperan en Modified

Cuando una aplicación escribe en una página, su contenido deja de coincidir con el del respaldo original. Si esta página modificada (dirty) se sobrescribiera tal cual para otro fin, se perderían los datos. Por eso, una página modificada que sale del Working Set espera en Modified a que se la escriba de vuelta.

El destino de la escritura de vuelta varía según el tipo de página.

Tipo de página Destino habitual de la escritura de vuelta
Página privada con Commit Archivo de paginación
Archivo mapeado con permiso de escritura El archivo de datos correspondiente
Datos dirty de la caché de archivos El archivo de datos correspondiente
Página de EXE/DLL limpia (clean) No requiere escritura de vuelta. Puede volver a leerse desde la imagen original

La documentación de Microsoft sobre el archivo de paginación también explica que los archivos .dll, .exe y los archivos normales que ya existen en disco no necesitan volver a escribirse en el archivo de paginación, y que son precisamente los datos modificados que no tienen una copia original en disco los que se convierten en candidatos para el archivo de paginación.2

6.1. Modified Page Writer

Modified Page Writer es un trabajador del sistema que recorre las páginas dirty respaldadas por el archivo de paginación que rastrea el administrador de memoria, y las escribe en el archivo de paginación.3 En el lado de los archivos mapeados existe una ruta como Mapped Page Writer, que coordina con el sistema de archivos y el administrador de caché para escribir de vuelta en el archivo correspondiente.

Lo importante aquí es que la escritura no funciona con el criterio de «no hacer nada hasta que la RAM llegue a 0 bytes». Windows prepara en segundo plano, según el estado de la lista Modified, de Available y del archivo de paginación, las páginas que podrán reutilizarse en el futuro. Una vez terminada la escritura de vuelta, si no queda ninguna otra referencia válida, la página puede avanzar a Standby conservando su contenido.

Ruta de escritura de vuelta de las páginas modificadasUna página modificada que sale del Working Set espera en la lista Modified. Si es privada y hay un archivo de paginación configurado, Modified Page Writer la escribe en el archivo de paginación, y si es de un archivo mapeado, Mapped Page Writer u otra ruta la escribe en el archivo de datos correspondiente. Tras completarse, la página pasa a Standby conservando su contenidoPágina privada (con archivo de paginación configurado)Página de archivo mapeadoPágina modificada que sale del Working SetEspera en la lista Modified a ser escrita de vueltaModified Page Writer la escribe en el archivo de paginaciónMapped Page Writer u otro la escribe en el archivo correspondienteTras completar la escritura, pasa a Standby conservando el contenido

Figura 3: El destino de la escritura de vuelta lo determina el tipo de página, y ambas rutas avanzan en segundo plano. En un sistema con el archivo de paginación deshabilitado, no existe destino de escritura para las páginas privadas, por lo que las páginas privadas modificadas permanecen en la RAM.

6.2. Distinguir la salida de páginas de la E/S propia del archivo de paginación

Los siguientes contadores suelen confundirse, así que conviene aclarar su significado.

  • Memory\\Page Writes/sec: número de operaciones de E/S de escritura de paginación emitidas para liberar memoria física
  • Memory\\Pages Output/sec: número de páginas enviadas a disco mediante esas escrituras
  • Memory\\Page Reads/sec: número de operaciones de E/S de lectura de disco emitidas para resolver errores de página graves
  • Memory\\Pages Input/sec: número de páginas que entraron en la RAM mediante esas lecturas

Conviene tener presente que Page Writes/sec y Pages Output/sec no son contadores que identifiquen exclusivamente el archivo de paginación: también pueden incrementarse por rutas que escriben de vuelta páginas dirty respaldadas por archivos, como los archivos mapeados. A la inversa, el lado de entrada tampoco distingue entre el archivo de paginación, las DLL, los EXE y los archivos mapeados en memoria.2 Si desea identificar la E/S específica de pagefile.sys, no la estime solo a partir de estos cuatro contadores: registre File I/O y Disk I/O con ETW/WPA y correlacione FileObject con FileName para confirmar el archivo implicado.9

Cabe añadir además que haber escrito antes en el archivo de paginación no implica que vaya a leerse de vuelta del disco de inmediato. Si no se accede a ella, la página ya escrita puede sacarse de la RAM, liberando memoria física para páginas de uso más frecuente.

7. Diferencias entre Standby, Free y Zeroed

7.1. Standby

Es el estado en el que se conserva la correspondencia con el contenido anterior.

  • Si se necesita el mismo contenido, puede recuperarse mediante un error de página leve
  • Si se necesita para otro fin, puede descartarse la identidad anterior y reutilizarse
  • Existen listas de Standby diferenciadas por prioridad

7.2. Free

Es un estado en el que se ha perdido la correspondencia válida con el contenido anterior y la página puede asignarse. Sin embargo, dentro de la página puede quedar la secuencia de bits anterior. Si se entrega tal cual al modo usuario, existe el riesgo de filtrar información del proceso anterior.

7.3. Zeroed

Es un estado en el que el contenido son ceros y puede entregarse de forma segura como una nueva página al modo usuario. El error de página de demanda cero de la primera entrega era un ejemplo representativo de obtener una página Zeroed disponible y enlazarla a una PTE. La preparación de Free a Zeroed se realiza según la demanda y el estado del sistema.

En otras palabras, aunque tanto «Free» como «Zeroed» parezcan espacio libre, su estado de preparación desde el punto de vista de la seguridad es distinto.

8. El almacén de compresión de memoria — otro destino dentro de la RAM

El administrador de memoria de Windows 10 en adelante, cuando hay presión de memoria, en lugar de escribir de inmediato en disco las páginas de baja frecuencia de uso, puede comprimirlas dentro de la RAM en ciertos casos. Este conjunto de páginas comprimidas es el compression store (almacén de compresión).

En la implementación inicial de Windows 10, el almacén de compresión se contabilizaba dentro del Working Set del proceso System, pero en el Windows actual aparece en la lista de procesos de las herramientas de depuración como un proceso dedicado Memory Compression. Por lo tanto, al investigar la cantidad de compresión actual no debe seguirse únicamente el Working Set del proceso System. El objetivo en sí —mantener más aplicaciones en memoria física y reducir la E/S de disco— no ha cambiado.1011

No obstante, tenga presentes los siguientes puntos:

  • Las páginas comprimidas también usan RAM
  • Comprimir y descomprimir tiene un coste de CPU
  • Comprimir no elimina la garantía del Commit
  • No sigue siempre un orden fijo de «primero comprimir, luego el archivo de paginación»
  • La política varía según el tipo de página, la presión y el historial de acceso

El indicador «En uso (comprimido)» del Administrador de tareas no significa que la compresión haya liberado por completo la memoria física. El almacén de compresión no es una función que elimine la necesidad del archivo de paginación, sino que añade, entre la RAM y el almacenamiento, una opción más que usa CPU para reducir la E/S.

9. El verdadero papel del archivo de paginación

El archivo de paginación cumple al menos tres funciones.

Las tres funciones del archivo de paginaciónEl archivo de paginación amplía el Commit Limit, sirve de respaldo para las páginas privadas modificadas de baja frecuencia de acceso y actúa como receptor del volcado de memoria del sistemaArchivo de paginaciónAmplía el Commit Limit (margen del lado del límite)Respaldo de las páginas privadas modificadasReceptor del volcado de memoria del sistema

Figura 4: El papel del archivo de paginación no se limita a ser «RAM lenta». Incluso con un uso de 0, sostiene el límite y el volcado.

9.1. Ampliar el Commit Limit

El Commit Limit del sistema se determina, en términos generales, por la suma de la RAM y de todos los archivos de paginación. Si se elimina el archivo de paginación, el Commit Limit desciende a un nivel algo menor que la RAM instalada. Cuando el Commit Total alcanza ese límite, los nuevos Commit fallan, lo que puede provocar el cierre anómalo de aplicaciones o inestabilidad del sistema.4

Esto es independiente de «cuántos GB se están escribiendo ahora mismo en pagefile.sys». El archivo de paginación también es el margen del lado del límite que sostiene la garantía del Commit.

9.2. Sostener las páginas privadas modificadas

Si el archivo de paginación respalda las páginas privadas modificadas de baja frecuencia de acceso, esas páginas físicas pueden sacarse de la RAM y destinarse al código o los datos de uso frecuente.4 Al deshabilitar el archivo de paginación se reduce la opción de sacar estas páginas de la RAM. No puede afirmarse simplemente que «al no haber page-out, es más rápido».

9.3. Sostener el volcado de memoria del sistema (crash dump)

Para generar Memory.dmp cuando el sistema falla, se necesita un archivo de paginación o un archivo de volcado dedicado capaz de sostener el método de volcado elegido.2 La cantidad necesaria varía entre un volcado completo de memoria, un volcado de memoria del kernel y un volcado de memoria automático.

En entornos donde se realiza investigación de fallos, eliminar el archivo de paginación únicamente para ahorrar espacio puede hacer que no quede evidencia justo cuando más se necesita. Para el método de recolección, consulte también «Introducción a la recolección de volcados de memoria de aplicaciones de Windows».

10. El tamaño adecuado no es uniforme

No conviene decidir el tamaño del archivo de paginación basándose únicamente en una fórmula fija como «1,5 veces la RAM». Microsoft explica que el tamaño adecuado varía de un sistema a otro según los dos puntos siguientes y no puede generalizarse.2

  1. Commit Charge máximo del sistema en el pico
  2. El volcado de memoria del sistema que se necesite

En la práctica, conviene pensarlo en el siguiente orden.

10.1. Empiece por el tamaño administrado por el sistema

El valor predeterminado de Windows es administrado por el sistema. Aumenta o disminuye según la RAM instalada, la demanda de Commit y los requisitos de volcado, entre otros factores. Si no existen restricciones especiales ni resultados de medición, lo más seguro es partir de aquí.

10.2. Mida el Commit máximo con una carga representativa

Recopile los siguientes contadores durante un periodo prolongado con PerfMon.

  • Memory\\Committed Bytes
  • Memory\\Commit Limit
  • Memory\\% Committed Bytes In Use
  • Memory\\Modified Page List Bytes
  • Paging File(*)\\% Usage
  • Memory\\Available MBytes
  • Memory\\Page Reads/sec
  • Memory\\Page Writes/sec

Incluya en el periodo de recopilación los picos reales, como el procesamiento de fin de mes, las copias de seguridad, las compilaciones o el uso simultáneo de varios usuarios.

Un uso alto del archivo de paginación por sí solo no permite concluir que exista un problema de rendimiento del almacenamiento. Sin embargo, permanecer pegado al límite es una advertencia de falta de capacidad. Observe en conjunto si el Commit se acerca al límite, si hay una gran cantidad de páginas esperando en Modified, o si el disco está saturado.2

10.3. Defina primero los requisitos de volcado

Decida si necesita un volcado completo de memoria, si basta con un volcado de memoria del kernel, o si va a usar un archivo de volcado dedicado. Si va a cambiar a un tamaño fijo, debe satisfacer tanto el Commit máximo como los requisitos de volcado.

11. Compruébelo usted mismo

11.1. Observe las listas de páginas con RAMMap

Inicie RAMMap como administrador y abra primero Use Counts.7 Los elementos que hay que observar son los siguientes:

  • Active
  • Standby
  • Modified
  • Modified no write
  • Free
  • Zeroed

En Priority Summary puede comprobar que Standby está dividido por prioridad. En Processes puede ver el Working Set de cada proceso, y en File Summary y File Details puede seguir los datos de archivo presentes en la RAM.

A modo de prueba, lea una vez un archivo local de tamaño considerable, termine el proceso de lectura y luego pulse Refresh. Es posible que las páginas de ese archivo permanezcan en File Summary o en el lado de Standby. Si vuelve a leer el mismo archivo, las páginas que no se hayan reutilizado pueden recuperarse sin E/S de disco, o con muy poca. El resultado varía según la presión de memoria, el antivirus y el tamaño del archivo, así que fíjese más en la dirección de la transición de estados que en un valor puntual.

Tenga en cuenta que el menú Empty de RAMMap altera artificialmente el estado del sistema. No lo use para vaciar Standby como medida de mejora del rendimiento en una máquina de producción; empléelo únicamente en un entorno de pruebas aislado.

11.2. Separe Commit y Touch con Testlimit

Testlimit es una herramienta de Sysinternals que simula el agotamiento de recursos como memoria, identificadores (handles), procesos e hilos. Primero, ejecute lo siguiente con el binario que tenga a mano y compruebe la versión y el uso (usage) que se muestran.

.\\testlimit64.exe -?

Lo que sigue está pensado para Testlimit v5.24. En la sintaxis oficial de v5.24, -m [MB] reserva la cantidad de memoria indicada, -d [MB] reserva y hace Touch, -e [seconds] es el intervalo de asignación y -c [count] es el número de asignaciones. -c se especifica al final. Si el uso (usage) que ve en su equipo difiere, dé prioridad a esa información.12

A continuación, pruebe a pequeña escala en una VM desechable.

# -m 64: reserva 64 MiB, -e 1: intervalo de 1 segundo, -c 8: se detiene tras 8 repeticiones
.\\testlimit64.exe -m 64 -e 1 -c 8

# Mismo número de repeticiones e intervalo, pero con -d se hace Touch en cada región
.\\testlimit64.exe -d 64 -e 1 -c 8

Durante la ejecución, registre simultáneamente lo siguiente:

  • El «Confirmado X/Y» del Administrador de tareas
  • Active, Modified y Standby de RAMMap
  • Memory\\Committed Bytes
  • Memory\\Commit Limit
  • Memory\\Available MBytes
  • Memory\\Modified Page List Bytes

Si desea reproducir realmente el agotamiento del Commit, no lo haga en el PC anfitrión: use una VM de la que haya tomado una instantánea y aumente el número de repeticiones de forma gradual. Una ejecución que reserve automáticamente hasta el límite puede provocar que la pantalla se congele, que el proceso termine de forma anómala o que se pierdan registros. El objetivo no es desestabilizar el sistema operativo, sino observar que al acercarse al Commit Limit, los nuevos Commit fallan.

12. Cuatro malentendidos que conviene evitar en la práctica

12.1. “Hay mucho Standby, así que hay una fuga de memoria”

Standby es una caché reutilizable incluida en Available. Una fuga se determina observando si la línea base del Commit propio del proceso o el desglose de las asignaciones sigue aumentando incluso después de que termina la carga.

12.2. “Si se reduce el Working Set, la fuga se corrige”

El recorte solo cambia el estado residente; no libera el Commit ni la asignación virtual. Si se vuelve a acceder, la página regresa mediante un error de página.

12.3. “Si el uso del archivo de paginación es 0, no hace falta”

El archivo de paginación no solo respalda la cantidad de escritura actual, sino también el Commit Limit y el volcado de memoria en caso de fallo. Si se decide eliminarlo basándose solo en el uso en condiciones normales, se pierde tanto el margen en los picos como la evidencia en caso de incidente.

12.4. “Primero la compresión de memoria, luego siempre el archivo de paginación”

La compresión no es una canalización en serie fija. Windows elige dinámicamente según el tipo de página, la eficiencia de compresión, la carga de CPU, la presión de memoria y la existencia o no de un respaldo.

13. Resumen

  • La base de datos PFN es el libro de registro que hace seguimiento de la propiedad, las referencias, las modificaciones y el estado en la lista de páginas de cada página física.
  • Una página limpia (clean) que sale del Working Set permanece en Standby, y si vuelve a necesitarse el mismo contenido, puede recuperarse mediante un error de página leve.8
  • Una página modificada (dirty) espera en Modified y se escribe de vuelta en el archivo de paginación si es privada, o en el archivo correspondiente si es una página mapeada, entre otros casos.3
  • Available es la suma de Standby, Free y Zeroed, y que Standby sea alto no constituye por sí mismo escasez de memoria.1
  • La compresión de memoria reduce la E/S comprimiendo páginas dentro de la RAM, pero no elimina el papel del Commit ni del archivo de paginación.10
  • El archivo de paginación sostiene el Commit Limit, las páginas privadas modificadas y el volcado de memoria del sistema.42
  • El tamaño adecuado se determina por el Commit máximo y los requisitos de volcado, y no puede fijarse mediante un multiplicador uniforme.2
  • El recorte del Working Set y el vaciado de Standby no son una corrección de fugas de memoria.

La continuación es la tercera entrega: «Objetos de sección y copy-on-write: la verdadera naturaleza de las DLL y las asignaciones de archivos».

Seguimos por qué las páginas de archivo y las DLL que permanecen en Standby se ven como la misma página física desde múltiples procesos.

Artículos relacionados

Áreas de consultoría relacionadas

KomuraSoft LLC se ocupa de la investigación de la presión de memoria en aplicaciones de Windows, el agotamiento del Commit, la paginación, el crecimiento del Working Set y el diseño para la obtención de volcados de memoria.

Referencias

</content>

  1. Microsoft Learn, MEMORYSTATUSEX structure. Sobre cómo ullAvailPhys es la memoria física que puede reutilizarse de inmediato sin escribir en disco, y que es la suma de las listas Standby, Free y Zeroed.  2 3

  2. Microsoft Learn, How to determine the appropriate page file size for 64-bit versions of Windows. Sobre cómo el tamaño adecuado depende del Commit máximo y de los requisitos de volcado de memoria y no puede generalizarse, así como sobre la lista Modified, el porcentaje de uso del archivo de paginación, los contadores relacionados y el archivo de paginación administrado por el sistema.  2 3 4 5 6 7 8

  3. Microsoft Learn, Data corruption on IO write. Sobre cómo Modified Page Writer es un trabajador del sistema del administrador de memoria que recorre y escribe las páginas dirty respaldadas por el archivo de paginación.  2 3

  4. Microsoft Learn, Introduction to page files. Sobre cómo el archivo de paginación saca de la RAM las páginas modificadas de baja frecuencia de acceso, amplía el Commit Limit y sostiene el volcado de memoria del sistema.  2 3 4

  5. Microsoft Learn, !pfn (WinDbg). Sobre cómo permite mostrar el estado, las referencias, la dirección de PTE y otros datos de una entrada PFN especificada. 

  6. Microsoft Learn, !memusage (WinDbg). Sobre cómo permite recopilar el uso de memoria física y los estados de página como Zeroed, Free, Standby, Modified y Active. 

  7. Microsoft Learn, RAMMap - Sysinternals. Sobre cómo Use Counts, Processes, Priority Summary, Physical Pages, File Summary y File Details de RAMMap muestran el uso de la memoria física y las listas de páginas.  2

  8. Microsoft Learn, Working Set. Sobre cómo el administrador de memoria recorta el Working Set para generar memoria disponible, y cómo las páginas en Transition o que permanecen en el Working Set de otro proceso pueden resolverse mediante un error de página leve.  2

  9. Microsoft Learn, FileIo_Name class. Sobre cómo los eventos de File I/O de ETW tienen FileObject y FileName, y cómo, al correlacionar FileObject con los eventos de Disk I/O, puede identificarse la E/S del archivo en cuestión. 

  10. Windows Insider Blog, Announcing Windows 10 Insider Preview Build 10525. Sobre cómo la implementación inicial del compression store en Windows 10 colocaba el conjunto de páginas comprimidas dentro del Working Set del proceso System, reduciendo la escritura en disco.  2

  11. Microsoft Learn, Find Process ID (PID) in Windows. Sobre un ejemplo de lista de procesos con las Debugging Tools for Windows actuales, en el que aparece un proceso Memory Compression con un PID distinto bajo System. 

  12. Microsoft Learn, Testlimit - Sysinternals. Sobre la sintaxis oficial de Testlimit v5.24, en la que -m reserva memoria, -d reserva y hace Touch, -e es el intervalo de asignación y -c es el número de asignaciones, especificándose -c al final. 

Artículos recientes con las mismas etiquetas para profundizar en temas cercanos.

Estas páginas sitúan el tema en un contexto más amplio de servicios y decisiones.

El artículo está directamente relacionado con los siguientes servicios.

Preguntas frecuentes

Preguntas habituales en las consultas sobre el tema del artículo.

¿Una página que sale del Working Set se escribe de inmediato en el archivo de paginación?
No necesariamente. Las páginas que no han sido modificadas pasan a Standby conservando su contenido y se convierten en una caché lista para reutilizarse de inmediato. Las páginas modificadas pasan a Modified y, cuando es necesario, se escriben de vuelta en el archivo de paginación o en el archivo correspondiente antes de avanzar a un estado reutilizable como Standby.
¿La memoria disponible (Available) del Administrador de tareas incluye la memoria de Standby?
Sí. La memoria física disponible que informa Windows es la suma de Standby, Free y Zeroed. Standby conserva contenido antiguo, pero como puede reutilizarse de inmediato para otro fin si es necesario, se cuenta como memoria disponible.
¿La escritura en el archivo de paginación comienza solo cuando la RAM se agota por completo?
No. Windows escribe en segundo plano las páginas modificadas de baja frecuencia de acceso, según el estado de la lista Modified y de la memoria disponible. No es un mecanismo simple que espere el agotamiento absoluto para desalojar todo de una vez.
¿Deshabilitar el archivo de paginación hace que Windows sea más rápido?
En general, no se puede afirmar que sea más rápido. Deshabilitarlo reduce el Commit Limit, dificulta sacar de la RAM las páginas modificadas de baja frecuencia de acceso y también afecta al volcado de memoria del sistema (crash dump). Normalmente conviene dejarlo administrado por el sistema y decidir midiendo el Commit máximo y los requisitos de volcado.
¿Con la compresión de memoria ya no hace falta el archivo de paginación?
No deja de ser necesario. El almacén de compresión reduce la E/S comprimiendo páginas dentro de la RAM, pero las páginas comprimidas también usan memoria física y no sustituyen la garantía del Commit. La elección entre comprimir y desalojar a disco es una política dinámica del administrador de memoria.

Perfil del autor

Página de presentación del autor del artículo.

Go Komura

Representante de KomuraSoft LLC

Especializado en desarrollo de software para Windows, consultoría técnica e investigación de fallos, sobre todo en proyectos con sistemas existentes y errores difíciles de reproducir.

Volver al blog