Bagaimana saya bisa menurunkan waktu boot saya lebih banyak?


11

Setelah menghapus sebagian besar layanan yang tidak saya butuhkan, masih dibutuhkan sekitar 28 detik untuk mem-boot, mengambil gambar, dan mematikan. Saya ingin menurunkan ini lebih lagi, dan saya melakukan systemd-analyze blamedan mendapatkan yang berikut:

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.serviceadalah milikku, dan tidak seperti apa namanya menyiratkan itu melakukan hal-hal lain juga. Saya ragu saya bisa meningkatkan waktu di sana.

Sistem saya berjalan tanpa kepala, secara serial. Saya hanya perlu jaringan melalui wifi (wifi tidak mulai karena saya menonaktifkan daya usb, tapi kadang-kadang saya tidak akan menonaktifkannya, sehingga bisa mulai).

Melihat daftar ini, saya melihat hal-hal seperti: 1.736s keyboard-setup.servicedan 958ms kbd.service. Mereka membutuhkan waktu hampir 3 detik. Apakah saya membutuhkannya jika saya tidak menggunakan keyboard? Jika tidak, bagaimana cara menonaktifkannya?

Apa lagi yang bisa saya nonaktifkan dengan aman dari sini?

Ok, ada sesuatu yang sangat aneh terjadi di sini. Saya menonaktifkan beberapa layanan lagi, dan masih membutuhkan waktu lama, hanya sekarang beberapa layanan yang membutuhkan waktu lebih sedikit sebelum memakan waktu lebih lama ...

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

File layanan: (tidak tahu mengapa sintaks kode tidak berfungsi)

[Unit]
Description=Disable USB power
Before=networking.service
After=local-fs.target
DefaultDependencies=no

[Service]
Type=oneshot
ExecStart=/sbin/usb_down

[Install]

Berikut adalah alurnya: http://www.eternal-lands.com/plot.svg

masukkan deskripsi gambar di sini


1
Mungkin lebih jelas apa masalahnya jika Anda menjalankan systemd-analyze plotdan memasukkan gambar di sini (yang seharusnya menghasilkan bagan SVG yang bagus yang menunjukkan timing dan mungkin akan menghapus semuanya).
Aurora0001

1
Terima kasih atas sarannya, saya mengedit posting untuk menambahkan plot.
Radu

Anda harus menempel di file layanan untuk disableusb.service. BTW, Anda dapat dengan cepat convert plog.svg plog.jpgjika Anda menginstal imagemagickpaket /
goldilocks

Saya mengedit pertanyaan untuk menambahkan file layanan.
Radu

Pertanyaan: Apa jenis kartu SD yang Anda miliki? Kartu SD yang lebih cepat dapat memberikan waktu boot lebih cepat daripada optimasi ini. Apakah ini dinilai setidaknya 60mb / s?
cybernard

Jawaban:


7
7.476s disableusb.service

Ini menyiratkan bahwa Anda menjalankan sesuatu di latar depan karena tidak persisten sehingga Anda merasa tidak ada gunanya melatarbelakanginya. Namun, jika itu membutuhkan waktu lama untuk melakukan hal itu, mungkin Anda harus garpu ke latar belakang segera setelah itu dimulai.

Masalahnya di sini hanya karena lebih menguntungkan waktu boot Anda daripada membiarkannya di latar depan, meskipun mungkin tidak ada bedanya. Namun, jika ada hal lain yang tergantung pada penyelesaiannya (bukan sekadar menyelesaikan inisialisasi dengan sukses, yang lebih berlaku untuk layanan persisten), maka Anda harus membiarkannya.

Saya melihat hal-hal seperti: 1.736s keyboard-setup.service dan 958ms kbd.service. Mereka membutuhkan waktu hampir 3 detik.

Saya tidak pernah melihatnya karena itu tidak terlalu berarti bagi saya, tetapi saya percaya ada sesuatu yang salah tentang cara "pengaturan keyboard" ditangani pada Raspbian. Saya telah melihatnya berjalan 90 detik sebelum dibunuh oleh systemd.

Apakah saya membutuhkannya jika saya tidak menggunakan keyboard? Jika tidak, bagaimana cara menonaktifkannya?

Saya kira tidak, tetapi ini dapat membuat Anda repot jika tiba-tiba Anda membutuhkan keyboard ... atau mungkin tidak ada bedanya sama sekali - bagian dari kecurigaan saya adalah bahwa itu sebenarnya tidak mencapai apa-apa, karena "keyboard" setup "adalah sesuatu yang merupakan konfigurasi statis dan dapat diubah secara manual sesuai kebutuhan.

Untuk menonaktifkan layanan sudo systemd disable ...,.

raspi-config.service

Aneh ini masih ada karena seharusnya menonaktifkan sendiri setelah dijalankan - tetapi itu mungkin tidak terjadi jika Anda mengabaikannya. Itu mungkin berhubungan dengan keyboard. Jika memungkinkan Anda harus mencolokkan monitor dan melihat apakah itu muncul setelah boot. Bagaimanapun, ini adalah hal lain yang sebaiknya Anda nonaktifkan.

Berikut adalah alurnya: http://www.eternal-lands.com/plot.svg

Saya pikir Anda harus membuatnya disableusb.service After=sysinit.target.


Saya melakukan: pi@raspberrypi:~$ sudo systemd disable raspi-config.servicedan mendapat Excess arguments.. Juga, banyak dari layanan tersebut yang tidak tercantum dalam daftar systemctl list-unit-files.
Radu

