Dalli, dalli!
System- und Programmstart beschleunigen
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.
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.
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



