Primjecujem da dosta ljudi smatra kernel za sitnicu koju ne treba posebno dirati jer ona kao ne igra ulogu u stabilnosti i optimizaciji racunala.
Kernel jest sitnica, samo koji Mb ali on JE SVE. Windows nije operativni sustav, to je manestra microsoftovih aplikacija kojima upravlja operativni sustav a to je kernel. Operativni sustav windowsa je kernel32, tako i u linuxa, unixa.
Kernel obavlja zadacu da komunicira sa hardwerom i aplikacijama (koje on pokrece !) te iste one medjusobno preko kernela komuniciraju sa hardware. Sve je preko kernela jer on je osnova svega, ona je baza koja hardware "cini zivim" i
govori (upravlja) aplikacijama kako da na tom hardware rade.
Znaci da je zadaca kernela ta da se, nakon sto ga je pokrenula memorija pod biosom sa zapisa na disku ,odarhivira u memoriju, pocne je koristiti te u njoj lodati sto treba. Nakon toga on ostaje u memoriji i glavni je faktor pokretac i upravljac svega sto radimo na racunalu.
Pa zasto ga onda dirati ? S obzirom da je u potpunosti modularan ta njegova zadaca daje jasan odgovor na to pitanje.
Mi kernel mozemo potpuno podesiti i u potpunosti odrediti put kojim ce on koristeci memoriju upravljati hardverom i baznim sustavom, pa na kraju i desktop sustavom. Dobivamo tehnicki savrseno racunalo na kojem aplikacije i hardware rade bas onako kako trebaju slozno raditi, bas tako od svih milijarde mogucih tj genericnih kombinacija.
Kad se trazi stabilnost i optimiziranost, kernel je prva tocka od koje moramo krenuti jer on je glavni faktor tomu dvoje.
Nigdje nema tutorijal ili ozbiljnije upute za kompajliranje kernela. Tj ima i svodi se na to da se konfiguria i zatim komjalira tako i tako po uputama ali konfiguiranje je tu najveci problem i za njega nema uputa. Nema smisla raditi upute za to, ali se mogu napomenuti one neke kljucne stvari iz gomile.
Kako bi sto bolje argumentirao zasto je kernel bolje kompjalirati, onako povrsno cu svojim iskustvom pojasniti kljucne stvari i cime ce one kompajlacijom rezultirati, i sve to proci bitnijim screenshotovima koji prikazuju kako samo podesio najbitnije stvari za potpuno minimalan, stabilan i brz kernel koji ce raditi na osnovu gotovo svacijih amaterskih potreba.
Ostale stvari o kojima necu govoriti, manje bitne mozete vidjeti kako sam podesio u konfiguraciji kernela koju apludam ovdje.
Prvo cemo prije konfiguracije kernela iz source (nikakve rekompajlacije u binarnim distrama) mozda pozeljeti patchirati taj kernel nekim hayabusa patchevima. To je jednostavno samo treba pronaci patcheva od ostalih korisnika i patchirati
Tu je samo jedan od mnogih razloga zasto je gentoo naj distra jer kod nje samo iskoristimo overlay koji hocemo, recimo kernel po zelji i use flagovima odredimo koje ce patcheve podrzavati a koje ne, time utijecemo opcenito na opcije konfiguiranja tog kernela. Zatim normalno emerge komandom skinemo taj source koji nije u repository (neprovijeren ili nedefaultan) te ga ebuild odmah patchira na osnovu useflaova i konfiguracijska ploca je spremna.
slika 1
Ovako izgleda ta konfiguracijska ploca, naslovnica menuconfiga, tu su sve njegove grane kategorizirane u par ovih osnovnih linija.
slika 2
General setup.
Ovaj direktorij je priprema same konfiguracijske ploce i kernela za daljnje konfiguracije. Tu cemo odrediti one osnove koje ce povuci svoje dependencyie po cijeloj konfiguracijskog ploci, nazalost ako to radimo prvi puta necemo znati kako da pripremimo kernel za konfiguiranje jer ne znamo sto nas ocekuje u daljnjoj konfiguraciji, zato treba izvijezbati konfiguiranje kernela i nece ici lako prvi puta nikome.
Ovdje su cu spomenuti "enable standard kernel features" i "embeded system" koje su nepreporucene ali mocne podrske. One ce nam po cijelom kernelu otvoriti opcije koje nisu namijenjene da se diraju jer njima se gubi ta neka garancija stabilnosti i podrska za reportiranje bugova, tj nakon sto ih iskljucite, nitko vam vise osim vas samih ne moze pomoci u nicemu cak niti vas linux i aplikacije.
Idemo odpocetka na velicinu kernela, a debuging kodova u kernelu i aplikacijama je gotovo jednako ko i svih ostalih sto cini kod vecim i sporijim za izvodjenje.
Ostale opcije u General setup su takodjer vrlo bitne ali cu ih izostaviti i necu puno o njima jer sve je i objasnjeno u kernelu ali onim stednim jezikom kojeg je nekad tesko razumijeti pa ostaje screenshot da se vidi kako sam ja sebi podesio i aploudani .config u kojem je sve prikazano.
"enable loadable module support"
je direktorij nakon General setup, nebitan jer u njemu nam samo treba jedna podrska za "module unload"
"enable the block layer"
... ovdje sam se jednom zeznuo pa maknuo podrsku za blockove vece od 2TB, ko bi rekao da ta opcija treba rootfs-u za read-write mod na ext4 bez koje necemo sa nasim linuxom moci nista korisno nakon dekompresiranja kernela.
Tu nam svakako treba block layer, i za tipove particija nam ne treba nista osim standardne koju i imamo. I pod I/O scheduler ja uvijek odaberem samo CFQ
slika 3
"Procesor type and features"
E ovdje su vec kvalitetne opcije, narocito ako smo u "General setup" podrzali one dvije navedene. Ovdje se nalaze vrlo bitne opcije za performanse naseg kernela i njegovom koristenju memorije i procesora.
Kako ovdje postici sto bolje kernel performanse ?
Nakon sto bios pokrene disk i zapis na disku, krece dekompresiranje kernela u memoriju a bios ostaje u pozadini (predodredjenom dijelu memorije) raditi. Stoga cemo ovdje podesiti da kernel biosu da tocno toliko i toliko memorije za koristdenje, da je ne chekira po defaultu svakih 64 sec od korupta (jer znamo da nismo imali susrete sa korupcijom memorije na vlastitom racunalu). Odredit cemo tocnu kolicinu memorije koja je potrebna za kolicinu kernela dekompresiranog tj ne kernel slike. Naredit cemo kernelu da stalno bude u tom dijelu memorije i da se ne premijesta kako bi bio sto fiksniji i sto otporniji na nekakve korupte pod uvijetom da je memorija ispravna (memcheck).
Iskljucit cemo sve faktore kojima kernel sam po defaultu po memoriji ceka responde aplikacija jer cemo biti sigurni da iste respondiraju na tocno taj mali dio memorije di je kernel.
Zatim cemo kompresirati kernel po zelji (ja uvijek odaberem LZO jer je najbrzi ali rezultira vecim kodom), iskljuciti crash dumpove kernelu, podesiti procesor i njegove podrske za jezgre i arhitekturu, te mozemo maknuti zastitu na procesoru koja mu konstanto oduzima performanse i daje na velicini kernela, ali bilo bi bolje prije testirati procesor.
Tu cemo savrseno odrediti kernelu nacin rada i arhitekturu, procesorsku podrsku te upravljanje memorijom koju on koristi tokom rada.
Dovoljno je samo citati i malo istrazivati i sve cemo od toga podesiti kako hocemo.
"Power manager and acpi options"
Cisto cu je prskociti jer je nebitna, vazno je sto manje stvari podrsati samo one neophodne...
Bitno je samo podrzati "suspend to disk" jer moze dati na performansama i procesor te thermal zone, eventualno adapter i battery u slucaju laptopa, ostalo je sve vise manje beskorisno.
"Bus options"
Ovdje po potrebi ali vecinom je najbitnije PCI expres kojeg treba podrzati i samo njega, nista vise, sve ostalo su opcije za logove, errore etc.
Ja uvijek ovdje podesim da mi kernel sam ucita PCI uredjaje bez koristenja biosa.
Ovaj tvik daje puno za performanse jer kernel kad ucitava PCI uredjaje prema defaultu on prvo krence od ucitavanja iz mmconfiga, ako ne nadje podatke o uredjajima ide zatim na direktno ucitavanje i na kraju koristi bios da ucita uredjaje.
Mi ako odaberemo opciju "direct" ubrat cemo svakako jos koju performansu ako bude sve u redu a bit ce jer kernel cemo sloziti i vise nego sposobnim da sam ucita uredjaje.
Takodjer mozemo dobiti na performansama kofiguracijom kernel active state-a, koji je uvijek defaultan po biosu bez obzira koristili mi performance ili powersave u radu.
"Executable file formats / emulations"
Takodjer sve dumpove i gluposti maknuti, potrebne su samo podrske za ELF i MISC binaries.
"Networking support"
slika 4 "Networking options"
Ko bi rekao ali ovdje mozemo dosta u brzati network sustav micanjem svih podrska koje mu trebaju za nekakva automountanja, servere, local network, etc. Ako se spajamo zicno automount (dhcpcd) nam treba, ako se spajamo wirelessom pa koristimo neki manager za to ne treba nam, ako se manualno spajamo bezicno po konfiguracijama, opet nam treba dhcpcd u automountu. Multitaskinge, filtriranja paketa, sve to mozemo slobodno maknuti, filtriranje paketa nam ne treba ako smo sigurni sto radimo, a daje na network performansama.
U Networking support nam osim stvari u Networking options ne treba vise nista i sve mozemo slobodno maknuti osim eventualno opcija za Wireless i to po mogucnosti konfiguirati sto jednostavnije i minimalnije.
Evo, kroz pola kernel konfiguracijske ploce sam onako povrsno prosao i naveo kljucne stvari za njegovu optimizaciju i stabilnost pa i performanse. Ostaje mi jos druga polovica u kojoj ima dosta bitnih opcija ali mi se veceras neda pa cu sutra u drugom postu zavrsiti. I treba svakako pojasniti kakav je u tome svemu generican kernel koje koriste linux distribucije pa ga usporediti jer s obzirom sto taj kernel svega ima i kakav kernel moze biti, generican kernel
je ogromno neoptimizirano, sporo, tromo smece, a vidjet cete i zasto.
Nadam se da cu ovim odgovoriti na pitanja tipa: koji je smisao kompjlirati kernel. Da cu mozda i nekom pomoci da se lakse snadje u kernelu. I da cemo svi skupa mozda i odrzati temu raspravama o nekim patchevima, osobnim iskustvima, etc pa svi skupa opet nauciti nesto vise.