Come posso ridurre di più il tempo di avvio?


11

Dopo aver rimosso la maggior parte dei servizi di cui non ho bisogno, sono necessari circa 28 secondi per l'avvio, scattare una foto e arrestare. Vorrei abbassarlo ancora di più, e ho fatto un systemd-analyze blamee ottenuto quanto segue:

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 systemd-fsck@dev-mmcblk0p6.service
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 user@1000.service
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è mio e, diversamente da ciò che suggerisce il nome, fa anche altre cose. Dubito di poter migliorare il tempo lì.

Il mio sistema funziona senza testa, tramite seriale. Ho solo bisogno del networking via wifi (il wifi non si avvia perché disabilito l'alimentazione USB, ma a volte non lo disabilito, in modo che possa avviarsi).

Guardando questo elenco, vedo cose come: 1.736s keyboard-setup.servicee 958ms kbd.service. Ci vogliono quasi 3 secondi. Ho bisogno di loro se non sto usando una tastiera? In caso contrario, come li disabilito?

Cos'altro posso disabilitare in sicurezza da qui?

Ok, c'è qualcosa di veramente strano che va qui. Ho disabilitato altri servizi, e ci vuole ancora così tanto tempo, solo che ora alcuni servizi che hanno impiegato meno tempo prima impiegano molto più tempo ...

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 systemd-fsck@dev-mmcblk0p6.service
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 user@1000.service
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

File di servizio: (non ho idea del perché la sintassi del codice non funzioni)

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

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

[Install]

Ecco la trama: http://www.eternal-lands.com/plot.svg

inserisci qui la descrizione dell'immagine


1
Forse potrebbe essere più chiaro quale sia il problema se corri systemd-analyze plote includi l'immagine qui (che dovrebbe produrre un bel grafico SVG che mostra i tempi e forse chiarirà le cose).
Aurora0001,

1
Grazie per il suggerimento, ho modificato il post per aggiungere la trama.
Radu,

È necessario incollare il file di servizio per disableusb.service. A proposito, puoi convert plog.svg plog.jpginstallare rapidamente il imagemagickpacchetto /
goldilocks

Ho modificato la domanda per aggiungere il file di servizio.
Radu,

Domanda: che tipo di scheda SD hai? Una scheda SD più veloce può fornire tempi di avvio più rapidi rispetto a qualsiasi di queste ottimizzazioni. È valutato per almeno 60 mb / s?
cybernard il

Risposte:


7
7.476s disableusb.service

Ciò implica che stai eseguendo qualcosa in primo piano perché non è persistente, quindi senti che non ha senso fondarlo. Tuttavia, se impiega così tanto tempo a fare le sue cose, forse dovresti spostarlo sullo sfondo non appena inizia invece.

Il problema qui è semplicemente che è più probabile che avvenga il tempo di avvio piuttosto che lasciarlo in primo piano, anche se potrebbe non fare alcuna differenza in entrambi i modi. Tuttavia, se qualcos'altro dipende dal suo completamento (anziché semplicemente completare correttamente l'inizializzazione, che è più applicabile a un servizio persistente), allora dovresti lasciarlo.

Vedo cose come: 1.736s keyboard-setup.service e 958ms kbd.service. Ci vogliono quasi 3 secondi.

Non ci ho mai pensato perché non importa molto per me, ma credo che ci sia qualcosa di sbagliato nel modo in cui la "configurazione della tastiera" viene gestita su Raspbian. L'ho visto funzionare 90 secondi prima di essere ucciso da systemd.

Ho bisogno di loro se non sto usando una tastiera? In caso contrario, come li disabilito?

Suppongo di no, ma questo potrebbe creare una seccatura per te se improvvisamente hai bisogno di una tastiera ... o potrebbe non fare alcuna differenza - parte del mio sospetto è che in realtà non sta realizzando nulla, dal momento che la "tastiera setup "è una configurazione statica che può essere modificata manualmente in base alle esigenze.

Per disattivare un servizio, sudo systemd disable ....

raspi-config.service

Strano questo è ancora lì poiché dovrebbe disabilitarsi dopo che è stato eseguito - ma ciò potrebbe non accadere se lo ignori. Ciò potrebbe riguardare la cosa della tastiera. Se possibile, dovresti collegare un monitor e vedere se compare dopo l'avvio. In ogni caso questo è qualcos'altro che potresti anche disabilitare.

Ecco la trama: http://www.eternal-lands.com/plot.svg

Penso che dovresti fare disableusb.service After=sysinit.target.


Ho fatto un: pi@raspberrypi:~$ sudo systemd disable raspi-config.servicee ottenuto Excess arguments.. Inoltre, molti di questi servizi non appaiono elencati in systemctl list-unit-files.
Radu,

