Cosa succede ai dati in scambio quando il tuo computer va in letargo?


12

Quando un computer entra in modalità di ibernazione, salva il contenuto della RAM nello spazio di scambio in modo che possa riprendere esattamente da dove si era interrotto quando si riaccende.

Quindi, cosa succede se al momento stai usando più memoria di quella che hai RAM. In questo caso, alcuni dati che sarebbero altrimenti nella RAM vengono salvati per lo scambio.

Un esempio. Un computer ha 1 GB di RAM e 1 GB di spazio di swap. Attualmente utilizza tutti tranne 100 MB di RAM e 500 MB di swap. Pertanto, è necessario ricordare circa 1,4 GB di memoria per salvarne lo stato. Tuttavia, lo scambio è solo 1 GB.

Cosa succederà in questo caso?

~~ modifica ~~

Come indicato di seguito, l'ibernazione non riesce. Quindi una domanda di follow-up:

Quando fallisce, dove viene segnalato l'errore?

Risposte:


11

Dipende dall'attuazione del letargo. Anche se si limita la domanda a Linux, l'implementazione si è evoluta nel tempo.

Innanzitutto, considera che parte della RAM viene utilizzata per le cache del disco. Non è necessario spostarlo nello swap poiché può essere ricaricato dal disco dopo il riavvio del sistema. Su un sistema con un buon rapporto costi / efficienza, è tipico che circa la metà della RAM sia allocata alle cache. (Vedi anche Perché usare lo swap quando c'è più che sufficiente RAM .) Sotto Linux, alcune prime implementazioni immagazzinerebbero tutta la memoria allocata nello swap, ma l'attuale implementazione (s?) Dell'ibernazione salta le cache del disco.

In secondo luogo, alcuni sistemi comprimono la memoria mentre viene scritta sullo swap, il che può rendere difficile prevedere esattamente la quantità richiesta di swap. Alcune versioni del supporto per l'ibernazione di Linux hanno supportato la compressione; Non so se quelli attuali lo fanno.

Quello che puoi aspettarti in generale se lo spazio di swap non è sufficiente è che l'ibernazione non riuscirà: il sistema tenterà di archiviare i contenuti (utili) di RAM nello swap e non appena rileverà che non c'è spazio sufficiente, il tentativo di ibernazione viene interrotto (in genere con un messaggio di errore sulla console e nei registri di sistema). Per quanto ne so, Linux si è sempre comportato in questo modo (non che ci sia davvero un altro comportamento sensato).


1
Ho provato questo in una macchina virtualbox e non è riuscito, anche se non ha mostrato alcun messaggio all'utente (ho provato con Ubuntu 10.4). Quale registro di sistema avrebbe segnalato questo errore?
David Oneill,

3
@ David: ci dovrebbe essere sicuramente qualcosa dentro /var/log/kern.log. Non so se l'assenza di un messaggio sulla console sia una stranezza di questa particolare versione del kernel o una deliberata configurazione di Ubuntu (so che hanno deliberatamente soppresso qualche altro output della console).
Gilles 'SO- smetti di essere malvagio' il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.