it-swarm-id.com

Apa manfaat mengkompilasi kernel linux Anda sendiri?

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

107
jjclarkson

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

Anda mempelajari cara mengompilasi kernel linux Anda sendiri.

Ini bukan sesuatu yang Anda perlu lakukan untuk lebih banyak kecepatan/memori/xxx apa pun. Merupakan hal yang sangat berharga untuk dilakukan jika pada tahap itu Anda merasa berada dalam perkembangan Anda. Jika Anda ingin memiliki pemahaman yang lebih dalam tentang apa yang dimaksud dengan "open source", tentang bagaimana dan apa bagian kernel yang berbeda, maka Anda harus mencobanya. Jika Anda hanya ingin mempercepat waktu booting Anda dengan 3 detik, lalu ... 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 sesuai untuk mengkompilasi kernel Anda sendiri (seperti yang ditunjukkan oleh 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 kebanyakan situasi pengguna.

75
gabe.

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 apa pun 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 bisa 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.

36
miguel.de.icaza

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 sebanyak mungkin perangkat keras; pada saat boot mereka mendeteksi perangkat keras mana 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 terbuang Anda dapat membebaskan

30
Michael Mrozek

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

Ini sepenuhnya salah. Saya secara rutin membuat kernel sendiri untuk menghapus kode yang tidak dibutuhkan dan juga menyertakan 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 di 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 khusus. 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 serta menginstalnya.

24
Eric

Berikut adalah beberapa situasi di mana 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.

  • Terkadang 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 256MB RAM sistem sebagai router, ini membantu.

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

14
LawrenceC

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 dapat disembunyikan di antara kebisingan; Anda juga tidak dapat 100% yakin bahwa modul-modul itu tidak berkontribusi terhadap masalah yang Anda coba diagnosa.

7
camh

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

Kecuali jika Anda memiliki tujuan yang sangat khusus (mis. Mesin tertanam, 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 kembali lebih banyak malam dan akhir pekan daripada yang Anda pikir mungkin!

6
gvkv

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 tetap menggunakan kernel linting tangan sampai bug diperbaiki dalam distribusi saya (Debian), pada titik mana saya akan kembali ke kernel mereka lagi.

3
jmtd

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 mempermudah atau mengoptimalkan sistem sesuai kebutuhan Anda.

2
user4565

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

1
Caleb

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

karena Anda ingin menggunakan kompiler C/c ++ yang berbeda. GCC cukup bagus untuk mengkompilasi kernel linux. Tetapi 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 memberikan 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!

1
SwanSword

Untuk sebagian besar penggunaan kernel generik baik untuk hampir semua perangkat keras. Selain itu mereka biasanya berisi (ed) tambalan khusus distribusi sehingga mengkompilasi 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 menyesuaikan 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.

1
Maciej Piechotka