Portál AbcLinuxu, 5. května 2025 00:18

Jaderné noviny - 21. 3. 2007

12. 4. 2007 | Robert Krátký
Články - Jaderné noviny - 21. 3. 2007  

Aktuální verze jádra: 2.6.21-rc4. Citát týdne: Linus Torvalds. Lepší nahrazování stránek. fallocate().

Obsah

Aktuální verze jádra: 2.6.21-rc4

link

Aktuální předverze řady 2.6 je (k 21. 3. 2007) 2.6.21-rc4, vydaná 16. března. Jsou tam hlavně opravy, ale i patch, který přidává device_schedule_callback(), což v blízké budoucnosti umožní kódu pracujícímu se zařízeními vyžadovat zpětné volání (z kontextu procesu). Podrobnosti najdete v dlouhém changelogu.

Aktuální verze -mm stromu je 2.6.21-rc4-mm1. Mezi nedávné změny patří nová verze patche s mechanismem pro uvolňování stránek po kusech [lumpy reclaim], práce na předcházení fragmentaci, aktualizace RSDL plánovače a systémové volání revoke().

Aktualizace stabilního jádra 2.6.20.4 se připravuje.

Starší jádra: 2.6.16.44 bylo vydáno 20. března se slušnou řádkou oprav, z nichž dvě se týkaly bezpečnosti.

Citát týdne: Linus Torvalds

link

Upřímně řečeno jsem *plánoval* začlenit RSDL velmi brzy po 2.6.21, ale jedna věc mě hodně odrazuje:

To je jako alkoholismus. Pokud nedokážeš přiznat, že máš problém, nikam se nedostaneš. A proponenti RSDL si patrně nechtějí přiznat nic ("pokaždé jsme lepší", "to je váš problém, pokud starý plánovač funguje lépe", "jen jediná zpráva říká, že je starý plánovač lepší").

-- Linus Torvalds

Lepší nahrazování stránek

link

Když dochází paměť (situace, která obyčejně nastává krátce po spuštění aplikace jako je Tomboy), musí jádro vymyslet způsob, jak nějaké stránky uvolnit. Do určité míry to jde zařídit pročištěním vlastních interních datových struktur. Ale na většině systémů bude nejvíce paměti zabráno uživatelskými stránkami - od toho systém přeci je. Takže aby mohlo jádro vyhovět aktuálním požadavkům na uživatelské stránky, musí vyhodit nějaké stávající.

S vybíráním stránek, které budou odstraněny, pomáhají dva velké linkované seznamy v každé paměťové zóně. "Aktivní" seznam obsahuje stránky, ke kterým bylo nedávno přistupováno, zatímco "neaktivní" seznam je pro stránky, které v nedávné době používány nebyly. Když jádro hledá stránky, kterých se zbavit, projde si nejprve neaktivní seznam, protože doufá, že jsou tam stránky, které nebudou potřeba.

Je to však ještě trochu komplikovanější: existují dva základní druhy stránek, které se v těchto seznamech nacházejí. "Anonymní" stránky jsou takové, které nejsou spojeny s žádným souborem na disku; jsou to paměťové stránky procesů. "Page cache" pages [stránky stránkové keše] představují soubory (nebo jejich části) načtené v paměti. Mezi anonymními a page cache stránkami je nutné udržovat rovnováhu, nebo systém nebude dobře fungovat. Pokud jeden z druhů převáží, začne se používat disk.

Jádro nabízí knoflík nazývaný swappiness [míra swapování], kterým se ovládá, jak se této rovnováhy dosahuje. Nastaví-li administrátor vyšší hodnotu míry swapování, umožní jádro, aby větší část paměti zabírala stránková keš. Nastavení míry swapování na nízkou hodnotu je způsob, jak říct jádru, že si má podržet anonymní stránky na úkor stránkové keše. Obecně lze očekávat, že bude systém výkonnější, jsou-li dříve recyklovány page cache stránky; mnohdy je lze získat, aniž by bylo nutné je zapisovat zpátky na disk - a skutečnost, že jsou na disku, umožňuje rychlejší obnovu v případě, že jsou znovu potřeba. Z toho důvodu je ve výchozím nastavení hodnota míry swapování příznivější pro odstraňování page cache stránek; anonymní stránky přijdou na řadu teprve ve chvíli, kdy je nedostatek paměti hodně vážný.

Míra swapování tedy ovlivňuje způsob, jakým je prováděno vyhledávání vhodných kandidátů pro odstranění. Je-li míra nízká, anonymní stránky budou vynechány. Ukazuje se však, že takové chování může vést k problémům s výkonností; může se stát, že je nutné prohlédnout hodně anonymních stránek, než jádro najde nějaké page cache stránky, které hledalo od začátku. Bylo by fajn se této práce navíc zbavit - zvláště v době, kdy je systém už tak velmi vytížen.

Rik van Riel poslal patch, který se tuto situaci snaží napravit. Zvolený způsob je docela jednoduchý: aktivní i neaktivní seznamy jsou rozděleny na dva nové seznamy: jeden pár (aktivní a neaktivní) pro anonymní stránky a druhý pár pro page cache stránky. Když jsou k dispozici samostatné seznamy pro stránkovou keš, může se k těmto stránkám jádro dostat rovnou - aniž by muselo procházet množství nezajímavých anonymních stránek. Výsledkem by měla být lepší škálovatelnost na větších systémech.

Myšlenka je to jednoduchá, ale patch poměrně velký. Všechen kód, který vkládá stránky do seznamů, musí být změněn tak, aby bylo určeno, který seznam se má použít; to vyžaduje spoustu malých změn v kódu správy paměti a souborových systémů. Mimo to však aktuální kód neupravuje způsob práce kódu pro recyklaci stránek, i když Rik poznamenává:

Prozatím je možné použít parametr míry swapování k nastavení agresivity swapování podle libosti, ale dlouhodobým cílem je prostě měřit IO režii stránkové keše a anonymní paměti a nastavení provádět automaticky.

Změny, které odstraňují nastavovací knoflíky ve prospěch automatického ladění bývají přijaty vlídně. Takže pokud bude tento přístup fungovat, je dost možné, že bude v jádře použit. Správné vyladění systému je obtížné, a tak je mnohdy lepší nechat počítač, ať si to vyřeší sám.

Prozatím však patch nebyl výrazněji testován, a proto je v tuto chvíli těžké říci, kdy (a v jaké podobě) si najde cestu do jádra.

fallocate()

link

Aplikace si většinou nelámou hlavou s alokací bloků pro soubory, které vytvářejí; místo toho prostě data zapíší a očekávají, že se o nalezení vhodného místa postará jádro. Jsou však situace, ve kterých je užitečné se na alokaci bloků podílet aktivněji. Pokud aplikace ví, jak velké množství dat bude zapisovat, může si potřebné bloky vyžádat dopředu, což jádru umožní je alokovat všechny najednou (a na disku pěkně za sebou). Vývojáři aplikací, kterým hodně záleží na spolehlivosti, by také mohli chtít vědět, jestli byl potřebný prostor zajištěn před tím, než začnou provádět důležitou operaci.

Unixové systémy aplikacím tradičně neposkytují možnost kontroly nad alokací bloků. Aplikace na současném linuxovém jádře má jen jednu možnost, jak si alokaci vynutit: zapsat proud dat do příslušné části souboru. Tento způsob funguje, ale ztrácí se tak jedna z výhod prealokace: ponechání práce na jádru, které by vše provedlo najednou a pokud možno zajistilo, aby byly na disku bloky souvisle. Zapisování zbytečných dat na disk pouze za účelem vynucení alokace bloků je navíc dost velké plýtvání.

POSIXový způsob prealokace je systémové volání posix_fallocate():

     int posix_fallocate(int fd, off_t offset, off_t len);

Při úspěšném provedení toto volání zajistí, že bude aplikace moci zapsat až len bajtů do fd počínaje daným offset a zároveň bude vědět, že pro to na disku bude místo.

Linux v současné době implementaci posix_fallocate() nemá. Tento patch od Amita Arora by to však mohl změnit. Patch už byl mnohokrát kontrolován, což mělo za následek výrazné změny rozhraní; aktuální podoba navrhovaného volání je:

    long fallocate(int fd, int mode, loff_t offset, loff_t len);

Parametry fd, offset a len mají stejný význam jako u posix_fallocate(), takže by pro C knihovnu bylo snadné standardní rozhraní implementovat. Dodatečný parametr mode určuje způsob, jakým bude volání fungovat; při normálním použití se specifikuje FA_ALLOCATE, což zajistí alokaci bloků. Pokud by bylo zadáno FA_DEALLOCATE, bude požadovaný rozsah bloků dealokován, což by aplikaci umožnilo v souboru udělat díru.

Interně to systémové volání moc práce nedělá; místo toho volá novou inodovou operaci fallocate(). Každý souborový systém by si tedy musel implementovat vlastní podporu fallocate(). Do budoucna existují plány na obecnou implementaci pro systémy, které podporou fallocate() nedisponují. Taková obecná verze by však téměř jistě musela spoléhat na zápis nul do souboru. Přesunutím operace do souborového systému dává jádro souborovým systémům příležitost alokaci vyřešit efektivnějším způsobem, aniž by bylo nutné zapisovat výplňová data.

Zatím je podpora v souborových systémech řídká. Existují patche pro přidání podpory fallocate() do ext4. XFS už prealokaci podporuje nějakou dobu (přes speciální ioctl() volání), ale bude nutné jej upravit, aby ji prováděl prostřednictvím nové inodové operace. Není jasné, kdy by se nativní podpory mohly dočkat ostatní souborové systémy; sledování alokovaných ale nezapsaných bloků je výrazná změna. V nejbližší budoucnosti tedy budou výhody fallocate() většině uživatelů nedostupné.

Související články

Jaderné noviny - 14. 3. 2007
Jaderné noviny - 7. 3. 2007
Jaderné noviny - 28. 2. 2007
Jaderné noviny - 21. 2. 2007

Odkazy a zdroje

Kernel coverage at LWN.net: March 21, 2007

Další články z této rubriky

Jaderné noviny – přehled za březen 2025
Jaderné noviny – přehled za únor 2025
Jaderné noviny – přehled za leden 2025
Jaderné noviny – přehled za prosinec 2024
Jaderné noviny – přehled za listopad 2024

Diskuse k tomuto článku

Prcek avatar 12.4.2007 00:30 Prcek | skóre: 43 | Jindřichův Hradec / Brno
Rozbalit Rozbalit vše Re: Jaderné noviny - 21. 3. 2007
Odpovědět | Sbalit | Link | Blokovat | Admin
aktivní i neaktivní seznam jsou rozděleny
najde cestu cestu do jádra
Člověk je takový, jak vypadá... A já vypadám jako pravá, nefalšovaná děvka!!!
12.4.2007 11:10 Robert Krátký | skóre: 94 | blog: Robertův bloček
Rozbalit Rozbalit vše Re: Jaderné noviny - 21. 3. 2007
Dík, opraveno.
12.4.2007 11:34 BrainLess
Rozbalit Rozbalit vše Re: Jaderné noviny - 21. 3. 2007
Odpovědět | Sbalit | Link | Blokovat | Admin
Zdravim, existuje zpusob jak financne ohodnotit snahu autora. Velice rad ctu tyto clanky a byl bych ochoten prispet autorovi nejakou almuznou a tim zvysit jeho motivaci v pokracovani ?
12.4.2007 11:40 Robert Krátký | skóre: 94 | blog: Robertův bloček
Rozbalit Rozbalit vše Re: Jaderné noviny - 21. 3. 2007
Vážím si takové nabídky, ale už za svou snahu ohodnocen jsem - dostávám za články honorář (stejně jako všichni ostatní autoři, kteří pro abclinuxu.cz píší články). Chcete-li mi zvýšit motivaci, řekněte o seriálu i portálu kamarádům. Čím více lidí si článek přečte, tím větší elán budu mít do dalších dílů.

P.S. Nejsem "autorem" Jaderných novin. Pouze provádím výtah a překlad z jiných zdrojů.
12.4.2007 13:10 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Jaderné noviny - 21. 3. 2007
slovo pouze niekedy znamená rozdiel medzi (čiastočnou) informovanosťou a úplnou neinformovanosťou :-)
14.4.2007 09:57 Xerces
Rozbalit Rozbalit vše Re: Jaderné noviny - 21. 3. 2007
Třeba u mne :-)
12.4.2007 13:14 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: Jaderné noviny - 21. 3. 2007
Pokud je tím autorem míněn Robert, tak tomu větší radost uděláte spíše tímto způsobem ;-)
When your hammer is C++, everything begins to look like a thumb.
michich avatar 12.4.2007 13:38 michich | skóre: 51 | blog: ohrivane_parky
Rozbalit Rozbalit vše Re: Jaderné noviny - 21. 3. 2007
Předplať si lwn.net.
12.4.2007 13:50 Robert Krátký | skóre: 94 | blog: Robertův bloček
Rozbalit Rozbalit vše Re: Jaderné noviny - 21. 3. 2007
Ano, na to jsem zapomněl. Moje motivace se tím sice nezvýší, ale přispěje to k tomu, aby bylo i nadále co překládat.
12.4.2007 22:26 mstarman
Rozbalit Rozbalit vše Re: Jaderné noviny - 21. 3. 2007
Na jaderné noviny se vždy moc těším. Vítám že tu něco takového je. Doufám že budete pokračovat co nejdéle.

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.