Po usunięciu większości usług, których nie potrzebuję, nadal trwa około 28 sekund, aby uruchomić, zrobić zdjęcie i zamknąć. Chciałbym obniżyć to jeszcze bardziej, zrobiłem systemd-analyze blame
i otrzymałem następujące:
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
jest moja i w przeciwieństwie do tego, co sama nazwa wskazuje, robi też inne rzeczy. Wątpię, czy mogę poprawić tam czas.
Mój system działa bez głowy, szeregowo. Potrzebuję tylko sieci przez Wi-Fi (Wi-Fi nie uruchamia się, ponieważ wyłączam zasilanie USB, ale czasami nie wyłączam go, aby mógł się uruchomić).
Patrząc na tę listę, widzę takie rzeczy jak: 1.736s keyboard-setup.service
i 958ms kbd.service
. Zajmują prawie 3 sekundy. Czy potrzebuję ich, jeśli nie używam klawiatury? Jeśli nie, jak mogę je wyłączyć?
Co jeszcze mogę bezpiecznie wyłączyć z tego miejsca?
Ok, dzieje się tu coś naprawdę dziwnego. Wyłączyłem więcej usług i nadal trwa to w sumie tyle, że teraz niektóre usługi, które zajęły mniej czasu wcześniej, zajmują znacznie dłużej ...
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
Plik usługi: (nie mam pojęcia, dlaczego składnia kodu nie działa)
[Unit]
Description=Disable USB power
Before=networking.service
After=local-fs.target
DefaultDependencies=no
[Service]
Type=oneshot
ExecStart=/sbin/usb_down
[Install]
Oto fabuła: http://www.eternal-lands.com/plot.svg
systemd-analyze plot
może łatwiej będzie wyjaśnić, na czym polega problem, jeśli uruchomisz i włączysz tutaj obraz (to powinno wygenerować ładny wykres SVG pokazujący czasy i być może wyczyści wszystko).disableusb.service
. BTW, możesz szybko,convert plog.svg plog.jpg
jeśli zainstalujeszimagemagick
pakiet /Odpowiedzi:
Oznacza to, że uruchamiasz coś na pierwszym planie, ponieważ nie jest to trwałe, więc uważasz, że nie ma sensu umieszczać go w tle. Jeśli jednak zajmuje to tyle czasu, być może powinieneś rozwidlić go w tle, gdy tylko zacznie.
Problem polega po prostu na tym, że bardziej prawdopodobne jest, że skorzystasz z czasu rozruchu, niż pozostawianie go na pierwszym planie, chociaż i tak nie robi to żadnej różnicy. Jeśli jednak coś innego zależy od jego ukończenia (w przeciwieństwie do zwykłego pomyślnego zainicjowania, co bardziej dotyczy stałej usługi), należy pozostawić to jako.
Nigdy się tym nie zajmowałem, ponieważ nie ma to dla mnie większego znaczenia, ale wierzę, że jest coś złego w sposobie obsługi „konfiguracji klawiatury” w Raspbian. Widziałem, jak działa 90 sekund przed zabiciem przez systemd.
Przypuszczam, że nie, ale może to być dla ciebie kłopotliwe, jeśli nagle potrzebujesz klawiatury ... lub może to wcale nie mieć znaczenia - częściowo podejrzewam, że tak naprawdę nic nie robi, ponieważ klawiatura setup ”to konfiguracja statyczna, którą można ręcznie zmienić w razie potrzeby.
Aby wyłączyć usługę
sudo systemd disable ...
.Dziwne, wciąż istnieje, ponieważ ma się wyłączyć po uruchomieniu - ale może się tak nie zdarzyć, jeśli go zignorujesz. Może to dotyczyć klawiatury. Jeśli to możliwe, należy podłączyć monitor i sprawdzić, czy wyskakuje on po uruchomieniu. W każdym razie jest to coś, co równie dobrze możesz wyłączyć.
Myślę, że powinieneś zrobić
disableusb.service
After=sysinit.target
.źródło
pi@raspberrypi:~$ sudo systemd disable raspi-config.service
i dostałemExcess arguments.
. Ponadto wiele z tych usług nie pojawia się na liściesystemctl list-unit-files
.networking.service
? Zakładam, że nie było to celowe, dlatego zaleciłem zacząć po sysinit (który czeka na zainicjowanie pracy w sieci). W każdym razie pamiętaj, że jeśli 28 sekund obejmuje twójdisableusb
, to całkiem rozsądny czas rozruchu dla dowolnego modelu Pi. Żadne z nich nie jest szybkie.disableusb
zakończyć przed rozpoczęciem pracy w sieci, ponieważ w ten sposób chcesz się upewnić, że wifi się nie uruchomi. To po prostu głupie, szczerze mówiąc; bawisz się, masz moje ciasto i jesz. Jeśli chcesz wyłączyć USB w celu oszczędzania energii, świetnie, ale powinieneś poradzić sobie z problemem Wi-Fi osobno. Jeśli nie możesz się tym przejmować, nie marnuj czasu na wyciskanie sekund z czasu rozruchu.Patrząc na wykres, wydaje się jasne, że wyłączenie w
console-setup.service
rzeczywistości i tak niczego nie przyspieszy. Jak widać,networking.service
czeka nadisableusb.service
zakończenie, więc 1,6-sekundowy czas ładowaniaconsole-setup.service
równoległego nie wpłynie w ogóle na całkowity czas uruchamiania.Istnieje pomysł zaplanowania ścieżki krytycznej, która w przypadku opóźnienia jakiejkolwiek aktywności na tej ścieżce powoduje opóźnienia w całym projekcie. Inne czynności mają „pływak”, tzn. Nie są krytyczne i można je opóźnić bez wpływu na końcowy czas zakończenia.
To jest ta krytyczna ścieżka, na której musisz oszczędzać czas, a nie niekrytyczne działania.
systemd-analyze critical-chain
pomoże ci zidentyfikować krytyczne działania, chociaż możesz je właściwie dostrzec na fabule. Jakikolwiek marginalny zyskdisableusb.service
znacznie pomógłby w czasie rozruchu.Może również pomóc zrozumieć, dlaczego Twoje usługi trwają tak długo. W tym celu przydatne może być Bootchart2 . Można go zainstalować z:
Aby faktycznie to włączyć, edytuj
/boot/cmdline.txt
i ustaw:Po zakończeniu uruchamiania wykres zostanie zapisany
/run/log
jako plik SVG. Następnie przywróćinit=...
ustawienia początkowe (lub usuń je, jeśli nie było go wcześniej).Zobacz także stronę
systemd-bootchart
podręcznika dla .źródło
raspistill -o /home/pi/test_boot.jpg
. To tylko test, mógłbym nieco zmodyfikować parametry i zaoszczędzić trochę czasu, ale w przyszłości chcę również włączyć nieprzetworzone dane wyjściowe, co będzie oznaczać kolejne ~ 10 MB dla każdego obrazu, co prawdopodobnie zajmie dodatkową sekundę pisać. Spróbuję uruchomić program, mam nadzieję, że nie wymaga monitora :)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)
. Kiedy zaczynampybootchartgui -i
, pojawia się: ostrzeżenie: ścieżka '/var/log/bootchart.tgz' nie istnieje, ignorując. Błąd analizy: stan pusty: „/var/log/bootchart.tgz” nie zawiera prawidłowego programu rozruchowego--timeout 1
i to skróciło czas uruchamiania do 15.389s :)Używam bezgłowego raspberrypi Zero i mógłbym się z niego zgolić kilka sekund w następujący sposób:
Systemd
Należy pamiętać, że
systemd-analyze
wyświetla czas rozruchu:Minimalna wydajność rozruchowa
W
boot/cmdline.txt
zmianietty1
dotty3
i dołączyćloglevel=3 quiet logo.nologo
na końcu porootwait
To uratowało mi kolejną sekundę.
Misc
Ten facet osiąga rozruch w Raspberrypi w ciągu 3 sekund: https://www.samplerbox.org/article/fastbootrpi
To jest dobry blog z kilkoma krokami w celu skrócenia czasu uruchamiania: http://himeshp.blogspot.com/2018/08/fast-boot-with-raspberry-pi.html
DougieLawson wyjaśnia niektóre usługi raspberrpi https://www.raspberrypi.org/forums/viewtopic.php?t=195692
Szczegółowy samouczek w formacie PDF
źródło