Как я могу уменьшить время загрузки?

11

После удаления большинства ненужных мне сервисов все равно требуется около 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

введите описание изображения здесь

Radu
источник
1
Возможно, будет более понятно, в чем проблема, если вы запустите systemd-analyze plotи включите сюда изображение (которое должно привести к хорошей диаграмме SVG, показывающей время и, возможно, прояснит ситуацию).
Aurora0001
1
Спасибо за предложение, я отредактировал пост, чтобы добавить сюжет.
Раду
Вы должны вставить в сервисный файл для disableusb.service. Кстати, вы можете быстро, convert plog.svg plog.jpgесли вы установите imagemagickпакет /
Златовласка
Я отредактировал вопрос, чтобы добавить служебный файл.
Раду
Вопрос: какая у вас SD-карта? Более быстрая SD-карта может обеспечить более быстрое время загрузки, чем любая из этих оптимизаций. Это оценивается как минимум в 60 Мбит / с?
Кибернард

Ответы:

7
7.476s disableusb.service

Это подразумевает, что вы запускаете что-то на переднем плане, потому что оно не является постоянным, поэтому вы чувствуете, что нет смысла фонировать это. Однако, если это занимает много времени, возможно, вам следует развернуть его на задний план, как только он начнет работать.

Проблема здесь просто в том, что это больше выиграет от времени загрузки, чем оставит его на переднем плане, хотя в любом случае это может не иметь никакого значения. Однако, если что-то еще зависит от его завершения (в отличие от простого успешного завершения инициализации, что более применимо к постоянному сервису), то вы должны оставить это как.

Я вижу такие вещи, как: 1.736s клавиатура-setup.service и 958ms kbd.service. Они занимают почти 3 секунды.

Я никогда не смотрел на это, потому что это не имеет большого значения для меня, но я считаю, что что-то не так в том, как обрабатывается «настройка клавиатуры» в Raspbian. Я видел, как он работал 90 секунд, прежде чем был убит systemd.

Нужны ли они мне, если я не использую клавиатуру? Если нет, то как их отключить?

Я полагаю, что нет, но это может создать трудности для вас, если вам вдруг понадобится клавиатура ... или это может не иметь никакого значения - часть моего подозрения в том, что на самом деле ничего не происходит, поскольку "клавиатура" Настройка "это то, что является статической конфигурацией и может быть изменено вручную при необходимости.

Чтобы отключить услугу, sudo systemd disable ....

raspi-config.service

Странно, это все еще там, так как он должен отключить себя после запуска, но этого может не произойти, если вы проигнорируете это. Это может быть связано с клавиатурой. Если возможно, вы должны подключить монитор и посмотреть, появляется ли он после загрузки. В любом случае это то, что вы можете отключить.

Вот сюжет: http://www.eternal-lands.com/plot.svg

Я думаю, что вы должны сделать disableusb.service After=sysinit.target.

Златовласка
источник
Я сделал: pi@raspberrypi:~$ sudo systemd disable raspi-config.serviceи получил Excess arguments.. Кроме того, многие из этих служб не указаны в списке systemctl list-unit-files.
Раду
1
Как насчет отношений с networking.service? Я предполагаю, что это не было преднамеренным, поэтому я рекомендовал начать после sysinit (который ждет инициализации сети). В любом случае, имейте в виду, что, если вы включите 28 секунд disableusb, это довольно разумное время загрузки для любой модели Pi. Никто из них не быстр.
Златовласка
1
Отключение usb играет роль для экономии энергии, а не только для предотвращения запуска Wi-Fi. Идея заключается в том, что Wi-Fi должен запускаться иногда, и сценарий не отключит питание в этом случае.
Раду
2
Вы тратите свое время, пытаясь оптимизировать, если хотите настаивать на том, disableusbчто нужно завершить работу до начала работы сети, потому что именно так вы хотите убедиться, что Wi-Fi не запускается. Это просто глупо, чтобы быть откровенным; ты играешь, есть мой пирог и ешь тоже. Если вы хотите отключить USB для экономии энергии, отлично, но вы должны решить проблему с Wi-Fi отдельно. Если вы не можете быть обеспокоены, то не тратьте свое время на попытки выжать секунды из времени загрузки.
Златовласка
1
Я не думаю, что я понимаю, что вы говорите. Я сказал вам, что переместил основную часть скрипта, как вы предложили, и время загрузки увеличилось почти на 2 секунды ...
Раду
3

Глядя на график, становится ясно, что отключение на console-setup.serviceсамом деле ничего не ускорит. Как видите networking.service, ожидание до disableusb.serviceзавершения, поэтому время загрузки в 1,6 секунды для console-setup.serviceпараллельной работы не повлияет на общее время загрузки вообще.

Есть идея в планировании критического пути, который, когда любая активность на этом пути задерживается, вызывает задержки для всего проекта. Другие действия имеют «плавание», то есть они не являются критическими и могут быть отложены, не влияя на конечное время финиша.

Именно на этом критическом пути вы должны сэкономить время, а не на некритические действия. systemd-analyze critical-chainпоможет вам определить критические действия, хотя вы можете в значительной степени определить их на сюжете. Любой незначительный выигрыш disableusb.serviceзначительно увеличит время загрузки.

Это также может помочь понять, почему ваши услуги так долго. Для этого может пригодиться Bootchart2 . Может быть установлен с:

apt-get install systemd-bootchart

Чтобы включить его, отредактируйте /boot/cmdline.txtи установите:

init=/lib/systemd/systemd-bootchart

После завершения загрузки вы найдете диаграмму, сохраненную в /run/logвиде файла SVG. Затем вернитесь init=...к первоначальной настройке (или удалите ее, если ее там не было раньше).

Смотрите также справочную страницу дляsystemd-bootchart .

Aurora0001
источник
Единственная дорогая вещь, которую делает мой disableusb.service raspistill -o /home/pi/test_boot.jpg. Это всего лишь тест, я мог бы немного изменить параметры и сэкономить время, но в будущем я также хочу включить необработанный вывод, что будет означать еще ~ 10 МБ или около того для каждого снимка, что, вероятно, займет дополнительную секунду написать. Я попробую вещь с загрузочной диаграммой, я надеюсь, что она не требует монитора :)
Раду
Я думаю, что PNG производится тоже; это должно быть отмечено в документации, где он сохраняет в Raspbian.
Aurora0001
К сожалению, это не работает. 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» не содержит допустимой загрузочной диаграммы
Раду
2
О, оказывается, загрузочная диаграмма теперь называется systemd-bootchart в Stretch и более тесно интегрирована с systemd. Я отредактировал @Radu с соответствующими шагами.
Aurora0001
1
Итак, я обнаружил, что приложение камеры имеет 5-секундную задержку, просто потому что. Я использовал, --timeout 1и это уменьшило время загрузки до 15.389s :)
Radu
2

Я бегу без головы raspberrypi Zero, и я мог бы побриться несколько секунд от этого, как это:

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

Обратите внимание, что systemd-analyzeвыводит время загрузки:

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

Минимальный загрузочный вывод

В 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

Besi
источник