abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 21:44 | Komunita

    Na čem aktuálně pracují vývojáři GNOME a KDE Plasma? Pravidelný přehled novinek v Týden v GNOME a Týden v KDE Plasma.

    Ladislav Hagara | Komentářů: 0
    včera 14:22 | IT novinky

    Před 25 lety zaplavil celý svět virus ILOVEYOU. Virus se šířil e-mailem, jenž nesl přílohu s názvem I Love You. Příjemci, zvědavému, kdo se do něj zamiloval, pak program spuštěný otevřením přílohy načetl z adresáře e-mailové adresy a na ně pak „milostný vzkaz“ poslal dál. Škody vznikaly jak zahlcením e-mailových serverů, tak i druhou činností viru, kterou bylo přemazání souborů uložených v napadeném počítači.

    Ladislav Hagara | Komentářů: 12
    3.5. 22:33 | Nová verze

    Byla vydána nová major verze 5.0.0 svobodného multiplatformního nástroje BleachBit (GitHub, Wikipedie) určeného především k efektivnímu čištění disku od nepotřebných souborů.

    Ladislav Hagara | Komentářů: 2
    2.5. 22:22 | Komunita

    Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za duben (YouTube).

    Ladislav Hagara | Komentářů: 1
    2.5. 19:11 | IT novinky

    Provozovatel čínské sociální sítě TikTok dostal v Evropské unii pokutu 530 milionů eur (13,2 miliardy Kč) za nedostatky při ochraně osobních údajů. Ve svém oznámení to dnes uvedla irská Komise pro ochranu údajů (DPC), která jedná jménem EU. Zároveň TikToku nařídila, že pokud správu dat neuvede do šesti měsíců do souladu s požadavky, musí přestat posílat data o unijních uživatelích do Číny. TikTok uvedl, že se proti rozhodnutí odvolá.

    Ladislav Hagara | Komentářů: 4
    2.5. 11:22 | Zajímavý projekt

    Společnost JetBrains uvolnila Mellum, tj. svůj velký jazykový model (LLM) pro vývojáře, jako open source. Mellum podporuje programovací jazyky Java, Kotlin, Python, Go, PHP, C, C++, C#, JavaScript, TypeScript, CSS, HTML, Rust a Ruby.

    Ladislav Hagara | Komentářů: 2
    2.5. 09:11 | Bezpečnostní upozornění

    Vývojáři Kali Linuxu upozorňují na nový klíč pro podepisování balíčků. K původnímu klíči ztratili přístup.

    Ladislav Hagara | Komentářů: 2
    1.5. 20:00 | Komunita

    V březnu loňského roku přestal být Redis svobodný. Společnost Redis Labs jej přelicencovala z licence BSD na nesvobodné licence Redis Source Available License (RSALv2) a Server Side Public License (SSPLv1). Hned o pár dní později vznikly svobodné forky Redisu s názvy Valkey a Redict. Dnes bylo oznámeno, že Redis je opět svobodný. S nejnovější verzí 8 je k dispozici také pod licencí AGPLv3.

    Ladislav Hagara | Komentářů: 3
    1.5. 19:22 | IT novinky

    Oficiální ceny Raspberry Pi Compute Modulů 4 klesly o 5 dolarů (4 GB varianty), respektive o 10 dolarů (8 GB varianty).

    Ladislav Hagara | Komentářů: 0
    30.4. 22:33 | Nová verze

    Byla vydána beta verze openSUSE Leap 16. Ve výchozím nastavení s novým instalátorem Agama.

    Ladislav Hagara | Komentářů: 0
    Jaký filesystém primárně používáte?
     (58%)
     (1%)
     (8%)
     (21%)
     (4%)
     (2%)
     (2%)
     (0%)
     (1%)
     (3%)
    Celkem 521 hlasů
     Komentářů: 20, poslední dnes 00:19
    Rozcestník

    Jaderné noviny – 2. 9. 2009

    29. 9. 2009 | Jirka Bourek | Jaderné noviny | 3257×

    Aktuální verze jádra: 2.6.31-rc8. Citáty týdne: David Woodhouse, Ted Ts'o, Russell King, Con Kolivas. V krátkosti: Pevné limity CFS; Zase vyřazování; Nadcházející změna síťového API; Wiki pro kontrolní bod/restart; Plánovač BFS. Příznaky O_*SYNC pro synchronní I/O. Offline plánovač. Ext3 a RAID: Tiší zabijáci dat?

    Obsah

    Tento článek je překlad z LWN.net.

    Aktuální verze jádra: 2.6.31-rc8

    link

    Současné vývojové jádro je 2.6.31-rc8 vydané 27. srpna. Tohle by mělo být poslední -rc a rozhodně se to tu zklidňuje. Je v něm 131 commitů a je poměrně triviální. Linus předpovídá, že konečné vydání 2.6.31 bude 7. září.

    Během minulého týdne nevyšly žádné stabilní aktualizace, v době psaní tohoto článku se ani žádné nerevidují.

    Citáty týdne: David Woodhouse, Ted Ts'o, Russell King, Con Kolivas

    link

    Podle toho, jak to vidím já, nejsou SSD zařízení, ze kterých se neztrácí data; jsou jenom SSD zařízení, ze kterých se vaše data zatím neztratila.

    -- David Woodhouse

    Již nějaký čas doporučuji, aby lidé používali LVM a každý týden nebo dva zkontrolovali ve vhodném čase snímek pomocí fsck, když je zátěž systému minimální. Ve zdrojových kódech e2fsprogs je skript e2croncheck; je dost krátký, takže ho přiložím sem.

    Je to nutné? Ve světě perfektního hardwaru ne. Ve světě, kde se lidé neobtěžují koupit si ECC paměti, protože jsou o 10 % dražší a při sestavování PC se používají nejlevnější možné součástky – to považuji za opravdu dobrý nápad.

    -- Ted Ts'o

    Tohle v podstatě ukazuje, jak netolerantní jsou členové komunity hlavní řady jádra k lidem, kteří mají jiný názor. Přístup je: Buď s námi souhlasíš, nebo jsi idiot a budeme na tebe útočit, dokud nebudeš souhlasit.

    Doufám, že ostatní uvidí, co se zde stalo, a zváží, jestli se chtějí zapojit do pomlouvačné diktátorské komunity. Možná se zamyslí, jestli se místo toho nedají k BSD.

    -- Russell King

    Protože vyhazuje všechno, co víme, že je dobré při návrhu dobře škálujícího plánovače. Protože je tak neuvěřitelně jednoduchý. Protože funguje tak neuvěřitelně dobře v tom, kde je dobrý, přestože je tak jednoduchý. Protože je navržen takovým způsobem, že se hlavní řada nikdy nebude zajímat o jeho přijetí, což mi vyhovuje. Protože to přinutí lidi sednout si a psát si poznámky ohledně toho, kde jsou problémy v současném návrhu. Protože zahazuje filosofii, že jeden plánovač se hodí pro všechno a ukazuje, že na tom můžete být mnohem lépe s plánovačem navrženým ke konkrétnímu účelu. K louskání ořechů nechci používat parní válec.

    -- Con Kolivas je zpátky.

    V krátkosti

    link

    Pevné limity CFS

    link

    Linuxový „zcela férový plánovač“ [completely fair scheduler] funguje tak, že dělí dostupný čas CPU mezi procesy, které chtějí běžet. V mnoha situacích nicméně procesy běžící v systému svůj podíl nakonec nevyužijí; mohou například strávit tolik času čekáním na I/O, že jednoduše nemohou běžet dost dlouho na to, aby spotřebovaly veškerý čas, který je jim přidělen. V takové situaci CFS věnuje přebývající čas procesům, které intenzivněji využívají CPU a které ho tak mohou dobře využít, i když svůj podíl již překročily.

    To je normálně dobře; lepší je čas CPU dobře využít a nenechávat ho bez práce, když existují procesy, které chtějí běžet. Zdá se ale, že jsou situace, ve kterých správci systémů nechtějí tímto způsobem přebytečný čas CPU rozdávat. Pokud například procesy patří zákazníkovi, který platí za určité množství času CPU, dávat mu víc není dobrý obchod. Aby k tomu nedocházelo, vytvořil Bharata B Rao sadu patchů pro pevné limity CFS. Pevné limity [hard limits] jsou spravovány s použitím kontrolních skupin; umožňují správci nastavit absolutní limit množství času CPU, který může kontrolní skupina jako celek použít za dané období reálného času. Naúčtování plateb uživatelům, kteří chtějí svůj limit zvýšit, je samozřejmě záležitost politiky v uživatelském prostoru, takže není součástí patche.

    Zase vyřazování

    link

    Operace „vyřazení“, která informuje blokové úložné zařízení, že se specifické bloky již nepoužívají, by měla pomoci široké škále úložných technologií – včetně úložišť bez rotujících částí a „tence vybavených“ [thin provisioned] polí – dosáhnout vyšších výkonů. Vyřazování samo o sobě má ale výkonnostní potíže; detaily vizte v článku Problém s vyřazováním.

    Christoph Hellwig se snaží vylepšit výkonnost vyřazování novou sadou patchů, z níž některé původně přišly od Matthewa Wilcoxe. Tyto změny umožňují vyřazovacím požadavkům pokrýt mnohem větší oblasti úložného zařízení; předtím byla velikost omezena maximální velikostí požadavku pro zařízení. Když se zkombinuje s ioctl() příkazem XFS_IOC_TRIM, umožňuje tato změna uživatelskému prostoru vyslat v příhodné době hromadné vyřazovací operace pro všechny volné části souborového systému. Patche také zlepšují kontrolu nad tím, jestli specifický vyřazovací požadavek má být považován za bariéru a jestli by se měl provést jako blokující operace.

    Nadcházející změna síťového API

    link

    Nespokojen s tím, že přepracoval API síťových ovladačů již jednou (přesunem operací do jejich vlastní struktury), má nyní Stephen Hemminger sadu patchů, která mění API implementované všemi ovladači. Jedná se o funkci ndo_start_xmit(), kterou síťová vrstva používá k předání paketů ovladači k vyslání. Tato funkce by ve skutečnosti měla vracet pouze jednu ze dvou hodnot: NETDEV_TX_OK (paket byl přijat a zařazen do fronty k odeslání) a NETDEV_TX_BUSY (paket nebyl přijat, protože fronta byla plná nebo se objevil podobný problém). Ovladače používající zastaralý režim LLTX mohou také vrátit NETDEV_TX_LOCKED, čímž sdělují, že vysílací zámek je již obsazen.

    Problém je v tom, že typ návratové hodnoty ndo_start_xmit() byl definován jako int; někteří autoři ovladačů si proto mysleli, že mohou síťové vrstvě vracet libovolné chybové kódy. Se Stephenovým patchem se tento typ mění na netdev_tx_t, což je enum obsahující pouze definované návratové kódy. To by mělo podchytit všechny autory ovladačů, kteří se pokouší vracet nesmysly – ale za cenu změny mnoha ovladačů.

    Wiki pro kontrolní bod/restart

    link

    Je zde nová wiki zaměřená na sbírání informací o rychle se vyvíjející funkci kontrolních bodů/restartu. V současnosti je poměrně prázdná, ale lze předpokládat, že bude brzy zaplněna informacemi.

    Skutečná práce na kontrolních bodech/restartu stále zůstává cvičením ze složitosti. Jako příklad vezměme nejnověji zaslané kousky: Funkčnost kontrolního bodu a restartu pro bezpečnostní údaje. Vyžaduje mnoho háčků [hooks] v LSM modulech, aby získala informace o současném stavu zabezpečení, seřadila je a někdy v budoucnu obnovila. Pravděpodobně to vše lze donutit k práci, ale dlouhodobá údržba se může ukázat jako problematická.

    Plánovač BFS

    link

    Con Kolivas, který v minulosti pracoval na problémech s interaktivitou na desktopu a v roce 2007 znenadání vývojovou komunitu jádra opustil, zaslal nový plánovač nazvaný BFS. Říká k němu:

    Byl navržen k tomu, aby se díval pouze dopředu, vyhovoval většině slabších strojů a neškáloval pro masivní hardware, tj. je to plánovač z návrhu orientovaný na desktop s extrémně nízkými latencemi pro excelentní interaktivitu, není ,počítaný‘, nepružně férový s hezkou distribucí priorit a extrémní škálovatelností při normální úrovni zátěže.

    (S tím spojené vlákno vizte v v původním zaslání na LWN.)

    Příznaky O_*SYNC pro synchronní I/O

    link

    Když vývojáři přemýšlí o vynucení zápisu dat, která zapsali do souboru, na úložné zařízení, obvykle si vzpomenou na systémové volání fsync(). Je ale také možné požadovat synchronní chování pro všechny operace na popisovači souboru buď při open() nebo použitím fcntl(). Podpora pro synchronní příznaky I/O se v 2.6.32 pravděpodobně zlepší, ale tato práce přinesla několik zajímavých otázek, které se týkají současné implementace a dopředné kompatibility.

    Pro specifikaci synchronního chování I/O jsou tři standardně definované příznaky:

    • O_SYNC: Vyžaduje, aby všechny operace zápisu blokovaly, dokud nejsou všechna data a metadata na trvalém úložišti.

    • O_DSYNC: Podobné O_SYNC kromě toho, že se nepožaduje čekání na změny metadat, které nejsou nutné pro čtení právě zapsaných dat. V praxi O_DSYNC znamená, že aplikace nemusí čekat na zápis pomocných informací (například čas modifikace souboru) na disk. Použití O_DSYNC místo O_SYNC obvykle odstraňuje nutnost zapsat při zápisu inode souboru.

    • O_RSYNC: Tento příznak, který ovlivňuje pouze čtení, musí být použít zároveň s buď O_SYNC, nebo O_DSYNC. Způsobí, že read() bude blokovat, dokud se čtená data (a možná metadata) nezapíší na disk (je-li to nutné). Tento příznak tedy dává jádru možnost zpozdit zápis dat na disk; může dojít k libovolnému počtu zápisů, ale data není nutné zapsat, dokud je aplikace znovu nečte.

    O_DSYNCO_RSYNC nejsou nové; do relevantních standardů byly přidány během minulých deseti let. Linux je ale nikdy nepodporoval (jsou to volitelné vlastnosti), takže je glibc jednoduše definuje tak, že jsou stejné jako O_SYNC.

    Christoph Hellwig pracuje na správné implementaci těchto příznaků se snahou začlenit ji do 2.6.32. V tomto okamžiku by mělo jít o relativně přímočarou změnu; jádro již má nějakou hezkou infrastrukturu pro zapisování dat a metadat. Potenciálně obtížnější je ale provést tuto změnu způsobem, který nejlépe splní očekávání existujících aplikací.

    Jsou zde navíc dvě záležitosti, které tento přechod ztěžují víc, než by jeden očekával:

    • Linux ve skutečnosti nikdy neimplementoval O_SYNC; aplikace místo toho dostávaly O_DSYNC.

    • Implementace open() v jádře jednoduše ignoruje všechny příznaky, o kterých nic neví. Toto chování lze změnit pouze s rizikem rozbití neznámého počtu aplikací; je to součástí jaderného ABI.

    Vzhledem k prvnímu problému uvedenému výše může být jeden v pokušení vytvořit pro O_DSYNC nový příznak a použít ho k získání současného chování, zatímco O_SYNC by získalo sémantiku kompletní synchronizace metadat. Pokud by se to však udělalo takto, aplikace, které budou přeloženy s novou C knihovnou, ale poběží na starém jádře, budou open() předávat neznámý příznak a jádro ho bude poctivě ignorovat. Taková aplikace by potom synchronní chování I/O nezískala vůbec, což téměř určitě není dobře. Je potřeba udělat něco složitějšího.

    Také je zde otázka, jakou sémantiku by starší aplikace měly dostat. Jamie Lokier argumentoval, že aplikace požadující O_SYNC chtěly kompletní synchronizaci metadat, i když je jádro podvádělo a neposkytovalo všechno. Když tedy poběží pod novějším jádrem se správnou implementací O_SYNC, měla by stará aplikace obdržet chování O_SYNC. Ulrich Drepper si naopak myslí, že toto chování by se pro staré aplikace měnit nemělo:

    Tyto programy ale zjevně umí žít s chybnou sémantikou. Nemám z toho žádné velké obavy, pokud lidé opravdu potřebují sémantiku O_SYNC, nechť svůj kód překompilují.

    Zdá se, že Ulrichův pohled vyhraje z jednoduchého důvodu, že výkonnostní postihy synchronizace dalších metadat se zdají být horší než to, že aplikace dostane sémantiku, se kterou běžela již předtím, i když tato sémantika nebyla taková, jaká byla slíbena.

    Christoph naznačil pravděpodobný postup. Interně se z O_SYNC stane O_DSYNC a příznak O_SYNC pro open() bude znamenat O_DSYNC. Systémové volání open() potom bude přijímat nový příznak (neznámé jméno, navrženo bylo O_FULLSYNCO_ISYNC), který bude před aplikacemi skryt. Na úrovni glibc aplikace uvidí toto:

    #define O_SYNC        (O_FULLSYNC|O_DSYNC)

    Na starších jádrech příznak O_DSYNC (o stejné hodnotě, jakou má nyní O_SYNC) vyvolá stejné chování jako vždycky, zatímco O_FULLSYNC bude ignorováno. Na novějších jádrech tento příznak poskytne kompletní sémantiku O_SYNC. Dokud aplikace nebudou sahat pod kapotu a snažit se manipulovat s příznakem O_FULLSYNC přímo, všechno bude v pořádku.

    Offline plánovač

    link

    Jednou z primárních funkcí jakéhokoliv jádra je spravovat výpočetní zdroje hardwaru, na kterém běží. Nedávný patch, jehož autorem je Raz Ben-Yehuda, tento fakt mění tak, že odebere jedno nebo více CPU z kontroly jádra, aby procesy na těchto procesorech mohly běžet nerušeně. „Offline plánovač“, jak Raz svůj patch nazývá, měl poměrně neklidnou plavbu, co se počátečního přijetí týče, ale jak se vlákno na linux-kernel vyvíjelo, jaderní hackeři ustoupili a podívali se na problémy, které se patch snaží řešit – a přišli s jinými potenciálními řešeními.

    Základní nápad za offline plánovačem je jednoduchý: Použít možnost odpojení CPU za běhu, aby se procesor odstranil ze systému, ale místo toho, aby byl zastaven, se jinému kódu umožní na něm běžet. Protože se procesor nebude účastnit různých synchronizačních schémat CPU (RCU, spinlocky atd.), ani nebude obsluhovat přerušení, může svou pozornost zcela zaměřit na kód, který na něm běží. Cílem je, aby kód běžící na offline procesoru nikdy netrpěl latencemi zavlečenými jádrem.

    Hlavní patch je poměrně malý, poskytuje rozhraní k registraci funkce, která se má zavolat, když se CPU vypne:

    int register_offsched(void (*offsched_callback)(void), int cpuid);

    To registruje zpětné volání [callback], které se zavolá, když je CPU s daným cpuid vypnuto (tj. odpojeno za běhu). Typicky uživatel bude chtít nahrát modul, který zavolá register_offsched() a následně vypne CPU, což na něm spustí zpětné volání. Když se zpracování dokončí a zpětné volání doběhne, procesor je zastaven. V tomto okamžiku lze CPU opět zapnout a vrátit pod kontrolu jádra.

    Toto rozhraní ukazuje na jeden z problémů, na který upozornili potenciální uživatelé offline plánovače: tímto způsobem lze spustit pouze kód běžící v jaderném kontextu, ne v uživatelském prostoru. Protože mnoho z aplikací, které by mohly těžit z toho, že mají CPU jenom pro sebe, jsou existující programy v uživatelském prostoru, změna na jaderný kód je považována za problematickou.

    Raz poznamenává, že izolovaný procesor má přístup k celé paměti v systému a jádro má stále přístup k paměti, kterou izolovaný procesor používá. To považuje za výhodu, ale ostatní, hlavně Mike Galbraith, vidí věci jinak:

    Osobně považuji koncept vkládání RTOS do obecného OS bez jakékoliv izolace za cizorodý. Zajímavý, ale cizorodý.

    Jedním z hlavních problémů, které jaderní vývojáři vidí u přístupu offline plánovače, je, že Linux je zcela obcházen. To je samozřejmě cílem patche: Věnovat 100 % CPU konkrétní úloze. Jak to říká Christoph Lameter:

    OFFSCHED některé procesory zbavuje šumu OS (přerušení, časovače, RCU, kradení řádků v cache atd. atp.). V současné době není možné na OS provozovat kus softwaru nerušeně.

    To však Peter Zijlstra považuje za hlavní nevýhodu: Obcházení jádra neprospívá nikomu, tím méně Linuxu. K tomu říká, že existují způsoby, jak udělat to samé, takže přidávat do jádra další nemá význam:

    Takže to, co se mi nelíbí, je ten koncept spouštění kódu na CPU mimo Linux. Tím myslím, že pokud to chceš, tak použij RTLinux, RTAI, L4-Linux atd. Je spousta speciálních nelinuxových hypervizorů/exojader, kterými můžeš věci spouštět mimo Linux.

    Raz však ví o mnoha uplatněních pro procesory, které by byly vyhrazeny specifickým úlohám. Představuje si jiný druh systému, který nazývá Na službu orientovaný systém [Service Oriented System, SOS], kde je jádro pouze jednou komponentou a pokud vyrušuje specifickou službu, mělo by být odstraněno z cesty:

    Co navrhuji, je prostě pouze odlišný přístup k tomu, jak obsluhovat vícejaderné systémy. Místo přemýšlení o procesech, vláknech atd. přemýšlím o službách. Proč nevzít procesor a definovat ho tak, že řeší pouze firewall? šifrování? směrování? přenosy? zpracování videa… a tak dál…

    Odstranění jádra z cesty není mezi mnoha jadernými hackery příliš populární, ale nápad zcela vyhradit procesor specifické úloze je pro některé uživatele důležitý. Ve světě vysoce výkonných výpočtů [high performance computing, HPC] několik procesorů tráví svůj čas jediným úkolem, který obyčejně chroustá čísla. Odstranění i minimálních přerušení, těch, která provádí plánování a další jaderné domácí práce, vede k lepší celkové výkonnosti. Tito uživatelé v podstatě chtějí pohodlí Linuxu běžícího na jednom CPU, zatímco zbytek systému se věnuje jejich konkrétní aplikaci.

    Po poněkud rozvášněné odbočce o obecném snížení latencí v jádře Andrew Morton žádal o vyjádření problému: Všechno, co jsem zatím viděl, je ,Chci 100% přístup k CPU‘. To není vyjádření problémů – to je implementace. Ve své odpovědi Chris Friesen popsal jednu možnou aplikaci:

    V našem případě je vyjádření problémů takové, že jsme měli z principu jednovláknový emulátor, u kterého jsme chtěli, aby pracoval tak rychle, jak je to jenom možné.

    Dali jsme mu téměř tolik CPU, kolik bylo možné, pomocí příklonu k CPU a příklonu IRQ [affinity] a použili jsme frontu zpráv ve sdílené paměti, abychom jinému CPU umožnili řešit I/O. V našem případě jsme stále měli jaderná vlákna, která běžela na stejném CPU jako emulátor; pokud bychom měli přímočarý způsob, jak se jim vyhnout, udělali bychom to.

    To vedlo Thomase Gleixnera k tomu, že zvážil alternativní přístup. Přeformuloval problém takto: Spustit přesně jedno vlákno na dedikovaném CPU bez jakéhokoliv vyrušování tikem plánovače. Vzhledem k této definici poté navrhl poměrně jednoduchý přístup:

    Stačí způsob, jakým říci jádru, že CPUx může vypnout tikání plánovače, když běží pouze jedno vlákno a toto vlákno běží v uživatelském prostoru. Jakmile na toto CPU dorazí další vlákno nebo to jediné vlákno vstoupí do jádra kvůli blokujícímu systémovému volání, tikání plánovače je potřeba restartovat.

    Gregory Haskings poté navrhl změnu plánovací třídy FIFO nebo vytvoření nové třídy s vyšší prioritou tak, že se zakáže tikání plánovače. To by zakomponovalo Thomasův nápad do existujícího frameworku plánování. Jak lze uhodnout, stále je potřeba vyřešit nějaké detaily ohledně provozu procesů bez tiku plánovače, ale Thomas a ostatní si myslí, že jde o něco, co lze udělat.

    Offline plánovač sám o sobě v diskuzi poněkud zapadl. Není překvapivé, že Raz stále protlačuje svůj přístup, nicméně v tom je kromě nechuti k obcházení jádra problematická i neschopnost spouštět kód v uživatelském prostoru. Thomas to řekl poměrně stroze:

    Mluvil jsem o problému, že nemůžeš na offline CPU spustit běžnou úlohu v uživatelském prostoru. To je hlavní místo, kde tvůj návrh stojí za prd. Mít bezdůvodně specializovaná programovací prostředí, která programátorovi aplikace diktují těsná omezení, je děsivé.

    Nad problémem se zamýšlejí i jiní, nápad podobný Thomasovu nedávno na linux-kernel zaslal Josh Triplett jako RFC. Joshův malinký patch jednoduše zakazuje tikání čítače permanentně jako demonstraci výkonnostního zisku, kterého lze dosáhnout pro procesy vázané na CPU. Poznamenává, že režie tiku časovače může být významná:

    Na mém systému tik časovače trvá přibližně 80 µs, každých 1/Hz sekund; to představuje významnou režii – 80 µs z každé milisekundy například znamená režii 8 %. Spotřebovaný čas se navíc liší a přerušení časovače tak vedou ke kolísání výkonností chroupání čísel.

    Josh varoval, že jeho patch ani omylem nepředstavuje hotové řešení, protože rozbíjí RCU, účtování procesů a další věci. Ale nabootuje a dokáže spustit jeho testy. Pro některé z problémů má Josh rozpracované opravy a stejně tak má i celkový cíl: Rád bych se dopracoval k patchi, který dokáže skutečně zabít tik časovače, aby bylo jádro úplně řízené událostmi a odstranilo se dotazování [polling], ke kterému při tiku časovače dochází. Prohlédl jsem všechno, co tik čítače dělá, a do posledního bitu to může zastat přístup založený na událostech.

    Je dost nepravděpodobné, že bychom se někdy dočkali toho, že se offline plánovač dostane do hlavní řady jádra, ale nápad za ním vedl ke vzniku několika zajímavých diskuzí, které možná povedou k řešení pro ty, kteří se pokouší odstranit režii jádra na vybraných CPU. V mnoha ohledech je to další příklad nebezpečí vývoje kódu v izolaci. Kdyby Raz pracoval otevřeně a sháněl komentáře od jaderné komunity, mohl si mnohem dříve uvědomit, že jeho přístup nebude akceptovatelný – přinejmenším pro hlavní řadu.

    Ext3 a RAID: Tiší zabijáci dat?

    link

    Technologie jako žurnálování souborového systému (což se používá i u ext3) nebo RAID jsou obecně přijímány za účelem zlepšení celkové spolehlivosti. Někteří správci systémů tedy mohli být poněkud znepokojeni nedávným vláknem na linux-kernel, kde bylo naznačeno, že v některých situacích tyto technologie ve skutečnosti zvyšují riziko ztráty dat. Tento článek se pokouší vyjasnit argumenty a dospět k závěru o tom, jak velké obavy by správci systémů měli mít.

    Konverzace ve skutečnosti začala v březnu, kdy Pavel Machek navrhl patch dokumentace popisující předpoklady, které viděl v návrhu souborových systémů pro Linux. Věci na chvíli utichly, ale na konci srpna došlo k oživení. Zdá se, že Pavel narazil na nějaké problémy se ztrátou dat, když používal flash disk s nespolehlivým připojením k počítači; následující testy provedené úmyslným odebíráním aktivních disků potvrdily, že je snadné data takto ztratit. To neočekával:

    Když jsem tu flash kartu vytáhl, předpokládal jsem, že je to bezpečné, protože karta je prezentována jako blokové zařízení a ext3 by se mělo s náhlými odpojeními disku vyrovnat. A to bylo špatně, špatně, špatně. (To mi nikdo ve škole neřekl, asi bych měl chtít zpátky peníze.)

    Ve snaze zabránit nárůstu požadavků o vrácení školného po celém světě se Pavel pokusil vložit do dokumentace jádra nějaké varování. Narazil na překvapující odpor, který považoval (a nejenom on) za pokus zamést nedostatky Linuxu pod koberec. Skutečný příběh je přirozeně o něco složitější.

    Technologie žurnálování, jaká se používá v ext3, funguje tak, že se některá data do souborového systému zapisují dvakrát. Kdykoliv musí souborový systém provést změnu metadat, nejprve vytvoří seznam všech potřebných změn na úrovni bloků a zapíše je do speciální oblasti na disku (do žurnálu). Jakmile je známo, že se kompletní popis změny dostal na fyzické úložiště, je zapsán „záznam o vykonání“ [commit record], který oznamuje, že souborový systém změnu provede. Jakmile je bezpečně uložen i záznam o vykonání, kód souborového systému může začít zapisovat změny přímo do souborového systému na fyzickém úložišti. Pokud je tato operace přerušena (selháním napájení, pádem systému nebo náhlým vyjmutím disku), souborový systém může obnovit plán změn z žurnálu a začít odznova. Konečným výsledkem je, že změny metadat probíhají v transakcích; buď doběhnou úplně, nebo vůbec. A to by mělo zabránit poškození struktury souborového systému.

    Zde stojí za to poznamenat, že data jako taková do žurnálu zapisována nejsou, takže při nenadálém selhání může dojít ke ztrátě nedávno zapsaných dat. Je možné nakonfigurovat ext3 (a ext4) tak, aby se do žurnálu zapisovala i data, ale vzhledem k významnému poklesu výkonnosti se tato volba příliš nepoužívá. Žurnálování poskytuje nějakou ochranu dat i tak – když se ztratí metadata, nelze najít ani data s nimi spojená – to ale není důvod k jeho existenci.

    Není to ale chybějící žurnálování dat, co Pavlovi a dalším způsobilo starosti. Povaha zařízení založených na flash totiž umožňuje další „zajímavý“ způsob selhání. Souborové systémy pracují s bloky pevných velikostí, v Linuxu je to běžně 4096 bytů. Úložná zřízení také používají bloky pevné velikosti; na tradičních rotujících discích jsou tyto bloky tradičně 512 bytů dlouhé, i když větší velikosti bloků jsou již na obzoru. Klíčové je zde to, že na normálním rotujícím disku může souborový systém zapsat blok bez ovlivnění dalších nesouvisejících bloků na disku.

    Flashové úložiště také používá bloky pevných velikostí, ale ty bývají větší – typicky od desítek do stovek kilobytů. Bloky na flash úložišti lze přepsat pouze jako celek, takže zápis „bloku“ o velikosti 4096 bytů na úrovni operačního systému znamená uvnitř flash disku větší cyklus čtení-změna-zápis. Pro pečlivého programátora je rozhodně možné vytvořit pro takový disk firmware, který tuto operaci provede bezpečným transakčním způsobem. Je také možné, že výrobce disku mnohem více než pečlivé programování zajímá, jak co nejrychleji dostat na trh levné zařízení. Na trhu běžného hardwaru pro PC se tato druhá možnost stává spíše jistotou.

    To vše znamená, že na nekvalitním flash disku přerušená operace zápisu může vést k poškození bloků, které s operací nesouvisejí. Pokud byl přerušen zápis metadat, žurnálovací souborový systém operaci zopakuje při příštím připojení, čímž zajistí, že metadata skončí na svém zamýšleném umístění. Souborový systém ale nemůže vědět nic o blocích, které byly zničeny, takže proti tomuto druhu selhání žurnálování nechrání – i když způsobí poškození metadat, kterému mělo zabránit.

    Toto je „chyba“, kterou chtěl Pavel zdokumentovat. K tomu tvrdil, že žurnálovací souborové systémy mohou v takové situaci věci zhoršit. Vzhledem k tomu, že u žurnálovacích souborových systémů nebývá zapotřebí kompletní fsck ani při chybném odpojení, na poškození metadat se nepřijde. To přinejlepším může znamenat, že se uživatel nějakou dobu nemusí dozvědět o ztrátě dat, při nejhorším poškozená metadata způsobí, že kód při dalších operacích poškodí i jiné části souborového systému. Vynechané fsck umožní systému nabootovat rychle, ale za cenu rizika, že poškození přetrvá nebo se bude šířit.

    Dalo by se snadno argumentovat, že skutečný problém spočívá ve skrytých překladových vrstvách, díky kterým flash zařízení vypadá jako normální disk. Přesně to udělal David Woodhouse:

    To přesně ukazuje, proč je špatný nápad mít tuto „překladovou vrstvu“ ve firmwaru v zařízení. Mnohem lépe na tom jsme, když máme plný přístup k flash v zařízení a OS může skutečně vidět, co se děje. Takovým způsobem můžeme skutečně ladit, opravit a zotavit se z takových problémů.

    Výrobci flash disků jsou nicméně k těmto argumentům hluší.

    Byl také diskutován podobný problém u zařízení RAID. Disky lze seskupit do pole RAID5 nebo RAID6 s tím, že pole jako celek může přežít kompletní selhání kteréhokoliv disku v něm. Dokud selže jenom jeden disk, uživatel RAID pole si může být jistý, že kouř vycházející z pole s sebou neodnáší data.

    Co když ale selže víc než jeden disk? RAID funguje tak, že seskupuje bloky do pruhů [stripe] a vytváří kontrolní součty těchto pruhů. Aktualizace bloku vyžaduje přepis pruhu, který ho obsahuje, a s ním spojeného bloku kontrolního součtu; pokud tedy zápis bloku může způsobit, že pole ztratí celý pruh, můžeme se dočkat stejné ztráty dat jako na flash disku. Za normálních okolností k tomuto druhu ztráty dat v RAID poli nedojde. Může k němu ale dojít, pokud (1) jeden disk již selhal a pole běží v „degradovaném“ režimu a (2) dojde k druhému selhání (řekněme, že Pavel vytáhne zástrčku), když probíhá zápis.

    Pavel z toho vyvodil, že RAID zařízení mohou být ve skutečnosti nebezpečnější, než ukládání dat na jediném disku; založil ohledně toho celé oddělené podvlákno (pod názvem raid je nebezpečný, ale to je tajné). Toto tvrzení způsobilo v konferenci poměrně značné znepokojení; mnozí měli pocit, že to přesvědčí uživatele, aby místo technologií, jako je RAID, používali konfigurace s jediným diskem bez redundance. Uživatelé, kteří by to udělali, by se vyhnuli možnosti ztráty dat kvůli specifickému nepravděpodobnému dvojitému selhání za cenu toho, že by byli naprosto bezbranní vůči mnohem pravděpodobnějšímu jedinému selhání. Konečným výsledkem by bylo mnohem více ztracených dat.

    Skutečná lekce z této diskuze je poměrně jednoduchá:

    • S flash disky zacházejte opatrně, neočekávejte, že jsou spolehlivější, než skutečně jsou, a nevyjímejte je ze systému, dokud se všechny zápisy nedokončí.

    • RAID pole mohou zvýšit spolehlivost dat, ale pole, které neběží s plným počtem funkčních disků ztrácí redundanci, která tuto spolehlivost poskytuje. Pokud by důsledky dalšího výpadku byly příliš vážné, člověk by se měl vyhnout zápisům na pole běžící v degradovaném režimu.

    • Jak upozornil Ric Wheeler, nejsnazší způsob, jak v linuxovém systému ztratit data, je používat disky s povolenou zápisovou cache. To je obzvláště pravdivé pro systémy s RAID5/6, kde stále nejsou správně podporovány zápisové bariéry. Mluvilo se o zakázání zápisových cachí disku a povolení bariér ve výchozím nastavení, ale žádné patche zaslány nebyly.

    • Nic nenahradí dobré zálohy. K tomu by autor článku Jonathan Corbet rád podotkl, že u zálohy, která nebyla nedávno zkontrolována, je značná šance, že to nebude dobrá záloha.

    Jak se tato informace odrazí v dokumentaci jádra, se uvidí. Částečně se jedná o ten druh informace pro správu systémů, jejíž začlenění do dokumentace jádra samotného nebývá uznáno za vhodné. Má ale smysl vědět, na jakých předpokladech je vystavěn souborový systém a jaké jsou možné způsoby selhání. Lepší pochopení toho, jak může dojít ke ztrátě dat, nám může jenom pomoci zabránit tomu, aby se tak skutečně stalo.

           

    Hodnocení: 100 %

            špatnédobré        

    Nástroje: Tisk bez diskuse

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    29.9.2009 00:12 kotrcka | skóre: 23 | blog: Onééé 2 | Praha
    Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 9. 2009

    prvý apríl? :-)

    Keďže tu účet nejde zrušiť, zmenil som si heslo na random a "zabudol ho".
    29.9.2009 00:56 Sleep_Walker
    Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 9. 2009
    Nejspis preklep na ciferniku stroje casu.
    29.9.2009 07:26 Leoš Literák | skóre: 74 | blog: LL | Praha
    Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 9. 2009

    Spise si tazatel nevsiml, ze jaderne noviny vzdycky vychazeji se zpozdenim.

    Zakladatel tohoto portálu. Twitter, LinkedIn, blog, StackOverflow
    29.9.2009 09:27 Atom321 | skóre: 20
    Rozbalit Rozbalit vše O_SYNC ?
    Tak teď jsem poněkud rozčarován. Jestli jsem to dobře pochopil:

    1) Flag O_SYNC v současných verzích jádra nesynchronizuje metaddata. Čili pokud připíšu na konec souboru otevřeného s O_SYNC, write() vrátí OK a pak systém lehne, data tam pravděpodoně nebudou. 2) Toto chování je naprosto špatné, v rozporu s normou POSIX a není popsáno v dokumentaci. 3) Je dost pravděpodobné, že spousta současných aplikací spoléhá na správné chování a od Linuxu ho nedostává. 4) Je to tam už léta a nikoho to nesere. 5) A navrch si někteří z hlavních vývojářů si dokonce myslí, že je to tak správně, protože větší rychlost.

    Ujistěte mě, že je to chyba v překladu, nebo jsem něčemu špatně porozumněl.

    michich avatar 29.9.2009 09:57 michich | skóre: 51 | blog: ohrivane_parky
    Rozbalit Rozbalit vše Re: O_SYNC ?
    U O_DSYNC se mluví výslovně pouze o těch metadatech, která nejsou nutná pro přečtení dat, takže to, co uvádíš v 1) by hrozit nemělo.
    29.9.2009 13:34 Atom321 | skóre: 20
    Rozbalit Rozbalit vše Re: O_SYNC ?
    Aha. Podle popisu O_DSYNC to tak vypadá. Snad jsem se tedy vyděsil zbytečně.

    http://www.opengroup.org/onlinepubs/007908799/xsh/open.html http://www.opengroup.org/onlinepubs/007908799/xbd/glossary.html#tag_004_000_292

    Ovšem přístup "necháme to blbě jak to je, v zájmu rychlosti" se mi nelíbí ani trochu.

    michich avatar 29.9.2009 13:41 michich | skóre: 51 | blog: ohrivane_parky
    Rozbalit Rozbalit vše Re: O_SYNC ?
    Ale přístup "je to tak už spoustu let, nikomu to nevadilo, a když to teď spravíme, tak způsobíme výkonnostní regresi" náhodou není úplně špatný :-)
    29.9.2009 15:02 Atom321 | skóre: 20
    Rozbalit Rozbalit vše Re: O_SYNC ?
    Jenže my nevíme, jestli to někomu vadilo. Zatím ale nikdo neodhalil, že za to můžeme my, tak to zkusíme ututlat. Výkonová regrese po opravě by nás mohla prozradit, tak to zaflikujeme jen u věcí kompilovaných s novým jádrem a novou glibc. Pak se to projeví až později, to už nás nebude nikdo podezřívat.
    michich avatar 29.9.2009 16:15 michich | skóre: 51 | blog: ohrivane_parky
    Rozbalit Rozbalit vše Re: O_SYNC ?
    Nikdo se to nesnaží ututlat. Ta debata spíš ukazuje to, že praktické dopady mají při rozhodování vývojářů větší váhu než přesné dodržování specifikace.
    29.9.2009 19:07 Atom321 | skóre: 20
    Rozbalit Rozbalit vše Re: O_SYNC ?
    To je právě jedna z bolestí Linuxu - okamžité praktické dopady dostávají přednost před výhledem do budoucnosti.
    29.9.2009 19:17 Andrej Herceg | skóre: 43
    Rozbalit Rozbalit vše Re: O_SYNC ?
    Čo je zlé na tom, že sa to opraví tak, že staré aplikáciu budú fungovať presne tak ako doteraz a nové už môžu fungovať správne (a teda v budúcnosti to bude fungovať správne)?
    1.10.2009 14:57 Atom321 | skóre: 20
    Rozbalit Rozbalit vše Re: O_SYNC ?
    Špatné je na tom to, že ta chyba je tam dlouho a vědělo o ní jen pár vyvolených, mezi které nepatřili ani autoři GLIBC. Staré aplikace občas fungují špatně, jen nikdo neví proč a není schopen příčinu najít. Skvělá zpráva je, že přesně stejně špatně budou fungovat dál i s novým jádrem.

    Aby nová aplikace mohla fungovat správně, nestačí opravit jádro, musí se upravit i headery C knihovny. Naopak starší aplikace fungující s nesprávným O_SYNC začnou být pomalejší až po kompilaci s novou glibc.

    Takže způsobené problémy budou ve výsledku větší, jen trošku odložené v čase a pravá příčina se bude hůř hledat.
    29.9.2009 19:43 cronin | skóre: 49
    Rozbalit Rozbalit vše Re: O_SYNC ?
    Vdaka tomu je Linux kernel tam, kde je. Ak chces opacny priklad, pozri Hurd.
    1.10.2009 15:19 Atom321 | skóre: 20
    Rozbalit Rozbalit vše Re: O_SYNC ?
    Nemáte pravdu. Linux je dále než Hurd, protože na něm bylo odvedeno mnohem víc práce více lidmi a je větší silou tlačený do světa. Špatný návrh se dá protlačit silou. S lepším návrhem se ale stejnou silou dostanete dál. Pokud chcete opačný příklad, podívejte se na MacOS.
    29.9.2009 14:57 Ondrej 'SanTiago' Zajicek
    Rozbalit Rozbalit vše Re: O_SYNC ?

    > 1) Flag O_SYNC v současných verzích jádra nesynchronizuje metaddata. Čili pokud připíšu na konec souboru otevřeného s O_SYNC, write() vrátí OK a pak systém lehne, data tam pravděpodoně nebudou.

    On O_SYNC na Linuxu funguje s normalnimi soubory? Ja ziju v predstave, ze funguje jen s blokovymi zarizenimi.

    29.9.2009 15:18 Ondrej 'SanTiago' Zajicek
    Rozbalit Rozbalit vše Re: O_SYNC ?

    Funguje. To jsem si jen spletl O_SYNC s O_DIRECT.

    29.9.2009 11:24 Ivan
    Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 9. 2009

     JJ. Zurnalovani je naprd. Ono to vytvari falesny dojem ze vas to ochrani pred vsemi typy selhani HW - to ale neni pravda. Pokud mate vadnou pamet ve SCSI/FC adapteru anebo mate problemy s terminaci SCSI tak muzete snadno prijit o vsechna data prave diky zurnalovani.

     

    29.9.2009 12:01 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 9. 2009
    Když máš vadnou paměť v adaptéru nebo jiný HW problém, tak je to problém hardwaru - je nesmysl z toho vyvozovat závěr, že žurnálování je naprd. (Nebo snad při hardwarové chybě na fs bez žurnálování ztráta dat nehrozí?)
    Quando omni flunkus moritati
    29.9.2009 17:00 Ivan
    Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 9. 2009

    Zurnalovani, tak jak je implementovano na linuxu vede k tomu, ze se nespousti fsck ani v pripadech kdy se mela provest plna kontrola filesystemu. Treba JFS na AIXu je taky zurnalovaci FS, ale presto v mnoha pripadech OS usoudi, ze server byl rebootovan kvuli HW chybe a provede se plne fsck. Pokud na linuxu pri stovce rebootu 100x prehrajete zurnal tak se vam muze stat ze na disku uz zadna data mit nebudete. Dokonce i takovy wokna umoznuji oznacit NTFS jako "dirty" tim si vynutit plnou kontrolu filesystemu po rebootu.

     

     

    29.9.2009 17:07 Andrej Herceg | skóre: 43
    Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 9. 2009
    To je vec nastavenia systému. Mne sa napr. pri nesprávnom vypnutí ponúkne aj kontrola úplná disku (a pri tom AIX aj sám píšeš, že o tom, či je potrebná úplná kontrola rozhoduje OS a nie samotný JFS).
    29.9.2009 17:24 pharook
    Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 9. 2009

    Dokonce i takovy wokna umoznuji oznacit NTFS jako "dirty" tim si vynutit plnou kontrolu filesystemu po rebootu.

    Linuxové distribuce ne?  

    29.9.2009 19:07 TomCat1 | skóre: 10
    Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 9. 2009
    Dokonce i takovy wokna umoznuji oznacit NTFS jako "dirty" tim si vynutit plnou kontrolu filesystemu po rebootu.
    Něco jako "shutdown -F"?
    Have you tried turning it off and on again?
    30.9.2009 00:04 R
    Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 9. 2009
    Uz som parkrat videl autoamticky spusteny fsck na ext3 particii po HW alebo SW chybe (prepisal som nejake nahodne miesto v pamati).
    Heron avatar 29.9.2009 20:59 Heron | skóre: 53 | blog: root_at_heron | Olomouc
    Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 9. 2009
    Fakt nechápu o co Pavlovi jde.

    Na obhajobu svých poznatků si vezme obskurní HW a dělá s tím věci, které jsou nebezpečné už z principu a hrozně se diví, že dojde ke ztrátě dat. A opět se místo příčiny (nevhodné chování k HW) řeší následek (journal zhoršuje situaci). Ten degradovaný raid a druhé selhání lze brát snad už jedině jako špatný vtip. Dostat se toto do kernelu (dokumentace) je snad ještě horší než Ts'oův patch do jádra na detekci debilně napsaných aplikací a úpravu chování ext4.

    Pak se Linus nemá divit, že je kernel obrovský a přeplněný.
    29.9.2009 22:37 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 9. 2009
    je snad ještě horší než Ts'oův patch do jádra na detekci debilně napsaných aplikací a úpravu chování ext4.
    Přesně - patche zajišťující, aby nepřicházel o data ten, kdo na počítači dělá kraviny a padá mu to, nemají v jádře co dělat. A nebo když už, tak jako volitelná možnost, kterou půjde vyhodit.
    Quando omni flunkus moritati
    30.9.2009 07:22 cronin | skóre: 49
    Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 9. 2009
    Pojem
    ... na počítači dělá kraviny ...
    je velmi relativny. Jeden priklad:

    Panej nefungoval na pocitaci zvuk. Po kratkom zistovani priciny som jej podal vysvetlenie: "[Pocitac] nevie najst Tvoju zvukovu kartu." A kedze to bola velmi bystra pani, na chvilu sa zamyslela a dala mi odpoved, po ktorej som pochopil, aki sme my developeri lameri a ako tazko chapeme "obycajnych" pouzivatelov: "Aka moja zvukova karta? Je to predsa JEHO zvukova karta!"

    30.9.2009 09:33 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 9. 2009
    Ten příklad je naprosto nesouvisející - zrovna tahle paní na počitači pravděpodobně bude schopná udělat jenom jedinou věc, která může vést ke ztrátě dat na FS - reset tlačítkem na bedně.

    Kraviny, o kterých mluvím já, jsou záležitosti typu zkusím z toho stroje vymačkat o 2% výkonu navíc tím, že přetaktuju procesor o 10%, a uvidím, co to udělá.
    Quando omni flunkus moritati
    30.9.2009 20:10 Jiri | skóre: 3
    Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 9. 2009

    No... Flashku vidi jako disk a bezne se uvadi, ze ext3 je blbuvzdorny. Jenze on prave ve flashkach (poskozene RAIDy mi prijde hloupe komentovat, rozbite zarizeni je rozbite a nikdo s tim nic nenadela) neni. Vubec se mu nedivim, ze to chtel dopsat do dokumentace (jestli jsem to pochopil spravne, vubec nechtel zvetsovat kernel). Pro me je to taky novinka a budu si muset na flashky davat vetsi pozor.

    30.9.2009 23:24 Andrej Herceg | skóre: 43
    Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 9. 2009
    Lenže aj pri iných súborových systémoch sa pri prepise nejakého sektora v skutočnosti na tej flash pamäti prepisuje oveľa väčší úsek, takže to nie je problém súborového systému ext3.
    1.10.2009 11:20 Ivan
    Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 9. 2009

     Ona to neni primo chyba ext3, ale podobne pripady se uz staly. Nektere disky (napr. WD) chybne reportovaly skutecnost, ze data byla zapsana na disk. Tyhle disky poslaly potvrzeni uz kdyz byla data zapsana do cache na disku. Pri vypadku napajeni nebyl filesystem konzistentni a dochazelo ke ztratam dat. Zajimava vec je, ze to postihovalo temer vyhradne XFS. A ted se nabizi otazka je XFS horsi FS nez EXT3, kdyz nedokaze ochranit vase data na nekvalitnim HW?

     

    1.10.2009 03:19 eoj
    Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 9. 2009
    vezme obskurní HW a dělá s tím věci
    K chybě může dojít, je jedno na čem a jak ji vynucuje.
    a hrozně se diví
    Chtěl to jen zdokumentovat.
    1.10.2009 15:54 Atom321 | skóre: 20
    Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 9. 2009
    On ale nic neřeší, jen to chování zdokumentoval. Na světě jsou lidi, které to prostě nenapadne. Teď si to můžou přečíst v dokumentaci.

    Ted Ts'o jen opravil svou chybu. Aplikace byly psané tak, aby fungovaly dobře na ext3. Tam totiž samotný Ted Ts'o poněkud odflákl implementaci fsync(), která tak trvala nepoužitelně dlouho a programátoři ji museli z aplikací vyhodit. U ext4 zase vymyslel opačný extrém - po uzavření souboru bez fsync() pozdržel uložení až do nejbližšího pádu systému. Údajně chtěl urychlit práci s dočasnými soubory, nebo tak něco. Akorát si při tom neuvědomil, že narozdíl od jeho pokusů jsou soubory ostatních lidí většinou trvalého charakteru a mají být uloženy na disk. Třeba ne hned, stačí za sekundu, dvě. Pět už je hodně a Ts'ouových třicet příliš. On totiž i dočasný soubor se maže obvykle hned po uzavření, nebo nikdy. Čekat třicet sekund je bezesmyslné riskování s uživatelskými daty. Takže chyba byla zcela správně opravena tam, kde vznikla - tedy v implementaci ext4.
    Heron avatar 2.10.2009 11:55 Heron | skóre: 53 | blog: root_at_heron | Olomouc
    Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 9. 2009
    Tam totiž samotný Ted Ts'o poněkud odflákl implementaci fsync(), která tak trvala nepoužitelně dlouho a programátoři ji museli z aplikací vyhodit.

    Ano, toto jsou přesně ty "debilně napsané aplikace" o kterých jsem psal. Linux poskytuje volání, které zaručeně uloží data na disk. Pokud aplikace potřebuje mít data na disku, musí použít toto volání. Vše ostatní je výmluva. Databáze používají své soubory běžně s O_DIRECT/fsync a přesto jsou rychlé.

    Jestli je to volání někde nepoužitelně pomalé, má se opravit implementace v systému souborů. Nikoliv se na to vykašlat a spoléhat nezamýšlenou pozitivní vlastnost defaultního nastavení jednoho systému souborů. Protože nikde jinde to nebude fungovat. Vykašlat se je hodně nebezpečné, protože se to projeví za hodně dlouho a nikdo nemusí vědět o co jde. To za hodně dlouho se stalo teď, kdy některá distra vytvářejí ext4 během instalace.

    Interval commitu lze někde nastavit někde ne. O tom, jaká je správná hodnota by se mohli vést dlouhé diskuse. ext3 v ordered měla 5s, ext4 má 30s, já nastavuji na 120s, XFS nemá pravidelný commit a zapisuje až se mu zachce. A teď co je správně? Správně je systém souborů čistě odmountovat. Jestli zmizí data za 1s nebo 10 minut je už tak trochu jedno, protože objem dat za 1s může být klidně větší.

    2.10.2009 16:41 Atom321 | skóre: 20
    Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 9. 2009
    Linux poskytuje volání, které zaručeně uloží data na disk. Pokud aplikace potřebuje mít data na disku, musí použít toto volání. Vše ostatní je výmluva.

    Ano, máte pravdu. Problém je v tom že každá aplikace potřebuje mít data na disku. Tedy, každá aplikace má volat fsync() před close(), aby potlačila cacheování na úrovní filesystému. Cacheování si má tedy dělat sama (jako ty databáze), nebo žít s pomalým přístupem na disk. V tom případě si veškeré cache filesystému a celé žurnálování můžete strčit za klobouk.

    Ty aplikace lze napsat dobře, jedině pokud budou mít k dispozici jednoznačně definované, spolehlivé a dostatečně rychlé rozhraní k souborovému systému. Nic takového ale v Linuxu neexistuje. Ty aplikace napsané tak, aby fungovaly s debilně navrženým API a jeho nejčastější mizernou implementací.

    Aplikace jsou napsané debilně z jediného důvodu - protože jejich autoři nedostali od vývojářů filesystémů žádnou jinou možnost.

    2.10.2009 16:43 Ivan
    Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 9. 2009
    >Ano, toto jsou přesně ty "debilně napsané aplikace" o kterých jsem psal. Linux poskytuje volání, které zaručeně uloží data na disk. >Pokud aplikace potřebuje mít data na disku, musí použít t oto volání. Vše ostatní je výmluva. Databáze používají své soubory běžně s O_DIRECT/fsync a přesto jsou rychlé.

    Databaze jsou rychle prave proto, ze fsync nepouzivaji. Jeste ze existuje mmap a msync.
    13.12.2021 09:53 geebranz
    Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 9. 2009

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.