Як я можу скоротити час завантаження?


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є моїм, і на відміну від того, що випливає з назви, він робить і інші речі. Сумніваюсь, я можу там покращити час.

Моя система працює без голови, послідовно. Мені потрібна мережа лише через wifi (wifi не запускається, тому що я відключаю 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

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


1
Можливо, може бути зрозуміліше, в чому проблема, якщо ви запустите systemd-analyze plotі включите сюди зображення (це повинно створити хороший графік SVG, що показує терміни і, можливо, очистить речі).
Aurora0001

1
Дякую за пропозицію, я відредагував публікацію, щоб додати сюжет.
Раду

Ви повинні вставити файл служби для disableusb.service. До речі, ви можете швидко convert plog.svg plog.jpgвстановити imagemagickпакет /
goldilocks

Я редагував питання, щоб додати службовий файл.
Раду

Питання: Яка у вас SD-карта? Більш швидка SD-карта може забезпечити швидше завантаження, ніж будь-яка з цих оптимізацій. Чи оцінюється вона принаймні 60 Мб / с?
кібернард

Відповіді:


7
7.476s disableusb.service

Це означає, що ви запускаєте щось на передньому плані, оскільки воно не є наполегливим, тому ви відчуваєте, що немає сенсу фоновим фоном. Однак якщо це займе стільки часу, щоб зробити свою справу, можливо, вам слід відняти його на другий план, як тільки він замість цього запуститься.

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

Я бачу такі речі, як: клавіатура 1.736s-setup.service та 958ms kbd.service. Вони займають майже 3 секунди.

Я ніколи не заглядав у це, тому що це для мене мало важливе, але я вважаю, що в тому, як обробляється "налаштування клавіатури" на Raspbian, щось не так. Я бачив, як він пробіг 90 секунд, перш ніж його вбили системні.

Чи потрібні вони мені, якщо я не використовую клавіатуру? Якщо ні, то як їх відключити?

Я гадаю, що ні, але це може створити для вас клопоти, якщо раптом вам потрібна клавіатура ... або це може не мати ніякого значення - частина моєї підозри в тому, що вона насправді нічого не робить, оскільки "клавіатура налаштування "- це статична конфігурація і її можна вручну змінити за потреби.

Щоб відключити послугу, 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 має роль збереження енергії, а не лише для запобігання запуску wifi. Ідея полягає в тому, що wifi ДОЛЖЕН запускатися іноді, і сценарій не відключатиме живлення в такому випадку.
Раду

2
Ви витрачаєте свій час, намагаючись оптимізувати, якщо ви хочете наполягати на тому, що disableusbдоводиться закінчувати до початку роботи мережі, оскільки саме так ви хочете переконатися, що Wi-Fi не запускається. От просто відверто; ти граєш, пий мій торт і їж теж. Якщо ви хочете відключити USB для економії енергії, чудово, але вам варто розібратися з проблемою Wi-Fi окремо. Якщо вас не турбує, не витрачайте часу, намагаючись вичавити секунди з часу завантаження.
золотинки

1
Я не думаю, що я розумію, що ти говориш. Я сказав вам, що я перемістив основну частину сценарію, як ви запропонували, і час завантаження збільшився майже на 2 секунди ...
Раду,

3

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

Існує ідея щодо планування критичного шляху, який, коли будь-яка діяльність на цьому шляху затягується, спричиняє затримки для всього проекту. Інші види діяльності мають "плаваючий характер", тобто вони не є критичними, і їх можна затримати, не впливаючи на час остаточного фінішу.

Саме на цей критичний шлях потрібно економити час, а не на некритичні дії. 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 .


Єдиний дорогий процесор, що робить це моє invalidusb.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.389с :)
Раду

2

Я запускаю нульовий малиновий нуль, і я можу голити кілька секунд від нього так:

Системний

# 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

Це врятувало ще одну секунду для мене.

Різне

Цей хлопець досягає завантаження малини за 3 секунди: https://www.samplerbox.org/article/fastbootrpi

Це хороший блог з деякими кроками щодо скорочення часу завантаження: http://himeshp.blogspot.com/2018/08/fast-boot-with-raspberry-pi.html

DougieLawson пояснює деякі служби raspberrpi https://www.raspberrypi.org/forums/viewtopic.php?t=195692

Поглиблений посібник у форматі PDF

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.