Wie kann ich die Startzeit für Raspberry Pi verbessern?

27

Ich erstelle eine einbettbare Remote-Anwendung, die nicht dauerhaft eingeschaltet ist. Ich habe mit verschiedenen Betriebssystem-Distributionen herumgespielt und kann die Zeit zum Booten erheblich verkürzen, indem ich bessere SD-Karten mit höheren Lesegeschwindigkeiten verwende. Ich bin nicht auf eine bestimmte Distribution festgelegt, daher kann ich so viel wie nötig reduzieren, um eine minimale Linux-Distribution zu verwenden.

(Ich habe versucht, nach Benchmarks zu suchen, die die Leute verwendet haben, um die Startzeit zu verbessern, aber ich habe mit harten Zahlen nichts gefunden.)

Ich könnte auch build root verwenden (siehe auch YouTube-Video Raspberry Pi - Superschnelle Startzeit - Marshmallow Entertainment System ) ...

Layke
quelle
Sie sollten abstimmen, um diese Frage zu schließen. Die Benutzer werden dann zur ursprünglichen Frage weitergeleitet und fügen weitere Antworten hinzu. Da man noch nicht als beantwortet markiert wurde.
Piotr Kula
Ich denke nur, dass dieser viel Aktivität hat (die Ansichten sind offensichtlich nicht so hoch, einfach weil dieser weniger als einen Tag alt ist), mehr Stimmen und mehr Antworten, also dachte ich, es wäre besser, diesen zu verlassen nach oben und verschieben Sie dann möglicherweise Ihre Antwort hierher. Es ist wirklich eine Frage der Bequemlichkeit, denke ich. 1 Benutzer verschiebt seine Antwort gegenüber 3 Benutzern und verliert dadurch alle Stimmen, Konversationen und dergleichen. Gibt es einen Grund, warum wir den einen oder anderen Weg gehen sollten? Es macht mir nichts aus, ich denke nur, dass die anderen Personen, die geantwortet haben, sich möglicherweise nicht bewegen möchten, und daher verlieren wir Inhalte
RPiAwesomeness
@ppumkin Sieh dir diesen Meta.SE-Beitrag zum Schließen von Dupes an: Lösche keine guten Duplikate und diesen SE-Blog-Beitrag . Ich denke, sie stimmen mit meinem vorherigen Punkt überein. Es sei denn, das Duplikat ist eine Kopie des anderen oder eine schreckliche Qualität, und da dieses eine Menge Antworten / Aktivitäten enthält, sollten wir beide einfach offen lassen.
RPiAwesomeness
1
@ppumkin Gute Punkte, solange dieser nicht gelöscht wird. Ursprünglich habe ich Leave Open besprochen, aber ich denke, dies als Duplikat davon zu markieren, ist der richtige Weg. Das Einzige, woran ich denken kann, ist, dass ich auf dem markierten Original zumindest eine bessere Q / A haben möchte als auf dem Duplikat. Das ist hier definitiv nicht der Fall.
RPiAwesomeness
1
Ja, du hast recht. Hier gibt es weitere Antworten. Scheint mehr Aufmerksamkeit bekommen zu haben. Ich nehme an, wir müssen es den Moderatoren überlassen, zu entscheiden, wie sie besser wissen, was sie hier tun sollen. Sowieso. Gut gemacht mit der Zuteilung von Stimmen über Ihre Antwort :) Ich bin sicher, dass das OP Ihren Beitrag schätzt. +1
Piotr Kula

Antworten:

13

Wenn Sie Arch Linux mit den von Fred vorgeschlagenen Funktionen kombinieren, sollten Sie ein im Allgemeinen schnelles Boot-Betriebssystem erhalten.

Was die Startzeiten des Betriebssystems verlangsamt, ist

  1. Langsame Lese- / Schreibgeschwindigkeiten (E / A).

    So haben Sie eine schnellere SD - Karte wird helfen, eine Class 10 - Karte wird wesentlich schneller als eine Klasse 4 Karte . Ich habe falsch verstanden, wie SD-Karten-Klassen funktionierten, und das wurde in den Kommentaren ziemlich deutlich herausgestellt, meine schlechte. Tatsächlich ist eine Class 10-Karte für große Dateiübertragungen wie HD-Video und so weiter schneller als eine Class 4-Karte . Anscheinend funktioniert Klasse 4 auch mit kleineren Dateien. Wieder, meine schlechte, aber hey, wir alle lernen ab und zu.

  2. Eine verklemmte Init-Sequenz.

    Wenn Sie viele Softwareprogramme haben, die während der Startphase gestartet werden, wird die Startzeit langsamer. Mehr Software ab == Längere Startzeit.

    Wenn Sie also einen schnellen Start benötigen, schneiden Sie so viel Software wie möglich von der Initialisierungssequenz ab. Sie können ein einfaches Skript erstellen (oder ich bin mir sicher, dass es eines gibt), das die Software startet, nachdem die Hauptstartsequenz abgeschlossen ist, wodurch die Last ein bisschen mehr verteilt wird.

Das war's im Grunde. Arch Linux ist wahrscheinlich der richtige Weg, kombiniert mit den Funktionen, die Fred erwähnt hat, wie ich bereits sagte. Arch ist ein sehr minimales Betriebssystem und möglicherweise nicht das Beste für Anfänger. Wenn Sie jedoch Erfahrung mit Linux haben, sollten Sie es ausprobieren. Es ist nur ein bisschen Einrichten erforderlich, da die Installation auf ein Minimum beschränkt ist und das war's .

Hoffe, Ihr Projekt geht gut!

RPiAwesomeness
quelle
3
Die "Klasse" der SD-Karte ist ein sehr schlechter Indikator für die Leistung in einem eingebetteten System. Die "Klassen" -Bewertungen gelten für große sequenzielle Dateiübertragungen (wie bei einer Multi-Megapixel-Digitalkamera), nicht für kleine Dateien wie Startskripte. Class 4-Karten übertreffen regelmäßig die meisten Class 10-Karten bei 4k-Lese- und Schreibvorgängen um den Faktor 100 oder mehr. Es gibt Class-10-Karten mit gutem IOPS, aber diese Modelle sind rar gesät.
Ben Voigt
Ja, ich stimme @BenVoigt zu - als ich Klasse 4 benutzte, schienen kleine Schreibvorgänge und Aktualisierungen schnell zu sein, aber große Übertragungen auf Klasse 10 sind viel besser. Ich wünschte, ich könnte eine mit Batterie betriebene RAM-Karte für sofortige Leistung verwenden.
Piotr Kula
Es tut mir leid, das wusste ich nicht. Ich werde das sofort beheben. Ich hatte verstanden, dass die Geschwindigkeit umso höher ist, je höher die Klasse ist. Danke für den Hinweis, ich habe gerade etwas gelernt: D Danke auch für die positiven Stimmen :)
RPiAwesomeness
Ich frage mich, warum meine Antwort abgelehnt wurde. Ich habe nichts gegen den Verlust von Repräsentanten, ich möchte nur wissen, was die Ablehnung verdient, damit ich meine Antwort verbessern kann.
RPiAwesomeness
7

Ich schlage vor, Arch Linux zu verwenden.

Ich erhalte eine normale Boot-Zeit von 5s (Kernel) + 5s (zu Userspace) und es erfordert nicht viel Aufwand, da es systemdfür init verwendet wird.

10robinho
quelle
2
@goldilocks, Sie können systemd auch auf Raspbian verwenden. Es hat die Startzeit für mich halbiert.
John La Rooy
@ JohnLaRooy Gut zu wissen. Ich ging davon aus, dass der Leistungsunterschied zu herkömmlichem init hauptsächlich darin besteht, dass systemd parallelisieren kann, aber wahrscheinlich auch Zeit spart, weil nicht für alles Shell-Skripte gespalten und interpretiert werden müssen.
Goldlöckchen
@goldilocks Ich stimme nicht zu, ich habe versucht, und systemdmacht viel Unterschied im Vergleich zu sysvinit. Siehe meine Antwort .
Basj
@Basj Noch besser zu wissen. Ich habe meinen Kommentar darüber gelöscht, was wahrscheinlich keinen "großen Unterschied in Bezug auf die Startzeiten macht, da es sich um einen einzelnen Kern handelt". Ich benutze meistens systemd - aber TBH Ich achte nicht sehr auf die Bootzeiten.
Goldlöckchen
7

Ich habe hier einen Artikel darüber geschrieben.

Kurzum: verwenden systemd.

Sie können Ihre RaspberryPi-App problemlos in weniger als 8 Sekunden nach dem Einstecken des Netzkabels oder in weniger als 3 Sekunden nach dem Start des Linux-Starts zum Laufen bringen .

Ein Beispiel hier, mein Dienst heißt samplerbox.service:

Bildbeschreibung hier eingeben

