Portál AbcLinuxu, 7. května 2025 22:27

Jaderné noviny – 7. 6. 2012: Možnost lepšího cachování s ashmem

25. 6. 2012 | Luboš Doležel
Články - Jaderné noviny – 7. 6. 2012: Možnost lepšího cachování s ashmem  

Aktuální verze jádra: 3.5-rc1. Citáty týdne: Al Viro, Hugh Dickins, Steven Rostedt, Peter Zijlstra. Závěr začleňovacího okna verze 3.5. Nestálý obsah paměti pomocí fallocate().

Obsah

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

link

Aktuální vývojová verze jádra je 3.5-rc1 oznámená 3. června. Je to vcelku normální vydání – zhruba ze 60 % ovladače, 20 % jsou změny v architekturách a 20 % je „všude možně“ – souborové systémy, dokumentace, nástroje a tak dále. [...] V závislosti na tom, co vás zajímá, váš může potěšit plánovač paketů CoDel nebo aktualizace ovladačů GPU nebo nové cíle [targets] SCSI. Najde se tam něco snad pro každého.

Stabilní aktualizace: verze 3.0.33, 3.2.19, 3.3.8 a 3.4.1 všechny vyšly 4. června; každá z nich obsahuje dlouhý seznam oprav. Verze 3.3.8 je poslední v řadě 3.3.

Citáty týdne: Al Viro, Hugh Dickins, Steven Rostedt, Peter Zijlstra

link

Možná to čtu špatně a unikají mi detaily, ale: číst ten kód je asi tak příjemné, jako léčit důkladnou kocovinu teplým zvětralým pivem. Mám na mysli ten typ kocoviny, kdy po probuzení plivete mouchy nebo snad i vajgly.

-- Al Viro

Abych řekl, že si myslím, že máš pravdu, to bys věru nechtěl,
tím bych mohl drze naznačovat, že vůbec beru v potaz tu možnost, že ji nemáš.
Vzdychám nad tvým údělem.

-- Hugh Dickins

Složitost je mým Sluncem a já jsem planeta, která se kolem něj točí.

-- Steven Rostedt

Jde o to, že v pondělí ráno mi to až tak rychle nemyslí. Pokud se právě tehdy pustím do zpětného inženýrství patche, protože lidé zapomínají zmínit to podstatné, tak se naštvu.

-- Peter Zijlstra před úterkem nepřijímá špatně popsané patche

Závěr začleňovacího okna verze 3.5

link

Linus uzavřel začleňovací okno 2. června; oznámení předverze 3.5 přišlo následujícího dne. Do hlavní řady bylo od posledního přehledu začleněno necelých 1000 patchů, což dělá celkem 9534 za celé okno. Některé z důležitějších změn jsou:

Změny viditelné vývojářům zahrnují:

Konečnou verzi 3.5 bychom mohli očekávat začátkem srpna.

Nestálý obsah paměti pomocí fallocate()

link

V listopadovém LWN se psalo o patchi pro volatile ranges (nestálé rozsahy) od Johna Stultze. Smyslem patche bylo přinést funkčnost z Androidu do hlavního jádra, ale jde o reimplementaci, která je hlouběji svázaná se subsystémem správy paměti. Patch se nyní vrátil zpět, ale API se změnilo, takže je třeba se na něj znovu podívat.

"Volatile range" je sada stránek v paměti, která obsahuje data, jež mohou někdy v budoucnu být aplikaci užitečná; hlavní věcí je to, že pokud to bude nutné, aplikace dokáže znovu získat (nebo vygenerovat) data z jiného zdroje. Klasickým příkladem je cache obrázků v paměti prohlížeče. Udržování obrázků může redukovat síťový provoz a zrychlit vykreslování stránek, ale kdyby se cachovaný obrázek vytratil, je možné vyžádat kopii odjinud. Takže ačkoliv má smysl si data uchovávat, má rovněž smysl se jich zbavit, kdyby byla o paměť nouze.

Kdyby jádro o takových cachovaných datech vědělo, jednoduše by v horkých chvilkách mohlo data zahodit a paměť použít pro něco jiného. Takto by navíc aplikace mohly cachovat více než jindy s vědomím, že jsou zde hranice, jak moc může toto cachování ovlivnit zbytek systému. Výsledkem by bylo lepší využívání paměti a systém, který celkově pracuje lépe.

Robert Love z Google tento mechanismus implementoval pro Android pod názvem „ashmem“. Je zde zájem o zařazení ashmem do jádra, ale implementace a API nebyly všem po chuti. Proto John vzal kód ashmem, přepracoval integraci s virtuální pamětí a napojil to na systémové volání posix_fadvise(); v této podobě to bylo v listopadu.

Dave Chinner následně ukázal na to, že pro tuto funkčnost by se více hodilo fallocate(). Toto volání vypadá takto:

int fallocate(int fd, int mode, off_t offset, off_t len);

Toto systémové volání má pracovat nad rozsahy dat v souboru. Zajímavá je pak hlavně operace FALLOCATE_FL_PUNCH_HOLE, která odstraní blok dat z určitého místa v souboru. Označení volatile range by se pak dalo považovat za takový hole punching (vytváření děr) s tím, že je toto oddáleno dle vůle jádra. Když je paměti málo, mohlo by k odstranění dojít ihned, jinak by operace byla dokončena později, nebo vůbec. Vzhledem k podobnosti mezi těmito operacemi dává smysl, aby byly implementovány přes stejné volání; Johny náležitě přepracoval patch.

S novým patchem se označuje rozsah v souboru jako volatilní pomocí volání:

fallocate(fd, FALLOCATE_FL_MARK_VOLATILE, offset, len);

Kde offset a len popisují rozsah, který má být označen. Po dokončení volání není jádro zavázáno udržovat tento rozsah v paměti. Aplikace by se neměla k tomuto rozsahu nyní snažit přistupovat, protože obsah může kdykoliv zmizet. Místo toho, jakmile je o data zájem, by se mělo zavolat:

fallocate(fd, FALLOCATE_FL_UNMARK_VOLATILE, offset, len);

Pokud je určený rozsah stále v paměti, volání vrátí nulu a aplikace může nadále pracovat s daty. Pokud ale byla část paměti jádrem odstraněna, nenulová návratová hodnota bude značit, že aplikace musí získat data odjinud.

Jakýkoliv souborový systém může implementovat tuto funkčnost, ale v reálu to dává smysl jen u souborových systémů pracujících nad RAM (jako tmpfs), takže je to implementované jen tam.

Patch nyní dosáhl třetí revize, v průběhu prvních dvou se mu dostalo řady komentářů. Počet stížností ale značně poklesl, takže většina lidí už je asi spokojená. Tato funkce se tedy může dostat do jádra 3.6.

Odkazy a zdroje

Kernel coverage at LWN.net: June 7, 2012

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

pavlix avatar 25.6.2012 14:24 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Jaderné noviny – 7. 6. 2012: Možnost lepšího cachování s ashmem
Odpovědět | Sbalit | Link | Blokovat | Admin
DNSSL.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
25.6.2012 19:37 bohyn
Rozbalit Rozbalit vše Re: Jaderné noviny – 7. 6. 2012: Možnost lepšího cachování s ashmem
Co tim chtel basnik rici?
25.6.2012 20:11 2X4B-523P | skóre: 38 | blog: Zelezo_vs_Debian
Rozbalit Rozbalit vše Re: Jaderné noviny – 7. 6. 2012: Možnost lepšího cachování s ashmem
možná si to jen potřeboval rychle zapsat jako připomínku
pavlix avatar 25.6.2012 20:23 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Jaderné noviny – 7. 6. 2012: Možnost lepšího cachování s ashmem
Doplnit, co ještě se dostalo do verze 3.5 (diskutovalo se o tom pod minulými JN).
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
28.6.2012 10:36 Honz
Rozbalit Rozbalit vše Re: Jaderné noviny – 7. 6. 2012: Možnost lepšího cachování s ashmem
Odpovědět | Sbalit | Link | Blokovat | Admin
Když jsem přelétrl očima slovo v názvu "ashmem" (pro mě nenzámé a nepochopitelné), hned mi to připomělo slavnou Cimrmanovu báseň "Ažmimá"...

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