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 blame
und 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.service
gehö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.service
und 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
systemd-analyze plot
das 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).disableusb.service
. Übrigens können Sie schnell,convert plog.svg plog.jpg
wenn Sie dasimagemagick
Paket /Antworten:
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 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.
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 ...
.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.
Ich denke du solltest machen
disableusb.service
After=sysinit.target
.quelle
pi@raspberrypi:~$ sudo systemd disable raspi-config.service
und bekamExcess arguments.
. Viele dieser Dienste werden auch nicht in aufgeführtsystemctl list-unit-files
.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 enthaltendisableusb
, dies eine ziemlich vernünftige Startzeit für jedes Pi-Modell ist. Keiner von ihnen ist schnell.disableusb
das 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.Wenn man sich das Diagramm ansieht, scheint es klar zu sein, dass das Deaktivieren
console-setup.service
sowieso nichts beschleunigt. Wie Sie sehen,networking.service
wird gewartet, bis der Vorgangdisableusb.service
abgeschlossen ist. Eine Ladezeit von 1,6 Sekunden fürconsole-setup.service
die 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-chain
hilft Ihnen dabei, die kritischen Aktivitäten zu identifizieren, obwohl Sie sie auf dem Plot ziemlich genau erkennen können. Jeder geringfügige Gewinndisableusb.service
wü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:
Um es tatsächlich zu aktivieren, bearbeiten
/boot/cmdline.txt
und einstellen Sie:Nach Abschluss des Startvorgangs wird das Diagramm
/run/log
als SVG-Datei gespeichert. Kehren Sie danninit=...
zu seiner ursprünglichen Einstellung zurück (oder löschen Sie sie, wenn sie vorher nicht vorhanden war).Siehe auch die Manpage für
systemd-bootchart
.quelle
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 :)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 -i
erhalte ich eine: Warnung: Pfad '/var/log/bootchart.tgz' existiert nicht, ignoriert. Analysefehler: leerer Zustand: '/var/log/bootchart.tgz' enthält kein gültiges Bootchart--timeout 1
und es reduzierte die Startzeit auf 15.389s :)Ich verwende einen kopflosen Himbeerpi Zero und könnte mich einige Sekunden davon so rasieren:
Systemd
Bitte beachten Sie, dass die
systemd-analyze
Startzeit ausgegeben wird:Minimale Startleistung
Im
boot/cmdline.txt
Wechseltty1
zutty3
undloglevel=3 quiet logo.nologo
am 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
quelle