CFS plánovač (scheduler)
SD (Staircase Deadline) plánovač Cona Kolivase (autora desktopové sady záplat -ck zvyšující interaktivitu systému), vyvíjený již od poloviny roku 2004 a nedávno přejmenovaný na RSDL (Rotating Staircase DeadLine scheduler), měl být tím, který nahradí stávající plánovač procesů v jádře. I přes lepší výkon než stávající plánovač ale potíže s jistými zatíženími jeho cestu do jádra zbrzdily. A v polovině dubna představil Ingo Molnar svůj nový zcela férový plánovač CFS (Completely Fair Scheduler), který využívá Conovy myšlenky férového plánování vedoucí k lepší odezvě desktopu a vylepšuje Conův SD plánovač. CFS představuje kompletní přepsání linuxového plánovače procesů s cílem přidat vlastnosti a vyřešit nedostatky nahromaděné za poslední roky.
Návrh CFS je docela jiný než návrh stávajících plánovačů. Nepoužívá pole front úloh (runqueues) a jejich prohazování, ale jen jeden časově uspořádaný red-black strom úloh. Klíčová je tedy kalkulace klíče, na základě kterého se procesy vkládají do stromu. Velice zjednodušeně je tímto klíčem čas, po který proces čeká na přidělení CPU dělený počtem běžících procesů (s korekcí podle priorit), a to je zároveň čas přidělený procesu po jeho výběru. Čas procesů se eviduje na úrovni nanosekund a není závislý na časovací hodnotě HZ, nepočítá se čas spaní procesu, nepoužívá se dokonce ani pojem časového kvanta a neprovádí žádné heuristiky zjišťování interaktivity procesu. Vše záleží jen na tom, zda proces využívá svůj přidělený čas, v závislosti na počtu procesů, které chtějí běžet. Díky tomu je plánovač odolný proti všelijakým útokům na heuristiku.
Jediná ladicí proměnná v /proc/sys/kernel/sched_granularity_ns vyjadřuje granularitu času, tj. jak často plánovač přepíná procesy pro zajištění férovosti. Nízká hodnota znamená častější přepínání, tzn. nízké prodlevy (latence) a vyšší interaktivitu, jednoznačná volba pro desktop. Vyšší hodnota naopak pomocí větších dávek času procesům zvyšuje propustnost systému a je tak vhodná pro servery. Ingo tvrdí, že nový plánovač poskytuje férovou interaktivitu za všech situací a že ji nenaruší žádný zlý program, který dokáže „odrovnat“ stávající plánovač.
Kromě samotného CFS Ingo představil i jeho další překvapující vlastnost: modulární plánovací architekturu. Moduly, uspořádané do prioritního seznamu, určují, který proces dostane CPU. Zatím existují dva moduly, výše popsaný CFS a zjednodušený real-time plánovač s vyšší prioritou. Do budoucna se předpokládají další moduly s různými scénáři plánování, např. i Conův SD plánovač. Překvapující vlastnost je to proto, že nikdo nedebatoval o modulárních plánovačích, protože byly v minulosti hlasitě odmítnuty, Ingo Molnarem. Změnilo se prý to, že předchozí pokusy vyměňovaly celý plánovač, a ne jen jeho malé části.
Nyní tedy existují dva, popř. tři plánovače, které jsou adepty na nový plánovač v jádře: Conův RSDL/SD, Ingův CFS a snad ještě starší nicksched od Nicka Piggina. Con to chce vzdát, ale ani Ingo sám nechce rozhodovat o vítězství CFS. Před zvolením nového plánovače lze očekávat mohutnou diskuzi, což znamená, že pravděpodobně nebude ani v jádře 2.6.22.
Jádro 2.6.21
Další verze jádra aktuální „stabilní a zároveň vývojové“ řady 2.6, verze 2.6.21, vyšla 25. dubna, po trošku delších více než dvou a půl měsících vývoje. Podle Linusova oznámení je cílem tohoto jádra jen přečkat velké změny v časování jádra. I přes veškeré úsilí vývojářů totiž mohou tyto změny zapříčinit nějaké problémy, na které nenarazili.
Nejvýznamnější novinkou této verze jsou tedy sjednocené časování jádra (clockevents) a vysoce přesné časovače umožňující téměř „beztikové“ jádro (dyntick/nohz), viz zprávička v dubnovém čísle. To potěší zejména uživatele real-time aplikací, uživatele šetřící energií a uživatele virtualizovaných systémů. Další významné novinky jsou na poli virtualizace. Za prvé to jsou mnohá vylepšení velmi rychle se vyvíjejícího KVM, čítající zrychlující paravirtualizaci, migraci za běhu, suspend/resume hostovaného systému a CPU hotplug, a za druhé nové paravirtualizační rozhraní VMI (Virtual Machine Interface) od VMware, které může umožnit vyšší výkon virtuálních strojů (zatím jen) pod VMware.
Co se týče ovladačů, tak kromě změn v ACPI (viz dále) byly aktualizovány mnohé síťové, SATA/SCSI, USB, ALSA, V4L/DVB aj. ovladače a přibyly nějaké nové ovladače ethernetových, IDE a jiných zařízení, např. ovladač pro nabíjení náročných USB zařízení Blackberry nebo nový experimentální modul bay pro podporu šacht IBM UltraBay nebo Dell Module Bay pro za běhu vyměnitelné jednotky. Zajímavá je také vrstva ALSA System on Chip, přinášející lepší podporu implementace ovladačů na embedded systémech. Vylepšena byla podpora PowerPC/Cell/PS3, ARM a laptopů Sony. Ze síťování je to IPv6 skrze IPv4 (a obráceně) IPsec tunelování a randomizace zdrojového portu NAT, z oblasti souborových systému rozšíření eCryptFS o šifrování s veřejným klíčem či nové šifrovací algoritmy. Užitečné je nepochybně prodloužení bootovacího příkazu z výchozích 256 znaků na libovolnou délku.
Vývojáři (nejen jádra) mohou zaznamenat dlouhodobější plán přesunu k novému modelu ovladačů s jednotným stromem zařízení v SysFS (zvláště u ACPI), který nyní podporuje tzv. stínové adresáře (více verzí adresáře se stejným jménem), zjednodušení tvorby ovladačů (záplata device resource management, devres), přepracování kódu SYSV sdílené paměti nebo možnost nastavení „pokažení“ (tainting) jádra z userspace zápisem do /proc/sys/kernel/tainted .
Samozřejmě i od předchozí verze 2.6.20 byly opraveny nějaké chyby, které se týkají téměř všech oblastí. Trošku kuriózně může působit oprava chyby způsobující deadlock v ovladači 8139too široce rozšířených ethernetových karet Realtek. Tradičně: podrobnější popis novinek a významných změn je k nalezení na kernelnewbies.org/LinuxChanges.
Jan Outrata
www.kernel.org