Vydání jádra Linux 6.1

Po dvou měsících vývoje představil Linus Torvalds vydání linuxového jádra 6.1. Mezi nejpozoruhodnější změny patří podpora vývoje ovladačů a modulů v jazyce Rust, modernizace mechanismu pro určování použitých paměťových stránek, speciální správce paměti pro programy BPF, systém pro diagnostiku problémů s pamětí KMSAN, KCFI (Kernelk Control -Flow Integrity) ochranný mechanismus, zavedení stromu struktury Maple.

Nová verze obsahuje 15115 2139 oprav od 51 2 vývojářů, velikost patche je 6.0 MB, což je přibližně 5.19x méně než velikost patchů z jader 13165 a 716247. Změny se dotkly 304560 45 souborů, bylo přidáno 6.1 14 řádků kódu a odstraněno 14 3 řádků. Přibližně 3 % všech změn zavedených v XNUMX se týká ovladačů zařízení, přibližně XNUMX % změn souvisí s aktualizací kódu specifického pro hardwarové architektury, XNUMX % se týká síťového zásobníku, XNUMX % se týkají souborových systémů a XNUMX % souvisí s vnitřními subsystémy jádra.

Klíčové inovace v jádře 6.1:

  • Paměťové a systémové služby
    • Přidána možnost používat Rust jako druhý jazyk pro vývoj ovladačů a modulů jádra. Hlavním důvodem podpory Rust je usnadnit zápis bezpečných a vysoce kvalitních ovladačů zařízení snížením pravděpodobnosti chyb při práci s pamětí. Podpora Rust je ve výchozím nastavení zakázána a nevede k tomu, aby byl Rust zahrnut jako povinná závislost sestavení jádra. Jádro zatím přijalo minimální, ořezanou verzi patchů, která byla zredukována ze 40 na 13 tisíc řádků kódu a poskytuje pouze nezbytné minimum, dostatečné pro sestavení jednoduchého modulu jádra napsaného v jazyce Rust. Do budoucna je plánováno postupné navyšování stávající funkcionality s přenesením dalších změn z větve Rust-for-Linux. Paralelně se vyvíjejí projekty využívající navrhovanou infrastrukturu k vývoji ovladačů pro disky NVMe, síťový protokol 9p a GPU Apple M1 v jazyce Rust.
    • Pro systémy založené na architekturách AArch64, RISC-V a LoongArch s EFI byla implementována možnost přímo načítat komprimované obrazy jádra. Přidány obslužné nástroje pro načítání, spouštění a uvolňování obrazů jádra, volané přímo z EFI zboot. Byly také přidány handlery pro instalaci a mazání protokolů z databáze protokolů EFI. Dříve bylo rozbalování prováděno samostatným zavaděčem, ale nyní to může být provedeno pomocí handleru v samotném jádře - obraz jádra je tvořen jako EFI aplikace.
    • Složení zahrnuje část patchů s implementací víceúrovňového modelu správy paměti, který umožňuje oddělit paměťové banky s různými výkonnostními charakteristikami. Například nejvíce používané stránky mohou být uloženy v nejrychlejší paměti, zatímco nejvzácněji používané stránky mohou být uloženy v relativně pomalé paměti. Kernel 6.1 zavádí mechanismus pro určování, kde se v pomalé paměti nacházejí silně používané stránky, aby mohly být povýšeny na rychlou paměť, a také zavádí obecný koncept paměťových vrstev a jejich relativního výkonu.
    • Zahrnuje mechanismus MGLRU (Multi-Generational LRU), který nahrazuje starou implementaci LRU (Least Last Last Used) založenou na dvou frontách s vícestupňovou strukturou, která lépe určuje, které paměťové stránky se skutečně používají a které lze vytlačit swapovací oddíl.
    • Přidána podpora pro datovou strukturu „javorového stromu“ navrženou inženýry společnosti Oracle, která je umístěna jako efektivnější náhrada za strukturu „červeno-černý strom“. Maple tree je varianta B-stromu, která podporuje indexování rozsahu a je navržena tak, aby efektivně využívala mezipaměť moderních procesorů. Některé subsystémy správy paměti již byly převedeny do javorového stromu, což mělo pozitivní vliv na jejich výkon. V budoucnu může být javorový strom použit k implementaci zamykání rozsahu.
    • Do subsystému BPF byla přidána možnost vytvářet „destruktivní“ programy BPF speciálně navržené pro spuštění nouzového vypnutí pomocí volání crash_kexec(). Takové programy BPF mohou být vyžadovány pro účely ladění, aby v určitém okamžiku zahájily vytváření výpisu zhroucení. Pro přístup k destruktivním operacím při načítání programu BPF musíte zadat příznak BPF_F_DESTRUCTIVE, aktivovat sysctl kernel.destructive_bpf_enabled a mít práva CAP_SYS_BOOT.
    • U programů BPF je možné vyjmenovat prvky cgroup, stejně jako vyjmenovat zdroje (soubory, vma, procesy atd.) konkrétního vlákna nebo úlohy. Byl implementován nový typ mapy pro vytváření uživatelských kruhových vyrovnávacích pamětí.
    • Přidáno speciální volání pro alokaci paměti v programech BPF (alokátor paměti), které poskytuje bezpečnější alokaci paměti v kontextu BPF než standardní kmalloc().
    • První část změn byla integrována, poskytující možnost vytvářet ovladače pro vstupní zařízení s rozhraním HID (Human Interface Device), implementované ve formě programů BPF.
    • Jádro zcela odstranilo kód pro podporu formátu spustitelných souborů a.out, který byl ve verzi 5.1 zastaralý a od verzí 5.18 a 5.19 byl pro hlavní architektury zakázán. Formát a.out je v systémech Linux již dlouho zastaralý a generování souborů a.out není podporováno moderními nástroji ve výchozích konfiguracích Linuxu. Zavaděč pro soubory a.out lze implementovat zcela v uživatelském prostoru.
    • Pro systémy založené na architektuře instrukční sady LoongArch používané v procesorech Loongson 3 5000 a implementující nový RISC ISA, podobný MIPS a RISC-V, je implementována podpora událostí měření výkonu (perf events), kexec, kdump a kompilace BPF JIT. .
    • Asynchronní I/O rozhraní io_uring nabízí nový režim IORING_SETUP_DEFER_TASKRUN, který umožňuje dočasně odložit práci související s kruhovou vyrovnávací pamětí, dokud není podán požadavek aplikace, což lze použít k dávkové práci a vyhnout se problémům s latencí kvůli preempci. špatný čas.
    • Procesům v uživatelském prostoru je dána schopnost zahájit konverzi řady normálních paměťových stránek na sadu velkých paměťových stránek (Transparent Huge-Pages).
    • Přidána implementace zařízení /dev/userfaultfd, které umožňuje přístup k funkcionalitě systémového volání userfaultfd() pomocí přístupových práv ve FS. Funkce userfaultfd vám umožňuje vytvářet obslužné rutiny pro přístup ke stránkám s nepřidělenou pamětí (chyby stránek) v uživatelském prostoru.
    • Požadavky na verzi nástroje GNU Make byly zvýšeny – pro sestavení jádra je nyní vyžadována alespoň verze 3.82.
  • Diskový subsystém, I/O a souborové systémy
    • V souborovém systému Btrfs byly provedeny výrazné optimalizace výkonu, řádově se zvýšil výkon volání FIEMAP ioctl. Přidána podpora pro asynchronní vyrovnávací paměti pro aplikace používající io_uring. Do operace „odeslat“ byla přidána podpora pro soubory chráněné pomocí fs-verity.
    • Souborový systém ext4 přidal optimalizaci výkonu související s údržbou žurnálu a provozem pouze pro čtení.
    • Souborový systém EROFS (Enhanced Read-Only File System), navržený pro použití na oddílech přístupných v režimu pouze pro čtení, implementuje schopnost sdílet data duplikovaná v různých souborových systémech.
    • Bylo přidáno systémové volání statx() pro zobrazení informací o tom, zda lze na soubor použít přímý vstup/výstup.
    • Do subsystému FUSE (Filesystems in User Space) byla přidána podpora pro vytváření dočasných souborů s příznakem O_TMPFILE.
  • Virtualizace a bezpečnost
    • Implementace ochranného mechanismu CFI (Control Flow Integrity) byla nahrazena přidáním kontrol před každým nepřímým voláním funkce k detekci některých forem nedefinovaného chování, které by mohlo potenciálně vést k porušení normálního prováděcího příkazu (kontrolního toku). výsledek použití exploitů, které mění ukazatele na funkce uložené v paměti. Standardní implementace CFI z projektu LLVM byla nahrazena možností také založenou na použití Clang, ale speciálně upravenou pro ochranu nízkoúrovňových subsystémů a jader operačních systémů. V LLVM bude ve verzi Clang 16 nabídnuta nová implementace a bude povolena volbou "-fsanitize=kcfi". Klíčový rozdíl oproti nové implementaci spočívá v tom, že není vázána na optimalizace doby propojení (LTO) a nevede k nahrazení ukazatelů funkcí odkazy v tabulce skoků.
    • Pro moduly LSM (Linux Security Module) je možné vytvořit handlery, které zachycují operace za účelem vytváření jmenných prostorů.
    • K dispozici jsou nástroje pro ověřování digitálních podpisů PKCS#7 v programech BPF.
    • Možnost otevřít v neblokujícím režimu (O_NONBLOCK), která byla neúmyslně odstraněna v jádře 5.6, byla vrácena do /dev/random.
    • Na systémech s architekturou x86 bylo přidáno varování pro případ mapování paměťových stránek subsystémy jádra, které současně umožňují provádění a zápis. Do budoucna se zvažuje možnost úplného zákazu takového mapování paměti.
    • Přidán mechanismus ladění KMSAN (Kernel Memory Sanitizer) pro detekci neinicializovaného využití paměti v jádře a také neinicializovaných úniků paměti mezi uživatelským prostorem a zařízeními.
    • Vylepšení bylo provedeno u krypto-zabezpečeného generátoru pseudonáhodných čísel CRNG používaného v getrandom volání. Změny připravil Jason A. Donenfeld, autor VPN WireGuard, a mají za cíl zlepšit zabezpečení pseudonáhodné extrakce celých čísel.
  • Síťový subsystém
    • Zásobník TCP poskytuje možnost (ve výchozím nastavení zakázáno) používat soketové hash tabulky samostatně pro každý jmenný prostor, což zlepšuje výkon na systémech s velkým počtem jmenných prostorů.
    • Odebrán kód pro podporu staršího protokolu DECnet. Papíry API uživatelského prostoru jsou ponechány na místě, aby bylo možné kompilovat aplikace, které používají DECnet, ale tyto aplikace se nebudou moci připojit k síti.
    • Protokol netlink je zdokumentován.
  • Оборудование
    • Ovladač amdgpu přidal podporu pro předávání DSC (Display Stream Compression) pro bezztrátovou kompresi dat při výměně informací s obrazovkami, které podporují velmi vysoká rozlišení. Pokračuje práce na poskytování podpory pro platformy AMD RDNA3 (RX 7000) a CDNA (Instinct). Přidána podpora pro DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x a GMC 11.x IP komponenty. Ovladač amdkfd (pro diskrétní GPU AMD, jako je Polaris) poskytuje podporu pro GFX 11.0.3.
    • Ovladač i915 (Intel) obsahuje podporu pro GPU Meteor Lake. Meteor Lake a novější GPU podporují rozhraní DP 2.0 (DisplayPort). Přidány identifikátory pro grafické karty založené na mikroarchitektuře Alder Lake S.
    • Přidána podpora pro audio subsystémy implementované v procesorech Apple Silicon, Intel SkyLake a Intel KabyLake. Zvukový ovladač CS35L41 HDA podporuje režim spánku. Přidána podpora ASoC (ALSA System on Chip) pro 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
    • Přidána podpora pro LCD panely Samsung LTL101AL01, B120XAN01.0, R140NWF5 RH, Densitron DMT028VGHMCMI-1A TFT, AUO B133UAN02.1, IVO M133NW4J-R3, Innolux N120ACA-1X116AK.01.6ACA-116EA21. M-N116, INX N2BCA- EA116, INX N1BCN-EA0800, technologie Multi-Inno MI9FT-XNUMX.
    • Přidána podpora pro AHCI SATA řadiče používané v Baikal-T1 SoC.
    • Přidána podpora Bluetooth čipů MediaTek MT7921, Intel Magnetor (CNVi, Integrated Connectivity), Realtek RTL8852C, RTW8852AE a RTL8761BUV (Edimax BT-8500).
    • Ovladač ath11k pro bezdrátové moduly Qualcomm přidal podporu pro spektrální skenování v rozsahu 160 MHz, implementoval vícevláknové NAPI a vylepšenou podporu pro Wi-Fi čipy Qualcomm WCN6750.
    • Přidány ovladače pro klávesnici PinePhone, touchpady InterTouch (ThinkPad P1 G3), adaptivní ovladač X-Box, letový ovladač PhoenixRC, ovladač VRC-2, ovladač DualSense Edge, ovládací panel IBM, dálkové ovladače XBOX One Elite, tablety XP-PEN Deco Pro S a Intuos Pro Small (PTH-460).
    • Přidán ovladač pro kryptografické akcelerátory Aspeed HACE (Hash and Crypto Engine).
    • Přidána podpora pro integrované řadiče Thunderbolt/USB4 Intel Meteor Lake.
    • Přidána podpora pro smartphony Sony Xperia 1 IV, Samsung Galaxy E5, E7 a Grand Max, Pine64 Pinephone Pro.
    • Přidána podpora pro ARM SoC a desky: AMD DaytonaX, Mediatek MT8186, Rockchips RK3399 a RK3566, TI AM62A, NXP i.MX8DXL, Renesas R-Car H3Ne-1.7G, Qualcomm IPQ8064-v2.0, IPQ8062tron, IPQ8065tron, IPQ8 BL i.MX8195MM OSM-S, MT4 (Acer Tomato), Radxa ROCK 4C+, NanoPi R1S Enterprise Edition, JetHome JetHub DXNUMXp. Aktualizované ovladače pro SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom a NXP.

Zároveň Latinskoamerická nadace pro svobodný software vytvořila verzi zcela svobodného jádra 6.1 - Linux-libre 6.1-gnu, zbavenou prvků firmwaru a ovladačů obsahujících nesvobodné komponenty nebo části kódu, jehož rozsah je omezena výrobcem. Nová verze čistí nový ovladač rtw8852b a soubory DTS pro různé SoC Qualcomm a MediaTek s procesory založenými na architektuře AArch64. Aktualizovaný kód čištění objektů blob v ovladačích a podsystémech amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. Opraveno čištění zastaralých ovladačů TV karty tm6000, cpia2 v4l, sp8870, av7110.

Zdroj: opennet.ru

Přidat komentář