Suspend2swap, czyli hibernacja w Linuksie

24 grudnia 2006, by: kozik

Chyba podstawowym wymaganiem każdego użytkownika notebooka jest możliwość sprawnej i szybkiej hibernacji, czyli specyficznego uśpienia komputera. Błyskawiczne wyłączenie komputera i późniejsze odtworzenie jego stanu do tego samego miejsca.

W Linuksie są w sumie 3 oddzielne rozwiązania tego:

  • dosyć stary swsusp (w obecnym kernelu od dawna)
  • powolutku rozwijany uswsusp
  • chyba najbardziej rozwinięty suspend2

Odkąd posiadam laptopa korzystam z suspend2swap i generalnie jestem zadowolony… aczkolwiek czasem można się zirytować :) . Suspend2 ma po prostu bugi i zdarza się wywalanie hibernacji – w trakcie totalny pad i zrzut kernela. Suspend2 nie radzi sobie również przy dużej zajętości pamięci – nie zapisze całego zrzutu RAM-u przy ponad 50% użyciu go (pomijając pamięć cache). Przy 512 MB RAM-u było to znaczącym ograniczeniem, bo wymuszało każdorazowe wyłączanie Opery, Firefoksa i Thunderbirda (najbardziej pamięciożerne aplikacje…).

Teraz przy 1,5 GB RAM-u nie ma to znaczenia… ale pojawił się początkowo inny problem. Suspend2swap zrzuca nie tylko zajętą pamięć (aktywne strony), ale i cały cache stron (nie mylić z buforami). A po dłuższej pracy np. chodząc po WWW podział może wyglądać tak: 300 MB aktywnych stron i około 1 GB cache’u! W efekcie każda hibernacja wiązałaby się z zapisywaniem i późniejszym odczytem prawie 1,5 GB danych… To na szczęście da się załatwić dzięki drop_caches:

#!/bin/sh
# Copyright (C) 2006 Krzysztof Kozlowski
# License: GNU General Public License
# http://www.gnu.org/licenses/gpl.txt
# Homepage: http://www.kozik.net.pl
cat /proc/meminfo | grep '^Cached'
sync && sync && sync
sysctl vm.drop_caches=1
sleep 1
sync && sync && sync
sysctl vm.drop_caches=0
sync && sync && sync
cat /proc/meminfo | grep '^Cached'
hibernate

Skrypt przed wykonaniem hibernacji ustawia drop_caches na 1 (wyczyszczenie page_cache) i po kilku syncach wraca do normalnego ustawienia. Skrypt skutecznie zmniejsza rozmiar zrzucanego do swapa obrazu do przyzwoitej wartości (jakby ktoś jeszcze chciał go zmniejszyć – wartość 3 usuwa też dentries i inodes).

Przez cały prawie czas miałem problemy z dźwiękiem po budzeniu się – a dokładniej z jego brakiem. Zresztą to nie tylko mój problem, bo rady z wyładowywaniem modułów snd i wyłączaniem alsy, znaleźć można i na stronie suspend2. Tu akurat pomogło… nie robienie nic :) , tzn. zakomentowanie i wyłączenie wszystkiego, co rzekomo ma pomóc przy dźwięku po hibernacji:

  • zakomentowanie restartowania usługi ALSA (/etc/hibernate/common.conf)
  • zakomentowanie wyładowywania modułów snd_hda_intel i snd soundcore
  • zakomentowanie GentooModulesAutoload yes

Standardowo można się również dać zaskoczyć po aktualizacji samych łat Suspend2, co mnie ostatnio spotkało przy aktualizacji kernela suspend2-sources-2.6.18 na 2.6.18-r1 (r1 oznacza patchlevel od Gentoo). W nowej wersji źródeł użyto Suspend2 2.2.19 (wcześniej – 2.2.18). Niby nieistotny numerek… ale poprzez zmianę nazw zmiennych konfiguracyjnych (CONFIG_SUSPEND2_SWAPWRITER na CONFIG_SUSPEND2_SWAP) obudziłem się z hibernacją nieobsługującą żadnej metody zapisywania obrazu pamięci na dysk :) .

BTW – update linuksowego kernela (nie dotyczy to Gentoo, ale generalnie stabilności kodu Linuksa) może być katorgą – coś zmienią w źródłach, coś usuną, coś dodadzą i coś nie działa… Po zmianie wersji kernela wymusza to porównywanie nowej konfiguracji ze starą, w celu wychwycenia drobnych zmian w kodzie lub w samej konfiguracji jądra. A różnic przy zmianie nawet patch level (tj. 2.6.18->2.6.19) potrafi być naprawdę dużo!

Reasumując – po ostatnim rozwiązaniu problemów z dźwiękiem nie mam powodów, żeby specjalnie narzekać na stabilność i jakość Suspend2 – działa i zazwyczaj poprawnie. Choć jestem pewien, że niedługo znowu będę musiał zacząć grzebać, bo coś się spieprzy :) . Póki co za najstabilniejsze z nowych kerneli mogę uznać 2.6.17 (suspend2-sources-2.6.17-r4, suspend2 w wersji 2.2.7) i 2.6.19 (suspend2-sources-2.6.19-r1, suspend2 w wersji 2.2.9).

Wysłano w Blog - Linux i Unix | Brak komentarzy »

Adres dla trackback. RSS dla komentarzy w tym wpisie.
Dodaj komentarz




Uwaga: Włączona jest moderacja komentarzy, więc nowy komentarz nie ukaże się bezpośrednio po jego wysłaniu.

Uwaga: Działa filtr antyspamowy. Jeśli umieścisz w komentarzu odnośniki, to może on zostać błędnie zakwalifikowany jako spam.