1
Bagaimana dengan hubungannya networking.service? Saya kira itu tidak disengaja, itulah sebabnya saya merekomendasikan untuk memulai setelah sysinit (yang menunggu untuk diinisialisasi jaringan). Bagaimanapun, perlu diingat bahwa jika 28 detik termasuk Anda disableusb, itu adalah waktu boot yang cukup masuk akal untuk setiap model Pi. Tidak ada yang cepat.
goldilocks

1
Menonaktifkan usb memiliki peran untuk menghemat daya, bukan hanya untuk mencegah wifi dari mulai. Idenya adalah bahwa wifi HARUS mulai kadang-kadang, dan skrip tidak akan menonaktifkan daya dalam kasus itu.
Radu

2
Anda membuang-buang waktu Anda mencoba mengoptimalkan jika Anda ingin bersikeras disableusbharus menyelesaikan sebelum jaringan dimulai karena ini adalah bagaimana Anda ingin memastikan wifi tidak dimulai. Terus terang, jujur ​​saja; Anda sedang bermain, ambil kue saya dan makan juga. Jika Anda ingin menonaktifkan USB untuk menghemat daya, bagus, tetapi Anda harus menangani masalah wifi secara terpisah. Jika Anda tidak dapat diganggu, maka jangan buang waktu Anda untuk mencoba mengeluarkan detik dari waktu booting Anda.
goldilocks

1
Saya rasa saya tidak mengerti apa yang Anda katakan. Saya katakan bahwa saya memindahkan sebagian besar script seperti yang Anda sarankan, dan waktu boot meningkat hampir 2 detik ...
Radu

3

Melihat grafik, tampak jelas bahwa penonaktifan console-setup.servicesebenarnya tidak akan mempercepat apa pun. Seperti yang Anda lihat networking.servicesedang menunggu sampai disableusb.serviceselesai, jadi waktu buka 1,6 detik untuk console-setup.serviceberjalan secara paralel tidak akan memengaruhi waktu boot keseluruhan sama sekali.

Ada ide dalam penjadwalan jalur kritis yang, ketika aktivitas apa pun di jalur ini tertunda, menyebabkan keterlambatan seluruh proyek. Kegiatan lain memiliki 'float', yaitu mereka tidak kritis, dan dapat ditunda tanpa mempengaruhi waktu selesai akhir.

Jalur kritis inilah yang harus Anda hemat waktu, bukan aktivitas yang tidak kritis. systemd-analyze critical-chainakan membantu Anda mengidentifikasi kegiatan-kegiatan penting, meskipun Anda dapat melihatnya di plot. Setiap penambahan marginal disableusb.serviceakan membantu waktu boot Anda secara signifikan.

Mungkin juga membantu untuk memahami mengapa layanan Anda begitu lama. Untuk ini, Bootchart2 mungkin bermanfaat. Itu dapat diinstal dengan:

apt-get install systemd-bootchart

Untuk benar-benar mengaktifkannya, edit /boot/cmdline.txtdan atur:

init=/lib/systemd/systemd-bootchart

Setelah booting selesai, Anda akan menemukan bagan yang disimpan /run/logsebagai file SVG. Kemudian, kembali init=...ke pengaturan awal (atau hapus jika tidak ada sebelumnya).

Lihat juga halaman manual untuksystemd-bootchart .


Satu-satunya hal yang mahal cpu disableusb.service saya melakukannya raspistill -o /home/pi/test_boot.jpg. Ini hanya sebuah tes, saya mungkin memodifikasi parameter sedikit lebih dan menghemat waktu, tetapi di masa depan saya juga ingin mengaktifkan output mentah yang akan berarti lain ~ 10 MB atau lebih untuk setiap gambar, yang mungkin akan memakan waktu ekstra kedua untuk menulis. Saya akan mencoba hal bootchart, saya harap tidak memerlukan monitor :)
Radu

Saya pikir PNG diproduksi juga; itu harus dicatat dalam dokumentasi tempat menyimpannya dalam Raspbian.
Aurora0001

Sayangnya, itu tidak berhasil. 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). Ketika saya mulai pybootchartgui -isaya mendapatkan: peringatan: path '/var/log/bootchart.tgz' tidak ada, mengabaikan. Kesalahan Parse: keadaan kosong: '/var/log/bootchart.tgz' tidak mengandung bootchart yang valid
Radu

2
Oh, ternyata bootchart sekarang disebut systemd-bootchart di Stretch dan terintegrasi lebih dekat dengan systemd. Saya telah mengedit, @Radu, dengan langkah-langkah yang sesuai.
Aurora0001

1
Jadi, saya mengetahui bahwa aplikasi kamera memiliki penundaan 5 detik, hanya karena. Saya menggunakan --timeout 1dan mengurangi waktu boot ke 15.389s :)
Radu

2

Saya menjalankan Zero raspberrypi tanpa kepala dan saya bisa mencukur beberapa detik dari itu seperti:

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

Harap dicatat bahwa systemd-analyzeoutput waktu boot:

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

Output boot minimal

Di boot/cmdline.txtubah tty1menjadi tty3dan tambahkan loglevel=3 quiet logo.nologopada bagian akhir setelahnyarootwait

Ini menghemat satu detik untuk saya.

Lain-lain

Orang ini mencapai boot raspberrypi 3 detik: https://www.samplerbox.org/article/fastbootrpi

Ini adalah blog yang bagus dengan beberapa langkah untuk mengurangi waktu boot: http://himeshp.blogspot.com/2018/08/fast-boot-with-raspberry-pi.html

DougieLawson menjelaskan beberapa layanan raspberrpi https://www.raspberrypi.org/forums/viewtopic.php?t=195692

Tutorial mendalam sebagai PDF

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.