Apa manfaat mengkompilasi kernel linux Anda sendiri?

101

Apa manfaat yang bisa saya lihat dengan mengkompilasi kernel Linux sendiri? Apakah ada efisiensi yang dapat Anda buat dengan mengubahnya ke perangkat keras Anda?

jjclarkson
sumber
pertanyaan sederhana tentang apa manfaatnya menjadi kabur atau keluar dari konteks dengan sangat cepat. Akan lebih baik untuk bertanya What are the pros and cons of compiling your own kernel? Kontra = tidak mudah, banyak situasi tanpa nilai tambah. Kelebihan = keamanan, kinerja, jika Anda tahu apa yang Anda lakukan, perangkat NAS misalnya, menggunakan linux untuk membuat beberapa perangkat keras berfungsi dan memiliki kemampuan jaringan dan grafik.
Ron

Jawaban:

73

Dalam pikiran saya, satu-satunya manfaat yang Anda dapatkan dari kompilasi kernel linux Anda sendiri adalah:

Anda belajar cara mengompilasi kernel linux Anda sendiri.

Itu bukan sesuatu yang perlu Anda lakukan untuk lebih banyak kecepatan / memori / xxx apa pun. Merupakan hal yang sangat berharga untuk dilakukan jika pada tahap itulah Anda merasa berada dalam perkembangan Anda. Jika Anda ingin memiliki pemahaman yang lebih dalam tentang apa keseluruhan "open source" ini, tentang bagaimana dan apa bagian kernel yang berbeda, maka Anda harus mencobanya. Jika Anda hanya ingin mempercepat waktu booting Anda dengan 3 detik, maka ... apa gunanya ... pergi membeli SSD. Jika Anda penasaran, jika Anda ingin belajar, maka kompilasi kernel Anda sendiri adalah ide yang bagus dan Anda mungkin akan mendapatkan banyak dari itu.

Dengan mengatakan itu, ada beberapa alasan spesifik kapan akan tepat untuk mengkompilasi kernel Anda sendiri (seperti yang ditunjukkan beberapa orang dalam jawaban lainnya). Umumnya ini muncul dari kebutuhan spesifik yang Anda miliki untuk hasil tertentu, misalnya:

  • Saya perlu mendapatkan sistem untuk boot / dijalankan pada perangkat keras dengan sumber daya terbatas
  • Saya perlu menguji tambalan dan memberikan umpan balik kepada pengembang
  • Saya perlu menonaktifkan sesuatu yang menyebabkan konflik
  • Saya perlu mengembangkan kernel linux
  • Saya perlu mengaktifkan dukungan untuk perangkat keras yang tidak didukung
  • Saya perlu meningkatkan kinerja x karena saya mencapai batas sistem saat ini (dan saya tahu apa yang saya lakukan)

Masalahnya terletak pada pemikiran bahwa ada beberapa manfaat intrinsik untuk mengkompilasi kernel Anda sendiri ketika semuanya sudah berjalan sebagaimana mestinya, dan saya tidak berpikir ada. Meskipun Anda dapat menghabiskan waktu berjam-jam untuk menonaktifkan hal-hal yang tidak Anda butuhkan dan mengutak-atik hal-hal yang dapat diubah, faktanya adalah kernel linux sudah cukup baik disetel (oleh distribusi Anda) untuk sebagian besar situasi pengguna.

kawan
sumber
25
Saya berpendapat bahwa jika Anda ingin membangun kernel Anda sendiri hanya untuk pengalaman belajar, Anda melakukannya dengan distribusi Linux berbasis sumber seperti Gentoo atau Linux From Scratch. Dokumentasi instalasi Gentoo tahap 2 adalah panduan yang bagus untuk memahami apa artinya membangun Linux dari kernel.
Sandy
Setuju ... kedua proyek itu dibangun untuk hal semacam ini.
gabe.
Tentu saja Anda tahu bahwa Anda sebenarnya bertentangan dengan jawaban Anda. Jika satu-satunya manfaat mengkompilasi kernel adalah belajar bagaimana melakukannya, maka itu akan sia-sia - tidak memiliki nilai. Tetapi kemudian beberapa kata kemudian Anda mengatakan itu adalah hal yang berharga ...
rozcietrzewiacz
@rozcietrzewiacz Pengetahuan sangat berharga. Kompilasi kernel membantu Anda memperluas pengetahuan Anda. Jika Anda tidak membelinya, maka inilah ini - pengetahuan adalah kekuatan, dan orang-orang membayar uang yang baik untuk mendapatkan kekuatan, dan uang memiliki nilai di dunia saat ini, jadi oleh properti transitif ....: P
lunchmeat317
Saya setuju, itu layak hanya untuk pengetahuan yang didapat.
1100110
35

Sebagian besar pengguna tidak perlu mengkompilasi kernel mereka sendiri, distribusi mereka telah melakukan pekerjaan ini untuk mereka. Biasanya distribusi akan mencakup satu set tambalan untuk diintegrasikan dengan bagian-bagian tertentu dari cara kerja distribusi, backport driver perangkat dan perbaikan dari versi yang lebih baru, tetapi kernel yang belum dirilis atau fitur yang mereka rintis dengan penggunanya.

Ketika Anda mengkompilasi kernel Anda sendiri, Anda memiliki beberapa opsi, Anda dapat mengkompilasi kernel Linus Torvalds resmi, ini tidak akan termasuk patch atau kustomisasi yang ditambahkan oleh distribusi Anda (yang bisa baik atau buruk) atau Anda bisa gunakan alat membangun kembali distribusi Anda untuk membangun kernel Anda sendiri.

Alasan Anda ingin membangun kembali kernel Anda meliputi:

  • Menambal bug atau menambahkan fitur spesifik ke sistem produksi, di mana Anda tidak dapat mengambil risiko meningkatkan seluruh kernel untuk satu atau dua perbaikan tunggal.
  • Untuk mencoba driver perangkat tertentu, atau fitur baru
  • Untuk memperpanjang kernel, kerjakan
  • menguji beberapa modul atau fitur "Alpha".

Banyak pengembang menggunakannya untuk membuat versi khusus kernel untuk sistem tertanam atau kotak settop di mana mereka memerlukan driver perangkat khusus, atau mereka ingin menghapus fungsionalitas yang tidak mereka butuhkan.

miguel.de.icaza
sumber
8
+1. Anak-anak sekarang ini, mereka bahkan tidak tahu apa artinya 'make menuconfig' dan tidak pernah harus menambal kode jaringan kernel mereka untuk mencegah pwned oleh kiddies skrip. Untungnya hari-hari itu sebagian besar sudah berlalu.
axel_c
2
Anda harus menambahkan bisectuntuk menemukan di mana bug diperkenalkan ...
xenoterracide
1
menakjubkan bagaimana komentar ini dipilih ketika itu tidak ada hubungannya dengan pertanyaan OP. "Sebagian besar pengguna tidak ...." ayolah sekarang. Pertanyaan OP sangat jelas tentang keinginan mengetahui manfaat; bukan pendapat Anda tentang apa yang "sebagian besar pengguna" lakukan di sana-sini.
Eric
30

Mengkompilasi kernel sendiri memungkinkan Anda untuk hanya memasukkan bagian-bagian yang relevan dengan komputer Anda, yang membuatnya lebih kecil dan berpotensi lebih cepat, terutama pada saat boot. Kernel generik perlu menyertakan dukungan untuk perangkat keras sebanyak mungkin; pada saat boot mereka mendeteksi perangkat keras yang terpasang pada komputer Anda dan memuat modul yang sesuai, tetapi perlu waktu untuk melakukan semua itu dan mereka perlu memuat modul dinamis, daripada kode dipanggang langsung ke dalam kernel. Tidak ada alasan untuk memiliki dukungan kernel 400 CPU yang berbeda ketika hanya ada satu di komputer Anda, atau untuk mendukung mouse bluetooth jika Anda tidak memilikinya, itu semua ruang yang terbuang Anda dapat membebaskan

Michael Mrozek
sumber
15
Saya setuju dengan sebagian besar jawaban Anda, tetapi saya ingin tahu beberapa fakta sulit tentang "jauh lebih cepat". Saya tidak ingin memberi kesan kepada pengguna baru bahwa desktop mereka akan berjalan lebih cepat dengan kernel buatan tangan (dari pengalaman saya dengan Gentoo, ini tidak benar). Bisakah Anda menghitung keuntungan dalam kecepatan boot?
Sandy
2
Jawaban ini benar 15 tahun yang lalu, tetapi hari ini tidak terlalu relevan. Kebanyakan driver datang dalam modul, jadi mereka hanya mengambil ruang pada disk, bukan di memori. (Atau apakah beberapa distribusi masih datang tanpa initrd? Tanpa initrd kernel memang perlu menyertakan semua driver yang mungkin perlu di-boot.) Sedangkan untuk waktu boot, beberapa driver yang menghabiskan lebih dari satu milidetik untuk mencoba mendeteksi perangkat keras yang tidak ada dapat dinonaktifkan. dengan opsi boot kernel.
Gilles
1
@Michael jika itu asumsi yang belum diverifikasi, saya pikir mengganti "jauh lebih cepat" dengan "berpotensi lebih cepat" dalam jawaban Anda mungkin merupakan ide yang bagus ... hanya untuk memastikan tidak ada n00b yang disesatkan. :-)
Sandy
3
@Sandy Setuju, karena sepertinya saya salah satu dari mereka n00bs :). Diperbaiki
Michael Mrozek
2
Saya pikir "jauh" lebih cepat sebenarnya dibenarkan dengan peringatan bahwa kita berbicara tentang waktu booting. Kernel distro membutuhkan waktu 5 - 10 detik lebih lama untuk mem-boot yang saya lucuti untuk tidak mencari perangkat keras yang saya tidak berencana untuk menggunakan. Kecepatan run time mungkin dapat diabaikan, saya tidak bisa mengukurnya dengan andal.
Caleb
24

