После удаления большинства ненужных мне сервисов все равно требуется около 28 секунд для загрузки, фотосъемки и выключения. Я хотел бы снизить это еще больше, и я сделал systemd-analyze blame
и получил следующее:
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
это мое, и в отличие от того, что подразумевает название, оно делает и другие вещи. Я сомневаюсь, что смогу улучшить время там.
Моя система работает без головы, по последовательному. Мне нужно только сеть через Wi-Fi (Wi-Fi не запускается, потому что я отключаю питание USB, но иногда я не отключаю его, чтобы он мог запуститься).
Глядя на этот список, я вижу такие вещи, как: 1.736s keyboard-setup.service
и 958ms kbd.service
. Они занимают почти 3 секунды. Нужны ли они мне, если я не использую клавиатуру? Если нет, то как их отключить?
Что еще я могу безопасно отключить отсюда?
Хорошо, здесь происходит что-то действительно странное. Я отключил еще несколько сервисов, и это все равно занимает столько времени, только теперь некоторые сервисы, которые раньше занимали меньше времени, занимают гораздо больше времени ...
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
Сервисный файл: (не знаю, почему синтаксис кода не работает)
[Unit]
Description=Disable USB power
Before=networking.service
After=local-fs.target
DefaultDependencies=no
[Service]
Type=oneshot
ExecStart=/sbin/usb_down
[Install]
Вот сюжет: http://www.eternal-lands.com/plot.svg
systemd-analyze plot
и включите сюда изображение (которое должно привести к хорошей диаграмме SVG, показывающей время и, возможно, прояснит ситуацию).disableusb.service
. Кстати, вы можете быстро,convert plog.svg plog.jpg
если вы установитеimagemagick
пакет /Ответы:
Это подразумевает, что вы запускаете что-то на переднем плане, потому что оно не является постоянным, поэтому вы чувствуете, что нет смысла фонировать это. Однако, если это занимает много времени, возможно, вам следует развернуть его на задний план, как только он начнет работать.
Проблема здесь просто в том, что это больше выиграет от времени загрузки, чем оставит его на переднем плане, хотя в любом случае это может не иметь никакого значения. Однако, если что-то еще зависит от его завершения (в отличие от простого успешного завершения инициализации, что более применимо к постоянному сервису), то вы должны оставить это как.
Я никогда не смотрел на это, потому что это не имеет большого значения для меня, но я считаю, что что-то не так в том, как обрабатывается «настройка клавиатуры» в Raspbian. Я видел, как он работал 90 секунд, прежде чем был убит systemd.
Я полагаю, что нет, но это может создать трудности для вас, если вам вдруг понадобится клавиатура ... или это может не иметь никакого значения - часть моего подозрения в том, что на самом деле ничего не происходит, поскольку "клавиатура" Настройка "это то, что является статической конфигурацией и может быть изменено вручную при необходимости.
Чтобы отключить услугу,
sudo systemd disable ...
.Странно, это все еще там, так как он должен отключить себя после запуска, но этого может не произойти, если вы проигнорируете это. Это может быть связано с клавиатурой. Если возможно, вы должны подключить монитор и посмотреть, появляется ли он после загрузки. В любом случае это то, что вы можете отключить.
Я думаю, что вы должны сделать
disableusb.service
After=sysinit.target
.источник
pi@raspberrypi:~$ sudo systemd disable raspi-config.service
и получилExcess arguments.
. Кроме того, многие из этих служб не указаны в спискеsystemctl list-unit-files
.networking.service
? Я предполагаю, что это не было преднамеренным, поэтому я рекомендовал начать после sysinit (который ждет инициализации сети). В любом случае, имейте в виду, что, если вы включите 28 секундdisableusb
, это довольно разумное время загрузки для любой модели Pi. Никто из них не быстр.disableusb
что нужно завершить работу до начала работы сети, потому что именно так вы хотите убедиться, что Wi-Fi не запускается. Это просто глупо, чтобы быть откровенным; ты играешь, есть мой пирог и ешь тоже. Если вы хотите отключить USB для экономии энергии, отлично, но вы должны решить проблему с Wi-Fi отдельно. Если вы не можете быть обеспокоены, то не тратьте свое время на попытки выжать секунды из времени загрузки.Глядя на график, становится ясно, что отключение на
console-setup.service
самом деле ничего не ускорит. Как видитеnetworking.service
, ожидание доdisableusb.service
завершения, поэтому время загрузки в 1,6 секунды дляconsole-setup.service
параллельной работы не повлияет на общее время загрузки вообще.Есть идея в планировании критического пути, который, когда любая активность на этом пути задерживается, вызывает задержки для всего проекта. Другие действия имеют «плавание», то есть они не являются критическими и могут быть отложены, не влияя на конечное время финиша.
Именно на этом критическом пути вы должны сэкономить время, а не на некритические действия.
systemd-analyze critical-chain
поможет вам определить критические действия, хотя вы можете в значительной степени определить их на сюжете. Любой незначительный выигрышdisableusb.service
значительно увеличит время загрузки.Это также может помочь понять, почему ваши услуги так долго. Для этого может пригодиться Bootchart2 . Может быть установлен с:
Чтобы включить его, отредактируйте
/boot/cmdline.txt
и установите:После завершения загрузки вы найдете диаграмму, сохраненную в
/run/log
виде файла SVG. Затем вернитесьinit=...
к первоначальной настройке (или удалите ее, если ее там не было раньше).Смотрите также справочную страницу для
systemd-bootchart
.источник
raspistill -o /home/pi/test_boot.jpg
. Это всего лишь тест, я мог бы немного изменить параметры и сэкономить время, но в будущем я также хочу включить необработанный вывод, что будет означать еще ~ 10 МБ или около того для каждого снимка, что, вероятно, займет дополнительную секунду написать. Я попробую вещь с загрузочной диаграммой, я надеюсь, что она не требует монитора :)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)
, При запускеpybootchartgui -i
я получаю: предупреждение: путь /var/log/bootchart.tgz не существует, игнорируя. Ошибка разбора: пустое состояние: «/var/log/bootchart.tgz» не содержит допустимой загрузочной диаграммы--timeout 1
и это уменьшило время загрузки до 15.389s :)Я бегу без головы raspberrypi Zero, и я мог бы побриться несколько секунд от этого, как это:
Systemd
Обратите внимание, что
systemd-analyze
выводит время загрузки:Минимальный загрузочный вывод
В
boot/cmdline.txt
измененииtty1
кtty3
и добавитьloglevel=3 quiet logo.nologo
в конце послеrootwait
Это спасло мне еще одну секунду.
Разное
Этот парень достигает загрузки raspberrypi за 3 секунды: https://www.samplerbox.org/article/fastbootrpi
Это хороший блог с некоторыми шагами по сокращению времени загрузки: http://himeshp.blogspot.com/2018/08/fast-boot-with-raspberry-pi.html
Дуги Лоусон объясняет некоторые из служб raspberrpi https://www.raspberrypi.org/forums/viewtopic.php?t=195692
Углубленный учебник в формате PDF
источник