Uvoľnenie jadra Linux 7.2

Po dvoch mesiacoch vývoja predstavil Linus Torvalds vydanie jadra Linux 7.2. Medzi najvýraznejšími zmenami sú: mechanizmus prenosu dát USB4STREAM, optimalizácie výkonu btrfs, xfs a ext4, pokračovanie v odstraňovaní kódu na podporu CPU i486, možnosť vytvárania vnorených plánovačov SCHED_EXT, znížená spotreba pamäte v subsystéme swapovania, zrýchlené neomenované kanály, podpora rozšírení Intel MBEC a AMD GMET v KVM, odstránenie protokolu AppleTalk, počiatočná podpora HDMI 2.1 FRL v ovládači AMDGPU.

Hlavné novinky v jadre 7.2 (1, 2, 3):

  • Diskový subsystém, I/O a súborové systémy
    • V mechanizme iomap bol odstránený nadbytočný volaní funkcie memset pre už завершённые iterácie v funkcii iomap_iter(), čo pri vysokej intenzite vstupu/výstupu na rýchlych úložiskách NVMe zvýšilo v vykonaných testoch počet operácií vstupu/výstupu za sekundu (IOPS) o 5% pri použití FS ext4 a xfs.
    • V XFS bola vyhlásená stabilná podpora zónovaných úložných zariadení (rozdelenie na zóny skupín blokov alebo sektorov, do ktorých je povolené iba sekvenčné pridávanie dát s aktualizáciou celej skupiny blokov).
    • V Btrfs bola predvolene povolená podpora veľkých stránok pamäte (large folios), čo umožňuje znížiť režijné náklady a zvýšiť výkon pri intenzívnom sekvenčnom vstupe/výstupe. Pridaná experimentálna podpora obrovských stránok („huge folios“) s veľkosťou až 2 MB. Pridaný nový ioctl GET_CSUMS na získavanie informácií o kontrolných súčtoch v používateľskom priestore, napríklad pre utilitu mkfs a optimalizáciu deduplikácie. Zlepšený výkon sekvenčného zápisu dát o 15% a priameho vstupu/výstupu o 59%.
    • Vo FS Ext4 bola výrazne prepracovaná implementácia mechanizmu „fast commit“ na vylúčenie vzniku kolíznych a vzájomných zamknutí. Pridaný export štatistiky o snapshotoch inode cez /proc/fs/ext4/*/fc_info. Optimalizovaný výkon výpočtu hashov adresárov (pre mená s dĺžkou 255 znakov zrýchlenie skoro dvakrát, 64 znakov 27%, 32 znakov — 11%).
    • Vo F2FS bola pridaná podpora vrátenia chýb fserror, ktoré umožňujú z používateľského priestoru sledovať problémy s FS. Skrátený čas strávený v kontexte spracovania prerušenia.
    • Do Device Mapper (DM) bol pridaný nový spracovateľ dm-inlinecrypt na zabezpečenie transparentného šifrovania a dešifrovania blokových zariadení pomocou hardvérových zariadení s možnosťou inline-šifrovania.
    • Návrh dokumentácie na pridanie nových súborových systémov do jadra bol navrhnutý.
    • V NFS bol predvolený veľkosť bloku zvýšený na 4 MB na systémoch s minimálne 16 GB RAM (na ručné nastavenie veľkosti bloku možno použiť /proc/fs/nfsd/max_block_size). Pridaná podpora delegovania správy adresárov klientovi (directory delegation), čo umožňuje určitý čas vykonávať operácie s daným adresárom bez overovania zmeny stavu. serveri.
    • Na serveri SMB bola pridaná podpora súborov uložených v komprimovanej forme, ako aj kompresia údajov pri ich prenosu po sieti.
    • V novej implementácii NTFS (ntfsplus) bola pridaná podpora symbolických odkazov Windows a zabezpečené správne spracovanie mnohých typov poškodení metadát.
    • Backend fscache pre vyrovnávaciu pamäť údajov FS EROFS (Enhanced Read-Only File System), ktorý bol pred dvoma rokmi vyhlásený za zastaraný, bol odstránený.
    • V FS Ceph bola pridaná podpora manuálneho resetovania klientských relácií.
    • Do súborového systému 9P boli pridané optimalizácie, ktoré urýchlili prácu v scenároch ako je zostavovanie projektov.
    • Do systémového volania file_getattr() boli pridané príznaky na získanie informácií o zohľadnení veľkosti písmen v súborovom systéme. Príznak FS_XFLAG_CASEFOLD naznačuje, že overovanie názvov súborov sa vykonáva bez zohľadnenia veľkosti písmen, a príznak FS_XFLAG_CASENONPRESERVING hovorí o tom, že pri vytváraní nových názvov súborov nie je zachovaná informácia o veľkosti písmen. Uvedené príznaky je možné použiť v NFS-klientoch, ktoré pracujú bez zohľadnenia veľkosti písmen.
    • Do systémového volania openat2() bol pridaný príznak O_EMPTYPATH, ktorý umožňuje odovzdávanie prázdnej cesty k súboru. V tomto prípade je cesta k otváranému súboru určená na základe odovzdaného súborového descriptoru.
    • Do systémového volania openat2() bol pridaný príznak OPENAT2_REGULAR, ktorý povoľuje otváranie iba bežných súborov (pri pokuse o otvorenie špeciálneho súboru, ako je zásuvka, kanál alebo zariadenie, bude vrátená chyba EFTYPE).
  • Pamäť a systémové služby
    • Bol pridaný mechanizmus USB4STREAM na prenos údajov medzi počítačmi pripojenými káblom cez porty USB4. Pridané zariadenie /dev/tbstreamX, pomocou ktorého je možné čítať a zapisovať dáta pomocou štandardných funkcií read() a write() podobne ako pri čítaní a zapisovaní do súborov. Napríklad, na jednom hostiteľovi je možné poslať informácie príkazom „echo hello > /dev/tbstream0“, a na druhom ich prečítať príkazom „cat /dev/tbstream0“. Mechanizmus USB4STREAM môže byť kombinovaný s možnosťou nastavenia sieťového pripojenia cez kábel USB4 (thunderbolt_net) alebo sa môže používať samostatne v prípade potreby prenášať údaje medzi aplikáciami, ktoré nepodporujú sieťové sokety.
    • Bola zahrnutá druhá séria zmien na ukončenie podpory procesorov i486. Bolo odstránených viac ako 13 riadkov kódu spojeného s emuláciou bloku pre výpočty s pohyblivou desatinnou čiarkou pre procesory bez FPU. Odstránená podpora procesorov i486 bez hardvérovej operácie CX8 (porovnať a vymeniť 8 bajtov) a TSC (počítadlo cyklov CPU, používané v plánovači úloh), kód pre emuláciu ktorých bol odstránený.
    • Bola oznámená podpora procesorov AMD Geode, ktorá zostala bez podpory (orphaned), používaných v počítači OLPC XO-1.
    • Bola pridaná podpora aktualizácie implementácie mechanizmu Intel TDX (Trusted Domain Extensions), používaného na šifrovanie operačnej pamäte hostiteľských systémov. TDX je implementovaný vo forme špeciálneho programového runtime modulu, ktorý je pri spúšťaní prenášaný BIOSom z Flash pamäte do operačnej pamäte. Do jadra boli pridané možnosti na správu tohto modulu a jeho výmenu za novšiu verziu na fungujúcom systéme bez potreby reštartovania.
    • Bol spustený nový plánovač prideľovania GPU zdrojov (Fair GPU scheduler), ktorý sa používa na určenie poradia vykonávania úloh na GPU, ktoré sú zasielané procesmi využívajúcimi GPU. Namiesto používania tradičnej FIDO-čakacej rady požiadaviek na GPU nový plánovač využíva mechanizmy spravodlivého rozdeľovania zdrojov, ktoré sú implementované s prihliadnutím na plánovač úloh CFS (Completely Fair Scheduler), ktorý aplikuje plán spúšťania s časom prechodu k vykonaniu nasledujúceho procesu. Najvýraznejší efekt používania nového plánovača sa pozoruje pri paralelnom vykonávaní interaktívnych úloh, ktoré aktívne pracujú s GPU. V poslednej chvíli pred uvoľnením jadra 7.2 bolo zapnutie Fair GPU scheduler zrušené a bol vrátený starý FIFO-plánovač kvôli potrebe odladenia regresie, ktorá viedla k zníženiu výkonu a 100% záťaži GPU pri spúšťaní jednotlivých hier v Protone.
    • Zmeny v subsystéme eBPF: Pridaná možnosť pripojiť jeden BPF program k viacerým bodom sledovania (tracepoint). Do BPF programov pripojených k bodom sledovania bola pridaná možnosť prístupu k pamäti komponentov pôsobiacich v užívateľskom priestore, so správnou obsluhou prístupu k nealokovaným stránkam pamäte (page fault). Do systémového volania bpf() bola pridaná podpora typových atribútov (log_buf, log_size, log_level a log_true_size), ktorá umožňuje unifikovane prenášať metadáta vo všetkých príkazoch BPF, bez obmedzenia na príkazy BPF_PROG_LOAD, BPF_BTF_LOAD a BPF_MAP_CREATE. Odstránené bolo obmedzenie na prenos nie viac ako 5 parametrov vo funkcii BPF. Pridaná možnosť bezpečného prístupu k zdieľanej pamäti bpf_arena bez obáv z prístupu k nealokovaným stránkam pamäte (page fault). Implementovaná bola nová verzia štruktúry BPF hash map, ktorá umožňuje dynamickú zmenu veľkosti.
    • Optimalizované generovanie výstupu „/proc/interrupts“ so štatistikou prerušenia, ako aj modernizované štruktúry na uchovávanie čítačov prerušenia a pridané cacheovanie.
    • Zrýchlená generácia súboru „/proc/filesystems“, ktorý sa používa v libselinux.
    • V plánovači úloh bola implementovaná podpora vyvažovania zaťaženia medzi jadrami CPU, zohľadňujúca stavy vnútorných cache procesora. Plánovač sa teraz snaží skupinovať procesy, ktoré používajú spoločné zdroje, ako sú vlákna jedného procesu, pre ich využitie v kontexte tej istej vyrovnávacej pamäte, čo zvyšuje efektivitu pri prístupe k údajom vďaka zvýšenej pravdepodobnosti nájdenia potrebných údajov v cache.
    • V mechanizme SCHED_EXT, ktorý umožňuje použiť BPF na vytváranie plánovačov CPU, pokračuje realizácia možnosti vytvárania vnorených plánovačov (sub-plánovačov), pomocou ktorých môže mať každý cgroup vlastný plánovač úloh.
    • Pokračuje prenos zmien z vetvy Rust-for-Linux, týkajúcich sa používania 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 zahrnutiu Rustu medzi povinné build závislosti jadra). Možnosť použitia Rustu v jadre bola implementovaná pre architektúru s390. Do súpravy bol zahrnutý balík „zerocopy“ s rýchlymi primitívami práce s pamäťou pre kód v režime „unsafe“.
    • Minimálna verzia nástrojov LLVM, potrebná na zostavenie jadra, bola zvýšená na 17.0.1.
    • V minimalistickej C knižnici nolibc, dodávanej so zdrojovými textami jadra Linux a poskytujúcej obal nad základnými systémovými volaniami, bola implementovaná podpora architektúr OpenRISC a 32-bit PA-RISC.
    • Do subsystému swapu boli pridané optimalizácie, ktoré zvyšujú výkon a znižujú spotrebu pamäte v samotnom subsystéme odstránením režijných nákladov pri ukladaní statických metadát a unifikovaním práce s anonymnou a zdieľanou pamäťou pri použití fólií. Zníženie spotreby pamäte je dosť významné, napríklad pri pripojení swapového partície s veľkosťou 1 TB sa pozoruje zníženie spotreby pamäte približne o 512 MB.
    • Bola zvýšená efektivita mechanizmu odstraňovania pamäte, ktorý odstraňuje alebo presúva do swapu oblasti pamäte na uvoľnenie pamäte pri jej nedostatku v systéme. Pri niektorých typoch zaťaženia, napríklad pri teste MongoDB pomocou YCSB (Yahoo! Cloud Serving Benchmark), sa pozoruje nárast výkonu až o 30%.
    • Do systému pro sestavení byla přidána příkaz "make sbom" pro generování seznamů SBOM (Software Bill Of Materials), které odrážejí komponenty, knihovny a závislosti použité v aktuální sestavě jádra, jakož i informace o jejich licencích získané z hlaviček SPDX v souborových kódech.
    • V implementaci anonymních kanálů (pipe) byla optimalizována práce s blokacemi (operace alokace paměti byly přesunuty mimo oblast blokace), což zlepšilo propustnost anonymních kanálů o 21-48 % a snížilo latenci o 17-33 %.
  • Virtualizácia a bezpečnosť
    • Do mechanismu pro správu paměti slab (slab allocator) byla přidána možnost využití tokenů alokace paměti (Allocation Token), realizovaných v kompilátoru Clang 22. Tokeny umožňují označit unikátními identifikátory operace alokace paměti a organizovat oddělené umístění různých typů objektů k ztížení využití zranitelností způsobených přetečením bufferu (při oddělování není tak snadné využít přetečení bufferu v jednom typu objektů k poškození jiných typů objektů).
    • Mechanismus AF_ALG, zneužívaný v zranitelnosti Copy Fail pro modifikaci dat v stránkovém cache, byl prohlášen za zastaralý a plánováno jeho odstranění v některém z budoucích vydání. AF_ALG umožňuje využití hardwarových akcelerátorů pro kryptografické výpočty v Crypto API jádra, ale používá se v poměrně specifických situacích. V jádře 7.2 byla v AF_ALG odstraněna podpora pro asynchronní vstup/výstup, staré ovladače a mechanismus zero-copy v implementaci skcipher a aead. Zůstaly pouze softwarové implementace kryptografických algoritmů a podpora hardwarových kryptoaakcelerátorů v crypto API jádra byla odstraněna, protože AF_ALG výrazně rozšiřuje útočnou plochu, ale nenabízí výhodu v výkonu ve srovnání s implementací kryptografie v uživatelském prostoru. AF_ALG byl použit v nástrojích Cryptsetup, ale jeho podpora byla odstraněna v nedávném vydání 2.8.7.
    • Do mechanismu IMA (Integrity Measurement Architecture), který umožňuje externí službě ověřit stav subsystému jádra, aby se ujistila o jejich pravosti, byla přidána podpora pro export interních tabulek s výsledky měření do uživatelského prostoru s odstraněním z jaderných bufferů pro úsporu paměti.
    • Do modulu Landlock, ktorý poskytuje neprivilegovaným programom prostriedky na obmedzenie používania objektov jadra Linux (hierarchia súborov, sieťové zásuvky, ioctl a pod.), bola pridaná podpora správy prístupu k UDP zásuvkám, ako aj možnosť selektívneho vypnutia výstupu do logu informácií o blokovaní objektov na zabránenie zaplaveniu logu nepodstatnými informáciami.
    • Jadro sa zbavilo používania funkcie strncpy(), ktorá kopíruje zadané množstvo bajtov z vstupného reťazca. Použitie strncpy() vytváralo riziko vzniku chýb kvôli prehliadnutiu nulového znaku na konci reťazca alebo pridávania vyplnenia nulami. Namiesto strncpy() sa odporúča používať funkcie strscpy() a strscpy_pad() na kopírovanie reťazcov končiacich nulovým znakom, ako aj strtomem_pad(), memcpy_and_pad() a memcpy() na kopírovanie reťazcov známej pevnej veľkosti. Práca na zbavení sa použitia strncpy() v jadre bola začatá v roku 2020 a vyžadovala prijatie 362 zmien od 70 vývojárov.
    • V hypervizoru KVM bola pridaná podpora rozšírení Intel MBEC (Mode-Based Execution Control) a AMD GMET (Guest-Mode Execution Trap), ktoré umožňujú v tabuľkách prekladu pamäte samostatne spracovávať práva na vykonávanie kódu pre jadro a používateľský priestor v hosťovských systémoch. Predtým rozšírenia hardvérovej virtualizácie Intel a AMD umožnili označiť stránky pamäte ako dostupné na vykonávanie iba jedným bitom s programovým delením práv pre jadro a používateľský priestor na úrovni hypervízora. Použitie MBEC a GMET umožňuje vylúčiť kontroly oprávnení na strane hypervízora a výrazne znížiť intenzitu zdrojožravého odovzdávania riadenia z hosťovskej systém na hypervízor VMexit.
  • Sieťový subsystém
    • Implementácia rozšírenia TCP-AO (TCP Authentication Option, RFC 5925) bola prevedená na používanie novej kryptografickej knižnice libcrypto, čo umožnilo zjednodušiť kód a zvýšiť efektivitu práce. TCP-AO umožňuje overiť TCP hlavičky podľa MAC kódov (Message Authentication Code), s použitím modernejších algoritmov HMAC-SHA-1-96 a AES-128-CMAC-96 namiesto predtým dostupnej možnosti TCP-MD5 založenej na zastaranom algoritme MD5.
    • Počet subvlákien podporovaných pre spojenia Multipath TCP (MPTCP) bol zvýšený z 8 na 64.
    • Pokračovala práca na znížení používania globálnej zámky rtnl_lock v sieťovom zásobníku jadra.
    • Z jadra bola odstránená implementácia protokolového zásobníka AppleTalk, ktorá sa používala v počítačoch Apple od roku 1985 a v 90. rokoch bola nahradená protokolom TCP/IP. Okrem toho boli odstránené komponenty technológie prenosu dát ATM, ktoré nie sú spojené s PPPoATM, ako aj sieťové rozhrania ARCnet na báze zberníc ISA a PCMCIA, Bluetooth adaptéry s rozhraním PCMCIA, akcelerátory TLS Chelsea, kód na integráciu TLS s sockmap a podpora frekvenčných pásiem 5/10 MHz v bezdrôtovom zásobníku cfg80211/mac80211. V dôsledku neriešiteľných problémov s blokovaním a absenciou sprievodného materiálu bola odstránená špecifická implementácia zrýchlenia spracovania TLS na báze TCP Offload Engine (viac rozšírená implementácia TLS offload zostáva zachovaná). Kód kompatibility s 32-bitovými x_tables na 64-bitových systémoch bol deaktivovaný a naplánovaný na odstránenie.
    • Do ovládača pppoe bola pridaná podpora mechanizmov GRO (Generic Receive Offload) a GSO (Generic Segmentation Offload) na hardvérové urýchlenie znovuzostavenia a segmentácie paketov. Používanie GRO a GSO výrazne zvyšuje priepustnosť pre prichádzajúcu dopravu, napríklad na zariadeniach MediaTek MT7621 v konfigurácii s prekladom adries sa maximálna priepustnosť zvýšila z 130 Mbit/s na 630 Mbit/s.
  • Zariadenie
    • V ovládači AMDGPU bola pridaná počiatočná podpora technológie HDMI 2.1 FRL (Fixed Rate Link), ktorá umožňuje prenášať nekomprimované video v kvalite 4K/120Hz a 8K/60Hz. Predtým sa podporu HDMI 2.1 dlho nepodarilo implementovať v otvorených ovládačoch z dôvodu licenčných požiadaviek HDMI Forum, ale teraz sa spoločnosti AMD podarilo dohodnúť takúto realizáciu.
    • Do ovládača i915 bola pridaná podpora nastavenia pozadia farby displeja hardvérovým ovládačom. Bolo implementované nastavenie pin_params.needs_low_address.
    • 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 na grafických kartách Intel rodiny Arc a integrovaných grafikách od procesorov Tiger Lake. Bolo pridané počiatočné podporu platformy CRI (Crescent Island). Pre dGPU platformy Xe3p bol realizovaný systémový ovládač.
    • V ovládači Nouveau boli vyriešené problémy s GPU NVIDIA GA100.
    • Do ovládača v3d bola pridaná možnosť riadenia spotreby energie GPU v3D na doskách Raspberry Pi.
    • Pokračovala integrácia komponentov ovládača Nova pre GPU NVIDIA s GSP firmvérom používaným od série NVIDIA GeForce RTX 2000 založenej na mikroarchitektúre Turing. Ovládač je napísaný v jazyku Rust. Pridaná podpora pre GPU NVIDIA GA100 a série Hopper a Blackwell.
    • Pridaná podpora pre ARM platformy, SoC a zariadenia: Apple t8122 (M3), Motorola Edge 30, Nothing Phone 3a, Google Pixel 3a XL, Qualcomm Dragonwing IPQ9650, Huawei Hawi, ZTE zx297520v3, Renesas R-Car M3Le, ASPEED AST27xx, Cortina Gemini, NXP i.MX6/8/9, NXP LX2160A, TI K3 AM62x.

Zároveň latinskoamerická Nadácia voľného softvéru vytvorila variant úplne voľného jadra 7.2 — Linux-libre 7.2-gnu, vyčisteného od prvkov firmvéru a ovládačov, ktoré obsahujú nevlastné komponenty alebo úseky kódu, ktorých použitie obmedzuje výrobca. V vydaní 7.2 prebehla očista od blobov nových ovládačov rt722-sdca a tac5xx2. Aktualizovaný kód čistenia v ovládačoch amdgpu, nova core, qcom iris, q6v5, iwlwifi, amdxnda, adreno, r8152 a mt792x. Prebehla korekcia rozhraní na načítanie firmvéru. Prebehla očista mien blobov v dts súboroch (devicetree) pre ARM čipy.

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster