Portál AbcLinuxu, 7. května 2025 17:12
Aktuální verze jádra: 3.9-rc1. Závěr začleňovacího okna 3.9. Zjednodušení RCU.
Aktuální vývojová verze jádra je 3.9-rc1 vydaná 3. března. Linus k ní řekl: Nevím, jestli je to ve mně, ale toto začleňovací okno mělo více hrozivých momentů, než na co jsem zvyklý. Několikrát jsem přestal začleňovat, protože se objevily chyby, které vypadaly děsivě, ale lidé se na ně naštěstí vrhli jako paparazzi na Justina Biebera. Níže najdete přehled posledních věcí, které se do jádra 3.9 dostaly.
Stabilní aktualizace: verze 3.8.1, 3.4.34 a 3.0.67 vyšly 28. února; verze 3.8.2, 3.4.35 a 3.0.68 je následovaly 4. března. Verze 3.2.40 pak vyšla 6. března. Všechny obsahují obvyklý koktejl důležitých oprav. 4. března ještě vyšla verze 3.5.7.7.
Do doby, než Linus vydal Linux 3.9-rc1 a uzavřel tak toto začleňovací okno, bylo přetaženo 10 265 neslučovacích změn. To je více než 2000 změn od souhrnu z minulého týdne. Mezi nejvýznamnější změny viditelné uživatelům patří:
Mezi změny viditelné vývojářům jádra patří:
Od této chvíle začala stabilizace jádra 3.9. Pokud budou věci probíhat jako obvykle, pak se konečné verze 3.9 dočkáme začátkem května.
Read-copy update (RCU) je synchronizační mechanismus v linuxovém jádře, který umožňuje extrémně efektivní a škálovatelnou obsluhu dat, která jsou obvykle jen čtena. Ačkoliv je RCU docela efektivní, objevily se jisté obavy o jeho složitost.
Jedním ze zdrojů složitosti RCU je to, že jádro obsahuje rovnou čtyři implementace RCU, a to nepočítáme tři speciální odrůdy RCU (uspatelné RCU (SRCU), RCU-hh a RCU-sched popsané zde). Ty čtyři obyčejné implementace jsou vybírány jadernými volbami SMP a PREEMPT:
Smyslem techto čtyř implementací je pokrýt širokou paletu hardwarových konfigurací a zátěží, kde se Linux používá. Jenže i když se TINY_RCU, TREE_RCU a TREE_PREEMPT_RCU intenzivně používají tam, kde se to hodí, spotřeba paměti při TINY_PREEMPT_RCU není o moc menší než TREE_PREEMPT_RCU obzvláště, když se vezme v úvahu, jak PREEMPT samo o sobě zvyšuje spotřebu paměti v jádře. A všechna místa použití preempt_disable() a preempt_enable() generují skutečný kód.
Velikost při TREE_PREEMPT_RCU pro x86_64 je následující:
text data bss dec hex filename 1541 385 0 1926 786 /tmp/b/kernel/rcupdate.o 18060 2787 24 20871 5187 /tmp/b/kernel/rcutree.o
Velikost pro TINY_PREEMPT_RCU je následujcí:
text data bss dec hex filename 1205 337 0 1542 606 /tmp/b/kernel/rcupdate.o 3499 212 8 3719 e87 /tmp/b/kernel/rcutiny.o
Pokud máte opravdu málo paměti, tak použijete TINY_RCU:
text data bss dec hex filename 963 337 0 1300 514 /tmp/b/kernel/rcupdate.o 1869 90 0 1959 7a7 /tmp/b/kernel/rcutiny.o
To nás vede k možnosti zbavit se TINY_PREEMPT_RCU, protože rozdíl ve velikosti není takový, aby mělo smysl jej ponechat.
Odstranění se samozřejmě musí udělat bezpečně a rozumně. Toto je navrhovaný postup:
Pozor na to, že Linusův strom aktuálně opět umožňuje volbu implementace RCU při !SMP && PREEMPT: buď TINY_PREEMPT_RCU, nebo TREE_PREEMPT_RCU. Jde o přechodný stav pro případ, že by se nějaká chyba vynořila. Od verze 3.11 bude volba implementace RCU vynucena v souladu s pravidlem, že nemají být vidět zbytečné volby.
Pokud vše půjde podle plánu, pak tato změna odstraní z jádra přibližně 1000 řádek, což za to stojí. Takže jestliže používáte TINY_PREEMPT_RCU, vyzkoušejte TREE_PREEMPT_RCU na svém hardwaru a zátěži.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.