¿Por qué Windows siempre utiliza tanta memoria virtual como RAM instalada?

¿Por qué Windows siempre utiliza tanta memoria virtual como RAM instalada?

¿Y por qué quiere tener como máximo el doble de esa cantidad? Mi sistema tiene 32 GB de RAM y Windows, de forma predeterminada, establece un mínimo de 16 MB de memoria virtual, asigna 32 GB (!) y recomienda 50 GB (!!). Peor aún en un sistema de 64 GB de RAM, donde recomendaba asignar más de 100 GB, aunque "sólo" volvió a utilizar la misma cantidad que estaba disponible en RAM, 64 GB en este caso.

Hasta donde yo entendí, el concepto del archivo de paginación es que Windows solo lo expande cuando es necesario y comienza con la cantidad mínima, aunque nunca lo hace, siempre llega al máximo absoluto. Esto es extremadamente molesto porque deshabilitar el archivo de paginación o no configurarlo con la misma cantidad de RAM instalada causa problemas en algunos programas que usan mucha memoria como 7zip, simplemente afirman que no hay suficiente memoria para asignar a pesar de que hay suficiente. de memoria libre utilizable.

Este comportamiento potencialmente reduce enormemente la vida útil de mis unidades (SSD). ¿Por qué Windows hace esto y cómo puedo evitarlo? O, alternativamente, ¿cómo puedo desactivar completamente el archivo de paginación sin obtener un comportamiento extraño en algunos programas?

Respuesta1

En primer lugar, es un gran error (no el suyo) que el cuadro de diálogo de Windows, en el que se establece el tamaño del archivo de paginación, equipare el archivo de paginación con la "memoria virtual". El archivo de paginación es simplemente el almacén de respaldo para una categoría de espacio de direcciones virtuales, el utilizado por la memoria privada comprometida. Hay un espacio de direcciones virtuales respaldado por otros archivos (archivos mapeados) y hay espacios que nunca son paginables y, por lo tanto, permanecen en la RAM en todo momento. Pero todo es "memoria virtual" en el sentido de que, al menos, la traducción de direcciones virtuales a direcciones RAM siempre está en funcionamiento.

Su observación es correcta: la asignación del tamaño del archivo de paginación de Windows utiliza un cálculo simple de valor predeterminado = tamaño de RAM y máximo = el doble. (Solía ​​ser 1,5x y 3x). Tienen que configurarlo en algo, y estos factores proporcionan un resultado que casi siempre es suficiente. También garantiza suficiente espacio en el archivo de paginación para capturar un volcado de memoria si el sistema falla (suponiendo que haya habilitado el kernel o los volcados completos).

Hasta donde yo entendí, el concepto del archivo de paginación es que Windows solo lo expande cuando es necesario y comienza con la cantidad mínima, aunque nunca lo hace, siempre llega al máximo absoluto.

Ah... comienza con el "tamaño inicial". Este NO es el "mínimo permitido". Es por eso que lo ves en el tamaño de tu RAM, porque Windows lo usa para el tamaño inicial.

Pero... ¿estás diciendo que estás viendo que el tamaño real del archivo de paginación llega a la configuración máxima? por ejemplo, si está configurado en 16 GB iniciales, 32 GB como máximo, ¿ve el tamaño real ("asignado actualmente") en 32 GB? Por cierto, siempre debería volver al tamaño inicial cuando reinicies.

¿Ves ventanas emergentes que dicen "el sistema se está quedando sin memoria virtual"? Porque debería hacerlo cuando el sistema operativo expanda el archivo de paginación más allá del tamaño actual.

El sistema operativo no ampliará el archivo de paginación a menos que algo haya intentado asignar tanta memoria privada comprometida que necesite el espacio ampliado del archivo de paginación para almacenar el material. Pero tal vez algo sí. Eche un vistazo a la pestaña Procesos del Administrador de tareas. La columna "Tamaño de confirmación" muestra esto para cada proceso. Haga clic en el encabezado de la columna para ver quién es el cerdo. :)

Esto es extremadamente molesto porque deshabilitar el archivo de paginación o no configurarlo con la misma cantidad de RAM instalada causa problemas en algunos programas que usan mucha memoria como 7zip, simplemente afirman que no hay suficiente memoria para asignar a pesar de que hay suficiente. de memoria libre utilizable.

