Hlavní navigace

FreeBSD řady 5

27. 8. 2004
Doba čtení: 5 minut

Sdílet

Po více jak čtyřech letech vývoje bude 3. října (October 3rd) konečně uvolněno první RELEASE ze stabilní řady 5. To znamená, že bude konečně doporučeno používat řadu 5 na produkčních strojích. V důsledku některých okolností první stabilní RELEASE nebude 5.0, ale 5.3. To je ovšem důležité snad jen z estetického hlediska, mnohem důležitější jsou novinky a změny v této nové řadě.

SMPng

FreeBSD řady 4.x řeší podporu více procesorů v systémech SMP velmi jednoduše. Má jeden globální zámek, kterým se jádro při syscallu uzamkne a hotovo. Podpora tímto způsobem je poměrně jednoduchá, má malý overhead a v podstatě vetšinou i postačuje (pokud máte čistě userland concurency, je to imho snad i nejlepší způsob). Ovšem při větším počtu procesorů vyplouvají na povrch zjevné nevýhody tohoto řešení a vaše 16× nadupaná mašina většinu času tráví v čekání na uvolnění tohoto globálního zámku. Proto byla jako další „velký cíl“ pro vývoj vybrána právě podpora víceprocesorových strojů. Dosahuje se jí konvenčně, tj. přes jemné zamykání subsystémů, popř. ještě jemněji. Tato práce ještě pořád není hotová, ovšem 5.3R bude první FreeBSD, které by z ní mělo profitovat (www.freebsd.or­g/smp && www.freebsd.or­g/projects/bus­dma). Mimochodem, ve snaze o zlepšení výkonu byl implementován nový scheduler (SCHED_ULE), který je v mnoha ohledech lepší než tradiční 4BSD (pro linuxáky – ano, je to v podstatě to samé, co máte vy s vaším O(1)).

KSE

Heslem doby je threading (což souvisí s podporou víceprocesorových strojů), a proto se i vývoj v řadě 5 snažil podporu zlepšit. V principu existují tři způsoby, jak rešit threading. Buď jsou thready uplně normální procesy (puristům se omlouvám za znásilňování terminologie) s tím, že v položce struct vm *vm mají uvedenu stejnou adresu (1:1), nebo jsou to jenom jakési funkce v jednom procesu, které nějaký userland scheduler pouští (1:M). Oba tyto přístupy mají své výhody i nevýhody (1:1 – kernel o nich ví, a tak je může pouštět na více procesorech, ale kontext switche jsou drahé a synchronizace taky, 1:M to má přesně naopak). Třetí způsob je kombinací předchozích, v kernelu se vytvoří virtuální procesory (tzv. kernel scheduler entities – KSE), na kterých mohou běžet thready. Tj. kernelový scheduler určuje, kdy poběží které KSE, a uvnitř KSE threadová knihovna (ie. userland scheduler) určuje, který thread poběží. To by teoreticky mělo být ideální řešení. Implementována je ovšem vedle M:N i 1:1 a 1:M knihovna.

RCng

Klasické systémy BSD používaly takzvaný BSD-style init a k němu příslušné rc skripty. Tento systém by se dal v podstatě popsat tak, že máme single-user a multi-user mód initu a rc skripty jsou monolitické. To znamená, že máme /etc/rc, který „nějak“ nastartuje další služby atd. Z toho plynou problémy s přidáváním dalších služeb do systému, popřípadě jejich obsluhou. V NetBSD 1.5 byl zaveden nový systém rc skriptů (init plně vyhovuje). (Ve FreeBSD se mu říká RCng (RC next generation).) Ten se skládá ze základního obslužného /etc/rc, který volá skripty z /etc/rc.d/ (popř. /usr/local/et­c/rc.d). Zde jsou umístěny skripty, které zajišťují určitou činnost, podobně jako v SYSV rc skriptech, ovšem s tím rozdílem, že RCng má závislosti. Tj. je jasné, co spustit před čím, co je nutné restartovat atd. Tím, že jsou skripty separovány, je možné velmi jednoduše přidávat služby do systému. FreeBSD 5.x (5.1R?) tento systém převzalo a dnes se dá říct, že všechna BSD (která nerezignovala na vývoj) RCng používají.

Nové platformy

FreeBSD se tradičně zaměřovalo na platformu i386. V řadě 4.x byla přidána podpora architektury alpha (která snad zajistila čistotu implementace vůči 64bitům). V řadě 5 bylo opět přidáno několik platforem – amd64, arm, ia64, powerpc a sparc64. S podporou těchto nových strojů souvisí i přidání nového překladače gcc – gcc 3.4.x. Je nutné si uvědomit, že freebsd-gcc != gcc a že verze 3.4.x bude v řadě 5 už napořád. S gcc trojkové řady souvisí, že se FreeBSD trošku „polinuxilo“ a mimo tradičně podporovaného CFLAGS=-O je nově podporováno CFLAGS=-O2 (ovšem na produkci bych to nedával).

GEOM

Další novinkou, která stojí za zmínku (minimálně pro svou kontroverznost), je takzvaný GEOM, což je v podstatě objektová implementace přístupu na disky, partitiony, slice atd. Samo o sobě je to docela nanic. Nicméně důsledky tohoto objektového přístupu se projevily např. v systému gbde (transparentní šifrování libovolné geom třídy), ggatel (něco jako iSCSI, mimochodem prý to má až o 30 % vyšší výkon než NFS/SMBFS), popř. ostatních g* utilitách (např. sada gconcat, gmirror, graid3, které velmi jednoduše implementují danou raid třídu). Výhodou je, že všechny tyto prostředky můžete kombinovat! Řekněme, že máte raid0+1, kde jsou šifrovány dva disky (vždy jen jeden disk z mirroru) a ty nešifrované exportujete přes ggatel někam ven. Mimochodem, existuje i třída pro komprimaci, takže je možné dělat i další kouzla (to už se mi ale nechce vymýšlet).

DevFS

Tradiční unixy mají adresář /dev/, ve kterém mají tak něco kolem kvadrilionu různých divných souborů. Mají je tam staticky, takže když jsou nějaká zařízení hotswap atp., máme problém. FreeBSD 5.x to řeší mandatorním devfs, který se o tuto situaci stará (ie. dynamicky vytváří několik položek v /dev). Osobně to považují za velmi dobrou věc a jsem moc rád, že mám možňost to používat.

PF+ALTQ

FreeBSD už od třetihor používá svůj firewall ipfw, popř. importovaného cizince ipf. Ipfw, jakkoliv postačuje na 95 % instalací, přece jen není až tak úplně to nejlepší, o čem si človek nechává v noci zdát. Ipf má zase divnou licenci, bůhvíjaký vývoj a tak vůbec. Ovšem už dlouhou dobu jdou velmi dobré zvěsti o firewallu, který si vytvořilo OpenBSD. PF je doopravdy velmi dobrý firewall (až budete blockovat windowsové mašiny, tak pochopíte) a ve verzi 5.3R bude integrován do základního systému. Integrace sice není na takovém stupni jako u ipfw, ale postačuje. Další věcí z oblasti síťování je integrace altq. Altq je software na queuing (ie. traffic shaping atd.). Osobně mi (na rozdíl od linuxového tc, které jsem nikdy nepochopil a proto(?) mi nefunguje) docela dost dobře běhá a jsem s ním spokojen. A umí toho docela dost.

MAC

Poslední věcí, o které se zmíním, je MAC. To je několik politik, které jsou pomocí labelování objektů a definic pravidel pro dané labely schopny zajistit zajímavou bezpečnostní politiku. Osobně jsem to ovšem nikdy nepoužil.

skoleni

Dále byla opravena či zlepšena snad každá věc v systému. Podporou novějšího hardwaru počínaje, přes vyčištění kódu a opravení spousty chyb po upgrade důležitých importovaných systémů (bind atp.). Pro detailní popis doporučuji si přečíst release notes, až 5.3 vyjde. Osobně vám tuto novou verzi operačního systému FreeBSD mohu jen doporučit. Jak z hlediska výkonu, tak uživatelské přítulnosti (je to neuvěřitelně čistý systém), dokumentace i podpory. Užívejte ve zdraví

P.S. pokud si stáhnete BETA verze a pomůžete s testováním, bude se vám umírat o něco lehčeji ;)