Saturday, November 24, 2012

Compile dan Optimasi Kernel Linux

Pertama adalah mendapatkan kernel source, bisa langsung dari http://kernel.org/ atau dari repo distro yang anda pakai, umumnya letaknya di /usr/src/ Jika anda menggunakan kernel vanila dari kernel.org, letakkan di folder tersebut dan perlu diingat pastikan free space di partisi tersebut cukup longgar untuk melakukan kompilasi, jika opsi debugging enabled ketika compile kernel, ruang yang dibutuhkan mencapai 3 GB. Hal ini bisa disiasati jika partisi anda memang sudah mepet, gunakan symlink, caranya? Cari sendiri gan.. :p Ya prinsipnya kernel source tadi anda letakkan di partisi lain misal /home/ baru kemudian buat symlink dari /usr/src/ ke folder kernel source tersebut, jangan lupa file kernel yang udah didownload diekstrak dulu, jangan tanya lagi gimana caranya.. :p lewat GUI aja beres kok.. ;)

Oke setelah terekstrak dan tempat sudah beres, kemudian masuk ke folder kernel source tersebut. Oiya jangan lupa kita lakukan ini via console dan biar tambah mulus bertindak sebagai root, meskipun yang butuh akses root cuma tahap tertentu aja, tapi ga salah juga toh jika dari awal sudah sebagai root? :)

Dan jangan lupa tools2 yang dibutuhkan, intinya bagian development tools, lebih tepatnya kernel development. Jika manual 1 per 1:
-> gcc
-> make
-> binutils
-> ncurses-devel
beberapa distro membuat binutils menjadi 1 dengan gcc.

Oke setelah pemanasan dan persiapan sudah cukup, berikutnya adalah step by step mulai dari konfigurasi hingga compile dan install kernel. Dan perlu digaris-bawahi, asumsi adalah posisi kita di folder source kernel, jadi perintah2 yang ada berikut ada yang menggunakan relative path, mohon diperhatikan.

1) Ambil dahulu file konfigurasi kernel yang bersangkutan, bisa dicek di /proc/config.gz dengan perintah zcat:
# zcat /proc/config.gz > .config
perhatikan baik2 ya, itu file [dot]config, ada karakter titik. Cara lain jika configurasi kernel anda tidak mengijinkan mengambil config dari kernel, bisa ambil dari /boot/ biasanya di sana juga diletakkan konfigurasi kernel yang sedang dipakai, filenya diawali dengan config, copy-kan ke folder source dengan nama .config

2) Konfigurasi kernel, jalankan:
# make menuconfig
Langsung keluar dan simpan tanpa konfigurasi juga tak mengapa, misalkan hanya ingin mencoba kernel vanila dan konfigurasi disesuaikan dengan config kernel dari distro. Untuk konfigurasi dibahas di komentar.

3) Compile kernel, perintahnya sederhana saja dan ini berlaku hampir di semua distro kecuali beberapa seperti slackware berbeda. Saya memakai cara ini untuk compile kernel di opensuse, fedora, mandriva dan turunannya, untuk debian based saya sendiri belum nyoba, mungkin bisa googling. Atau dicoba saja langkah yang sama dengan yang biasa saya pakai, karena langkah2 ini saya baca dari dokumentasi kernel.
# make
# make modules_install
# make install
bisa juga disambung supaya dieksekusi berurutan jadi:
# make && make modules_install && make install
Jika anda melakukan compile kedua dstnya di source yang sama, ada baiknya anda jalankan
# make clean
terlebih dahulu, supaya bersih dan proses compile kernel berjalan lebih cepat.

Khusus slackware:
# make bzImage
# make modules
# mv /boot/vmlinuz /boot/vmlinuz.old
# cat arch/i386/boot/bzImage > /boot/vmlinuz
# mv /boot/System.map /boot/System.map.old
# cp System.map /boot/System.map
# make modules_install

tambahkan entry kernel yang lama di /etc/lilo.conf untuk jaga2 jika kernel baru gagal. Tentu saja dari perintah pada slackware itu anda bisa menebak mana file kernel image-nya untuk ditambahkan di lilo.. :) kemudian jangan lupa jalankan:
# lilo
untuk mengeksekusi konfigurasi lilo.conf tadi

jika tidak ada pesan error dan output terlihat bahwa kernel terinstall di boot-loader, maka selamat anda telah sukses meng-compile dan meng-install kernel

Tips n trik compile kernel:
Jika processor anda multi-core atau SMP (Symetric Multi Processor), manfaatkan semua core untuk mempercepat proses kompilasi, yaitu dengan opsi -jn dengan n=2,3,4,... yang artinya menjalankan multiple job sebanyak n.

