Apa manfaat yang bisa saya lihat dengan mengkompilasi kernel Linux sendiri? Apakah ada efisiensi yang dapat Anda buat dengan mengubahnya ke perangkat keras Anda?
Apa manfaat yang bisa saya lihat dengan mengkompilasi kernel Linux sendiri? Apakah ada efisiensi yang dapat Anda buat dengan mengubahnya ke perangkat keras Anda?
Jawaban:
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:
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.
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:
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.
bisect
untuk menemukan di mana bug diperkenalkan ...
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
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.
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.
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.
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!
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.
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:
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.
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.
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.
Anda hanya ingin menjadi pengguna harian Microsoft dan / atau Mac, jangan mengkompilasi ulang dan ikuti saja pembaruan dari distro hulu Anda.
Biarkan skenario datang :-)
Tidak seperti pengguna Mac / Windows, Linux menyediakan pilihan. Pilihan untuk membuatnya mudah atau mengoptimalkan sistem sesuai kebutuhan Anda.
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:
Jika saya tidak menggunakan distro berbasis sumber saya tidak akan mengkompilasi kernel sama sekali.
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!
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.