Po dvou měsících vývoje představil Linus Torvalds uvolnění jádra Linux 6.1. Mezi nejvýraznějšími změnami: podpora vývoje ovladačů a modulů v jazyce Rust, modernizace mechanismu určování používaných stránek paměti, speciální správce paměti pro programy BPF, systém diagnostiky problémů s pamětí KMSAN, mechanismus ochrany KCFI (Kernel Control-Flow Integrity), zavedení struktury Maple tree.
Do nové verze bylo přijato 15115 oprav od 2139 vývojářů, velikost patche je 51 MB, což je přibližně dvakrát méně než velikosti patchů od jader 6.0 a 5.19. Změny se dotkly 13165 souborů, bylo přidáno 716247 řádků kódu, odstraněno 304560 řádků. Přibližně 45 % všech předložených změn v jádře 6.1 se týká ovladačů zařízení, asi 14 % změn se vztahuje na aktualizaci kódu specifického pro hardwarové architektury, 14 % souvisí s síťovým zásobníkem, 3 % se týkají souborových systémů a 3 % s vnitřními subsystémy jádra.
Hlavní novinky v jádře 6.1:
- Paměť a systémové služby
- Byla přidána možnost použití jazyka Rust jako druhého jazyka pro vývoj ovladačů a modulů jádra. Hlavním motivem podpory Rustu je usnadnění psaní bezpečných a kvalitních ovladačů zařízení tím, že se sníží pravděpodobnost vzniku chyb při práci s paměťmi. Podpora Rustu není ve výchozím stavu aktivní a nevede k zařazení Rustu mezi povinné závislosti pro kompilaci jádra. Do jádra byl dosud přijat minimální zkrácený variant patchů, který byl zkrácen z 40 na 13 tisíc řádků kódu a zajišťuje pouze nezbytné minimum, dostatečné pro sestavení jednoduchého modulu jádra napsaného v jazyce Rust. V budoucnu se plánuje postupné zvyšování existující funkčnosti přenášením dalších změn z větve Rust-for-Linux. Paralelně probíhá vývoj projektů zaměřených na využití navrhované infrastruktury pro vývoj ovladačů zařízení NVMe, síťového protokolu 9p a GPU Apple M1.
- Pro systémy založené na architekturách AArch64, RISC-V a LoongArch s EFI byla implementována možnost přímého spuštění komprimovaných obrazů jádra. Byly přidány obslužné rutiny pro načítání, spouštění a uvolňování obrazů jádra, které jsou přímo volány z EFI zboot. Rovněž byly přidány obslužné rutiny pro instalaci a odstraňování protokolů z databáze protokolů EFI. Dříve probíhala dekomprese samostatným načítačem, nyní může tento proces provádět obslužná rutina přímo v jádře – obraz jádra je vytvářen jako EFI aplikace.
- Do jádra byly zahrnuty některé patche s implementací víceúrovňového modelu správy paměti, který umožňuje rozdělení paměťových bank podle různých výkonových charakteristik. Například nejintenzivněji používané stránky mohou být umístěny v nejrychlejší paměti, zatímco méně používané stránky mohou být uchovávány v relativně pomalé paměti. Do jádra 6.1 byl přijat mechanismus pro identifikaci intenzivně používaných stránek v pomalé paměti, aby mohly být přesunuty do rychlé paměti, a byla implementována obecná koncepce úrovní paměti a jejich relativního výkonu.
- Byl zahrnut mechanismus MGLRU (Multi-Generational LRU), který nahradil starou implementaci LRU (Least Recently Used) založenou na dvou frontách vícestupňovou strukturou, lépe určující, které stránky paměti jsou skutečně používány a které lze odstranit do swapu.
- Byla přidána podpora datové struktury "maple tree" navržené inženýry firmy Oracle, která je prezentována jako efektivnější náhrada struktury "red-black tree". Maple tree představuje variantu B-tree, která podporuje indexaci podle rozsahů hodnot a je navržena pro efektivní využití cache. moderních procesorů. Některé subsystémy správy paměti byly již převedeny na maple tree, což pozitivně ovlivnilo jejich výkon. V budoucnu může být maple tree použita k implementaci zamykání podle rozsahů (range locking).
- Do subsystému BPF byla přidána možnost vytváření "destruktivních" BPF programů, které jsou speciálně navrženy pro iniciaci havarijního ukončení pomocí volání crash_kexec(). Takové BPF programy mohou být potřeba pro ladicí účely k iniciaci vytvoření crash dumpu v určitém okamžiku. Pro přístup k destruktivním operacím při načítání BPF programu je vyžadováno nastavení příznaku BPF_F_DESTRUCTIVE, aktivace sysctl kernel.destructive_bpf_enabled a mít oprávnění CAP_SYS_BOOT.
- Pro BPF programy byla poskytnuta možnost procházet prvky cgroup, stejně jako procházet zdroje (soubory, vma, procesy atd.) určitého vlákna nebo úlohy. Byl implementován nový typ mapy pro vytváření uživatelských kruhových bufferů (user ring buffer).
- Bylo přidáno speciální volání pro alokaci paměti v BPF programech (memory allocator), které zajišťuje bezpečnější rozdělení paměti v kontextu BPF než standardní kmalloc().
- Byla integrována první část změn, které umožňují vytváření ovladačů pro vstupní zařízení s rozhraním HID (Human Interface Device) implementovaných ve formě BPF programů.
- Z jádra byl zcela odstraněn kód pro podporu formátu spustitelných souborů a.out, který byl označen jako zastaralý ve verzi 5.1 a od verzí 5.18 a 5.19 byl zakázán pro hlavní architektury. Formát a.out se již dlouho nepoužívá na systémech s Linuxem a generování souborů a.out není podporováno moderními nástroji ve výchozích konfiguracích pro Linux. Bootloader pro soubory a.out může být implementován zcela v prostoru uživatele.
- Pro systémy založené na architektuře sady instrukcí LoongArch, používané v procesorech Loongson 3 5000 a implementující novou RISC ISA, podobnou MIPS a RISC-V, byla implementována podpora událostí měření výkonu (perf event), kexec, kdump a JIT kompilace BPF.
- V rozhraní asynchronního vstupu/výstupu io_uring byl navržen nový režim IORING_SETUP_DEFER_TASKRUN, který umožňuje dočasně odložit provádění úloh spojených s kruhovým bufferem do doby, než přijde požadavek od aplikace, což může být využito k uspořádání provádění úloh v dávkovém režimu a k prevenci problémů se zpožděním způsobeným vyhnáním aplikace v nevhodný okamžik.
- Procesech v uživatelském prostoru byla poskytnuta možnost iniciovat převod rozsahu běžných stránek paměti na sadu velkých stránek paměti (Transparent Huge-Pages).
- Byla přidána implementace zařízení /dev/userfaultfd, která umožňuje organizovat přístup k funkcionalitě systémového volání userfaultfd() pomocí přístupových práv v FS. Funkcionalita userfaultfd umožňuje vytvářet zpracovatele volání na nepřidělené stránky paměti (page faults) v uživatelském prostoru.
- Byly zvýšeny požadavky na verzi utility GNU Make — pro sestavení jádra je nyní potřeba minimálně verze 3.82.
- Diskový subsystém, vstup/výstup a souborové systémy
- Do souborového systému Btrfs byly provedeny značné optimalizace výkonu, mimo jiné byla zvýšena výkonnost ioctl-volání FIEMAP. Byla přidána podpora pro asynchronní vyrovnávací zápis pro aplikace využívající io_uring. Do operace „send“ byla přidána podpora pro soubory chráněné pomocí fs-verity.
- Do souborového systému ext4 byly přidány optimalizace výkonu spojené s údržbou protokolu a prací v režimu pouze pro čtení.
- V souborovém systému EROFS (Enhanced Read-Only File System), určeném pro použití na oddílech dostupných v režimu pouze pro čtení, byla realizována možnost sdíleného uchovávání dat, která se duplikují v různých FS.
- Do systémového volání statx() byla přidána možnost výstupu informací o možnosti aplikace přímého vstupu/výstupu na soubor.
- 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
- Byla nahrazena implementace mechanismu ochrany CFI (Control Flow Integrity), který přidává před každým nepřímým voláním funkce kontrolu pro odhalení některých forem neurčitého chování, které mohou potenciálně vést k narušení normálního pořadí vykonávání (control flow) v důsledku použití exploitů, které mění uložené v paměti ukazatele na funkce. Standardní implementace CFI z projektu LLVM byla nahrazena variantou, která je rovněž založena na použití Clang, ale speciálně přizpůsobenou pro ochranu nízkoúrovňových subsystémů a jader operačních systémů. V LLVM bude nová implementace navržena v vydání Clang 16 a bude zahrnuta volbou "-fsanitize=kcfi". Klíčovým rozdílem nové implementace je to, že není vázána na optimalizace v době spojování (LTO) a nevede k nahrazení ukazatelů funkcí odkazy v tabulce přechodů.
- Pro moduly LSM (Linux Security Module) byla poskytnuta možnost vytváření handlerů, které zachycují operace související s vytvářením jmenovacích prostorů.
- Byly poskytnuty prostředky pro verifikaci digitálních podpisů PKCS#7 v BPF programech.
- V /dev/random byla obnovena možnost otevření v nebločeném režimu (O_NONBLOCK), která byla omylem odstraněna v jádře 5.6.
- Na systémech s architekturou x86 byla přidána výstraha v případě mapování subsystémy jádra stránek paměti, které současně umožňují vykonání a zápis. V budoucnu se zvažuje možnost úplného zákazu takového mapování paměti.
- Byl přidán ladicí mechanismus KMSAN (Kernel Memory Sanitizer) pro odhalení používání neinitializované paměti v jádře, stejně jako úniků neinitializované paměti mezi prostorem uživatele a zařízeními.
- Byla provedena vylepšení v kryptograficky spolehlivém generátoru pseudonáhodných čísel CRNG, který se používá v volání getrandom. Změny připravil Jason Donenfeld, autor WireGuard a jsou zaměřeny na zvýšení bezpečnosti extrakce pseudonáhodných celých čísel. VPN V TCP stacku byla implementována možnost (ve výchozím stavu vypnuta) samostatného používání hash tabulek socketů pro každý jmenovací prostor, což umožňuje zvýšení výkonu systémů s větším počtem jmenovacích prostorů.
- Síťová subsystém
- V TCP stacku byla implementována možnost (ve výchozím stavu vypnuta) samostatného používání hash tabulek socketů pro každé jmenovací prostor, což umožňuje zvýšení výkonu systémů s větším počtem jmenovacích prostorů.
- Byl odstraněn kód pro podporu zastaralého protokolu DECnet. Pro uživatelské prostor byly zachovány API zástupce, které umožňují kompilaci aplikací používajících DECnet, ale tyto aplikace se nebudou moci připojit k síti.
- Byl zdokumentován protokol netlink.
- Hardware
- Do ovladače amdgpu byla přidána podpora pro průchod DSC (Display Stream Compression) pro bezztrátové stlačení dat při výměně informací s obrazovkami podporujícími velmi vysoké rozlišení. Pokračovalo se v práci na podpoře platforem AMD RDNA3 (RX 7000) a CDNA (Instinct). Byla přidána podpora pro IP komponenty DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x a GMC 11.x. V ovladači amdkfd (pro diskrétní GPU AMD, jako jsou Polaris) byla implementována podpora GFX 11.0.3.
- Ve ovladači i915 (Intel) byla zapnuta 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 pro zvukové subsystémy implementované v procesorech Apple Silicon, Intel SkyLake a Intel KabyLake. V zvukovém 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é zvukové čipy Apple Silicon, AMD Rembrandt 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.
- 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 pro AHCI SATA kontroléry, které se používají v SoC Baikal-T1.
- Byla přidána podpora pro Bluetooth čipy MediaTek MT7921, Intel Magnetor (CNVi, Integrated Connectivity), Realtek RTL8852C, RTW8852AE a RTL8761BUV (Edimax BT-8500).
- Ve ovladači ath11k pro bezdrátové moduly Qualcomm byla přidána podpora pro spektrální skenování v rozsahu 160 MHz, byl implementován vícetrhu 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 pro integrované Thunderbolt/USB4 kontroléry Intel Meteor Lake.
- Byla přidána podpora pro smartphony Sony Xperia 1 IV, Samsung Galaxy E5, E7 a Grand Max, Pine64 Pinephone Pro.
- Byla přidána podpora ARM SoC a desek: 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. Byly aktualizovány ovladače pro SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom a NXP.
Současně latinskoamerická Nadace svobodného softwaru vytvořila variantu plně svobodného jádra 6.1 — Linux-libre 6.1-gnu, zbaveného prvků firmwaru a ovladačů obsahujících nesvobodné komponenty nebo části kódu, jejichž použití je omezeno výrobcem. V nové verzi byla provedena čistka nového ovladače rtw8852b a DTS-souborů pro různé SoC Qualcomm a MediaTek s procesory založenými na architektuře AArch64. Bylo aktualizováno čištění blobů v ovladačích a subsystémech amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. Bylo upraveno čištění zastaralých ovladačů tm6000 TV karet, cpia2 v4l, sp8870, av7110.
Zdroj: opennet.ru
