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 blame
dan 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 [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
adalah 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.service
dan 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 [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
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
systemd-analyze plot
dan memasukkan gambar di sini (yang seharusnya menghasilkan bagan SVG yang bagus yang menunjukkan timing dan mungkin akan menghapus semuanya).disableusb.service
. BTW, Anda dapat dengan cepatconvert plog.svg plog.jpg
jika Anda menginstalimagemagick
paket /Jawaban:
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 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.
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 ...
,.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.
Saya pikir Anda harus membuatnya
disableusb.service
After=sysinit.target
.sumber
pi@raspberrypi:~$ sudo systemd disable raspi-config.service
dan mendapatExcess arguments.
. Juga, banyak dari layanan tersebut yang tidak tercantum dalam daftarsystemctl list-unit-files
.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 Andadisableusb
, itu adalah waktu boot yang cukup masuk akal untuk setiap model Pi. Tidak ada yang cepat.disableusb
harus 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.Melihat grafik, tampak jelas bahwa penonaktifan
console-setup.service
sebenarnya tidak akan mempercepat apa pun. Seperti yang Anda lihatnetworking.service
sedang menunggu sampaidisableusb.service
selesai, jadi waktu buka 1,6 detik untukconsole-setup.service
berjalan 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-chain
akan membantu Anda mengidentifikasi kegiatan-kegiatan penting, meskipun Anda dapat melihatnya di plot. Setiap penambahan marginaldisableusb.service
akan 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:
Untuk benar-benar mengaktifkannya, edit
/boot/cmdline.txt
dan atur:Setelah booting selesai, Anda akan menemukan bagan yang disimpan
/run/log
sebagai file SVG. Kemudian, kembaliinit=...
ke pengaturan awal (atau hapus jika tidak ada sebelumnya).Lihat juga halaman manual untuk
systemd-bootchart
.sumber
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 :)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 mulaipybootchartgui -i
saya mendapatkan: peringatan: path '/var/log/bootchart.tgz' tidak ada, mengabaikan. Kesalahan Parse: keadaan kosong: '/var/log/bootchart.tgz' tidak mengandung bootchart yang valid--timeout 1
dan mengurangi waktu boot ke 15.389s :)Saya menjalankan Zero raspberrypi tanpa kepala dan saya bisa mencukur beberapa detik dari itu seperti:
Systemd
Harap dicatat bahwa
systemd-analyze
output waktu boot:Output boot minimal
Di
boot/cmdline.txt
ubahtty1
menjaditty3
dan tambahkanloglevel=3 quiet logo.nologo
pada 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
sumber