Was passiert mit Daten im Swap, wenn Ihr Computer in den Ruhezustand wechselt?

12

Wenn ein Computer in den Ruhezustand wechselt, speichert er den Inhalt des Arbeitsspeichers im Auslagerungsspeicher, damit er genau dort fortgesetzt werden kann, wo er beim erneuten Einschalten aufgehört hat.

Was ist also, wenn Sie derzeit mehr Arbeitsspeicher verwenden als über RAM verfügen? In diesem Fall werden einige Daten, die sich sonst im RAM befinden würden, zum Austauschen gespeichert.

Ein Beispiel. Ein Computer verfügt über 1 GB RAM und 1 GB Swap-Speicher. Derzeit werden alle bis auf 100 MB RAM und 500 MB Swap verwendet. Daher müssen etwa 1,4 GB Arbeitsspeicher gespeichert werden, um den Status zu speichern. Swap ist jedoch nur 1 GB.

Was wird in diesem Fall passieren?

~~ edit ~~

Wie unten beantwortet, schlägt der Ruhezustand fehl. Also dann eine Anschlussfrage:

Wo wird der Fehler gemeldet, wenn dies fehlschlägt?

David Oneill
quelle

Antworten:

11

Das hängt von der Implementierung des Ruhezustands ab. Auch wenn Sie die Frage auf Linux beschränken, hat sich die Implementierung im Laufe der Zeit weiterentwickelt.

Stellen Sie sich zunächst vor, dass ein Teil des Arbeitsspeichers für Festplatten-Caches verwendet wird. Dies muss nicht in den Swap verschoben werden, da es nach dem Neustart des Systems wieder von der Festplatte geladen werden kann. Auf einem System mit einem guten Kosten-Nutzen-Verhältnis wird in der Regel etwa die Hälfte des Arbeitsspeichers für Caches bereitgestellt. (Siehe auch Warum Swap verwenden, wenn mehr als genug RAM vorhanden ist ?) Unter Linux wurde bei einigen frühen Implementierungen der gesamte zugewiesene Speicher im Swap gespeichert, bei den aktuellen Implementierungen von Hibernation-Skip-Disk-Caches jedoch nicht.

Zweitens komprimieren einige Systeme den Speicher, während er in den Swap geschrieben wird, was es schwierig macht, den genauen erforderlichen Swap-Umfang vorherzusagen. Einige Versionen der Ruhezustandsunterstützung von Linux unterstützen die Komprimierung. Ich weiß nicht, ob es die jetzigen tun.

Was Sie im Allgemeinen erwarten können, wenn nicht genügend Auslagerungsspeicher vorhanden ist, ist, dass der Ruhezustand fehlschlägt: Das System versucht, den (nützlichen) Inhalt des Arbeitsspeichers im Auslagerungsspeicher zu speichern, und sobald es feststellt, dass nicht genügend Speicherplatz vorhanden ist. Der Ruhezustand wird abgebrochen (normalerweise mit einer Fehlermeldung auf der Konsole und in den Systemprotokollen). Soweit ich weiß, hat sich Linux immer so verhalten (nicht, dass es wirklich ein anderes vernünftiges Verhalten gibt).

Gilles 'SO - hör auf böse zu sein'
quelle
1
Ich habe dies in einer Virtualbox-Maschine versucht und es ist fehlgeschlagen, obwohl dem Benutzer keine Nachricht angezeigt wurde (ich habe es mit Ubuntu 10.4 versucht). In welchem ​​Systemprotokoll würde dieser Fehler gemeldet?
David Oneill
3
@David: Da sollte auf jeden Fall was drin sein /var/log/kern.log. Ich weiß nicht, ob das Fehlen einer Meldung auf der Konsole eine Besonderheit dieser bestimmten Kernel-Version oder eine absichtliche Ubuntu-Konfiguration ist (ich weiß, dass sie absichtlich eine andere Konsolenausgabe unterdrückt haben).
Gilles 'SO- hör auf böse zu sein'