30.10.2014, 16:02 UhrDeutsch | English
Hallo Gast [ Registrierung | Anmelden ]

Software-Suspend-2 unter Kanotix


Hier eine kleine Anleitung für diejenigen da draußen die Ihren PC gerne mal in den von Windows bekannten "Ruhezustand" versetzen wollen. Betrifft wohl vor allem die Notebookbesitzer.

Etwas Vorgeplänkel...
Verschiedene Standby-Modi sind nach dem ACPI-Standart definiert.
Darunter z.b. das in manchen BIOSen angebotene ACPI S1, welches eher moderate Ersparnisse in heutigen Systemen bringt. Das bekanntere ACPI S3 Welches dem "Suspend To RAM" entspricht, Windows bezeichnet das gern als "In den Standby-Modus versetzen" und man kennt es von Notebooks oftmals daher dass Wenn man den Deckel zuklappt der Lüfter ausgeht und ein Lämpchen leuchtet oder blinkt. Während dieser Modus schon deutlich sparsamer sein sollte als S1, Da nur noch der Arbeitsspeicher mit Strom versorgt werden muss, ist das System in der Regel in wenigen Sekunden aufgewacht. Allerdings birgt dieser Modus oftmals das Risiko dass das Notebook zugeklappt und "vergessen" wird, und man am Ende feststellt dass der Akku zwischendurch leer wurde, und der gesamte Inhalt des Arbeitsspeichers, inklusive der darin hinterlegten Arbeitssession unwiederbringtlich verloren ist.
Der "sicherste" und zugleich sparsamste Suspend-Modus ist "Suspend to Disk" oder auch ACPI S5 (manchmal auch S4) Im Gegensatz zu S3, landet die aktuelle Session in diesem Modus nicht im Arbeitsspeicher, sondern wie der Name schon vermuten lässt, auf der Festplatte. Anschließend wird das System entweder abgeschaltet (S5) oder in einen BIOS-Gestützten Sonder-Modus versetzt (S4) welcher dann ein aufwachen etwa durch aufklappen, Tastendruck oder wake-on-lan ermöglicht.
Dieser Unterschied ist allerdings höchstens bei Notebooks relevant, bei Desktop-Rechnern verschwimmen die Grenzen zwischen S4 und S5 oftmals, alleine dadurch dass die meisten PCs ohnehin per Software nicht hundertprozentig abgeschaltet werden, um noch auf Tastendruck o.ä. zu reagieren.

Suspend in linux
Gut, nun zur Sache, in Linux hat das Thema Suspend, speziell Suspend to Ram und Suspend to disk in der letzten Zeit einiges an Aufmerksamkeit, aber auch Verwirrung gewonnen.
inzwischen gibt es ein im Kernel implementiertes Software-Suspend, welches bereits seit frühen 2.6er - Kerneln zur Verfügung steht, das extern entwickelte und als Patch bereitstehende Software-Suspend-2 und das "uswsusp" getaufte Userland-Software-Suspend.

In diesem Beitrag soll es speziell um Software-Suspend-2 gehen, das obwohl es einen Kernel-patch erfordert, von vielen als überlegen angesehen wird.

Getestet wurde das folgende auf einem Thinkpad X60s mit Kernel 2.6.17.13-kanotix-2, welcher meines wissens nach der erste Kanotix-Kernel war welcher von Kano mit Software-Suspend-2 gepatcht wurde.

Als erstes muss ein solcher Kernel installiert werden, wie an anderen Stellen hier im Wiki ausführlich beschrieben.
Ist das geschehen, sollte man sich der Einfachkeit halber das hibernate-script installieren:

apt-get install hibernate


Zudem sollte man die Kernel-Bootzeile anpassen. Unter Linux wird zum speichern des System-Abbilds auf der Festplatte standardmäßig die Swap-Partition benutzt. Obwohl Software-Suspend-2 auch andere Modi unterstützt, ist das verwenden der Swap-Partition wohl der einfachste und konfigurations-ärmste Weg.

wir hängen an die Bootzeile des Kernels also folgendes an:

resume2=swap:/dev/sda6


Wobei "sda6?" natürlich durch den Namen der "echten" Swap-Partition zu ersetzen ist.
Angemerkt sei hier, dass die Swap-Partition in diesem Fall mindestens 1,5 - fache, besser doppelte RAM-Größe haben sollte. So kann das System Swappen und hat dennoch Platz um den kompletten RAM-Inhalt unterzubringen wenn ein Suspend ausgelöst werden soll.

Wem das zu aufwändig ist, dem sei Kanos Skript "get-resume-partition" ans Herz gelegt, welches die Parameter für Software-Suspend-2 und für das Kernel-seitige Software-suspend automagisch korrekt setzt.

Ok, nach etwas Konfigurationsarbeit im hibernate-configfile in /etc/hibernate/common.conf, wie Beispielsweise der Einstellung dass der Bildschirm vor dem suspend gesperrt werden soll (um Unbefugten den Passwort-losen Zugriff auf die Benutzerdaten durch simples aufwecken zu vereiteln) oder dem automatischen unmounten bestimmter mountpoints und/oder Dateisystemtypen (in meinem Fall für encFS?-Volumes benutzt welche über das "fuse" - Dateisystem laufen) und vielerlei anderer Parameter, kann man noch in der suspend2?.conf die oben beschriebene Art des System-Abschaltens mit S4 oder S5 festlegen (PowerDownMethod?) Sowie einige Software-Suspend-2-typische Einstellungen setzen.
Die meisten Einstellungen sind in diesem File allerdings bereits mit sinnvollen Defaults besetzt.

Wenn dieser Schritt getan ist, kann das Suspend von der Konsole aus beispielsweise durch Eingabe von

