Po dvoch mesiacoch vývoja predstavil Linus Torvalds vydanie jadra Linux 7.0. Medzi najvýraznejšími zmenami sú: pravidlá pre používanie AI asistentov, zaradenie Rustu medzi hlavné funkcie jadra, zvýšenie výkonu stránkovania, predvolená aktivácia režimu PREEMPT_LAZY, podpora filtrov pre operácie io_uring, nový súborový systém Nullfs, infraštruktúra fserror, monitoring XFS, podpora pre premapovanie v Btrfs, predvolené zapnutie verzie NFS 4.1, integrácia post-kvantového kryptografického algoritmu ML-DSA, aktivácia AccECN v sieťovej subsystéme, a počiatočná podpora WiFi 8.
Číslo 7.0 bolo priradené, pretože v vetve 6.x sa nahromadilo dostatočné množstvo vydaní na zmenu prvého čísla vo verzii (v čase vydania 6.0 bolo vytvorené po 5.19). Zmena číslovania sa vykonáva z estetických dôvodov a je formálnym krokom, ktorý odstraňuje nepohodlie spôsobené hromadením veľkého počtu vydaní v sérii.
Do novej verzie bolo implementovaných 15624 opráv od 2477 vývojárov, veľkosť záplaty je 56 MB (zmeny sa dotkli 18053 súborov, bolo pridaných 704060 riadkov kódu, a odstránených 278132 riadkov). V predchádzajúcom vydaní bolo 15657 opráv od 2237 vývojárov, veľkosť záplaty bola 52 MB. Približne 51% všetkých zmien v 7.0 súviselo s ovládačmi zariadení, asi 11% zmien sa týkalo aktualizácie kódu špecifického pre hardvérové architektúry, 14% súviselo so sieťovým zásobníkom, 5% s súborovými systémami a 3% s vnútornými subsystémami jadra.
Hlavné novinky v jadre 7.0 (1, 2, 3):
- Diskový subsystém, I/O a súborové systémy
- Realizovaná bola infraštruktúra fserror a pridané API na získavanie informácií o chybách vstupu/výstupu a poškodení metadát pri práci so súbormi. Navrhovaná infraštruktúra unifikuje v súborových systémoch prenášanie údajov o chybách do používateľského priestoru prostredníctvom mechanizmu fsnotify.
- V XFS boli pridané nové funkcie na monitorovanie stavu súborového systému z používateľského priestoru. Bola navrhnutá ioctl operácia XFS_IOC_HEALTH_MONITOR, ktorá vracia súborový deskriptor, prostredníctvom ktorého je možné získať informácie o zlyhaniach súvisiacich s poškodením metadát alebo vzniknutím chýb pri vstupe/výstupe, ako aj sledovať zmeny stavov FS, ako je odmontovanie a vypnutie. Ďalej bol navrhnutý riadený cez systemd na pozadí proces xfs_healer, ktorý spracováva udalosti o stave FS z používateľského priestoru a v prípade potreby automaticky spustí procesy obnovy.
- Do súborového systému Btrfs bola pridaná experimentálna podpora pre štruktúru "strom premapovania" (remap tree), ktorá môže v budúcnosti slúžiť ako medzivrstva pri vykonávaní operácií vstupu-výstupu. Podstata pridanej funkcie spočíva v tom, že po presunutí dát na úložisku sa namiesto aktualizácie všetkých súvisiacich štruktúr v dodatočnej štruktúre "remap tree" uchovávajú staré a nové adresy dát, čím sa pri prístupe k dátam adresy vymieňajú. Nový prístup je prezentovaný ako spoľahlivejší a flexibilnejší, a tiež zjednodušuje ďalšie rozšírenie funkcionality Btrfs.
- V Btrfs bola implementovaná podpora priameho vstupu/výstupu v prípadoch, keď veľkosť bloku presahuje veľkosť pamäťovej stránky v systéme.
- Súčasťou systému je nová súborová systém "Nullfs", ktorú je možné použiť ako zásterku pre koreňový FS. Súborový systém Nullfs je vždy prázdny, neobsahuje žiadne dáta a nepodporuje zmeny. Účelom Nullfs je použitie ako počiatočný FS na zjednodušenie procesu spustenia systému — nad Nullfs sa následne pripájajú ďalšie FS a používa sa systémový volanie pivot_root() na prepnutie koreňového FS namiesto vymazania obsahu initramfs a použitia s ním spojeného koreňového FS.
- Bola implementovaná aktualizácia informácií o čase modifikácie súborov v neblokujúcom režime. Predtým volanie file_update_time_flags() s flagom IOCB_NOWAIT vracalo chybu "-EAGAIN", čo bránilo využívaniu priamych zápisových operácií v neblokujúcom režime.
- Vo súborových systémoch bola zaradená podpora notifikačných zámkov (lease) ako samostatne zapínaných možností. Predvolene takýto mechanizmus teraz nie je aktivovaný kvôli problémom so súborovými systémami, ktoré neboli prvotne navrhnuté pre jeho použitie. Napríklad, tento mechanizmus nepodporujú súborové systémy 9p a cephfs.
- V súborovom systéme EROFS (Extendable Read-Only File System), určenom na použitie na oddieloch dostupných v režime iba na čítanie, je predvolene použitý algoritmus LZMA na kompresiu. Voliteľne sú k dispozícii algoritmy DEFLATE a Zstandard, ktoré už nie sú označené ako experimentálne. Bola implementovaná zdieľanie záznamov v stránkovom keši (page-cache) pre identické súbory v samostatných FS EROFS.
- Režim laptop_mode, ktorý šetrí energiu tým, že oneskoruje a spája operácie zápisu na pevný disk s cieľom predĺžiť čas, počas ktorého je disk v spánkovom režime, a znížiť počet prebudení, bol odstránený. Tento režim sa stal zastaraným, pretože v moderných mobilných zariadeniach sú pevné disky nahradené SSD.
- Súborový systém F2FS bol prevedený na používanie veľkých stránkových foliantov (large folios).
- Obnova práce na ovládači ntfs3, ktorý vyvíja spoločnosť Paragon Software, bola obnovená. Pridaná podpora operácií s súbormi na základe iomap, implementované možnosti llseek SEEK_DATA/SEEK_HOLE, pridaný režim delalloc pre oneskorené pridelenie blokov. Medzitým, na zozname korešpondencie vývojárov jadra bola vo februári schválená integrácia novej implementácie NTFS — ntfsplus, vyvinutej na nahradenie ntfs3, do jednej z budúcich verzií jadra.
- Pri výrobe je predvolene zahrnutá verzia protokolu NFS 4.1 (CONFIG_NFS_V4_1). Zabezpečené zamknutie exportu cez NFS špecializovaných pseudo-FS, ako sú pidfs a nsfs. V NFSD bola implementovaná experimentálna funkcia používania POSIX ACL a pridaná podpora dynamickej zmeny poolu vlákien (thread-pool) v závislosti od zaťaženia.
- Pamäť a systémové služby
- Boli schválené oficiálne pravidlá na používanie AI asistentov a integráciu automaticky generovaného obsahu do jadra. Pri prenose generovaného kódu je predpísané označiť ho podľa použitého AI asistenta prostredníctvom tagu "Assisted-by". AI asistentom je zakázané pridávať tag "Signed-off-by" — osoba, ktorá poslala patch, sa považuje za jeho autora, nesie zodpovednosť za predloženú zmenu a zaručuje jej kvalitu. Vývojárom sa odporúča vykonávať ručné posúdenie kódu získaného prostredníctvom AI a overiť súlad výsledku s licenčnými požiadavkami.
- Podpora Rust bola presunutá z experimentálnych do hlavných funkcií jadra. Podpora Rust nie je predvolene aktivovaná a nevedie k zahrnutiu Rustu medzi povinné závislosti pri zostavovaní jadra.
- Dokončila sa integrácia do jadra mechanizmu „Swap Table“, ktorý umožňuje zvýšiť výkon swapovania. Zrýchlenie sa dosahuje znížením konkurencie o prístup do cache pamäte, efektívnejším vyhľadávaním v cache a znížením fragmentácie. Backend na báze Swap Table je využívaný na cacheovanie swapovania namiesto backendu XArray a umožnil v teste redis-benchmark s BGSAVE zvýšiť počet spracovaných požiadaviek o 22 %.
- Pridaná podpora novinky v Clang 22, rozšírenia Thread Safety Analysis, ktoré umožňuje na úrovni kompilácie identifikovať potenciálne race conditions a chyby spôsobené nesprávnym nastavením zámkov. Rozšírenie ponúka radu atribútov, ako GUARDED_BY(…), REQUIRES(…), RELEASE(…) a ACQUIRE(…), ktoré slúžia na označenie funkcií pokrytých zámkami a na rozdelenie rozsahu zámkov (definovanie kontextu). V priebehu kompilácie sa vykonáva kontrola správnosti aplikácie synchronizačných primitív, ako sú mutexy, na základe hodnotenia aktivity alebo neaktivity súvisiaceho kontextu.
- Do systémového volania open_tree bol pridaný flag OPEN_TREE_NAMESPACE na zjednodušenie konfigurácie izolovaných kontajnerov a urýchlenie spúšťania kontajnerov na systémoch s veľkým počtom montážnych bodov. Podobne ako OPEN_TREE_CLONE nový flag kopíruje iba určené montážne strom (mount tree), ale namiesto lokálneho súborového deskriptoru vracia súborový deskriptor v novom priestore názvov montážnych bodov, v ktorom je skopírovaný strom namontovaný nad kópiou skutočného koreňového FS. Flag OPEN_TREE_NAMESPACE je žiadaný na odstránenie oddeleného vykonávania operácií unshare(CLONE_NEWNS) a pivot_root(), ktoré sa používajú pri vytváraní kontajnerov.
- Do systémového volania rseq bol pridaný mechanizmus rozšírenia kvantov času (time slice), ktorý umožňuje získať dodatočný čas CPU na nepretržité vykonávanie kritickej sekcie. Myšlienka je v tom, aby sa predišlo prerušeniu plánovačom úloh kritickej sekcie so zapnutým zámkom, čo vedie k presunu riadenia na iné vlákna využívajúce zdroj, na ktorých zostáva zapnutý zámok. Rozšírenie kvanta času sa uskutočňuje bez dodatočných nákladov, ale aj bez prísnych garancí, ktoré poskytuje plné riadenie priorít.
- Pre architektúrach arm64, loongarch, powerpc, riscv, s390 a x86 sa spôsob vytesnenia úloh (preemption) v plánovači predvolene zmenil z PREEMPT_NONE na PREEMPT_LAZY. Počet možných režimov bol skrátený zo štyroch na dva — PREEMPT_FULL a PREEMPT_LAZY (režimy PREEMPT_NONE a PREEMPT_VOLUNTARY zostali len pre architektúry, ktoré nepodporujú PREEMPT_FULL a PREEMPT_LAZY). Režim PREEMPT_LAZY uplatňuje model plného vytesnenia (PREEMPT_FULL) na realtime-úlohy (RR/FIFO/DEADLINE), ale vytesnenie bežných úloh (SCHED_NORMAL) oneskoruje až do hranice tiku. Spôsobené oneskorenie vedie k zníženiu prípadov vytesnenia držiteľov zámkov, čo umožňuje priblížiť výkon k konfiguráciám, ktoré používajú model dobrovoľného vytesnenia (voluntary preemption), teda PREEMPT_LAZY umožňuje zachovať schopnosti plného vytesnenia vo vzťahu k realtime-úlohám, ale minimalizuje pokles výkonu pre bežné úlohy.
Zavedenie PREEMPT_LAZY spôsobilo vážnu regresiu, ktorá znížila výkon PostgreSQL na systémoch ARM64 na polovicu. Na odstránenie poklesu výkonu boli vývojárom PostgreSQL navrhnuté možnosti PR_RSEQ_SLICE_EXTENSION na zníženie pravdepodobnosti vytesnenia držiteľa zámku.
- Pokračuje prenos zmien z vetvy Rust-for-Linux, týkajúci sa použitia jazyka Rust ako druhého jazyka pre vývoj ovládačov a modulov jadra. Vďaka predtým integrovanému knižničnému riešeniu „syn“, ktoré zjednodušuje písanie zložitých makier, sa podarilo zmenšiť veľkosť kódu Rust v jadre zjednodušením definícií existujúcich procedurálnych makier. Rozšírili sa možnosti knižníc kernel, macros a pin-init.
- Do systému asynchrónneho vstupu/výstupu io_uring bola pridaná možnosť pre používanie nekruhových frontov (non-circular submission queue), ktoré sú efektívnejšie cache-ovateľné v situáciách, keď sa vykonanie požiadavky dokončí skôr, než sa vráti z systémového volania.
- V subsystéme eBPF sa v mechanizme BTF (BPF Type Format), poskytujúcom informácie na overovanie typov v pseudokóde BPF, na vyhľadávanie ladenia využíva binárne vyhľadávanie, čo zvýšilo efektivitu načítania BPF-programov. V eBPF bola pridaná podpora implicitných argumentov pri volaní kfunc (funkcie jadra dostupné na používanie v programoch BPF), definovaných s vlajkou KF_IMPLICIT_ARGS.
- Kód pre podporu počiatočného RAM disku (initrd) postaveného na linuxrc bol odstránený, bol dlho označovaný za zastaraný. Zostávajúce implementácie initrd plánujú odstrániť v roku 2027. Namiesto initrd by sa mal používať initramfs (rozdiel je v tom, že initrd umiestňuje počiatočné zavádzacie prostredie do diskového obrazu, zatiaľ čo initramfs do súborového systému).
- V blokovom zariadení zram, používanom na komprimované uchovávanie oddielu pre swapovú pamäť v pamäti, bola zmenená logika práce so skompresovanými stránkami pamäte pri voliteľnom presune údajov do trvalého úložiska v prípade zaplnenia dostupnej operačnej pamäte. Predtým sa stránky pamäte rozbalili pred zápisom na fyzické médium, ale teraz sa uchovávajú také, aké sú, v komprimovanej forme, čo znižuje záťaž na CPU a šetrí energiu pri autonómnej prevádzke.
- Do nástroja timerlat, určeného na meranie latencií pri práci plánovača úloh, bola pridaná voľba „—bpf-action“ na spustenie BPF programov v prípade prekročenia nastavenej prahovej hodnoty.
- Do systému sledovania ftrace bola pridaná možnosť „bitmask-list“ na zobrazenie bitových masiek v čitateľnej podobe (vo forme zoznamu bitov, nie v hexadecimálnom čísle). Do tracefs boli pridané funkcie na audit filtrov a spúšťačov. Bola pridaná príkazová funkcia „perf sched stats“ na zber a zobrazenie štatistiky o práci plánovača úloh.
- Boli pridané možnosti zostavenia LOGO_LINUX_MONO_FILE, LOGO_LINUX_VGA16_FILE a LOGO_LINUX_CLUT224_FILE na určenie súboru s obrázkom loga, ktorý sa bude zobrazovať pri zavádzaní jadra namiesto štandardného loga s tučniakom Tux.
- Virtualizácia a bezpečnosť
- V systéme asynchrónneho vstupu/výstupu io_uring bola implementovaná možnosť pripojenia BPF programov s filtrami, ktoré kontrolujú, čo môžu robiť konkrétne SQE (Submission Queue Entry) operácie (podobné systémovým volaniam v io_uring). Pridaná funkcia je analógom filtrov systémových volaní. Filtrovanie môže byť viazané na konkrétne úlohy a dedí sa pri vytváraní ďalších procesov po zavolaní fork(). Pri aktívnych filtroch môžu pridané filtre len priradiť dodatočné obmedzenia, nie však vypnúť existujúce. Implementovaná funkcia umožní blokovať metódy obchádzania filtrov systémových volaní v sandboxových prostrediach, ktoré sú založené na vykonávaní operácií podobných systémovým volaniam poskytovaným v io_uring.
- V SELinux bola pridaná možnosť správy prístupu k BPF tokenom, čo umožňuje neprivilegovaným procesom vykonávať niektoré privilegované operácie s BPF, ako napríklad načítanie BPF programov do jadra a vytváranie map-štruktúr.
- Bola pridaná podpora algoritmu na generovanie digitálnych podpisov ML-DSA (CRYSTALS-Dilithium), ktorý je založený na teórii mriežok a je odolný voči útokom na kvantových počítačoch. Umožňuje použitie ML-DSA na autentifikáciu jadrových modulov.
- Bola odstránená možnosť používať schémy na generovanie digitálnych podpisov s algoritmom SHA-1 na overovanie jadrových modulov (podpora načítania podpísaných modulov bola zachovaná).
- Do záznamu auditu NETFILTER_PKT boli pridané polia ‘sport’ a ‘dport’ na inspekciu čísel sieťových portov, a nie len IP adresy.
- Pre systémy s architektúrou RISC-V bola implementovaná podpora rozšírení Zicfiss a Zicfilp, ktoré poskytujú hardvérové možnosti na aplikovanie ochrany CFI (Control Flow Integrity), blokujúcej porušenia normálneho poradia vykonávania inštrukcií (control flow) v dôsledku využitia exploitov, ktoré menia v pamäti uložené ukazovatele na funkcie.
- V hypervizoru KVM bola implementovaná možnosť prenášať do hosťovacích systémov informácie o podpore rozšírenia procesora ERAPS (Enhanced Return Address Predictor Security), ktoré umožňuje obísť niektoré operácie resetovania stavu CPU pri opätovnom prevzatí kontroly hostiteľom hosťovacím systémom. Okrem toho bola pridaná podpora priradenia hardvéru k hosťovacím systémom na sledovanie výkonu (PMU, Performance Monitoring Unit), čo zvyšuje presnosť profilovania v porovnaní s používaním emulovaných PMU.
- Do ovládača pre hypervízor Hyper-V bola pridaná podpora rozhrania debugfs na zobrazenie štatistiky o fungovaní hypervízora.
- Sieťový subsystém
- Predvolene je aktivované rozšírenie AccECN (Presné explicitné oznámenie o preťažení), ktoré implementuje vylepšenú verziu rozšírenia ECN, umožňujúce hostiteľom v prípade preťaženia označovať IP pakety namiesto ich odmietania. To umožňuje identifikovať vznik počiatočnej fázy preťaženia v komunikačných kanáloch bez straty paketov. Pôvodné rozšírenie ECN má obmedzenie, ktoré povoľuje zaslať iba jeden signál o preťažení v rámci jedného cyklu prenosu TCP (RTT, čas na obidve strany, odoslanie požiadavky a prijatie odpovede). AccECN toto obmedzenie odstraňuje a umožňuje prijímateľovi posielať odosielateľovi viac ako jednu správu o preťažení v hlavičke TCP paketu. Algoritmy správy preťaženia môžu využívať získané informácie na presnejšiu reakciu na preťaženia a nemusia sa uchýliť k náhlemu zníženiu intenzity odosielania paketov pri vzniku mierneho preťaženia.
- Do implementácie algoritmu správy sieťových front Cake bola pridaná možnosť spracovania viacerých front pre rozdelenie zaťaženia na niekoľko jadier CPU. Algoritmus CAKE je použitý na znižovanie negatívneho vplyvu medzičinnosti paketov na hrančnom sieťovom zariadení a je zameraný na dosiahnutie maximálnej možnej priepustnosti a minimálnej úrovne latencie aj na pomalých pripojeniach.
- Do socketov VSOCK, používaných na interakciu s virtuálnymi strojmi, bola pridaná podpora sieťových menných priestorov (network namespace).
- Bola pridaná počiatočná implementácia budúceho štandardu WiFi 8 (802.11bn, Ultra vysoká spoľahlivosť WiFi).
- Boli pridané optimalizácie, ktoré umožnili zvýšiť výkon spracovania prichádzajúcich UDP paketov o 12 % pri stresovom testovaní v 100-gigabitovej sieti.
- Zariadenie
- V ovládači AMDGPU bola implementovaná podpora IP blokov, používaných v nových GPU AMD, ako sú 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 ovládači Nouveau bolo vylepšené riadenie frekvencie na systémoch Tegra 186+.
- Do ovládača i915 bola pridaná počiatočná podpora displejového IP bloku Xe3p_LPD, ktorý sa používa v procesoroch Intel Nova Lake-P.
- Pokračuje práca na ovládači drm (Direct Rendering Manager) Xe pre GPU založené na architektúre Intel Xe, ktorá sa používa vo grafických kartách Intel rodiny Arc a integrovaných grafikách, počnúc procesormi Tiger Lake. Pridaný režim Multi Queue. Pridané komponenty potrebné na diagnostiku zamŕzania GPU v Mesa. Pridaná podpora mechanizmu MERT na správu prístupu k pamäti GPU.
- Pokračuje integrácia komponentov ovládača Nova pre GPU NVIDIA, vybavené GSP firmvérmi, používanými od série NVIDIA GeForce RTX 2000 na báze mikroarchitektúry Turing. Ovládač je napísaný v jazyku Rust. V novej verzii bola vykonaná príprava na implementáciu podpory GPU na báze mikroarchitektúry Turing a boli vykonané rôzne vnútorné úpravy.
- Pridaná podpora ovládačov a periférnych zariadení s viackanálovým rozhraním SPI (Serial Peripheral Interface), ktoré umožňuje prenášať dáta v niekoľkých paralelných tokoch.
- Pridaný ovládač pre kombinované konektory Type-C, používané na zariadeniach založených na čipoch Apple Silicon, kombinujúcich rozhrania USB3, DP-AltMode a Thunderbolt/USB4.
- Pridaná podpora zvukových subsystémov čipov Tegra238, Minisforum V3 SE, iBasso DC04U, Intel Nova Lake, Nova Lake S a Focusrite Forte.
- Pridaná podpora ARM platforiem, SoC a zariadení: 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.
- Pridaná podpora smartfónov a tabletov: Fairphone Gen 6 (SoC Qualcomm Milos/Snapdragon 7s Gen 3), Pixel 3/3 XL, Microsoft surface pro 11.
Zároveň latinskoamerická Nadácia slobodného softvéru vytvorila variant úplne slobodného jadra 7.0 — Linux-libre 7.0-gnu, vyčisteného od prvkov firmvérov a ovládačov obsahujúcich neslobodné komponenty alebo časti kódu s obmedzeným používaním. V vydaní 7.0 došlo k vyčisteniu ovládača iwlwifi od blobov. Bol aktualizovaný kód vyčistenia v ovládačoch amdgpu, adreno, TI PRUeth, air_en8811h, ath12k, TI VPE, rtw8852b, rt1320, rt5575 SPI, tas2783, Intel catpt. Vykonaná bola čistka mien blobov v dts súboroch (devicetree) pre ARM čipy.
Zdroj: opennet.ru
