Portál AbcLinuxu, 6. května 2025 16:00

Jaderné noviny - 31. 5. 2006

12. 6. 2006 | Robert Krátký
Články - Jaderné noviny - 31. 5. 2006  

Aktuální verze jádra: 2.6.16.19. Shrnutí API změn v 2.6.17. Oznamovače ve stylu 2.6.17. Výhody netlinku. Přizpůsobivé přednačítání. Legrace se jmény jader.

Aktuální verze jádra: 2.6.16.19

Aktuální verze jádra je 2.6.16.19, vydaná 30. května. Obsahuje jedinou opravu, a to pro únik informací v kódu netfilteru.

Aktuální předverze je 2.6.17-rc5, vydaná 24. května. Nestane-li se nic nepříjemného, bude to poslední předverze před vydáním 2.6.17. Obsahuje slušnou řádku oprav; vizte podrobnosti v dlouhém changelogu.

Po vydání -rc5 si do hlavního jádra našlo cestu několik desítek patchů (vše opravy).

Aktuální -mm strom je 2.6.17-rc5-mm1. Mezi nedávné změny patří zařazení obecné IRQ vrstvy, aktualizovaná verze reiser4, validátor zámků, sada patchů pro přizpůsobivé přednačítání [readahead], nová infrastruktura pro správu jaderných statistik a nové API pro inotify.

Shrnutí API změn v 2.6.17

Finální verze 2.6.17 se blíží. Další změny interního API jsou (doufejme) nepravděpodobné, takže by následující seznam měl být tentokrát definitivní.

A jako vždy se podívejte na LWN stránku o API změnách v jádře 2.6, kde najdete kompletní seznam.

Oznamovače ve stylu 2.6.17

Při prohrabávání záplavou patchů z počátku vývojového cyklu 2.6.17 jsem si [Jonathan Corbet] nevšiml jedné zásadní změny API: nové rozhraní pro oznamovače [notifiers]. Oznamovače jsou interním jaderným mechanismem umožňujícím kódu zaregistrovat se, aby byl zpravován o událostech, které ho zajímají. Existují oznamovače pro události týkající se hotplug manipulace s pamětí, změny v pravidlech pro frekvenci procesoru, USB hotplug události, nahrávání a odstraňování modulů, rebooty systému, změny síťových zařízení a mnoho dalších.

V listopadu 2005 jsem psal o navrhované změně API motivované nemožností zamykat řady [chains] oznamovačů. Návrhu se dostalo vlažného přijetí. Mnohé nízkoúrovňové datové struktury v jádře záměrně odmítají provádět jakékoliv zamykání kvůli tomu, že vyšší vrstvy se budou o své zamykání tak jako tak muset postarat. Takže proč by se měly oznamovače lišit? Odpovědí se zdá být to, že na rozdíl od jiných datových struktur bývají oznamovače používány v relativně širokých oblastech jádra, a proto by bylo obtížné používat jakékoliv jiné zamykání než takové, které by bylo navrženo přímo pro ně. Každopádně byl do jádra 2.6.17-rc1 patch začleněn.

Aktuální podoba API definuje tři různé druhy oznamovačů:

Pro jádro 2.6.17 byly všechny řady oznamovačů převedeny na blokovací nebo atomické druhy; surové v hlavním jádře nevyužívá nikdo. Patch neobsahuje žádné doporučení k odstranění surového rozhraní, ale dříve nebo později pravděpodobně přijde někdo, kdo to bude chtít pročistit. Bude tedy asi moudré se surovým oznamovačům vyhýbat; tento text se zabývá zbývajícími dvěma druhy.

Blokovací oznamovače jsou v podstatě jako surové, ale s přidaným rwsem (R/W semafor) pro vzájemné vyloučení. Operace prováděné na blokovacím oznamovači mohou zablokovat i rwsem. Vytvořit je můžete obvyklými dvěma způsoby:

    #include <linux/notifier.h>

    BLOCKING_NOTIFIER_HEAD(my_notifier);

    struct blocking_notifier_head my_notifier;
    BLOCKING_INIT_NOTIFIER_HEAD(my_notifier);

Kód, který si přeje "zaháknout" na blokovací oznamovač, by měl nejprve vyplnit strukturu notifier_block:

    struct notifier_block {
	int (*notifier_call)(struct notifier_block *block, 
                             unsigned long event, 
			     void *data);
 	int priority;
	/* ... */
    };

Pole notifier_call by mělo ukazovat na funkci, která se má zavolat, když se stane něco zajímavého; parametry event a data poskytne kód generující událost. Oznamovače jsou volány podle zvyšující se priority; návratová hodnota posledního volaného oznamovače bude předána zpět kódu, který signalizoval událost. Obyčejně je posledním oznamovačem ten s nejvyšší hodnotou priority, ale další zpracovávání může zastavit kterýkoliv oznamovač tím, že vrátí hodnotu s nastaveným bitem NOTIFIER_STOP_MASK. Kromě tohoto jednoho bitu (aktuálně 0x8000) jsou návratového hodnoty libovolné (alespoň co se týče kódu oznamovačů). Jsou však k dispozici přednastavené hodnoty pro pohodlné: NOTIFY_OK ("zatím dobrý"), NOTIFY_STOP ("všechno šlape, ale nevolat žádné další oznamovače") a NOTIFY_BAD ("přestaň volat oznamovače a zaraž navrhovanou akci).

Jakmile má kód připraven notifier_block, měl by jej zaregistrovat pomocí:

    int blocking_notifier_chain_register(struct blocking_notifier_head *chain,
                                         struct notifier_block *nb);

Návratová hodnota je zjevně určena k tomu, aby mohl být vrácen chybový stav, pokud registrace selže - ale verze kódu v 2.6.17 selhat nemůže.

Registraci blokovacího oznamovače lze zrušit takto:

    int blocking_notifier_chain_unregister(struct blocking_notifier_head *chain,
                                           struct notifier_block *nb);

Pokud nebyl daný oznamovač ve skutečnosti registrován, vrátí toto volání -ENOENT.

Kód, který si přeje pro signalizaci události použít řadu blokovacích oznamovačů, může provést toto:

    int blocking_notifier_call_chain(struct blocking_notifier_head *chain,
		                     unsigned long event, 
				     void *data);

Funkce zavolá všechny oznamovače v chain [řada] (pokud jeden z nich nezastaví proces před dokončením) a vrátí hodnotu posledního volaného.

Atomické oznamovače nahrazují rwsem spinlockem; API je velmi podobné:

    ATOMIC_NOTIFIER_HEAD(my_notifier);

    struct atomic_notifier_head my_notifier;
    ATOMIC_INIT_NOTIFIER_HEAD(my_notifier);

    int atomic_notifier_chain_register(struct atomic_notifier_head *chain,
                                       struct notifier_block *nb);
    int atomic_notifier_chain_unregister(struct atomic_notifier_head *chain,
                                         struct notifier_block *nb);

    int atomic_notifier_call_chain(struct atomic_notifier_head *chain,
		                   unsigned long event, 
				   void *data);

Všimněte si, že atomické oznamovače používají stejnou strukturu notifier_block jako oznamovače blokovací. V kódu atomických oznamovačů však nebude nikdy nic spát, a to platí i pro oznamovací funkce volané z atomické řady.

Jak bylo zmíněno výše, všechny řady oznamovačů v jádře byly změněny tak, aby používaly jeden z popsaných druhů; veškerý kód mimo hlavní jádro bude muset být aktualizován obdobně. Vizte vysvětlující text, v němž najdete shrnutí toho, který druh byl přiřazen stávajícím řadám v jádře.


Následující obsah je © KernelTrap

Výhody netlinku

25. kvě, originál

Krátká diskuze porovnávala používání netlinku pro přenos informací mezi jádrem a uživatelskými procesy s debugfs. Tim Bird slyšel o tom, že několik projektů bylo požádáno, aby přešly z debugfs/procfs na netlink, a zeptal se na důvod. Jevgenij Poljakov poukázal na hlavní výhodu: Netlink je v jádře vždy přítomen, takže není nutné vytvářet další závislosti na konkrétním souborovém systému. Manuálová stránka netlinku nabízí další informace:

Netlink se používá pro přenos informací mezi jadernými moduly a uživatelskými procesy. Skládá se ze standardního soketového rozhraní pro procesy a interního API pro moduly.

Přizpůsobivé přednačítání

26. kvě, originál

Wu Fengguang spravuje mimo hlavní jádro sadu patchů implementujících přizpůsobivé přednačítání [adaptive readahead]. Jeden z patchů obsahuje volbu pro Kconfig s následujícím popisem:

Přednačítání je technika, kterou jádro využívá pro zlepšení výkonu při čtení souborů. Má-li jádro důvod se domnívat, že je z určitého souboru čteno sekvenčně, pokusí se načíst bloky ze souboru do paměti předtím, než je bude aplikace vyžadovat. Když přednačítání funguje, zvýší se výkon systému, protože aplikace, která provádí čtení, nebude muset čekat na splnění svých požadavků. Pokud přednačítání selže, bude výsledkem zbytečný I/O a zaplněné stránky paměti, které jsou potřeba pro jiné účely.

Jádro má vlastní přednačítací kód, který je dobře známý a vyladěný. Tato volba zapíná komplexnější a na funkce bohatší implementaci. Snaží se být chytrá a úsporná při zacházení s pamětí. Kvůli velkým rozdílům mezi skutečnými aplikacemi však nemusí vyhovovat každému.

Společně se sadou patchů byly poslány i výkonnostní testy, které ukazují úctyhodné zvýšení výkonu u databáze PostgreSQL, což Andrew Mortona vedlo ke komentáři: Ta čísla vypadají hezky, ale podivuji se nad tím, že když PostgreSQL z přednačítání tolik profituje, proč to nedělá sama - místo spoléhání na schopnost jádra uhodnout, co bude aplikace v budoucnu dělat. Určitě by to dokázala lépe než jádro.

Dostalo se mu odpovědi v tom smyslu, že vývojáři PostgreSQL chtějí svůj kód udržovat portabilní, což by bylo daleko složitější, kdyby pro každý OS implementovali speciální přednačítání. Příznivci patche rovněž poukázali na to, že zlepšení je výrazné - kolem 30 % - a týká se i jiných aplikací než PostgreSQL.

Legrace se jmény jader

27. kvě, originál

Většina verzí jádra 2.6 má své jméno, které je k vidění pouze v hlavním makefile. Například 2.6.17 byla pojmenována "Lordi Rules" [Lordi válí], 2.6.16 "Sliding Snow Leopard" [klouzající sněžný leopard], 2.6.14 "Affluent Albatross" [zámožný albatros] a 2.6.13 "Woozy Numbat" [opilý mravenečník].

Kyle McMartin nedávno poslal patch, kterým chtěl jména jader zviditelnit, což Linus Torvalds odmítl: Kouzlo těch jmen je částečně dáno tím, že nemají naprosto žádný význam. Můžu si ta jména vycucat z prstu - o nic nepůjde a nikdy je nikdo neuvidí jinde než v jaderných diffech.

Související články

Jaderné noviny - 24. 5. 2006
Jaderné noviny - 17. 5. 2006
Jaderné noviny - 10. 5. 2006
Jaderné noviny - 3. 5. 2006

Odkazy a zdroje

Kernel coverage at LWN.net: May 31, 2006
KernelTrap.org

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

12.6.2006 02:15 XXX | skóre: 4 | blog: CAD | X
Rozbalit Rozbalit vše Re: Jaderné noviny - 31. 5. 2006
Odpovědět | Sbalit | Link | Blokovat | Admin
Aktuální je jádro 2.6.16.19? Snad 2.6.16.20, ne?
12.6.2006 02:52 VícNežNic | skóre: 42 | blog: Spáleniště | Ne dost daleko
Rozbalit Rozbalit vše Re: Jaderné noviny - 31. 5. 2006
Aktuální verze jádra je 2.6.16-1.2122_FC5 :-) Nicméně, když se podíváš na název článku, objevíš v datumu zhruba dva týdny rozdílu oproti současnému datu :-)
Copak toho není dost?
12.6.2006 03:59 XXX | skóre: 4 | blog: CAD | X
Rozbalit Rozbalit vše Re: Jaderné noviny - 31. 5. 2006
aha... :-)
12.6.2006 06:51 Ricardo | skóre: 27 | blog: Ricardo | Horní Suchá
Rozbalit Rozbalit vše Re: Jaderné noviny - 31. 5. 2006
Odpovědět | Sbalit | Link | Blokovat | Admin
Zajimavé, nikdy jsem si nevšiml, že jádra mají nějaké názvy. Je tohohleto jenom "výsada" Linuxu, nebo se to objevuje i někde jinde? (myslím mezi systémovými jádry)
My mind may be raving, my words may be void, but I am not afraid of being moderated below threshold!
Nikola Ciprich avatar 12.6.2006 07:36 Nikola Ciprich | skóre: 23 | blog: NiX_blog | Palkovice
Rozbalit Rozbalit vše Re: Jaderné noviny - 31. 5. 2006
to nevim. aspon perlicka pro ty co nevideli eurovision contest a neznaji Lordi - je to mistni (finska) metalova kapela - tady naproste celebrity - v posledni dobe byli na obalce snad kazdeho casopisu,novin atd - vetsi manie nez u nas superstar :). no jo, finsko, zeme metalu :o) zda se ze ani Linus nebude vyjimka...
Did you ever touch the starlight ? Dream for a thousand years? Have you ever seen the beauty Of a newborn century?
12.6.2006 08:45 s0 | skóre: 32 | blog: nejchytřejší kecy | prágl
Rozbalit Rozbalit vše Re: Jaderné noviny - 31. 5. 2006
inu, jsou drsni jako rasple, ale hraji jako Bon Jovi :)))

jinak doporucuji youtube.com: lordi hard: rock hallelujah neskutecna legrace. Jo, a vide ze pan Lordi je novym finskym presidentem a ministrem kultury?

p.s.: nekdy je mi fakt lito, ze tu nemame Eurovizi
Kuolema Kaikille (Paitsi Meille).
Nikola Ciprich avatar 12.6.2006 09:58 Nikola Ciprich | skóre: 23 | blog: NiX_blog | Palkovice
Rozbalit Rozbalit vše Re: Jaderné noviny - 31. 5. 2006
no mi se ta hudba nejak zvlast nelibi (ja jsem priznivce spise extremnejsich smeru), ale i tak to o finech neco vypovida. ostatne tady jsou hodne popularni i brutalnejsi smecky, v top 10 se tady celkem bezne umistuji i grindove kapelky :-D
Did you ever touch the starlight ? Dream for a thousand years? Have you ever seen the beauty Of a newborn century?
12.6.2006 12:06 lyon
Rozbalit Rozbalit vše Re: Jaderné noviny - 31. 5. 2006
Stratovarius, Finntroll, Catamenia, Nightwish, Waltari, Lordi, Korpiklaani a Linux - proste finove rules ;)
Nikola Ciprich avatar 12.6.2006 12:53 Nikola Ciprich | skóre: 23 | blog: NiX_blog | Palkovice
Rozbalit Rozbalit vše Re: Jaderné noviny - 31. 5. 2006
jj, specialne Finntrol a Linux jsou moji favorite :-)

a taky Shape of Despair, Amorphis, Rotten Sound a spousty spousty dalsich... tak tak, Finsko, zeme zaslibena :)
Did you ever touch the starlight ? Dream for a thousand years? Have you ever seen the beauty Of a newborn century?
12.6.2006 18:07 ronny | skóre: 15 | blog: lake bodom | 3nec / Brno
Rozbalit Rozbalit vše Re: Jaderné noviny - 31. 5. 2006
a Children of Bodom! :-)
Metal smajdalfe, METAL!
12.6.2006 19:14 VícNežNic | skóre: 42 | blog: Spáleniště | Ne dost daleko
Rozbalit Rozbalit vše Re: Jaderné noviny - 31. 5. 2006
A snad se nikdo neurazí, když přihodím i Apocalypticu, třeba :-) A může být i Impaled Nazarene, zdravíme s0. Zrovna Lordi bych sem, no, to je jedno.
Copak toho není dost?
12.6.2006 23:06 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Jaderné noviny - 31. 5. 2006
ked Apocalyptica, tak nezabudnut na Ensiferum :-))
13.6.2006 08:20 s0 | skóre: 32 | blog: nejchytřejší kecy | prágl
Rozbalit Rozbalit vše Re: Jaderné noviny - 31. 5. 2006
doporucuji CoB + Britney
Kuolema Kaikille (Paitsi Meille).
Nikola Ciprich avatar 13.6.2006 12:35 Nikola Ciprich | skóre: 23 | blog: NiX_blog | Palkovice
Rozbalit Rozbalit vše Re: Jaderné noviny - 31. 5. 2006
perkele! :-)
Did you ever touch the starlight ? Dream for a thousand years? Have you ever seen the beauty Of a newborn century?
13.6.2006 20:50 ronny | skóre: 15 | blog: lake bodom | 3nec / Brno
Rozbalit Rozbalit vše Re: Jaderné noviny - 31. 5. 2006
a jeste jsem zapomnel na Kylähullut.. :-)
Metal smajdalfe, METAL!
Mikos avatar 14.6.2006 14:47 Mikos | skóre: 34 | blog: Jaderný blog | Praha
Rozbalit Rozbalit vše Re: Jaderné noviny - 31. 5. 2006
Jojo, Stratovarius, Finntroll, Children of Bodom... to je prostě paráda ;-) Ale Švédi a Němci jsou s power metalem a speed metalem taky na špici :-)

Ještě bych k těm úžasným věcem z Finska přihodil taky Star Wreck: In The Pirkinning, ten nemá konkurenci :-)
CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!

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