Po dvoch mesiacoch vývoja predstavil Linus Torvalds vydanie jadra Linux 6.18. Medzi najvýraznejšími zmenami sú: dm-pcache pre diskové cache v nepoužiteľnej pamäti (PMEM), odstránenie Bcachefs, online režim kontroly XFS, ovládače Binder (Android IPC) a Tyr (GPU Mali) na Rust, možnosť vytvárať USB ovládače na Rust, optimalizácia cache v alokátore pamäte SLUB, adresovanie priestorov mien cez súborové popisovače, zrýchlenie swapovania, verifikácia BPF programov pomocou digitálneho podpisu, virtualizácia Intel CET v KVM, sieťový protokol PSP (hybrid TLS a IPsec), podpora IP rozšírenia AccECN, optimalizácia UDP stacku.
Do novej verzie bolo prijatých 15035 opráv od 2217 vývojárov, veľkosť patchu je 45 MB (zmiany sa dotkli 13142 súborov, bolo pridaných 601897 riadkov kódu, odstránených 355006 riadkov). V minulom vydaní bolo 14334 opráv od 2118 vývojárov, veľkosť patchu bola 46 MB. Asi 40% všetkých zmien v 6.18 sa týka ovládačov zariadení, približne 16% zmien súvisí s aktualizáciou kódu špecifického pre hardvérové architektúry, 12% súvisí so sieťovým stackom, 5% s súborovými systémami a 3% s internými subsystémami jadra.
Hlavné novinky v jadre 6.18 (1, 2, 3):
- Diskový subsystém, I/O a súborové systémy
- V Device Mapper bol pridaný spracovateľ dm-pcache pre používanie trvalej pamäte (CXL pamäť, adresovateľná cez DAX zariadenie) ako dodatočná vysokovýkonná cache pred pomalšími tradičnými diskovými alebo flash pamäťami. Dm-pcache zabezpečuje uchovanie obsahu cache v prípade havárie (crash-safe) pomocou nepoužiteľnej pamäte, duplikácie metadát a kontroly integrity dát a metadát pomocou kontrolných súčtov CRC32. V súčasnosti sa podporuje iba cache v režime odloženej zápisu (write-back).
- Z jadra bol odstránený kód súborového systému Bcachefs, ktorý teraz bude distribuovaný vo forme externého modulu kompilovaného pomocou nástrojov DKMS (Dynamic Kernel Module Support). Kód Bcachefs môže byť v budúcnosti vrátený do jadra po tom, čo Kent Overstreet preukáže jeho schopnosť spolupracovať s ostatnými vývojármi jadra a dodržiavať ustálené pravidlá vývoja.
- Do systémového volání pwritev2() byl přidán příznak RWF_NOSIGNAL, který deaktivuje odesílání signálu SIGPIPE při zapisování do roztržených nepojmenovaných kanálů nebo soketů.
- Do Procfs byla přidána možnost připojení „pidns“, která specifikuje prostory názvů identifikátorů procesů (PID namespace). Například: „mount -t proc -o pidns=\/proc\/self\/ns\/pid proc \/tmp\/proc“.
- Ve XFS byla vyhlášena stabilní a ve výchozím nastavení byla aktivována možnost použití utilit fsck pro kontrolu a opravu zjištěných problémů v online režimu, bez odpojení souborového systému. Byla přidána systémová volání file_getattr a file_setattr pro změnu atributů speciálních souborů (jakýchkoli inode). V KConfig byly ve výchozím nastavení deaktivovány možnosti XFS_SUPPORT_V4 (4. verze XFS) a XFS_SUPPORT_ASCII_CI (režim bez ohledu na velikost písmen ASCII), které byly označeny za zastaralé. Byly odstraněny zastaralé možnosti připojení attr2, noattr2, ikeep a noikeep.
- V MD RAID byl implementován nový typ bitmap - llbitmap (lockless bitmap), který funguje bez zámků a zajišťuje vyšší výkon.
- Z obecné struktury „inode“ byla vyňata informace týkající se šifrování a verifikace (ukazatele i_crypt_info a i_verity_info). Tato změna umožňuje snížit spotřebu paměti ve souborových systémech, které nepodporují šifrování a verifikaci.
- Do subsystému FUSE byla přidána podpora systémového volání copy_file_range() a přímého kopírování oblastí s využitím velikosti s 64bitovým typem (dříve byla podporována pouze 32bitová velikost). Byla přidána podpora inicializace v synchronním režimu během připojení (FUSE_DEV_IOC_SYNC_INIT).
- Ve FS ext4 byla realizována možnost použití 32bitových identifikátorů uživatelů (uid) a skupin (gid) při přístupu k rezervovaným blokům. Byly přidány ioctl operace pro nastavení a čtení parametrů superbloku připojených FS (tune2fs bude moci měnit parametry v superbloku bez práva na zápis do blokového zařízení). Byly zcela odstraněny zastaralé nastavení specifická pro ext3.
- Do f2fs bola pridaná možnosť montovania "lookup_mode" na výber režimu vyhľadávania: perf – vyhľadávanie podľa hash, compat – lineárne vyhľadávanie, auto – automatický výber. Zmena režimu má zmysel pre konfigurácie s adresármi, kde sa nezohľadňuje veľkosť písmen. Aktuálny režim vyhľadávania môžete zistiť prostredníctvom súboru "/sys/fs/f2fs//effective_lookup_mode". Pridaná možnosť rezervácie inode, dostupných iba privilegovaným používateľom.
- Do Overlayfs bol pridaný režim prevádzky bez zohľadnenia veľkosti písmen, ktorý sa aktivuje na úrovni vrstiev FS (nastavenie pre jednotlivé adresáre zatiaľ nie je podporované).
- V BTRFS bolo vylepšené paralelizovanie operácií pri vysokej záťaži čítania a nízkej zápisu, znížený čas potvrdenia transakcií, výrazne skrátený čas synchronizácie (z minút na desiatky sekúnd). Poskytnutá možnosť používať bloky (bs) väčšie ako veľkosť pamäťovej stránky (ps).
- Do ksmbd (pracuje na úrovni jadra SMB servera) bola pridaná možnosť na obmedzenie maximálneho počtu pripojení z jedného. IP adresy. smbdirect, smbclient a smbserver boli prechod na používanie typových štruktúr jadra.
- Do SQUASHFS bola pridaná možnosť používania v systémovom volaní lseek() volieb SEEK_DATA a SEEK_HOLE na vyhľadávanie dát a prázdnych miest v riedkych súboroch. V niektorých testoch bolo zaznamenané zvýšenie výkonu kopírovania riedkych súborov až 150-násobne.
- Do EXFAT bola pridaná podpora ioctl FS_IOC_GETFSLABEL a FS_IOC_SETFSLABEL na čítanie a zápis označení oddielov. Poskytnutá možnosť zmeny možností montovania počas pre-montovania. Urýchlené načítanie bitmap.
- Do NTFS3 bola pridaná podpora ioctl FS_IOC_GETFSLABEL a FS_IOC_SETFSLABEL pre čítanie a nastavenie označení oddielov.
- Pamäť a systémové služby
- Do tímu bola akceptovaná implementácia mechanizmu medziprocesovej komunikácie Binder, napísaná v jazyku Rust. Binder sa používa v Androide na organizovanie interakcie medzi procesmi a vzdialené volanie metód (jeden proces Android môže zavolať metódu alebo funkciu v inom procese Android pomocou Bindera na identifikáciu, volanie a prenos argumentov medzi procesmi). Kód Binder bol prepisovaný v jazyku Rust v rámci iniciatívy Google na posilnenie bezpečnosti Androidu.
- V SLUB, alokátore pamäte jadra, je implementovaná voliteľná vrstva caching ‚sheaves', ktorá využíva niekoľko cache, pričom každá je viazaná na samostatné CPU jadro, čo umožňuje lokalizovať operácie do jedného jadra pri pridelení alebo uvoľnení pamäte. Tento typ cache zvýšil výkon pridelenia a uvoľnenia pamäte v jadre tým, že eliminoval nadbytočné synchronizačné primitíva potrebné pri zapojení rôznych CPU jadier. V teste bol nárast výkonu od 6,3 % do 31 % v závislosti od typu záťaže.
- Pridaná možnosť vytvárania súborových deskriptorov, ktoré sú identifikované s konkrétnym priestorom mien (namespace). Na rozdiel od prístupu k priestorom mien cez identifikátory (\/proc\/\/ns\/), súborový deskriptor je viazaný na konkrétny prípad priestoru mien a zabraňuje situácii, kedy by identifikátor bol opätovne pridelený a ukazoval už na iný objekt. Podobne ako pri použiteľnosti pidfds, otvorenie súborových deskriptorov, ktoré odkazujú na priestory mien, sa realizuje cez funkcie open_by_handle_at() a name_to_handle_at().
- Implementovaný mechanizmus ‚Swap Table‘, ktorý zvyšuje výkon vyrovnávacej pamäte. Zrýchlenie sa dosahuje znížením konkurencie pri prístupe k vyrovnávacej pamäti, efektívnejším vyhľadávaním v cache a znížením fragmentácie. Backend založený na Swap Table je použitý na vyrovnávanie pamäte namiesto backendu XArray a v priemere umožnil zvýšiť výkon o 5-20 %. V teste usemem sa priepustnosť zvýšila o 17-28 %, v teste na viacvláknovú recompiláciu jadra sa čas zostavenia znížil o 1,12-3,19 %, test redis-benchmark s BGSAVE vykázal nárast počtu spracovaných požiadaviek o 6-7 %.
- Subsystem Zswap bol preložený na priame používanie systému pridelenia pamäte zsmalloc namiesto vrstvy zpool, ktorá sa už nikde nepoužíva a teraz bola odstránená z jadra.
- Na riadenie správania sa bootloadera mikrokódu v systémoch x86 bola implementovaná voľba príkazového riadku ‚microcode=zoznam flagov‘. V súčasnej podobe nová voľba nahradila ‚microcode.force_minrev‘ a tiež umožňuje nastaviť minimálne akceptovateľnú verziu mikrokódu na načítanie.
- Začala sa práca na reorganizácii nadmerne nafúknutej štruktúry „page“, ktorá sa používa na správu stránok operačnej pamäte. Pridaný typ ‘memdesc_flags_t’ pre pole s univerzálnymi flagmi, ktoré budú môcť byť použité po očakávanom budúcom выделении zo štruktúry „page“ samostatných štruktúr pre slab a foliánty (folio).
- Pre architektúru nios2, používanú v procesoroch Altera Nios II (soft-procesor na báze FPGA), bola implementovaná podpora systémového volania clone3().
- Do konfigurácie jadra (KConfig) bol pridaný atribút „transitional“, ktorý možno využiť na označenie nastavení, ktoré nie sú zobrazované v používateľských rozhraniach, ako je „make menuconfig“, a nie sú zahrnuté v generovaných konfiguračných súboroch. Hlavným účelom atribútu je zjednodušiť premenovanie možností so zachovaním spätnej kompatibility.
- Minimálna verzia kompilátora Clang, ktorým môže byť vybudované jadro, bola zvýšená na nástroje LLVM 15. V Debian 12 a Ubuntu 22.04 sa dodáva LLVM 14.
- Pokračoval prenos zmien z vetvy Rust-for-Linux, ktoré súvisia s použitím jazyka Rust ako druhého jazyka na vývoj ovládačov a modulov jadra (podpora Rust nie je predvolene aktívna a nevedie k zaradeniu Rust medzi povinné závislosti kompilácie jadra). V novej verzii pre kód v jazyku Rust boli implementované atómové operácie s pamäťou, štruktúra maple tree, možnosť vytvárania súborov DebugFS a funkcie na manipuláciu s bitmapami. Rozšírený prístup k API pre vývoj ovládačov. Pridaný kompletný súbor abstrakcií pre vývoj ovládačov USB zariadení (príklad USB ovládača). Do nástroja perf bola pridaná podpora ladených symbolov generovaných kompilátorom rustc.
- Virtualizácia a bezpečnosť
- Pridaná podpora kryptografickej verifikácie načítavaných BPF programov podľa digitálneho podpisu. V budúcnosti bude táto možnosť rozšírená o prostriedky na určovanie pravidiel načítania podpísaných BPF programov a poskytovanie nepriviligovaným používateľom možnosti používať verifikované BPF programy.
- V hypervízore KVM bola implementovaná podpora virtualizácie rozšírenia Intel CET (Control-flow Enforcement Technology), používaného na ochranu pred exploitmi využívajúcimi metódy návratovo orientovaného programovania (ROP — Return-Oriented Programming). Podstata ochrany spočíva v tom, že po odovzdaní riadenia funkcii je adresa návratu uložená procesorom nielen v bežnej zásobníku, ale aj v samostatnej tieni zásobníku, ktorý nemôže byť priamo zmenený.
- Pridaná možnosť používať viac ako 255 CPU v hosťujúcich systémoch bežiacich pod hypervízorom Bhyve na hostiteľoch s FreeBSD 15.
- Pridaná vrstva dibs (Direct Internal Buffer Sharing) pre spravované zdieľanie búferov v izolovanom prostredí, ako je hypervízor alebo inštancia jadra Linux.
- Do auditu bola pridaná podpora práce s viacerými súčasne zapnutými modulmi LSM (Linux Security Module).
- Pridaný virtio ovládač spi-virtio na prístup k SPI zariadeniu (Serial Peripheral Interface) z virtuálních strojů.
- Do hypervízora KVM bola pridaná podpora režimu SEV-SNP CipherText Hiding, ktorý blokuje čítanie šifrovaného textu pamäte chránených hostiteľských systémov v neautorizovanom CPU.
- Pridaný ovládač qtee pre TEE prostredia (Trusted Execution Environment) čipov Qualcomm.
- Sieťový subsystém
- Pridaná podpora šifrovania TCP pripojení pomocou protokolu PSP (PSP Security Protocol), vyvinutého spoločnosťou Google na šifrovanie prevádzky medzi dátovými centrami. PSP zaručuje šifrovanie, kryptografickú kontrolu integrity a autentifikáciu zdroja, pričom realizuje akúsi kombináciu možností protokolov TLS a IPsec. V PSP sa používa šifrovanie na úrovni jednotlivých sieťových pripojení, nie celého komunikačného kanála. PSP využíva samostatné šifrovacie kľúče pre rôzne tunelované TCP pripojenia na prísnu izoláciu prevádzky medzi rôznymi aplikáciami a spracovateľmi. Na zníženie zaťaženia CPU sa podporuje odovzdávanie operácií šifrovania a dešifrovania na stranu sieťových kariet (offload). Ako transportný protokol na prenos dát sa používa protokol UDP, nad ktorým je posúvaný obsah pôvodného TCP paketu.

- Pridaná počiatočná podpora rozšírenia AccECN (Presné Explicitné Oznámenie o Preťažení), ktoré predstavuje vylepšenú verziu rozšírenia ECN, umožňujúcu hostiteľom v prípade preťaženia označovať IP pakety namiesto ich zahodenia. To dáva možnosť určiť vznik počiatočnej fázy zápchy v komunikačných kanáloch bez straty paketov. Pôvodné rozšírenie ECN má obmedzenie, ktoré povoľuje vystavovanie len jedného signálu o preťažení v rámci jedného cyklu prijímania a odosielania TCP (RTT, Round-Trip Time, odoslanie požiadavky a prijatie odpovede). AccECN toto obmedzenie zruší a umožňuje prijímateľovi posielať odosielateľovi viac ako jednu značku o preťažení v hlavičke TCP paketu. Algoritmy riadenia preťaženia môžu použiť prijaté informácie na presnejšie reagovanie na preťaženia a vyhnúť sa prudkému zníženiu intenzity odosielania paketov pri vzniku nevýznamného preťaženia.
- V UDP zásobníku je optimalizované spracovanie prichádzajúcich paketov za podmienok DDoS útokov, ktoré vedú k prijímaniu veľkého množstva paketov do jedného alebo viacerých UDP soketov. Vykonané optimalizácie, ako je zníženie konkurenčných zámkov, optimalizácia umiestnenia dátových štruktúr v pamäti a využitie zámkov zohľadňujúcich architektúru NUMA (Non-Uniform Memory Access), umožnili zvýšenie výkonu pri prijímaní UDP paketov o 47 % a viac za extrémnych podmienok.
- Realizovaná možnosť vypnutia vyrovnávacej pamäte vstupu/výstupu na NFS serveri, čo umožňuje používať NFS server v systémoch s malým objemom pamäte (napríklad v obmedzených cloudových prostrediach). Vypnutie cache môže byť tiež užitočné na preťažených NFS serveroch na zabránenie vytesnenia z cache dát súvisiacich s lokálnymi úložiskami v dôsledku uvoľnenia pamäte pre cache NFS.
- Maximálna veľkosť bufferov prichádzajúcich a odosielaných paketov pre sieťové sockety (net.core.rmem_max a net.core.wmem_max) bola zvýšená z 2 MB na 4 MB. Prednastavená veľkosť sa nezmenila (net.core.rmem_default a net.core.wmem_default = 2 MB).
- Pridaný ovládač pre akcelerátor sieťových operácií Qualcomm PPE (Packet Processing Engine), používaný v SoC Qualcomm IPQ9574.
- Pridaná podpora šifrovania TCP pripojení pomocou protokolu PSP (PSP Security Protocol), vyvinutého spoločnosťou Google na šifrovanie prevádzky medzi dátovými centrami. PSP zaručuje šifrovanie, kryptografickú kontrolu integrity a autentifikáciu zdroja, pričom realizuje akúsi kombináciu možností protokolov TLS a IPsec. V PSP sa používa šifrovanie na úrovni jednotlivých sieťových pripojení, nie celého komunikačného kanála. PSP využíva samostatné šifrovacie kľúče pre rôzne tunelované TCP pripojenia na prísnu izoláciu prevádzky medzi rôznymi aplikáciami a spracovateľmi. Na zníženie zaťaženia CPU sa podporuje odovzdávanie operácií šifrovania a dešifrovania na stranu sieťových kariet (offload). Ako transportný protokol na prenos dát sa používa protokol UDP, nad ktorým je posúvaný obsah pôvodného TCP paketu.
- Zariadenie
- Do jadra bol zaradený ovládač Tyr, napísaný v jazyku Rust, ktorý zabezpečuje prácu s GPU ARM Mali, využívajúcou technológiu CSF (Súhrn streamu príkazov), ako sú Mali G310, G510 a G710. Ovládač zatiaľ nie je pripravený na trvalé použitie obyčajnými používateľmi a považuje sa za experimentálny prototyp na testovanie abstrakcií pre vývoj ovládačov v jazyku Rust.
- Do ovládačov pre vstupné zariadenia s rozhraním HID (Human Interface Device) bola pridaná podpora touchpadov s hmatovou spätnej väzby a senzormi sily stlačenia.
- Pokračuje sa v práci na drm-ovládači (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 od procesorov Tiger Lake. V novej verzii bol pridaný rozhranie madvise, bola zapnutá podpora SR-IOV PF (Single Root I/O Virtualization Physical Function), pridaná podpora režimu Intel PSMI na validáciu hardvéru, bolo zabezpečené spracovanie informácií o chybách predaných firmvérmi, bol realizovaný profil energetickej spotreby SLPC, bola pridaná podpora načítania pomocných firmvérov (napríklad pre ovládač ventilátora a regulátor napätia) počas kontroly ovládača.
- V ovládači AMDGPU bola pridaná podpora zariadení s APU Cyan Skillfish, zlepšená podpora AMD GCN 1.0, bola realizovaná kompatibilita s nástrojom criu, do sysfs boli pridané metriky teploty, povolené požiadavky na remapovanie MMIO z používateľského priestoru.
- V ovládači i915 bola pridaná podpora čipov rodiny Wildcat Lake a zlepšená práca s GPU Jasper Lake, Elkhart Lake, Gen7 a Gen6.
- V ovládači Nouveau sú predvolene zapnuté GSP-firmvéry NVIDIA a zlepšené spracovanie chýb.
- Pokračuje integrácia komponentov ovládača Nova pre GPU NVIDIA, vybavených GSP-firmvérmi, ktoré sa používajú od série NVIDIA GeForce RTX 2000 založenej na mikroarchitektúre Turing. Ovládač je napísaný v jazyku Rust. V novej verzii bola rozšírená podpora GSP firmvérov, zlepšená implementácia makra „register!“, pridaná podpora tried PCI zariadení a identifikátorov výrobcov.
- Bol pridaný ovládač rocket pre NPU akcelerátory, ktoré sa používajú v SoC Rockchip RK3588.
- Bol pridaný parameter jadra „boot_display“ na výber výstupného zariadenia na zobrazenie procesu spúšťania na systémoch s viacerými GPU.
- V ovládači vesadrm bola implementovaná podpora 8-bitových paliet.
- V ovládači msm bola pridaná podpora GPU Adreno 663 a implementovaná podpora technológie znižovania spotreby energie IFPC (Inter Frame Power Collapse).
- V ovládači panthor bola pridaná podpora GPU Mali-G710, Mali-G510, Mali-G310, Mali-Gx15, Mali-Gx20 a Mali-Gx25.
- Pridaná podpora zvukových systémov ASoC Qualcomm Glymur a PM4125, Realtek RT1321, Shanghai FourSemi FS2104/5S, Texas Instruments PCM1754 a TAS2783A, qcs615, CS35L56 B2, tas2118, tas2x20, tas5825. Pridaná podpora zvukových USB kariet Tascam US-144mkII a Presonus S1824c.
- Pridaná podpora ARM CPU Cortex-A320/A520AE/A720AE a C1-Nano/Pro/Premium/Ultra.
- Pridaná podpora ARM platforiem, SoC a zariadení: Apple M2 Pro, M2 Max a M2 Ultra, Sony Xperia SP, Samsung Galaxy S22, Samsung Galaxy S20 FE, ASUS Eee Pad Slider SL101, Lenovo ThinkBook 16, HP Omnibook X14 X1P42100, Dell Inspiron 7441/Latitude 7455, Sige1, NanoPi Zero2, Axis Artpec8, NXP i.MX91, ROCK 2A/2F, Qualcomm Lemans Auto, Renesas RZ/T2H, RZ/N2H, RZ/T2H a RZ/N2H, Aspeed AST27xx, Meta Clemente BMC, Netcube Nagami som, Tqma91xx, Ultratronik i.MX8MP Ultra-MACH, i.MX8ULP EVK9, Buffalo WXR-1750DHP.
Zároveň latinskoamerická Nadácia voľného softvéru vytvorila variant úplne voľného jadra 6.18 — Linux-libre 6.18-gnu, vyčisteného od prvkov firmvérov a ovládačov, ktoré obsahujú neslobodné komponenty alebo úseky kódu, ktorých použitie je obmedzené výrobcom. V vydaní 6.18 bol aktualizovaný kód čistenia blob-ov v ovládačoch Nova-Core, Intel XE, TI PRUeth, Lantiq GSWIP, Marvell WiFi-Ex. Bola vykonaná čistka názvov blob-ov v dts súboroch (devicetree) pre ARM čipy Qualcomm, Mediatek a TI ARM64. Boli neutralizované nahrávania blob-ov v nových ovládačoch FourSemi fs2104/5s, TI TAS2783 a Qualcomm GENI.
Zdroj: opennet.ru

