Mit Readahead und Preload machen Sie der Festplatte Beine und laden Anwendungen doppelt so schnell wie bisher.
Die Performance von Festplatten hinkt jener der übrigen Komponenten deutlich hinterher: Die Ursachen dafür sind die mechanischen Bauteile und die oft ungünstige Verteilung der Daten auf der Platte. Je schneller die Entwicklung voranschreitet, desto größer klafft die Leistungsspalte zwischen Prozessor, Hauptspeicher und Festplatte auf. Damit entwickelt sich dieses Bauteil immer deutlicher zum Flaschenhals des Rechners. Während der Rechner binnen Nanosekunden Daten aus dem Hauptspeicher liest, misst man die Zugriffszeiten auf die Festplatte in Millisekunden. Das bedeutet eine Geschwindigkeitsdifferenz im Faktor 100.000 zwischen Hauptspeicher und Festplatte. Dieser Umstand macht sich besonders beim Starten von Applikationen unangenehm bemerkbar.
Angesichts der Tatsache, dass sich die Gigabyte-Preise für Hauptspeicher inzwischen auf einem sehr niedrigen Niveau von 12 bis 15 Euro bewegen, rüsten viele Hersteller ihre Rechner inzwischen mit viel mehr RAM aus, als diese im täglichen Gebrauch tatsächlich benötigen. Diesen Umstand nutzt Windows bereits seit XP, indem es das Nutzerverhalten analysiert und Programme bereits vor deren Start in den Hauptspeicher lädt. Aber auch Linux bietet einige Tools, die diese Technik umsetzten.
Das bereits in Ubuntu integrierte Readahead [1] soll in erster Linie die die Bootzeit verkürzen, eignet sich aber auch, um Programmstarts zu beschleunigen. Preload [2] hingegen merkt sich den Start von Applikationen und lädt diese im Hintergrund in den Hauptspeicher, was zukünftige Aufrufe erheblich beschleunigt. Der vorige Artikel dieses Schwerpunkts beschreibt den Einsatz von Readahead als Bootbeschleuniger und erklärt auch die technische Vorgehensweise. Dieser Artikel bezieht sich ausschließlich auf Methoden, den Start von Anwendungen im laufenden Betrieb zu beschleunigen.
Readahead
Canonical liefert Ubuntu bereits mit vorinstalliertem und aktiviertem Readahead aus. Es verwendet in der Grundeinstellung die vorhandenen Profile boot und desktop aus dem Verzeichnis /etc/readahead/. Das sie aber nicht an die Gewohnheiten des Nutzers angepasst wurden, arbeiten sie relativ ineffektiv. Damit Readahead zukünftig weiß, welche Programme es im Voraus laden soll, gilt es zunächst, die Profildatei desktop zu aktualisieren.
Öffnen Sie dafür eine Konsole und geben Sie sudo readahead-watch -o /Pfad/zur/Steuerdatei ein. Sie starten damit einen Daemon, der im Hintergrund alle folgenden Programmstarts aufzeichnet, und in die mit -o definierte Datei schreibt. Diese legt er aber erst dann an, wenn Sie den Dienst via sudo killall readahead-watch stoppen oder den Rechner herunterfahren. In der Grundeinstellung protokolliert das Programm sämtliche Dateiaufrufe. Um das Protokoll auf Verzeichnisse einzuschränken, erweitern Sie das Startkommando um den Pfad, etwa /usr/local/.
Um die ermittelten Dateien mit möglichst wenig Bewegungen des Festplattenlesekopfs in den Page-Cache einzulesen, sortiert Readahead diese in der Steuerdatei in der Reihenfolge des Speicherorts auf der Festplatte. Es empfiehlt sich jedoch, die generierte Datei vor dem Einsatz in einem beliebigen Texteditor zu überarbeiten, um beispielsweise das Vorladen temporärer Dateien oder unerwünschter Applikationen zu verhindern.
Um das erstellte Protokoll als Systemstandard zu verwenden, überschreiben Sie damit die vorhandene Datei /ect/readahead/desktop. Damit lädt Preload die aufgezeichneten Programme bereits beim Systemstart in den Hauptspeicher. Möchten Sie die Änderungen sofort übernehmen, tippen Sie in der Konsole sudo /etc/init.d/readahead-desktop restart. Eine zweite Anwendungsmöglichkeit erschließt readahead-list: Es lädt erstelle Profile sofort in den Hauptspeicher. Arbeiten Sie beispielsweise des Öfteren mit bestimmten Programmgruppen, die Sie aber nicht bei jedem Booten in den Hauptspeicher laden möchten, erstellen Sie wie beschrieben die Profildatei. Der Aufruf readahead-list /Pfad/zur/Steuerdatei lädt die darin enthaltenen Dateien direkt vor.
Preload
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. Da der Installer auch die notwendigen Runlevel-Skripte anlegt, lädt der Daemon auch direkt beim Booten mit. Anders als Readahead beschleunigt Preload lediglich den Start von Programmen, nicht aber den Boot-Prozess. Ein Daemon prüft dazu 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: Starten Sie eine Applikation kürzer als 20 Sekunden außerhalb des Überwachungszyklus, nimmt Preload sie nicht wahr. Wie die meisten Linux-Daemons verfügt auch Preload über eine Konfigurationsdatei, in der Sie diesen und andere Werte anpassen. Sie finden sie unter /etc/preload.conf (Abbildung 1).

