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 blame
et 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.service
est à 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.service
et 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
systemd-analyze plot
et incluez l'image ici (cela devrait produire un joli graphique SVG montrant les horaires et peut-être clarifiera les choses).disableusb.service
. BTW, vous pouvez rapidementconvert plog.svg plog.jpg
si vous installez leimagemagick
package /Réponses:
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 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.
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 ...
.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.
Je pense que tu devrais faire
disableusb.service
After=sysinit.target
.la source
pi@raspberrypi:~$ sudo systemd disable raspi-config.service
et j'ai réussiExcess arguments.
. En outre, bon nombre de ces services n'apparaissent pas dans la listesystemctl list-unit-files
.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 votredisableusb
, c'est un temps de démarrage assez raisonnable pour n'importe quel modèle de Pi. Aucun d'eux n'est rapide.disableusb
pour 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.En regardant le graphique, il semble clair que la désactivation n'accélérera
console-setup.service
en fait rien de toute façon. Comme vous pouvez le voir,networking.service
attend ladisableusb.service
fin, donc un temps de chargement de 1,6 seconde pour uneconsole-setup.service
exé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-chain
vous aidera à identifier les activités critiques, bien que vous puissiez les repérer sur l'intrigue. Tout gain marginaldisableusb.service
amé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:
Pour l'activer, modifiez
/boot/cmdline.txt
et définissez:Une fois le démarrage terminé, vous trouverez le graphique enregistré dans
/run/log
un fichier SVG. Ensuite, revenezinit=...
à son paramètre initial (ou supprimez-le s'il n'était pas là auparavant).Voir aussi la page de manuel pour
systemd-bootchart
.la source
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 :)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 -i
j'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--timeout 1
et cela a réduit le temps de démarrage à 15,389 s :)Je lance un raspberrypi Zero sans tête et je pourrais en raser quelques secondes comme ceci:
Systemd
Veuillez noter que
systemd-analyze
génère l'heure de démarrage:Sortie de démarrage minimale
Dans le
boot/cmdline.txt
changementtty1
detty3
et appendloglevel=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
la source