GDM Prefetch: Schneller zum Desktop
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.
Das wurde ich jetzt schon 2x gefragt. Die Antwort ist ganz einfach: Kaffee.
Ich komm heim, schalt den Rechner ein, geh in die Küche, werf die Espressomaschine an, wart bis sie vorgeheizt hat, füll den Kaffee ein, drück aufs Knöpfchen, wart bis die Tasse voll ist, geb etwas Milch … Du hast ein Bild. ;)
Während dieser Zeit ist GDM schon längst fertig - und es bringt mir gar nix, schnellere Lösungen zu verwenden, wenn ich ohnehin in der Küche steh. Erst wenn ich zurück komme und meinen Benutzernamen und mein Kennwort eingebe, dann solls schnell gehen.
Gnome bin ich halt auch gwohnt, ich probier hin und wieder mal was anderes, komm aber immer wieder zurück.
GDM: