Gerade große Linux-Distributionen leiden nicht selten an einer chronischen Boot-Trägheit, auch Programmstarts dauern oft gefühlte Stunden. Mit ein paar Tricks helfen Sie Ihrem System auf die Beine.
Viele moderne Betriebssysteme nehmen eine möglichst umfassende Anwenderfreundlichkeit für sich in Anspruch. Der Nutzer soll nach Möglichkeit gar nicht mehr mit widerspenstiger Hardware und daraus resultierenden Treiberproblemen in Berührung kommen. Durch das Abfangen aller Eventualitäten beim Start laden die Systeme beim Booten eine ganze Reihe unnötiger Treiber und Dienste, die häufig nur Zeit kosten und für dem Anwender keinerlei Nutzen bringen.
Diesem Trend steuern Sie jedoch wirkungsvoll entgegen, indem Sie unnötige Dienste abschalten. Darüber hinaus optimieren Programme wie Ureadahead [1] und Preload [2] den Zugriff auf die beim Booten benötigten Dateien und sorgen nochmals für einen Performance-Schub.
Booten beschleunigen
So gut wie alle Distributoren arbeiten mit Feuereifer daran, ihre Systeme dahingehend zu optimieren, dass sie schneller booten und die Programme schneller starten. Bereits in älteren Versionen setzt Ubuntu auf den Boot-Booster Readahead. In Version 9.10 kommt Sreadahead zum Einsatz, das bis auf die Namensähnlichkeit technisch nichts mehr mit dem Vorgänger gemein hat. Anders als Readahead besitzt es nur eine rudimentäre Konfigurationsdatei, die nur wenige Einstellungen zulässt.
Was Canonical dabei aber offenbar übersah, war die Tatsache, dass dieses Programm in erster Linie die Zugriffe auf SSD-Speicher optimierte. Das hat zur Folge, dass Sreadahead den Start von Systemen mit normalen Festplatten unter Umständen nicht nur nicht beschleunigt, sondern sogar verlangsamt. Für Abhilfe sorgt das im Dezember 2009 von Ubuntu als Update bereitgestellte Ureadahead: Es erkennt automatisch den verwendeten Plattentyp und passt die Optimierung darauf an. Falls Sie Ihr System regelmäßig aktualisieren, ist eine nachträgliche Installation entsprechend nicht mehr erforderlich.
Wesentlich komplizierter gestaltet sich das Einrichten von Ureadahead unter OpenSuse. Zwar steht das Programm als RPM-Paket für OpenSuse 11.2 zur Verfügung, jedoch nützt es in dieser Form nichts, da es einen gepatchten Kernel erfordert. Um das System entsprechend auf den Einsatz von Ureadahead vorzubereiten, laden Sie zunächst das Quellarchiv von der Projektseite [1] herunter, da dieses auch den benötigten Kernelpatch enthält. Leser der Media-Ausgabe finden es auf der DVD im Verzeichnis /LinuxUser/urahead zusammen mit dem RPM-Paket. Starten Sie danach den Paketmanager von YaST, und installieren sie neben den obligatorischen Entwicklerwerkzeugen (Gcc, Make, Automake, Patch) die Quellen des Vanilla-Kernels.
Zwar stellt OpenSuse auch die Sourcen des eigenen, angepassten Kernels zum Download bereit, jedoch schlägt mit ihm das Patchen fehl. Beachten Sie, dass es abhängig von Ihrem System beim Verwenden des Vanilla-Kernels zu unvorhersehbaren Effekten und Fehlern kommen kann, da ihm jegliche distributionsspezifischen Anpassungen fehlen. Öffnen Sie eine Konsole und wechseln Sie ins Verzeichnis /usr/src/Kernelversion. Der Befehl
$ patch -p1 < /Pfad/zum/Patch/0001-trace-add-trace-events-for-open-exec-an.patch
pflegt die Änderungen des Patches im Quelltext des Vanilla-Kernels ein. Eine detaillierte Anleitung, wie Sie den Kernel im Anschluss kompilieren und im System einrichten, finden Sie im Artikel “Kerngeschäft” [3].
Vorbereitungen
Damit Ureadahead nur den Start der Programme protokolliert, die Sie wirklich benötigen, sollten Sie zunächst alle unnötigen Dienste deaktivieren. Um herauszufinden, welche auf dem Rechner laufen, bietet Ubuntu unter dem Menüpunkt System | Systemverwaltung | Dienste eine Übersicht. Diese lässt zwar bereits erste Rückschlüsse auf unnötigen Ballast zu, zeigt jedoch längst nicht alle geladenen Dienste an. Als wesentlich auskunftsfreudiger erweist sich der Bootup-Manager, den Sie in den Repositories von Ubuntu finden. Sie installieren ihn mit dem Aufruf apt-get install bum. Danach finden Sie im Menü System | Systemverwaltung den Eintrag BootUp-Manager, mit dem Sie ihn starten.
Nach dem Aktivieren der Checkbox neben Erweitert am linken unteren Rand des Programmfensters zeigt der BootUp-Manager Ihnen detaillierte Informationen, auch zu den beim Systemstart ausgeführten Prozessen. Sie deaktivieren überflüssige Dienste durch das Entfernen des Häkchens in der Checkbox vor dem Eintrag. Im Reiter Dienste ändern Sie darüber hinaus die Priorität der Prozesse. Das bewirkt, dass die Dienste in der Reihenfolge früher oder später starten. Nach dem Deaktivieren überflüssiger Dienste übernehmen Sie die Änderungen durch das Anklicken des Schalters Anwenden unten links im Programmfenster. Der Bootup-Manager entfernt diese dann aus den entsprechenden Runlevel-Verzeichnissen (Abbildung 1).

