Comment puis-je réduire davantage mon temps de démarrage?

11

Après avoir supprimé la plupart des services dont je n'ai pas besoin, il faut toujours environ 28 secondes pour démarrer, prendre une photo et arrêter. Je voudrais baisser encore plus, et j'ai fait un systemd-analyze blameet obtenu ce qui suit:

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.serviceest à moi, et contrairement à ce que son nom l'indique, il fait aussi d'autres choses. Je doute que je puisse améliorer le temps là-bas.

Mon système fonctionne sans tête, en série. Je n'ai besoin que de la mise en réseau via le wifi (le wifi ne démarre pas car je désactive l'alimentation USB, mais parfois je ne le désactiverai pas, pour qu'il puisse démarrer).

En regardant cette liste, je vois des choses telles que: 1.736s keyboard-setup.serviceet 958ms kbd.service. Ils prennent près de 3 secondes. En ai-je besoin si je n'utilise pas de clavier? Sinon, comment les désactiver?

Que puis-je désactiver en toute sécurité à partir d'ici?

Ok, il y a quelque chose de vraiment étrange ici. J'ai désactivé quelques services supplémentaires, et cela prend encore autant de temps au total, seulement que maintenant certains services qui ont pris moins de temps avant prennent beaucoup plus de temps ...

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

Fichier de service: (aucune idée pourquoi la syntaxe du code ne fonctionne pas)

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

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

[Install]

Voici l'intrigue: http://www.eternal-lands.com/plot.svg

entrez la description de l'image ici

Radu
la source
1
Peut-être que le problème pourrait être plus clair si vous exécutez systemd-analyze plotet incluez l'image ici (cela devrait produire un joli graphique SVG montrant les horaires et peut-être clarifiera les choses).
Aurora0001
1
Merci pour la suggestion, j'ai édité le post pour ajouter l'intrigue.
Radu
Vous devez coller le fichier de service pour disableusb.service. BTW, vous pouvez rapidement convert plog.svg plog.jpgsi vous installez le imagemagickpackage /
goldilocks
J'ai modifié la question pour ajouter le fichier de service.
Radu
Question: De quel type de carte SD disposez-vous? Une carte SD plus rapide peut fournir des temps de démarrage plus rapides que n'importe laquelle de ces optimisations. Est-il évalué à au moins 60 Mo / s?
cybernard

Réponses:

7
7.476s disableusb.service

Cela implique que vous exécutez quelque chose au premier plan car il n'est pas persistant, vous sentez donc qu'il est inutile de le mettre en arrière-plan. Cependant, si cela prend autant de temps pour faire son travail, vous devriez peut-être le mettre en arrière-plan dès qu'il commence à la place.

Le problème ici est simplement qu'il est plus susceptible de profiter à votre temps de démarrage que de le laisser au premier plan, bien que cela ne fasse aucune différence dans les deux cas. Cependant, si quelque chose d'autre dépend de sa réalisation (par opposition à la réussite de l'initialisation, ce qui est plus applicable à un service persistant), vous devez le laisser tel quel.

Je vois des choses telles que: 1.736s keyboard-setup.service et 958ms kbd.service. Ils prennent près de 3 secondes.

Je ne l'ai jamais étudié car cela ne m'importe pas beaucoup, mais je pense qu'il y a quelque chose qui ne va pas dans la façon dont la "configuration du clavier" est gérée sur Raspbian. Je l'ai vu fonctionner 90 secondes avant d'être tué par systemd.

En ai-je besoin si je n'utilise pas de clavier? Sinon, comment les désactiver?

Je suppose que non, mais cela peut créer des tracas pour vous si vous avez soudainement besoin d'un clavier ... ou cela peut ne faire aucune différence - une partie de mes soupçons est qu'il ne fait rien, puisque le "clavier" setup "est une configuration statique qui peut être modifiée manuellement si nécessaire.

Pour désactiver un service, sudo systemd disable ....

raspi-config.service

Bizarre, cela est toujours là car il est censé se désactiver après son exécution - mais cela pourrait ne pas se produire si vous l'ignoriez. Cela pourrait être lié au clavier. Si possible, vous devez brancher un moniteur et voir s'il apparaît après le démarrage. Dans tous les cas, c'est quelque chose d'autre que vous pourriez aussi bien désactiver.

Voici l'intrigue: http://www.eternal-lands.com/plot.svg

Je pense que tu devrais faire disableusb.service After=sysinit.target.

Boucles d'or
la source
J'ai fait un: pi@raspberrypi:~$ sudo systemd disable raspi-config.serviceet j'ai réussi Excess arguments.. En outre, bon nombre de ces services n'apparaissent pas dans la liste systemctl list-unit-files.
Radu
1
Et la relation avec networking.service? Je suppose que ce n'était pas intentionnel, c'est pourquoi j'ai recommandé de commencer après sysinit (qui attend que le réseau s'initialise). Quoi qu'il en soit, gardez à l'esprit que si 28 secondes incluent votre disableusb, c'est un temps de démarrage assez raisonnable pour n'importe quel modèle de Pi. Aucun d'eux n'est rapide.
goldilocks
1
La désactivation de l'USB a pour rôle d'économiser l'énergie, pas seulement d'empêcher le wifi de démarrer. L'idée est que le wifi DEVRAIT parfois démarrer, et le script ne désactivera pas l'alimentation dans ce cas.
Radu
2
Vous perdez votre temps à essayer d'optimiser si vous voulez insister disableusbpour que le réseau se termine avant le démarrage du réseau, car c'est ainsi que vous voulez vous assurer que le wifi ne démarre pas. C'est juste stupide, pour être franc; tu joues, prends mon gâteau et mange aussi. Si vous souhaitez désactiver l'USB pour économiser l'énergie, tant mieux, mais vous devez traiter le problème du wifi séparément. Si vous ne pouvez pas être dérangé, alors ne perdez pas votre temps à essayer d'extraire des secondes de votre temps de démarrage.
goldilocks
1
Je ne pense pas comprendre ce que vous dites. Je vous ai dit que j'avais déplacé la majeure partie du script comme vous l'avez suggéré, et le temps de démarrage a augmenté de près de 2 secondes ...
Radu
3