Hinweis: Ich habe nicht versucht, die Benutzerbereichszeit zu optimieren, da ich sie nicht benötige: Meine App startet sowieso früh. Es macht mir also nichts aus, wenn die Netzwerk-DHCP / IP-Zuweisung 8 Sekunden nach dem Start meiner App dauert.

Basj
quelle
4

Die optimale Lösung besteht wahrscheinlich darin, eine Distribution zu erstellen, die nur genau das tut, was Sie möchten. Auf diese Weise werden minimale Zeiten garantiert (unter Verwendung eines minimalistischen Init-Systems wie sinit ). Alternativ können Sie die Suspend-to-Disk-Funktion ( Ruhezustand ) des Linux-Kernels verwenden. Nach dem Booten sind die Vorgänge zum Anhalten und Fortsetzen später ziemlich schnell und das System ist in der Zwischenzeit vollständig ausgeschaltet.

Fred
quelle
3

Die Verwendung eines statisch verknüpften Kernels anstelle von Modprobing-Treibern kann die Leistung ebenfalls erheblich steigern. Es müssen noch weitere Optimierungen vorgenommen werden, indem ein Kernel sorgfältig konfiguriert und neu kompiliert wird.

Betrunkener Code-Affe
quelle
1
Tut mir leid, dass ich eine jahrelange Antwort bekommen habe. Aber können Sie uns etwas mehr darüber erzählen, wie man "einen statisch verknüpften Kernel verwenden" würde?
Caesar
Schauen Sie hier nach: raspberrypi.org/documentation/linux/kernel/building.md .
Betrunkener Code-Affe
Um einen statisch verknüpften Kernel zu kompilieren, müssen Sie nur 'make menuconfig' oder 'make xconfig' aufrufen und die benötigten Treiber in den Kernel aufnehmen, anstatt sie als Module auszuwählen. Auf diese Weise werden sie in vmlinuz konvertiert, und Sie können die Modprobe-Sequenz beim Booten überspringen, was eine beträchtliche Zeit in Anspruch nimmt, um die benötigten Kernelmodule zu erkennen und zu laden.
Betrunkener Code-Affe
Vielen Dank für Ihre Antwort. Könnten Sie ein paar reproduzierbare Schritte einschließen, damit es funktioniert, damit es nützlich ist? (So ​​etwas wie 1) Do this in command line, 2) Do this and this 3) Modify this and this in config.txt 4) Boot, it will take 3.2 seconds! 5) Here is the result of my benchmarks: ...)
Basj
Nicht wirklich, das Neukompilieren eines Kernels ist kein einfacher Prozess in fünf Schritten. Es gibt viele Anleitungen im Internet, die Ihnen zeigen, wie Sie einen Linux-Kernel konfigurieren und kompilieren ...
Drunken Code Monkey
1

Verwenden Sie TinyCoreLinux . Es wurde für schnelles Laden und zum Überstehen von Stromausfällen entwickelt.

avra
quelle
Vielen Dank für Ihre Antwort. Könnten Sie ein paar reproduzierbare Schritte einschließen, damit es funktioniert? (So ​​etwas wie 1) Download an image here: +link 2) Flash it on your microSD 3) Modify this and this in config.txt 4) Boot, it will take 3.2 seconds!)
Basj
0

Sie können versuchen, den Startvorgang mit eINIT zu beschleunigen: http://sourceforge.net/projects/einit/

Zur Zeit (Okt. 2016) stellt die eINIT-Homepage leider fest:

eINIT war eine alternative Implementierung des Programms / sbin / init für Linux und FreeBSD. Nun, ich nehme an, es ist immer noch so, aber das Projekt ist seit Jahren auf Eis.

Goldlöckchen
quelle
Wir versuchen hier eine neue Richtlinie in Bezug auf informationslose Nur-Link-Antworten . Wenn dieser Beitrag nicht so bearbeitet wurde, dass er Informationen enthält, die als Antwort stehen können, jedoch nur minimal, wird er in 48 Stunden in das Community-Wiki konvertiert, um die Korrektur durch die Community zu vereinfachen.
Ghanima
-3

Entfernen Sie alle Kernelmodule, die Sie nicht verwenden.

mrpi64
quelle
4
Die Antworten auf dieser Website sollten die erforderlichen Schritte zur Durchführung der vorgeschlagenen Aktionen (Feststellen, welche Module geladen sind, welche erforderlich sind und wie diese entfernt werden) sowie Verweise und Links zu weiteren Informationen enthalten.
Steve Robillard