Op 17 december 2003 was het dan zover en zag kernel 2.6 het licht. Deze brengt veranderingen, nieuwtjes en diverse verbeteringen - van het build-systeem en de module loader tot NUMA-support. In de dagelijkse praktijk moet je echter met enkele zaken rekening houden.
De populariteit van Linux is onder andere te danken aan het feit dat het op alles loopt wat een nul van een een kan onderscheiden. Of dat nu een desktop-computer of een notebook, een embedded device of een multiprocessor-server is: de nieuwe kernel 2.6 brengt voor al deze toepassingsgebieden verbeteringen. Mobiele gebruikers profiteren van ACPI en de ondersteuning van Speedstep en PowerNow, grote servers van Native POSIX Threads (NPTL) en NUMA (Non-Uniform Memory Architecture). Een nieuwe scheduler, grootschalige verbeteringen op het gebied van I/O en geheugenbeheer en onderbreekbare kernelcode zorgen voor een kleinere latentietijd bij het afwerken van interrupts en taak-wisselingen. Dit maakt niet alleen "soft" real-time applicaties voor in het embedded segment mogelijk, maar zorgt op de desktop ook voor soepelere sound- en videostreaming. Dankzij slankere code schijnt de ressourcehonger ondanks dit alles niet gestegen te zijn, integendeel: onder hoge last reageert het systeem met de nieuwe kernel vlotter.
Tijdens de twee jaar durende arbeid aan kernel 2.5 is nauwelijks een subsysteem onaangetast gebleven. Op veel plekken zijn centrale kernelstructuren aanzienlijk bewerkt of helemaal opnieuw geschreven. Dit heeft Linux onder andere een nieuw, uniform device-model bezorgt, zijn interne limieten verwijderd en is de schaalbaarheid verbeterd. Daarnaast is de kernelcode in zijn geheel overzichtelijker en gemakkelijker te onderhouden geworden -- een belangrijk aspect met het oog op de toekomst.
Niet alle nieuwtjes bereiken met kernel 2.6 voor het eerst de gebruiker: Linux-distributeurs hebben al lang sommige tijdens het werk aan de ontwikkelkernel 2.5 ontstane nieuwtjes naar hun eigen 2.4-kernel teruggeport - SuSE bijvoorbeeld de ACPI-code, Red Hat de Native POSIX threads. Enkele van de nieuwe 2.5-features, bijvoorbeeld de ondersteuning van Athlon-64-processors, zijn ook in de officiële kernel 2.4 overgenomen.
Met versie 2.6 krijgt de Linux-kernel een nieuw, uniform
device-model. Alle apparaten worden intern in een lijst van
kobject-structuren weergegeven, die over een nieuw
pseudo-bestandssysteem - het "system filesystem" sysfs - voor de
gebruiker toegankelijk zijn: na een mount -t sysfs none /sys
vind je in /sys (bijna) alles, wat de kernel over de aanwezige
apparaten en de bijbehorende divice-driver weet. Voor wie sysfs wil
onderzoeken : op [1] staan eenvoudige userland-tools klaar.
Het nieuwe device-model maakt een onderscheid tussen bussen, devices en klassen. De relaties tussen bussen en devices weerspiegelen de fysieke toestand in de computer, waarbij ook virtuele devices mogelijk zijn. Klassen ordenenen de apparaten in traditionele schemata als invoerapparaten, netwerk of TTY's in. Dit onderscheid zie je ook terug in de opbouw van sysfs, waarin na verloop van tijd de meeste informatie die nu aanwezig is in /proc zal verhuizen: /proc moet zich op de middellange termijn beperken tot procesinformatie.
Met het nieuwe device-model verdwijnt ook veel kennis over de hardware uit de afzonderlijke drivers in de kernel. Dat zorgt niet alleen voor verbeteringen bij powermanagement en de systeemconfiguratie via ACPI, maar maakt het ook mogelijk, om alle apparaten als hot-pluggable te behandelen: vanuit het zicht van de kernel bestaat er geen principieel onderscheid meer tussen een PCI-kaart en een USB-apparaat. Zelfs een processor is (natuurlijk alleen in SMP-systemen) tijdens gebruik uit te bouwen - een patch daarvoor bestaat al.
Bron: www.kernelnewbies.org
Maar natuurlijk zijn er ook andere belangrijke verbeteringen: Linux 2.6 kan USB 2.0 en AGP 3.0 en beheerst de omgang met meerdere AGP-kaarten. De Bluetooth-support wordt nu als stabiel gekenschetst; hoewel de configuratievariabelen hun naam van CONFIG_BLUEZ_... naar CONFIG_BT_... hebben veranderd, wordt net als voorheen de Bluez-stack gebruikt. Een volledige PnPBIOS-implementatie moet Plug-and-Play-ISA-kaarten in de greep krijgen. Maar helemaal zonder problemen lijkt dat nog niet zijn: op een Sony-notebook crashte de kernel bij het booten wanneer de PnPBIOS-optie geactiveerd was.
Veel limieten in de kernel zijn verdwenen. Linux 2.6 kent 4095 (in plaats van 255) Major Devices met elk meer dan een miljoen Minor Device Numbers (in plaats van eveneens 255). User- en Group-ID's zijn van 16 naar 32 bit gegaan - noodzakelijk voor grote authentificatieservers. Dankzij 32-bit PIDs wordt het aantal processen nu alleen nog door de fysieke geheugengrootte beperkt. Omdat het CPU-mask een eigen datatype gekregen heeft en niet meer in een long-variabel wordt opgeslagen, zijn in de x86-wereld meer dan 32 processors, op 64-bit-architectures meer dan 64 CPUs mogelijk.
ACPI-support zit nu officieel in de kernel en is nu zo stabiel, dat je het op bijna elke machine kunt inschakelen. Zaken als de processortemperatuur en de laadtoestand van de accu zouden nu overwegend correct weergegeven moeten worden. Het in slaap brengen van je systeem lukt nauwelijks beter dan bij onze laatste pogingen van een jaar geleden [2] - ook met kernel 2.6 hebben we alleen reacties gehad variërend van "er gebeurt helemaal niets" tot "slaapt in, maar wordt niet meer wakker" tot totale crashes meegemaakt.
Notebook-bezitters hoeven echter niet bij de pakken neer te zitten.
Suspend to
Disk
is in twee versies in de kernel aanwezig (SOFTWARE_SUSPEND en PM_DISK,
de laatste maakte bij ons de meest stabiele indruk). Beide slaan de
actuele systeemtoestand helemaal onafhankelijk van APM of ACPI op de
schijf op. De slaaptoestand is te sturen via sysfs: echo -n
"disk" >
/sys/power/disk
stuurt de computer in de
Suspend-to-Disk-toestand.
Bovendien kan Linux 2.6 de kloksnelheid van bijna alle Mobile-CPUs van Intel (inclusief Pentium-M) en AMD tijdens gebruik veranderen. De Speedstep-drivers doen vrij betrouwbaar hun werk, de p4-clockmod-driver toonde bij een Mobile-P4-notebook een paar kinderziektes. De cpufreq-code wordt gestuurd via de pseudobestanden in /sys/devices/system/cpu/cpun/cpufreq/.
Een driver voor Synaptics-touchpads bezorgt de Linux-wereld features die onder andere besturingssystemen allang vanzelfsprekend zijn: Als je langs het touchpad strijkt scrolt het venster, een tikje in de rechter onderhoek simuleert een klik met de rechter muistoets et cetera. Om dat alles te kunnen gebruiken heb je nog wel een X11-driver nodig [3], die gebruik maakt van de kernel-drivers voor PS/2-muizen en de event-interface.
Voor de meeste gebruikers allang oude koek, maar nu heeft eindelijk ook de Advanced Linux Sound Architecture (ALSA) zijn opwachting gemaakt in de kernel. De Video4Linux-code is compleet opnieuw geschreven, waarbij er ook enkele incompatibele veranderingen zijn opgetreden - zonder een hernieuwd compileren lopen oude V4L-programma's niet meer. Eveneens nieuw in de kernel zijn de DVB-drivers van linuxtv.org, die onder andere de basis vormen voor Klaus Schmidingers VDR (Video Disk Recorder).
Het aantal ondersteunde bestandssysteem is verder gegroeid. Nieuw in de kernel zijn onder andere het distributed Andrew Filesystem (AFS), SGIs Journalling Filesystem XFS en ReiserFS4 (dat pas na 2.6.0 zijn opwachting zal maken). De nieuwe NTFS-driver wordt alles stabieler en sneller beschouwd, ondersteunt meer NTFS-features en staat voor het eerst enkele veilige schrijfoperaties toe op NTFS-partities - maar alleen bij het overschrijven van reeds bestaande bestanden zonder veranderen van de bestandsgrootte. Voor enkele Windows-systemreparaties vanuit Linux kan dat echter onvoldoende zijn. Eveneens goed voor de coöperatie tussen de verschillende systemen: Linux 2.6 kan met de dynamische datadragers van Windows 2000 en XP omgaan. Aan de netwerkbestandssystemen zijn CIFS - de moderne variant van het SMB-protocol van de Windows-fileserver - en NFS4 toegevoegd.
Ext2 en ext3 kennen nu extended attributen en Access Control
Lists (ACLs) volgens de POSIX-standaard [4]. De HTree-patch
versnelt directory-operaties in goed gevulde directories, tot nog toe
een zwak punt van ext2/ext3. De verbeterde directory-index kan met het
commando tune2fs -O dir_index
ook achteraf geactiveerd
worden.
Dankzij Linux Security Modules (LSM) kunnen nu verschillende beveiligingsmodellen geïntegreerd worden. Standaard brengt kernel 2.6 alleen de normale Linux Capabilities mee; andere modules zijn echter denkbaar en al in de maak. Geïntegreerd hebben de ontwikkelaars het Security Enhanced Linux (SELinux) van de NSA [5]. Als je daarmee wilt experimenteren, moet je zeker de help-teksten bij de diverse SELinux-opties tijdens de kernel-configuratie lezen, aangezien je anders het gevaar loopt, dat je jezelf buitensluit van je eigen systeem.
Een belangrijke verbetering op netwerkgebied is de integratie van IPSec in de kernel - niet het bekende FreeSWAN, maar een nieuwe implementatie gebaseerd op KAME. Op [6] bevinden zich de bijbehorende administratie-tools. Of deze stap het einde van FreeSWAN betekent, is onduidelijk - een port van de FreeSWAN-programma's naar de nieuwe IPSec-code in de kernel bestaat in ieder geval al. De (eveneens nieuwe) crypto-API levert de noodzakelijke algoritmen voor het authentificeren en versleutelen. De IPVS-patches van linuxvirtualserver.org, die voor load-balancing in de transportlaag in de kernel zorgen, zijn geïntegreerd. NAT kan nu omgaan met enkele problematische protocollen als H.323.
De oude Isdn4Linux-drivers zijn uit de kernel verdwenen, in plaats daarvan hebben nu CAPI-drivers hun opwachting gemaakt. Als gevolg hiervan ondersteunt kernel 2.6 alleen nog actieve ISDN-kaarten van AVM en Eicar.
Al vrij vroeg in de ontwikkeling van 2.5 werd Ingo Molnars O(1)-scheduler geïntegreerd. De oude Linux-scheduler moet bij elke task-switch de lijst van processen doorzoeken, om te beslissen welk proces als volgende processortijd kreeg toebedeeld. Dat kostte meer tijd naarmate er meer processen in de wachtrij stonden: het systeem reageert onder hoge last steeds trager. De nieuwe scheduler heeft voor elke task-switch evenveel tijd nodig, onafhankelijk van het aantal processen: De kernel schaalt beter met een stijgend aantal processen, interactieve processen reageren onder hoge last sneller op gebruikersinvoer. Op [7] staan tools, waarmee je de werkwijze van de scheduler kunt beïnvloeden.
Het basisidee van de O(1)-scheduler bestaat eruit, om de taken - processen of threads - in een array van 140 geneste lijsten te stoppen: de queues 0 tot 99 voor processen met real-time prioriteit, de overige 40 voor de nice-waardes van -20 tot 19. In een bitmap geven 140 bits aan, welke lijsten taken bevatten die processortijd nodig hebben. Om uit te vinden, welke taak als volgende aan de beurt is, hoeft de scheduler alleen maar het eerste gezette bit in de bitmap te zoeken. Opdat taken met een lagere prioriteit niet verhongeren, werkt de scheduler met twee van zulke arrays: zodra een taak in de "actieve" array alle timeslices heeft opgebruikt, die tot z'n beschikking stonden, wordt hij in een array met taken geschoven, die al processortijd hebben gehad. Als de array met de actieve taken leeg is, wisselt de scheduler de twee arrays om en begint weer van voor af aan.
In SMP-systemen houdt de kernel voor elke CPU zo'n runqueue bij. Een load-balancer in de scheduler test regelmatig, of de runqueues met ongeveer evenveel processen zijn belast. Zodra de belasting van de processors meer dan 25 procent afwijkt, worden processen overgeplaatst om de balans te herstellen. Daarbij maakt de scheduler een onderscheid tussen fysiek gescheiden processors en de alleen logisch gescheiden CPUs van Hyperthreading-processors.
Iets dat de ervaren systeemsnelheid eveneens ten goede komt is de onderbreekbare (preemptible) kernel-code. In kernel 2.4 deed de task-scheduler een dutje, zolang de processor kernelcode uitvoert. Nu zijn ook kernelfuncties op veel plaatsen onderbreekbaar, nog maar weinig codedelen van de kernel zijn door spinlocks beschermd. Het "low latency"-project heeft bovendien patches ingestuurd, die langere kritische codedelen in de kernel in verschillende brokjes hakt en van "preemption points" voorziet.
Deze veranderingen verminderen de latentie bij interrupts en task-switches dramatisch (vergelijkende metingen tussen kernel 2.4 en 2.6 resulteerden in verschillen van een factor 10 en meer), zodat Linux al doordringt tot in het gebied van de soft real-time applicaties - toepassingen, die betrouwbare korte, maar niet absoluut deterministische reactietijden vereisen. Dit is met name belangrijk in het embedded-segment (de "kernel preemption"-code stamt oorspronkelijk van MontaVista), maar ook veeleisende desktop-programma's zoals het decoderen van MPEG-streams in real-time profiteren hiervan.
Natuurlijk is er bij kernel 2.6 ook weer een hoop aan het geheugenbeheer (VM) veranderd - sinds jaar en dag onderwerp van discussie bij de kernelontwikkelaars, vooral ten tijde van de eerste versies van kernel 2.4. De beslissing van Linus Torvalds om de VM bij Linux 2.4.10 om te wisselen, dreef het debat destijds op de spits, maar zorgde uiteindelijk voor wat rust aan het VM-front.
In de 2.6-VM is de rmap-patch van Rik van Riel geïntegreerd. Tot versie 2.4 beheerde de Linux-kernel geheugenpagina's in een datastructuur, die het alleen toestond om de fysieke geheugenpagina's bij een logisch adres te vinden. Kernel 2.6 kan in een geneste lijst van Page Table Entries (PTE-lijst) bij elke fysieke geheugenpagina opzoeken naar welke processen deze pagina's wijzen. Dat versnelt het zoeken naar niet meer gebruikte geheugenpagina's, die dan weer vrijgegeven kunnen worden en weer aan andere processen ter beschikking komen: in plaats van het aflopen van virtuele geheugenadressen, kan de rmap-VM de fysieke geheugenadressen scannen op "bevrijdbare" pagina's. Dat levert niet alleen bij te weinig geheugen, maar ook bij veel fysiek geheugen voordelen op.
Een andere belangrijke verandering voor grote servers is de grotendeels door SGI aangeleverde NUMA-ondersteuning. Non-Uniform Memory wordt gebruikt bij machines met veel processors en moet verhinderen dat het benaderen van het gedeelde geheugen een knelpunt wordt. NUMA-architecturen verbinden eenheden van een of meer processors (nodes) en het bijbehorende geheugen dusdanig met elkaar, dat de processors ook "vreemd" geheugen mogen benaderen - zij het langzamer dan op hun lokale RAM.
Waar NUMA-support in kernel 2.4 slechts rudimentair aanwezig was, kan de nieuwe Linux-kernel zulke geheugenarchitecturen met hun speciale betrekkingen tussen nodes, geheugengebieden en I/O-apparaten adequaat afbeelden. Hij houdt bijvoorbeeld voor elke geheugenzone een eigen tabel bij, welke geheugenpagina's het langst niet meer gebruikt zijn en dus kandidaat zijn voor paging naar de harde schijf. Ook de task-scheduler houdt rekening met NUMA en let erop dat processen zo weinig mogelijk tussen verschillende nodes heen-en-weer geschoven worden.
Eveneens belangrijk voor "grote" bedrijfstoepassingen is een krachtige thread-implementatie. In kernel 2.6 lost NPTL (genoemd naar de Native POSIX Threading Library, die de thread-interface voor applicaties aanbiedt) de oude LinuxThreads af, die het vooral aan schaalbaarheid ontbrak. Op x86-architecturen kunnen maximaal 8192 LinuxThreads aangemaakt worden, NPTL-threads hebben hier geen vaste bovengrens - meer dan 100 000 threads zijn al gerealiseerd. Bovendien duurt het creëren van een LinuxThreads langer naarmate er meer threads lopen, terwijl een volledige NPTL-thread met een enkele sys_clone()-call onafhankelijk van het aantal lopende threads geproduceerd wordt.
Futexes (Fast Userspace Mutexes) makende synchronisatie van threads efficiënter: als een thread wacht tot een als lock gebruikte geheugenwaarde verandert, dan kan hij zichzelf via een eenvoudige systemcall in slaap brengen, tot het geheugen veranderd is. Dat bespaart regelmatig navragen of de bij de LinuxThreads gebruikte 'dure' communicatie over signalen.. Futexes hebben zich inmiddels als een algemeen bruikbare methodes voor het synchroniseren van userspace-processen met behulp van de kernel ontwikkeld.
Jens Axboe heeft tijdens het werken aan kernel 2.5 de taak opgepakt, om het al lang als renovatiebehoeftig geldende subsystem voor blockgeoriënteerde I/O van de grond af opnieuw te schrijven. De daarmee verbonden grootschalige veranderingen (het oude block-I/O-systeem bestond uit een half miljoen regels code) waren de belangrijkste reden, dat veel ontwikkelkernels tot 2.5.40 maar beperkt bruikbaar waren..
De heersende mening is dat het alle moeite meer dan waar was. Lees- en schrijfoperaties op massageheugen zijn efficiënter en sneller geworden, diverse limieten zijn vervallen: op 32-bit-architecturen zijn blockdevices tot 16 TByte, op 64-bit-architecturen tot 8 exaByte mogelijk - lucht genoeg ook voor grote RAID-arrays. De Logical Volume Manager LVM2 is in de kernel geïntegreerd. ATAPI-branders kunnen nu direct aangesproken worden, de hack via de IDE-SCSI-driver voor ATAPI-apparaten is niet meer nodig. Een reeks taken als Tagged Command Queuing, die elke device driver zelf moest zien op te lossen, zijn nu naar het block-I/O-systeem verhuist. Dat maakt het programmeren van drivers makkelijker en minder foutgevoelig.
Data, die door een proces naar een massageheugen geschreven worden, worden eerst door het virtuele filesystem (VFS) in de Linux-kernel in ontvangst genomen. Die slaat de data in het geheugen op. Normaal gesproken beslist het geheugenbeheer dan, welke geheugenpagina's wanneer naar de schijf worden geschreven. Het hiervoor in kernel 2.4 verantwoordelijke bdflush-proces (buffer-dirty-flush) heeft plaats moeten maken voor de nieuwe pdflush-daemon. Die werkt met meerdere trends en kan zo meerdere schrijven tegelijkertijd op maximale schrijfsnelheid belasten.
Op dit punt komt ook het nieuwe I/O-subsystem om de hoek kijken. Het
verwerkt de te schrijven (of te lezen) data niet meer in blokken van 4
kbyte, maar kan willekeurig grote databrokken in een stuk naar de
hardware sturen - dat reduceert de CPU-belasting. Een
I/O-scheduler optimaliseert daarbij de schijfbenaderingen en zorgt
ervoor, dat geen enkel proces bij het wachten op I/O verhongert en de
latentietijden vooral bij het lezen gering blijven.
Omdat de I/O-scheduler nu al een eigen module in het block-I/O-system is gerealiseerd, staan in kernel 2.6 verschillende I/O-scheduler ter beschikking. In de meeste situaties garandeert de Anticipatory I/O-scheduler optimale performance. Alleen in omgevingen, waarin seek-operationen domineren - bijvoorbeeld bij databases -, kan de eenvoudigere Deadline-I/O-scheduler 10 tot 20 procent meer prestaties leveren, omdat hij geen tijd verspilt met het voorspellen van de in dit geval random verdeelde lees- en schrijfoperaties.
Gezien de talrijke ondersteunde hardwarearchitecturen was de introductie van het concept van de subarchitectuur dringend noodzakelijk. Tot versie 2.4 werd in Linux impliciet aangenomen, dat elke processorfamilie uit een computerarchitectuur met typische apparaten en bussen bestond. Bestaan voor een processortype meerdere systeemarchitecturen (wat niet alleen in embedded-wereld voorkomt), dan werd de configuratie al snel onoverzichtelijk. Kernel 2.6 biedt nu gewoon een selectie van de ondersteunde architecturen bij de geselecteerde processorfamilie aan.
In de nieuwe kernel zijn grote delen van het µClinux-project opgenomen (www.uclinux.org). Het Embedded Linux/Microcontroller Project biedt patches aan, waarmee Linux op microcontrollers zonder MMU loopt. Linux 2.6 ondersteunt nu van huis uit de MMU-loze M68k-processors Dragonball en Coldfire van Motorola, Hitachis H8/300 en de NEC V850E.
Bovendien is het tijdgedrag voorspelbaar geworden. Weliswaar is ook Linux 2.6 geen hard real-time systeem, maar de al genoemde O(1)-scheduler en vooral de preemptible kernelfuncties zorgen voor duidelijk kortere responstijden. Het swappen van geheugenpagina's naar de harde schijf is compleet te deactiveren, om page faults te voorkomen, waarvan de behandeling geizen vanuit het oogpunt van de processor een eeuwigheid duren. Diverse features zoals de verschillende I/O-schedulers kunnen uitgeschakeld worden, om het kernel-image zo klein mogelijk te houden. Daarom kan je de ondersteuning voor simpele in- en uitvoerapparaten compleet uit de kernel verwijderen - de communicatie met de microcontrollers in de wasmachine zou binnen afzienbare tijd toch zonder toetsenbord en console moeten kunnen.
Kernel 2.6 komt met een nieuw build- en configuratiesysteem. De oude Config.in-bestanden zijn verdwenen; in hun plaats gekomen zijn Kconfig-bestanden, die de voor de broncodebestanden in die directory mogelijke opties inclusief type, afhankelijkheden en uitleg bevat. Het bestand Documentation/Configure.help met de verzamelde help-teksten is verdwenen. Een configuratieoptie (komt overeen met een menupunt in de diverse frontends) wordt ingeleid door het sleutelwoord "config". Met "choice" begint een keuzelijst, met "menu" een submenu. De namen van de opties in de Kconfig-bestanden komen overeen met de configuratievariabelen in .config zonder het voorafgaande CONFIG_.
Voordat je de nieuwe kernel nu gaat compileren, is het aan te raden een blik te werpen in het bestand Documentation/Changes. Hier ervaar je welke software met welk versienummer je nodig hebt. Ook al wat oudere distributies Red Hat 9 of SuSE 8.2 voldoen in grote lijnen nog aan de voorwaarden - mogelijk dat je enkele tools moet bijwerken om alle nieuwe features te kunnen gebruiken.
Onomkoombaar zijn daarentegen nieuw programma's voor de omgang met
modules, voorzover de distributie niet al op kernel 2.6 is voorbereid.
Met versie 2.5.48 heeft de kernel een compleet nieuw mechanisme
gekregen voor het laden van modules. Hierdoor is ook de structuur van
de modules veranderd, aan de buitenkant te herkennen aan de nieuwe
extensie .ko (kernel object). De belangrijkste reden voor de nieuwe
Module Loader waren
race
condities, die onder bepaalde omstandigheden bij het ontladen van een
module op SMP-machines kon optreden. Kernel 2.6 is in dit opzicht niet
alleen safer, maar biedt ook meer opties: zo is het gedwongen ontladen
van modules (rmmod -f
) en zelfs het ontladen van modules
überhaupt al bij kernelconfiguratie uitschakelen.
De oude modutils functioneren niet meer met de nieuwe Module Loader.
Auteur Rusty Russell, die bij de overgang naar Netfilter in kernel 2.4
al naam had gemaakt als man van incompatibiliteiten (en in de nieuwe
Module Loader het ontladen van modules het liefst helemaal
uitgeschakeld had), biedt nieuwe Module-Init-tools
op [8] ter download aan. Debian-gebruikers vinden in Sarge al
voorbereide
pakketten. In de actuele distributies van SuSE en Red Hat zijn de
Module-Init-tools al geïnstalleerd, eenvoudig te herkennen aan het
bestaan van /sbin/insmod.old, /sbin/modprobe.old et cetera. De
.old-versies worden automatisch gebruikt als er een 2.4-module geladen
wordt. Wie de Module-Init-tools zelf compileert, kan de .old-bestanden
met een make moveold
automatisch
laten produceren - details daarover in de README.
Tot de nieuwe tools behoort natuurlijk ook een nieuw configuratiebestand met de naam /etc/modprobe.conf, dat het oude modules.conf vervangt en zich door het in het pakket aanwezige script generate_modprobe.conf uit de laatste laat produceren. Handmatig ingrijpen kan echter nog steeds nodig zijn: diverse drivers hebben namelijk nieuwe namen gekregen; de UHCI-driver bijvoorbeeld, die voor de USB-controller van veel chipsets verantwoordelijke is, heet nu uhci-hcd (voor Host Controller Driver).
Wie onder kernel 2.6 een modprobe -c
oproept,
ziet de praktische uitwerkingen van een ander nieuwtje van de
2.6-modules: er bestaat nu een standaard manier om van elke module te
weten te komen voor welke devices hij zich verantwoordelijk voelt.
depmod
gebruikt deze info om het bestand /lib/modules/2.6.n/modules.alias
aan te maken, dat helpt om bij een nieuw aangesloten apparaat
automatisch de passende driver laten.
Het compileren van een nieuwe kernel is niet wezenlijk veranderd.
De basisconfiguratie kun je via een make
oldconfig
uit het .config-bestand van een 2.4-kernel halen; een aansluitende
grondige inzage van alle opties is echter onomkoombar, wanneer de
nieuwe kernel moet functioneren. De oude Tk-interface is verdwenen, make
xconfig
start een Qt-programma, maar ook een Gtk+-frontend
bestaat (make gconfig
);
de consoleklassiekers met en zonder Curses-menu's zijn natuurlijk
behouden gebleven. Met het Qt-menu hebben we af en toe merkwaardige
effecten meegemaakt: tristate-opties werden zo nu en dan zonder
duidelijk oorzaak als niet selecteerbaar weergegeven, stonden dan in de
.config echter toch op "y". De Gtk+-interface crashte regelmatig als je
met de muis wat aanklikte.
Dankzij de verbeterde handling van afhankelijkheden tussen de opties
en broncodemodules compileert de kernel sneller; vooral rebuilds met
een iets andere .config gaan duidelijk sneller, omdat er minder code
opnieuw gecompileerd hoeft te worden. Een make dep
is niet
meer nodig, een simpele make
produceert het
gecomprimeerde bzImage, een ongecomprimeerd kernel-image (vmlinux) en
de modules, die net als bij 2.4 met make modules_install
geïnstalleerd worden. Iets wat direct opvalt bij het compileren is
dat er niet meer talrijke details van het build-proces over het
beeldscherm vliegen, maar dat je als gebruiker alleen nog grofweg kunt
zien wat er allemaal gebeurt. Wie het allemaal tot in detail wil
meemaken, neemt make V=1
. make help
geeft
alle make-targets.
De gcc 3.3 van een SuSE-8.2-systeem irriteerde bij het compileren van de broncode met een enorm aantal warnings, die over het algemeen vrijwel allemaal onschuldig van aard zijn - afgezien van enkele drivers, waarbij in de Makefile de extra-flag "-Werror" gezet is, dat alle waarschuwingen in fouten omzet en daarmee het compileren beëindigd. Uitcommentariëren van de flag in de desbetreffende Makefiles lost het probleem op. Oudere gcc-versies deden hun werk zonder problemen. Debian-users hoeven niet eens met een compiler aan de slag om in het genot van de nieuwe kernel te komen: in Sarge bevinden zich tamelijk actuele 2.6-pakketten, die nauwelijks meer dan een reboot vereisen. Je moet hooguit nog wat finetuning doen.
Zo zijn er zowel bij de kernelparameters als ook bij de opties van enkele modules een paar veranderingen aangebracht. Je doet er daarom goed aan om niet blind de commandoregel van de oude 2.4-kernel een op een over te nemen, maar eerst eens een blik in Documentation/kernel-parameters.txt te werpen. Ook schijnt kernel 2.6 met de Red-Hat-eigenaardigheid, het root-filesystem over een "root=LABEL=/"-kernelparameter aan te kondigen, niet uit de voeten te kunnen - hier moet de echte device-naam staan.
Afhankelijk van de distributie en gebruikte hardware moet je dan nog een enkel (init-)script op weg helpen. op Debian-systemen test /sbin/dhclient bijvoorbeeld de kernelversie - van 1.0 tot 2.5. Bij kernel 2.6 spuugt dit script alleen een ordinair "Unrecognized kernel version" uit. Red Hat Linux struikelt erover, dat /etc/rc.sysinit bij de systeemstart het bestaan van /proc/ksyms controleert - maar de pseudofile heet nu /proc/kallsyms. Zo schakelt het script hotplugging en het automatisch laden van kernelmodules af.
Alle distributies hebben een mechanisme om de elementaire modules bij het starten van het systeem te laden. Hier is meestal wat handenarbeid nodig - een zoektocht naar modprobe en insmod in de initscripts helpt om de goede locaties te vinden. Wlke modules voor de problemen zorgen, hangt af van de ingezette hard- en software.
Sommige programma's lopen niet met de nieuwe kernel. Met name sofware die nauw samenwerkt met de kernel: diverse monitoring programma's snappen formaatveranderingen in enkele status-bestanden in /proc niet. Een paar programma's heeft problemen met de POSIX-threads, wat vaak resulteert in merkwaardige problemen. De oplossing hiervoor is eenvoudig: zet de omgevingsvariabele LD_ASSUME_KERNEL op "2.2.5", waarna bijvoorbeeld ook rpm 4 onder Red Hat 9 weer werkt.
Weinig delen van de code in de Linux-kernel zijn in de loop van de ontwikkeling onveranderd gebleven. Dat de kernel nu al tamelijk stabiel zijn werk doet (2.6.0-test9), spreekt voor de kwaliteit van het ontwikkelmodel achter Linux, dat het gelukt is om bijdragen van honderden afzonderlijke ontwikkelaars en bijna alle grootten in de IT-brance - waaronder Dell, Fujitsu-Siemens, HP, IBM, Intel, Oracle, SAP en SGI - naadloos te integreren. Linus Torvalds, die het werk aan de nieuwe kernel tijdens de ontwikkeling gecoördineerde, zal het onderhoud van 2.6 overdragen aan Andrew Morton op het moment dat ontwikkelkernel 2.7 zich aandient.
De meeste gebruikers zullen van de vele veranderingen niet direct veel merken, tenslotte was kernel 2.4 ook geen catastrofe. De verbeteringen zijn vooral merkbaar bij extreme hardware of bijzondere situaties: extreme hardware als NUMA-maschines met 32 of meer processors, extreme bedrijfssituaties zoals zeer hoge lasten of geheugengebrek, extreme eisen zoals real-time. In een interview heeft Linus Torvalds gezegd, dat de belangrijkste verandering in kernel 2.6 het grote opruimen van de broncode was, wat het onderhouden van de code drastische heeft verbeterd.
Met de nieuwe kernel rukt Linux verder op in de richting van commerciële Unix-versies als Solaris, maar breidt het het werkterrein tevens uit naar embedded toepassingen. De "gemiddelde" Linux-gebruiker, die het besturingssysteem op een workstation of een kleine server gebruikt, profiteert van nieuwe drivers, een stabiel besturingssysteem en van het feit dat het OS zich beter gedraagd onder extreme omstandigheden. Dat de kernelinterfaces naar de buitenwereld vrijwel onveranderd zijn gebleven en dat er maar heel weinig programma's speciaal aan Linux 2.6 hoeven te worden aangepast, maakt de overstap alleen maar makkelijker.
[1] Userland-tools voor sysfs: http://kernel.org/pub/linux/utils/kernel/hotplug/sysutils-0.1.0.tar.gz
[2] Oliver Diedrich, Dominik Brodowski, Schöne neue Welt, Einsatz von ACPI unter Linux, c't 25/02, S. 234
[3] X11-driver voor Synaptics-touchpads: http://w1.894.telia.com/~u89404340/touchpad/
[4] Azundris, Gut bewacht, Access Control Lists in modernen Dateisystemen, c't 23/03, S. 218
[5] SELinux: www.nsa.gov/selinux
[6] Userland-tools voor IPsec: http://sourceforge.net/projects/ipsec-tools
[7] Schedutils: http://tech9.net/rml/schedutils
[8] Module-init-tools:
ftp.kernel.org/pub/linux/kernel/people/rusty/modules/
[9] Status Development kernel 2.6: http://www.kernelnewbies.org/status/latest.html
[9] The Post-Halloween Document (aka, 2.6 - what to expect), Dave Jones: http://www.codemonkey.org.uk/post-halloween-2.5.txt
[10] The Wonderful World of Linux 2.6, Joseph Pranevich: http://kniggit.net/wwol26.html