O que acontece com os dados em 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 do que a RAM? Nesse caso, alguns dados que estariam na RAM são salvos para troca.

Um exemplo. Um computador possui 1 GB de RAM e 1 GB de espaço de troca. Atualmente, ele está usando todos os 100 MB de RAM e 500 MB de swap. Portanto, é necessário lembrar cerca de 1,4 GB de memória para salvar seu estado. No entanto, o swap é de apenas 1 GB.

O que acontecerá neste caso?

~~ editar ~~

Conforme respondido abaixo, o hibernar falha. Então, uma pergunta de acompanhamento:

Quando isso falha, onde o erro é relatado?

David Oneill
fonte

Respostas:

11

Isso depende da implementação da hibernação. Mesmo se você restringir a pergunta 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 pode ser recarregado a partir do disco após o reinício do sistema. Em um sistema com um bom equilíbrio custo / eficiência, é típico que cerca de metade da RAM seja alocada para caches. (Consulte também Por que usar swap quando há mais do que suficiente RAM .) No Linux, algumas implementações iniciais armazenavam toda a memória alocada no swap, mas as implementações atuais da hibernação ignoram os caches de disco.

Segundo, alguns sistemas compactam a memória conforme ela é gravada na troca, o que pode dificultar a previsão da quantidade exata necessária de troca. Algumas versões do suporte à hibernação do Linux suportam compactação; Não sei se os atuais o 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 é abortada (geralmente com uma mensagem de erro no console e nos logs do sistema). Tanto quanto eu sei, o Linux sempre se comportou assim (não que haja realmente outro comportamento sensato).

Gilles 'SO- parar de ser mau'
fonte
1
Eu tentei isso em uma máquina de caixa virtual e ele falhou, embora não tenha exibido nenhuma mensagem para o usuário (tentei com o ubuntu 10.4). Qual log do sistema teria esse erro relatado?
David Oneill
3
@ David: Não deve ser definitivamente algo em /var/log/kern.log. Não sei se a ausência de uma mensagem no console é uma peculiaridade dessa versão específica do kernel ou de uma configuração deliberada do Ubuntu (eu sei que eles suprimiram deliberadamente alguma outra saída do console).
Gilles 'SO- stop be evil'