swsusp: improve freeing of memory [Update]

Einen kleinen Patch von Rafael J. Wysocki aus dem aktuellen mm-traffic möchte ich hervorheben:

“swsusp-improve-freeing-of-memory.patch: This patch makes swsusp free only as much memory as needed to complete the suspend and not as much as possible. In the most of cases this should speed up the suspend and make the system much more responsive after resume, especially if a GUI (eg. X Windows) is used.”

Das Potential ist enorm, denn Suspend-to-Disk dauert unter Linux bisher deutlich länger als unter Windows und lässt den Kernel nach dem Resume mit leerem Speicher, aber vollem Swap zurück. Man ist also nach dem Aufwachen erst einmal damit beschäftigt, auf langsam aufbauende Fenster zu warten, zumindest bis die Daten wieder im RAM sind. Kernel 2.6.15-rc1-mm2 bringt den Patch mit, ich habe testweise mal mit “altem” (2.6.14-mm1) und “neuem” Kernel Daten gesammelt. Fazit: Nach den ersten drei Testläufen mit “altem” Kernel und einem Testlauf mit “neuem” Kernel sieht es so aus, als würde der Patch die Dauer für Suspend als auch Resume stellenweise mehr als halbieren. Ich achte darauf, die Speicherauslastung vor dem Suspend so gut wie möglich konstant zu halten. Schwankungen im Bereich von einigen Sekunden sind auch auf die Hardware (PCMCIA-WLAN-Karte) zurückzuführen. Da ein Testlauf jeweils mindestens 10 Minuten dauert, hier die Daten der ersten vier Durchläufe:

Hardware: Toshiba Satellite 1800-400, Celeron 800 MHz, 384 MB RAM, 384 MB Swap

2.6.14-mm1
Suspend: 87, 81, 91 Sekunden
Resume: 98, 109, 100 Sekunden

2.6.14-mm1
Suspend: 28, 35, 34 Sekunden
Resume: 53, 44, 44 Sekunden

Bevor Vorfreude ausbricht, würde ich allerdings gerne weitere Daten erheben. Das Ergebnis ist fast zu schön um wahr zu sein.

Update:
Die Daten für den Kernel mit Patch sind nun eingetragen, der Patch verfehlt seine Wirkung nicht. Anders als vorher ist beim Suspend nun nicht mehr “Freeing memory” der dominierende Vorgang, statt dessen wird dieser Schritt fast sofort übersprungen und die meiste Zeit nimmt nun das Schreiben der Daten auf die Platte in Anspruch. Genauso verhält sich das System beim Aufwachen, sofort nach Abschluss des Resume ist das System wieder komplett benutzbar, kein Warten auf ausgelagerte Speicherseiten mehr. Ein Desktop mit KDE, akregator, Konqueror (vier geöffnete Seiten), Kontact, Kopete, KWifiManager und reichlich vorgeglühten Buffers/Caches ist nach gerade mal 44 Sekunden wieder nutzbar.