Po dvou měsících vývoje Linus Torvalds představil vydání jádra Linux 7.0. Mezi nejvýznamnějšími změnami jsou: pravidla pro používání AI asistentů, zařazení Rustu mezi hlavní funkce jádra, zlepšení výkonu swapování, povolení režimu PREEMPT_LAZY jako výchozí, podpora filtrů pro operace io_uring, nová FS Nullfs, infrastruktura fserror, monitorovací nástroje XFS, podpora remapování v Btrfs, povolení verze NFS 4.1 jako výchozí, integrace postkvantového kryptografického algoritmu ML-DSA, aktivace AccECN v síťovém subsystému a počáteční podpora WiFi 8.
Číslo 7.0 bylo přiděleno, protože v řadě 6.x se nahromadilo dostatek vydání k změně prvního čísla verze (v době jeho vydání bylo 6.0 vytvořeno ihned po 5.19). Změna číslování se provádí z estetických důvodů a je to formální krok, který odstraňuje nepříjemnosti způsobené hromaděním velkého počtu vydání v sérii.
Do nové verze bylo zahrnuto 15624 oprav od 2477 vývojářů, velikost patche je 56 MB (změny se dotkly 18053 souborů, přidáno 704060 řádků kódu, odstraněno 278132 řádků). V předchozím vydání bylo 15657 opravy od 2237 vývojářů, velikost patche byla 52 MB. Přibližně 51 % všech změn v 7.0 se týká ovladačů zařízení, asi 11 % změn se vztahuje na aktualizaci kódu specifického pro hardwarové architektury, 14 % souvisí se síťovým stackem, 5 % s filesystémy a 3 % s vnitřními subsystémy jádra.
Hlavní novinky v jádru 7.0 (1, 2, 3):
- Diskový subsystém, vstup/výstup a souborové systémy
- Byla zavedena infrastruktura fserror a přidáno API pro získávání informací o chybách vstupu/výstupu a poškození metadat při práci se soubory. Navrhovaná infrastruktura unifikuje přenos údajů o chybách v souborových systémech do uživatelského prostoru prostřednictvím mechanismu fsnotify.
- Do XFS byly přidány nové možnosti pro monitoring stavu souborového systému z prostoru uživatele. Byla navržena ioctl operace XFS_IOC_HEALTH_MONITOR, která vrací souborový deskriptor, přes který lze získávat informace o selháních souvisejících s poškozením metadat nebo výskytem chyb při vstupu/výstupu, a sledovat změny stavů FS, jako je odpojení a ukončení činnosti. Dále byl navržen spravovaný prostřednictvím systemd na pozadí běžící proces xfs_healer, který zpracovává události stavu FS z prostoru uživatele a v případě potřeby automaticky spouští obnovovací procedury.
- Do souborového systému Btrfs byla přidána experimentální podpora pro strukturu „strom remapování“ (remap tree), která v budoucnu může být použita jako mezivrstvu při provádění operací vstupu a výstupu. Podstatou přidané funkce je to, že po přesunutí dat na úložišti se místo aktualizace všech struktur souvisejících s těmito daty ve sloučené struktuře „remap tree“ uchovávají staré a nové adresy dat, což umožňuje při přístupu k datům tyto adresy zaměnit. Nový přístup se prezentuje jako spolehlivější a flexibilnější, a také zjednodušuje další rozšíření funkcionality Btrfs.
- V Btrfs byla zavedena podpora přímého vstupu/výstupu v situacích, kdy velikost bloku přesahuje velikost paměťové stránky v systému.
- Součástí je nový souborový systém „Nullfs“, který lze použít jako záložku pro kořenový FS. Souborový systém Nullfs je vždy prázdný, neobsahuje data a nepodporuje změny. Účelem Nullfs je použití jako počáteční FS pro zjednodušení procesu spouštění systému — přes Nullfs se pak montují jiné FS a používá se systémový hovor pivot_root() pro přepnutí kořenového FS místo vyčištění obsahu initramfs a použití s ním spojeného kořenového FS.
- Byla implementována aktualizace informací o čase modifikace souborů v neblokujícím režimu. Dříve volání file_update_time_flags() s flagem IOCB_NOWAIT vracelo chybu „-EAGAIN“, což neumožnilo používat operace přímého zápisu v neblokujícím režimu.
- Ve souborových systémech byla do kategorie volitelných možností zahrnuta podpora notifikačních zámků (lease). Tento mechanismus není ve výchozím nastavení aktivován kvůli problémům se souborovými systémy, které nebyly původně navrženy pro jeho použití. Například ho nepodporují souborové systémy 9p a cephfs.
- Ve souborovém systému EROFS (Extendable Read-Only File System), který je určen pro použití na oddílech dostupných pouze pro čtení, je pro kompresi ve výchozím nastavení použit algoritmus LZMA. K dispozici jsou také algoritmy DEFLATE a Zstandard, které již nejsou označeny jako experimentální. Bylo implementováno sdílení záznamů v stránkovém cache (page-cache) pro identické soubory v jednotlivých souborových systémech EROFS.
- Byl odstraněn režim laptop_mode, který šetřil energii tím, že odkládal a sloučil operace zápisu na pevný disk s cílem prodloužit dobu, po kterou disk zůstává v režimu spánku, a snížit počet probuzení. Režim ztratil relevanci, protože v moderních mobilních zařízeních jsou pevné disky nahrazeny SSD.
- Souborový systém F2FS přešel na používání velkých svazků stránek paměti (large folios).
- Byla obnovena práce na ovladači ntfs3, vyvíjeném firmou Paragon Software. Byla přidána podpora operací se soubory založená na iomap, implementovány možnosti llseek SEEK_DATA/SEEK_HOLE a přidán režim delalloc pro odložené alokace bloků. Mezitím byl v únoru na seznamu pro vývojáře jádra schválen návrh na zařazení nové implementace NTFS — ntfsplus, navržené jako náhrada za ntfs3, do jedné z budoucích verzí jádra.
- Ve výchozím nastavení je při sestavení zahrnuta verze protokolu NFS 4.1 (CONFIG_NFS_V4_1). Bylo zajištěno exportní zámkování prostřednictvím NFS specializovaných pseudo-File Systemů, jako jsou pidfs a nsfs. V NFSD byla implementována experimentální možnost využití POSIX ACL a přidána podpora dynamické změny poolu vláken (thread-pool) podle zátěže.
- Paměť a systémové služby
- Byly schváleny oficiální pravidla pro využívání AI asistentů a zařazení automaticky generovaného obsahu do jádra. Při předávání generovaného kódu je předepsáno označovat jej uvedením používaného AI asistenta prostřednictvím tagu „Assisted-by“. AI asistentům je zakázáno přidávat tag „Signed-off-by“ — člověk, který předal patch, se považuje za jeho autora, nese odpovědnost za předanou změnu a ručí za její kvalitu. Vývojářům je předepsáno provádět manuální recenze kódu získaného prostřednictvím AI a kontrolovat shodu výsledku s licenčními požadavky.
- Podpora Rust byla převedena z experimentálních funkcí na základní funkce jádra. Podpora Rust není aktivní ve výchozím nastavení a nevede k zahrnutí Rustu mezi povinné buildovací závislosti jádra.
- Byla dokončena integrace mechanismu „Swap Table“ do jádra, který umožňuje zvýšit výkon swapování. Zrychlení je dosaženo díky snížení konkurence pro přístup k swapovacímu cache, efektivnějšímu vyhledávání v cache a snížení fragmentace. Backend založený na Swap Table je využíván pro cacheování swapu místo backendu XArray a umožnil během testu redis-benchmark s BGSAVE zvýšit počet zpracovávaných požadavků o 22%.
- Byla přidána podpora rozšíření Thread Safety Analysis, které se objevilo ve verzi Clang 22 a umožňuje při kompilaci odhalit potenciální stavy závodu a chyby způsobené nesprávným nastavením zámků. Rozšíření nabízí řadu atributů, jako jsou GUARDED_BY(…), REQUIRES(…), RELEASE(…) a ACQUIRE(…), které umožňují označit funkce chráněné zámky a oddělit oblasti platnosti zámků (definovat kontext). Během kompilace se provádí kontrola správnosti aplikace synchronizačních primitiv, jako jsou mutexy, na základě hodnocení aktivity nebo neaktivity souvisejícího kontextu.
- Do systémového volání open_tree byl přidán flag OPEN_TREE_NAMESPACE, který usnadňuje konfiguraci izolovaných kontejnerů a zrychluje spuštění kontejnerů na systémech s velkým počtem připojení. Podobně jako OPEN_TREE_CLONE nový flag kopíruje pouze specifikovaný strom připojení (mount tree), ale místo lokálního souborového deskriptoru vrací souborový deskriptor v novém prostoru názvů připojení, ve kterém je zkopírovaný strom namontován na vrcholu kopie skutečného kořenového FS. Flag OPEN_TREE_NAMESPACE je potřebný pro opuštění odděleného provádění operací unshare(CLONE_NEWNS) a pivot_root(), které se používají při vytváření kontejnerů.
- Do systémového volání rseq byl přidán mechanismus pro rozšíření kvantů času (time slice), který umožňuje získat další procesorový čas pro nepřerušovaný chod kritické sekce. Myšlenka spočívá v tom, aby se zabránilo přerušení plánovačem úloh v kritické sekci s nastavenou uzamčením, což vede k předání řízení jiným vláknům, která využívají zdroje, na kterých zůstává nastavena uzamčení. Rozšíření kvanta času se provádí bez dodatečných nákladů, ale ani bez přísných záruk, které jsou poskytovány při plném regulování priorit.
- Pro architektury arm64, loongarch, powerpc, riscv, s390 a x86 byl v plánovači režim preemce (preemption) ve výchozím nastavení změněn z PREEMPT_NONE na PREEMPT_LAZY. Počet možných režimů byl snížen ze čtyř na dva — PREEMPT_FULL a PREEMPT_LAZY (režimy PREEMPT_NONE a PREEMPT_VOLUNTARY byly ponechány pouze pro architektury, které nepodporují PREEMPT_FULL a PREEMPT_LAZY). Režim PREEMPT_LAZY aplikuje model plného přerušení (PREEMPT_FULL) pro realtime úlohy (RR/FIFO/DEADLINE), ale zpožďuje přerušení běžných úloh (SCHED_NORMAL) až do hranice tik. Zpoždění vede ke snížení případů přerušení držitelů uzamčení, což umožňuje přiblížit výkon k konfiguracím používajícím model dobrovolného přerušení (voluntary preemption), tj. PREEMPT_LAZY umožňuje zachovat možnosti plného přerušení v souvislosti s realtime úlohami, ale minimalizuje pokles výkonu pro běžné úlohy.
Povolení PREEMPT_LAZY vedlo k vážné regresi, která snižuje výkon PostgreSQL na systémech ARM64 na polovinu. Aby se zmírnil pokles výkonu, bylo vývojářům PostgreSQL navrženo využít možnost PR_RSEQ_SLICE_EXTENSION, aby se snížila pravděpodobnost vyhození držitele zámku.
- Pokračuje přenos změn z větve Rust-for-Linux, souvisejících s využíváním jazyka Rust jako druhého jazyka pro vývoj ovladačů a modulů jádra. Díky předtím integrované knihovně „syn“, která usnadňuje psaní složitých maker, se podařilo zmenšit velikost Rust kódu v jádře díky zjednodušení definic stávajících procedurálních maker. Byly rozšířeny možnosti knihoven kernel, macros a pin-init.
- Do systému asynchronního vstupu/výstupu io_uring byla přidána možnost pro použití nekruhových front (non-circular submission queue), které jsou efektivněji kešovány v situacích, kdy je provádění požadavku dokončeno dříve než návrat ze systémového volání.
- V subsystému eBPF byla v mechanismu BTF (BPF Type Format), který poskytuje informace pro ověřování typů v pseudokódu BPF, pro vyhledávání ladících informací použit binární vyhledávání, což zlepšilo efektivitu načítání BPF programů. Podpora implicitních argumentů při volání kfunc (funkce jádra dostupné pro používání v programech BPF), definovaných s flagem KF_IMPLICIT_ARGS, byla přidána do eBPF.
- Byl odstraněn kód pro podporu počátečního RAM disku (initrd) založeného na linuxrc, který byl již dlouho prohlášen za zastaralý. Zbývající implementace initrd plánují odstranit v roce 2027. Místo initrd by mělo být použito initramfs (rozdíl je v tom, že initrd umisťuje počáteční zaváděcí prostředí do diskového obrazu, zatímco initramfs do souborového systému).
- V blokovém zařízení zram, které se používá pro kompresní uložení úložného oddílu v paměti, byla změněna logika práce se zkomprimovanými stránkami paměti při volitelném přesunu dat do trvalého úložiště v případě zaplnění dostupné operační paměti. Dříve byly stránky paměti dekomprimovány před zápisem na fyzické médium, nyní se ukládají tak, jak jsou, ve zkomprimované podobě, což snižuje zátěž CPU a šetří energii při provozu na baterie.
- Do nástroje timerlat, určeného pro měření latencí při práci plánovače úloh, byla přidána možnost „—bpf-action“ pro spouštění BPF programů v případě překročení stanoveného prahu.
- Do systému sledování ftrace byla přidána konfigurace „bitmask-list“ pro výstup bitových masek ve čitelné podobě (ve formě seznamu bitů, nikoli hexadecimálního čísla). Do tracefs byly přidány funkce pro audit filtrů a spouštěčů. Byla přidána příkaz „perf sched stats“ pro shromažďování a zobrazování statistik o činnosti plánovače úloh.
- Byly přidány sestavovací možnosti LOGO_LINUX_MONO_FILE, LOGO_LINUX_VGA16_FILE a LOGO_LINUX_CLUT224_FILE pro určení souboru s obrázkem loga, které se zobrazí při spuštění jádra, namísto standardního loga s tučňákem Tux.
- Virtualizace a bezpečnost
- V systému asynchronního vstupu/výstupu io_uring byla implementována možnost připojení BPF programů s filtry, které kontrolují, co mohou konkrétní SQE (Submission Queue Entry) operace dělat (podobné systémovým voláním v io_uring). Přidaná možnost je analogií filtrům systémových volání. Filtry lze přidělovat konkrétním úlohám a dědí se při vytváření dalších procesů po zavolání fork(). Při aktivních filtrech mohou přidané filtry pouze připojit dodatečná omezení, ale ne deaktivovat stávající. Implementovaná funkce umožní blokovat metody obcházení filtrů systémových volání v sandboxových prostředích, které jsou založeny na provádění obdobných operací namísto systémových volání, nabídnutých v io_uring.
- V SELinux byla přidána možnost správy přístupu k tokenům BPF, které umožňují neprivilegovaným procesům vykonávat některé privilegované operace s BPF, například načítat BPF programy do jádra a vytvářet map struktury.
- Byla přidána podpora algoritmu pro tvorbu digitálních podpisů ML-DSA (CRYSTALS-Dilithium), založeného na teorii mřížek a odolného vůči útokům na kvantových počítačích. Byla poskytnuta možnost použití ML-DSA pro autentizaci jaderných modulů.
- Byla odstraněna možnost použití schématu pro tvorbu digitálních podpisů s algoritmem SHA-1 pro ověřování jaderných modulů (podpora načítání podepsaných modulů zůstává).
- Do záznamu auditu NETFILTER_PKT byla přidána pole ‘sport’ a ‘dport’ pro inspekci čísel síťových portů, nikoli jen. IP adress.
- Pro systémy s architekturou RISC-V byla implementována podpora rozšíření Zicfiss a Zicfilp, která poskytuje hardwarové možnosti pro aplikaci ochrany CFI (Control Flow Integrity), blokující narušení normálního pořadí vykonávání instrukcí (control flow) v důsledku využití exploitů, které mění uložené v paměti ukazatele na funkce.
- V hypervizoru KVM byla implementována možnost přenosu do hostitelských systémů informace o podpoře rozšíření ERAPS (Enhanced Return Address Predictor Security) procesorem, které umožňuje obejít některé operace obnovení stavu CPU při návratu řízení hostitelskému systému. Kromě toho byla přidána podpora přiřazení hardware pro sledování výkonu (PMU, Performance Monitoring Unit) k hostitelským systémům, což zvyšuje přesnost profilování ve srovnání s využitím emulovaných PMU.
- Do ovladače hypervizoru Hyper-V byla přidána podpora debugfs rozhraní pro prohlížení statistik o pracovní aktivitě hypervizoru.
- Síťová subsystém
- Bylo ve výchozím nastavení aktivováno rozšíření AccECN (Accurate Explicit Congestion Notification), které implementuje vylepšenou variantu rozšíření ECN, umožňující hostitelům v případě přetížení označovat IP pakety místo jejich odmítnutí, což dává možnost určit vznik počáteční fáze zácpy v komunikačních kanálech bez ztráty paketů. Původní rozšíření ECN má omezení, které dovoluje vystavit pouze jeden signál o přetížení v rámci jednoho cyklu přenosu TCP (RTT, Round-Trip Time, odeslání požadavku a přijetí odpovědi). AccECN toto omezení odstraňuje a umožňuje přijímači posílat odesílateli více než jednu značku o přetížení v hlavičce TCP paketu. Algoritmy pro řízení přetížení mohou využít získané informace pro přesnější reakci na přetížení a vyhnout se náhlému snížení intenzity odesílání paketů při vzniku drobného přetížení.
- Do implementace algoritmu řízení síťových front Cake byla přidána možnost zpracování několika front pro rozdělení zátěže mezi více jádry CPU. Algoritmus CAKE se používá ke snížení negativního dopadu dočasného vyrovnávání paketů na hranicích síťových zařízení a je zaměřen na dosažení maximální možné propustnosti a minimální úrovně latencí, i na pomalých komunikačních kanálech.
- Do soketů VSOCK, používaných pro interakci s virtuálními stroji, byla přidána podpora síťových prostorů jmen (network namespace).
- Byla přidána počáteční implementace budoucího standardu WiFi 8 (802.11bn, Ultra High Reliability WiFi).
- Byly přidány optimalizace, které zvýšily výkon zpracování příchozích UDP paketů o 12 % během zatěžkávacího testování v 100gigabitové síti.
- Hardware
- V ovladači AMDGPU byla implementována podpora IP bloků používaných v nových GPU AMD, jako jsou SMUIO 15.x, PSP 15.x, IH 6.1.1/7.1, MMHUB 3.4/4.2, GC 11.5.4/12.1, SDMA 6.1.4/7.1/7.11.4 a JPEG 5.3.
- V ovladači Nouveau bylo zlepšeno řízení frekvence na systémech Tegra 186+.
- Do ovladače i915 byla přidána počáteční podpora displejového IP bloku Xe3p_LPD, který se používá v procesorech Intel Nova Lake-P.
- Byla pokračována práce na drm ovladači (Direct Rendering Manager) Xe pro GPU založené na architektuře Intel Xe, která se používá ve grafikách Intel rodiny Arc a integrované grafice, počínaje procesory Tiger Lake. Byl přidán režim Multi Queue. Byly přidány komponenty nezbytné pro diagnostiku zamrzání GPU v Mesa. Byla přidána podpora mechanismu MERT pro řízení přístupu k paměti GPU.
- Byla pokračována integrace komponent ovladače Nova pro GPU NVIDIA vybavené GSP firmwarem, používaným od série NVIDIA GeForce RTX 2000 založené na mikroarchitektuře Turing. Ovladač je napsán v programovacím jazyce Rust. V nové verzi byla provedena příprava na implementaci podpory GPU založených na mikroarchitektuře Turing a byly provedeny různé vnitřní změny.
- Byla přidána podpora řadičů a periferních zařízení s vícakanálovým rozhraním SPI (Serial Peripheral Interface), které umožňuje přenášet data v několika paralelních tocích.
- Byl přidán ovladač pro kombinované konektory Type-C, používané na zařízeních s čipy Apple Silicon, které kombinují rozhraní USB3, DP-AltMode a Thunderbolt/USB4.
- Byla přidána podpora zvukových subsystémů čipů Tegra238, Minisforum V3 SE, iBasso DC04U, Intel Nova Lake, Nova Lake S a Focusrite Forte.
- Byla přidána podpora ARM platforem, SoC a zařízení: Arduino UnoQ, OrangePi 6 Plus, OrangePi CM5, Anbernic RG-DS, Realtek Kent, Qualcomm Kaanapali, Mediatek Ezurio, Facebook Anacapa, Microchip LAN9668, Khadas VIM1S, QNAP TS133, i.MX952, i.MX93, i.MX94, VHIP4 EvalBoard, TQ-Systems MBLS1028A, Agilex5, Radxa CM3J, Glymur,
- Byla přidána podpora chytrých telefonů a tabletů: Fairphone Gen 6 (SoC Qualcomm Milos/Snapdragon 7s Gen 3), Pixel 3/3 xl, Microsoft Surface Pro 11.
Mezitím latinskoamerická Nadace svobodného softwaru vytvořila variantu plně svobodného jádra 7.0 — Linux-libre 7.0-gnu, očištěného od prvků firmwaru a ovladačů obsahujících nesvobodné komponenty nebo části kódu, jejichž používání je omezeno výrobcem. V verzi 7.0 byla provedena čistka od blobů ovladače iwlwifi. Byly aktualizovány čisticí kódy v ovladačích amdgpu, adreno, TI PRUeth, air_en8811h, ath12k, TI VPE, rtw8852b, rt1320, rt5575 SPI, tas2783, Intel catpt. Byla provedena čistka názvů blobů v dts souborech (devicetree) pro ARM čipy.
Zdroj: opennet.ru
