Wie kann ich meine Startzeit weiter verkürzen?

11

Nach dem Entfernen der meisten Dienste, die ich nicht benötige, dauert das Starten, Aufnehmen eines Fotos und Herunterfahren noch etwa 28 Sekunden. Ich würde das gerne noch weiter senken, und ich habe a gemacht systemd-analyze blameund folgendes bekommen:

7.476s disableusb.service
1.736s keyboard-setup.service
958ms kbd.service
789ms systemd-fsck-root.service
737ms systemd-setup-dgram-qlen.service
722ms fake-hwclock.service
580ms kmod-static-nodes.service
565ms console-setup.service
534ms dev-mqueue.mount
518ms systemd-udev-trigger.service
498ms networking.service
489ms raspi-config.service
449ms hdparm.service
444ms systemd-journal-flush.service
376ms systemd-tmpfiles-setup.service
375ms dhcpcd.service
345ms systemd-logind.service
332ms ntp.service
317ms systemd-modules-load.service
281ms tmp.mount
272ms triggerhappy.service
269ms sys-kernel-debug.mount
265ms [email protected]
223ms rsyslog.service
221ms sys-kernel-config.mount
212ms systemd-tmpfiles-setup-dev.service
200ms systemd-remount-fs.service
198ms systemd-sysctl.service
184ms boot.mount
173ms systemd-random-seed.service
168ms rc-local.service
167ms [email protected]
165ms var-log.mount
141ms udev-finish.service
130ms sys-fs-fuse-connections.mount
111ms systemd-user-sessions.service
94ms systemd-update-utmp.service
94ms alsa-restore.service
93ms systemd-update-utmp-runlevel.service
77ms systemd-udevd.service
55ms takepicture.service

disableusb.servicegehört mir und im Gegensatz zu dem, was der Name andeutet, macht er auch andere Dinge. Ich bezweifle, dass ich die Zeit dort verbessern kann.

Mein System läuft kopflos ohne Seriennummer. Ich brauche nur ein Netzwerk über WLAN (WLAN startet nicht, weil ich die USB-Stromversorgung deaktiviere, aber manchmal deaktiviere ich es nicht, damit es gestartet werden kann).

Wenn ich mir diese Liste ansehe, sehe ich Dinge wie: 1.736s keyboard-setup.serviceund 958ms kbd.service. Sie dauern fast 3 Sekunden. Benötige ich sie, wenn ich keine Tastatur benutze? Wenn nicht, wie deaktiviere ich sie?

Was kann ich von hier aus noch sicher deaktivieren?

Ok, hier ist etwas wirklich Seltsames los. Ich habe einige weitere Dienste deaktiviert, und insgesamt dauert es immer noch so lange, nur dass jetzt einige Dienste, die zuvor weniger Zeit in Anspruch genommen haben, viel länger dauern ...

7.468s disableusb.service
1.676s console-setup.service
768ms systemd-logind.service
768ms systemd-fsck-root.service
726ms systemd-setup-dgram-qlen.service
714ms fake-hwclock.service
689ms networking.service
530ms systemd-journal-flush.service
524ms systemd-udev-trigger.service
509ms dev-mqueue.mount
509ms ntp.service
508ms kmod-static-nodes.service
439ms dhcpcd.service
334ms systemd-random-seed.service
331ms hdparm.service
318ms systemd-modules-load.service
281ms systemd-tmpfiles-setup.service
279ms [email protected]
279ms rsyslog.service
269ms systemd-remount-fs.service
265ms sys-kernel-config.mount
254ms systemd-tmpfiles-setup-dev.service
250ms systemd-sysctl.service
238ms rc-local.service
234ms systemd-udevd.service
232ms sys-kernel-debug.mount
224ms [email protected]
187ms tmp.mount
176ms sys-fs-fuse-connections.mount
175ms var-log.mount
133ms systemd-update-utmp.service
122ms systemd-update-utmp-runlevel.service
122ms systemd-user-sessions.service
119ms alsa-restore.service
91ms boot.mount
88ms udev-finish.service
76ms takepicture.service

Servicedatei: (keine Ahnung, warum die Codesyntax nicht funktioniert)

[Unit]
Description=Disable USB power
Before=networking.service
After=local-fs.target
DefaultDependencies=no

[Service]
Type=oneshot
ExecStart=/sbin/usb_down

[Install]

Hier ist die Handlung: http://www.eternal-lands.com/plot.svg

Geben Sie hier die Bildbeschreibung ein

Radu
quelle
1
Vielleicht ist es klarer, was das Problem ist, wenn Sie systemd-analyze plotdas Bild hier ausführen und einfügen (das sollte ein schönes SVG-Diagramm mit den Timings erzeugen und möglicherweise die Dinge klären).
Aurora0001
1
Vielen Dank für den Vorschlag, ich habe den Beitrag bearbeitet, um die Handlung hinzuzufügen.
Radu
Sie sollten die Servicedatei für einfügen disableusb.service. Übrigens können Sie schnell, convert plog.svg plog.jpgwenn Sie das imagemagickPaket /
Goldlöckchen
Ich habe die Frage bearbeitet, um die Servicedatei hinzuzufügen.
Radu
Frage: Welche Art von SD-Karte haben Sie? Eine schnellere SD-Karte bietet möglicherweise schnellere Startzeiten als jede dieser Optimierungen. Ist es für mindestens 60 MB / s ausgelegt?
Cybernard

Antworten:

7
7.476s disableusb.service

Dies bedeutet, dass Sie etwas im Vordergrund ausführen, da es nicht dauerhaft ist und Sie der Meinung sind, dass es keinen Sinn macht, es in den Hintergrund zu stellen. Wenn es jedoch so lange dauert, bis es fertig ist, sollten Sie es vielleicht in den Hintergrund stellen, sobald es stattdessen startet.

Das Problem hierbei ist einfach, dass es wahrscheinlicher ist, dass Ihre Startzeit davon profitiert, als dass es im Vordergrund bleibt, obwohl es in beiden Fällen möglicherweise keinen Unterschied macht. Wenn jedoch etwas anderes davon abhängt, dass es abgeschlossen ist (im Gegensatz zum einfachen erfolgreichen Abschluss der Initialisierung, was für einen dauerhaften Dienst besser geeignet ist), sollten Sie es als belassen.

Ich sehe Dinge wie: 1.736s keyboard-setup.service und 958ms kbd.service. Sie dauern fast 3 Sekunden.

Ich habe mich nie damit befasst, weil es mir nicht viel ausmacht, aber ich glaube, dass etwas an der Art und Weise, wie das "Tastatur-Setup" auf Raspbian gehandhabt wird, nicht stimmt. Ich habe gesehen, wie es 90 Sekunden lief, bevor es von systemd getötet wurde.

Benötige ich sie, wenn ich keine Tastatur benutze? Wenn nicht, wie deaktiviere ich sie?

Ich nehme an, nicht, aber dies kann Ihnen Probleme bereiten, wenn Sie plötzlich eine Tastatur benötigen ... oder es macht überhaupt keinen Unterschied - ein Teil meines Verdachts ist, dass es tatsächlich nichts bewirkt, da die "Tastatur" setup "ist eine statische Konfiguration, die bei Bedarf manuell geändert werden kann.

So deaktivieren Sie einen Dienst , sudo systemd disable ....

raspi-config.service

Seltsamerweise ist dies immer noch vorhanden, da es sich nach dem Ausführen selbst deaktivieren soll - aber das kann nicht passieren, wenn Sie es ignoriert haben. Das könnte sich auf die Tastatur beziehen. Wenn möglich, sollten Sie einen Monitor anschließen und prüfen, ob er nach dem Start angezeigt wird. In jedem Fall ist dies etwas anderes, das Sie genauso gut deaktivieren können.

Hier ist die Handlung: http://www.eternal-lands.com/plot.svg

Ich denke du solltest machen disableusb.service After=sysinit.target.

Goldlöckchen
quelle
Ich habe ein: pi@raspberrypi:~$ sudo systemd disable raspi-config.serviceund bekam Excess arguments.. Viele dieser Dienste werden auch nicht in aufgeführt systemctl list-unit-files.
Radu
1
Was ist mit der Beziehung zu networking.service? Ich gehe davon aus, dass dies nicht beabsichtigt war, weshalb ich empfohlen habe, nach sysinit zu beginnen (das auf die Initialisierung des Netzwerks wartet). Denken Sie jedoch daran, dass wenn 28 Sekunden Ihre enthalten disableusb, dies eine ziemlich vernünftige Startzeit für jedes Pi-Modell ist. Keiner von ihnen ist schnell.
Goldlöckchen
1
Das Deaktivieren von USB hat die Aufgabe, Strom zu sparen und nicht nur das Starten des WLAN zu verhindern. Die Idee ist, dass WLAN manchmal gestartet werden sollte, und das Skript wird in diesem Fall die Stromversorgung nicht deaktivieren.
Radu
2
Sie verschwenden Ihre Zeit damit, zu optimieren, wenn Sie darauf bestehen möchten, dass disableusbdas Netzwerk vor dem Start des Netzwerks beendet werden muss, da Sie auf diese Weise sicherstellen möchten, dass das WLAN nicht gestartet wird. Das ist einfach dumm, um ehrlich zu sein; Du spielst, hast meinen Kuchen und isst auch. Wenn Sie USB deaktivieren möchten, um Strom zu sparen, ist das großartig, aber Sie sollten das WLAN-Problem separat behandeln. Wenn Sie sich nicht darum kümmern können, verschwenden Sie auch keine Zeit damit, Sekunden aus Ihrer Startzeit herauszuholen.
Goldlöckchen
1
Ich glaube nicht, dass ich verstehe, was du sagst. Ich habe dir gesagt, dass ich den Großteil des Skripts verschoben habe, wie du vorgeschlagen hast, und die
Radu
3

Wenn man sich das Diagramm ansieht, scheint es klar zu sein, dass das Deaktivieren console-setup.servicesowieso nichts beschleunigt. Wie Sie sehen, networking.servicewird gewartet, bis der Vorgang disableusb.serviceabgeschlossen ist. Eine Ladezeit von 1,6 Sekunden für console-setup.servicedie parallele Ausführung wirkt sich also überhaupt nicht auf die Gesamtstartzeit aus.

Es gibt eine Idee bei der Planung eines kritischen Pfads, die, wenn eine Aktivität in diesem Pfad verzögert wird, zu Verzögerungen für das gesamte Projekt führt. Die anderen Aktivitäten haben "Float", dh sie sind nicht kritisch und können verzögert werden, ohne die endgültige Endzeit zu beeinflussen.

Es ist dieser kritische Pfad, auf dem Sie Zeit sparen müssen, nicht die unkritischen Aktivitäten. systemd-analyze critical-chainhilft Ihnen dabei, die kritischen Aktivitäten zu identifizieren, obwohl Sie sie auf dem Plot ziemlich genau erkennen können. Jeder geringfügige Gewinn disableusb.servicewürde Ihre Startzeit erheblich verbessern.

Es kann auch hilfreich sein zu verstehen, warum Ihre Dienste so lange dauern. Hierzu kann Bootchart2 hilfreich sein. Es kann installiert werden mit:

apt-get install systemd-bootchart

Um es tatsächlich zu aktivieren, bearbeiten /boot/cmdline.txtund einstellen Sie:

init=/lib/systemd/systemd-bootchart

Nach Abschluss des Startvorgangs wird das Diagramm /run/logals SVG-Datei gespeichert. Kehren Sie dann init=...zu seiner ursprünglichen Einstellung zurück (oder löschen Sie sie, wenn sie vorher nicht vorhanden war).

Siehe auch die Manpage fürsystemd-bootchart .

Aurora0001
quelle
Die einzige CPU-teure Sache, die mein disableusb.service macht raspistill -o /home/pi/test_boot.jpg. Dies ist nur ein Test, ich könnte die Parameter etwas mehr ändern und etwas Zeit sparen, aber in Zukunft möchte ich auch die Rohausgabe aktivieren, was weitere ~ 10 MB für jedes Bild bedeutet, was wahrscheinlich eine zusätzliche Sekunde dauern wird schreiben. Ich werde das Bootchart-Ding ausprobieren, ich hoffe, es erfordert keinen Monitor :)
Radu
Ich denke, ein PNG wird auch produziert; Es sollte in der Dokumentation vermerkt werden, in der es in Raspbian gespeichert wird.
Aurora0001
Leider funktioniert es nicht. Setting up bootchart2 (0.14.4-3) ... update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults update-rc.d: warning: stop runlevel arguments (6 0) do not match bootchart-done Default-Stop values (none). Wenn ich anfange, pybootchartgui -ierhalte ich eine: Warnung: Pfad '/var/log/bootchart.tgz' existiert nicht, ignoriert. Analysefehler: leerer Zustand: '/var/log/bootchart.tgz' enthält kein gültiges Bootchart
Radu
2
Oh, es stellt sich heraus, dass das Bootchart jetzt in Stretch als systemd-bootchart bezeichnet wird und enger in systemd integriert ist. Ich habe @Radu mit den entsprechenden Schritten bearbeitet.
Aurora0001
1
Also fand ich heraus, dass die Kamera-App eine Verzögerung von 5 Sekunden hat, nur weil. Ich benutzte --timeout 1und es reduzierte die Startzeit auf 15.389s :)
Radu
2

Ich verwende einen kopflosen Himbeerpi Zero und könnte mich einige Sekunden davon so rasieren:

Systemd

# Don't start the Light Display Manager on headless
sudo systemctl disable lightdm.service

# In a headless environment you don't need the keyboard setup.
sudo systemctl disable keyboard-setup.service

# Checks if the country is set in the WIFI config. This is likely a regulatory precaution.
sudo systemctl disable wifi-country.service

# Unless you have an external joystick or something that uses `/dev/input/`
sudo systemctl disable triggerhappy.service 

# I read that the swap file actually slows the PI down and decreases SD card lifetime. 
sudo systemctl disable dphys-swapfile.service

# Disable Bluetooth unless you need it
sudo systemctl disable hciuart.service

# Unless you have a hardware button to disable the WIFI you won't need this
sudo systemctl mask systemd-rfkill.service # disabling won't work


# Open GL should be obsolete on a headless machine
sudo systemctl disable gldriver-test.service

# Only disable this one if you're not using `/etc/rc.local`
sudo systemctl mask rc-local

# You might to re-enable this service when making changes using `sudo raspi-config`
sudo systemctl disable raspi-config.service

Bitte beachten Sie, dass die systemd-analyzeStartzeit ausgegeben wird:

Startup finished in 1.532s (kernel) + 20.862s (userspace) = 22.395s

Minimale Startleistung

Im boot/cmdline.txtWechsel tty1zu tty3und loglevel=3 quiet logo.nologoam Ende danach anhängenrootwait

Das hat mir noch eine Sekunde gespart.

Sonstiges

Dieser Typ erreicht einen Himbeer-Boot von 3 Sekunden: https://www.samplerbox.org/article/fastbootrpi

Dies ist ein guter Blog mit einigen Schritten zur Verkürzung der Startzeit: http://himeshp.blogspot.com/2018/08/fast-boot-with-raspberry-pi.html

DougieLawson erklärt einige der raspberrpi-Dienste https://www.raspberrypi.org/forums/viewtopic.php?t=195692

Ausführliches Tutorial als PDF

Besi
quelle