Abbildung 1: Über den Bootup-Manager legen Sie fest, wann welche Dienste mit welcher Priorität starten.
Anwender von OpenSuse editieren die Runlevels mit dem YaST-Tool Systemdienste (Runlevel), das sie in der Kategorie System finden.
In der Regel protokolliert Ureadahead ein Mal im Monat den Bootvorgang neu, um eventuelle Veränderungen zu registrieren. Das Programm prüft beim Booten, ob die Datei /var/lib/ureadahead/pack existiert – ist das nicht der Fall, zeichnet es den Bootvorgang auf. Entsprechend reicht es aus, im gestarteten System diese Datei zu löschen, um beim nächsten Booten einen Rescan des Systems zu veranlassen.
Nachdem beim Booten sämtliche über die Runlevels gestarteten Programme und Daemons laufen, wartet Ureadahead noch 45 Sekunden ab, bevor es sich selbst beendet. Nutzen Sie diese Zeit, indem Sie Programme, die Sie häufig verwenden in dieser Zeitspanne starten: So protokolliert das Tool auch diese und beschleunigt zukünftig deren Start, indem es sie beim Booten im Cache vorlädt. Die Konfigurationsdatei von Ureadahead finden Sie unter /etc/init/ureadahead/ureadahead.conf. In ihr stellen Sie jedoch lediglich die Zeit ein, bis sich das Programm selbständig beendet.
Im Test betrugen die Differenzen zwischen dem Systemstart mit und ohne Ureadahead im Schnitt unter zehn Prozent. Dauerte der normale Boot zwischen 33 und 34 Sekunden, war das System mit dem Bootbeschleuniger nach 29 bis 30 Sekunden einsatzbereit. Anders sah es beim Start von Programmen aus: Während Firefox ohne den Booster etwa sechs Sekunden zum Öffnen benötigte, waren es mit nur noch drei bis vier Sekunden. Da der tatsächliche Performancegewinn jedoch erheblich vom System abhängt, ist es möglich, dass Ihr Rechner nach der Modifikation deutlich schneller bootet als unser Testsystem. Eine Reihe von Anwendern melden einen Zeitgewinn von bis zu 50 Prozent.
Programmstarts beschleunigen
Während Ureadahead sich hauptsächlich auf das Beschleunigen des Bootvorgangs spezialisiert, sorgt Preload dafür, Applikationen möglichst schnell zu starten. Es lädt wie auch Ureadahead die protokollierten Programme in einer optimierten Reihenfolge in den Page-Cache, womit sie wesentlich weniger Zeit zum Starten benötigen. Preload findet sich zwar in den Ubuntu-Repositories, ist aber noch nicht vorinstalliert. Der Aufruf sudo apt-get install preload richtet es auf Ihrem Rechner ein und startet es danach automatisch.
Auch OpenSuse bringt einen bereits nach der Installation aktivierten Dienst namens Preload [4] mit. Er hat jedoch nichts mit dem hier vorgestellten Projekt gemein, sondern ähnelt in seiner Arbeitsweise eher Readahead.
Zwar steht die hier vorgestellte Variante von Preload auf der Projektseite als Quelltext zum Download bereit, jedoch verwendet der Autor den in OpenSuse unüblichen Installationspfad /usr/local/ um darin neben den Binaries auch die Konfigurationsdateien und Startskripte zu speichern. Zwar lässt sich beim Übersetzen mittels
# ./configure --sysconfdir=/etc --sbindir=/sbin
der Pfad anpassen, was aber nicht viel bringt, da er in den Skripten selbst nicht stimmt. Diese an die Suse-Gegebenheiten anzupassen ist mit erheblichem Aufwand verbunden, und sprengt den Rahmen dieses Artikels. Das Einrichten erledigen Sie mit dem üblichen Dreisatz ./configure, make und sudo make install.
Da der Installer unter Ubuntu auch die notwendigen Runlevel-Skripte anlegt, startet der Daemon direkt beim Booten. Ein Daemon prüft im 20-Sekunden-Rhythmus das System und protokolliert sämtliche Programmstarts. Das Ergebnis schreibt er in die Datei /var/lib/preload/preload.state. Diese Strategie hat jedoch einen kleinen Nachteil: Läuft eine Applikation kürzer als 20 Sekunden, nimmt Preload sie unter Umständen nicht wahr. Wie die meisten Linux-Daemons verfügt auch Preload über eine Konfigurationsdatei, in der Sie diesen und andere Werte anpassen. Sie finden diese unter /etc/preload.conf (Abbildung 2). Ändern Sie die voreingestellten Werte aber nur, wenn es mit diesen zu Problemen kommt.

