Portál AbcLinuxu, 5. května 2025 14:10

Jaderné noviny - 5. 9. 2007

18. 9. 2007 | Robert Krátký
Články - Jaderné noviny - 5. 9. 2007  

Aktuální verze jádra: 2.6.23-rc5. Citáty týdne: 2× Andrew Morton. LinuxConf.eu: dokumentace a API pro uživatelský prostor. LinuxConf.eu: jak nenavrhovat jaderná rozhraní.

Obsah

Aktuální verze jádra: 2.6.23-rc5

link

Aktuální předverze je (k 5. 9. 2007) 2.6.23-rc5, kterou Linus vydal 31. srpna, těsně před odjezdem na kernel summit. Obsahuje slušnou řádku oprav; jádro se stabilizuje, ale než bude připraveno k vydání, bude ještě potřeba trochu práce.

Od vydání -rc5 přibylo do hlavního git repozitáře jen několik oprav.

Aktuální verze -mm stromu je 2.6.23-rc4-mm1. Mezi nedávné změny patří výrazné interní implementační změny v sysfs, změny API pro souborové systémy, patche pro odstranění sysctl() a patche pro regulaci využití paměti v kontejnerech.

Aktuální stabilní verze řady 2.6 je 2.6.22.6, vydaná 30. srpna s pár desítkami oprav.

Citáty týdne: 2x Andrew Morton

link

Chceme-li administrátorům systémů něco vzkázat, neměli bychom je nutit ten vzkaz hledat v gitu a diskuzích na LKML!

-- Andrew Morton

Soudě podle počtu a vážnosti hlášení o chybách, která tu létají, není 2.6.23 zrovna na spadnutí.

-- Andrew Morton

LinuxConf.eu: dokumentace a API pro uživatelský prostor

link

Michael Kerrisk Michael Kerrisk, od roku 2004 správce linuxových manuálových stránek, přednesl během prvního dne konference LinuxConf Europe 2007 řeč o hodnotě dokumentace. Ačkoliv je dokumentace užitečná i pro koncové uživatele, na ně se Michael nezaměřoval; místo toho mluvil o tom, jak může dokumentace pomoci dělat lepší jádro. Psaní dokumentace podle Michaela odhaluje chyby a špatné návrhy rozhraní, než se stanou součástí vydaného jádra. A to může ušetřit spoustu nepříjemností jak vývojářům jádra, tak uživatelských aplikací.

Michael nabídl tři příklady na ukázku toho, jak může psaní dokumentace odhalit chyby:

Podle Michaela je přítomnost vadných rozhraní ve stabilních vydáních jádra důsledkem nedostatečného testování -rc verzí během vývojového procesu. S tímto problémem může pomoci lepší dokumentace. Ta by ostatně mohla pomoci i při samotném návrhu API. Navrhování API je složité a ještě jej ztěžuje fakt, že chyby v návrhu musí být podporovány navždy. Takže cokoliv pomůže s vytvářením lepších API si zaslouží pozornost.

Dobré API se vyznačuje jednoduchostí, snadností použití, obecností, konzistencí s dalšími rozhraními a integrací s dalšími rozhraními. Špatně navržená rozhraní tyto vlastnosti nemají. Jako příklad nabídl Michael rozhraní dnotify - předchozí pokus o poskytnutí služby, která by informovala o změnách souborů. Dnotify mělo problémy kvůli používání signálů, což je vždy zárukou obtížně použitelného rozhraní. Mohlo sledovat pouze adresáře, ne jednotlivé soubory. Vyžadovalo také udržování otevřeného popisovače souborů, takže nebylo možné odpojit žádný souborový systém, kde bylo dnotify používáno. Množství informací poskytovaných aplikacím bylo také omezené.

Jako další příklad byla uvedena systémová volání mlock() a remap_file_pages(). Obě mají parametry start a length pro určení rozsahu ovlivněné paměti. Rozhraní mlock() zaokrouhluje parametr length na další stránku, kdežto remap_file_pages() zaokrouhluje dolů. Rozhraní se liší také v tom, kdy parametr length uplatňují. Výsledkem je, že volání

    mlock (4000, 6000);

ovlivní bajty 0..12287, zatímco

    remap_file_pages (4000, 6000, ...);

ovlivní bajty 0..4095. Taková nekonzistence vývojářům znesnadňuje práci.

O tom, jak jsou tato rozhraní špatná, by se dalo vyplýtvat hodně bitů, ale Michael položil i otázku, jestli je to vůbec chyba jejich autorů. Nepřispěla k těmto problémům také absence kontroly?

