Apa manfaat mengkompilasi modul kernel ke dalam kernel (bukan sebagai modul yang dapat dimuat)?
kernel
kernel-modules
uray
sumber
sumber
Jawaban:
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.
sumber
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.
sumber
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.
sumber
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
ext3
untuk 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 :-)
sumber
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.
sumber