Co dzieje się z danymi w trybie wymiany, gdy komputer hibernuje?


12

Gdy komputer przechodzi w tryb hibernacji, zapisuje zawartość pamięci RAM w przestrzeni wymiany, aby mógł wznowić dokładnie tam, gdzie został przerwany po ponownym włączeniu.

A co jeśli obecnie używasz więcej pamięci niż masz pamięci RAM? W takim przypadku niektóre dane, które w przeciwnym razie znajdowałyby się w pamięci RAM, są zapisywane w celu zamiany.

Przykład. Komputer ma 1 GB pamięci RAM i 1 GB przestrzeni wymiany. Obecnie używa prawie 100 MB pamięci RAM i 500 MB wymiany. Dlatego musi zapamiętać około 1,4 GB pamięci, aby zapisać swój stan. Jednak zamiana to tylko 1 GB.

Co się stanie w tym przypadku?

~~ edytuj ~~

Jak odpowiedziano poniżej, hibernacja kończy się niepowodzeniem. A zatem kolejne pytanie:

Kiedy to się nie powiedzie, gdzie jest zgłaszany błąd?

Odpowiedzi:


11

To zależy od wdrożenia hibernacji. Nawet jeśli ograniczysz pytanie do Linuksa, implementacja ewoluowała z czasem.

Po pierwsze, należy wziąć pod uwagę, że część pamięci RAM jest używana do buforowania dysków. Nie trzeba go przenosić do wymiany, ponieważ można go ponownie załadować z dysku po wznowieniu działania systemu. W systemie o dobrym stosunku kosztów do wydajności typowe jest to, że około połowa pamięci RAM jest przydzielana do pamięci podręcznych. (Zobacz także Dlaczego warto używać swap, gdy jest więcej niż wystarczającej ilości pamięci RAM ). W Linuksie niektóre wczesne implementacje zapisywałyby całą przydzieloną pamięć w swapie, ale bieżąca implementacja hibernacji pomija bufory dyskowe.

Po drugie, niektóre systemy kompresują pamięć zapisaną w swapie, co może utrudnić przewidzenie wymaganej ilości swapu. Niektóre wersje hibernacji Linuksa obsługują kompresję; Nie wiem, czy obecne.

Jeśli ogólnie nie ma wystarczającej ilości przestrzeni wymiany, możesz się spodziewać, że hibernacja zakończy się niepowodzeniem: system spróbuje zapisać (przydatną) zawartość pamięci RAM w zamianie, a gdy tylko wykryje, że nie ma wystarczającej ilości miejsca, próba hibernacji zostaje przerwana (zwykle z komunikatem o błędzie na konsoli i dziennikach systemowych). O ile mi wiadomo, Linux zawsze zachowywał się tak (nie chodzi o to, że naprawdę jest inne rozsądne zachowanie).


1
Próbowałem tego na maszynie virtualbox i to się nie udało, chociaż nie wyświetlało żadnej wiadomości dla użytkownika (próbowałem z Ubuntu 10.4). Jaki dziennik systemowy zgłosiłby ten błąd?
David Oneill,

3
@David: Na pewno powinno być coś /var/log/kern.log. Nie wiem, czy brak komunikatu na konsoli jest dziwactwem dla tej konkretnej wersji jądra, czy celowej konfiguracji Ubuntu (wiem, że celowo pomijają inne dane wyjściowe konsoli).
Gilles 'SO - przestań być zły'
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.