Po dvoch mesiacoch vývoja predstavil Linus Torvalds vydanie jadra Linux 6.15. Medzi najvýznamnejšie zmeny patrí mechanizmus auditu v Landlock, režim zafixovania mapovania pamäte, subsystém fwctl, ovládač Nova pre GPU NVIDIA, implementácia hostiteľského systému pre hypervízor Hyper-V, podpora zónovaných úložných zariadení v XFS, optimalizácia sieťového subsystému, scrub-overenie v Bcachefs a možnosť kontroly operácií cez io_uring.
Do novej verzie bolo prijatých 15 945 opráv od 2 154 vývojárov, veľkosť záplaty je 59 MB (zmeny sa dotkli 13 596 súborov, pridalo sa 739 608 riadkov kódu, odstránilo sa 312 168 riadkov). V predchádzajúcom vydaní bolo 12 115 opráv od 1 984 vývojárov, veľkosť záplaty bola 39 MB. Asi 41 % všetkých zmien v 6.15 súvisí s ovládačmi zariadení, približne 16 % zmien má vzťah k aktualizácii kódu špecifického pre hardvérové architektúry, 13 % súvisí so sieťovým zásobníkom, 5 % so súborovými systémami a 4 % s vnútornými subsystémami jadra.
Hlavné novinky v jadre 6.15:
- Diskový subsystém, I/O a súborové systémy
- Do mechanizmu fanotify bola pridaná možnosť sledovať udalosti pripojenia a odpojenia.
- V XFS bola pridaná podpora zónovaných úložných zariadení (delí na zóny skupín blokov alebo sektorov, do ktorých je povolené iba sekvenčné pridávanie údajov s aktualizovaním celej skupiny blokov). Bol pridaný flag rwf_dontcache na vypnutie vyrovnávacej pamäte pri zápise. Implementovaná bola možnosť atomárneho zápisu viacerých blokov údajov naraz.
- V Btrfs bola implementovaná možnosť špecifikovať pri pripojení záporné úrovne kompresie zstd (od -15 do -1, napríklad „compress=zstd:-5“), ktoré zaisťujú vyššiu rýchlosť práce na úkor zníženia efektivity kompresie. Vylepšené bolo vyrovnávanie pamäte súborových ciest (v testovaní sa výkon operácie „send“ zrýchlil o 30 %). Pridaná podpora blokov veľkosti 2 kB.
- V EXT4 sa zvýšila výkonnosť pri prehrávaní žurnálu s veľmi veľkým počtom odvolaných záznamov (zaťaženie charakteristické pre oblasti pod FS Lustre). Realizované bolo lineárne vyhľadávanie záznamov „dentry“ (vnútorné zobrazenie položiek adresárov), ktoré rieši problémy s prístupom k niektorým súborom v režime bez ohľadu na veľkosť písmen. Upravila sa funkcia montovania „errors=remount-ro“. Zvyšuje sa odolnosť pri spracovaní poškodených FS.
- V F2FS bol implementovaný ioctl na získanie informácií o prioritách operácií vstupu/výstupu pre daný súbor. Boli vykonané práce na prechode na využívanie foliantov stránok pamäte (page folios).
- V Bcachefs bol pridaný režim „scrub“, v ktorom sa kontroluje správnosť čítania všetkých údajov a metadát z FS. V prípade zistenia chýb sa spustí procedúra obnovy. V Bcachefs bola tiež pridaná podpora pre prácu s FS, kde je veľkosť bloku väčšia ako veľkosť stránky pamäte. Stabilizovaný formát diskových štruktúr Bcachefs (ďalšie zmeny formátu budú realizované vo forme voliteľných doplnkov).
- V EROFS bola pridaná podpora 48-bitovej adresácie blokov.
- V subsystéme FUSE boli implementované sysctl default_request_timeout a max_request_timeout na nastavenie timeoutov pre vykonávanie požiadaviek, čo umožňuje sledovanie zablokovania komponentov FUSE, ktoré pracujú v priestore používateľa. Maximálna veľkosť názvov súborov v FUSE bola zvýšená na 1024 znakov.
- Do systémového volania statmount() bola pridaná možnosť získania informácií o mapovaní identifikátorov používateľov pripojených súborových systémov, ktoré sa používajú na priradenie súborov určitého používateľa na pripojenom cudzom oddiele k inému používateľovi v aktuálnom systéme.
- Uvoľnila sa možnosť vytvoriť bod pripojenia s iným mapovaním identifikátorov používateľov, než má pôvodný pripojený oddiel.
- Do API na správu pripojenia boli vykonané zmeny, ktoré zjednoduchujú zostavovanie zložitých hierarchií súborových systémov bez odhaľovania jednotlivých častí súborových systémov, ktoré je potrebné nechať skryté.
- Do subsystému na prácu s blokovými zariadeniami bola pridaná podpora hardvérových zariadení na ochranu šifrovacích kľúčov.
- Vo súborovom systéme SMB bola implementovaná možnosť is_network_name_deleted a predvolene bol zapnutý režim smb_server_kerberos5.
- Pre FS OverlayFS bola pridaná možnosť montovania „override_creds“, pri ktorej sa na prístup k nižším úrovniam úložiska použijú prihlasovacie údaje volajúceho používateľa, nie používateľa, ktorý vykonal montovanie. Táto zmena umožňuje pri montovaní OverlayFS požadovať používateľa s právomocami CAP_SYS_ADMIN, ale používať FS s prihlasovacími údajmi bez tejto privilégie.
- V exFAT sú operácie mazania súborov urýchlené. Namiesto toho, aby posielal požiadavky na „discard“ individuálne pre každý oslobodený klaster mazaného súboru, ovládač teraz skupinuje požiadavky. V uskutočnenom teste sa čas potrebný na odstránenie súboru s veľkosťou 80 GB skrátil z 286 sekúnd na 1,6 sekundy.
- Všetky pseudo-FS, ako aj FS EXT2, prešli na používanie nového API na montovanie oddielov.
- Kód na podporu súborových systémov SYSV (SystemV/386, Xenix a Coherent) bol odstránený, pretože je od roku 2023 označený ako nepodporovaný (orphaned).
- Pamäť a systémové služby
- Minimálna verzia GCC požadovaná na zostavenie jadra bola zvýšená na 8.1 a Clang na 15.0.0.
- Pridaný subsystém fwctl (Firmware Control), ktorý poskytuje API na bezpečné riadenie firmvérov a vykonávanie spracovateľov v rámci firmvéru z priestoru používateľa. Na základe fwctl sú pripravené ovládače pre zariadenia CXL (Compute Express Link), Ethernet adaptéry Mellanox ConnectX (mlx5) a servisné karty AMD/Pensando.
- Možnosti mechanizmu pidfd boli rozšírené, čo umožňuje používať identifikátory spojené s konkrétnymi procesmi, ktoré nie sú opätovne priraditeľné na rozdiel od pid. Bol poskytnutý spôsob, ako extrahovať údaje o stave ukončenia procesu identifikovaného cez pidfd po tom, čo rodičovský proces dostal potvrdenie o skončení dieťaťa a jeho prostriedky boli uvoľnené (reaped). Do systémových volaní bol pridaný flag PIDFD_SELF, ktorý umožňuje procesu odvolať sa na seba samého.
- Pre architektúru RISC-V bola implementovaná podpora rozšírení BFloat16, Zaamo (atómové operácie s pamäťou), Zalrsc (Load-Reserved/Store-conditional) a ZBKB (bitové operácie pre kryptografiu).
- Pri trasovaní bola zabezpečená možnosť uloženia argumentov volaných funkcií a ich zobrazenie v trasovacích logoch.
- Do systému asynchrónneho vstupu/výstupu io_uring bola pridaná podpora čítania informácií o udalostiach epoll. Použitie io_uring na spracovanie udalostí epoll znižuje počet prepnutí kontextu a umožňuje naraz spracovať niekoľko udalostí epoll.
- V subsystéme eBPF bola zlepšená verifikácia programov s cyklami. Pridané nové inštrukcie „timed_may_goto“, „load-acquire“ a „store-release“. Poskytla sa možnosť zmeny rozšírených atribútov súborov z BPF programov. Pridaná funkcia try_alloc_pages(), určená na prideľovanie pamäte pri vysokej pravdepodobnosti zlyhania operácie (pri spustení BPF programov v obmedzených kontextoch).
Implementovaný nový primitiv blokovania — rqspinlock (Resilient Queued Spin Lock), počas behu identifikujúci situácie vedúce k vzájomnému blokovaniu. Nový primitiv umožňuje načítať BPF programy, pre ktoré verifikátor nezaručoval správnu funkčnosť s blokovaním.
- Výrazne zvýšená spoľahlivosť prideľovania veľkých stránok pamäte (huge-page).
- Výrazne urýchlené výpočty kontrolných súčtov CRC64 na systémoch x86. Medzi iným, na urýchlenie boli využité nové vektorové inštrukcie z architektúry AVX-512. V niektorých situáciách sa výkon zvýšil až 100-krát.
- Pokračuje prenos zmien z vetvy Rust-for-Linux, súvisiacich s použitím jazyka Rust ako druhého jazyka na vývoj ovládačov a modulov jadra (podpora Rust nie je aktivovaná vo predvolenom nastavení a nevedie k zahrnutiu Rustu medzi povinné závislosti na zostavovanie jadra). Poskytla sa možnosť použitia makra „#[kunit_tests()]“ v kóde jadra na spustenie jednotkových testov. Pridaná podpora architektúry ARMv7. Implementované moduly dma a hrtimer s Rust wrappermi pre DMA (pridané Linusom obchádzajúc udržiavateľa, ktorý potom opustil svoje miesto) a vysokopresné časovače. Rozšírené moduly ‚list‘, ‚str‘, ‚sync‘, ‚error‘ a ‚alloc‘. Pridaná podpora novej syntaxe ‘&raw’ (raw_ref_op).
- V subsystéme perf bola implementovaná možnosť profilovania oneskorení, využívajúca informácie od plánovača úloh.
- Pridaný parameter príkazového riadku jadra „traceoff_after_boot“, ktorý vypne sledovanie po tom, čo sa jadro načíta a spustí proces init. Parameter sa môže použiť pri diagnostike problémov súvisiacich so spustením, pričom zaručuje, že akumulované dáta sledovania počas spustenia nebudú prepísané.
- Podpora 32-bitových systémov x86, ktoré majú viac ako 8 CPU a 4 GB RAM, bola ukončená. Toto hardvérové vybavenie sa už dlho nevyrába a systémy vyžadujúce takéto zdroje boli prevedené na 64-bitové CPU.
- Implementácia POSIX časovačov bola upravená tak, aby umožnila nástroju CRIU (Checkpoint/Restore in Userspace) ukladať a obnovovať identifikátory časovačov.
- Virtualizácia a bezpečnosť
- Pridaná bola možnosť používať Linux ako koreňové prostredie (Dom0, root partition) pre hypervízor Hyper-V (Microsoft Hypervisor). Hostiteľské prostredie zodpovedá za správu hypervízora, organizáciu spustenia hostených systémov, prideľovanie zdrojov a zabezpečenie interakcie virtuálních strojů s hardvérom. Správa hypervízora Hyper-V v Linuxe sa vykonáva prostredníctvom zariadenia /dev/mshv.
- Do modulu Landlock, ktorý poskytuje neprivilegovaným programom prostriedky na obmedzenie používania objektov jadra Linux (hierarchia súborov, sieťové sokety, ioctl atď.), bol pridaný mechanizmus auditu. Audit umožňuje detailne hodnotiť príčiny blokovania prístupu, ktoré sa uskutočňujú pri používaní Landlocku, a taktiež poskytuje možnosť pochopiť, kedy a ktorá operácia bola zablokovaná, prečo bola zablokovaná a aké pravidlo sa spustilo.
- Pridaná bola možnosť realizácie v moduloch LSM (Linux Security Modules) spracovateľov, ktorí kontrolujú prístupy k systému asynchrónneho vstupu/výstupu io_uring a umožňujú blokovanie použitia io_uring na obídenie obmedzení prístupu k systémovým volaniam. Takýto spracovateľ bol implementovaný v LSM module SELinux.
- V SELinux bola implementovaná možnosť aplikácie politík na akékoľvek typy dát, ktoré sú načítané jadrom, vrátane obrazov firmvéru, bezpečnostných politík a certifikátov.
- Bol pridaný režim zapečatenia (seal) niektorých operácií mapovania pamäte, vykonávaných jadrom v adresnom priestore procesu. Zapečatenie prevádza mapovanie do režimu iba na čítanie a nedovolí jeho zmenu v prípade využitia zraniteľnosti. Táto potrebnosť sa vzťahuje na mapovanie vDSO, vsyscall, vvar, sigpage a uprobes. Predvolený režim je vypnutý, pretože môže narušiť činnosť niektorých aplikácií. Na jeho povolenie bola pridaná konfiguračná voľba CONFIG_MSEAL_SYSTEM_MAPPINGS.
- Sieťový subsystém
- Pokračuje práca na zbavení sieťového zásobníka globálnej zamykania RTNL (rtnl_lock) a jej transformácii na zámky, ktoré sú viazané na samostatné priestory sieťových mien.
- Pridaná počiatočná funkcia príjmu sieťových paketov cez io_uring s kopírovaním obsahu priamo do pamäte programu v užívateľskom priestore bez medziúložnej pamäte (zero-copy). V testoch sa zmenou podarilo zvládnuť spracovanie prevádzky cez 200 gigabitový kanál s využitím jedného jadra CPU.
- Realizované sysctl tcp_rto_max_ms a možnosť TCP-soketov TCP_RTO_MAX_MS, prostredníctvom ktorých je možné nastaviť maximálny čas medzi pokusmi o opätovné odoslanie paketov.
- Do BPF bola pridaná séria callback volaní na získavanie informácií o čase z rôznych častí sieťového zásobníka, ktoré možno využiť na diagnostiku problémov so sieťovými oneskoreniami.
- Pridané optimalizácie výkonu sieťových operácií:
- Optimalizácia GRO (Generic Receive Offload), ktorá spája niekoľko malých paketov do jedného veľkého, sa teraz využíva pri prepínaní spracovania paketu na iný CPU (na vyváženie záťaže) pri použití subsystému XDP (eXpress Data Path), ktorý umožňuje spracovanie paketov na úrovni sieťového ovládača ešte pred ich odovzdaním sieťovému zásobníku. Nárast výkonu spracovania TCP tokov z aplikácie optimalizácie môže dosiahnuť dvojnásobok.
- V podmienkach silného zaťaženia bola výkonnosť funkcie connect() zvýšená až dvojnásobne vďaka nahradeniu spin-zámku mechanizmom synchronizácie RCU (Read-Copy-Update) pri vyhľadávaní záznamov s informáciami o stranách pripojenia (zdrojové a cieľové IP adresy a porty). Okrem toho bola vykonaná optimalizácia hashovania, ktorá zabezpečila nárast výkonu ešte o 229%.
- Bol urýchlený výkon MPTCP (Multipath TCP), rozšírenia protokolu TCP pre organizáciu doručovania paketov súčasne po niekoľkých trasách prostredníctvom rôznych sieťových rozhraní, viazaných na rôzne IP adresy. MPTCP v režime s jedným tokom bol zrýchlený o 29%.
- V netfilter pri existencii soketu bolo zastavené vykonávanie operácií hľadania trás v FIB (Forwarding Information Base). Vďaka tejto optimalizácii sa výkon zvýšil o 20%.
- Výkon UDP za podmienok flood sa zvýšil o 10 % vylúčením nadbytočných operácií so štruktúrou sk_tsflags pri prijímaní paketov.
- Pridaný ovládač s implementáciou protokolu MCTP-over-USB.
- Zariadenie
- Do jadra bola prijatá počiatočná implementácia ovládača Nova pre GPU NVIDIA, vybavené GSP firmvérmi, ktoré sa používajú od série NVIDIA GeForce RTX 2000 na architektúre Turing. Ovládač je napísaný v jazyku Rust. V prvej fáze bol pridaný len rámec nova-core, ktorý obsahuje približne 400 riadkov kódu a realizuje základnú úroveň abstrakcií nad softvérovými rozhraniami firmvéru GSP. V nasledujúcej fáze plánujú do jadra zahrnúť DRM-ovládač nova-drm (Direct Rendering Manager) na interakciu s GPU z užívateľského priestoru, ako aj VFIO-ovládač s manažérom vGPU, ktorý umožňuje používanie virtuálnych GPU NVIDIA v virtualizačných systémoch.
- Pokračuje sa v práci na drm-ovládači (Direct Rendering Manager) Xe pre GPU na báze architektúry Intel Xe, ktorá sa využíva vo grafických kartách Intel rodiny Arc a integrovaných grafikách od procesorov Tiger Lake. Pridaná podpora SVM (Shared Virtual Memory), súčasti rámca DRM, ktorý spravuje zdieľanú pamäť zdieľanú medzi CPU a GPU.
- Do ovládača i915 boli pridané identifikátory nových GPU.
- V ovládači Nouveau bola prepracovaná GSP RPC a integrované rozhranie drm_slave_encoder.
- V ovládači AMDGPU bola realizovaná podpora architektúry DCN36 (Display Core Next). Pridaná možnosť nastavenia vlastných kriviek jasu, ktoré sa používajú na korekciu jasu obrazovky.
- Do ovládača adreno bola pridaná podpora GPU Qualcomm Adreno 623.
- Pridaná podpora dotykových panelov Apple Touch Bar.
- Pridaná podpora druhej verzie rozšírenia eUSB2 (eUSB2V2 — Embedded USB2 Version 2.0), ktorá umožňuje znížiť napätie napájania (až na 1,2 voltov) a zvýšiť výkon USB 2.0. Rýchlosť prenosu údajov v eUSB2V2 môže dosiahnuť 4,8 Gbit / s, čo je 10-krát rýchlejšie ako bežných 480 Mbit / s typických pre USB 2.0. eUSB2V2 umožní výrobcov notebookov vybaviť svoje zariadenia webkamerami s vyšším rozlíšením, pričom na ich pripojenie aj naďalej použijú zbernicu Embedded USB2.
- Pridaná podpora Ethernet adaptér Intel Killer E5000 (RTL8126).
- Pridaná podpora obrazových panelov Visionox RM692E5, Rockchip w552793dba-v10, kingdisplay-kd110n11-51ie a starry-2082109qfh040022-50e.
- Pridaný ovládač pre notebooky Samsung Galaxy Book.
- Pridaná podpora zvukových systémov Presonus Studio 1824c, Jabra Evolve 65. Pridaná podpora DSP modulov AMD ACP 7.x, AWINC WM88166, Everest ES8388, Intel AVS PEAKVOL a GAIN. Zlepšená podpora zvuku na notebookoch ASUS, HP a Lenovo.
- Pridaná podpora ARM platforiem, SoC a zariadení: Arm Morello, AMD (Xilinx) Versal NET, Google Pixel Pro 6, NetCube Kumquat, MYIR Remi Pi, Huawei Matebook E Go, Milk-V Jupiter ST STM32MP2, Mediatek MT8370, Apple T2, Skov (i.MX8MP), EVK (i.MX95), Rockchip RK35xx, Allwinner A523, 11 platforiem Toradex založených na i.MX6.
Zároveň latinskoamerický Fond voľného softvéru vytvoril variant úplne slobodného jadra 6.15 — Linux-libre 6.15-gnu, vyčisteného od prvkov firmvéru a ovládačov, obsahujúcich neslobodné komponenty alebo časti kódu, ktorých oblasť použitia je obmedzená výrobcom. V vydaní 6.15 bola neutralizovaná načítanie blobov v ovládačoch nova, Qualcomm iris v4l2, Airoha NPU, Tehuti Networks TN40xx 10G ethernet, Realtek 8814A wifi, Apple Silicon SoC touchscreen, Renesas UFS a aw88166 audio. Napríklad bola ukončená čistenie ovládača Spider 1Gb ethernet, ktorý bol odstránený z jadra. Odstránené odkazy na tivozované binárne súbory. Realizovala sa blokácia načítania blobov z kódu napísaného v jazyku Rust.
Zdroj: opennet.ru
