Portál AbcLinuxu, 21. května 2025 15:33
Aktuální verze jádra: 3.9-rc7. Citáty týdne: Rusty Russell, Dave Chinner. vm_iomap_memory(). Správa výkonu paměti v roce 2013.
Aktuální vývojová verze jádra je 3.9-rc7 vydaná 14. dubna. Linus k ní řekl: Jde hlavně o nahodilé jednořádkové opravy s pár většími opravami v ovladačích. Nejzajímavější věcí (asi jen pro mě a nikoho jiného) je oprava drobné chyby ve zneplatnění TLB, která se dotýká jen 32bitového PAE kvůli zvláštnostem v tom, jak to funguje.
Stabilní aktualizace: verze 3.8.7, 3.4.40 a 3.0.73 vyšly 12. dubna; verze 3.8.8, 3.4.41 a 3.0.74 pak následovaly 16. dubna.
Gregu, jsem šokován! Už to snad děláš dostatečně dlouho na to, abys věděl, že takhle na LKML nemluvíme.
Abych napravil reputaci tohoto mailing listu jako nepřátelského tlakového hrnce poháněného doutnajícími zbytky usmažených nováčků, dovol, abych tvou odpověď napravil:
„NAK. A navíc smrdíš.“
Krize je odvrácena,
Cokoliv, co s děsivou pravidelností přichází o data, není vhodné pro použití na produkčních systémech.
-- Dave Chinner (na LF Collaboration Summitu)
Fáze -rc7 jaderného vývojového cyklu je obvykle považována za dobu nevhodnou pro přidávání nových API pro ovladače; většina vývojářů, co se o takovou věc pokusí, může očekávat ne úplně 100% povzbuzující odpověď. Ale pokud jste Linus, tak vám i takové věci mohou projít. Takže tedy Linus, poté, co se podíval na příliš zmatený kód ovladače, přidal novou pomocnou funkci právě pro ovladače, které potřebují mapování fyzického paměťového rozsahu do paměťového prostoru nějakého procesu.
int vm_iomap_memory(struct vm_area_struct *vma, phys_addr_t start, unsigned long len);
Tato funkce obaluje io_remap_pfn_range(), které se stará o řadu detailů specifických pro subsystém virtuální paměti, aby je nemusel řešit kód ovladače. Ve verzi 3.9 na tuto funkci ještě žádné ovladače nepřešly, ale dá se očekávat, že na to dojde v cyklu 3.10.
Když vývojáři mluví o správě výkonu, skoro vždy se zabývají chováním CPU, jelikož to je prostor, kde toho zpravidla bývá nejvíc ke zlepšení. Jenže počítače se sestávají z více komponent, než jsou samotné procesory, a tyto komponenty potřebují výkon také. Zhruba jednou za rok se pozornost zdánlivě ubere na výkonostní požadavky operační paměti systému; jelikož RAM může až za třetinu spotřeby systému, tak to dává smysl. Proto se tímto LWN zabývalo jednou v roce 2011 a znova pak v roce 2012. Nyní je v oběhu nová sada patchů správy výkonu paměti, takže se tím bude zabývat opět.
Nejnovější sada patchů přichází od Srivatsy S. Bhata a liší se od předchozích přístupů v několika věcech. Zaměřuje se na řadiče paměti, které mají automatické režimy správy výkonu se zachováním obsahu. Tyto řadiče dělí paměť na několik oblastí, přičemž každou z nich lze nezávisle vypnout, když řadič detekuje, že k ní nebylo nějakou dobu přistupováno. Takže strategie je zřejmá: snažit se udržet co nejvíce paměťových oblastí prázdných, aby zůstaly vypnuté.
Prvním krokem je držet si přehled o těchto paměťových oblastech v subsystému správy paměti. Předchozí patche používaly systém zón (který rozděluje paměť s rozdílnými charakteristikami – např. na 32bitových systémech je paměť rozdělena na tu v nízké a vysoké adresní oblasti [high & low memory]) ke sledování oblastí. Tento přístup má problém ten, že způsobuje chaos v počtu zón, což vede k větší režii správy paměti a zesložiťuje to vyvážené využití paměti napříč všemi zónami. Srivatsův patch místo toho sleduje oblasti paměti jako odlišné entity oddělené od zón, takže se tomuto problému vyhýbá.
Když se jádro dozví, kde tyto oblasti jsou, tak se potom snaží soustředit paměťové alokace na pomerně malé množství oblastí, je-li to možné. Z toho důvodu sada patchů upravuje seznam volných stránek tak, aby byl seřazen dle oblastí, tedy aby alokace na začátku seznamu pocházely z oblastí s volnými stránkami, co jsou v adresním prostoru co nejníže. Za pozornost stojí, že řazení v rámci oblasti není nutné; postačí, když jsou všechny stránky z dané oblasti seskupeny dohromady. Sada ukazatelů do seznamu, vždy jeden na každou oblast, pomáhá tomu, aby čerstvě uvolněné stránky byly rychle vloženy do seznamu na správné místo.
Alokace paměti se zohledněním oblastí může pomoci tomu, aby aktivní stránky byly seskupovány u sebe, ale v realitě budou stejně po nějaké době rozprostřené po celé fyzické paměti. Pokud nebudou provedena další opatření, většina oblastí skončí s aktivními stránkami i za situace, kdy je v systému jen málo využité paměti; to bude mít za následek, že vypnutí těchto oblastí bude těžké nebo nemožné. Proto Srivatsova sada patchů zahrnuje mechanismy pro migraci stránek pryč z vybraných oblastí.
Uvolňování paměťového prostoru není novým problémem; například mechanismus alokátoru souvislé paměti (CMA) občas musí aktivně konat, aby se mu podařilo velké souvislé bloky paměti vytvořit. Takže tento konkrétní problém už byl v jádře vyřešen. Než aby se tedy přidávalo nové schéma pro kompakci paměti, Srivatsův patch upravuje implementaci CMA, aby byla vhodná i pro použití ve správě výkonu paměti. Výsledkem je jednoduchá funkce compact_range(), která může být zavolána libovolným subsystémem, aby došlo k přesunu paměti a uvolnění paměťového rozsahu.
Je tu pak ale stále otázka, kdy by se mělo jádro snažit uvolnit oblast paměti. Pokud k tomu nebude docházet dostatečně často, spotřeba paměti bude vyšší, než by musela být. Časté přesuny stránek zase budou spotřebovávat čas CPU, takže by výsledkem byly nulové úspory energie. Příliš agresivní kompakce by pak mohla vést dokonce i k vyšší spotřebě. Proto je nutné mít nějaký řídící mechanismus.
V této sadě patchů byl alokátor stránek rozšířen tak, aby zaznamenal, kdy se začíná alokovat paměť z nové oblasti paměti. Tato nová oblast, z důvodu, že byla od alokací doposud chráněna, by neměla mít alokováno mnoho stránek; to z ní dělá přirozený cíl pro kompakci. Ale nemá žádný smysl se o kompakci snažit v době, kdy dochází k alokaci, protože je jasné, že v nižších oblastech paměti žádné volné stránky nejsou. Proto se alokátor stránek o kompakci v tento moment nepokouší; místo toho si nastaví příznak, který znamená, že by v blízké budoucnosti měl pokus o kompakci proběhnout.
"Blízkou budoucností" se myslí doba, kdy jsou stránky uvolňovány. Jakmile jsou alokátoru některé stránky navráceny, může být možné použít tyto stránky k vyprázdnění nějaké málo užívané oblasti paměti. Právě tehdy je kompakce spuštěna; spustí se funkce v pracovní frontě (workqueue), která se pokusí vyprázdnit oblasti, které byly předtím alokátorem označeny. Tento kód se ale o tuto operaci pokusí jen tehdy, pokud by se muselo migrovat relativně malé množství stránek (v aktuálním patchi je to 32). Jinak jsou náklady považovány za příliš vysoké a oblast se nechá, jak je.
Tato sada patchů je stále ještě hodně čerstvá, proto není k dispozici mnoho dat o tom, jak si vede. Hovoří se ale o 6% úspoře energie na 2GB desce Samsung Exynos s potenciálem na další zlepšení, pokud by i další části subsystému správy paměti měly větší povědomí o úsporném chování. Je tu ale otázka, na kterou patche neodpovídají: na typickém linuxovém systému je jen opravdu málo stránek skutečně „volných“: místo toho je zabírá cache. Aby bylo oblasti možné uvolnit, tak se asi bude muset použít agresivnější přístup k získávání stránek od cache. Jistě se najde i řada dalších nedořešených míst; snad budou vyřešena v aktualizaci v roce 2014, nebo dokonce dříve.
až na to že to není primárně určeno pro desktop ale po mobilní zařízení ... kde to má celkem smysl i když používáš LP DDR.
Mě se náhodně restartuje, klidně i během psaní. Všechno je OK a najednou probliknou všechny diody a klávesnice je asi na vteřinu bez odezvy. Dělají mi to všechny tři klávenice, od nejstarší IBM přes USB-PS2 redukci až po týden starou ostrůvkovou od Geniusu.
cat /sys/bus/usb/devices/*/power/autosuspend
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.