Bootzeit stoppen mit Bootchart

Aus LinuxUser 05/2009

Bootzeit stoppen mit Bootchart

© Kirill Zdorov, Fotolia

Schnellboot

Auf immer kleineren Geräten soll Linux bald laufen – und muss daher auch immer schneller starten. Bootchart verrät, wo das System noch trödelt.

Der Trend zu mobilen Geräten rückte in letzter Zeit ein heikles Thema in den Vordergrund: die Bootzeiten. Wer sein Handy einschaltet, will keine halbe Stunde warten, bis er telefonieren kann. Auch Desktop-Nutzer haben nicht unendlich viel Geduld – das wissen die Entwickler und rücken den Bootzeiten mit diversen Werkzeugen auf den Pelz, optimieren Dienste und drehen an den Kernel-Schrauben, um die Startzeit von Linux-Systemen so weit wie möglich zu verkürzen. Und es lohnt sich: Die Distribution Moblin2 bootet etwa von einer SSD-Festplatte in nur 5 Sekunden [1], die Bootzeit für ein normales Debian auf einem Asus EeePC 901 lässt sich auf immerhin 14 Sekunden reduzieren.

Die Analyse des Bootvorgangs übernimmt dabei praktischerweise ein Werkzeug namens Bootchart [3]. Es tut genau das, was der Name verspricht: Es protokolliert äußerst penibel die Startzeiten der einzelnen Dienste und Prozesse auf dem Rechner mit und verwandelt die gewonnenen Daten in ein längliches Gantt-Diagramm im EPS-, PNG- oder im SVG-Format.

Auf Basis dieser Grafik können Sie dann mit dem Schraubenschlüssel ansetzen und durch allerlei Tricks die Bootzeit verkürzen. Bei Bootchart handelt es sich um ein Profitool: Die Entwickler von Amazons E-Book-Reader Kindle benutzten es ebenso wie die Entwickler des Ubuntu-Projekts. Sie installieren es unter Ubuntu 8.10 und OpenSuse 11 bequem über den Paketmanager. Unter OpenSuse müssen Sie zusätzlich die Option init=/sbin/bootchartd als Kernel-Parameter im Bootmenü von Grub angeben (siehe Kasten “Bootchart für OpenSuse 11”) .

