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.
Aktuální předverze je (k 5. 12. 2007) 2.6.24-rc4, vydaná 3. prosince. Linus Torvalds k tomu řekl, že velikost patche je trochu skličující - začleněno totiž bylo docela dost změn. Jsou to skoro všechno opravy, ale přibylo i počítání využití procesoru skupinami procesů. Vizte krátký changelog nebo podrobnosti v dlouhém.
Od vydání -rc4 se do hlavního repozitáře dostalo téměř 100 dalších patchů.
Aktuální verze -mm stromu je 2.6.24-rc4-mm1. Mezi nedávné změny patří poslední verze API timerfd, nový paměťový řadič a reimplementovaný ovladač ramdisku.
Člověk by musel čekat s otevřenou pusou hodně dlouho, než by mu do ní přiletěl pečený holub.
-- James Morris
Chceš-li zjistit, co je potřeba, můžeš si představit jednoduchý uživatelský příklad - třeba systém, který tě ochrání před díly Erica S. Raymonda. Nahraď matematickou analýzu a heuristiku nástrojem pro uživatelské prostředí, který vyhledá různé texty od ESR, a pak to navrhni pro něj, jestli ti to udělá radost.
SELinux asi zvládne všechnu tu špinavou práci sám, protože umí označit soubor jako eric_t a omezit k němu další přístup.
-- Alan Cox
Rozptýlené soubory vypadají, že jsou větší než objem úložného prostoru, který je pro ně ve skutečnosti alokován. Běžný způsob vytvoření takových souborů je přesunout interní ukazatel pozice v souboru za jeho konec a pak tam zapsat nějaká data; unixové systémy tradičně nealokují diskové bloky pro část souboru za původním koncem, který byl přeskočen. Výsledkem je "díra", neboli kus souboru, který logicky existuje, ale není nijak reprezentován na disku. Operace čtení na takové díře uspěje, ale vrácená data budou nuly. Průměrně chytré komprimační a archivační utility díry v souborech rozpoznají; tyto díry nejsou ve výsledných archívech uloženy a při obnovení souboru z archívu nebudou zaplněny.
Postup rozpoznávání děr je poměrně primitivní: v podstatě jediný způsob, jak to udělat přenositelně, je hledat bloky zaplněné nulami. Ta technika sice funguje, ale vyžaduje procházení dat, aby se získaly informace, které už nižší úrovně systému znají. Zdá se, že by měl existovat šikovnější způsob.
Přibližně před dvěma lety navrhli vývojáři Solarisu a ZFS rozšíření lseek(), které by aplikacím umožnilo hledat díry v rozptýlených souborech efektivněji. Toto rozšíření přidává dvě nové možnosti "odkud":
Tato funkčnost už je nějakou chvíli součástí Solarisu; vývojáři Solarisu by však chtěli, aby se rozšířila i jinde a stalo se z ní něco více než jen rozšíření Solarisu. Josef Bacík proto nedávno navrhl implementaci tohoto rozšíření pro Linux. Z interního hlediska přidává nového člena do struktury file_operations (seek_hole_data()), který by měl souborovým systémům umožnit novou operaci efektivně implementovat.
Dalo by se namítnout, že pokud někdo chce oddělit v souboru díry od dat, může to už udělat pomocí ioctl() příkazu FIBMAP. To je sice pravda, ale FIBMAP není efektivní způsob, jak získávat tento druh informací - zvláště ne na souborových systémech, které podporují extenty. Volání FIBMAP vrátí mapovací informace o jediném bloku; mapování velkého souboru by si mohlo vyžádat miliony volání, a přitom už by souborový systém měl (opět) vědět, jak takové informace poskytnout mnohem přímočařejším způsobem.
Přesto to však vypadá, že se tento patch do jádra nedostane. API není moc oblíbené, protože je považováno za ošklivé, a navíc mění sémantiku volání lseek(). Ale především by mohlo být zajímavé se dozvědět o reprezentaci souboru více než jen to, kde jsou díry. A ukazuje se, že už byl navržen ioctl() příkaz, který umí všechny tyto informace poskytnout. Jde o rozhraní FIEMAP, které v říjnu specifikoval Andreas Dilger.
Volání FIEMAP bere jako parametr následující strukturu:
struct fiemap { __u64 fm_start; /* logický offset počátečního bajtu */ __u64 fm_length; /* logická délka mapy (dovnitř/ven) */ __u32 fm_flags; /* FIEMAP_FLAG_* příznaky pro žádost (dovnitř/ven) */ __u32 fm_extent_count; /* počet extentů v fm_extents (dovnitř/ven) */ __u64 fm_end_offset; /* konec mapování v posl. ioctl */ struct fiemap_extent fm_extents[0]; };
Aplikace, která se chce něco dozvědět o tom, jak je soubor uložen, nastaví počáteční offset v fm_start a délku oblasti, o kterou se jedná, v fm_length. Obsahuje-li fm_flags FIEMAP_FLAG_NUM_EXTENTS, systémové volání prostě nastaví fm_extent_count na počet extentů použitých na uložení specifikovaného rozsahu bajtů a ukončí se. V této podobě může být FIEMAP použit k určení, jak moc je soubor na disku fragmentovaný.
Pokud chce aplikace více informací, alokuje se dost místa pro ještě jednu strukturu fm_extents:
struct fiemap_extent { __u64 fe_offset; /* offset počátku extentu v bajtech */ __u64 fe_length; /* délka extentu v bajtech */ __u32 fe_flags; /* vrácené příznaky FIEMAP_EXTENT_* extentu */ __u32 fe_lun; /* logické číslo zařízení extentu (začínající 0)*/ };
V tomto případě by fm_extent_count mělo být nastaveno na počet těchto struktur, než bude zavoláno FIEMAP. Po ukončení budou tyto struktury (tolik, kolik udává vrácená hodnota fm_extent_count) vyplněny informacemi o vlastních extentech souboru; fe_offset říká, kde (na disku) extent začíná, a fe_length je velikost extentu. V poli fe_flags se může objevit hned několik hodnot:
Jak je vidět, toto nové volání poskytuje opravdu bohaté informace, včetně údajů o tom, jak je soubor na disku rozdělen, alokačních strategiích, a dokonce i rozhodnutích hierarchických ukládacích enginů. Implementace už existuje pro souborový systém ext4. Kód zatím nebyl navržen k začlenění do hlavního jádra, ale bylo by překvapivé, kdyby k tomu co nevidět nedošlo. Až to přijde, bude moci knihovna C implementovat SEEK_HOLE a SEEK_DATA v uživatelském prostoru, pokud o to bude zájem.
Koncept síťových kanálů poprvé přednesl Van Jacobson téměř před dvěma lety na konferenci linux.conf.au 2006. Tato myšlenka slibuje zlepšení výkonu síťování přesunutím zpracovávání síťových dat co nejblíže koncovému bodu - nejlépe až do uživatelského prostoru. Kanálová schémata chtějí jádro vyšoupnout ze zpracovávání paketů a udržet to na jediném místě (na stejném procesoru). Díky tomu by se měly minimalizovat nepodařené pokusy o využití keše [cache misses], přepínání kontextů a další aktivity, které zhoršují výkon. Kanály však v reálném světě tvrdě narazily; když se začnou brát v potaz potřeby jako filtrování paketů, překlady adres a tak podobně, začne být těžké zachovat jednoduchost, na které výkon kanálů závisí. Takže o dva roky později stále neexistuje implementace kanálů, která by měla aspoň šanci na začlenění do hlavního jádra.
To však neznamená, že by se v té oblasti nic nedělo. Evgenij Poljakov [Evgeniy Polyakov], hacker, který se nikdy nenechá odradit (vizte rozhraní kevent), dále vyvíjí patche se svou implementací kanálů; 22. verze vyšla 4. prosince.
Tato verze patche má dobře definovanou interní strukturu, která jadernému kódu umožňuje se na kanály napojit [hook]. Nejlépe vyvinutý režim je však ten, který pouze přenáší pakety z a do uživatelského prostředí. K tomu účelu přibylo nové systémové volání:
int netchannel_control(struct unetchannel_control *ctl);
Kompletní obsah struktury unetchannel_control najdete v patchi. Ta důležitější pole jsou:
Jakmile je kanál vytvořen, přidá se do vyhledávacího stromu, který je orientován na bleskově rychlé hledání. V kódu pro příjem paketů je nový háček [hook], který v tom stromu vyhledává každý příchozí paket; pakety, které tam nejsou nalezeny, jsou normálně zpracovány jaderným síťovým stackem. Ale všechny pakety, jejichž adresy, porty a protokol jsou ve stromu objeveny, jsou odkloněny na kód kanálů, ještě než se vůbec dostanou do fronty síťového stacku.
Posledním kouskem (na přijímací straně) je jednoduchá implementace read(). Proces, který si přeje přijmout paket ze síťového kanálu, musí pouze přečíst příslušný popisovač souboru a další dostupný paket bude nakopírován do poskytnutého bufferu. Bylo by samozřejmě fajn se zbavit toho kopírování, ale to není vůbec lehké: paket musí být přijat, dříve než je znám jeho cíl. Existují síťové adaptéry, které umějí směrovat pakety podle informací v jejich hlavičce, ale stávající netfilter nemá potřebná vylepšení API pro ovladače, aby mohl tuto možnost využít pro provoz bez kopírování.
Podobné je to s operací write(), která způsobí, že bude příslušný paket nakopírován do jádra a nacpán na poměrně nízké úrovni do síťového stacku. Ani v případě zápisu to zatím nejde bez kopírování.
Evgenij však nad postupem, který by nevyužíval kopírování, zjevně přemýšlí. Pravděpodobně by použil síťový alokátor. I bez toho to však vypadá, že jsou kanály velmi rychlé, když se použijí s jeho síťovým stackem pro uživatelský prostor. Některé představené výsledky benchmarků ukazují výrazné zlepšení oproti běžnému linuxovému síťovému stacku - třikrát více než šířka pásma při použití třetiny výkonu procesoru, když jsou přenášeny malé pakety. U větších paketů (4096 bajtů) výkonnostní zlepšení v podstatě mizí - hlavní příčinou je nejspíše režie způsobená kopírováním paketů z a do jádra.
Zlepšení výkonu u malých paketů je vítané: existuje hodně aplikací, včetně profesionálního finančnictví, které vyžadují velká množství malých přenosů. Přidání podpory provozu bez kopírování by mohlo zlepšit i výkon u velkých paketů. Hlavní zkouška však bude přidání všech funkcí, které současní uživatelé od síťování očekávají - většina zatím v implementaci kanálů chybí. V kódu už jsou háčky určené pro přidání zpracovávání jednotlivých paketů; mohly by být použity pro filtrování, překlady adres, kontrolu provozu nebo kteroukoliv jinou požadovanou funkci. Zbývá zjistit, jestli bude možné tyto háčky využít, aniž by se přišlo o výkonnostní náskok kanálů. Ale Evgenij se asi nevzdá, dokud na to nebude mít odpověď.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej: