¿Cuándo se devuelve el intercambio a la memoria física?


8

¿Cuándo se devuelve el intercambio a la memoria física en Linux? Es solo bajo demanda, es decir. cuando es necesario? ¿O el intercambio se transfiere lentamente a la memoria física cuando la computadora no tiene una carga alta?

Respuestas:


7

Bajo demanda. De hecho, Linux transferirá lentamente la memoria física para intercambiar cuando esté inactivo (ver: "intercambio").


Gracias. Una respuesta breve y concisa. ¡Me gusta eso (aunque aprecio el esfuerzo de todos los demás en sus respuestas)!
Ztyx

Esta respuesta es incorrecta. La pregunta es cuándo la memoria está paginada, no paginada. Esto es lo contrario. En un fallo de página, el núcleo volverá a cargar la página desde el disco / intercambio. Así que sobre todo a pedido. Puede acceder a toda la memoria virtual de un proceso para activar fallas de página. Como resultado, las páginas se volverían a copiar en la RAM.
user228505

7

Durante la operación normal, los datos del intercambio se cargan en la memoria a pedido, como respondieron otros, pero hay un caso más cuando esto sucede: es cuando el espacio de intercambio está deshabilitado, siempre que haya suficiente memoria física para cargar todo el contenido del intercambio.

Solo haz:

swapoff -a

... y todos sus datos de intercambio 'volverán' a la memoria. El efecto secundario es que las memorias intermedias / cachés de disco pueden enjuagarse.

A veces puede ser deseable hacerlo swapoff -a ; swapon -a, por ejemplo, después de un proceso de pérdida de memoria defectuoso, antes de que se bloquee, hacer que se eliminen los procesos más importantes, para asegurarse de que cualquier proceso que se ejecute en el sistema se cargue en la memoria y no espere el intercambio unos minutos.


¡Oh, aprendes algo bueno todos los días! Por cierto, fallará 'a -wapoff -a' ¿no hay suficiente memoria física? ¿Existe algún riesgo al llamar a swapoff?
Ztyx

Fallará si no hay suficiente memoria física. Todavía es un riesgo swapoffque no fallará, pero el sistema se quedará sin memoria poco después swapoffy el OOM matará el proceso aleatorio (en el peor de los casos, el shell está a punto de llamar swapono el swaponcomando). En la práctica, es muy poco probable: las memorias caché utilizan mucha memoria antes de que swapoffse llame, por lo que debería tener suficiente RAM para que se ejecuten ambos comandos.
Jacek Konieczny

7

Como otros han señalado, las páginas solo se volverán a copiar en la RAM cuando sea necesario (bajo demanda) en lugar de tomar RAM que podría estar mejor disponible para caché / búferes.

El hecho de que las páginas se copien nuevamente en la RAM, no se muevan, es importante y puede generar confusión si no se da cuenta. La página no se desasignará del intercambio a menos que ya no sea necesaria (es decir, la página se desasigne por completo), se cambie en RAM (por lo que la copia en el intercambio ya no es correcta) o el intercambio se está agotando (y el -los bloques de disco son necesarios para intercambiar algunas otras páginas). De esta manera, si la página necesita intercambiarse nuevamente en el futuro, no se necesita escritura en el disco, ya que el núcleo sabe que ya hay una buena copia en el disco; esto puede reducir en gran medida la "agitación" cuando la RAM disponible se vuelve críticamente baja, pero el espacio de intercambio tampoco congestionado.

Puede ver cuántas páginas hay actualmente en RAM y cambiar cat /proc/meminfo: la SwapCachedlínea es la cantidad de datos que hay en las páginas que están actualmente en RAM y en el disco. Si cree que su intercambio actual lo usa más de lo esperado, verifique el valor de SwapCached, ya que esto puede explicar la discrepancia.


Ha habido discusiones sobre temas similares antes. Sin embargo, no esta pregunta específica. Consulte también serverfault.com/questions/100448/… que trata sobre SwapCached.
Ztyx

Ni siquiera recuerdo haber escrito esa respuesta ... Probablemente podría haber vinculado (o copiar + pegar) en lugar de escribir lo anterior ...
David Spillett

0

Esto generalmente está vinculado al hardware que está utilizando. En la mayoría del hardware (incluida Intel), la MMU controla todo el proceso.

Cuando un programa asigna memoria, la solicitará a la MMU y recuperará una dirección virtual. A su vez, la MMU registrará esa página como "en uso" en el mapa del espacio de direcciones global.

Cuando el programa realmente accede a ese espacio de memoria, la MMU buscará la página en el mapa de direcciones. Si esa página está en la memoria "en vivo", devolverá un puntero "en vivo" al sistema operativo que manejará la lectura / escritura de memoria en nombre del programa. Si la memoria no está asignada actualmente, provocará un error de página. El sistema operativo detecta esta excepción del procesador, que es responsable de averiguar dónde están los datos en el archivo de intercambio, cargarlos en la memoria física y devolver la página a la MMU para que el proceso inicial pueda continuar.

Esto significa que, a menos que se acceda a la página de memoria, nunca volverá a la memoria "en vivo" una vez que se haya cambiado. Es por eso que generalmente hay una API del sistema operativo que permite que los programas especifiquen que un bloque de memoria en particular NO se debe intercambiar en el disco y debe mantenerse en la memoria (no sé acerca de Linux, pero en Windows, es la función VirtualLock) .


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.