Po dvoch mesiacoch vývoja predstavil Linus Torvalds vydanie jadra Linux 6.11. Medzi najvýraznejšími zmenami sú: podpora atomických zápisových operácií na blokovej úrovni, podpora operácií bind() a listen() v io_uring, nový mechanizmus zámkov programových spracovateľov prerušenia, možnosť zápisu do zrkadlených v pamäti vykonávaných súborov, podpora písania ovládačov blokových zariadení v jazyku Rust, optimalizácia volania getrandom(), nová implementácia AES-GCM.
V novej verzii bolo vykonaných 15130 opráv od 2078 vývojárov, veľkosť patchu je 85 MB (zmeny sa dotkli 13282 súborov, pridalo sa 985857 riadkov kódu, odstránilo sa 268915 riadkov). V predchádzajúcej verzii bolo 14564 opráv od 1989 vývojárov, veľkosť patchu je 41 MB (dvakrát menšia ako patch pre jadro 6.11). Približne 46% všetkých zmien v 6.11 sa týka ovládačov zariadení, asi 17% zmien súvisí s aktualizáciou kódu špecifického pre hardvérové architektúry, 10% má spojenie 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 6.11:
- Diskový subsystém, I/O a súborové systémy
- Implementovaná podpora atomických zápisových operácií na blokovej úrovni, pri ktorých je na úložisko zapísaný buď celý určený súbor blokov, alebo žiadny z blokov, čo chráni pred situáciami, keď po zlyhaní hardvéru je zapísaná iba časť blokov a v inej časti zostáva stará informácia. Pre aktiváciu atomického režimu zápisu do systémového volania pwritev() bol pridaný flag RWF_ATOMIC. Informácie o podpore atomického zápisu (atomic_write_unit_min, atomic_write_unit_max a atomic_write_segments_max) v súvislosti s jednotlivými súbormi je možné získať pomocou funkcie statx().
- Poskytla sa podpora zápisu do vykonávaných súborov spojených s bežiacimi procesmi. Predtým, ako v iných unixových systémoch, jadro uvedlo chybu pri pokuse o zápis do vykonávacieho súboru bežiaceho procesu. Toto obmedzenie bolo odstránené, pretože nemá praktický zmysel.
- Implementovala sa možnosť vývoja ovládačov blokových zariadení v jazyku Rust. Ako príklad bol do jadra pridaný ovládač rnull, ktorý predstavuje ekvivalent ovládača null_blk, napísaný v jazyku Rust.
- V súborovom systéme Btrfs je v montovacej možnosti „rescue=“ implementovaná podpora nových režimov „ignoremetacsums“ a „ignoresuperflags“, ktoré je možné využiť na presun niektorých kontrol do používateľského priestoru pri obnove FS po zlyhaní. Implementácia operácie dynamického vrátenia blokových skupín bola prepracovaná na vylúčenie situácie nedostatku voľného miesta pri neúplnom vyplnení FS.
- V súborovom systéme ntfs3 bola implementovaná podpora atribútov „compressed“ a „immutable“, ktoré určujú komprimované a nemenné súbory.
- V FS F2FS a Ext4 je spracovanie názvov súborov bez ohľadu na veľkosť písmen (casefold) zjednodušené uchovávaním názvov v podobe qstr-reťazcov bez nadbytočných konverzií veľkosti písmen.
- V FS Ext4 je implementácia funkcie jbd2_transaction_committed optimalizovaná na zvýšenie výkonu na veľmi rýchlych úložiskách (v testoch bol zaznamenaný nárast spracovávaných operácií za sekundu, ktorý dosahuje 20%).
- V systémovom volaní statx() je povolené odovzdávanie ukazovateľa NULL namiesto prázdneho reťazca so súborovou cestou, ak je nastavená vlajka AT_EMPTY_PATH.
- V systémovom volaní open_by_handle_at() boli zmiernené kontroly prístupových práv k súboru, ak chýbajú oprávnenia CAP_DAC_READ_SEARCH na vyhľadávanie v počiatočnom mennom priestore. Predtým potreba mať oprávnenia CAP_DAC_READ_SEARCH na počiatočný menný priestor neumožnila používať systémové volanie open_by_handle_at() v kontajneroch.
- Rozšírené možnosti systémových volaní listmount() a statmount(). Do listmount() bol pridaný flag LISTMOUNT_REVERSE na zobrazenie obsahu tabuľky bodov montovania v opačnom poradí (najnovšie záznamy na vrchu). V statmount() bol implementovaný výstup možností nastavených pri montovaní FS. V oboch systémových volaniach je povolená práca bez prístupu k počiatočnému mennému priestoru (keď je prístup len k lokálnemu alebo vonkajšiemu mennému priestoru).
- V FS Bcachefs bola implementovaná podpora automatického priehľadného obnovenia problémových dát, využívajúc kódy na obnovu chýb — ak pri čítaní nastane chyba vstupu/výstupu alebo sa zistí nezrovnalosť kontrolného súčtu, problémový blok dát sa automaticky prepíše pri prítomnosti redundancie na jeho obnovenie.
- Pamäť a systémové služby
- Do implementovaných patchov bol zahrnutý nový mechanizmus blokovania softvérových spracovateľov prerušenia (BH, bottom-half), ktorý zabezpečuje blokovanie používaných dátových štruktúr, ale neblokuje paralelné vykonávanie s nimi nesúvisiaceho kódu. Zmienka sa robí o tom, že táto zmena umožnila nielen znížiť latenciu pre jadrá pracujúce v reálnom čase, ale aj zvýšiť výkon bežných jadier (napríklad pre niektoré typy záťaže sa pozoruje zlepšenie výkonu sieťového subsystému o 14,5%).
- Do subsystému asynchrónneho vstupu/výstupu io_uring bola pridaná podpora operácií na implementáciu funkcií bind() a listen(), ktoré sa používajú na vytváranie prijímajúcich spojení sieťových soketov.
- Bol pridaný súbor ioctl operácií pre pseudo-FS NSFS (NameSpace FS), ktorý sa používa na prácu s priestormi mien. Nové ioctl umožňujú prevádzať identifikátory procesov a skupín vlákien medzi rôznymi priestormi mien identifikátorov procesov (PID namespace). Podobné ioctl, ktoré umožňujú na základe pidfd identifikátorov určovať súborové deskriptorové procesy v samostatných priestoroch mien, boli taktiež pridané do pseudo-FS pidfd.
- Pre BPF programy bola pridaná podpora nového iterátora na prácu s bitovými maskami, ktorý sa dá použiť napríklad na prechádzanie jednotlivými bitmi v oblastiach pamäte, ako sú cpumask. Bol pridaný mechanizmus na zasielanie procesom v užívateľskom priestore upozornení o odpojení (detach/unregister) objektu struct_ops. Rozšírená bola škála typov, ktoré je možné použiť v poliach (napríklad je možné deklarovať polia, ktoré majú prvky s typmi kptr, bpf_rb_root a bpf_list_head). Navrhnutý je spoľahlivejší mechanizmus Split BTF (BPF Type Format), ktorý sa používa na kontrolu typov v pseudokóde BPF.
- Bol pridaný subsystém, ktorý umožňuje organizovať napájanie zariadení v určenom poradí, v prípade, že jedno zariadenie musí byť aktivované skôr ako iné (napríklad pri aktivácii bezdrôtových čipov na platformách Qualcomm).
- Bol pridaný modul „Sloppy logic analyzer“, ktorý umožňuje vytvárať jednoduché logické analyzátory signálov, ktoré používajú GPIO a fungujú na samostatnom jadre CPU.
- Pridaná podpora runtime konštánt, ktoré môžu byť použité namiesto raz inicializovaných premenných. Napríklad, runtime konštanty môžu byť aplikované namiesto premenných, ktoré udržujú ukazovateľ a veľkosť pre cache dentry. Tieto premenné sa nastavujú počas načítania a potom sa nikdy nemenia. Myšlienkou je priamo vložiť hodnoty takýchto premenných do inštrukcií v kóde, čím sa eliminujú náklady spojené s manipuláciou ukazovateľov.
- Pokračoval prenos zmien z vetvy Rust-for-Linux, týkajúcich sa použitia jazyka Rust ako druhého jazyka na vývoj ovládačov a modulov jadra (podpora Rust nie je aktívna predvolene a nevedie k zahrnutiu Rust medzi povinné zostavovacie závislosti jadra). Pridaná podpora vydania Rust 1.80 (ako minimálna verzia sa naďalej podporuje Rust 1.78). Okrem predtým zmienených nástrojov na vývoj ovládačov blokových zariadení, v novej verzii boli pridané abstrakcie pre načítanie firmvérov, prístup k používateľskému priestoru (uaccess) a prácu so štruktúrou „page“.
- Pre systémy x86-64 bol implementovaný nový systémový volanie uretprobe(), optimalizujúci prácu mechanizmu sledovania uretprobe, ktorý umožňuje sledovať hodnoty, ktoré vracajú funkcie v aplikáciách používateľského priestoru.
- Pridané parametre príkazového riadku jadra: „reserve_mem“ na rezerváciu pomenovanej oblasti pamäte počas spúšťania a „ramoops.mem_name“ na použitie v pstore oblasti pamäte, vytvorenej cez reserve_mem.
- Do pamäťového kontroléra založeného na cgroup bol do súboru memory.reclaim, ktorý určuje nastavenia vyprázdnenia pamäte, pridaný parameter „swappiness“, ktorý umožňuje zmeniť rovnováhu medzi vyprázdňovaním anonymných strán pamäte do swapu a uvoľňovaním strán pamäte obsadených pre súborový cache.
- Bol pridaný ioctl-interface PROCMAP_QUERY pre efektívnejšie vyhľadávanie virtuálnych oblastí pamäte (Virtual Memory Area) v /proc/PID/maps.
- Do systémového volania mmap() bol pridaný flag MAP_DROPPABLE na požiadanie o pamäť, ktorá nikdy nebude vyprázdnená do swapu, a v prípade nedostatku pamäte môže byť odstránená.
- Pre architektúru ARM64 bola implementovaná podpora horúceho pripojenia (prechodu do režimov online/offline) fyzických a virtuálnych CPU na systémoch s ACPI.
- Pre architektúru RISC-V sa zabezpečila podpora horúceho pripojenia pamäte a pridala sa podpora GCC pluginu STACKLEAK (vykonáva inicializáciu všetkých premenných uložených na zásobníku, aby sa zabránilo úniku informácií z jadra prostredníctvom neinicializovaných premenných, ktoré môžu obsahovať zvyšky predtým uložených dát na zásobníku).
- Mechanizmus falošného mapovania pamäte EFI (fake EFI memory map) bol odstránený počas zavádzania. Tento mechanizmus sa v praxi nepoužíval a prekážal vývojom v oblasti dôverného vykonávania. virtuálních strojů.
- Podpora platformy PowerPC 40x bola ukončená.
- Zvýšili sa požiadavky na verziu GNU Make — na zostavenie jadra je potrebné aspoň vydanie GNU Make zverejnené v roku 2013.
- Virtualizácia a bezpečnosť
- Integrované záplaty, ktoré výrazne (až 15-krát) urýchľujú získavanie náhodných čísel prostredníctvom systémového volania getrandom(). Optimalizácia je založená na použití mechanizmu vDSO (virtual dynamic shared object), ktorý umožňuje presunúť spracovateľ systémového volania z jadra do používateľského priestoru a vyhnúť sa prepínaniam kontextu. Načítanie implementácie systémového volania do adresného priestoru procesu priamo jadrom.
- Pre systémy x86-64 bola zahrnutá nová implementácia šifrovacieho algoritmu AES-GCM, ktorá podporuje využívanie vektorových inštrukcií VAES, VPCLMULQDQ a AVX512/AVX10 na urýchlenie výpočtov. V vykonaných testoch nárast výkonu po prechode na novú implementáciu dosahuje 156%. Assemblerová implementácia AES-GCM bola kompletne prepísaná s ohľadom na správnosť, výkonnosť, veľkosť a vyčerpávajúce dokumentovanie kódu.
- Bola implementovaná možnosť spúšťania jadra ako hostiteľského systému vo virtualizovaných prostrediach, ktoré využívajú procesorové rozšírenie AMD SEV-SNP (Secure Nested Paging), určené na zabezpečenie bezpečnej práce s vnorenými tabuľkami stránok pamäte. Na dodatočnú izoláciu prístupu k zdrojom z virtuálnych strojov môže byť použitý modul SVSM (Linux Secure VM Service Module). KVM Do hypervízora bola pridaná počiatočná podpora spúšťania hostiteľských systémov chránených pomocou AMD SEV-SNP.
- Pridaný samostatný správcovský alokátor slabých blokov (bucket slab allocator), aktivovaný cez parameter CONFIG_SLAB_BUCKETS, ktorý zabezpečuje ochranu pred útokmi s použitím techniky „heap spraying“.
- V hypervízore KVM bol pridaný ioctl-výzva na predbežné prideľovanie pamäte hostiteľskému systému pred jeho skutočným spustením.
- Sieťový subsystém
- Pridaný sysctl parameter net.tcp_rto_min_us, ktorý umožňuje nastaviť minimálny časový limit opätovného prenosu (retransmission timeout) pre TCP zásuvky.
- Do nástroja ethtool bola pridaná možnosť jemnej konfigurácie spracovania prerušení pre sieťové rozhrania používajúce rozhranie Net DIM.
- Zariadenie
- V ovládači AMDGPU bola zahrnutá počiatočná podpora GPU AMD RDNA4 ("GFX12"). Pridaná podpora technológií DCN 4.0.x, GC 12.0, GMC 12.0, SDMA 7.0, MES12 a MMHUB 4.1.
- Pokračuje práca na drm ovládači (Direct Rendering Manager) Xe pre GPU na báze architektúry Intel Xe, ktorá sa používa vo grafických kartách Intel rodiny Arc a v integrovaných gráfoch od procesorov Tiger Lake. Zlepšená podpora GPU na báze mikroarchitektúr Battlemage, Arrow Lake a Lunar Lake.
- V subsystéme DRM (Direct Rendering Manager) bol prepísaný spracovateľ nastavení monitoru EDID (Extended Display Identification Data).
- V ovládači i915 bola pridaná podpora GPU Battlemage Xe2 a bol zapnutý predvoľbový režim CMRR (Content Match Refresh Rate).
- V DRM ovládači msm (GPU Qualcomm Adreno) bola pridaná podpora pre platformu SM7150 a GPU X185 a a505.
- Pridaná podpora pre obrazovky panelov Lincoln Tech Sol LCD185-101CT, Microtips Technology 13-101HIEBCAF0-C, Microtips Technology MF-103HIEB0GA0, BOE nv110wum-l60, IVO t109nw41, WL-355608-A8, PrimeView PM070WL4, Lincoln Technologies LCD197, Ortustech COM35H3P70ULC, AUO G104STN01, K&d kd101ne3-40ti.
- V zvukovom subsystéme bola pridaná podpora čipov a kodekov Intel Panther Lake, Asahi Kasei AK4619, Cirrus Logic CS530x, Everest Semiconductors ES8311, NXP i.MX95, LPC32xx, Qualcomm LPASS v2.5, WCD937x, Realtek RT1318, RT1320 a Texas Instruments PCM5242.
- Bola zrealizovaná posledná fáza zmien, zabezpečujúcich podporu ARM SoC Snapdragon X Elite, v ktorom sa nachádza vlastný 12-jadrový CPU Qualcomm Oryon a GPU Qualcomm Adreno. Čip je určený na použitie v prenosných počítačoch a PC a prekonáva vo viacerých testoch výkonnosti čipy Apple M3 a Intel Core Ultra 155H. Pridané zmeny v jadre 6.11 sa týkajú podpory GPU Adreno X1-85 a manažmentu spotreby energie. Pre zariadenia založené na SoC Snapdragon X Elite je oznámená podpora prenosných počítačov ASUS Vivobook S15 a Lenovo Yoga Slim7x.
Súčasne latinskoamerický Fond slobodného softvéru vytvoril variantu úplne slobodného jadra 6.11 — Linux-libre 6.10-gnu, vyčisteného od prvkov firmvéru a ovládačov, ktoré obsahujú neslobodné komponenty alebo časti kódu, ktorých použitie je obmedzené výrobcom. V vydaní 6.11 bol aktualizovaný kód čistenia blobov v ovládačoch mdgpu, adreno, vgxy61, atomisp, btnxpuart, prueth a tas2781. Bola vykonaná čistka nových ovládačov amdgpu isp, tn40, rtl8192du, cs40l50, rt1320 a pcie-rcar-gen4. Dokončené bolo čistenie názvov blobov v dts-súboroch (devicetree) pre architektúru Aarch64. Pridaná je verzia primitívov pre načítanie firmvéru, ktorá nevydáva varovania a požiadavky (nowait-nowarn). Pridaný bol kód na určovanie primitívov načítania firmvéru v kóde napísanom v jazyku Rust.
Zdroj: opennet.ru
