¿Qué sucede con los datos en el intercambio cuando su computadora hiberna?

12

Cuando una computadora entra en modo de hibernación, guarda el contenido de la RAM en el espacio de intercambio para que pueda reanudar exactamente donde se quedó cuando se vuelve a encender.

Entonces, ¿qué pasa si actualmente está usando más memoria de la que tiene RAM? En este caso, algunos datos que de otro modo estarían en la RAM se guardan para intercambiar.

Un ejemplo. Una computadora tiene 1 GB de RAM y 1 GB de espacio de intercambio. Actualmente está utilizando todos menos 100 MB de RAM y 500 MB de intercambio. Por lo tanto, necesita recordar aproximadamente 1.4 GB de memoria para guardar su estado. Sin embargo, el intercambio es de solo 1 GB.

¿Qué pasará en este caso?

~~ editar ~~

Como se responde a continuación, la hibernación falla. Entonces, una pregunta de seguimiento:

Cuando esto falla, ¿dónde se informa el error?

David Oneill
fuente

Respuestas:

11

Eso depende de la implementación de la hibernación. Incluso si restringe la pregunta a Linux, la implementación ha evolucionado con el tiempo.

Primero, considere que parte de la RAM se usa para cachés de disco. No es necesario moverlo al intercambio, ya que se puede volver a cargar desde el disco una vez que se reanuda el sistema. En un sistema con un buen equilibrio costo / eficiencia, es típico que aproximadamente la mitad de la RAM se asigne a cachés. (Consulte también ¿Por qué usar el intercambio cuando hay RAM más que suficiente ?). En Linux, algunas implementaciones tempranas almacenarían toda la memoria asignada en el intercambio, pero las implementaciones actuales de la hibernación omiten cachés de disco.

En segundo lugar, algunos sistemas comprimen la memoria a medida que se escribe en el intercambio, lo que puede hacer que la cantidad exacta de intercambio sea difícil de predecir. Algunas versiones del soporte de hibernación de Linux admiten compresión; No sé si los actuales sí.

Lo que generalmente puede esperar si no hay suficiente espacio de intercambio es que la hibernación fallará: el sistema intentará almacenar el contenido (útil) de RAM en el intercambio, y tan pronto como detecte que no hay suficiente espacio, el intento de hibernación se cancela (generalmente con un mensaje de error en la consola y en los registros del sistema). Hasta donde yo sé, Linux siempre se ha comportado así (no es que haya realmente otro comportamiento sensato).

Gilles 'SO- deja de ser malvado'
fuente
1
Intenté esto en una máquina virtualbox y falló, aunque no mostró ningún mensaje al usuario (lo intenté con ubuntu 10.4). ¿En qué registro del sistema se informará este error?
David Oneill
3
@David: Definitivamente debería haber algo adentro /var/log/kern.log. No sé si la ausencia de un mensaje en la consola es una peculiaridad de esta versión particular del kernel o una configuración deliberada de Ubuntu (sé que han suprimido deliberadamente alguna otra salida de la consola).
Gilles 'SO- deja de ser malvado'