Na čem aktuálně pracují vývojáři GNOME a KDE Plasma? Pravidelný přehled novinek v Týden v GNOME a Týden v KDE Plasma.
Před 25 lety zaplavil celý svět virus ILOVEYOU. Virus se šířil e-mailem, jenž nesl přílohu s názvem I Love You. Příjemci, zvědavému, kdo se do něj zamiloval, pak program spuštěný otevřením přílohy načetl z adresáře e-mailové adresy a na ně pak „milostný vzkaz“ poslal dál. Škody vznikaly jak zahlcením e-mailových serverů, tak i druhou činností viru, kterou bylo přemazání souborů uložených v napadeném počítači.
Byla vydána nová major verze 5.0.0 svobodného multiplatformního nástroje BleachBit (GitHub, Wikipedie) určeného především k efektivnímu čištění disku od nepotřebných souborů.
Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za duben (YouTube).
Provozovatel čínské sociální sítě TikTok dostal v Evropské unii pokutu 530 milionů eur (13,2 miliardy Kč) za nedostatky při ochraně osobních údajů. Ve svém oznámení to dnes uvedla irská Komise pro ochranu údajů (DPC), která jedná jménem EU. Zároveň TikToku nařídila, že pokud správu dat neuvede do šesti měsíců do souladu s požadavky, musí přestat posílat data o unijních uživatelích do Číny. TikTok uvedl, že se proti rozhodnutí odvolá.
Společnost JetBrains uvolnila Mellum, tj. svůj velký jazykový model (LLM) pro vývojáře, jako open source. Mellum podporuje programovací jazyky Java, Kotlin, Python, Go, PHP, C, C++, C#, JavaScript, TypeScript, CSS, HTML, Rust a Ruby.
Vývojáři Kali Linuxu upozorňují na nový klíč pro podepisování balíčků. K původnímu klíči ztratili přístup.
V březnu loňského roku přestal být Redis svobodný. Společnost Redis Labs jej přelicencovala z licence BSD na nesvobodné licence Redis Source Available License (RSALv2) a Server Side Public License (SSPLv1). Hned o pár dní později vznikly svobodné forky Redisu s názvy Valkey a Redict. Dnes bylo oznámeno, že Redis je opět svobodný. S nejnovější verzí 8 je k dispozici také pod licencí AGPLv3.
Oficiální ceny Raspberry Pi Compute Modulů 4 klesly o 5 dolarů (4 GB varianty), respektive o 10 dolarů (8 GB varianty).
Byla vydána beta verze openSUSE Leap 16. Ve výchozím nastavení s novým instalátorem Agama.
Jádro 2.6.32 je venku, vydáno bylo 2. prosince. Mezi významnější vlastnosti v 2.6.32 patří devtmpfs, kus práce na škálovatelnosti blokové vrstvy, HWPOISON, jádrem sdílená paměť, mnoho přírůstků do subsystému událostí výkonnosti [perf events] a další. Spoustu detailů vizte na stránce o 2.6.32 na KernelNewbies.
Začleňovací okno 2.6.33 je otevřené; v článku níže vizte shrnutí nejvýznamnějších změn, které byly zatím začleněny.
Stabilní aktualizace jádra: 2.6.31.7 obsahující velmi dlouhý seznam oprav, bylo vydáno 8. prosince. Ve stejnou dobu bylo vydáno 2.6.27.40 rychle následované 2.6.27.41, které opravovalo problém při překladu.
s/DEFINE_EVENT_CLASS/FRED/g s/DEFINE_EVENT/WILMA/g s/TRACE_EVENT/BARNEY/g
Případné začlenění spících spinlocků ze stromu realtime preempce vyžaduje rozdělení existujících zámků na dva typy: Na ty, které v realtime stromě smí spát (většina), a ty, které musí zůstat skutečnými spinlocky. Na Jaderném summitu 2009 se rozhodlo proti přejmenovávání velkého počtu běžných zámků, ale nevzešlo odtud jméno pro typ „čistého“ spinlocku.
Jednou možností bylo raw_spinlock_t, ale toto jméno se již používá v kódu lockdep. Po mnoha dalších možných jménech, která byla zvažována, vyhrál Linusův návrh: arch_spinlock_t. Toto jméno nese informaci o tom, že se jedná o nízkoúrovňový spinlock, který je implementován kódem specifickým pro architekturu; lepší nápad se neobjevil, takže u tohoto jména zůstalo.
Thomas Gleixner zaslal patch, který změnu provádí. Stojí za to poznamenat, že i když nový typ není raw_spinlock_t, stále se k získání zámku arch_spinlock_t volá raw_spin_lock(). V době psaní tohoto článku nebyl tento patch začleněn do 2.6.33, ale je šance, že bude.
Linus začal začleňovat patche pro vývojový cyklus 2.6.33 5. prosince. Začleňovací okno začalo pomalu, ale pak Linus začal dohánět ztracený čas; v době psaní tohoto článku bylo začleněno nějakých 3900 sad změn.
Mezi změny viditelné pro uživatele patří:
Framework ftrace se dočkal mnoha vylepšení, včetně možnosti sledovat několik procesů simultánně, podpory regulárních výrazů ve sledovacích filtrech, sledování událostí velkého jaderného zámku a sledování přístupu k libovolným jaderným proměnným a jejich modifikací.
Pravděpodobně nejvýznamnější je (pro ftrace) začlenění sady patchů pro dynamické sondy, což umožňuje umístit za běhu libovolné sledovací body. Nástroj „perf“ byl rozšířen a je nyní schopen umístit a používat dynamické sondy.
„Perf“ byl vylepšen i v dalších oblastech, mezi ně patří přidání nového frameworku pro sady benchmarků, příkazů pro záznam a analýzu jaderných alokací paměti a sady háčků pro obecný skriptovací jazyk.
Dlouhodobě trvající snaha Erica Biedermana odstranit binární sysctl() se konečně dostala do hlavní řady.
Bylo přidáno systémové volání recvmmsg()
Předvídající [anticipatory] I/O plánovač byl odstraněn ve prospěch CFQ, o kterém panuje názor, že poskytuje nadmnožinu vlastností.
Byl začleněn nový, sjednocený řadič propustnosti blokového I/O.
Síťová vrstva získala podporu pro Transakce s TCP cookie [PDF], mechanismu, který umožňuje rychlejší, bezpečnější a robustnější zahajování TCP spojení.
Bylo začleněno distribuované blokové zařízení – DRBD.
Nové ovladače:
Desky a procesory:
Síťování:
Zvuk:
Různé:
Mezi změny viditelné pro jaderné vývojáře patří:
Nové makro unreachable(), jež lze použít k označení kódu, který nikdy nebude vykonán. Jeho hlavní aplikací jsou makra jako BUG().
Pro ovládání chmod(), chown() a chroot() byly přidány nové háčky pro bezpečnostní moduly založené na cestách.
Nová varianta RCU nazvaná „malé RCU“, která je určena pro ne-SMP případy, kde je potřeba minimalizovat otisk v paměti.
printk_ratelimit() je nyní znovu možné používat v atomickém kontextu (Vezměte nicméně na vědomí, že existují vývojáři, kteří by tuto funkci rádi odstranili ve prospěch nějakého lokálnějšího omezování četnosti vypisování.)
Významně se zjednodušilo vytváření téměř identických sledovacích bodů. TRACE_EVENT_TEMPLATE() má syntaxi identickou s TRACE_EVENT(), ale vytváří šablonu, kterou lze použít jednodušším makrem DEFINE_EVENT() k vytvoření specifického sledovacího bodu. Kód se zjednodušuje a vedlejším efektem je, že jádro se zmenší.
Začleňovací okno by mělo zůstat otevřené alespoň ještě jeden týden; očekávejme začlenění o trochu většího množství kódu, než se okno uzavře.
Minimalizace režie různých jaderných mechanismů pro ladění a sledování je důležitá z několika důvodů. Pro statické sledovací nástroje, jako jsou sledovací body, platí, že jejich vliv na systém, když nejsou zapnuty, musí být velmi nízký, jinak je nikdo nebude používat – nebo nebudou začleněny. Krom toho – jako u jakéhokoliv jiného sledovacího nástroje – musí být jejich vliv, když jsou zapnuty, co nejmenší, aby se sledované chování v důsledku sledování významně nezměnilo. Dva oddělené návrhy, návěští skoků [jump labels] pro sledovací body a optimalizace skoků ksond [kprobes], se oba snaží omezit vliv, který má osazení sledovacími nástroji na výkonnost. Krom toho sdílí nějaký kód.
Optimalizaci skoků ksond navrhl Masami Hiramatsu, režii volání ksondy snižuje přibližně na pětinu a za to platí spotřebou paměti navíc. Podle Masamiho se trvání ksond, když byly touto technikou optimalizovány, snížilo z 0,68 μs (32 bit) a 0,91 μs (64 bit) na 0,06 μs (oba). Návratové ksondy [kretprobes] spadly z 0,95 μs (32 bit) a 1,21 μs (64 bit) na 0,30 μs a 0,35 μs v uvedeném pořadí. Veškeré testování probíhalo na 2,33GHz procesoru Xeon.
Kvůli takovým číslům člověk vyvalí oči, obzvlášť když optimalizace přidává přibližně jenom 200 bytů za sondu. Základním nápadem je použít místo bodu přerušení [breakpoint] instrukci skoku a tak implementovat sondy, kdekoliv je to možné. Patch obsahuje poměrně složité „bezpečnostní kontroly“, které se ujišťují, že je optimalizaci možné provést. Navíc předtím, než je cokoliv z toho provedeno, je vložena ksonda běžná založená na bodě přerušení – pokud optimalizaci nelze provést, použije se ta.
Instrukce skoku, která se má vkládat na adresu, kde se má sledovat, je delší než jeden byte, takže je nutné se při optimalizaci dívat na kód, který tím bude ovlivněn. Pokud zasažená oblast leží na hranici mezi funkcemi (tj. instrukce skoku by vytekla ze sledované funkce do další), optimalizace se neprovádí. Sledovaná funkce se poté dekóduje a hledá se instrukce skoku, která by do ovlivněné oblasti mohla skočit; pokud žádná není nalezena, optimalizace pokračuje.
Instrukce umístěné na adrese, která se bude sledovat, je samozřejmě nutné vykonat, i když jsou nahrazeny skokem, takže je vytvořen buffer pro „objížďku“. Objížďkový buffer emuluje výjimku, která obsahuje instrukce zkopírované ze sledovaného místa následované skokem na původní cestu vykonávání. Buffer je použit poté, co se vykoná samotný kód ksondy, aby mohl doběhnout kód za touto sondou.
Jakmile je vytvořen objížďkový buffer, je ksonda zařazena do pracovní fronty optimalizátoru ksond, kde je do místa sledování patchován skok. Optimalizátor se musí ujistit, že neprobíhají žádná přerušení, a to udělá použitím synchronize_sched() ve funkci pracovní fronty. Když se ta dokončí, funkce text_poke_fixup(), která je přidána jako součást sady patchů, modifikuje kód a vloží do něj skok.
Patch text_poke_fixup() je ten kousek, který je sdílen s návěštími skoků. Vypadá takto:
void *text_poke_fixup(void *addr, const void *opcode, size_t len, void *fixup);
kde addr ukazuje na pozici, která se má změnit, opcode a len specifikují nový operační kód (a jeho délku), který tam má být zapsán. fixup je adresa, kam má procesor skočit, pokud narazí na addr, když probíhá modifikace.
text_poke_fixup() v podstatě vloží přerušovací bod, který vykoná kód na fixup místo na addr a ten synchronizuje na všechna CPU. Potom modifikuje všechny ostatní byty (kromě prvního) v oblasti a opět vše synchronizuje na všechna CPU. Další krok je modifikace prvního byte, což opět vyžaduje synchronizaci, načež je bod přerušení vymazán. Všechna volání provedená během modifikace jsou bodem přerušení přesměrována do kódu fixup.
Návěští skoků používají stejnou techniku, ale vzhledem k tomu, že se vztahují ke statickému osazení (sledovacím bodům [tracepoint]), jejich úkolem je minimalizovat dopad v pravděpodobném případě, že je sledovací bod zakázán. To dělá použitím konstrukce asm goto v assembleru, která bude k dispozici v blížícím se GCC 4.5 a která umožňuje skok na návěští.
Pro sledovací bod je to myšleno tak, že v zakázaném případě bude tvořen pětibytovým NOP (velikost vhodná k tomu, aby ho bylo možné přepsat skokem) následovaným skokem, který přeskakuje zakázaný sledovací kód. Když je sledovací bod povolen, text_poke_fixup() změní NOP na skok na návěští v makru DECLARE_TRACE() – na kód, který byl přeskakován původním nepodmíněným skokem.
Patch pro návěští skoků obsahuje kód, který se stará o stav sledovacích bodů včetně návěští a adres společně s aktuálním stavem povoleno/zakázáno sledovacího bodu. Je to trochu hackoidní zneužívání preprocesoru a assembleru, ale podle Jasona Barona, který patch navrhl, je výsledkem průměrné zlepšení o 30 cyklů na sledovací bod na x86_64 systémech, které jsem testoval.
Návěští skoků odstraňují současný test a skok, který se provádí pro každý sledovací bod, protože dokáže dynamicky vypínat a zapínat kód sledovacího bodu. Přidání NOPu a nepodmíněného skoku přidává oproti vynechanému skoku 2-4 cykly, říká Jason, což je pro tento druh sledování poměrně levné.
Obě tyto techniky pravděpodobně budou potřebovat „trochu povařit“, než budou připraveny pro hlavní řadu. Návěští skoků jsou poměrně mladý návrh a spoléhají se na vlastnost překladače, který ještě nebyl vydán, což je bude brzdit. Reakce na oba návrhy byly nicméně vcelku pozitivní, což naznačuje obecný souhlas s jejich cíli. Omezení režie sledování a ladění je něco, s čím bude nesouhlasit jenom málokdo.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
používání DECLARE_* a DEFINE_* bychom nás- to bychom je tam navíc. Jinak díky za překlad.