Po dvoch mesiacoch vývoja Linus Torvalds predstavil vydanie jadra Linux 5.19. Medzi najvýraznejšími zmenami patrí podpora procesorovej architektúry LoongArch, integrácia opráv "BIG TCP", režim "on-demand" vo fscache, odstránenie kódu pre podporu formátu a.out, možnosť aplikácie ZSTD na kompresiu firmwaru, rozhranie na správu vyhadzovania pamäte z priestoru používateľa, zlepšenie spoľahlivosti a výkonu generátora pseudonáhodných čísel, podpora rozšírení Intel IFS (In-Field Scan), AMD SEV-SNP (Secure Nested Paging), Intel TDX (Trusted Domain Extensions) a ARM SME (Scalable Matrix Extension).
V oznámení Linus uviedol, že pravdepodobne nasledujúcemu vydaniu jadra bude pridelené číslo 6.0, pretože vo vetve 5.x sa nahromadili dostatočné vydania na to, aby sa zmenilo prvé číslo vo verzii. Zmena číslovania sa uskutočňuje z estetických dôvodov a predstavuje formálny krok, ktorý odstraňuje nepohodlie z hromadenia veľkého počtu vydaní v sérii.
Linus tiež spomenul, že na vytvorenie vydania použil notebook Apple založený na architektúre ARM64 (Apple Silicon) s Linuxovým prostredím na základe distribúcie Asahi Linux. Nie je to Linusova hlavná pracovná stanica, ale túto platformu použil na overenie jej vhodnosti na prácu na jadre a bol si istý, že bude schopný vytvárať vydania jadra na cestách s ľahkým notebookom po ruke. Veľa rokov dozadu mal Linus skúsenosti s použitím hardvéru Apple na vývoj - kedysi používal počítač založený na CPU ppc970 a notebook Macbook Air.
Do novej verzie bolo prijatých 16 401 opráv od 2 190 vývojárov (v predchádzajúcom vydaní bolo 16 206 opráv od 2 127 vývojárov), veľkosť záplaty je 90 MB (zmeny sa dotkli 13 847 súborov, bolo pridaných 1 149 456 riadkov kódu, 349 177 riadkov bolo odstránených). Približne 39 % všetkých zmien obsiahnutých v 5.19 sa týka ovládačov zariadení, asi 21 % zmien súvisí s aktualizáciou kódu špecifikovaného pre hardvérové architektúry, 11 % sa týka sieťového zásobníka, 4 % - súborových systémov a 3 % s vnútornými subsystémami jadra.
Hlavné novinky v jadre 5.19:
- Diskový subsystém, I/O a súborové systémy
- Súborový systém EROFS (Enhanced Read-Only File System), určený na používanie na oddieloch prístupných v režime iba na čítanie, bol preložený na používanie subsystému fscache poskytujúceho cacheovanie údajov. Táto zmena umožnila výrazne zvýšiť výkon systémov, v ktorých sa z obrazu založeného na EROFS spúšťa veľký počet kontajnerov.
- Do subsystému fscache bol pridaný režim čítania na požiadanie („on-demand“), ktorý je aktivovaný na optimalizáciu EROFS. Nový režim umožňuje organizovať cacheovanie čítania z obrazov FS nachádzajúcich sa v miestnom systéme. Na rozdiel od pôvodne dostupného režimu, zameraného na cacheovanie v miestnom súborovom systéme údajov prenášaných cez sieťové súborové systémy, režim „on-demand“ deleguje funkcie extrakcie údajov a ich zápisu do cache separate na pozadie proces, ktorý sa vykonáva v priestore používateľa.
- V XFS bola zabezpečená možnosť uchovávania miliárd rozšírených atribútov v i-node. Maximálny počet extentov pre jeden súbor bol zvýšený z 4 miliárd na 247. Implementovaný bol režim pre atomárne aktualizovanie viacerých rozšírených atribútov súboru.
- V súborovom systéme Btrfs bola optimalizovaná práca s blokádami, čo umožnilo zvýšiť výkon približne o 7% pri priamej zápise v režime nowait. Výkon operácií v režime NOCOW (bez copy-on-write) bol zvýšený približne o 3%. Znížená bola záťaž na stránkový cache pri práci príkazu „send“. Minimálna veľkosť podstránok bola znížená z 64K na 4K (je možné použiť podstránky s veľkosťou menšou ako stránky jadra). Bol uskutočnený prechod z používania základného stromu (radix tree) na algoritmus XArrays.
- Na NFS server bol pridaný režim predlženia uchovávania stavu zámku, ktorý bol nastavený klientom, ktorý prestal reagovať na požiadavky. Nový režim umožňuje odložiť vyčistenie zámku až na jeden deň, ak iný klient nepožaduje konkurujúci zámok. V bežnom režime sa zámok čistí po 90 sekundách po tom, ako klient prestal reagovať.
- V subsystéme sledovania udalostí vo FS fanotify bol implementovaný flag FAN_MARK_EVICTABLE, pomocou ktorého je možné vypnúť fixáciu cieľových i-node v cache, napríklad na ignorovanie podvetiev bez ich častí v cache.
- Do ovládača pre súborový systém FAT32 bola pridaná podpora získavania informácií o čase vytvorenia súboru prostredníctvom systémového volania statx s realizáciou efektívnejšej a funkčnejšej verzie stat(), ktorá vracia rozšírené informácie o súbore.
- Do ovládača exFAT boli implementované významné optimalizácie, ktoré zabezpečujú súčasné čistenie skupiny sektorov v aktívnom režime 'dirsync', miesto sekvenčného čistenia po sektoroch. Vďaka zníženiu počtu požiadaviek na bloky sa výkon pri vytváraní veľkého počtu adresárov na SD karta zvýšil o viac než 73-85% v závislosti od veľkosti bloku.
- Do jadra bolo zahrnuté prvé opravné aktualizovanie ovládača ntfs3. Od zapojenia ntfs3 do jadra 5.15 v októbri minulého roku ovládač nebol aktualizovaný a spojenie s vývojármi bolo prerušené, ale teraz vývojári obnovili publikovanie zmien. V navrhnutých patchoch boli odstránené chyby spôsobujúce úniky pamäte a havarijné ukončenia, vyriešené problémy s vykonávaním xfstests, vykonané čistenie nepoužívaného kódu a opravené pravopisné chyby.
- Pre OverlayFS bola implementovaná možnosť mapovania identifikátorov používateľov pripojených súborových systémov, ktorá je aplikovaná na zhodovanie súborov určitého používateľa na pripojenom cudzom oddiele s iným používateľom v aktuálnom systéme.
- Pamäť a systémové služby
- Pridaná počiatočná podpora architektúry sady príkazov LoongArch, ktorá sa používa v procesoroch Loongson 3 5000 a implementuje nový RISC ISA, podobný MIPS a RISC-V. Architektúra LoongArch je dostupná v troch variantách: obmedzená 32-bitová (LA32R), bežná 32-bitová (LA32S) a 64-bitová (LA64).
- Bol odstránený kód na podporu formátu spustiteľných súborov a.out, ktorý bol zaradený medzi zastarané vo verzii 5.1. Formát a.out sa už dávno nepoužíva na systémoch s Linuxom, a generácia súborov a.out nie je podporovaná modernými nástrojmi v predvolenej konfigurácii pre Linux. Načítavač pre súbory a.out môže byť realizovaný celkom v užívateľskom priestore.
- Bola prerušená podpora zavádzacích možností špecifických pre architektúru x86: nosep, nosmap, nosmep, noexec a noclflush.
- Bola prerušená podpora zastaranej architektúry CPU h8300 (Renesas H8/300), ktorá už dávno nemá žiadnu podporu.
- Rozšírené možnosti týkajúce sa reakcie na zistenie rozdelených zámkov („split lock“), ktoré vznikajú pri prístupe k nevyrovnaným údajom v pamäti z dôvodu, že pri vykonávaní atómovej inštrukcie údaje zasahujú do dvoch riadkov cache CPU. Tieto zámky vedú k významnému poklesu výkonnosti. Ak predtým jadro predvolene vydávalo varovanie s informáciami o procese, ktorý zámok spôsobil, teraz bude problematický proces navyše spomalený, aby sa zachovala výkonnosť zvyšku systému.
- Pridaná podpora mechanizmu IFS (In-Field Scan) implementovaného v procesoroch Intel, ktorý umožňuje spúšťať nízkoúrovňové diagnostické testy CPU, schopné odhaľovať problémy, ktoré nie sú identifikované štandardnými prostriedkami na základe kódov opravy chýb (ECC) alebo paritných bitov. Vykonávané testy sú koncipované ako sťahovateľný firmvér, podobne ako aktualizácie mikroprogramu. Výsledky testovania sú dostupné cez sysfs.
- Pridaná možnosť vloženia súboru bootconfig do jadra, umožňujúca definovať parametre fungovania jadra prostredníctvom konfiguračného súboru okrem volieb príkazového riadku. Vloženie sa realizuje pomocou konštrukčnej možnosti ‘CONFIG_BOOT_CONFIG_EMBED_FILE="/PATH/TO/BOOTCONFIG/FILE"‘. Predtým sa bootconfig definoval priložením k obrazu initrd. Vloženie do jadra umožňuje používať bootconfig v konfiguráciách bez initrd.
- Realizovaná možnosť načítania firmvérov, komprimovaných pomocou algoritmu Zstandard. Do sysfs bol pridaný súborový systém /sys/class/firmware/*, ktorý umožňuje iniciovať načítanie firmvérov z užívateľského priestoru.
- V rozhraní asynchrónneho vstupu/výstupu io_uring bol navrhnutý nový príznak IORING_RECVSEND_POLL_FIRST, pri ktorom sa sieťová operácia najprv odovzdá na spracovanie s použitím polingu (polling), čo môže ušetriť zdroje v situáciách, keď je prípustné spracovanie operácie s určitou oneskorením. V io_uring bola tiež pridaná podpora systémového volania socket(), navrhnuté nové príznaky na zjednodušenie správy súborových descriptorov, pridaný režim „multi-shot“ pre prijímanie viacerých pripojení v rámci volania accept(), a pridané operácie na prenos príkazov NVMe priamo do zariadenia.
- Pre architektúru Xtensa bola zabezpečená podpora nástroja na ladenie KCSAN (Kernel Concurrency Sanitizer), určeného na dynamické odhaľovanie stavových závodov v jadre. Takisto bola pridaná podpora spánkového režimu a koprocesorov.
- Pre architektúru m68k (Motorola 68000) bola realizovaná virtuálna mašina (simulátor platformy), založený na emulátore Android Goldfish.
- Pre architektúru AArch64 bola implementovaná podpora rozšírení Armv9-A SME (Scalable Matrix Extension).
- V subsystéme eBPF bolo povolené uchovávanie typizovaných ukazovateľov v map-štruktúrach, ako aj bola pridaná podpora dynamických ukazovateľov.
- Bol navrhnutý nový predpokladací mechanizmus vyraďovania pamäte, ktorý podporuje správu z používateľského priestoru pomocou súboru memory.reclaim. Zapisovanie čísla do určeného súboru povedie k pokusu o vyraďovanie príslušného počtu bajtov z množiny spájanej s cgroup.
- Bola zvýšená presnosť sledovania využitia pamäte pri kompresii dát v swapovom oddiele pomocou mechanizmu zswap.
- Pre architektúru RISC-V bola zabezpečená podpora spúšťania 32-bitových spustiteľných súborov na 64-bitových systémoch, bol pridaný režim na viazanie obmedzujúcich atribútov k stránkam pamäte (napríklad na zákaz cachovania) a bola implementovaná funkcia kexec_file_load().
- Implementácia podpory 32-bitových systémov Armv4T a Armv5 bola prispôsobená na použitie v univerzálnych multiplatformných zostaveniach jadra vhodných pre rôzne ARM systémy.
- Virtualizácia a bezpečnosť
- V subsystéme EFI bola implementovaná možnosť dôvernej transmisie tajných informácií hosťujúcim systémom bez ich odhalovania hostiteľskému systému. Údaje sú poskytované prostredníctvom adresára security/coco v securityfs.
- V režime ochrany Lockdown, ktorý obmedzuje prístup používateľa root k jadru a blokuje obchádzanie cesty UEFI Secure Boot, bola odstránená diera, ktorá umožňovala obchádzanie ochrany manipuláciou s debuggerom jadra.
- Boli zapnuté patchy zamerané na zvýšenie spoľahlivosti a výkonu generátora pseudonáhodných čísel.
- Pri zostavovaní pomocou Clang 15 bola implementovaná podpora mechanizmu randomizácie štruktúr jadra.
- Do mechanizmu Landlock, ktorý umožňuje obmedziť interakciu skupiny procesov s vonkajším prostredím, bola pridaná podpora pravidiel, ktoré umožňujú kontrolovať vykonávanie operácií premenovania súborov.
- Systém IMA (Integrity Measurement Architecture) na overovanie integrity komponentov operačného systému pomocou digitálnych podpisov a hashov bol preložený na používanie modulu fs-verity na overovanie súborov.
- Logika činností pri deaktivácii nepriviligovaného prístupu k subsystému eBPF bola zmenená — predtým sa zakazovali všetky príkazy súvisiace so systémovým volaním bpf(), ale od verzie 5.19 je prístup povolený k príkazom, ktoré nevedú k vytvoreniu objektov. Pri takomto správaní je na načítanie BPF programu potrebný privilegovaný proces, ale následne môžu nepriviligované procesy interagovať s týmto programom.
- Pridaná podpora pre rozšírenie AMD SEV-SNP (Secure Nested Paging), ktoré zabezpečuje bezpečnú prácu s vnorenými tabuľkami strán pamäte a chráni pred útokmi „undeSErVed“ a „SEVerity“ na procesory AMD EPYC, ktoré umožňujú obísť mechanizmus ochrany AMD SEV (Secure Encrypted Virtualization).
- Pridaná podpora pre mechanizmus Intel TDX (Trusted Domain Extensions), ktorý umožňuje zablokovať pokusy o neoprávnený prístup k zašifrovanej pamäti. virtuálních strojů.
- Do ovládača virtio-blk, ktorý sa používa na emuláciu blokových zariadení, bola pridaná podpora pre vstup/výstup s využitím polingovania (polling), čo podľa vykonaných testov umožnilo znížiť latenciu o približne 10%.
- Sieťový subsystém
- Do systému bola zahrnutá séria patchov BIG TCP, ktoré umožňujú zvýšiť maximálnu veľkosť TCP paketu na 4 GB na optimalizáciu fungovania vysokorýchlostných vnútorných sietí dátových centier. Takéto zvýšenie veľkosti paketu pri 16-bitovej veľkosti poľa v hlavičke sa dosahuje implementáciou „jumbo“ paketov, kde je veľkosť v IP hlavičke nastavená na 0 a skutočná veľkosť je prenášaná v samostatnom 32-bitovom poli v pripojenej hlavičke. Pri testovaní výkonu nastavenie veľkosti paketu na 185 kB umožnilo zvýšiť priepustnosť o 50% a výrazne skrátiť latenciu prenosu dát.
- Bola pokračovaná práca na integrácii do sieťového zásobníka prostriedkov na sledovanie dôvodov zamietania paketov (kódy reason). Kód dôvodu je zaslaný počas oslobodenia pamäte súvisiacej s paketom a umožňuje brať do úvahy situácie ako zamietanie paketu z dôvodu chýb v poli hlavičky, odhalenie spoofingu filtrom rp_filter, nesprávna kontrolná suma, nedostatok pamäte, aktivácia pravidiel IPSec XFRM, nesprávne číslo sekvencie TCP a pod.
- Pridaná podpora pre prechod z MPTCP (MultiPath TCP) na používanie obyčajného TCP v situáciách, keď určité funkcie MPTCP nemôžu byť použité. MPTCP predstavuje rozšírenie protokolu TCP na organizáciu TCP pripojenia s dodávaním paketov súčasne po viacerých trasách cez rôzne sieťové rozhrania viazané na rôzne IP adresy. Pridané API na správu MPTCP tokov z užívateľského priestoru.
- Zariadenie
- Pridaných viac ako 420 tisíc riadkov kódu súvisiacich s ovládačom amdgpu, z ktorých približne 400 tisíc riadkov sa týka automaticky generovaných hlavičkových súborov s údajmi pre registre ASIC v ovládači pre GPU AMD, a ďalších 22,5 tisíc riadkov zabezpečuje počiatočnú implementáciu podpory AMD SoC21. Celková veľkosť ovládača pre GPU AMD presiahla 4 milióny riadkov kódu. Okrem SoC21 ovládač AMD zahŕňa podporu SMU 13.x (System Management Unit), aktualizovanú podporu pre USB-C a GPUVM, a bol pripravený na podporu nasledujúcich generácií platforiem RDNA3 (RX 7000) a CDNA (AMD Instinct).
- V ovládači i915 (Intel) sú rozšírené funkcie týkajúce sa správy spotreby energie. Pridané identifikátory GPU Intel DG2 (Arc Alchemist), použité na notebookoch, bola zabezpečená počiatočná podpora platformy Intel Raptor Lake-P (RPL-P), pridané informácie o grafických kartách Arctic Sound-M, realizované ABI pre výpočtové motory, pre karty DG2 bola pridaná podpora formátu Tile4 a pre systémy založené na mikroarchitektúre Haswell bola implementovaná podpora DisplayPort HDR.
- V ovládači Nouveau sa prešlo na používanie spracovateľa drm_gem_plane_helper_prepare_fb, pre niektoré štruktúry a premenné bola použitá statická alokácia pamäte. Čo sa týka použitia v Nouveau verejných zdrojových textov modulov jadra zo spoločnosti NVIDIA, práca zatiaľ spočíva v odhaľovaní a odstraňovaní chýb. V budúcnosti sa plánuje využitie publikovanej firmvéry na zvýšenie výkonu ovládača.
- Pridaný ovládač pre NVMe riadič používaný v počítačoch Apple založených na čipe M1.
Zároveň latinskoamerický Fond slobodného softvéru vytvoril variantu úplne slobodného jadra 5.19 — Linux-libre 5.19-gnu, vyčisteného od prvkov firmvéru a ovládačov, ktoré obsahovali neslobodné komponenty alebo časti kódu, pričom ich využitie je obmedzené výrobcom. V novom vydaní bola vykonaná čistka ovládačov pre pureLiFi X/XL/XC a TI AMx3 Wkup-M3 IPC. Kód na čistenie blobov bol aktualizovaný v ovládačoch a subsystémoch Silicon Labs WFX, AMD amdgpu, Qualcomm WCNSS Peripheral Image Loader, Realtek Bluetooth, Mellanox Spectrum, Marvell WiFi-Ex, Intel AVS, IFS a pu3-imgu. Bolo implementované spracovanie súborov devicetree Qualcomm AArch64. Pridaná podpora novej schémy pomenovania komponentov Sound Open Firmware. Čistka ovládača ATM Ambassador, ktorý bol odstránený z jadra, bola ukončená. Správa čistenia blobov v HDCP a Mellanox Core bola presunutá do samostatných tagov kconfig.
Zdroj: opennet.ru
