Kernel-Bootzeit verringern (aktuell reichlich 9 Sekunden)

  • Moin moin,

    also ich hab hier ne microSDHC class 10 und bekomme trotzdem beim Kernel eine Bootzeit von knapp über 9 Sekunden. System ist ein RPi 2 B+.

    Hat da jemand Ideen wie ich Bootzeit einsparen kann? Ich benutze schon eine initrd und schaue gerade daß ich die Ausgaben weitgehend stummschalte um weitere Millisekunden einzusparen. Aber das ist so weit von den 5 Sekunden entfernt die einige behaupten erreicht zu haben, daß ich gerade ein paar Zweifel habe ob diese Leute gemessen haben oder nur geschätzt. Im Anhang findet ihr einmal die Ausgabe von systemd-analyze plot und einmal den Plot bei aktiviertem systemd-bootchart. Daß systemd-bootchart selbst langsam ist, ist hier nicht das Problem, denn das ist ja nur dazu drin um mir Details über den Bootvorgang zu verraten und wird im Produktivbetrieb herausgenommen.

    Ziel ist es, daß ich im Produktivbetrieb den RPi so hochfahre, daß er komplett von der initrd läuft und allenfalls das Root-Dateisystem unter einem Overlay Nur-Lesen gemountet wird.

    Die Abhängigkeiten der Systemd-Units habe ich im Griff. Es geht also tatsächlich ausschließlich um die für den Kernel benötigte Zeit.

  • Kernel-Bootzeit verringern (aktuell reichlich 9 Sekunden)? Schau mal ob du hier fündig wirst!

  • Allein durch das vermindern der Ausgabe habe ich jetzt eine reichliche Sekunde der Kernelbootzeit eingespart. Allerdings sind mit knappe 8 Sekunden immernoch zu lang. Abgesehen davon paßt die Zahl so halt nicht zu den 5 Sekunden von denen manche RPi2-Benutzer berichtet hatten.

    Wenn ihr schnell hilfreiche Antworten wollt, lest bitte diesen Artikel (Fehlerberichte - wie Sie Softwarefehler melden sollten) und beherzigt die darin enthaltenen Ratschläge. Herzlichen Dank!

  • Hallo Assarbad,

    als ich 2014 meine Kernel-Experimentierphase hatte (abends im Hotel bei einem ganz lausigen Projekt), habe ich immer einen Zyklus eingeplant, bei dem ich über den Menü-Konfigurator verschiedenes entfernt habe, um die Auswirkung der Abwesenheit von dieversen Diensten / Treibern / Linux-Kommandos etc. festzustellen.

    Die Bootzeit hängt im wesentlichen von dem ab, was alles im Menü-Konfigurator ausgewählt wird und beim Booten zusammengesucht werden muss.

    Ich weiß ja nicht, was Du mit Deinen Threads als Fernziel verfolgst. Aber wenn es Dir rein um Minimierung der Bootzeit geht, um eine sonstwie geartete Anwendung möglich frühzeitig ablaufen zu lassen, wie wäre es dann mit BareMetal? Da startet Deine Anwendung dann quasi sofort - weil sie von dem ganzen Ballast befreit ist, den ein Betriebssystem ausmacht. Ist dann aber auch mit beträchtlichem Aufwand verbunden, weil Du alles in Deinem Programm implementieren musst.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Moin Andreas,

    Danke erst einmal für die Antwort.

    Die Bootzeit hängt im wesentlichen von dem ab, was alles im Menü-Konfigurator ausgewählt wird und beim Booten zusammengesucht werden muss.

    Also ich benutze natürlich nicht das Menü, sondern einfach eine angepaßte Konfiguration. Ich bin ein kleiner Automatisierungsperfektionist, weshalb ich auch rpi-config nicht mag (abgesehen davon, daß es viele der vorhandenen Optionen nicht einmal unterstützt).

    Ich weiß ja nicht, was Du mit Deinen Threads als Fernziel verfolgst. Aber wenn es Dir rein um Minimierung der Bootzeit geht, um eine sonstwie geartete Anwendung möglich frühzeitig ablaufen zu lassen, wie wäre es dann mit BareMetal? Da startet Deine Anwendung dann quasi sofort - weil sie von dem ganzen Ballast befreit ist, den ein Betriebssystem ausmacht. Ist dann aber auch mit beträchtlichem Aufwand verbunden, weil Du alles in Deinem Programm implementieren musst.

    Nee nee, wenn ich bare metal wollte, würde ich nicht einen RPi einsetzen sondern - für diese Aufgabe - einen Arduino mit entsprechenden Komponenten. Es geht mir aber gerade um die Verwendung eines generischen Betriebssystems, da ich Software wie mpd nicht von Grund auf neu schreiben wollen würde.

    Also nichts für ungut, aber für mich kommt bare metal nicht infrage. Es geht noch immer um die Jukebox für meine Tochter.

    Allerdings kann ich jetzt schon kleine Erfolge vermelden.

    Vor meinen Änderungen:

    Code
    Startup finished in 9.102s (kernel) + 6.243s (userspace) = 15.345s

    Nach meinen Änderungen:

    Code
    Startup finished in 2.733s (kernel) + 4.185s (userspace) = 6.919s

    Korrekt, mit wenigen gezielten Eingriffen ließ sich die Bootzeit deutlich verringern. Am meisten scheint mir der Kernelparameter fastboot gebracht zu haben.

    Hier die Änderungen bis jetzt - alles in cmdline.txt - vor dem init= habe ich eingefügt: quiet loglevel=3 rd.systemd.show_status=auto rd.udev.log-priority=3 fastboot noswap ro. Ansonsten habe ich noch systemd-bootchart aktiviert, aber das ist ja nur dazu da um mir detaillierte Einblicke zu geben und fliegt im Produktivbetrieb später raus.

    Knappe 7 Sekunden gesamte Bootzeit kann sich sehen lassen. Kernel allein mit 2,7 s ist auch nicht so schlecht. Aber jetzt sehe ich schon, daß ich mich auf die Abhängigkeiten der Systemd-Units stürzen muß um hier noch mehr zu bewirken. Das Optimierungspotential für den Kernel mag noch nicht vollständig ausgeschöpft sein, ist aber nunmehr deutlich kleiner als jenes bei den Units.

    Da meine Unit nicht von vornherein verfügbares Netzwerk braucht, kann ich wohl mit einer Startzeit von ca. 4 Sekunden - nach aktuellem Stand - rechnen.

    Falls aber doch noch jemand irgendwelche Tips und Tricks hat, freue ich mich weiterhin sehr über Hinweise.

  • Eine Anmerkung sei noch erlaubt. Die obigen Anpassungen der Kernelparameter bedeuten nicht, daß man beim Systemstart einen Blindflug macht. Stattdessen werden nur Erfolgsmeldungen stummgeschaltet. Außerdem findet sich in den eigentlich Logs auch weiterhin die gewohnte Menge an Informationen.

    Quellen, wie schon erwähnt:

    https://wiki.archlinux.org/index.php/Silent_boot

    https://wiki.archlinux.org/index.php/Impr…ce/Boot_process

    https://hallard.me/raspberry-pi-read-only/ (hier kamen fastboot noswap ro her)

    Dem Kernel ist ja egal welche Distro ich verwende, was ich auch schamlos auszunutzen gedenke ;)

    Wenn ihr schnell hilfreiche Antworten wollt, lest bitte diesen Artikel (Fehlerberichte - wie Sie Softwarefehler melden sollten) und beherzigt die darin enthaltenen Ratschläge. Herzlichen Dank!

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!