Portál AbcLinuxu, 29. května 2024 01:22

Jaderné noviny – 19. 1. 2011: Jak pomáhá linux-next při vývoji

31. 1. 2011 | Jirka Bourek
Články - Jaderné noviny – 19. 1. 2011: Jak pomáhá linux-next při vývoji  

Aktuální verze jádra: 2.6.38-rc1. Citáty týdne: Matthew Garrett, David Woodhouse. Obcházení linux-next. Začleňovací okno 2.6.38, část druhá. Transparentní velké stránky v 2.6.38.

Obsah

Aktuální verze jádra: 2.6.38-rc1

link

Současné vývojové jádro je 2.6.38-rc1, vydáno bylo 18. ledna. Jsou to dva týdny a začleňovací okno 2.6.38 se tedy zavírá. A rozhodně bylo zajímavé. V tomto cyklu bylo začleněno těsně nad 7 600 změn. Některé z nich poměrně invazivně ovlivňují základní kód a již byly nahlášeny poměrně významné regrese. Lidé testující 2.6.38-rc1 by měli být o něco opatrnější (a mít lepší zálohy) než obvykle. Všechny detaily vizte v kompletním changelogu.

Stabilní aktualizace: Během tohoto týdne žádné nevyšly.

Citáty týdne: Matthew Garrett, David Woodhouse

link

Svobodný software strašně připomíná klobásy – úžasně chutné, ale občas přijdete na to, že jste posledních 15 let jedli ovčí nozdry.

-- Matthew Garrett

Často je to tak, že určití vývojáři docela nechápou náklady kódu, který píšou, a to i když používají C. I když by měli být, ne všichni jsou nuceni trávit část života koukáním na to, co vyprodukoval překladač z jejich kódu, a zjišťovat, co ve skutečnosti dělá.

-- David Woodhouse

Obcházení linux-next

link

napsal Jonathan Corbet, 19 ledna 2011

Od vytvoření stromu linux-next uběhly téměř tři roky a během té doby se stal nepostradatelnou součástí vývojového procesu. Když je kód začleněn do hlavní řady, byl předtím testován, co se integrace a překladu týče, v linux-next; v některých případech je dokonce testováno i použití. To napomohlo tomu, že začleňovací okna probíhají o něco více hladce. Není tedy překvapením, že vývojáři jsou číl dál tím více nabručení, když nějaký kód linux-next obchází a vytváří problémy v hlavní řadě.

V cyklu 2.6.38 jsme viděli několik příkladů. Když Al Viro zaslal svůj první požadavek na přetažení VFS, stěžoval si správce linux-next Stephen Rothwell, že tento kód vidí poprvé, přestože zjevně existuje již několik měsíců. Al je známý tím, že příspěvky do hlavní řady stíhá na poslední chvíli, takže to nebylo tak překvapující; uvidíme, jestli ho bude možné přesvědčit, aby své postupy změnil.

Další stížnost přišla po začlenění sady patchů transparentních velkých stránek [transparent huge pages], které přišly přes strom -mm Andrewa Mortona. Tony Luck, který zjistil, že hlavní řadu najednou nejde přeložit pro ia64, se zeptal:

Nedal Andrew na jaderném summitu nějaký unáhlený slib, že přestane jíst, pokud „-mm“ nebude do konce listopadu začleněn do linux-next? To už musí mít pořádný hlad.

Andrew odpověděl, že to chce čas – se Stephenem probíráme plán. Integrace -mm vždy byla a bude trochu problematická; linux-next má obsahovat kód, který je připraven k začlenění do hlavní řady, zatímco v -mm může léta být kód ve vývoji. Dokud to nebude vyřešeno, vývojáři správy paměti budou v trochu obtížné situaci; nemají k dispozici žádný správcovský strom [maintainer tree], kam by mohli začlenit svůj kód a odkud by byl začleněn do linux-next. Tito vývojáři budou do linux-next muset buď zasílat své vlastní stromy (což je jednoduché), nebo přijmout stížnosti, když kód, který žil v -mm, vidí testeři v době začlenění do hlavní řady poprvé.

Začleňovací okno 2.6.38, část druhá

link

napsal Jonathan Corbet, 19 ledna 2011

V době vydání 2.6.38-rc1 bylo do hlavní řady přetaženo nějakých 7616 neslučovacích sad změn. Od shrnutí z minulého týdne bylo začleněno mnoho významných úprav; nejzajímavější z těch viditelných pro uživatele jsou:

Mezi změny viditelné pro vývojáře patří:

Seznam vlastnosti 2.6.38 je kompletní a proces stabilizace veškerého nového kódu může začít; konečné vydání 2.6.38 očekávejme někdy koncem března.

Transparentní velké stránky v 2.6.38

link

napsal Jonathan Corbet, 19 ledna 2011

Jednotka pro správu paměti téměř v každém dnešním procesoru dokáže pracovat s více velikostmi stránky, ale linuxové jádro se téměř vždy omezuje na nejmenší z těchto velikosti – na většině architektur 4096B. Stránky, které jsou větší než toto minimum – nazývají se velké stránky [huge pages] – mohou pro některé zátěže nabídnout větší výkonnost, ale na Linuxu se ani tak téměř nepoužívají. To by se v 2.6.38 mohlo se začleněním transparentních velkých stránek změnit.

Velké stránky mohou výkonnost vylepšit omezením počtu výpadků stránky [page fault] (jediný výpadek načte veký kus paměti naráz) a omezením nákladů na překlad virtuálních adres na fyzické (k získání fyzické adresy je potřeba projít méně úrovní tabulek stránek). Největší výhoda nicméně plyne z úplného odbourání tohoto překladu – když procesor musí přeložit virtuální adresu, musí projít celými čtyřmi úrovněmi tabulek stránek, u každé je šance, že nebude v cache a tudíž to bude pomalé. Z tohoto důvodu si procesory udržují buffer pro výsledky překladu [translation lookaside buffer, TLB], ve kterém se uchovávají výsledky překladů. TLB je často poměrně malý; cpuid na stárnoucím desktopu autora článku vrací:

cache and TLB information (2):
   0xb1: instruction TLB: 2M/4M, 4-way, 4/8 entries
   0xb0: instruction TLB: 4K, 4-way, 128 entries
   0x05: data TLB: 4M pages, 4-way, 32 entries

Je zde tedy místo pro 128 překladů kvůli instrukcím a 32 kvůli datům. Tak malá cache se snadno zaplní, což nutí CPU provádět mnoho překladů. Jediná 2MB velká stránka vyžaduje jediný záznam v TLB; stejná paměť by v 4kB stránkách potřebovala 512 záznamů v TLB. Vzhledem k tomu není překvapením, že velké stránky mohou programům pomoci běžet rychleji.

Hlavní adresový prostor jádra je mapován velkými stránkami, což omezuje tlak na TLB ze strany jaderného kódu. Nicméně jediný způsob, jakým mohou aplikace v uživatelském prostoru využít velké stránky pod současnými jádry, je pomocí hugetlbfs, který byl rozsáhle popsán na LWN.net. Používání hugetlbfs vyžaduje značnou snahu jak ze strany vývojářů aplikací, tak systémových administrátorů; velké stránky se musí odložit stranou během bootu a aplikace je musí mapovat explicitně. Proces je tak náročný, že se používání hugetlbfs omezuje na ty, kteří opravdu chtějí a mají čas se s tím zabývat. Hugetlbfs se často považuje za vlastnost určenou pro velké proprietární databázové systémy a téměř nikoho jiného.

Mechanismus, který by zjednodušil používání velkých stránek pokud možno bez další práce vývojářů či administrátorů, by tedy byl velmi užitečný. Vytvořit takový mechanismus je přesně cílem patche transparentních velkých stránek [transparent huge pages, THP], který vytvořil Andrea Arcangeli a který byl začleněn do 2.6.38. V krátkosti se THP snaží zajistit, aby se velké stránky „prostě objevily“ v situacích, kdy budou užitečné.

Současná jádra předpokládají, že všechny stránky v jedné oblasti virtuální paměti [virtual memory area, VMA] budou stejně velké. Aby THP mohlo fungovat, musel se Andrea tohoto požadavku zbavit; většina počáteční části sady patchů se tedy věnuje tomu umožnit smíšené velikosti stránek ve VMA. Patch poté jednoduše modifikuje obsluhu výpadku stránky: když dojde k výpadku, jádro se pokusí alokovat velkou stránku. Pokud alokace uspěje, bude naplněna velká stránka, všechny existující malé stránky v adresovém rozsahu nové stránky budou uvolněny a velká stránka se vloží do VMA. Pokud nejsou žádné velké stránky k dispozici, jádro se vrátí zpět k používání malých stránek a aplikace si nikdy nevšimne rozdílu.

Toto schéma transparentně zvýší používání velkých stránek, ale to ještě problém neřeší. Velké stránky musí být možné odswapovat, kdyby systému rychle docházela paměť. Než aby komplikoval kód swapování tím, že do něj přidá podporu pro velké stránky, Andrea jednoduše rozdělí velkou stránku na malé. K rozdělení stránky vede i mnoho dalších operací (mprotect(), mlock(), ...)

Alokace velkých stránek závisí na dostupnosti velkých fyzicky spojitých kusů paměti – to je něco, s čím programátoři Linuxu nemohou nikdy počítat. Lze také předpokládat, že takové stránky budou najednou k dispozici až v době, kdy to k ničemu není – například když proces kvůli výpadkům nahrál do paměti mnoho malých stránek. THP se snaží tuto situaci vylepšit vytvořením jaderného vlákna „khugepaged“. Toto vlákno se občas pokusí alokovat velkou stránku; když uspěje, prohledá paměť a pokusí se najít místo, kde by touto velkou stránkou bylo možné nahradit hromadu menších stránek. Dostupné velké stránky by tedy měly rychle být využity, což maximalizuje jejich používání v systému jako celku.

Současný patch pracuje pouze s anonymními stránkami; k integraci velkých stránek do cache stránek ještě nedošlo. Také pracuje pouze s jednou velikostí stránky (2MB). I tak lze ale pozorovat užitečný nárůst výkonu. Mel Gorman zkusil pár benchmarků, které ukazují zlepšení v některých situacích až o 10 %. Obecně výsledky nebyly tak dobré v porovnání s tím, čeho lze dosáhnout pomocí hugetlbfs, ale u THP je mnohem pravděpodobnější, že se opravdu použije.

Kvůli využívání velkých stránek není potřeba nijak měnit aplikace, ale zainteresovaní vývojáři mohou zkusit optimalizovat jejich používání. Volání madvise() s příznakem MADV_HUGEPAGE označí kus paměti jako obzvláště vhodný pro velké stránky, zatímco MADV_NOHUGEPAGE naznačí, že velké stránky by bylo vhodnější použít jinde. Aplikace, které chtějí velké stránky používat, tomu mohou pomoci voláním posix_memalign() tak, že se velké alokace zarovnají na hranice velkých (2MB) stránek.

Správci systému mají mnoho knoflíků, kterými mohou používání velkých stránek ladit, všechny jsou k nalezení v /sys/kernel/mm/transparent_hugepage. Hodnota enabled může být nastavena na „always“ (vždy používat THP), „madvise“ (velké stránky používat pouze ve VME označených pomocí MADV_HUGEPAGE) či „never“ (THP vypnuto). Další knoflík defrag přijímá stejné hodnoty; řídí, jestli má jádro agresivně používat shlukování paměti a vytvářet tak více velkých stránek. Je zde také celá sada parametrů, které řídí fungování vlákna khugepaged; detaily vizte v Documentation/vm/transhuge.txt.

Patch THP měl od začlenění do hlavní řady trochu těžkou cestu. Kód se nikdy neobjevil v linux-next, takže překvapil některé správce architektur, protože kvůli němu selhával překlad. Také byly nalezeny nějaké chyby – žádné překvapení pro patch této velikosti, který navíc modifikuje velkou část základního kódu. Tyto problémy jsou postupně žehleny, takže i když by si testeři 2.6.38-rc1 měli dávat pozor, THP by mělo být ve finálním vydání jádra 2.6.38 použitelné.

Odkazy a zdroje

Kernel coverage at LWN.net: January 19, 2011

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

Jaderné noviny – přehled za duben 2024
Jaderné noviny – přehled za březen 2024
Jaderné noviny – přehled za únor 2024
Jaderné noviny – přehled za leden 2024
Jaderné noviny – přehled za prosinec 2023

Diskuse k tomuto článku

31.1.2011 08:22 kralyk z abclinuxu | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: Jaderné noviny – 19. 1. 2011: Jak pomáhá linux-next při vývoji
Odpovědět | Sbalit | Link | Blokovat | Admin
Svobodný software strašně připomíná klobásy – úžasně chutné, ale někdy občas přijdete na to,...
Jedno z nich tam je navíc...
What Big Oil knew about climate change
31.1.2011 08:28 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše překlep
Odpovědět | Sbalit | Link | Blokovat | Admin
Další knoflík defrag přijímá stejné hodnoty; řádí, jestli má jádro agresivně používat shlukování paměti a vytvářet tak více velkých stránek.
Nevím, jestli radí nebo řídí, ale je to kouzelný překlep…
atan avatar 31.1.2011 11:13 atan | skóre: 21 | Liberec
Rozbalit Rozbalit vše Re: Jaderné noviny – 19. 1. 2011: Jak pomáhá linux-next při vývoji
Odpovědět | Sbalit | Link | Blokovat | Admin
Seznam vlastnosti 2.6.38 je kompletní...
Jak kompletní?? A co Dom0 backend ovládače? Zase nic? :(
31.1.2011 12:34 kyytaM | skóre: 35 | blog: kyytaM | Bratislava
Rozbalit Rozbalit vše Re: Jaderné noviny – 19. 1. 2011: Jak pomáhá linux-next při vývoji
Hlavna osoba zaclenovania mala cez zaclenovacie okno dovolenku. :) Ale nejake dalsie nove veci sa aj tak pretlacili (samozrejme aj rozne bugfixy).
1.2.2011 17:03 x
Rozbalit Rozbalit vše Re: Jaderné noviny – 19. 1. 2011: Jak pomáhá linux-next při vývoji
Odpovědět | Sbalit | Link | Blokovat | Admin
Hura, zeby mi konecne zase slo primontovat fakeraid5 bez extraburt patchovani jadra ? Po vic nez 2 letech ?
5.2.2011 21:23 m;)
Rozbalit Rozbalit vše Re: Jaderné noviny – 19. 1. 2011: Jak pomáhá linux-next při vývoji
Odpovědět | Sbalit | Link | Blokovat | Admin
transparentne superpages (aka huge pages) uz vo freebsd 7 (t.j. aspon 2 roky) ;-)
6.2.2011 13:20 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Jaderné noviny – 19. 1. 2011: Jak pomáhá linux-next při vývoji
No toto... a jestlipak už taky mají podporu pro InfiniBand...?
Quando omni flunkus moritati

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