1
E la relazione con networking.service? Presumo che non fosse intenzionale, motivo per cui ho raccomandato di iniziare dopo sysinit (che attende l'inizializzazione della rete). Comunque, tieni presente che se 28 secondi includono il tuo disableusb, è un tempo di avvio abbastanza ragionevole per qualsiasi modello di Pi. Nessuno di loro è veloce.
riccioli d'oro

1
La disabilitazione dell'USB ha il ruolo di risparmiare energia, non solo di impedire l'avvio del wifi. L'idea è che il wifi DOVREBBE iniziare a volte, e lo script non disabiliterà la potenza in quel caso.
Radu,

2
Stai sprecando il tuo tempo cercando di ottimizzare se vuoi insistere che disableusbdebba finire prima dell'inizio della rete perché è così che vuoi che il wifi non si avvii. È semplicemente stupido, a dire il vero; stai giocando prendi la mia torta e mangia anche tu. Se vuoi disabilitare USB per risparmiare energia, ottimo, ma dovresti affrontare il problema wifi separatamente. Se non puoi essere disturbato, allora non perdere tempo a cercare di spremere secondi dal tuo tempo di avvio.
riccioli d'oro

1
Non credo di capire quello che stai dicendo. Ti ho detto che ho spostato la maggior parte della sceneggiatura come hai suggerito, e il tempo di avvio è aumentato di quasi 2 secondi ...
Radu,

3

Guardando il grafico, sembra chiaro che la disabilitazione console-setup.servicenon accelererà comunque nulla. Come puoi vedere, networking.serviceè in attesa di essere disableusb.servicecompletato, quindi un tempo di caricamento di 1,6 secondi per l' console-setup.serviceesecuzione in parallelo non influirà affatto sul tempo di avvio generale.

C'è un'idea nella pianificazione di un percorso critico che, quando viene ritardata qualsiasi attività in questo percorso, causa ritardi all'intero progetto. Le altre attività hanno "float", ovvero non sono critiche e possono essere ritardate senza influire sul tempo di fine finale.

È questo percorso critico su cui devi risparmiare tempo, non le attività non critiche. systemd-analyze critical-chainti aiuterà a identificare le attività critiche, anche se puoi praticamente individuarle sulla trama. Qualsiasi guadagno marginale disableusb.serviceaiuterebbe significativamente il tempo di avvio.

Potrebbe anche aiutare a capire perché i tuoi servizi impiegano così tanto tempo. Per questo, Bootchart2 potrebbe essere utile. Può essere installato con:

apt-get install systemd-bootchart

Per abilitarlo effettivamente, modifica /boot/cmdline.txte imposta:

init=/lib/systemd/systemd-bootchart

Una volta completato l'avvio, troverai il grafico salvato /run/logcome file SVG. Quindi, ripristina init=...l'impostazione iniziale (o eliminala se prima non era presente).

Vedi anche la pagina man persystemd-bootchart .


L'unica cosa costosa della CPU lo fa il mio disableusb.service raspistill -o /home/pi/test_boot.jpg. Questo è solo un test, potrei modificare i parametri un po 'di più e risparmiare un po' di tempo, ma in futuro voglio anche abilitare l'output grezzo che significherà un altro ~ 10 MB circa per ogni foto, che probabilmente richiederà un secondo in più scrivere. Proverò il bootchart, spero che non richieda un monitor :)
Radu,

Penso che venga prodotto anche un PNG; dovrebbe essere annotato nella documentazione in cui salva in Raspbian.
Aurora0001,

Sfortunatamente, non funziona. 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). Quando inizio pybootchartgui -iottengo un: avviso: il percorso '/var/log/bootchart.tgz' non esiste, ignorando. Errore di analisi: stato vuoto: '/var/log/bootchart.tgz' non contiene un diagramma di avvio valido
Radu,

2
Oh, risulta che il diagramma di avvio è ora chiamato systemd-bootchart in Stretch ed è integrato più da vicino con systemd. Ho modificato, @Radu, con i passaggi appropriati.
Aurora0001,

1
Quindi, ho scoperto che l'app della fotocamera ha un ritardo di 5 secondi, solo perché. Ho usato --timeout 1e ha ridotto il tempo di avvio a 15.389 secondi :)
Radu,

2

Sto correndo uno Zero raspberrypi senza testa e potrei radere alcuni secondi da esso in questo modo:

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

Si noti che systemd-analyzegenera il tempo di avvio:

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

Uscita di avvio minima

In boot/cmdline.txtcambio tty1di tty3e aggiungere loglevel=3 quiet logo.nologoalla fine doporootwait

Questo mi ha permesso di risparmiare un altro secondo.

Varie

Questo ragazzo ottiene uno stivale raspberrypi di 3 secondi: https://www.samplerbox.org/article/fastbootrpi

Questo è un buon blog con alcuni passaggi per ridurre il tempo di avvio: http://himeshp.blogspot.com/2018/08/fast-boot-with-raspberry-pi.html

DougieLawson spiega alcuni dei servizi raspberrpi https://www.raspberrypi.org/forums/viewtopic.php?t=195692

Tutorial approfondito come PDF

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.