Mnohé potíže pramení ze skutečnosti, že ti, kdo rozhraní systémových volání navrhují (hackeři jádra), obvykle daná rozhraní nepoužívají. Ve snaze zlepšit situaci Michael navrhl formalizaci vývojového procesu rozhraní systémových volání. Uznal sice, že bude těžké něco takového prosadit, ale potřeba vytvářet bezvadná rozhraní z toho dělá nutnost. Takže by rád docílil zavedení formální povinnosti podepisování [signoff] API - i když neupřesnil, kdo by podepisoval. Než by mohlo k podpisu dojít, musela by proběhnout kontrola návrhu, musela by existovat kompletní dokumentace a sada testů. Testy by musely být alespoň zčásti od někoho jiného než vývojáře rozhraní, který si nikdy nedokáže představit všechny bláznivé věci, které by s novým rozhraním mohli chtít uživatelé dělat.

Dokumentace je důležitou součástí procesu. Při psaní dokumentace často vyjdou najevo chyby. Kromě toho je díky dokumentaci pro ostatní snazší navrhovanému rozhraní porozumět, takže je více kontrolováno a testováno. Bez testování ze strany vývojářů aplikací se na chyby v novém API často přijde až po zařazení do stabilního vydání jádra, kdy už je pozdě.

Při následné debatě se mluvilo tom, že přimět vývojáře aplikací, aby testovali systémová volání v -rc jádrech bude obtížné. Alternativou, která už byla zmíněna dříve, by bylo označovat po několik vývojových cyklů od přidání nová systémová volání jako "experimentální". Pak by bylo možné vyzkoušet nová volání bez provozování testovacích jader a pořád mít vliv na to, jak bude finální podoba API vypadat. Možná by bylo snazší vývojáře jádra přesvědčit k tomuto postupu, místo komplikovaného formálního schvalování. Jak tato diskuze dopadne, to bude záležet na tom, nakolik vývojáři považují současný způsob návrhu a nasazování nových API pro uživatelských prostor za problém.

LinuxConf.eu: jak nenavrhovat jaderná rozhraní

link

Arnd Bergmann Následující den přednesl Arnd Bergmann řeč o tom, jak nenavrhovat jaderná rozhraní. Začal tím, že dobrá rozhraní jsou navrhována "vkusně"; ale rozhodování o dobrém vkusu není vždy snadné. Vkus je subjektivní a časem se mění. Některé charakteristiky vkusného rozhraní jsou však jasné: jednoduchost, konzistence a používání správného nástroje pro daný úkol. Je to samozřejmě velmi podobné tomu, co říkal Michael den předtím.

Jak tomu bývá i v jiných oblastech, návrhy rozhraní se nejlépe popisují pomocí poukazování na věci, které by se dělat neměly. Arnd začal systémovými voláními, která jsou primárním rozhraním jádra. Přidávání nových systémových volání není snadné; nejprve musí projít množstvím kontrol (ačkoliv, jak bylo zmíněno výše, pořád jich patrně není dost). Ale často může být alternativní řešení ještě horší; Arnd uvedl jako příklad hypotetické zařízení /dev/exit; proces, který dokončil svou práci, by se ukončil otevřením a zápisem na toto zařízení. Takové schéma by umožnilo odstranění systémového volání exit(), ale v žádném případě by se nejednalo o vkusnější rozhraní.

Systémové volání ioctl() je už dlouho terčem kritiky; není typově bezpečné, těžko se skriptuje a představuje snadný způsob, jak do jádra propašovat změny ABI, aniž by si toho někdo všiml. Na druhou stranu je dobře zavedené, snadno rozšiřitelné, funguje v modulech a může poskytnout dobrý způsob k prototypování systémových volání. A snaha o obcházení ioctl() může opět vést k horším věcem; Arnd představil příklad z kódu InfiniBand, který interpretuje data zapsaná do speciálního popisovače souboru, aby mohl spouštět příkazy. Výsledkem je v podstatě ioctl(), ale ještě méně přehledné.

Sokety jsou další dobře zavedené rozhraní, které by, podle Arnda, v současné době nebylo do jádra za žádnou cenu přijato. Jsou naprosto nekonzistentní se vším ostatním, pracují se zařízeními, která nejsou součástí stromu zařízení, mají volání pro čtení a zápis, ale nejsou to read() a write() a tak dále. Netlink, který rozhraní soketů ještě zkomplikoval, zrovna situaci v uživatelském prostoru nepomohl; podle Arnda je lepší se jejich použití vyvarovat. Ale podstatné je, že je lepší použít netlink, než jej vynalézat znovu. API bezdrátových rozšíření [wireless extensions] bylo uvedeno jako další příklad, jak věci nedělat; založení bezdrátových rozšíření na netlinku zkombinovalo do jediného rozhraní nejhorší vlastnosti soketů a ioctl().

