Qu'advient-il des données en swap lorsque votre ordinateur passe en veille prolongée?

12

Lorsqu'un ordinateur passe en mode hibernation, il enregistre le contenu de la RAM dans l'espace de swap afin qu'il puisse reprendre exactement là où il s'était arrêté lors de sa remise sous tension.

Alors, que se passe-t-il si vous utilisez actuellement plus de mémoire que vous n'avez de RAM. Dans ce cas, certaines données qui seraient autrement dans la RAM sont enregistrées pour être échangées.

Un exemple. Un ordinateur possède 1 Go de RAM et 1 Go d'espace de swap. Il utilise actuellement tout sauf 100 Mo de RAM et 500 Mo de swap. Ainsi, il doit se souvenir d'environ 1,4 Go de mémoire pour enregistrer son état. Cependant, l'échange n'est que de 1 Go.

Que se passera-t-il dans ce cas?

~~ modifier ~~

Comme indiqué ci-dessous, la mise en veille prolongée échoue. Alors, une question de suivi:

En cas d'échec, où l'erreur est-elle signalée?

David Oneill
la source

Réponses:

11

Cela dépend de la mise en œuvre de l'hibernation. Même si vous limitez la question à Linux, l'implémentation a évolué au fil du temps.

Tout d'abord, considérez qu'une partie de la RAM est utilisée pour les caches de disque. Il n'est pas nécessaire de le déplacer vers le swap car il peut être rechargé à partir du disque après la reprise du système. Sur un système avec un bon équilibre coût / efficacité, il est typique qu'environ la moitié de la RAM soit allouée aux caches. (Voir aussi Pourquoi utiliser le swap quand il y a plus qu'assez de RAM .) Sous Linux, certaines implémentations précoces stockaient toute la mémoire allouée dans le swap, mais l'implémentation actuelle (s?) Des caches de disque de mise en veille prolongée.

Deuxièmement, certains systèmes compressent la mémoire au fur et à mesure qu'elle est écrite dans le swap, ce qui peut rendre la quantité exacte de swap difficile à prévoir. Certaines versions du support d'hibernation de Linux ont pris en charge la compression; Je ne sais pas si les actuels le font.

Ce que vous pouvez généralement attendre s'il n'y a pas assez d'espace de swap, c'est que l'hibernation échouera: le système essaiera de stocker le contenu (utile) de la RAM dans le swap, et dès qu'il détectera qu'il n'y a pas assez d'espace, la tentative d'hibernation est abandonnée (généralement avec un message d'erreur sur la console et dans les journaux système). Pour autant que je sache, Linux s'est toujours comporté comme ça (pas qu'il y ait vraiment un autre comportement sensé).

Gilles 'SO- arrête d'être méchant'
la source
1
J'ai essayé cela sur une machine Virtualbox et cela a échoué, bien qu'il n'ait affiché aucun message à l'utilisateur (j'ai essayé avec Ubuntu 10.4). Quel journal système aurait signalé cette erreur?
David Oneill
3
@David: Il devrait certainement y avoir quelque chose /var/log/kern.log. Je ne sais pas si l'absence d'un message sur la console est une bizarrerie de cette version particulière du noyau ou une configuration délibérée d'Ubuntu (je sais qu'ils ont délibérément supprimé une autre sortie de la console).
Gilles 'SO- arrête d'être méchant'