Vydanie jadra Linux 6.1

Po dvoch mesiacoch vývoja predstavil Linus Torvalds vydanie linuxového jadra 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žitých pamäťových stránok, špeciálny správca pamäte pre programy BPF, systém na diagnostiku problémov s pamäťou KMSAN, KCFI (Kernelk Control -Flow Integrity) ochranný mechanizmus, zavedenie stromu štruktúry Maple.

Nová verzia obsahuje 15115 2139 opráv od 51 2 vývojárov, veľkosť opravy je 6.0 MB, čo je približne 5.19-krát menej ako veľkosť opráv z jadier 13165 a 716247. Zmeny sa dotkli 304560 45 súborov, 6.1 14 riadkov kódu bolo pridaných a 14 3 riadkov bolo odstránených. Asi 3 % všetkých zmien zavedených v XNUMX súvisí s ovládačmi zariadení, približne XNUMX % zmien súvisí s aktualizáciou kódu špecifického pre hardvérové ​​architektúry, XNUMX % súvisí so sieťovým zásobníkom, XNUMX % sa týka súborových systémov a XNUMX % súvisia s internými subsystémami jadra.

Kľúčové inovácie v jadre 6.1:

  • Pamäťové a systémové služby
    • Pridaná možnosť použiť Rust ako druhý jazyk na vývoj ovládačov a modulov jadra. Hlavným dôvodom podpory Rustu je uľahčenie zápisu bezpečných a kvalitných ovládačov zariadení znížením pravdepodobnosti chýb pri práci s pamäťou. Podpora Rust je predvolene vypnutá a nevedie k tomu, že Rust bude zahrnutý ako požadovaná závislosť zostavenia jadra. Jadro zatiaľ prijalo minimálnu, orezanú verziu záplat, ktorá bola zredukovaná zo 40 na 13 tisíc riadkov kódu a poskytuje len nevyhnutné minimum, postačujúce na zostavenie jednoduchého modulu jadra napísaného v jazyku Rust. V budúcnosti sa plánuje postupné zvyšovanie existujúcej funkcionality, pričom sa prenesú ďalšie zmeny z vetvy Rust-for-Linux. Paralelne sa vyvíjajú projekty na využitie navrhovanej infraštruktúry na vývoj ovládačov pre disky NVMe, sieťový protokol 9p a GPU Apple M1 v jazyku Rust.
    • Pre systémy založené na architektúrach AArch64, RISC-V a LoongArch s EFI bola implementovaná možnosť priameho načítania komprimovaných obrazov jadra. Pridané obslužné programy pre načítanie, spustenie a uvoľnenie obrazov jadra, volané priamo z EFI zboot. Pridané boli aj obslužné programy na inštaláciu a odstraňovanie protokolov z databázy protokolov EFI. Predtým sa rozbaľovanie vykonávalo samostatným zavádzačom, ale teraz to môže robiť obsluha v samotnom jadre - obraz jadra je vytvorený ako aplikácia EFI.
    • Zloženie obsahuje časť záplat s implementáciou viacúrovňového modelu správy pamäte, ktorý umožňuje oddeliť pamäťové banky s rôznymi výkonnostnými charakteristikami. Napríklad najviac používané stránky môžu byť uložené v najrýchlejšej pamäti, zatiaľ čo najzriedkavejšie používané stránky môžu byť uložené v relatívne pomalej pamäti. Kernel 6.1 zavádza mechanizmus na určovanie, kde sa v pomalej pamäti nachádzajú veľmi používané stránky, aby mohli byť povýšené na rýchlu pamäť, a tiež zavádza všeobecný koncept pamäťových vrstiev a ich relatívneho výkonu.
    • Zahŕňa mechanizmus MGLRU (Multi-Generational LRU), ktorý nahrádza starú implementáciu LRU (Least Last Last Used) založenú na dvoch frontoch s viacstupňovou štruktúrou, ktorá lepšie určuje, ktoré pamäťové stránky sa skutočne používajú a ktoré je možné vytlačiť swapový oddiel.
    • Pridaná podpora pre dátovú štruktúru „javorového stromu“ navrhnutú inžiniermi Oracle, ktorá je umiestnená ako efektívnejšia náhrada za štruktúru „červeno-čierneho stromu“. Maple tree je variant B-stromu, ktorý podporuje indexovanie rozsahu a je navrhnutý tak, aby efektívne využíval vyrovnávaciu pamäť moderných procesorov. Niektoré podsystémy správy pamäte už boli prenesené do javorového stromu, čo malo pozitívny vplyv na ich výkon. V budúcnosti môže byť javorový strom použitý na implementáciu uzamknutia rozsahu.
    • Do subsystému BPF bola pridaná možnosť vytvárať „deštruktívne“ programy BPF špeciálne navrhnuté na spustenie núdzového vypnutia prostredníctvom volania crash_kexec(). Takéto programy BPF môžu byť potrebné na účely ladenia, aby sa v určitom časovom bode iniciovalo vytvorenie výpisu pri zlyhaní. Ak chcete získať prístup k deštruktívnym operáciám pri zavádzaní programu BPF, musíte zadať príznak BPF_F_DESTRUCTIVE, aktivovať sysctl kernel.destructive_bpf_enabled a mať práva CAP_SYS_BOOT.
    • Pre programy BPF je možné enumerovať prvky cgroup, ako aj enumerovať zdroje (súbory, vma, procesy atď.) konkrétneho vlákna alebo úlohy. Bol implementovaný nový typ mapy na vytváranie používateľských kruhových vyrovnávacích pamätí.
    • Pridané špeciálne volanie na alokáciu pamäte v programoch BPF (alokátor pamäte), ktoré poskytuje bezpečnejšiu alokáciu pamäte v kontexte BPF ako štandardné kmalloc().
    • Prvá časť zmien bola integrovaná, poskytujúca možnosť vytvárať ovládače pre vstupné zariadenia s rozhraním HID (Human Interface Device), implementované vo forme programov BPF.
    • Jadro úplne odstránilo kód na podporu formátu spustiteľného súboru a.out, ktorý bol vo verzii 5.1 zastaraný a od verzie 5.18 a 5.19 bol pre hlavné architektúry zakázaný. Formát a.out je v systémoch Linux už dávno zastaraný a generovanie súborov a.out nie je podporované modernými nástrojmi v predvolených konfiguráciách Linuxu. Loader pre súbory a.out môže byť implementovaný úplne v užívateľskom priestore.
    • Pre systémy založené na architektúre inštrukčnej sady LoongArch používanej v procesoroch Loongson 3 5000 a implementujúcej nový RISC ISA, podobný MIPS a RISC-V, je implementovaná podpora pre udalosti merania výkonu (perf events), kexec, kdump a BPF JIT kompilácia .
    • Asynchrónne I/O rozhranie io_uring ponúka nový režim IORING_SETUP_DEFER_TASKRUN, ktorý umožňuje dočasné odloženie práce súvisiacej s kruhovou vyrovnávacou pamäťou, kým sa nevykoná žiadosť aplikácie, čo možno použiť na dávkovú prácu a vyhnúť sa problémom s latenciou v dôsledku preempcie. nesprávny čas.
    • Procesy v užívateľskom priestore majú schopnosť iniciovať konverziu rozsahu normálnych pamäťových stránok na množinu veľkých pamäťových stránok (Transparent Huge-Pages).
    • Pridaná implementácia zariadenia /dev/userfaultfd, ktorá umožňuje prístup k funkcionalite systémového volania userfaultfd() pomocou prístupových práv vo FS. Funkcionalita userfaultfd vám umožňuje vytvárať obslužné programy na prístup k stránkam s nepridelenou pamäťou (chyby stránok) v užívateľskom priestore.
    • Požiadavky na verziu nástroja GNU Make boli zvýšené - na zostavenie jadra je teraz potrebná aspoň verzia 3.82.
  • Diskový subsystém, I/O a súborové systémy
    • V súborovom systéme Btrfs boli vykonané významné optimalizácie výkonu, okrem iného sa rádovo zvýšil výkon volania FIEMAP ioctl. Pridaná podpora pre asynchrónne zápisy s vyrovnávacou pamäťou pre aplikácie používajúce io_uring. Do operácie „odoslať“ bola pridaná podpora pre súbory chránené fs-verity.
    • Súborový systém ext4 pridal optimalizácie výkonu súvisiace s údržbou žurnálu a prevádzkou iba na čítanie.
    • Súborový systém EROFS (Enhanced Read-Only File System), navrhnutý na použitie na oddieloch prístupných v režime len na čítanie, implementuje možnosť zdieľania údajov duplikovaných v rôznych súborových systémoch.
    • Systémové volanie statx() bolo pridané na zobrazenie informácií o tom, či je možné na súbor použiť priame I/O.
    • Do subsystému FUSE (Filesystems in User Space) bola pridaná podpora pre vytváranie dočasných súborov s príznakom O_TMPFILE.
  • Virtualizácia a bezpečnosť
    • Implementácia ochranného mechanizmu CFI (Control Flow Integrity) bola nahradená pridaním kontrol pred každým nepriamym volaním funkcie na zistenie niektorých foriem nedefinovaného správania, ktoré by potenciálne mohlo viesť k porušeniu normálneho vykonávacieho príkazu (kontrolný tok) ako napr. výsledkom používania exploitov, ktoré menia ukazovatele na funkcie uložené v pamäti. Štandardná implementácia CFI z projektu LLVM bola nahradená možnosťou tiež založenou na použití Clang, ale špeciálne upravenou na ochranu nízkoúrovňových subsystémov a jadier operačných systémov. V LLVM bude nová implementácia ponúknutá vo vydaní Clang 16 a bude povolená pomocou voľby "-fsanitize=kcfi". Kľúčový rozdiel oproti novej implementácii je v tom, že nie je viazaná na optimalizáciu času prepojenia (LTO) a nevedie k nahradeniu ukazovateľov funkcií odkazmi v tabuľke skokov.
    • Pre moduly LSM (Linux Security Module) je možné vytvárať manipulátory, ktoré zachytávajú operácie na vytváranie menných priestorov.
    • K dispozícii sú nástroje na overovanie digitálnych podpisov PKCS#7 v programoch BPF.
    • Možnosť otvárania v neblokujúcom režime (O_NONBLOCK), ktorá bola neúmyselne odstránená v jadre 5.6, bola vrátená do /dev/random.
    • Na systémoch s architektúrou x86 bolo pridané varovanie v prípade mapovania pamäťových stránok podsystémami jadra, ktoré súčasne umožňujú vykonávanie a zápis. V budúcnosti sa zvažuje možnosť úplného zákazu takéhoto mapovania pamäte.
    • Pridaný mechanizmus ladenia KMSAN (Kernel Memory Sanitizer) na detekciu neinicializovaného využitia pamäte v jadre, ako aj neinicializovaných únikov pamäte medzi užívateľským priestorom a zariadeniami.
    • Vylepšenia boli vykonané v krypto-bezpečnom generátore pseudonáhodných čísel CRNG, ktorý sa používa v getrandom hovore. Zmeny pripravil Jason A. Donenfeld, autor VPN WireGuard a sú zamerané na zlepšenie bezpečnosti extrakcie pseudonáhodných celých čísel.
  • Sieťový subsystém
    • Zásobník TCP poskytuje možnosť (v predvolenom nastavení zakázanú) používať hašovacie tabuľky soketov samostatne pre každý menný priestor, čo zlepšuje výkon na systémoch s veľkým počtom menných priestorov.
    • Odstránený kód na podporu staršieho protokolu DECnet. Stupy API používateľského priestoru sú ponechané na mieste, aby umožnili kompiláciu aplikácií, ktoré používajú DECnet, ale tieto aplikácie sa nebudú môcť pripojiť k sieti.
    • Protokol netlink je zdokumentovaný.
  • Оборудование
    • Ovládač amdgpu pridal podporu pre preposielanie DSC (Display Stream Compression) pre bezstratovú kompresiu dát pri výmene informácií s obrazovkami, ktoré podporujú veľmi vysoké rozlíšenie. Pokračuje práca na poskytovaní podpory pre platformy AMD RDNA3 (RX 7000) a CDNA (Instinct). Pridaná podpora pre komponenty DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x a GMC 11.x IP. Ovládač amdkfd (pre samostatné grafické procesory AMD, ako je Polaris) poskytuje podporu pre GFX 11.0.3.
    • Ovládač i915 (Intel) obsahuje podporu pre GPU Meteor Lake. Meteor Lake a novšie GPU podporujú rozhranie DP 2.0 (DisplayPort). Pridané identifikátory pre grafické karty založené na mikroarchitektúre Alder Lake S.
    • Pridaná podpora pre audio subsystémy implementované v procesoroch Apple Silicon, Intel SkyLake a Intel KabyLake. Zvukový ovládač CS35L41 HDA podporuje režim spánku. Pridaná podpora ASoC (ALSA System on Chip) pre integrované audio čipy Apple Silicon, AMD Rembrant DSP, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake a Kaby Lake, Mediatek MT8186, NXP i.MX8ULP DSP, Qualcomm SC8280XP, SM8250 SM8450 a Texas Instruments SRC4392
    • Pridaná podpora pre LCD panely Samsung LTL101AL01, B120XAN01.0, R140NWF5 RH, Densitron DMT028VGHMCMI-1A TFT, AUO B133UAN02.1, IVO M133NW4J-R3, Innolux N120ACA-BEEX1AK116. M-N01.6, INX N116BCA- EA21 , INX N116BCN-EA2, technológia Multi-Inno MI116FT-1.
    • Pridaná podpora pre AHCI SATA radiče používané v Baikal-T1 SoC.
    • Pridaná podpora pre Bluetooth čipy MediaTek MT7921, Intel Magnetor (CNVi, Integrated Connectivity), Realtek RTL8852C, RTW8852AE a RTL8761BUV (Edimax BT-8500).
    • Ovládač ath11k pre bezdrôtové moduly Qualcomm pridal podporu pre spektrálne skenovanie v rozsahu 160 MHz, implementoval viacvláknové NAPI a vylepšenú podporu pre Wi-Fi čipy Qualcomm WCN6750.
    • Pridané ovládače pre klávesnicu PinePhone, touchpady InterTouch (ThinkPad P1 G3), adaptívny ovládač X-Box, letový ovládač PhoenixRC, ovládač do auta VRC-2, ovládač DualSense Edge, operačný panel IBM, diaľkové ovládače XBOX One Elite, tablety XP-PEN Deco Pro S a Intuos Pro Small (PTH-460).
    • Pridaný ovládač pre kryptografické urýchľovače Aspeed HACE (Hash and Crypto Engine).
    • Pridaná podpora pre integrované ovládače Thunderbolt/USB4 Intel Meteor Lake.
    • Pridaná podpora pre smartfóny Sony Xperia 1 IV, Samsung Galaxy E5, E7 a Grand Max, Pine64 Pinephone Pro.
    • Pridaná podpora pre ARM SoC a dosky: AMD DaytonaX, Mediatek MT8186, Rockchips RK3399 a RK3566, TI AM62A, NXP i.MX8DXL, Renesas R-Car H3Ne-1.7G, Qualcomm IPQ8064-v2.0, IPQ8062tron, IPQ8065 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.

Latinskoamerická nadácia pre slobodný softvér zároveň vytvorila verziu úplne slobodného jadra 6.1 - Linux-libre 6.1-gnu, zbavenú prvkov firmvéru a ovládačov obsahujúcich neslobodné komponenty alebo časti kódu, ktorých rozsah je limitované výrobcom. Nové vydanie čistí nový ovládač rtw8852b a súbory DTS pre rôzne SoC Qualcomm a MediaTek s procesormi založenými na architektúre AArch64. Aktualizovaný kód čistenia blob v ovládačoch a podsystémoch amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. Vyčistenie zastaraných ovládačov TV karty tm6000, cpia2 v4l, sp8870, av7110 bolo opravené.

Zdroj: opennet.ru

Pridať komentár