hibernate -Fsuspend2.conf


(als root) angestoßen werden. In den meisten Fällen sollte auch ein simples


hibernate



genügen, welches jedoch nacheinander alle möglichen Suspend-Modi durchprobiert und daher das Fehlersuchen erschwert.

Nach Eingabe des Kommandos sollte das System schlafengehen und durch Druck auf den Einschalter auch wieder aus eben jenem Erwachen.
Hierzu sei gesagt, dass das "erwachen" des Systems zuerst wie ein normales booten aussieht. mit BIOS-Screen, GRUB usw. Erst nach Grub, wenn der Kernel bootet, erkennt er ein im Swap liegendes Image und resumed davon.
Es ist in allen Dokus zum Thema ausdrücklich untersagt, die Kerneloptionen in Grub zwischendurch zu ändern, oder beim "aufwachen" mit einem anderen Kernel zu booten als dem, mit welchem suspendet wurde!
Was bedeutet..

Suspendet nur mit dem Standardkernel, und rührt Grub dann beim aufwachen nicht an!

You have been warned!

Ein Wort zur Performance...
Suspend to Disk ist normalerweise deutlich langsamer als Suspend to RAM, was nicht verwundert, angesichts der Tatsache dass die Festplatte um Faktor tausend langsamer ist als der Arbeitsspeicher. Dennoch ist Software-Suspend-2 recht reaktionsschnell, und "bemerkt" dass es resumen muss, deutlich früher als das Kernel-seitige Software-Suspend.
Jedenfalls gehen sowohl das aufwachen wie auch das suspenden selbst zügig zu werke, wenn auch nicht in 2 Sekunden.

Wer mutig ist, und eines der Geräte hat, mit welchen auch Suspend to RAM ohne Klimmzüge funktioniert, kann auch testen die "PowerDownMethod?" in der suspend2?.conf auf 3 zu setzen. Damit erreicht man theoretisch eine Art "Suspend to both" wie Apple-User es kennen, dass zuerst auf die Festplatte ein Image geschrieben wird, und danach ein normales Supend to Ram ausgelöst wird.
Auf diese weise erreicht man die aufwach-geschwindigkeit von Suspend to RAM plus die "akku-ausfallsicherheit" von supend to disk. Da normalerweise aus dem RAM resumed wird, und falls dies nicht gehen sollte, eben aus dem Festplattenimage.
Dieser Modus wurde allerdings hier nicht getestet und ist auch nicht so einfach, da sich manche Systeme beim Suspend to RAM etwas zickig verhalten.

Kleine Ergänzung:
wenn in der suspend2?.conf der eintrag "FullSpeedCPU?" auf "yes" gesetzt ist, kann dies dazu führen dass nach dem aufwachen der Prozessor auf vollem Takt sitzen bleibt und sich nicht mehr regelt. Das liegt daran dass Hibernate die CPU für schnelles suspenden hochdreht, das aber nie rückgängig macht.
Zudem ist es für user von "ondemand" als cpu-governor oder auch "conservative" verwirrend, dass die governors gesetzt bleiben und sich trotzdem nichts dreht. Das kommt daher dass hibernate in dieser hinsicht ein Witzbold ist. Das Skript setzt nicht den governor auf "performance" um suspend speed zu kriegen, sondern setzt stattdessen den Wert von "scaling_min_freq" auf die maximale Taktfrequenz des Prozessors, was die governors dazu veranlasst als "minimale freqzenz" eben den Höchsttakt anzunehmen, da derselbe Wert auch in "scaling_max_freq" steht ist der Spielraum der CPU-taktung auf eine einzige Stufe, nämlich Maximalpower, reduziert.

Abhilfe schaffen hier zwei kleine Skripte und das setzen von "FullSpeedCPU? no".
in der suspend2?.conf also setzen:

# Scale CPU to full speed to make sure we suspend as fast as possible.
FullSpeedCPU no

# Fix resolution for wide screen monitors - Edit to meed your needs.
OnResume 99 /etc/hibernate/scriptlets.d/set_governor_performance.sh
OnSuspend 01 /etc/hibernate/scriptlets.d/set_governor_fullspeed.sh


Und entsprechend die Skripte set_governor_performance.sh und set_governor_ondemand.sh
unter /etc/hibernate/scriptlets.d anlegen.
z.b. so:

#!/bin/sh

echo "performance" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo "performance" > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor


analog im anderen Skriptfile für "ondemand" statt "performance"

(Dieses Beispiel ist für meinen Dualcore, Besitzer von Singlecore-CPUs können die zweite Echo-Zeile weglassen, bei ihnen gibt es nur den cpu0?-Ordner)

auf diese weise erreicht man maximale Performance beim suspend und resume, und hat dennoch nach dem aufwachen wieder seine geregelte CPU und keinen Lüfterlärm.


Ich hoffe diese kleine (viel zu große) Anleitung kann dem einen oder anderen helfen.

gruß
Ge0rgy?

p.s. Das leidige konfigurieren der common.conf kann zukünftig evtl. entfallen, wenn Kano ein entsprechendes vorkonfiguriertes File mitliefert.
XML Revisions of $tag
Seiten-History :: Letzter Editor : Zatuffli :: Eigentümer : Georgy ::
Powered by pnWikka 1.0
 
 
Deutsch | English
Logos and trademarks are the property of their respective owners, comments are property of their posters, the rest is © 2004 - 2006 by Jörg Schirottke (Kano).
Consult Impressum and Legal Terms for details. Kanotix is Free Software released under the GNU/GPL license.
This CMS is powered by PostNuke, all themes used at this site are released under the GNU/GPL license. designed and hosted by w3you. Our web server is running on Kanotix64-2006.