Portál AbcLinuxu, 7. května 2025 22:27
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().
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.
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čí.
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
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í:
int svc_bind(struct svc_serv *serv, struct net *net);Cílem je ošetřit registraci služby v daném síťovém kontextu; je pouze pro GPL kód.
Konečnou verzi 3.5 bychom mohli očekávat začátkem srpna.
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.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.