Oskar Welzl: Weblog zur Homepage

GDM Prefetch: Schneller zum Desktop

Gerade das Hochfahren des Systems und das Starten der grafischen Benutzeroberfläche nach dem Einloggen dauern unter GNU/Linux meist deutlich länger als unter proprietären Systemen, die von einem einzigen Hersteller kommen. Das ist eine zwingende Folge der Wahlfreiheit, die GNU/Linux auszeichnet. Trotzdem kann man an einigen Stellen spürbar nachbessern.

Zum Hintergrund: Im Vergleich zu GNU/Linux haben es Windows und OS X leicht. Jeder Teil des Betriebssystems weiß genau über die anderen Komponenten Bescheid, weil alles aus einem Guß ist und es keine Alternativen gibt. Die Abläufe lassen sich so viel besser koordinieren. Ein gutes Beispiel ist der Login-Vorgang:

Während Windows auf meinen Benutzernamen und mein Kennwort wartet, rattert die Festplatte ununterbrochen weiter. Kein Wunder: Egal was ich beim Login eingebe, es ist ziemlich klar, welche Programme und Dateien nachher benötigt werden. Logischerweise werden diese Dateien daher gleich geladen und im Hintergrund gestartet, damit anschließend alles schneller geht.

Bei GNU/Linux ist das von Grund auf anders: Ich kann mich beim Login für Gnome, KDE, Fluxbox, Xfce oder irgendeine andere Desktop-Umgebung entscheiden; möglich ist auch, daß ein Systemadministrator pro Benutzer andere Desktop-Umgebungen eingerichtet hat. Im Ergebnis bedeutet das: Erst nachdem Benutzername und Kennwort eingetippt und bestätigt sind ist klar, welche Programme und Dateien benötigt werden. Vorher sitzen vier Prozessorkerne à 1,4 GHz gelangweilt rum und sind ausschließlich damit beschäftigt, die Tastatureingaben beim Login zu verarbeiten.

Gottseidank läßt sich dieses Verhalten anpassen: Das Login-Programm GDM zum Beispiel kann so eingerichtet werden, daß es schon während des Logins alle Dateien (Programme, Bibliotheken, Schriften,...) lädt, die man in der Datei /etc/X11/gdm/gdmprefetchlist angibt. Schöne Sache. Nur: Wie befüllt man diese Prefetch-Liste? Mit anderen Worten: Woher weiß ich, welche Systembibliotheken und Hilfsdateien geladen werden müssen? Zwar gibt es eine Voreinstellung, die von GDM mitinstalliert wird. Die ist allerdings nicht nur sehr rudimentär, sonder de facto nutzlos, weil eben kein GDM-Entwickler wissen kann, was nach meinem Login auf meinem Rechner passieren wird.

Lösung: selber basteln. Mit dem Befehl lsof -u name bekommt man eine Liste sämtlicher Dateien, die für Prozesse des Benutzers „name“ (muß eben durch den eigenen Login-Namen ersetzt werden) geöffnet sind. Ein bißchen awk-Zauberei bringt diese Liste in ein vernünftiges Format, sortiert sie und befreit sie von unnötigen Versionsangaben bei Bibliotheken:

lsof -u name | awk '$4 ~ "(mem|txt)" {sub(".so(.[0-9]+)+", ".so", $9); print $9}' | sort -uo /tmp/prefetch-files.lst

Dieses Wundermittel habe ich im gentoo-Forum gefunden. Man läßt es laufen, nachdem man den üblicherweise verwendeten Desktop ohne prefetch gestartet hat und verwendet das Ergebnis (/tmp/prefetch-files.lst) als neue gdmprefetchlist. Der Witz dabei: Wenn man z.B. schon mal Firefox und Evolution startet und die Befehlszeile erst dann laufen läßt, werden auch die für diese Programme benötigten Dateien mitgeladen und der Start entsprechend beschleunigt. Bei viel RAM (und das hab ich) kann sich das auszahlen, wenn man ohnehin fast immer die gleichen Applikationen verwendet.