Programmstarts durch Vorladen beschleunigen

Aus LinuxUser 05/2009

Programmstarts durch Vorladen beschleunigen

© Fotolia, Andrea Danti

Vormontage

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).

Abbildung 1: In der Steuerdatei <code>/etc/preload.conf</code> legen Sie unter anderem fest, wie viel Speicher Preload im Höchstfall für sich in Anspruch nehmen darf.

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.

Abbildung 2: Die Datei <code>/var/log/preload.log</code> zeigt Ihnen stets den aktuellen Status des Caching-Daemons.

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”).

LinuxUser 05/2009 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

1 Kommentar
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Holger M.
15 Jahre her

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 !

Nach oben