/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 1: 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. Die voreingestellten Werte sollten Sie jedoch nur ändern, falls es mit diesen zu Problemen kommt. Als wichtigste Parameter finden sich in der preload.conf die Einstellungen für den maximal nutzbaren Speicher. Zwar steht im entsprechenden Abschnitt eine Formel, aus der sich dieser berechnen soll, 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 – tatsächlich nutzt es jedoch lediglich zwischen 150 und 200 MByte. Am effektivsten begrenzen Sie den maximal verfügbaren Speicher mit dem Prozentwert neben 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 in der Konsole als Root tail -f /var/log/preload.log. Sie sehen dann in Echtzeit, wieviel Speicher Reload gerade belegt, wie viel es reserviert, und wie viele Dateien es zwischenspeichert (Abbildung 2). 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 2: Die Datei/var/log/preload.log zeigt Ihnen stets den aktuellen Status des Caching-Daemons.Anders als Readahead ist Preload ein relativ schlauer Dienst: Es puffert nicht einfach stur aufgerufene Programme, sondern beobachtet auch, wie oft Sie diese starten. Mit einer Halbwertszeit von einer Woche sinken Applikationen, die nicht gestartet wurden, in der Prioritätenliste. Damit vermeidet Preload, unnötig Speicher mit Applikationen zu belegen, die Sie selten oder nie mehr nutzen.
OpenSuse verwendet übrigens ebenfalls einen Service namens Preload, dabei handelt es sich jedoch um ein eigenes Projekt (siehe Kasten “Preload bei OpenSuse”).
Preload bei OpenSuse
Auch OpenSuse bringt einen bereits nach der Installation aktivierten Dienst namens Preload [3] mit. Der hat jedoch nichts mit dem hier vorgestellten Projekt gemein, sondern ähnelt in seiner Arbeitsweise eher Readahead: Er hält wie dieses einige Skripte vor, allerdings im Verzeichnis /etc/preload.d/, die beim Booten und Starten von KDE Applikationen in den Hauptspeicher laden. Anders als Readahead generiert das OpenSuse-Preload aber für jede protokollierte Anwendung ein eigenes Skript, das diese beim Starten in den Hauptspeicher lädt. Derzeit fehlt für das Preload von OpenSuse eine halbwegs brauchbare Gebrauchsanweisung, die es dem Nutzer ohne umfangreiche Netzrecherchen ermöglicht, es an die eigenen Bedürfnisse anzupassen. Einen Hinweis, wie Sie Programmstarts damit nachverfolgen, liefert eine Seite bei OpenSuse.org [4].
Tempo, Tempo
Wirt testeten das Startverhalten von fünf relativ großen und häufig genutzten Anwendungen wie Firefox oder Gimp – zunächst ohne Precaching, danach mit Preload und Readahead. Bei allen Tests zeigte sich ein eklatanter Unterschied zwischen den Programmstarts mit und ohne Precache: Einige Programme starteten beinahe dreimal schneller als ohne Hilfsmittel (Abbildung 3). Zwar hatte Preload in der Geschwindigkeit stets die Nase vorne; die Unterschiede zu Readahead fielen aber so gering aus, dass sie in der täglichen Arbeit praktisch keine Rolle spielen.