En regardant le graphique, il semble clair que la désactivation n'accélérera console-setup.serviceen fait rien de toute façon. Comme vous pouvez le voir, networking.serviceattend la disableusb.servicefin, donc un temps de chargement de 1,6 seconde pour une console-setup.serviceexécution en parallèle n'affectera pas du tout le temps de démarrage global.

Il y a une idée dans la planification d'un chemin critique qui, lorsqu'une activité de ce chemin est retardée, entraîne des retards pour l'ensemble du projet. Les autres activités sont «flottantes», c'est-à-dire qu'elles ne sont pas critiques et peuvent être retardées sans affecter l'heure d'arrivée finale.

C'est ce chemin critique sur lequel vous devez gagner du temps, pas les activités non critiques. systemd-analyze critical-chainvous aidera à identifier les activités critiques, bien que vous puissiez les repérer sur l'intrigue. Tout gain marginal disableusb.serviceaméliorerait considérablement votre temps de démarrage.

Cela pourrait également aider à comprendre pourquoi vos services prennent autant de temps. Pour cela, Bootchart2 peut être utile. Il peut être installé avec:

apt-get install systemd-bootchart

Pour l'activer, modifiez /boot/cmdline.txtet définissez:

init=/lib/systemd/systemd-bootchart

Une fois le démarrage terminé, vous trouverez le graphique enregistré dans /run/logun fichier SVG. Ensuite, revenez init=...à son paramètre initial (ou supprimez-le s'il n'était pas là auparavant).

Voir aussi la page de manuel poursystemd-bootchart .

Aurora0001
la source
La seule chose chère au processeur mon disableusb.service le fait raspistill -o /home/pi/test_boot.jpg. Ce n'est qu'un test, je pourrais peut-être modifier un peu plus les paramètres et gagner du temps, mais à l'avenir, je veux également activer la sortie brute, ce qui signifie environ 10 Mo environ pour chaque image, ce qui prendra probablement une seconde supplémentaire écrire. Je vais essayer le truc du bootchart, j'espère qu'il ne nécessite pas de moniteur :)
Radu
Je pense qu'un PNG est également produit; il doit être noté dans la documentation où il enregistre dans Raspbian.
Aurora0001
Malheureusement, cela ne fonctionne pas. 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). Lorsque je démarre, pybootchartgui -ij'obtiens un: warning: path '/var/log/bootchart.tgz' n'existe pas, ignorant. Erreur d'analyse: état vide: '/var/log/bootchart.tgz' ne contient pas de diagramme de démarrage valide
Radu
2
Oh, il s'avère que bootchart est maintenant appelé systemd-bootchart dans Stretch et est intégré plus étroitement à systemd. J'ai édité, @Radu, avec les étapes appropriées.
Aurora0001
1
J'ai donc découvert que l'application appareil photo avait un délai de 5 secondes, simplement parce que. J'ai utilisé --timeout 1et cela a réduit le temps de démarrage à 15,389 s :)
Radu
2

Je lance un raspberrypi Zero sans tête et je pourrais en raser quelques secondes comme ceci:

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

Veuillez noter que systemd-analyzegénère l'heure de démarrage:

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

Sortie de démarrage minimale

Dans le boot/cmdline.txtchangement tty1de tty3et append loglevel=3 quiet logo.nologoà la fin aprèsrootwait

Cela m'a fait gagner une seconde de plus.

Divers

Ce gars réalise un démarrage Raspberrypi de 3 secondes: https://www.samplerbox.org/article/fastbootrpi

Ceci est un bon blog avec quelques étapes pour réduire le temps de démarrage: http://himeshp.blogspot.com/2018/08/fast-boot-with-raspberry-pi.html

DougieLawson explique certains des services raspberrpi https://www.raspberrypi.org/forums/viewtopic.php?t=195692

Tutoriel détaillé au format PDF

Besi
la source