Bagaimana cara meningkatkan waktu boot untuk Raspberry Pi?

27

Saya membuat aplikasi jarak jauh yang dapat disematkan yang tidak akan diaktifkan secara permanen. Saya telah bermain-main dengan distribusi OS yang berbeda dan dapat mengurangi waktu untuk boot secara substansial dengan menggunakan kartu SD yang lebih baik dengan kecepatan baca yang lebih cepat. Saya tidak terpaku pada distribusi tertentu, jadi saya bisa menghapus sebanyak yang diperlukan untuk menggunakan distribusi Linux minimal.

(Saya telah berusaha mencari tolok ukur yang telah dijalankan orang untuk meningkatkan waktu boot, tetapi saya belum menemukan apa pun dengan angka yang sulit.)

Saya juga bisa menggunakan build root (lihat juga video YouTube Raspberry Pi - Waktu Booting Super Cepat - Sistem Hiburan Marshmallow ) ...

Layke
sumber
Anda harus memilih untuk menutup pertanyaan ini. Kemudian pengguna akan diarahkan ke pertanyaan awal dan menambahkan lebih banyak jawaban. Karena itu belum ditandai sebagai dijawab.
Piotr Kula
Saya hanya berpikir bahwa yang satu ini memiliki banyak aktivitas (pandangannya jelas tidak setinggi, hanya karena yang ini kurang dari satu hari), lebih banyak suara, & lebih banyak jawaban, jadi saya pikir mungkin lebih baik meninggalkan yang ini naik, dan kemudian mungkin memindahkan jawaban Anda ke sini. Ini benar-benar masalah kenyamanan saya pikir. 1 pengguna memindahkan jawabannya alih-alih 3 memindahkan jawaban mereka dan dengan demikian kehilangan semua suara, percakapan, dan sejenisnya. Apakah ada alasan mengapa kita harus menempuh satu atau lain cara? Saya tidak keberatan, saya hanya berpikir bahwa orang lain yang menjawab mungkin tidak ingin pindah, dan dengan demikian kita kehilangan konten
RPiAwesomeness
@ppumkin Lihat posting Meta.SE ini tentang penutupan dupes: Jangan hapus duplikat yang baik dan posting blog SE ini . Saya pikir mereka setuju dengan poin saya sebelumnya. Kecuali jika duplikatnya merupakan salin-rekat dari yang lain, atau kualitas yang buruk, dan karena yang ini punya banyak jawaban / aktivitas, kita harus membiarkan keduanya terbuka.
RPiAwesomeness
1
@ppkinkin Poin bagus, asalkan yang ini tidak dihapus. Saya awalnya mengulas Leave Open, tapi saya rasa menandai ini sebagai duplikat dari itu adalah cara yang tepat untuk melakukannya. Satu-satunya hal yang dapat saya pikirkan adalah bahwa saya setidaknya ingin memiliki Q / A berkualitas tinggi pada dokumen asli yang ditandai, daripada pada duplikatnya. Jelas bukan itu yang terjadi di sini.
RPiAwesomeness
1
Ya kamu benar Ada lebih banyak jawaban di sini. Tampaknya sudah mendapat perhatian lebih. Saya kira kita perlu menyerahkannya kepada moderator untuk memutuskan karena mereka akan lebih tahu apa yang harus dilakukan di sini. Bagaimanapun. Baik dilakukan dengan mendapatkan jatah suara pada jawaban Anda :) Saya yakin OP menghargai kontribusi Anda. +1
Piotr Kula

Jawaban:

13

Jika Anda menggabungkan Arch Linux dengan fitur yang disarankan Fred, Anda seharusnya mendapatkan OS booting yang cepat.

Yang memperlambat waktu boot OS adalah

  1. Kecepatan baca / tulis (I / O) lambat.

    Jadi, Anda menggunakan kartu SD yang lebih cepat akan membantu, kartu Kelas 10 akan jauh lebih cepat daripada kartu Kelas 4 . Saya salah mengerti bagaimana kelas kartu SD bekerja, dan itu telah ditunjukkan dengan sangat jelas di komentar, saya buruk. Sebenarnya, kartu Kelas 10 akan lebih cepat daripada kartu Kelas 4 untuk transfer file besar seperti video HD dan yang lainnya. Rupanya Kelas 4 berkinerja sama dengan file yang lebih kecil. Sekali lagi, salahku, tapi hei, kita semua belajar sekarang dan lagi.

  2. Urutan init yang macet.

    Jika Anda memiliki banyak perangkat lunak yang menyala selama fase boot, waktu boot akan menjadi lebih lambat. Mulai lebih banyak perangkat lunak == Waktu boot yang lebih lama.

    Jadi, jika Anda memerlukan boot cepat, potong sebanyak mungkin perangkat lunak dari urutan init. Anda dapat membuat skrip sederhana (atau saya yakin ada satu di luar sana) yang akan meluncurkan perangkat lunak setelah urutan boot utama selesai, menyebarkan beban lebih sedikit.

Pada dasarnya itu. Arch Linux mungkin adalah cara untuk pergi, dikombinasikan dengan fitur yang disebutkan Fred, seperti yang saya katakan sebelumnya. Arch adalah OS yang sangat minim dan mungkin bukan yang terbaik bagi pemula untuk digunakan, tetapi jika Anda memiliki pengalaman di Linux, maka lakukanlah. Hanya perlu sedikit pengaturan, karena ia datang dengan minimal untuk menginstal dan hanya itu .

Semoga proyek Anda berjalan dengan baik!

Kehadiran RPi
sumber
3
"Kelas" kartu SD adalah indikator kinerja yang sangat buruk dalam sistem tertanam. Peringkat "kelas" adalah untuk transfer file berurutan besar (seperti yang Anda miliki dengan kamera digital multi-megapiksel), bukan untuk file kecil seperti skrip startup. Kartu kelas 4 secara teratur mengungguli sebagian besar kartu Kelas 10 pada operasi baca dan tulis 4k dengan faktor 100 atau lebih. Ada kartu-kartu Kelas 10 dengan IOPS yang bagus, tetapi model-model itu sedikit dan jarang.
Ben Voigt
Ya, saya setuju dengan @BenVoigt - ketika saya Menggunakan kelas 4 sepertinya menulis kecil dan pembaruannya cepat tapi ya transfer besar pada kelas 10 jauh lebih baik. Saya berharap dapat menggunakan kartu RAM yang ditenagai oleh baterai untuk kinerja instan.
Piotr Kula
Maaf, saya tidak tahu itu. Saya akan segera memperbaikinya. Saya mengerti bahwa semakin tinggi kelas semakin tinggi kecepatan. Terima kasih telah menunjukkan itu, saya baru belajar sesuatu: D Terima kasih atas upvotes juga :)
RPiAwesomeness
Saya bertanya-tanya mengapa jawaban saya tidak dipilih. Saya tidak sepenuhnya keberatan kehilangan perwakilan, saya hanya ingin tahu apa yang pantas untuk downvote, sehingga saya dapat meningkatkan jawaban saya.
RPiAwesomeness
7

Saya sarankan menggunakan Arch Linux.

Saya mendapatkan waktu boot normal 5s (kernel) + 5s (ke userspace) dan tidak memerlukan banyak usaha, karena menggunakan systemduntuk init.

10robinho
sumber
2
@goldilocks, Anda dapat menggunakan systemd pada raspbian juga. Ini mengurangi separuh waktu boot bagi saya.
John La Rooy
@JohnLaRooy Senang tahu. Saya berasumsi perbedaan kinerja vs init tradisional sebagian besar akan karena systemd dapat memparalelkan, tetapi mungkin juga menghemat waktu dengan tidak harus bercabang dan menafsirkan skrip shell untuk semuanya.
goldilocks
@goldilocks Saya tidak setuju, saya mencoba, dan systemdmembuat banyak perbedaan, dibandingkan dengan sysvinit. Lihat jawaban saya .
Basj
@ Basj Bahkan lebih baik untuk tahu. Saya telah menghapus komentar saya tentang hal itu mungkin tidak membuat "banyak perbedaan dalam hal waktu boot karena itu adalah [pada] satu inti". Saya kebanyakan menggunakan systemd - tapi TBH saya tidak terlalu memperhatikan waktu boot.
goldilocks
7

Saya menulis artikel di sini tentang hal itu.

Singkatnya: gunakan systemd.

Anda dapat dengan mudah menjalankan aplikasi RaspberryPi Anda kurang dari 8 detik setelah Anda menyambungkan kabel daya, atau kurang dari 3 detik setelah boot Linux dimulai.

Contoh di sini, layanan saya disebut samplerbox.service:

masukkan deskripsi gambar di sini

Catatan: Saya belum mencoba untuk mengoptimalkan waktu userspace karena saya tidak membutuhkannya: Aplikasi saya mulai lebih awal, jadi saya tidak keberatan jika atribusi jaringan DHCP / IP membutuhkan waktu 8 detik setelah aplikasi saya diluncurkan.

Basj
sumber
4

Solusi optimal mungkin untuk membangun distribusi yang hanya melakukan apa yang Anda inginkan saat boot, dengan cara ini Anda dijamin minimal kali (menggunakan sistem init minimalis seperti sinit ). Sebagai alternatif, Anda dapat mempertimbangkan untuk menggunakan fitur suspend to disk ( hibernation ) dari kernel Linux. Setelah di-boot, penundaan dan melanjutkan operasi nanti cukup cepat, dan sistemnya sepenuhnya mati sementara itu.

Fred
sumber
3

Menggunakan kernel yang terhubung secara statis alih-alih driver modprobing juga dapat secara dramatis meningkatkan kinerja. Ada optimasi lain yang harus dilakukan dengan mengkonfigurasi dan mengkompilasi ulang kernel dengan hati-hati.

Monyet Kode Mabuk
sumber
1
Maaf untuk menjawab jawaban bertahun-tahun. Tetapi bisakah Anda memberikan lebih banyak info tentang bagaimana seseorang akan menggunakan "kernel yang terhubung secara statis"?
Caesar
Lihat di sini: raspberrypi.org/documentation/linux/kernel/building.md .
Drunken Code Monkey
Untuk menambahkan ini, untuk mengkompilasi kernel yang terhubung secara statis Anda hanya perlu melalui 'make menuconfig' atau 'make xconfig' dan sertakan driver yang Anda butuhkan di kernel, daripada memilihnya sebagai modul. Melakukannya memasaknya menjadi vmlinuz, dan memungkinkan Anda melewatkan urutan modprobe pada bootup, yang membutuhkan banyak waktu untuk mendeteksi dan memuat modul kernel sesuai kebutuhan.
Drunken Code Monkey
Terima kasih atas jawaban Anda. Agar bermanfaat, dapatkah Anda memasukkan beberapa langkah yang dapat direproduksi agar berfungsi? (Sesuatu seperti 1) Do this in command line, 2) Do this and this 3) Modify this and this in config.txt 4) Boot, it will take 3.2 seconds! 5) Here is the result of my benchmarks: ...)
Basj
Tidak juga, mengkompilasi ulang kernel bukanlah proses sederhana 5 langkah. Ada banyak cara di web untuk menunjukkan kepada Anda cara mengkonfigurasi dan mengkompilasi kernel Linux ...
Drunken Code Monkey
1

Gunakan TinyCoreLinux . Itu dibuat untuk memuat cepat dan untuk bertahan hidup dari kegagalan daya.

avra
sumber
Terima kasih atas jawaban Anda. Bisakah Anda memasukkan beberapa langkah yang dapat direproduksi agar berfungsi? (Sesuatu seperti 1) Download an image here: +link 2) Flash it on your microSD 3) Modify this and this in config.txt 4) Boot, it will take 3.2 seconds!)
Basj
0

Anda dapat mencoba menggunakan eINIT untuk mempercepat proses boot:: http://sourceforge.net/projects/einit/

Sayangnya saat ini (Oktober 2016) homepage eINIT mencatat:

eINIT digunakan untuk menjadi implementasi alternatif dari program / sbin / init untuk Linux dan FreeBSD. Yah, saya kira masih demikian, tetapi proyek ini telah ditahan selama bertahun-tahun sekarang.

goldilocks
sumber
Kami sedang mencoba kebijakan baru sehubungan dengan jawaban tanpa tautan saja di sini . Jika posting ini tidak diedit mengandung informasi yang dapat dijadikan jawaban, namun minimal, dalam 48 jam itu akan dikonversi ke Komunitas Wiki untuk menyederhanakan setelah diperbaiki oleh komunitas.
Ghanima
-3

Hapus semua modul kernel yang tidak akan Anda gunakan.

mrpi64
sumber
4
Jawaban di situs ini harus mencakup langkah-langkah yang diperlukan untuk melakukan tindakan yang disarankan (bagaimana menentukan modul apa yang dimuat, yang diperlukan dan cara menghapusnya), dan referensi dan tautan ke informasi lebih lanjut.
Steve Robillard