Esto no tiene que ver con la RAM disponible sino con algo llamado "cargo de confirmación" y "límite de confirmación". El "límite de confirmación" es la suma de (RAM - memoria virtual no paginable) + tamaño del archivo de paginación actual. (No RAM libre, solo RAM). Por lo tanto, un sistema con, digamos, 8 GB de RAM y 16 GB de archivo de paginación actual tendría un límite de confirmación de aproximadamente 24 GB ("aproximadamente" porque la RAM que contiene contenido no paginable no cuenta para el límite de confirmación) .

El "cargo de confirmación" es la cantidad de espacio de direcciones privadas que existe actualmente en el sistema. Esto tiene que ser menor que el límite de confirmación; de lo contrario, el sistema no puede garantizar que el material tenga un lugar para estar.

En la pestaña Rendimiento del administrador de tareas, puede ver estos dos números con la leyenda "Confirmar (GB)". Por ejemplo, estoy mirando una máquina que dice "Confirmar (GB) 1/15". Eso es un cargo de confirmación actual de 1 GB del límite de 15 GB.

Si un programa como 7zip intenta hacer, por ejemplo, un VirtualAlloc de tamaño > (commitLimit - commitCharge), es decir, mayor que el límite de confirmación "restante", entonces, si el sistema operativo no puede expandir el archivo de paginación para que el límite de confirmación sea lo suficientemente grande, el La solicitud de asignación falla. Eso es lo que estás viendo que sucede. (Windows en realidad no tiene ningún mensaje de error sobre "poca memoria física", ¡no para el acceso en modo de usuario! Solo para virtual).

No tiene nada que ver congratisLa RAM, como toda la RAM (menos la pequeña parte que no se puede paginar) cuenta para el límite de confirmación, ya sea que esté actualmente libre o no.

Es confuso porque cuando miras el sistema después de una de estas fallas de asignación, aparentemente no hay nada malo: miras el sistema, tu cargo de confirmación está muy por debajo del límite, incluso puedes tener mucha RAM libre. Tendría que saber cuánta memoria privada comprometida el programa había estado intentando asignar para poder ver cuál era el problema. Y la mayoría de los programas no te lo dirán.

Me parece que 7zip está siendo demasiado agresivo al intentar asignar vas, ¿tal vez está escalando sus solicitudes en función del tamaño de su RAM? ¿Está seguro de que no existe una configuración de archivo de paginación más pequeña con la que 7zip esté satisfecho? ¿Estás utilizando la versión de 32 o 64 bits de 7-zip? Usar la versión de 32 bits solucionaría este problema, ya que no es posible utilizar más de 2 o quizás 3 GB de espacio de direcciones virtuales. Por supuesto, puede que no sea tan rápido en conjuntos de datos enormes.

Este comportamiento potencialmente reduce enormemente la vida útil de mis unidades (SSD).

Bueno, no, realmente no. Simplemente publicar un archivo de paginación de cualquier tamaño no significa que el sistema realmente escribirá tanto en el archivo de paginación. (A menos que tenga la opción configurada en "borrar el archivo de paginación al apagar", e incluso entonces no creo que escriba todo; el Mm sabe qué bloques están en uso y solo debería escribirlos... Nunca pensé de eso antes; tendré que comprobarlo).

Si desea ver cuántas cosas hay realmente en su archivo de paginación, use la utilidad PerfMon. Hay un grupo de contadores para el archivo de página y, por supuesto, desea el contador de "% de uso". Interprete este porcentaje según el tamaño real del archivo (como se muestra en el Explorador).

SÍ utiliza mucho espacio y, dado que el espacio en un SSD es bastante caro, esto es una preocupación para la mayoría de nosotros. Una cosa que podría intentar es colocar un archivo de paginación de tamaño razonable, digamos 4 u 8 GB, en su SSD, luego conectar una unidad Rust giratoria y colocarle un archivo de paginación grande. O si desea un SSD y nada más para su archivo de paginación, compre uno pequeño y económico solo para el segundo archivo de paginación.

información relacionada