Abbildung 3: Alle getesteten Programme starteten sowohl mit Readahead als auch mit Preload signifikant schneller als ohne Hilfsmittel. Die Bootzeit verlängerte sich durch das Vorladen um lediglich fünf Sekunden.
Die Befürchtungen, das Vorladen der Programme könne sich negativ auf die Startzeit auswirken, bestätigten sich nicht: Lediglich knapp fünf Sekunden Differenz konnten wir im Test zwischen den Systemstarts mit und ohne Preload ermitteln. Das entspricht bei 40 Sekunden Bootzeit einer prozentualen Verlängerung von etwa 10 Prozent – angesichts der Vorteile, die Sie sich damit erkaufen, ein durchaus verschmerzbarer Nachteil.
Möchten Sie die Tests zu Hause reproduzieren, löschen Sie als ersten Schritt den Page-Cache mit dem Aufruf von sync; echo 3 > /proc/sys/vm/drop_caches als Benutzer Root. Vergewissern Sie sich, dass keinerlei Preload-Programme laufen, und messen Sie die Startzeit, welche die Applikation vom Aufruf bis zum vollständigen Aufbau benötigt. Wichtig ist, nach jedem Test den Page Cache aufs neue zu löschen, da ansonsten Programmfragmente und geladene Bibliotheken das Ergebnis verfälschen können.
Pro und Kontra
Der größte Vorteil von Preload gegenüber Readahead liegt klar auf der Hand: Nach der Installation müssen Sie sich um nichts mehr kümmern. Der Daemon protokolliert alle Programmstarts automatisch und ordnet den Dateien je nach Häufigkeit der Zugriffe Prioritäten zu.
Ein weiterer Pluspunkt des Programms besteht in der Möglichkeit, es über die Steuerdatei /etc/preload.conf relativ fein an die eigenen Bedürfnisse anzupassen –eine Fähigkeit, die Readahead gänzlich fehlt. Allerdings wartet auch dieses Programm seinerseits mit einigen Vorzügen auf. So ermöglicht Readahead, den Start einzelner Programme oder Programmgruppen zu protokollieren, und diese bei Bedarf gezielt in den Page-Cache zu laden.
Auch ein Mischbetrieb von Readahead und Preload ist denkbar, dann allerdings mit verteilten Rollen: Während ersteres die Boot-Beschleunigung übernimmt, kümmert sich letzteres um das Vorladen und Protokollieren von Anwendungen. Jedoch sollten Sie dann darauf achten, dass sich die Programme dabei nicht gegenseitig in die Quere kommen und sich unter Umständen ausbremsen. Deaktivieren Sie deswegen den desktopbasierten Teil von Readahead und benennen Sie die Datei /etc/readahead/desktop um, damit die darin enthaltenen Programme nicht ein zweites Mal geladen werden.
[1] Readahead: http://research.iat.sfu.ca/custom-software/readahead-list/
[2] Preload: http://sourceforge.net/projects/preload
[3] OpenSuse-Preload: http://tinyurl.com/lu-os-preload
[4] Programmstarts mit OpenSuses Preload aufzeichnen: http://en.opensuse.org/Preloading_Thunderbird






preload gefällt mir sehr gut..
ich habe es Ihrem Artikel im Einsatz… und muss sagen das es sehr gut funktioniert.
Die Konfiguration muss man sich aber erkämpfen..
guter Artikel !