Saya tidak percaya jawaban yang diterima di sini dimulai dengan mengatakan "Ini bukan sesuatu yang perlu Anda lakukan untuk kecepatan / memori / xxx lebih banyak."

Ini sepenuhnya salah. Saya secara rutin membuat kernel saya sendiri untuk menghapus kode yang tidak dibutuhkan juga termasuk kode peningkatan kinerja yang sebagian besar terkait dengan perangkat keras. Sebagai contoh, saya menjalankan beberapa perangkat keras yang lebih lama dan dapat mengeluarkan beberapa peningkatan kinerja dengan mengaktifkan driver Kernel yang jarang diaktifkan seperti dukungan chipset HPT36x pada beberapa MoB lama yang memiliki built-in ini.

Contoh lain, BIG SMP di bawah Slackware adalah default dan pada Dell 2800, misalnya, akan mengkonsumsi foot print yang cukup besar untuk menjalankan hal-hal seperti GFSD (bukan sebagai modul kernel) yang, juga, menggunakan kutu CPU untuk sesuatu yang saya tidak perlu. Demikian juga untuk NFSD dan catch-all lainnya untuk menyenangkan semua mentalitas yang baik-baik saja jika Anda hanya mencoba untuk mendapatkan Linux pada kotak dan menjalankan tetapi jika Anda peduli tentang "kecepatan / memori / xxx apa pun" maka hal-hal ini penting dan bekerja .

Semua kotak produksi saya adalah kernel custom. Jika saya menggunakan perangkat keras umum seperti perangkat keras seri Dell (2800, 2850, 2900, dll ...), cukup mudah menyalin file .config kernel ke setiap kotak dan mengkompilasi kernel dan menginstalnya.

Eric
sumber
3
Saya pikir poin utama dari jawaban yang diterima adalah bahwa untuk sebagian besar perangkat keras, kinerja yang diperoleh dengan mengkompilasi kernel Anda sendiri tidak sepadan dengan waktu yang diperlukan untuk mempelajari cara melakukannya (dan mempelajari apa artinya opsi). Itu mungkin pengalaman: akan sangat bagus untuk menemukan beberapa angka pada ini.
Andres Riofrio
baik maka itu tidak jujur ​​untuk tidak menyatakan ini dalam pertanyaan asli dan kemudian menerima jawaban yang atas dasar yang Anda duga.
Eric
2
Yah, itu bukan salah saya, jawaban saya diterima. Dan sementara ya ada beberapa kasus di mana mengkompilasi kernel Anda akan membantu Anda "mencari kinerja" atau bangun dan berjalan pada mesin berdaya rendah, saya membuat asumsi bahwa pertanyaan asli sedang ditanyakan oleh seseorang yang tidak memiliki spesifik perlu sebelumnya, dan hanya ingin tahu dalam arti umum apa manfaat dari kompilasi kernel. Saya berpendapat bahwa hanya orang-orang dengan persyaratan khusus yang dapat memanfaatkan kernel tweak. Karena jawaban saya diterima, saya akan memperbaikinya untuk mengatasi alasan lebih banyak pengguna daya untuk kernel khusus
gabe.
14

