Aus LinuxUser 05/2009

Systemstart beschleunigen mit Readahead

© sxc.hu

Fast and furios

Moderne Linux-Distributionen neigen beim Start zur Trägheit. Kleine Helferlein wie Readahead bringen sie wieder auf Trab.

Moderne Betriebssysteme schreiben sich eine möglichst allumfassende Anwenderfreundlichkeit auf die Fahnen. Der Nutzer soll nach Möglichkeit gar nicht mehr mit widerspenstiger Hardware und daraus resultierenden Treiber-Problemen in Berührung kommen. Zudem soll direkt nach dem Systemstart eine komplett vorkonfigurierte Arbeitsoberfläche zur Verfügung stehen. Allerdings hat dieses Ansinnen auch einen gravierenden Nachteil: 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 wertvolle Ressourcen fressen.

Proprietären Betriebssysteme wie Windows Vista versuchen hier mit Hardware-Gimmicks wie „Readyboost“ nachzubessern. Für Linux stehen einige freie Softwarepakete zur Verfügung, die den Bootvorgang ohne den Kauf kostspieliger Flashspeicher spürbar beschleunigen. Das kleine Helferlein Readahead [1] ist eines dieser Tools, erfordert aber einige Vorbereitungen. Vor allem Ubuntu, das hier als Beispiel dient, dankt das manuelle Feintuning aber mit einer deutlich schnelleren Bootzeit. Damit das Tool möglichst effizient arbeitet, gilt es jedoch, zunächst die Systemkonfiguration genau zu analysieren und überflüssigen Ballast zu entfernen.

Der SysV-Init-Prozess

Um Ansatzpunkte für eine Beschleunigung des Bootvorgangs zu finden, sollten Sie sich zunächst mit dem Startvorgang von Linux vertraut machen. Nach dem Einschalten des Rechners und dem anschließenden POST (Power On Self Test) des BIOS liest der Bootmanager (Grub oder Lilo) den Bootsektor der ersten Festplatte aus. Findet er die gewünschte Linux-Partition, so lädt er zunächst den Kernel und anschließend – sofern vorhanden – die initiale Ramdisk. Der Kernel identifiziert dabei bereits die Hardware und lädt die passenden Module; fehlen welche, lädt er die benötigten Treiber aus der initialen Ramdisk nach.

Im Anschluss mountet er die Root-Partition und führt das Programm /sbin/init aus. Dieses aktiviert zunächst alle im Verzeichnis /etc/rcS.d (Startup) aufgeführten Skripte und verzweigt danach in das vorgegebene Runlevel-Directory. Aus diesem heraus starten weitere Prozesse, wovon einige aber bald wieder stoppen, da sie nur temporär gebraucht werden oder abhängige Daemons fehlen.

Diesen SysV-Init- oder Init-V genannten Prozess nutzen in ähnlicher Form die meisten Unix-artigen Betriebssysteme. Neben dem Vorteil höchster Stabilität hat diese Technik jedoch den gravierenden Nachteil des sequenziellen Ladens von Prozessen: Ein Prozess startet erst dann, wenn der von ihm abhängige Prozess initialisiert wurde. Dadurch ergeben sich für den Prozessor Warteschleifen, die so genannten Idle-Loops. Deswegen planen die Entwickler von Ubuntu, den SysV-Init-Prozess durch einen neuen Bootprozess namens Upstart abzulösen, haben ihn bislang allerdings noch nicht konsequent in das Betriebssystem implementiert.

Ballast abwerfen

Um herauszufinden, welche Dienste auf dem Rechner laufen, bietet Ubuntu unter dem Menüpunkt System | Systemverwaltung | Dienste eine Übersicht. Sie lässt zwar bereist erste Rückschlüsse auf unnötigen Ballast zu, zeigt jedoch längst nicht alle geladenen Dienste an. Als wesentlich auskunftsfreudiger erweist sich der Boot-Up-Manager, den Sie in den Repositories von Ubuntu finden. Sie installieren ihn mit dem Aufruf sudo 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 Boot-Up-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 sie in der Reihenfolge früher oder später starten. Nach dem Deaktivieren überflüssiger Dienste übernehmen Sie die Änderungen durch das Anklicken des Buttons Anwenden unten links im Programmfenster. Der Boot-Up-Manager entfernt diese dann aus den entsprechenden Runlevel-Verzeichnissen (Abbildung 1).

Abbildung 1: Über den Boot-Up-Manager legen Sie fest, wann welche Dienste mit welcher Priorität starten.
Abbildung 1: Über den Boot-Up-Manager legen Sie fest, wann welche Dienste mit welcher Priorität starten.

Hellseher

In modernen PC erweisen sich die Festplatten als größter Flaschenhals und bremsen das gesamte System deutlich aus. So erscheint es nur logisch, nicht nur die für das Betriebssystem unentbehrlichen Dienste vorausschauend in den Page-Cache zu laden, sondern auch die Bewegung der verhältnismäßig langsamen Plattenmechanik zu reduzieren.

Genau das macht das im Kernel implementierte Readahead: Es beschleunigt mithilfe einer Optimierung die I/O-Zugriffe auf die Festplatte. Dazu nutzt das Tool als Grundlage die Steuerdateien boot und desktop aus dem Ordner /etc/readahead. Beim Hochfahren greift Readahead auf die Datei boot zu und lädt die darin aufgeführten Programme in den Page-Cache des Rechners, sodass diese anschließend erheblich schneller starten als direkt von der Festplatte.

Damit dieser Prozess möglichst effizient abläuft, benötigt das Programm eine stets aktuelle Version von boot. Um sie auf den letzten Stand zu bringen, öffnen Sie beim Start des Rechners im Bootmanager Grub den Editor-Modus ([E]). Im Menü wählen Sie mit den Pfeiltasten das gewünschte Betriebssystem aus und drücken erneut [E]. In der Editor-Übersicht sehen Sie zunächst alle Parameter, mit denen Grub das gewählte System startet. Wechseln Sie in die Zeile kernel, drücken Sie wiederum [E] und geben Sie am Ende der Zeile die Anweisung profile ein (Abbildung 2). Mit [Eingabe] kehren Sie zurück zum Übersichtsmodus von Grub. Mit [B] starten Sie das System mit den modifizierten Kernel-Optionen. Beachten Sie, dass diese ausschließlich für den nun folgenden Rechnerstart aktiv sind.

Abbildung 2: Um die Boot-Indizierung zu veranlassen, ergänzen Sie über den Grub-Editor die Kernelzeile um die Anweisung <code>profile</code>.
Abbildung 2: Um die Boot-Indizierung zu veranlassen, ergänzen Sie über den Grub-Editor die Kernelzeile um die Anweisung profile.

Der folgende Bootvorgang verläuft deutlich langsamer als üblich, da das durch den Parameter profile getriggerte Readahead den gesamten Bootvorgang protokolliert. Die aufgerufenen Dateien bringt das Programm anhand ihrer Position auf der Festplatte in der Datei boot in eine entsprechende Reihenfolge. Das gewährleistet später ein schnelleres Laden der Dateien in den Page-Cache, da diese nicht mehr wahllos, sondern gemäß ihrer Position auf der Festplatte angefordert werden. Dies reduziert die Bewegungen der Festplattenköpfe drastisch.

Die Anlage eines intelligenten Profils mithilfe von Readahead schont somit nicht nur die Mechanik Ihrer Festplatte, sondern beschleunigt potenziell das gesamte System. Die Resultate der vielversprechend und zukunftsweisend Technik können sich sehen lassen: Das Testsystem bootete etwa 15 Prozent schneller als zuvor und benötigte statt 45 nur noch 38 Sekunden.

LinuxUser 05/2009 KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland

Hinterlasse einen Kommentar

3 Kommentare auf "Systemstart beschleunigen mit Readahead"

  E-Mail Benachrichtigung  
Neuste Älteste Beste Bewertung
Benachrichtige mich zu:
Ich habe die Bootzeit ab Grub bis zum Login-Bildschirm gemessen. Kurz und bündig: Wenn ich beide Augen ganz fest zudrücke, habe ich maximal 1 Sekunde durch Readahead bzw Profile herausgeholt. Wobei ich glaube, dass es sich eher um eine Messungenauigkeit handelt. Also vor der „Optimierung“: 33 Sekunden, nachher 32 Sekunden. Das kann nun 3 Dinge aussagen: 1) Ubuntu 9.04 ist schon „voroptimiert“ (die kürzere Bootzeit gegenüber 8.10 wird auch überall erwähnt) 2) Meine Festplatte kann einfach nicht schneller (Samsung, 250GB) 3) Readahead bringt nur „gefühlt“ etwas. Aber da die Autoren dieses Beitrags Unterschiede gemessen haben, und überall die schnellere Bootzeit… Mehr »

Die Festplatte ist tatsächlich in den meisten Fällen die größte Bremse beim Booten. Das zeigen auch meine Tests mit Solid State Disks. Einen Artikel dazu stelle ich morgen noch online.

Interessanterweise ist bei meinen Tests Ubuntu 8.10 durch die SSD nicht schneller hochgefahren, OpenSuse und Moblin hingegen schon. Nicht vergessen darf man zudem, dass Ubuntu ja mit Upstart ein eigenes Bootsystem nutzt, nicht das traditionelle System V Init.

In dem Artikel steht aber, dass Ubuntu den Einsatz von readahead mit einer kürzeren Bootzeit belohnt.

Aber wie gesagt, kann natürlich an der Optimierung liegen, die Jaunty erhalten hat. Jedenfalls ist das Script „readahead“ standardmäßig installiert und aktiviert. Beschreibung laut BUM (BootUp Manager):

readahead: Beschleunigt Systemstart durch früheres Starten von Operationen

readahead-list is an updated and enhanced version of the original readahead utility.
.
It allows the user to specify a set of files to be read into the page cache
to accelerate first time loading of programs, typically during the boot
sequence.