Hlavní navigace

Lákadla FreeBSD 6.0

24. 10. 2005
Doba čtení: 4 minuty

Sdílet

V krátké době vyjde nová verze unixového operačního systému FreeBSD 6.0. Ani ne po roce od uvedení první produkční verze FreeBSD 5.x je zde nová major verze. Toto je důsledkem nového systému vývoje FreeBSD. Co se tedy změnilo a jaká jsou lákadla nového FreeBSD?
FreeBSD

FreeBSD 6.x je evolučním vylepšením oproti předchozí řadě 5.x, jsou zde mnohá menší vylepšení (at už bugfixy, či velmi četné performance tweaky). Nicméně i v této verzi najdeme mnoho zajímavých novinek. Ty, které považuji za zajímavé, vám lehce představím, zbytek si můžete přečíst v release-notes, popř. na mailing listech či v cvs logách. Nekladu si za cíl kompletní seznam změn. Doufám, že můj článek doplníte v diskusi …

V létě 2005 byl zaplacen z komunitních peněz Poul-Henning Kamp, aby pracoval na přepsání částí IO subsystému (podobně jako je nyní placen Andre Oppermann za optimalizaci síťového stacku). V rámci této práce Poul zoptimalizoval používání zařízení v /dev, kdy napsal takzvaný device vnode bypass, což vyústilo v 2× rychlejší dd if=/dev/zero of=/dev/null. V novém FreeBSD už není možné používat zařízení mimo devfs, což zjednodušilo kód FS (není nutné se o to starat v UFS/FFS a zjednodušila se obsluha device vnode aliasingu). Další věcí, kterou udělal, bylo, že přepsal UFS/FFS, aby mluvilo přímo s GEOMem (io framework ve FreeBSD), a další věci. Celkově by mělo být IO ve FreeBSD 6 lepší (bezpečnější, škálovatelnější a rychlější). Poslední věcí, které se Poul věnoval, bylo přepsání tty subsystému. Tento pokus měl vést k Giant-free tty, nicméně není ještě hotovo. Zatím byl tty subsystém zjednodušen. Viditelnou změnou je přejmenování tty/cua zařízení v /dev.

V tichosti a podporován firmou Isilon Systems, Inc. se na podobnou oblast zaměřil Jeff Roberson, který přepsal VFS tak, aby nepoužívalo Giant mutex, a umožnilo tak několika procesům na různých CPU pracovat v jádře zároveň. Během této práce bylo nalezeno a odstraněno mnoho chyb, ať už závažnějších, které mohly vést k problémům, tak výkonostních. Celkově by měl být kernel na SMP rychlejší díky menšímu zatížení Giant mutexu.

FreeBSD se od Linuxu liší zejména vývojovým modelem. Pokud vás zajímá, jak probíhá vývoj FreeBSD, přečtěte si starší článek Způsob vývoje operačního systému FreeBSD.

Poslední závažnou změnou, která se týká IO, je nový ATA subsystém, který byl výrazně zmodernizován (podpora nových chipsetů, výrazná modularizace atd.). Mimochodem – nyní můžete kontrolovat, kdo vám zatěžuje disky, přímo v top, jen stiskněte písmenko m a je to.

Výše zmíněný zázračný hacker Jeff Roberson (kolují o něm neuvěřitelné historky) svého času napsal nový scheduler pro FreeBSD, takzvaný SCHED_ULE, který je ovšem ve všech řadách 5.x vypnutý kvůli své chybovosti. Všechny známé chyby byly nyní odstraněny, a to jak v UP, tak SMP konfiguracích, a tak nic nebrání tomu tento nový scheduler vyzkoušet.

FreeBSD používá poměrně sofistikovaný systém zamykání, zčásti je to z historických důvodů, zčásti kvůli tomu, že FreeBSD vývojáři jsou velmi vzdělaní. Každopádně první nástřel zamykání, tak jak byl představen v řadě 5.x, byl docela pomalý. V podstatě na všechno se používaly ty nejtěžší blokující mutexy. V řadě 6 je toto změněno. Všechny mutexy jsou teď adaptivní, tj. spinnují, pokud je předpoklad, že mutex bude brzy uvolněn, jinak pořád blokují.

Dalších změn se dočkaly konkrétní subsystémy. John Baldwin předělal kritické sekce, tak aby se u nich nemusela vypínat přerušení. Tím se staly kritické sekce velmi rychlým nástrojem na synchronizaci. Toho bylo hned využito v UMA (memory allocator) i na dalších místech. Výsledkem je poměrně výrazné zrychlení zamykání a tím celého kernelu. V řadě 7 jsou další optimalizace (reference counting), které dále zrychlují některé části kernelu (credentials atp.).

Z dalších zajímavých věcí je třeba zmínit změny v síťování. Byl kompletně nahrazen bridging implementací z NetBSD, isc-dhcp klient byl nahrazen dhcp z OpenBSD atd. FreeBSD 6.0R je také první verzí, kde je zcela bezpečné používat netisr dispatch, tj. že se packet zpracuje přímo v netisr threadu a není frontován pro pozdější zpracování. Dle benchmarku to má zajímavé (veskrze positivní) efekty na výkon. Hodně driverů také bylo přepsáno do MPSAFE podoby, kdy nepoužívají Giant mutex. Docela velkou změnou prošly wifi drivery, hlavně ty od atherosu (vývojář Sam Leffler pro firmu atheros přímo pracuje a je to znát), byl také integrován WPA.

V neposlední řadě bych zmínil integraci portsnap-u do base. Portsnap je sw pro aktualizaci portů, který je rychlejší, bezpečnější a celkově výrazně lepší než cvsup. FreeBSD má tedy poprvé přímo v base nástroj pro aktualizaci portů. K dispozici je mimochodem i testovací běh takzvaného docsnapu.

root_podpora

V celém kernelu bylo provedeno dalších aspoň milion šestset tisíc dvacet optimalizací (fd alokace, některé operace se stringy v libc, malé optimalizace ve vm atd.) a minimálně třicetdva tisíc osmdesát šest malých oprav všude možně. Vzhledem k tomu, že testovací období FreeBSD 6.0 bylo jedním z nejproduktiv­nějších v celé historii projektu (objevovaly se chyby z dob 3.x), tak se nebojím říct, že přestože je to x.0, tak není třeba mít strach tuto verzi nasadit.

Celkově se dá říci, že FreeBSD 6.0R bude velmi podařená verze, která navazuje na řadu 5 a dále ji vylepšuje. Finální verze bude doufejme vydána během několika málo týdnů, a tak neváhejte a nainstalujte si ji!

Máte zkušenosti s FreeBSD?

Byl pro vás článek přínosný?