"V módě" je teď navrhování nových rozhraní s pomocí virtuálních souborových systémů. Ale i s tím jsou potíže. /proc se stalo smetištěm nových rozhraní, dokud se na přidávání dalších věcí nezačali vývojáři dívat přísněji. Sysfs bylo zamýšleno jako řešení mnoha problémů s /proc, ale zjevně nebyl vyřešen problém se nestabilitou API. Virtuální souborové systémy jsou možná nejlepší způsob vytváření nových rozhraní, ale i tam číhají nepříjemnosti.

Nakonec se mluvilo o navrhování rozhraní, která by usnadnila emulaci ABI. Arnd navrhoval, aby byly datové struktury stejné v jádře i uživatelském prostoru. Je-li to možné, neměly by se používat long proměnné a ukazatele. K problémům může vést i vatování struktur [structure padding] - ať už explicitní nebo způsobené špatně zarovnanými poli. A tak dále.

Byla to zajímavá přednáška s velkou účastí publika. Součástí Linuxu je množství chyb v návrhu uživatelských rozhraní, která musejí být už navždy podporována. Je však také velký zájem se podobným chybám v budoucnu vyhnout. I s mnoha zkušenostmi jde však pořád o velmi obtížný problém.

Související články

Jaderné noviny - 34 a 35/2007
Jaderné noviny - 29. 8. 2007
Jaderné noviny - 22. 8. 2007
Jaderné noviny - 15. 8. 2007
Jaderné noviny - 32 a 33/2007

Odkazy a zdroje

Kernel coverage at LWN.net: September 5, 2007

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