/etc/preload.conf legen Sie unter anderem fest, wie viel Speicher Preload im Höchstfall für sich in Anspruch nehmen darf.” width=”300″ height=”266″ />
Abbildung 2: In der Steuerdatei/etc/preload.conf legen Sie unter anderem fest, wie viel Speicher Preload im Höchstfall für sich in Anspruch nehmen darf. Als wichtigste Parameter finden sich in der Konfiguration die Einstellungen des maximal nutzbaren Speichers. Zwar steht im entsprechenden Abschnitt eine Formel, aus der sich dieser berechnet, jedoch konnten wir die daraus gewonnen Werte nicht nachvollziehen. Einige Versuche sorgten jedoch für Klarheit. In der Grundeinstellung sieht das Programm praktisch den kompletten freien Speicher zum Puffern vor, nutzt jedoch tatsächlich nur zwischen 150 und 200 MByte. Am effektivsten begrenzen Sie den maximal verfügbaren Speicher mit dem Prozentwert hinter memfree. Senken Sie diesen auf beispielsweise 50, halbiert der Dienst nahezu den für ihn verfügbaren Speicherbereich. Um die Änderungen zu übernehmen, starten Sie den Dienst mit dem Aufruf /etc/init.d/preload restart neu.
Um kontinuierlich den aktuellen Status und Speicherverbrauch auszulesen tippen Sie als Nutzer root in der Konsole tail -f /var/log/preload.log. Sie sehen dann in Echtzeit, wieviel Speicher Reload gerade belegt, wie viel er reserviert, und wie viele Dateien er zwischenspeichert (Abbildung 3). Der Konsolenaufruf free -m zeigt Ihnen die aktuelle Speicherbelegung des ganzen Systems an.

/var/log/preload.log zeigt Ihnen stets den aktuellen Status des Caching-Daemons.” width=”300″ height=”188″ />
Abbildung 3: Die Datei/var/log/preload.log zeigt Ihnen stets den aktuellen Status des Caching-Daemons.Möchten Sie die Tests auf Ihrem System reproduzieren, löschen Sie im ersten Schritt den Page-Cache als Benutzer root mit dem Aufruf
# sync; echo 3 > /proc/sys/vm/drop_caches
Vergewissern Sie sich, dass keinerlei Preload-Programme laufen, und und messen Sie die Startzeit der Applikation vom Aufruf bis zum vollständigen Aufbau. Löschen Sie unbedingt nach jedem Test den Page-Cache aufs Neue, da anderenfalls Programmfragmente und geladene Bibliotheken das Ergebnis verfälschen können.
Anders als Readahead ist Preload ein relativ schlauer Dienst: Er puffert nicht einfach stur aufgerufene Programme, sondern beobachtet auch die Häufigkeit der Starts. Mit einer Halbwertszeit von einer Woche sinken Applikationen, die in diesem Zeitraum nicht mehr gestartet wurden, in der Prioritätenliste. Damit beugt der Dienst dem Effekt vor, dass Applikationen, die Sie selten verwenden, den Speicher blockieren.
Fazit
Möchten Sie einem lahmenden System auf die Beine helfen, finden Sie mit Ureadahead und Preload zwei potente Programme, die das bewerkstelligen. Mit dem vorausschauenden Laden von Programmen und der geschickten Anordnung der Reihenfolge erzielen Sie unter günstigen Umständen einen Geschwindigkeitsgewinn von bis zu 50 Prozent.
Infos
[1] Ureadahead: https://launchpad.net/ureadahead
[2] Preload: http://www.example.org/folder/
[3] Kernel kompilieren: Peter Kreußel, “Kerngeschäft”, Linux-User 06/2006, S. 88, http://www.linux-user.de/ausgabe/2006/06/088-kernel-kompilieren/
[4] OpenSuse-Preload: http://tinyurl.com/lu-os-preload