Misal ingin multiple job 4, maka perintah compile menjadi:
# make -j4 && make modules_install -j4 && make install

Adapun angka n, idealnya disesuaikan dengan jumlah core processor anda, misal Core i3 yaitu 2 core maka dicoba -j2, meskipun bisa saja -j4 atau lebih. Hanya saja perlu dipertimbangkan ketika compile kernel disambi aktivitas di desktop misal browsing, ya tidak perlu sampai berlebihan seperti itu.. :)

General Setup --> Local version...:
Berguna untuk penamaan kernel, string akan mengikuti versi kernel, misal anda ingin namakan kernel dengan tambahan -PAE, isikan saja di entry tersebut string "-PAE" Nanti di nama kernel akan ada tambahan "-PAE"

General Setup --> Kernel Compression Mode:
hanya mode/algoritma kompresi kernel

General Setup --> Control Group Support:
Sejak kernel 2.6.37 atau 2.6.38 ada baiknya enable saja. Ini pernah dibahas yaitu sebuah patch kode kernel yang kata om Linuz meningkatkan performa Linux secara ajaib, signifikan, terutama ketika multi-tasking

Processor Type and Feature --> Processor family:
optimalisasi processor berdasarkan typenya. Jika berminat, sesuakan dengan processor anda. Misal Turion X2 bisa mencoba optimalisasi K8/Athlon/Opteron, Core 2 Duo juga ada sendiri. Tapi jika ragu biarkan saja defaultnya, umumnya distro sekarang set di Pentium Pro (686)

Processor Type and Feature --> Preemption model:
model manajemen proses, apakah diijinkan menginterupsi kode2 kernel atau tidak, atau disediakan poin2 tambahan untuk interupsi kode kernel.
1) Server mode: Sama sekali tidak diijinkan untuk interupsi kode2 kernel.
2) Desktop: Disediakan point untuk interupsi kode kernel, mengijinkan desktop lebih responsif tapi tidak mengganggu kode kernel yang kritis.
3) Low-latency desktop: Jika latency dan responsif adalah segalanya. Tidak disarankan jika core processor terlampau banyak, misal 4 ke atas. Justru menurunkan performa. All around ada opsi nomor 2, bagus untuk semua kondisi dan spek kompi

Processor Type and Feature --> High Memory Support:
Di sinilah letaknya yang dimaksud PAE, yaitu fitur yang memungkinkan arsitektur 32 bit mengalamatkan memori lebih dari 4 GB (efektif 3GB), yaitu hingga 64 GB. Jika anda tidak berniat memakai RAM besar 4 GB lebih, baiknya pilih opsi di 4 GB saja, karena kode PAE sendiri secara teori overhead performa kernel meskipun tidak signifikan. Selain itu kode PAE menyebabkan penggunaan memori pada mesin 32 bit sedikit lebih boros

Processor Type and Feature --> Timer Frequency:
Ada pilihan 100 Hz, 250 Hz, 300 Hz, 1000 Hz. Belum tentu 1 setingan bagus di kompi yang lain. Dan juga tergantung kebutuhan aplikasinya. Jika kompi anda tipikal server atau desktop dengan coreyang ekstra banyak (4 atau bahkan lebih), setngan timer yang terlalu tinggi justru menurunkan performa secara signifikan, saya merasakan di processor 4 core jika timer 1000 Hz justru ngelag dan performa menurun, tapi menjadi perkasa ketika timer 300 Hz, 250 Hz atau 100 Hz (tested) :)

Tapi jika anda sering bermain di aplikasi video dan audio editing, seting minimal 300 Hz atau bahkan 1000 Hz, karena aplikasi itu butuh banyak poin interupsi untuk akurasi mengolah suara dan video. Bahkan aplikasi DCC tertentu tidak mengijinkan running jika timer terlalu rendah misal 100 Hz.

Slackware lama? Versi 12 dan ke bawah? Tentu power management processor tidak berfungsi. Di sini jawabannya:Power Management and ACPI options --> CPU Frequency scaling --> default CPU freq governor:mengatur policy/governor frequency CPU, apakah full speed, selalu clock tertinggi, efeknya di laptop batre boros dan panas, conservative/power saving, selalu lowest clock, userspace butuh aplikasi user namanya cpu-freq, ondemand, menggunakan driver processor yang sesuai untuk otomatis pengaturan clock dinamis. Seting ke ondemand saja, dan jangan lupa driver PM processor kita enabled juga atau jadikan module.

setelah compile kernel image dan module (/lib/modules) membengkak? Matikan opsi kernel debugging di:Kernel Hacking --> Kernel debugging set disabled. Selain itu memang kode2 debugging ada overhead performa


By Trias Mukti Kuncoro di Ayo Belajar Linux