O que acontece com os dados na troca quando o computador hiberna?

12

Quando um computador entra no modo de hibernação, ele salva o conteúdo da RAM no espaço de troca para que possa retomar exatamente de onde parou quando é ligado novamente.

Então, e se você estiver usando mais memória atualmente do que a sua RAM? Neste caso, alguns dados que de outra forma estariam na RAM são salvos para swap.

Um exemplo. Um computador tem 1 GB de RAM e 1 GB de espaço de troca. Atualmente, ele usa quase 100MB de RAM e 500MB de swap. Assim, é necessário lembrar de 1,4 GB de memória para salvar seu estado. No entanto, a troca é de apenas 1 GB.

O que acontecerá neste caso?

~~ edit ~~

Como respondido abaixo, o modo de hibernação falha. Então, uma pergunta de acompanhamento:

Quando isso falha, onde o erro é relatado?

    
por David Oneill 16.11.2010 / 22:16

1 resposta

11

Isso depende da implementação da hibernação. Mesmo se você restringir a questão ao Linux, a implementação evoluiu com o tempo.

Primeiro, considere que parte da RAM é usada para caches de disco. Isso não precisa ser movido para a troca, pois ela pode ser recarregada a partir do disco após o reinício do sistema. Em um sistema com um bom equilíbrio de custo / eficiência, é comum que cerca de metade da RAM seja alocada para caches. (Veja também Por que usar swap quando há RAM mais que suficiente .) No Linux, algumas implementações iniciais armazenariam toda a memória alocada. na troca, mas a implementação atual (s?) da hibernação ignora os caches de disco.

Em segundo lugar, alguns sistemas compactam a memória conforme ela é gravada no swap, o que pode dificultar a previsão da exata quantidade necessária de swap. Algumas versões do suporte de hibernação do Linux suportam compactação; Eu não sei se os atuais fazem.

O que você geralmente pode esperar se não houver espaço de troca suficiente é que a hibernação falhará: o sistema tentará armazenar o conteúdo (útil) da RAM na troca, e assim que detectar que não há espaço suficiente, a tentativa de hibernação é anulada (normalmente com uma mensagem de erro no console e nos logs do sistema). Até onde eu sei, o Linux sempre se comportou assim (não que realmente haja outro comportamento sensível).

    
por 16.11.2010 / 23:48