Manfaat modul kernel yang dikompilasi di dalam kernel?

Jawaban:

7

Tergantung. Jika Anda memiliki sedikit memori, penggunaan modul dapat meningkatkan resume karena tidak dimuat ulang setiap kali (saya menemukan itu signifikan pada 2 GiB RAM tetapi tidak pada 4 GiB pada harddisk tradisional). Hal ini terutama berlaku ketika karena beberapa bug dalam modul baterai (terlepas dari yang dikompilasi atau sebagai modul), butuh waktu lama untuk memulai (beberapa menit). Bahkan tanpa bug pada gentoo saya berhasil mempersingkat waktu (dilaporkan oleh systemd-analysis) dari 33-an menjadi 18-an hanya dengan mengubah dari kernel yang dikompilasi secara statis menjadi modul - 'mengejutkan' awal kernel berubah dari 9s menjadi 1.5s.

Juga, ketika Anda tidak tahu perangkat keras apa yang akan Anda gunakan, modul jelas bermanfaat.

PS. Anda dapat mengkompilasi driver vital sekalipun selama Anda memasukkannya di initrd. Sebagai contoh, distro akan menyertakan sistem file dari /, driver dari harddisk dll di initrd pada instalasi.

Maciej Piechotka
sumber
Apakah Anda keberatan membaca jawaban ini lagi, dengan hati-hati. Ya, tapi saya tidak tahu apa yang Anda katakan di tempat, misalnya ... pada harddrives tradisional .
tshepang
Maksud saya yang magnetik (saya tidak punya pengalaman dengan SSD).
Maciej Piechotka
Saya sudah mencoba membuatnya lebih mudah dibaca. Bisakah Anda memeriksa apakah saya tidak mengacaukannya.
tshepang
Terima kasih. Saya baru saja menyelesaikan sesi ujian sehingga saya tidak punya waktu untuk melihatnya.
Maciej Piechotka
7

Sejauh yang saya tahu, tidak ada perbedaan kecepatan.

Saya pikir Anda akan mendapatkan beberapa kB memori kernel karena rincian alokasi adalah satu halaman, jadi pada arsitektur tipikal setiap modul menghabiskan rata-rata sekitar 2kB (½ halaman) per modul calon. Bahkan pada sistem embedded, itu hampir tidak signifikan. Anda juga mendapatkan sedikit ruang disk karena modul-modul tersebut dapat dikompres bersamaan dengan kernel; yang bisa lebih relevan dalam sistem embedded dengan sedikit penyimpanan.

Jika Anda dapat membuang semua modul, Anda menghemat sedikit memori kernel (tidak perlu untuk pemuat modul), ruang disk (tidak perlu untuk utilitas modul), dan kompleksitas sistem (tidak perlu menyertakan pemuatan modul sebagai fitur dalam distribusi Anda ). Poin-poin ini cukup menarik dalam beberapa desain tertanam di mana perangkat kerasnya tidak dapat diperluas.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Untuk mengakses simbol dalam modul sedikit lebih lambat (tipuan terlibat). Tetapi fleksibilitas tambahan (dapat memuat / membongkar sesuai kebutuhan, tidak harus membangun kernel yang dirancang sendiri untuk perangkat keras yang tepat digunakan, ...) sangat berharga (kecuali jika Anda membangun untuk lingkungan yang sangat terbatas yang tidak memerlukan selalu berubah).
vonbrand
4

Beberapa manfaat potensial. Kinerja adalah hal yang bisa diperdebatkan. Anda akan menghindari beberapa overhead runtime yang terkait dengan loader dinamis, tapi saya ragu itu masalah besar kecuali Anda bergantung pada penjadwal waktu-nyata.

Jika Anda memanfaatkan halaman besar pada sistem Anda, maka mungkin membuat gambar kernel statis yang lebih besar berarti Anda menggunakan cache deskriptor halaman dengan lebih efisien. Beberapa sistem akan 'mengurung' kernel sehingga mengemas secara ketat ke satu lokalitas memori, yang dapat mengurangi sejumlah keterlambatan karena kesalahan halaman yang minor dan kemungkinan besar.

Mungkin cocok untuk Anda, secara arsitektur, untuk menghadirkan One Big Image, dengan alasan bahwa lebih sedikit modul independen yang lebih mudah dipelihara dan hilangnya fleksibilitas tidak penting. Banyak jenis pemikiran ini mencoba masalah gaya dan praktik.

mfe
sumber
2

Terkadang itu perlu. Jika Anda mengkompilasi beberapa driver vital (mis. Driver SCSI) sebagai modul, sistem Anda tidak akan bisa boot.

Kandidat hebat lain untuk tidak mengkompilasi sebagai modul adalah tipe filesystem dari partisi root. Jika kernel tidak mengerti ext3untuk membaca /lib/modules/bagaimana cara memuat modul dari itu?

Pikirkan seperti ini: untuk menggunakan modul, kernel perlu cukup tahu tentang sistem Anda untuk membaca dan memuat modul kernel. Gunakan itu dan coba-coba :-)

nc3b
sumber
Aku sedang berpikir tentang beberapa kinerja meningkatkan? Apakah ada?
phunehehe
1
Di masa lalu orang berusaha keras untuk menghasilkan kernel sekecil mungkin dengan hanya apa yang diperlukan . Hari ini sebagian besar telah berubah. Bahkan, setiap kali Anda pertama kali memuat modul, Anda akan mengalami hit kinerja kecil. Itu bukan berarti Anda harus mengkompilasi semua yang ada di kernel :-) Lihat ini: articleinput.com/e/a/title/…
nc3b
untuk driver atau fungsi yang tidak penting apakah ada manfaatnya? misalnya jika saya hanya ingin menggunakan terminal dan banyak utilitas jaringan tanpa kebutuhan atau fungsi lainnya. apakah ada manfaatnya jika saya hanya mengkompilasi semua modul dan driver yang diperlukan di dalam kernel tanpa modul yang dapat dimuat?
uray
3
Banteng. Suatu sistem akan boot dengan baik dengan driver SCSI sebagai modul dalam initrd. Untuk itulah mereka.
wzzrd
Ya ... asalkan modul dalam initrd yang dapat dimengerti oleh kernel ...
Dagelf
2

Saya secara statis mengkompilasi setiap driver untuk perangkat keras bawaan di dalam kernel. Pengecualian adalah perangkat keras yang tidak permanen (perangkat keras yang terhubung dengan USB, misalnya).

Karena konfigurasi perangkat keras saya kemungkinan tidak akan berubah dalam waktu dekat, saya tidak peduli dengan modul.

Stephane
sumber