Berikut adalah beberapa situasi ketika kompilasi kernel Anda sendiri akan menguntungkan Anda:

  • Kernel dengan pemuatan modul dinonaktifkan lebih aman. Ini akan mengharuskan Anda untuk memilih modul yang Anda tahu Anda butuhkan dan memasukkannya sebagai bagian dari kernel, bukan mengkompilasinya sebagai modul.

  • Menonaktifkan dukungan untuk / dev / kmem, atau melumpuhkannya dengan opsi kompiler yang sesuai adalah hal yang baik untuk keamanan. Saya pikir sebagian besar distro melakukan ini secara default sekarang.

  • Saya lebih suka untuk tidak menggunakan initrd jika memungkinkan. Mengkustomisasi kernel Anda ke perangkat keras yang di-boot-nya menghilangkan initrd.

  • Kadang-kadang versi kernel yang lebih baru akan memiliki fitur yang Anda butuhkan, tetapi ini sangat jarang hari ini. Saya ingat ketika saya pertama kali mulai menggunakan Debian, itu menggunakan 2,4 kernel, tetapi saya membutuhkan kernel 2.6 untuk dukungan udev.

  • Menonaktifkan protokol / opsi jaringan yang tidak Anda butuhkan dapat mempercepat kinerja TCP / IP Anda.

  • Menonaktifkan opsi yang tidak Anda perlukan menurunkan jejak memori kernel, yang penting dalam lingkungan RAM rendah. Ketika Anda menggunakan sistem RAM 256MB sebagai router, ini membantu.

  • Saya menemukan semua perangkat "tty" di / dev mengganggu sistem di mana saya biasanya hanya masuk melalui serial atau ssh.

LawrenceC
sumber
Semua benar. Namun, menghapus pemuatan modul dapat menyebabkan masalah saat boot: sebagian besar, jika tidak semua, distribusi saat ini hanya berasumsi bahwa modul perlu dimuat. Terakhir kali saya mematikan modul, itu menyebabkan sejumlah pesan kesalahan muncul saat proses boot Red Hat.
Mei
7

Mengkompilasi kernel Anda sendiri memungkinkan Anda untuk berpartisipasi dalam proses pengembangan kernel, apakah itu hal-hal sederhana seperti memasok ID perangkat PCI / USB untuk driver yang ada yang dapat membuat perangkat yang lebih baru bekerja untuk Anda, untuk terlibat jauh dalam keributan inti pengembangan kernel.

Ini juga memungkinkan Anda untuk menguji kernel pengembangan pada perangkat keras Anda dan memberikan umpan balik jika Anda melihat adanya regresi. Ini bisa sangat membantu Anda dan orang lain jika Anda memiliki perangkat keras yang tidak biasa. Jika Anda menunggu distro kernel, mungkin perlu beberapa waktu untuk perbaikan dari laporan masalah Anda untuk memfilter ke rilis kernel distro baru.

Saya pribadi juga suka mengkompilasi kernel saya sendiri untuk menyertakan dukungan hanya pada perangkat keras yang saya miliki. Ketika Anda menjalankan kernel distro dan melihat output dari lsmod(8), Anda melihat banyak modul dimuat untuk perangkat keras yang tidak Anda miliki. Ini dapat mencemari daftar modul, / proc, / sys dan log Anda sehingga ketika Anda mencari sesuatu hal itu dapat disembunyikan di antara kebisingan; Anda juga tidak dapat 100% yakin bahwa modul-modul itu tidak berkontribusi terhadap masalah yang Anda coba diagnosa.

camh
sumber
6

Saya menjawab kedua gabe. (Komentar saya terlalu panjang jadi saya posting sebagai jawaban).

Kecuali jika Anda memiliki tujuan yang sangat khusus (misalnya mesin yang disematkan, profil keamanan yang ketat), saya tidak melihat manfaat praktis untuk mengkompilasi kernel Anda sendiri selain untuk melihat bagaimana hal itu dilakukan. Dengan meninjau opsi secara metodis, melihat bagaimana mereka berinteraksi satu sama lain untuk membangun sistem adalah cara yang bagus untuk memahami cara kerja sistem Anda. Sungguh menakjubkan apa yang Anda temukan ketika Anda mencoba untuk menghapus komponen yang tampaknya tidak memiliki tujuan untuk tugas yang Anda coba selesaikan.

Namun berhati-hatilah - mengapa melompat ke lubang kelinci tidak diragukan lagi menyenangkan, itu akan menyedot lebih banyak malam dan akhir pekan daripada yang Anda pikir mungkin!

gvkv
sumber
3

Di tempat kerja, kami menggunakan kernel linting tangan untuk menerapkan tambalan di luar pohon seperti vserver dan unionfs.

Di rumah, saya mengkompilasi kernel linting untuk menemukan komit yang memperkenalkan bug yang saya alami. Setelah saya selesai melakukannya, saya mungkin akan menempel pada kernel linting tangan sampai bug diperbaiki dalam distribusi saya (Debian), pada titik mana saya akan kembali ke kernel mereka lagi.

jmtd
sumber
2

Utas ini sudah tua namun masih berlaku hingga hari ini seperti saat pertanyaan diajukan!

