Uvoľnenie jadra Linux 6.1

Po dvoch mesiacoch vývoja predstavil Linus Torvalds uvoľnenie jadra Linux 6.1. Medzi najvýznamnejšie zmeny patrí podpora vývoja ovládačov a modulov v jazyku Rust, modernizácia mechanizmu určovania používaných strán pamäte, špeciálny správca pamäte pre BPF programy, systém diagnostiky problémov s pamäťou KMSAN, mechanizmus ochrany KCFI (Kernel Control-Flow Integrity) a zavedenie štruktúry Maple tree.

Do novej verzie bolo prijatých 15115 opráv od 2139 vývojárov, veľkosť záplaty je 51 MB, čo je približne dvakrát menej ako veľkosť záplat pre jadrá 6.0 a 5.19. Zmeny zasiahli 13165 súborov, bolo pridaných 716247 riadkov kódu a odstránených 304560 riadkov. Približne 45% všetkých zmien v 6.1 sa týka ovládačov zariadení, približne 14% zmien súvisí s modernizáciou kódu špecifického pre hardvérové architektúry, 14% súvisí so sieťovým zásobníkom, 3% so súborovými systémami a 3% s vnútornými subsystémami jadra.

Hlavné novinky v jadre 6.1:

  • Pamäť a systémové služby
    • Pridaná možnosť používať jazyk Rust ako druhý jazyk pre vývoj ovládačov a modulov jadra. Hlavným motivom podpory Rust je zjednodušenie písania bezpečných a kvalitných ovládačov zariadení znížením pravdepodobnosti chýb pri práci s pamäťou. Podpora Rust nie je aktívna predvolene a nevedie k zahŕňaniu Rust medzi povinné závislosti na zostavenie jadra. Do jadra bol zatiaľ prijatý minimálny zúžený variant záplat, ktorý bol skrátený z 40 na 13 tisíc riadkov kódu a zabezpečuje len potrebný minimum, ktoré je dostatočné na zostavenie jednoduchého jadra modulu písaného v jazyku Rust. Do budúcna sa plánuje postupne zvyšovať existujúca funkčnosť prenášaním a ďalších zmien z vetvy Rust-for-Linux. Paralelne sa vyvíjajú projekty týkajúce sa navrhnutej infraštruktúry pre vývoj v jazyku Rust pre ovládače NVMe, sieťový protokol 9p a GPU Apple M1.
    • Pre systémy založené na architektúrach AArch64, RISC-V a LoongArch s EFI bola implementovaná možnosť priamej zavádzania komprimovaných obrazov jadra. Pridané boli spracovatele na načítanie, spustenie a vyloženie obrazov jadra, ktoré sú volané priamo z EFI zboot. Rovnako boli pridané spracovatele na inštaláciu a odinštaláciu protokolov z databázy protokolov EFI. Predtým sa rozbalenie vykonávalo samostatným zavádzačom, teraz to môže robiť spracovateľ priamo v jadre — obraz jadra sa formuje ako EFI aplikácia.
    • Do systému boli prijaté niektoré patche s implementáciou viacúrovňového modelu správy pamäte, ktorý umožňuje rozdeľovanie pamäťových bankov s rôznymi výkonnostnými charakteristikami. Napríklad najintenzívnejšie používané stránky môžu byť umiestnené v najrýchlejšej pamäti, zatiaľ čo menej používané stránky môžu byť uložené v relatívne pomalej pamäti. Do jadra 6.1 bol prijatý mechanizmus na určenie polohy intenzívne používaných stránok v pomalej pamäti, aby sa mohli presunúť do rýchlej pamäte, a bola implementovaná celková koncepcia pamäťových úrovní a ich relatívnej výkonnosti.
    • Bol zahrnutý mechanizmus MGLRU (Multi-Generational LRU), ktorý nahradil starú implementáciu LRU (Least Recently Used) založenú na dvoch frontách viacúrovňovou štruktúrou, ktorá lepšie určuje, ktoré stránky pamäte sú v skutočnosti používané a ktoré je možné posunúť do swapového priestoru.
    • Pridaná podpora navrhnutej inžiniermi Oracle dátovej štruktúry „maple tree“, ktorá je pozicionovaná ako efektívnejšia náhrada štruktúry „red-black tree“. Maple tree predstavuje variant B-tree, ktorý podporuje indexovanie podľa rozsahov hodnôt a je navrhnutý na efektívne využitie cache. moderných procesorov. Na maple tree už boli prenesené niektoré subsystémy správy pamäte, čo malo pozitívny vplyv na ich výkonnosť. V budúcnosti môže byť maple tree použité na implementáciu zámkov podľa rozsahov (range locking).
    • Do systému BPF bola pridaná možnosť vytvárania „destruktívnych“ BPF programov, špeciálne navrhnutých na iniciovanie núdzového vypnutia cez volanie crash_kexec(). Takéto BPF programy môžu byť potrebné na ladenie s cieľom iniciovať vytvorenie crash dumpu v určitej chvíli. Na prístup k destruktívnym operáciám pri načítaní BPF programu je potrebné uviesť flag BPF_F_DESTRUCTIVE, aktivovať sysctl kernel.destructive_bpf_enabled a mať práva CAP_SYS_BOOT.
    • Pre BPF programy bola poskytnutá možnosť prechádzania prvkami cgroup, ako aj prechádzania zdrojmi (súbory, vma, procesy atď.) určitého vlákna alebo úlohy. Bol implementovaný nový typ mapy pre vytváranie používateľských kruhových búferov (user ring buffer).
    • Bola pridaná špeciálna funkcia na pridelenie pamäte v BPF programoch (memory allocator), ktorá zabezpečuje bezpečnejšie rozdeľovanie pamäte v kontexte BPF než štandardný kmalloc().
    • Bola integrovaná prvá časť zmien, ktoré zabezpečujú možnosť vytvárania ovládačov pre vstupné zariadenia s rozhraním HID (Human Interface Device), realizovaných vo forme BPF programov.
    • Z jadra bol úplne odstránený kód na podporu formátu spustiteľných súborov a.out, ktorý bol klasifikovaný ako zastaraný vo verzii 5.1, a od verzií 5.18 a 5.19 bol vypnutý pre hlavné architektúry. Formát a.out sa už dlho nepoužíva na systémoch s Linuxom a generovanie súborov a.out nie je podporované modernými nástrojmi v predvolenej konfigurácii pre Linux. Zavadzovač pre a.out súbory môže byť implementovaný úplne v užívateľskom priestore.
    • Pre systémy založené na architektúre inštrukčného súboru LoongArch, používané v procesoroch Loongson 3 5000 a realizujúcej nový RISC ISA, podobný MIPS a RISC-V, bola implementovaná podpora udalostí merania výkonu (perf event), kexec, kdump a JIT kompilácie BPF.
    • V rozhraní asynchrónneho vstupu/výstupu io_uring bol navrhnutý nový režim IORING_SETUP_DEFER_TASKRUN, ktorý umožňuje dočasne odložiť vykonávanie prác súvisiacich s kruhovým búferom do momentu, kým nedostane požiadavku od aplikácie, čo môže byť využité na organizáciu vykonávania prác v dávkovom režime a zabránenie problémom s oneskorením spôsobeným pretesnením aplikácie v nevhodnom momente.
    • Procesom v užívateľskom priestore bola poskytnutá možnosť iniciovať transformáciu rozsahu bežných stránok pamäte na súbor veľkých stránok pamäte (Transparent Huge-Pages).
    • Pridaná implementácia zariadenia /dev/userfaultfd, ktorá umožňuje organizovať prístup k funkčnosti systémového volania userfaultfd() s využitím prístupových práv v FS. Funkcionalita userfaultfd umožňuje vytvárať spracovateľov prístupov k nealokovaným stránkam pamäte (page faults) v užívateľskom priestore.
    • Zvýšili sa požiadavky na verziu nástroja GNU Make — na zostavenie jadra je teraz potrebná verzia minimálne 3.82.
  • Diskový subsystém, I/O a súborové systémy
    • Do súborového systému Btrfs boli zavedené významné optimalizácie výkonu, vrátane niekoľkonásobného zvýšenia výkonu ioctl-výzvy FIEMAP. Pridaná podpora asynchrónneho vyrovnávacieho zápisu pre aplikácie využívajúce io_uring. Do operácie „send“ bola pridaná podpora súborov chránených pomocou fs-verity.
    • Vo FS ext4 boli pridané optimalizácie výkonu súvisiace s údržbou protokolu a prácou v režime len na čítanie.
    • Vo súborovom systéme EROFS (Enhanced Read-Only File System), určeného na použitie na oddieloch dostupných v režime len na čítanie, bola implementovaná možnosť spoločného uchovávania údajov, ktoré sa duplicujú v rôznych FS.
    • Do systémového volania statx() bola pridaná možnosť zobraziť informácie o možnosti aplikácie priamého vstupu/výstupu na súbor.
    • Do pod systému FUSE (Filesystems in User Space) bola pridaná podpora vytvárania dočasných súborov s vlajkou O_TMPFILE.
  • Virtualizácia a bezpečnosť
    • Implementácia mechanizmu ochrany CFI (Control Flow Integrity) bola zmenená. Tento mechanizmus pridáva pred každým nepriamym volaním funkcie kontrolu na identifikáciu určitých foriem neurčitého správania, ktoré by mohli potenciálne narušiť normálny priebeh vykonávania (control flow) v dôsledku použitia exploitov, ktoré menia uložené v pamäti ukazovatele na funkcie. Štandardná implementácia CFI z projektu LLVM bola nahradená variantom, ktorý je tiež založený na Clang, ale špeciálne prispôsobeným na ochranu nízkolevelových subsystémov a jadier operačných systémov. V LLVM bude nová implementácia navrhnutá vo vydaní Clang 16 a bude zahrnutá možnosťou „-fsanitize=kcfi“. Kľúčovým rozdielom novej implementácie je to, že nie je viazaná na optimalizácie v štádiu prepojenia (LTO) a nevedie k nahradeniu ukazovateľov funkcií referenciami v tabuľke prechodov.
    • Pre LSM moduly (Linux Security Module) bola poskytnutá možnosť vytvárať obsluhy, ktoré zachytávajú operácie pri vytváraní priestorov mien.
    • Boli poskytnuté prostriedky na overenie digitálnych podpisov PKCS#7 v BPF programoch.
    • Do /dev/random bola vrátená možnosť otvoriť v neblokovacom režime (O_NONBLOCK), ktorá bola neúmyselne odstránená v jadre 5.6.
    • Na systémoch s architektúrou x86 bola pridaná výstraha v prípade, že subsystémy jadra mapujú stránky pamäte, ktoré umožňujú súčasné vykonávanie aj zápis. V budúcnosti sa zvažuje možnosť úplne zakázať takéto mapovanie pamäte.
    • Bol pridaný debuggovací mechanizmus KMSAN (Kernel Memory Sanitizer) na identifikáciu používania neinicializovanej pamäte v jadre, ako aj únikov neinicializovanej pamäte medzi priestorom užívateľa a zariadeniami.
    • Boli vylepšenia v kryptograficky spoľahlivom generátore pseudonáhodných čísel CRNG, ktorý sa používa vo volaní getrandom. Zmeny pripravili Jason Donenfeld, autor VPN WireGuard, a sú zamerané na zvýšenie bezpečnosti pri získavaní pseudonáhodných celých čísel.
  • Sieťový subsystém
    • V TCP zásobníku bola implementovaná možnosť (vypnutá predvolene) oddeleného používania hash tabuliek soketov pre každý priestor mien, čo umožňuje zvýšiť výkon systémov s veľkým počtom priestorov mien.
    • Kód pro podporu zastaralého protokolu DECnet byl odstraněn. Pro uživatelský prostor zůstaly připravené API, které umožňují kompilaci aplikací využívajících DECnet, ale tato aplikace se nebude moci připojit k síti.
    • Byl zdokumentován protokol netlink.
  • Zariadenie
    • Do ovladače amdgpu byla přidána podpora přenosu DSC (Display Stream Compression) pro bezztrátovou kompresi dat při výměně informací s monitory, které podporují velmi vysoké rozlišení. Pokračuje práce na podpoře platforem AMD RDNA3 (RX 7000) a CDNA (Instinct). Přidána podpora IP komponent DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x a GMC 11.x. Do ovladače amdkfd (pro diskrétní GPU AMD, jako je Polaris) byla implementována podpora GFX 11.0.3.
    • Do ovladače i915 (Intel) byla zahrnuta podpora GPU Meteor Lake. Pro Meteor Lake a novější GPU byla zajištěna podpora rozhraní DP 2.0 (DisplayPort). Byly přidány identifikátory pro grafické karty založené na mikroarchitektuře Alder Lake S.
    • Byla přidána podpora audio subsystémů implementovaných v procesorech Apple Silicon, Intel SkyLake a Intel KabyLake. V audio ovladači CS35L41 HDA byla zajištěna podpora přechodu do spánkového režimu. Byla přidána podpora ASoC (ALSA System on Chip) pro integrované audio čipy Apple Silicon, AMD Rembrandt DSPs, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake a Kaby Lake, Mediatek MT8186, NXP i.MX8ULP DSPs, Qualcomm SC8280XP, SM8250, SM8450 a Texas Instruments SRC4392.
    • Byla přidána podpora LCD panelů Samsung LTL101AL01, B120XAN01.0, R140NWF5 RH, Densitron DMT028VGHMCMI-1A TFT, AUO B133UAN02.1, IVO M133NW4J-R3, Innolux N120ACA-EA1, AUO B116XAK01.6, BOE NT116WHM-N21, INX N116BCA-EA2, INX N116BCN-EA1, Multi-Inno Technology MI0800FT-9.
    • Byla přidána podpora AHCI SATA řadičů používaných v SoC Baikal-T1.
    • Byla přidána podpora Bluetooth čipů MediaTek MT7921, Intel Magnetor (CNVi, integrovaná konektivita), Realtek RTL8852C, RTW8852AE a RTL8761BUV (Edimax BT-8500).
    • Do ovladače ath11k pro bezdrátové moduly Qualcomm byla přidána podpora spektrálního skenování v rozsahu 160 MHz, byla implementována vícerozměrná NAPI, zlepšena podpora Wi-Fi čipů Qualcomm WCN6750.
    • Byly přidány ovladače pro klávesnice k PinePhone, touchpady InterTouch (ThinkPad P1 G3), X-Box Adaptive Controller, PhoenixRC Flight Controller, VRC-2 Car Controller, DualSense Edge Controller, ovládací panely IBM (IBM Operation Panel), ovladače XBOX One Elite, tablety XP-PEN Deco Pro S a Intuos Pro Small (PTH-460).
    • Byl přidán ovladač pro kryptografické akcelerátory Aspeed HACE (Hash and Crypto Engine).
    • Byla přidána podpora integrovaných Thunderbolt/USB4 řadičů Intel Meteor Lake.
    • Byla přidána podpora smartphonů Sony Xperia 1 IV, Samsung Galaxy E5, E7 a Grand Max, Pine64 Pinephone Pro.
    • Pridaná podpora ARM SoC a platforiem: AMD DaytonaX, Mediatek MT8186, Rockchips RK3399 a RK3566, TI AM62A, NXP i.MX8DXL, Renesas R-Car H3Ne-1.7G, Qualcomm IPQ8064-v2.0, IPQ8062, IPQ8065, Kontron SL/BL i.MX8MM OSM-S, MT8195 (Acer Tomato), Radxa ROCK 4C+, NanoPi R4S Enterprise Edition, JetHome JetHub D1p. Aktualizované ovládače pre SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom a NXP.

Zároveň latinskoamerický Fond voľného softvéru vytvoril variant úplne voľného jadra 6.1 — Linux-libre 6.1-gnu, vyčisteného od prvkov firmvéru a ovládačov obsahujúcich nevoľné komponenty alebo úseky kódu, ktorých rozsah použitia je obmedzený výrobcom. V novej verzii bola vykonaná čistka nového ovládača rtw8852b a DTS súborov pre rôzne SoC Qualcomm a MediaTek s procesormi na báze architektúry AArch64. Aktualizovaný kód čistenia blobov v ovládačoch a subsystémoch amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. Upravené čistenie zastaraných ovládačov tm6000 TV karty, cpia2 v4l, sp8870, av7110.

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