18.9.2007 01:25 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Jaderné noviny - 5. 9. 2007
Odpovědět | Sbalit | Link | Blokovat | Admin
Navrhování API je složité a ještě jej ztěžuje fakt, že chyby v návrhu musí být podporovány navždy.
Zajímalo by mě, proč nefunguje princip "tady je nové API, za dva roky staré odstraníme. Používejte nové." IMHO jsou dva roky dost času na to, aby bylo možné upravit drtivou většinu programů.
Quando omni flunkus moritati
zoul avatar 18.9.2007 10:09 zoul | skóre: 43 | blog: | Boskovice
Rozbalit Rozbalit vše Re: Jaderné noviny - 5. 9. 2007
Hromada programů například bývá neudržovaná. Klidně jsou třeba i naprosto stabilní a odladěné, ale když jim někdo podtrhne API, uživatelé o ně přijdou. Když se často mění API, rychle taky zastarává dokumentace, například knihy a různí průvodci na webu. Nic z toho není fatální, ale je to nepříjemné.
18.9.2007 12:20 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Jaderné noviny - 5. 9. 2007
Porušujete to zlaté pravidlo "nesahat na něco, co funguje". V uživatelském prosotru je při takové změně nutné upravovat programy, které fungují spolehlivě bez jediné úpravy několik let, případně je nutné sahat do částí vyvíjeného programu, se kterými by se jinak vůbec nemanipulovalo. Jak známo, při každé opravě programu se do něj zanese alespoň jedna další chyba.
21.9.2007 01:26 me
Rozbalit Rozbalit vše Re: Jaderné noviny - 5. 9. 2007
Linux ma ted trosku problem, vyvoj probiha prubezne ve vetvi 2.6.x. Pokud by se neco melo odstratnit, mela by se utvorit uplne nova vetev, treba 2.8.x. Pokud se bude umazavat ve vetvi 2.6.x, vznikne zrejme znacny chaos. Neslysel jsem, ze by se uvazovalo o otevreni noveho stromu...
18.9.2007 07:22 cronin | skóre: 49
Rozbalit Rozbalit vše Dokumentovanie odhaľuje chyby
Odpovědět | Sbalit | Link | Blokovat | Admin
Z vlastnej skúsenosti môžem potvrdiť, že dokumentácia rozhrania odhaľuje jeho chyby. Viackrát sa mi stalo, že som písal dokumentáciu metódy, pričom som písal to, o čom som bol presvedčený, že metóda robí; keď som sa ale aspoň zbežne na tú metódu pozrel, zistil som, že v žiadnom prípade nemôže robiť to, čo som práve napísal. Pozrem lepšie, ajhľa, chyba! Nestalo sa mi to veľakrát, ale stalo sa mi to neraz. Písať dokumentáciu k programom je správne.
18.9.2007 07:57 cedrik
Rozbalit Rozbalit vše Re: Dokumentovanie odhaľuje chyby
Ještě je dobré si ji po sobě přečíst. Někdy si človek říká na co zrovna myslel, když mohl zplodit takovou nepěknou, ošklivou tentonoc.
19.9.2007 08:01 polish
Rozbalit Rozbalit vše Re: Dokumentovanie odhaľuje chyby
jj, tomu se rika midnight kod
18.9.2007 14:41 lm
Rozbalit Rozbalit vše Re: Jaderné noviny - 5. 9. 2007
Odpovědět | Sbalit | Link | Blokovat | Admin
super. a ani ta cestina mi nevadila, (naopak) :)
19.9.2007 10:34 Jirka
Rozbalit Rozbalit vše Re: Jaderné noviny - 5. 9. 2007
Odpovědět | Sbalit | Link | Blokovat | Admin
Ze by se otviral prostor pro uplne nove jadro?
19.9.2007 21:15 nardew | skóre: 5
Rozbalit Rozbalit vše Re: Jaderné noviny - 5. 9. 2007
urcite nie
the best way of Memtest is emerge qt kde-meta
19.9.2007 21:19 alexovi
Rozbalit Rozbalit vše Re: Jaderné noviny - 5. 9. 2007
Nedalo by sa napisat nove jadro (API) a stare emulovat ? Po niekolkych rokoch by sa emulator mohol poupravit tak aby trosku spomaloval (nie vyrazne, aby to prinutilo ludi prepisat dane programi na nove API), popripade preposielat informacie o programoch, ktore ho pouzivaju do nieakej globalnej databazy a snad by sa niekto nasiel kto by to prerobil. Pride mi nezmyselne udrziavat nevhodne API. Potom to iba rastie a rastie az je toho tolko, ze novy vyvojary nevedia co pouzit. (ala windows)
19.9.2007 22:22 cronin | skóre: 49
Rozbalit Rozbalit vše Re: Jaderné noviny - 5. 9. 2007
Kolko tisic riadkov produckneho kodu si uz napisal?
19.9.2007 23:28 alexovi
Rozbalit Rozbalit vše Re: Jaderné noviny - 5. 9. 2007
Hodne, programujem profesionalne (alebo ak chces tak pracovne) uz okolo 10 rokov. Je pravda, ze "iba" aplikacie narocne na zdroje, ktore sa snazia vyuzivat maximum z toho co hardware da. Takze pouzivane technologie sa nam menia casto. Ale o mna tu nejde. Linuxovy kernel sledujem iba povrchne. Z predchdzjucej diskusie som pochopil, ze problem je hlavne so starsimi aplikaciami, ktore nikto uz neudrziava. Pod zmenou API som samozrejme nemyslel prepisat vsetko az taky naivny nie som. Uz zopar krat sa nam osvedcilo zbavit sa uplne niektorych starych kodov a napisat to na novo. Ano clovek tam naroby nieake nove chybky ale roby to kvoli tomu ze tie stare chybky sa uz nedaju rozumne opravovat.
20.9.2007 07:12 cronin | skóre: 49
Rozbalit Rozbalit vše Re: Jaderné noviny - 5. 9. 2007
Ja tiez programujem/navrhujem pracovne. Tvoj navrh mi prisiel dobry "as is", ale v praxi sa mi zda nepravdepodobne vyvijat taku namahu navyse. Na druhej strane, malokto si dovoli odstranit interface, na ktorom zavisia aplikacie; stratit akukolvek cast zakaznikov, v tomto pripade pouzivatelov, kvoli vykonaniu nejakej vlastnej akcie, ktorej dosledky sa dali predvidat, nikto nebude riskovat. Ako priklad mozem uviest Javu: je par rozhrani, ktore su navrhnute vyslovene zle. Vie sa, ako to urobit dobre, existujuce metody su uz mnoho rokov @deprecated, velmi vela profesionalnych dizajnerov a programatorov chce novu ocistenu Javu a nevadi im, ze nebude spatne kompatibilna, ale Sun jednoducho odmieta urobit taky krok, ktory by okamzite znefunkcnil co i len 1% programov; pre pouzivatelov by to bol velmi zly signal: dnes znefunkcnili 1% programov, zajtra mozu 5% a medzi nimi moze byt aj ta nasa...

Takze chciet vynutit len spravne navrhnute rozhrania je dobre a chvalyhodne, ale svet je o kusok komplikovanejsi. :-(
20.9.2007 17:33 ed | skóre: 18
Rozbalit Rozbalit vše Re: Jaderné noviny - 5. 9. 2007
uz niekolko verzii jadra mi picmic subsystem pri boote tvrdi, ze sucasne mnou pouzivane rozhranie bude z kernelu odstranene a co si myslis, ze s tym robim? nic :) na ho pouzivam k spokojnosti, tak nevidim dovod ho odstranovat.

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