Jawabannya adalah: Anda mengkompilasi kernel linux pilihan Anda sesuai kebutuhan dan persyaratan Anda.

Banyak skenario yang valid:

  1. Anda adalah seorang insinyur dan membutuhkan bangunan Anda untuk memenuhi persyaratan / persyaratan kinerja dan keamanan untuk sistem Anda, Anda mengkompilasi ulang untuk memenuhi dan / atau melampaui kriteria yang ditentukan.

  2. Anda adalah pengguna normal dan memiliki sistem lama yang Anda ingin terus berjalan selama Anda bisa, Anda mengkompilasi ulang untuk menambah / menghapus komponen untuk menjaga sistem lama Anda dioptimalkan.

  3. Anda adalah pengguna normal dengan perangkat keras tercepat terbaru dan memiliki lebih dari cukup memori / RAM. Tidak perlu mengkompilasi ulang tetapi Anda masih bisa jika Anda tertarik untuk belajar lebih banyak tentang sistem Anda.

  4. Anda hanya ingin menjadi pengguna harian Microsoft dan / atau Mac, jangan mengkompilasi ulang dan ikuti saja pembaruan dari distro hulu Anda.

  5. Biarkan skenario datang :-)

Tidak seperti pengguna Mac / Windows, Linux menyediakan pilihan. Pilihan untuk membuatnya mudah atau mengoptimalkan sistem sesuai kebutuhan Anda.

pengguna4565
sumber
1

Untuk sebagian besar penggunaan kernel generik baik untuk hampir semua perangkat keras. Selain itu mereka biasanya berisi (ed) tambalan khusus distribusi sehingga kompilasi kernel Anda sendiri dapat (mungkin) menyebabkan masalah.

Reson untuk mengkompilasi kernel Anda sendiri adalah:

  • Anda menggunakan distro berbasis sumber sehingga tidak ada kernel 'generik'
  • Anda adalah pengembang kernel dan Anda mengembangkan kernel
  • Anda harus mengkustomisasi kernel misalnya untuk perangkat tertanam dengan hard drive yang sangat terbatas
  • Beberapa driver tidak dikompilasi dalam (kasus yang sangat jarang)
  • Anda ingin menambal kernel DAN Anda tahu apa yang Anda lakukan
  • Anda ingin mempelajari cara mengompilasi kernel

Jika saya tidak menggunakan distro berbasis sumber saya tidak akan mengkompilasi kernel sama sekali.

Maciej Piechotka
sumber
1

Kasus lain selain banyak yang disebutkan di sini untuk memiliki kernel yang dikompilasi khusus adalah menyiapkan lingkungan boot jaringan khusus di mana pemuatan modul tidak layak dan Anda harus membagikan kernel yang berfungsi penuh ke mesin tertentu untuk tugas tertentu.

Caleb
sumber
1

Saya terkejut bahwa tidak ada yang menyebutkan alasan ini untuk mengkompilasi kernel kustom:

karena Anda ingin menggunakan kompiler C / c ++ yang berbeda. GCC cukup bagus untuk mengkompilasi kernel linux. Tapi ada kompiler yang jauh lebih unggul di luar sana! Optimalisasi GCC sedikit di belakang kompiler C / C ++ Intel. Dan Intel memasok pustaka primitif kinerja, dan alat vtune, yang keduanya sangat diperlukan dalam memproduksi kernel linux kinerja tinggi. Anda hanya bisa sejauh ini dengan GCC dan G ++. Praktis apa pun yang Anda lakukan hasilnya akan dibatasi oleh kompiler. Jadi, saya menggunakan kompiler Intel dan pustaka kinerja. Agak besar - 1.5GB unduhan, tetapi itu memberi sedikit gambaran tentang apa yang semuanya terkandung dalam kompiler yang baik.

Kompiler C / C ++ Intel tersedia gratis untuk penggunaan nonkomersial. Tetapi lebih mudah untuk mencari halaman unduh kompiler Intel c ++ lisensi nonkomersial untuk mencari situs web Intel. Saya biasanya tidak menggunakan GCC / G ++ untuk apa pun. Dan Anda tidak perlu menjadi seorang programmer. Anda cukup mengatur lingkungan Anda dan mengubah dua baris di file make untuk menunjuk ke kompiler Intel.

Maka Anda bisa mendapatkan kecepatan yang serius!

SwanSword
sumber
-1

Jika Anda ingin menginstal Linux pada perangkat keras yang sangat spesifik, katakanlah lebih eksotis daripada DS , Anda harus melakukan kompilasi silang kernel Anda sendiri.

mouviciel
sumber