Kompajlirati kernel ? Kako i zasto...

poruka: 4
|
čitano: 4.260
|
moderatori: pirat, Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
10 godina
protjeran
offline
Kompajlirati kernel ? Kako i zasto...

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.

 

 

Ludwig van Beethoven, your beautiful music lives forever
 
6 0 hvala 5
10 godina
protjeran
offline
Kompajlirati kernel ? Kako i zasto...

Sto se tice Networka, mozemo ga zaista ubrzati te optimizirati kako hocemo, narocito je dobra stvar za linux servere jer kad vidim kakve sve Network i Security opcije u kernelu postoje pitam se zasto ljudi koji koriste linux kao server ne kompjliraju kernel. Dobro, vjerojatno su server distribucije vec defaultno podesene za to ali ako ces servirati kvalitetno nema do manualne konfiguracije kernela.

Recimo dhcpcd klijent se po defaultu na genericnom kernelu starta oko 4 sekunde i to sve zbog opcija u networking koje nam nece trebati ni u slucaju servera, ni u slucaju desktopa.

Za desktop sam rekao da je najbolje sve maknuti osim osnovnih potreba za spajanje na net i to moze dotjerati dhcpcd da se starta za manje od sekundu i tokom rada optimiziranije radi. Jos mozemo odabrati i izmedju klasicnoga ipv4 i novoga ipv6 protokola. ipv6 je buducnost dok ipv4 pomalo nestaje, kernel ih po defaultu koristi oboje sto mi ne moramo ako ne zelimo.

 

Sto se tice servera, mozemo u detalje podesiti pakete koji se filtriraju i nacin na koji se filtriraju, sto ce za razliku od genericnog kernela poboljsati optimizaciju networka. Takodjer ce i security utjecati na performanse jer kernel podrzava mnogo slozeniji security nego ga normalni ili server korisnici koriste. Mislim da ni jednima nista osim defaultnog security tu ne treba pa se u "Security options"  konfiguracijske ploce mogu sve linije disablati i ostat ce samo osnovni linux security.

U slucaju da nam treba ozbiljniji security tip, taj security options nam bez dodatnih konfiguracija opet nista ne znaci, te je u tome slucaju najbolje iskoristiti kernel patch za security, u gentoo overlay poznat pod imenom "Hacking gentoo" te ga emergati sa "grsecurity" i "pax" useflagovima koristeci SELinux gentoo profil.

E zato je Gentoo genijalna distra za servere jer mozemo server vrtiti na SELinux profilu sa savrseno slozenim kernelom i dobiti jedan ekstremno stabilan i brz server ali predpostavljam da to nije lako jer koristiti SELinux profil na gentoo moze biti zeznuto i bolno, nisam probao ali znam da je kompliciran zadatak jer cijeli security ocekuje od administratora da ga manualno podesi.

Druga dobra stvar za servere su moduli, iako kod kompjlacije kernela za osobne potrebe nikad ne koristim module i smatram da ni jednom normalnom korisniku oni ne trebaju, stovise, usporavaju mu kernel, oni mogu jako utjecati na performanse i vrijeme butapa sto je za servere najbitnije da se sto prije startaju nakon restarta.

Za to mozemo podrzati initramfs i smijestiti security dio kernela u odredjen dio memorije, a ostatak kernela u drugu memoriju, time mozemo osigurati kernel od exploitova u memoriji koji obicno krenu iz dijelova kernala koji se ne ticu security, zapravo security kernela mozemo bolje zastititi prebacivsi taj dio u zaseban memorijski modul.

U kernelu sve sto nam treba za rad servera staviti kao module sto ce zauzeti na velicini initramfs-a i odrzati kernel image manjim, "embeded system" konfiguracijom cemo kernel podesiti manji od 400kb sto je moguce jer sve bitne stvari zauzimaju moduli koji se ne nalaze u kernel image vec u initramfs. Pa cemo konfiguirati linux bios i bekapirati osobni bios na racunalu te na mijesto njega snimiti linux bios koji mozemo sloziti da ima oko 400kb slobodnog prostora. Ako kernel slozimo u tih 400kb, mozemo kopirati taj kerenel image direktno u bios te direktno ga butati koristeci memoriju a ne hard disk racunala.

To je ono sto ce dati najbolje moguce vrijeme jednom serveru potrebno za restart, kernel kojega bios buta koristeci memoriju moze startati server i sve potrebne mu module u svega 2 sekunde, ako je dalje apatche ili sto vec optimiziran kompajliranjem, mozemo postici da nam server dodje u funkcionalnost vec cetvrtu sekundu nakon restarta (a takav server koliko sam primjetio koriste samo microsoft i google, google koristi custom linux server sto znaci da ima custom kernel, pa ne kompajliraju u google servere bez veze, bas zato im je domena uvijek dostupana i nikad ne steka)

 

Gentoo je definitivno najbolja distribucija za server, medjutim problemi dolaze kod vise umrezenih servera jer treba vremena da se za svaki kompajlira, ali i to nije problem ako server sustav slozimo u stage 4 sa vec konfiguiranim kernelom i onda na svakome racunalu u mrezi samo prekonfiguiramo razlike u hardware te pustimo da se kompjalira i kernel i cijeli stage 4 sa istim optimizacijskim opcijama a tu instalaciju vrlo lako obavljamo samo sa jednog racunala u mrezi, tako da kompajliranje servera na jedno racunalo uzme oko 4 sata dok na 20+ racunala uzme samo 5 sati. Drugi problem gentoo kao servera su njegovi administratori gotovani koji hoce sve na gotovo (ignorirajuci propopuste u stabilnosti i performansama svoga servera koje tim dobivaju) umijesto da se ugledaju na google.com ili microsoft.com. i manualno podese kernel.

Tu opet u igru ulazi gentoo jer ima najefikasnije i najbolje apdejtanje, sto god da nam treba samo iskoristimo useflag i cijeli server ce se samo jednom komandom apdejtati, prekompajlirati tocno za to sto nam treba bez tocno onoga sto ne zelimo, to ga isto cini odlicnom server distribucijom jer mozemo apdejtati server kad hocemo, kako hocemo i to na najjdenostavniji moguci nacin. jednostavnije i puno kvalitetnije pa i sigurnije je apdejtati server u gentoo nego u Debian server distribuciji.

 

 

Ludwig van Beethoven, your beautiful music lives forever
Poruka je uređivana zadnji put sri 4.9.2013 8:24 (layman).
 
6 0 hvala 2
13 godina
neaktivan
offline
Kompajlirati kernel ? Kako i zasto...

Predlažem sticky!

Ja sam Plavi zmaj.Form the future!Masa,društvo većina,''normalni'' su ništa bez onih pojedinaca koji ih čine.Moj blog:http://thebluedrag.blogspot.com/
Moj PC  
2 0 hvala 0
10 godina
protjeran
offline
Kompajlirati kernel ? Kako i zasto...

Evo jedne odlicne knjige za one koji zele bolje upoznati linux kernel.

 

http://www.makelinux.net/books/lkd2/

Ludwig van Beethoven, your beautiful music lives forever
 
0 0 hvala 2
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice