Portál AbcLinuxu, 4. května 2024 10:17

Jaderné noviny - 9. 6. 2016: Přehodnocení swapování

19. 6. 2016 | Redakce
Články - Jaderné noviny - 9. 6. 2016: Přehodnocení swapování  

Stav vydání jádra. Citáty týdne: Kees Cook, Greg Kroah Hartman. Přehodnocení swapování.

Stav vydání jádra

Současný vývojový kernel je 4.7-rc2, vydaný 5. června. Linus k tomu dodal: „Přidal jsem jednu záležitost, která není opravou. Chtěl jsem ji přidat už nějakou dobu, přestože začleňovací okno je již zavřené. Pochybuji, že si vůbec někdo všimne důsledků změny/úklidu pty, což znamená, že odporná stará volba DEVPTS_MULTIPLE_INSTANCES je pryč, protože po úklidu již nebude zapotřebí.“ Pro podrobnosti o změně viz tento nedávný článek.

Stabilní aktualizace: 4.6.2, 4.5.7, 4.4.13 a 3.14.72 byly vydány 7. června. Verze 4.5.7 představuje konec řady 4.5.

Citáty týdne

Po vydání verze 4.6 si spousta lidí stěžovala na omezené použití __ro__after_init v Linuxu, patche ale neposlali. Abych ukázal, jak dosáhnout pokroku v této oblasti, přidávám dvojici patchů pro x86 a ARM. Dostat je ze sady patchů grsecurity/PaX mi zabralo jenom asi hodinu. Vyzývám tedy ostatní, aby v této práci pokračovali – je to celkem jednoduché.

Kees Cook

Pokud v seznamu změn použijete slovo „také“, většinou to znamená, že by patch měl být rozdělen na více částí.

Greg Kroah-Hartman

Přehodnocení swapování

„Swapování“ je něco jako sprosté slovo mezi dlouholetými uživateli Linuxu, kteří nezřídka udělají skoro cokoli, aby se mu vyhnuli. Subsystém správy paměti byl navržen tak, aby se toto vyhýbání usnadnilo, kdykoli to jen jde. Vývojář Johannes Weiner nyní navrhuje dát ve světle posledního vývoje v oblasti hardwaru swapování ještě jednu šanci. Jeho sada patchů obsahuje také výsledky benchmarků, které svědčí o tom, že na něco možná kápl.

Je swapování stále špatné?

Paměť dostupná uživatelům linuxových systémů se dělí na dvě části: jedna je založená na souborech (file-backed) a ta druhá je anonymní. V prvním případě stránky (popř. stránky diskové cache) odpovídají segmentu souboru na disku. Pokud neobsahují nově zapsaná data, která se zatím nedostala až zpět do perzistentní paměti, mohou být tyto stránky jednoduše uvolněny pro jiné účely. Anonymní stránky naopak nejsou svázány se souborem na disku, nýbrž drží data používaná či vytvářená procesy. Opětovné využití anonymní stránky vyžaduje zápis obsahu do swapovacího zařízení.

Platí obecné pravidlo, že uvolňování anonymních stránek pro další použití (swapování) je považováno za mnohem nákladnější než v případě stránek založených na souborech. Jednou z hlavních příčin tohoto rozdílu je to, že stránky založené na souborech je možné číst z perzistentní paměti (nebo je do ní zapisovat) ve velkých, souvislých blocích, zatímco anonymní stránky mají tendenci být náhodně rozptýlené po swapovacím zařízení. Na rotačním úložišti jsou takto rozptýlené I/O operace nákladné, takže swapující systém to notně zpomalí. Je mnohem rychlejší načíst spoustu sekvenčně uložených stránek založených na souborech – a protože soubor je obvykle přímo na disku, nemusí být tyto stránky zapsány v okamžiku dalšího použití.

Swapování je tak pomalé, že se většina administrátorů snaží nakonfigurovat své systémy tak, aby ho bylo třeba co nejméně. V nejextrémnějších případech to může znamenat, že vůbec nenastaví swapovací zařízení. Jedná se o běžnou praxi, která jádro zbavuje možnosti znovu využít anonymní stránky, přestože by tato paměť mohla být využita také jinde. Mezistupněm je použití konfigurační volby swappiness (popsané v tomto článku z roku 2004) k silnému vychýlení systému směrem k využívání stránek založených na souborech. Nastavení swappiness na nulu způsobí, že jádro bude swapovat pouze v okamžiku, kdy dosáhne přetlak paměti krajních mezí.

Johannes začíná vysvětlovat svou sadu patchů poznámkou, že tento mechanismus byl navržen pro charakteristiky rotačních disků. Kdykoli musel disk použitý pro swapování provést operaci seek – což se s náhodně rozptýleným I/O stávalo často – dramaticky poklesla propustnost. Odtud ten silný odpor ke swapování. Johannes dodává, že technologie je dneska jinde, a proto by některá dosavadní rozhodnutí měla být přehodnocena:

„S rozšiřováním zařízení s rychlým náhodným I/O, např. SSD a perzistentní paměti, se swapování stává znovu zajímavým, nikoli však jako krajní možnost, nýbrž jako rozšíření paměti, kterou je možné využít k optimalizaci vyvážení paměti mezi diskovou cache a pracovní sadou anonymních stránek i při mírném zatížení. Naše současná rozhodnutí ohledně opětovného využití stránek nezohledňují potenciál tohoto hardwaru.“

Johannes tvrdí, že systém by měl být nejen ochotnější swapovat anonymní paměť, ale v jistých situacích může být swapování lepší volba než opětovné použití stránek diskové cache. To by mohla být pravda v situaci, kdy je swapovací zařízení rychlejší než úložiště souborů… a platí to také v situaci, kdy systém recykluje potřebné stránky postavené na souborech, zatímco paměť je plná nepoužívaných anonymních stránek.

Kdy swapovat

Prvním krokem v sadě patchů je rozšíření možných nastavení pro volbu swappiness. V současných jádrech může jít od nuly (pokud možno žádné swapování) do stovky (rovným dílem recyklovat stránky anonymní a na souborech založené). Johannes zvyšuje maximum na 200; při této hodnotě bude systém silně upřednostňovat swapování. Jedná se o možnost, o kterou nikdy nikdo předtím nestál, ale díky rychlým diskům se stala užitečnou.

I když bude i nadále existovat využití pro swapovací volby jako swappiness, nejlepší systém je ten, který se ladí sám bez potřeby zásahu správce systému. Johannes tedy pokračuje úpravami mechanismu, který rozhoduje zda recyklovat stránky ze seznamu nejdéle nepoužívaných (LRU) anonymních stránek, nebo ze seznamu LRU stránek založených na souborech. Pro každý seznam zavádí koncept „ceny“ recyklace stránky z příslušného seznamu. Tento kód se potom zaměřuje na seznam s nejnižší „cenou“ opětovného použití stránek.

Prvním krokem je sledování ceny „rotací“ v každém LRU seznamu. Kód správy paměti dělá vše proto, aby znovu používal stránky, které nejsou aktivně využívány. To se provádí tak, že se občas projde seznam a vyčistí se bit indikující, že stránka byla odkazována. U následně použitých stránek bude tento bit nastaven zpět, kdežto ty, které ho při dalším průchodu nemají nastavený, mezitím nebyly použity – u těchto stránek je nejméně pravděpodobné, že budou chybět, a proto jsou první na řadě k uvolnění. Stránky, které odkazovány byly, se „přesunou“ na začátek seznamu, takže dostanou nějaký čas, než se na ně při uvolňování znovu dostane řada.

Tento přesun stojí nějaký procesorový čas. Obsahuje-li konkrétní seznam LRU spoustu odkazovaných stránek, bude průchod poměrně časově náročný v porovnání s malým počtem uvolnitelných stránek. V tomto případě by mělo jádro raději kontrolovat seznamy, které obsahují více nepoužívaných stránek. Za tímto účelem sleduje Johannesova sada patchů počet přesunutých stránek, aby bylo možné stanovit cenu uvolnění stránek z jednotlivých seznamů.

Zatímco přesouvání má svou cenu, tyto náklady jsou nic v porovnání s opětovným používáním stránek, když ty se vzápětí chybně vrácejí do paměti – i když zápis probíhá na rychlé úložné zařízení. A tak Johannes přidal mechanismus, který sleduje tyto stránky, už v roce 2012. V současných jádrech se používá k určení velikosti aktivní pracovní sady v libovolném okamžiku. Tento mechanismus může jádru také říct, zda uvolňuje příliš mnoho stránek anonymních nebo založených na souborech. Poslední patch v této sadě využívá informace o chybných přesunech stránek ke korigování ceny uvolňování z každého seznamu LRU. Pokud se stránky z jednoho seznamu rychle vracejí zpět, zaměří se jádro na jiný seznam.

V současné sadě patchů je cena chybně vrácené stránky nastavena na 32násobek ceny rotované stránky. Johannes v komentářích navrhuje, že tato hodnota je vybrána nahodile a v budoucnu se může změnit. Zatím je cílem, aby chybné přesuny měly převažující podíl na ceně, ale mohou nastat situace, ve kterých jsou chybné přesuny levnější než rotace.

Sadu patchů doplňuje řada benchmarků, které ukazují její vliv na výkon. Benchmark PostgreSQL ukazuje nárůst z 81 na 105 transakcí za sekundu s aplikovanými patchi, přičemž míra chybných přesunů je poloviční a sníží se i zátěž CPU způsobená jádrem. Benchmark I/O streamů, který by neměl vytvořit vážný tlak na paměť, běží v podstatě beze změny. Takže zatím poskytnuté výsledky vypadají dobře.

Změny ve správě paměti představují potenciální nebezpečí a je možné, že tyto změny poškodí jiné typy zátěže. Jediná možnost, jak se přesvědčit, že to nenastane, je testování a revize. Tato sada patchů je celkem nová, obdržela nějaké kladné recenze, ale testování jí stále schází. Takže bude chvíli trvat, než se dostane někam blíž k hlavnímu stromu jádra. Už nějakou dobu je jasné, že správa paměti si vyžádá řadu změn, aby odpovídala současnému hardwaru. Diskutovaná práce může být v tomto směru slibným krokem.

Odkazy a zdroje

LWN.net

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

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