Bootchart besteht zunächst aus einem Shellskript, das vor dem Init-Prozess startet, diesen dann aufruft und mit dem Aufzeichnen der Daten beginnt. Dabei sammelt es Informationen, die im Dateisystems /proc anfallen, konkret in /proc/stat, /proc/diskstats und /proc/*/stat. Das Sternchen steht dabei stellvertretend für sämtliche Prozesse, die /proc einbindet. Die Daten legt Bootchart zunächst über das virtuelle Dateisystem Tmpfs im Arbeitsspeicher ab. Bootchart beendet die Datensammlung, sobald es auf die Namen einiger typischer Prozesse trifft, die – wie gdmgreeter und kdm_greet – erst beim Erreichen des Anmeldebildschirms auftauchen. Die fertige Kollektion verfrachtet es dann vom RAM auf die Festplatte in die Datei /var/log/bootchart.tgz.

Damit der Anwender am Ende nicht ohne Löffel vor einer Schüssel voller Zahlen sitzt, wandelt eine Java-Anwendung die Daten unter Ubuntu automatisch in eine PNG-Grafik um, die im Verzeichnis /var/log/bootchart landet. Unter OpenSuse 11 geben Sie dazu auf der Konsole noch

$ sudo bootchart --format png

ein. Die aus dem TGZ-Archiv generierte Grafik legt die Distribution dann in dem Verzeichnis ab, aus dem heraus Sie den Befehl aufrufen.

Da beim Booten mitunter hunderte Prozesse um die Wette rennen, gerät die Grafik gelegentlich etwas unübersichtlich. Dagegen steuert Bootchart mit Tree-Pruning, was sich auf Deutsch in etwa mit dem Stutzen von Ästen übersetzen lässt: Die Technik blendet untätige und sehr kurzlebiger Prozesse aus und fasst ähnliche Prozesse unter einem Hut zusammen.

Bootchart für OpenSuse 11

Es gibt zwei Wege, um den zusätzlichen Boot-Parameter anzugeben: Sie tragen ihn entweder dauerhaft in die Datei /boot/grub/menu.lst ein, wo Sie ihn an die mit kernel beginnende Zeile des Abschnitts anhängen, der Ihre aktuelle Distribution betrifft. Alternativ ändern Sie die entsprechende Zeile temporär direkt im Bootmenü von Grub. Dazu bewegen Sie den Cursor mit Hilfe der Pfeiltasten zum richtigen Booteintrag und drücken [E] (für “edit”), um ihn zu bearbeiten. Dann hängen Sie den Eintrag init=/sbin/bootchartd an das Ende der Zeile, die mit kernel beginnt.

Da Ihnen im Bootmenü gewöhnlich nur eine englischsprachige Tastatur zur Verfügung steht, erreichen Sie das Zeichen = gewöhnlich über die Taste [`] und den Schrägstrich / über [-]. Mittels [Eingabe] bestätigen Sie die Änderung, über [B] booten Sie den Rechner über die modifizierte Zeile.

Kernel-Stoppuhr Bootgraph

Bevor Sie sich nun an die Analyse machen, soll Bootgraph noch zu seinem Auftritt kommen: Die Software kommt von den Kernel-Entwicklern selbst und gehört ab Version 2.6.28 zu den Kernel-eigenen Skripten. Sie zeigt – unterstützt durch ein einfaches Perl-Skript – was der Linux-Kernel während der Bootphase eigentlich konkret tut. Mitunter gibt es hier auch noch Möglichkeiten zur Optimierung, im Test lag der protokollierte Zeitraum aber gerade einmal bei etwa zwei Sekunden.

Um Bootgraph zu nutzen, stellen Sie über uname -r zunächst fest, ob Sie einen Kernel ab Version 2.6.28 verwenden. Ist das der Fall, starten Sie Ihr System neu und ergänzen – wie im Kasten “Bootchart für OpenSuse 11” beschrieben – den Bootmanager Grub um den zusätzlichen Kernel-Parameter initcall_debug.

Dann booten Sie den Rechner mit der aktivierten Option neu und erzeugen mit einem einfachen Befehl eine Vektorgrafik:

$ dmesg | perl /usr/src/kernel/scripts/bootgraph.pl > /home/User/bootgraph.svg

Das Kommando zerlegt die Ausgabe von dmesg mit Hilfe eines Perl-Skripts und legt das Ergebnis – eine Vektorgrafik im SVG-Format – im Home-Verzeichnis des Anwenders User ab. Die Grafik (Abbildung 1) schauen Sie sich wahlweise im Browser Firefox an – dann allerdings im Querformat – oder Sie rufen diese über ein Vektorgrafikprogramm wie Inkscape auf und drehen sie um 90 Grad.

Abbildung 1: Der Kernel hatte im Test eher einen minimalen Einfluss auf die Boot-Zeiten. Das zeigte das Skript Bootgraph, das es seit Kernel-Version 2.6.28 gibt.

Abbildung 1: Der Kernel hatte im Test eher einen minimalen Einfluss auf die Boot-Zeiten. Das zeigte das Skript Bootgraph, das es seit Kernel-Version 2.6.28 gibt.

Schauen und staunen

Was bedeuten nun die verschiedenen Elemente des von Bootchart erzeugten Diagramms (Abbildung 2)? Ganz oben listet die Grafik eine Reihe statistischer Angaben auf. Denen entnehmen Sie das Datum der Messung, die eingesetzte Linux-Distribution und die verwendete Kernel-Version. Darunter finden Sie Details zur CPU und zu den genutzten Kernel-Optionen. Neben time erscheint die beim Booten verstrichene Zeit.

Abbildung 2: Vor dem Optimieren: Bootchart produziert eine Grafik, die zeigt, wofür der Bootprozess seine Zeit verwendet.

Abbildung 2: Vor dem Optimieren: Bootchart produziert eine Grafik, die zeigt, wofür der Bootprozess seine Zeit verwendet.

Es folgen zwei schlanke Diagramme. Diese zeigen die Auslastung der CPU während der Bootzeit sowie die Ein-/Ausgabe-Aktivitäten. Täler weisen auf untätige Prozessoren hin. Da das Diagramm die X-Achse mit der Haupttabelle teilt, erkennen Sie auch gleich, welche Prozesse die CPU nicht auslasten und so wertvolle Bootzeit verschenken. Das unten anschließende Diagramm sieht ähnlich aus, konzentriert sich aber auf die Festplatte, deren Datendurchsatz und Betriebsdauer es zeigt.

Darunter beginnt der Hauptteil der Bootchart-Grafik: Er besteht aus einem sehr langen Diagramm, bei dem die X-Achse die verflossenen Sekunden während des Bootvorgangs zählt. Zur besseren Orientierung wandert nach jeder Sekunde eine dünne vertikale Linie zum Fuß des Diagramms.

Zugleich laufen beschriftete Balken von links nach rechts. Jeder einzelne repräsentiert dabei einen bestimmten Prozess während des Bootvorgangs. Während einige der Balken nach ein paar Sekunden wieder enden, ziehen andere sich bis zum Ende durch: Diese Prozesse laufen auch nach Abschluss des Bootvorgangs weiter; dazu gehören Dienste wie CUPS oder der ACPI-Daemon. Das erlaubt, anhand der Querbalken und der vertikalen Zeitlinien abzulesen, wann ein Prozess beginnt und wann er endet. Kindprozesse verbindet die Grafik mit Hilfe gestrichelter Linien mit dem Elternprozess.

Lizenz zum Töten

Beim Optimieren der Bootzeiten dürften Sie auf der vertikalen Ebene vor allem die zeitlichen Abstände zwischen den Starts der verschiedenen Prozesse interessieren. Wie lange dauert es, bis ein Prozess den Start des nächsten erlaubt? Gibt es Prozesse, die den Bootprozess besonders lange blockieren? Gibt es Möglichkeiten, Bootprozesse besser zu parallelisieren? Das ist beim Optimieren sicherlich der schwierigere Teil.

Auf der horizontalen Ebene prüfen Sie, ob Sie wirklich alle laufenden Prozesse brauchen. Dazu müssen Sie diese zunächst korrekt identifizieren und ihre Funktion beurteilen. Erst wenn Sie sicher sind, dass Ihr System die Funktion nicht zum Überleben braucht, deinstallieren Sie die zugehörigen Programme oder verschieben die Init-Skripte (etwa hwclock.sh) in ein anderes Verzeichnis. Diese Optimierungen erfordern keinen großen Aufwand und verkürzten die Bootzeit im Test auf die Schnelle immerhin von 33 auf 26 Sekunden (Abbildung 3) – und das ganz ohne massive Systemeingriffe.

Abbildung 3: Durch das gezielte Deinstallieren von Programmen verkürzen Sie die Bootzeit. Im Test kam eine Ersparnis von sieben Sekunden zusammen.

Abbildung 3: Durch das gezielte Deinstallieren von Programmen verkürzen Sie die Bootzeit. Im Test kam eine Ersparnis von sieben Sekunden zusammen.

Ansonsten gibt es aber kein Universalrezept, um das Booten zu beschleunigen. Gerade bei aktuellen Distributionen setzen die Entwickler Bootchart bereits im Vorfeld ein und optimieren die Bootzeiten der Distributionen schon bis zu einem gewissen Grad.

Auf dem eigenen Rechner gibt es dann aber doch Möglichkeiten, Zeit zu sparen. Im Test haben wir kurzerhand Samba, Tor/Privoxy und Bluetooth deinstalliert und die Init-Datei hwclock.sh verschoben, was die Bootzeit verkürzte. Falls Sie nur gelegentlich drucken, müssen Sie auch CUPS nicht ständig starten und könnten den CUPS-Daemon standardmäßig deaktivieren beziehungsweise das Startskript aus dem Ordner /etc/init.d/ verschieben. Dasselbe gilt auch für andere Dienste, die Sie nur gelegentlich brauchen – denken Sie aber daran, Sicherheitskopien anzulegen.

Neben dem Deaktivieren von automatisch geladenen Diensten gibt es noch weit kompliziertere Möglichkeiten, die Bootzeit zu raffen. Sie betreffen unter anderem den Kernel. So können Sie die Module für Ihre Hardware fest einkompilieren und sich gar die Initrd und Initramfs sparen. Weniger spektakulär ist der hier schon erwähnte Verzicht auf den Einsatz von Hwclock, das die Systemuhr stellt. Den Job könnte auch Cron regelmäßig erledigen. Mit Hilfe der hier im Heft vorgestellten Readahead-Funktionen sparen Sie zusätzlich etwas Zeit.

Ihre Hardware optimieren Sie, indem Sie etwa die CPUs mit der höchsten Frequenz booten lassen (falls diese das nicht ohnehin automatisch tun). Zeit können Sie auch beim Udev-Daemon schinden: Dieser versucht bei jedem Start, alle Geräte zu erkennen und einzuhängen. Die wiederholte Sucherei sparen Sie ein, indem Sie Udev mit Hilfe eines Skripts von Phil Endecott (der Debian auf 14 Sekunden optimierte) dazu überreden, einmal erkannte Geräte beim nächsten Booten automatisch in /dev einzuhängen. Allerdings verlieren Sie durch solche Schritte die Flexibilität, eben mal neue Hardware an den Rechner zu stöpseln.

Fazit

Bootchart ist ein Analyse-Tool: Es gibt keine Tipps, wie Sie Ihren Systemstart konkret beschleunigen, sondern zeigt Ihnen nur, was ihn verlangsamt. Die richtigen Schlüsse müssen Sie selbst ziehen, um dann durch geschicktes Optimieren Zeitgewinne zu erzielen. Dabei besteht allerdings immer die Gefahr, dass Sie Ihr System kaputtoptimieren und bei der Reparatur die gewonnene Zeit wieder verlieren. Sie sollten also – wie bei jeder ernsthaften Tätigkeit – wissen, was Sie tun.

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.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben