Portál AbcLinuxu, 9. května 2025 06:20

Jaderné noviny – 7. 2. 2013: Lockdep jako užitečná knihovna pro uživatelský prostor

26. 2. 2013 | Luboš Doležel
Články - Jaderné noviny – 7. 2. 2013: Lockdep jako užitečná knihovna pro uživatelský prostor  

Aktuální verze jádra: 3.8-rc6. Kód pro RAID 5/6 začleněn do Btrfs. Lockdep pro uživatelský prostor.

Obsah

Aktuální verze jádra: 3.8-rc6

link

Aktuální vývojová verze jádra je 3.8-rc6 vydaná 1. února. Mám takový MazanýPlán(tm), jak zařídit, aby rc7 bylo lepší a menší. Plán závisí především na mé nedostupnosti v průběhu příštího týdne, protože pod vodou není Internet. Jakmile se Linus vrátí z potápění, tak má v plánu být velmi agresivní co se týče přijímání pouze těch patchů, které opravují velké bezpečnostní problémy, velké regrese nahlášené uživateli nebo závažné průšvihy Kódový název vydání se změnil; nyní je to „Gorila na unicyklu“.

Stabilní aktualizace: verze 3.0.62, 3.4.29 a 3.7.6 vyšly 3. února; verze 3.2.38 vyšla 6. února.

Abych parafrázoval Vetřelce: "Pod vodou si vaše maily nikdo nepřečte"

-- Linus Torvalds

Dnešní strom s linuxovým jádrem obsahuje něco kolem 100.000 výskytů klíčového slova „goto“. Nejzanořenější použití goto jsem našel tady, hloubka je 12. Tato funkce je bohužel ohavná. Tady je mnohem čistší ukázka s hloubkou 10.

Zde je přehled cílů goto, které se vyskytují více než 200krát:

out (23228krát)
error (4240krát)
err (4184krát)
fail (3250krát)
done (3179krát)
exit (1825krát)
bail (1539krát)
out_unlock (1219krát)
err_out (1165krát)
out_free (1053krát)

-- John Regehr

diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches
--- a/Documentation/SubmittingPatches
+++ b/Documentation/SubmittingPatches
@@ -93,7 +93,9 @@ includes updates for subsystem X.  Please apply."
 
 The maintainer will thank you if you write your patch description in a
 form which can be easily pulled into Linux's source code management
-system, git, as a "commit log".  See #15, below.
+system, git, as a "commit log".  See #15, below.  If the maintainer has
+to hand-edit your patch, you owe them the beverage of their choice the
+next time you see them.

(Pokud musí správce ručně upravovat váš patch, dlužíte mu při vašem příštím setkání napój dle jeho výběru.)

-- Greg Kroah-Hartman

„nápoj“.

Prosil bych plzeň.

-- Andrew Morton

Kód pro RAID 5/6 začleněn do Btrfs

link

Kód implementující RAID 5 a 6 byl konečně zařazen do experimentální větve v repozitáři Btrfs; jde o důležitý krok na cestě do hlavní řady jádra. První výsledky benchmarků vypadají dobře, ale před označením kódu jako stabilní zbývá vyřešit několik problémů. Zde najdete oznámení, údaje z benchmarku a informace na téma, jak funguje RAID vyšší úrovně v Btrfs. Dost to zní jako MD raid a je to tím, že to je MD raid. Díky implementaci raidu uvnitř Btrfs můžeme používat odlišné úrovně raidu pro metadata a data a můžeme vynutit přepočítání parit, pokud nesouhlasí crc. Taktéž správa operací jako restriping a přidání/odstranění disků může být napojena na transakce v systému souborů. V dlouhodobém horizontu budeme moci přeskakovat čtení bloků, které nejsou alokované, a dělat další vazby mezi raid56 a metadaty systému souborů.

Lockdep pro uživatelský prostor

link

Jaderný ověřovač zámků (locking validator; známý také jako „lockdep“) je jeden z nějužitečnějších proaktivních nástrojů pro ladění, co komunita má. Od svého uvedení v roce 2006 odstranil většinu chyb, co v systému mohou způsobit deadlocky. Protože deadlocky je extrémně obtížné zopakovat a diagnostikovat, výsledkem je díky němu mnohem spolehlivější jádro a šťastnější uživatelé. Při vývoji pro uživatelský prostor je o stejné nástroje nouze, a to navzdory tomu, že i tam může docházet k deadlockům. Ale už je to tak, že zpřístupnění lockdepu pro uživatelský prostor je nakonec mnohem snažší, než by kdo byl řekl.

Lockdep funguje tak, že obaluje volání zámků v jádře. Kdykoliv je určitý typ zámku uzamčen nebo uvolněn, tato skutečnost je zaznamenána spolu s dalšími údaji jako jestli zrovna procesor obsluhoval přerušení. Lockdep si také zaznamenává, které jiné zámky byly v této době uzamčeny; toto je klíčem k většině ověřování, které lockdep dokáže provádět.

Abychom si toto ukázali názorně, představme si dvě vlákna, kde obě chtějí uzamknout dva zámky nazvané A a B.

lockdep

Pokud jedno vlákno nejprve uzamkne A, zatímco to druhé uzamkne B, tak může situace vypadat následovně:

lockdep

Pokud se teď obě vlákna pokusí uzamknout druhý zámek, systém se dostane do potíží:

lockdep

Obě vlákna nyní budou navždy čekat na to, než to druhé z nich odemkne zámek, který drží; systém je nyní ve stavu zvaném deadlock. K tomuto nemusí nikdy dojít; aby se stal podobný deadlock, obě vlákna by musela získat zámek v nevhodný okamžik. Ale jak to na počítačích bývá, i nepravděpodobné věci se dříve či později přihodí, nejčastěji když se to zrovna nejméně hodí.

Této situaci je možné se vyvarovat: pokud obě vlákna budou dodržovat pravidlo, že A musí být vždy zamykáno dříve než B, pak tento konkrétní deadlock (ze zjevných důvodů zvaný „AB-BA“) nemůže nastat. Jenže máme-li systém s velkým množstvím zámků, pak není vždy jasné, jaké pravidla pro uzamykání tu jsou, natož jestli jsou konzistentně dodržována. Chybovat je snadné. Právě zde lockdep přijde vhod: díky tomu, že sleduje pořadí získávání zámků, dokáže upozornit kdykoliv zpozoruje, že vlákno uzamklo A, zatímco už vlastní B. K získání hlášení od lockdepu není nutné způsobit deadlock, což znamená, že i ty nejnepravděpodobnější situace vedoucí k deadlocku mohou být odhaleny dříve, než nastanou. Není vůbec potřeba čekat přesně na konkrétní situaci, kdy se věci pokazí, na to, aby člověk viděl, že je někde problém.

Lockdep dokáže odhalit komplikovanější situace, než jakou jsme si popsali. Dokáže také odhalit související problémy jako zámky, které není bezpečné používat v obsluze přerušení, a přitom se tam používají. Jak asi očekáváte, běh jádra se zapnutým lockdepem znatelně zpomaluje běh; není to tedy volba, kterou byste aktivovali na produkčním systému. Naštěstí je tu ale dostatek vývojářů, kteří mají lockdep zapnutý, takže většina problémů je odhalena dříve, než se dostanou do stabilního vydání jádra. Díky tomu jsou v dnešní době deadlocky na produkčních systémech vcelku výjimečné.

Přesunout jaderné nástroje do uživatelského prostoru není vždy jen tak; jaderné prostředí se znatelně liší od běžného prostředí C, takže jaderný kód je obvykle možné spustit jen v jádře samotném. V tomto případě ale Sasha Levin vypozoroval, že na subsystému lockdep není moc věcí doopravdy specifických pro jádro. Lockdep shromažďuje data a sestavuje grafy popisující vypozorované vzorce získávání zámků; jde o kód, který by mimo jádro mohl běžet vcelku snadno. Proto Sasha sestavil patch, kterým vzniká knihovna lockdep dostupná pro programy v uživatelském prostoru.

Lockdep samozřejmě volá spoustu funkcí jádra, proto je součástí Sashova patche dlouhý seznam prázdných implementací pro funkce jako local_irq_enable(), které v uživatelském prostoru nemají význam. Pro sledování vláken v uživatelském prostoru se používá zkrácená verze struct task_struct a funkce jako print_stack_trace() jsou nahrazeny obdobami z uživatelského prostoru (v tomto případě to je backtrace_symbols_fd()). Interní jaderné zámky (používané v lockdebp) jsou reimplementovány pomocí POSIXových mutexů pthread. Pahýly hlavičkových souborů používané v lockdepu se nacházejí ve zvláštním adresáři. A tak dále. A jakmile je všechno toto hotovo, tak je možné kód lockdepu sestavit přímo mimo strom jádra a vyrobit z něj knihovnu.

Kód z uživatelského prostoru, který chce využít knihovny lockdep, musí nejprve učinit #include <liblockdep/mutex.h>, který mimo jiné přidává skupinu wrapperů kolem typů pthread_mutex_t a pthread_rwlock_t a funkcí, pomocí nichž se s nimi pracuje. Je nutné zavolat liblockdep_init(); každé vlákno by navíc mělo zavolat liblockdep_set_thread() pro inicializaci údajů pro hlášení problémů. To je asi tak vše, co je potřeba; takový program bude mít používání mutexů a r/w zámků sledované lockdepem.

Jako důkaz patch také přidává podporu pro liblockdep do nástroje perf, který se nachází ve stromě jádra.

Jednou z klíčových vlastností Sashova patche je to, že nevyžaduje žádné úpravy v jaderném kódu lockdepu. Knihovnu pro uživatelský prostor je možně sestavit přímo z kódu z jádra. Mimo jiné to znamená, že všechny budoucí opravy a vylepšení budou bezpracně dostupné i v uživatelském prostoru.

Dalo by se to shrnout tak, že tento patch vypadá jako významně prospěšný pro všechny zúčastněné strany; proto nepřekvapí, že se proti patchi ani nezformoval žádný odpor. Objevila se žádost o lepší dokumentaci, explicitní zmínku, že kód je pod GPL, a přepínač aktivující liblockdep až za běhu (aby knihovna mohla být vestavěna do aplikací, ale nemusela by se používat, dokud by to nebylo nutné). Tyto drobnosti by ale nemělo být těžké doplnit. S trochou štěstí bude mít uživatelský prostor v blízké budoucnosti přístup k lockdep, což povede ke spolehlivějšímu používání zámků.

Odkazy a zdroje

Kernel coverage at LWN.net: February 7, 2013

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

26.2.2013 11:30 smazáno | skóre: 18 | blog: smazáno
Rozbalit Rozbalit vše Re: Jaderné noviny – 7. 2. 2013: Lockdep jako užitečná knihovna pro uživatelský prostor
Odpovědět | Sbalit | Link | Blokovat | Admin
ten lockdep vypada hodne zajimave
26.2.2013 14:05 Sten
Rozbalit Rozbalit vše Re: Jaderné noviny – 7. 2. 2013: Lockdep jako užitečná knihovna pro uživatelský prostor
Odpovědět | Sbalit | Link | Blokovat | Admin
Hmm, zpočátku jsem chtěl poukázat, že v angličtině Andrew opravoval Gregovi gramatiku. Až potom jsem si všiml, že je tu v překladu napsáno „napój“ :-)
David Šmíd avatar 26.2.2013 15:42 David Šmíd | skóre: 10 | blog: dsmid
Rozbalit Rozbalit vše Re: Jaderné noviny – 7. 2. 2013: Lockdep jako užitečná knihovna pro uživatelský prostor
Odpovědět | Sbalit | Link | Blokovat | Admin
Pilsener = ležák, nemusí to být přímo plzeň, stejně jako hamburger nemusí být z Hamburku a frankfurter nemusí být z Frankfurtu.

 


Jediné "intuitivní" rozhraní je bradavka. Všechno ostatní se musíte naučit. -- Bruce Ediger, o uživatelském rozhraní
26.2.2013 15:43 luky
Rozbalit Rozbalit vše Re: Jaderné noviny – 7. 2. 2013: Lockdep jako užitečná knihovna pro uživatelský prostor
Pilsener = plzen, Pilsner Urquel = Plzen
26.2.2013 19:47 Sten
Rozbalit Rozbalit vše Re: Jaderné noviny – 7. 2. 2013: Lockdep jako užitečná knihovna pro uživatelský prostor
Pilsner je pivo plzeňského typu. U nás pro pilsner nemáme speciální slovo, říkáme tomu prostě pivo, protože téměř všechna piva u nás jsou pilsnery.
27.2.2013 09:27 aesrwerqwr
Rozbalit Rozbalit vše Re: Jaderné noviny – 7. 2. 2013: Lockdep jako užitečná knihovna pro uživatelský prostor
sedi v hospode ostravak, brnak a plzenak. ostravak si objedna ostravar, brnak si objedna starobrno a plzenak si objedna kofolu. ostravak a brnak se na nej divne koukaji a plzenak odveti "kdyz vy nepijete pivo, tak ja taky ne!"
28.2.2013 12:24 Rovano | skóre: 8
Rozbalit Rozbalit vše Re: Jaderné noviny – 7. 2. 2013: Lockdep jako užitečná knihovna pro uživatelský prostor
Plzeň co se distribuuje u nás, už většinou není co bejvala. Jsou daleko lepší pivovary. A taky záleží, zda je to pasterovaný, kdo to čepuje atd. Ale jo. Kdo je patriot nebo nenáročný, tomu Plzeň stačí.
(╯°□°)╯︵ ┻━┻ enough of this! ♫♫♫ԅ(ˆ⌣ˆԅ)♫♫♫
Luboš Doležel (Doli) avatar 26.2.2013 20:55 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Jaderné noviny – 7. 2. 2013: Lockdep jako užitečná knihovna pro uživatelský prostor
Tvůj popis přesně ukazuje, proč jsem to použil správně. "plzeň" taky nemusí být z Plzně ;-) Slovník se mnou souhlasí.

BTW: nesnáším plzeň
27.2.2013 12:03 kralyk z abclinuxu | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: Jaderné noviny – 7. 2. 2013: Lockdep jako užitečná knihovna pro uživatelský prostor
Odpovědět | Sbalit | Link | Blokovat | Admin
s/výt/být/;

Jinak pěkný díl ;-)
SPD vůbec není proruská
Luboš Doležel (Doli) avatar 27.2.2013 12:24 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Jaderné noviny – 7. 2. 2013: Lockdep jako užitečná knihovna pro uživatelský prostor
Dík.

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