Dez 31
Bootzeit verkürzen mit Hilfe von Bootchart und readahead
Wer kennt das nicht:
- Rechner einschalten
- im Bootmenü das OS auswählen
- das OS, in meinem Fall Linux (Ubtuntu 8.04 LTS), starten
- Kaffee holen / auf Toilette gehen / Glotze anschalten und auf den Login warten
Da es mich aber mittlerweile etwas genervt hat, das die Boot-Zeit meines Systems mittlerweile bei knapp 1 Minute und 10 Sekunden liegt, was bei Bereitschaftsdiensten Nachts um 4 ganz schön lange sein kann, habe ich mich mal nach einem Visualisierungstool für den Linux-Boot-Prozess umgesehen.
Nach ein paar googlern bin ich dann auf bootchart gestoßen. Dieses Tool ermöglicht es Grafiken des Boot-Prozesses anzufertigen, in dem ausgewiesen wird, wann und zu welcher Zeit, welcher Prozess mit wieviel IO- und CPU-Last zu Gange ist.
Nach dem installieren und dem neuerstellen des initramfs (geschieht bei rpm’s und deb’s automatisch) kann man das System zum ersten Test rebooten. Nach erfolgreicher Tat solltet Ihr unter /var/bootchart/bootchart-$date-x.png eine Grafik haben in der Ihr die Reihendfolge und Zeiten ablesen könnt. Das ganze sieht dann ungefähr so aus.
Nach dem abschalten (bei mir via update-rc.d -f $initscript remove) der für mich nicht benötigten Dienste (cupsys - hab kein Drucker, bluetooth - kann manuel gestartet werden wenn benötigt, vmware - manueller start, openvpn - manueller start etc. pp.) veringerte sich die Bootzeit auf etwa 44 Sekunden.
Immerin knapp 25 Sekunden schneller als vorher. Abder da geht noch mehr. Nachdem ich dann wieder den Bootchart analysierte, fiel mir ein Init-Script Names readahead auf. Wieder kurz gegoogelt und siehe da, readahead wird als eines der ersten Scripte im runlevel S (also bei jedem Start) aufgerufen und liest Dateien (binaries, configs, libs etc. pp.) aus einer Datei (/etc/readahead/boot) ein, sodass diese sich im Filesystem-Cache aka RAM befinden. Der Vorteil dieser Methode ist, dass Linux auf diese schon einmal eingelesenen Daten, ein paar 1000 mal schneller zugreifen kann (etwa 100 ns) als von der Festplatte (etwa 5 ms).
Um readahead an die eigenen Boot-Bedürfnisse optimal anzupassen, kann man nach dem einbinden des Init-Scripts (bei Ubuntu Standard) beim reboot auf der Kernel-Kommandozeile (booten, Grub Auswahlmenü e drücken, kernel Zeile auswählen, wieder e drücken) das Schlüsselwort profile hinzufügen. Hat man dies getan drückt man b und der Boot-Vorgang beginnt. Hat alles geklappt kommt nach etwa 5 Sekunden eine Auschrift ähnlich “Readahead starts profiling boot process…“. Nach dem booten sollte es dann unter /etc/readahead/boot eine aktuelle Version der Konfiguration für readahead geben. Dies sollte man nach jedem Kernel-Update wiederholen, da dann ja wieder andere Treiber usw. geladen werden.
Nach diesem Prozedere habe ich es geschaft meine Boot-Zeit von etwa 1 Minute und 10 Sekunden auf etwa 33 Sekunden hearab zu setzen. Meiner Meinung nach ein ganz schöner Unterschied.
Jetzt seid Ihr dran. Vorher-Nacher vergleiche erwünscht.
MfG
Maddin