Két hónapos fejlesztés után Linus Torvalds bemutatta a Linux 6.1 kernel kiadását. A legfontosabb változások közé tartozik: a Rust nyelv támogatása illesztőprogramok és modulok fejlesztéséhez, a használt memóriaoldalak meghatározásának mechanizmusának modernizálása, egy speciális memória menedzser BPF programokhoz, a KMSAN memóriahibák diagnosztikai rendszere, a KCFI (Kernel Control-Flow Integrity) védelmi mechanizmus, valamint a Maple tree struktúra bevezetése.
Az új verzióhoz 15115 javítást fogadtak el 2139 fejlesztőtől, a patch mérete 51 MB, ami körülbelül kétszer kisebb a 6.0 és 5.19 kernel patchjeinél. A változások 13165 fájlt érintenek, 716247 sor kód került hozzáadásra, és 304560 sor eltávolításra. A 6.1-es verzióban bemutatott összes változás körülbelül 45%-a eszközillesztőkhez kapcsolódik, körülbelül 14%-a a hardverarchitektúrákhoz specifikus kód frissítésére vonatkozik, 14%-a a hálózati veremhez, 3%-a fájlrendszerekhez és 3%-a a kernel belső alrendszereihez.
A 6.1-es kernel fő újdonságai:
- Memória és rendszerszolgáltatások
- Bevezetésre került a Rust nyelv mint második nyelv az illesztőprogramok és kernel modulok fejlesztéséhez. A Rust támogatásának fő indítéka, hogy megkönnyítse a biztonságos és minőségi eszközillesztők megírását, csökkentve a memória kezelésében elkövetett hibák valószínűségét. A Rust támogatás alapértelmezés szerint inaktív, és nem vezet ahhoz, hogy a Rust a kernel kötelező build-függőségei közé kerüljön. A kernelbe egyelőre egy minimalizált változat patch-jei kerültek be, ami 40 ezer sor kódról 13 ezer sorra csökkent, és csak a legszükségesebb minimumot biztosítja egy egyszerű Rust nyelven írt kernel modul buildeléséhez. A jövőben fokozatosan tervezik a meglévő funkcionalitás bővítését, áthelyezve egyéb változtatásokat a Rust-for-Linux ágból. Párhuzamosan folyik a javasolt infrastruktúra fejlesztésére vonatkozó projektek kidolgozása NVMe meghajtók, a 9p hálózati protokoll és az Apple M1 GPU illesztőprogramjainak Rust nyelven történő fejlesztéséhez.
- Az AArch64, RISC-V és LoongArch architektúrákra alapozott rendszerekhez az EFI-n keresztüli közvetlen betöltés lehetősége valósult meg, amely lehetővé teszi a tömörített kernelképek közvetlen indítását. Hozzá lettek adva a kernelképek betöltésére, indítására és eltávolítására szolgáló kezelők, amelyek közvetlenül az EFI zbootból hívhatók meg. Szintén hozzá lettek adva a protokollok adatbázisból való telepítésére és eltávolítására szolgáló kezelők. Korábban a kicsomagolás külön betöltő segítségével történt, most azonban ezt a feladatot a kernel maga is el tudja végezni — a kernel képét EFI-alkalmazás formájában alakítják ki.
- A rendszerbe be lett fogadva néhány javítás, amelyek multifeladatos memória kezelésének megvalósítását célozzák, lehetővé téve a különböző teljesítményjellemzőkkel rendelkező memóriablokkok elkülönítését. Például a legintenzívebben használt lapok a leggyorsabb memóriában helyezkedhetnek el, míg a ritkán használt lapok viszonylag lassabb memóriában tárolhatók. A 6.1-es kernelbe be lett építve egy mechanizmus, amely meghatározza, hogy mely intenzíven használt lapok találhatóak lassú memóriában, és ezeket elősegíti a gyors memória felé, és megvalósításra került egy általános memória szintű koncepció és azok relatív teljesítménye.
- Be lett építve az MGLRU (Multi-Generational LRU) mechanizmus, amely leváltotta a régi LRU (Legutóbb Használt) megvalósítást, amely két soron alapult, egy többlépcsős struktúrára, amely jobban meghatározza, hogy mely memóriaoldalak valóban használatban vannak, és melyek hagyhatók el az oldalcsere területére.
- Hozzá lett adva az Oracle mérnökei által javasolt 'maple tree' adatszerkezet támogatása, amely hatékonyabb alternatívaként van pozicionálva a 'red-black tree' szerkezettel szemben. A maple tree egy B-fa változata, amely lehetővé teszi az értékek tartományának indexelését és a cache hatékony kihasználására lett tervezve. modern processzorok. A maple tree-re már át lettek alakítva néhány memória kezelés alrendszerei, ami kedvezően befolyásolta a teljesítményüket. A jövőben a maple tree a tartomány alapú zárolások (range locking) megvalósítására is használható lehet.
- A BPF alrendszerbe hozzáadták a „destruktív” BPF programok létrehozásának lehetőségét, amelyek kifejezetten a crash_kexec() hívás révén történő kényszerített leállítás kezdeményezésére készültek. Az ilyen BPF programokra szükség lehet hibakeresési célokból a crash-dump létrehozásának kezdeményezéséhez egy adott időpontban. A destruktív műveletekhez a BPF program betöltésekor meg kell adni a BPF_F_DESTRUCTIVE jelzőt, aktiválni kell a sysctl kernel.destructive_bpf_enabled beállítást, és szükséges a CAP_SYS_BOOT jogosultság.
- A BPF programok számára lehetőség nyílt a cgroup elemek bejárására, valamint a meghatározott szál vagy feladat (fájlok, vma, folyamatok stb.) erőforrásainak bejárására. Megvalósult egy új map-típus a felhasználói gyűrűs pufferek (user ring buffer) létrehozásához.
- Hozzáadtak egy speciális hívást a memória BPF programokban való allokálására (memory allocator), amely biztonságosabb memóriaelosztást biztosít a BPF kontextusában, mint a standard kmalloc().
- Integrálták a változtatások első részét, amelyek lehetővé teszik HID (Human Interface Device) interfészes bemeneti eszközök meghajtóinak létrehozását BPF program formájában.
- A kerneltől teljesen eltávolították az a.out futtatható fájlformátum támogatásához szükséges kódot, amely a 5.1-es verzióban elavulttá vált, és az 5.18 és 5.19-es verziókban letiltották a fő architektúrák számára. Az a.out formátum régóta nem használatos Linux rendszereken, és az a.out fájlok generálása modern eszközökkel alapértelmezett Linux beállításokkal nem támogatott. Az a.out fájlok betöltője teljes egészében a felhasználói térben valósítható meg.
- A LoongArch utasításkészlet architektúrájára alapozott rendszerek, amelyek a Loongson 3 5000 processzorokban használt új RISC ISA-t valósítanak meg, hasonlóan a MIPS és RISC-V architektúrákhoz, támogatják a teljesítménymérés eseményeit (perf event), a kexec-et, a kdump-ot és a BPF JIT-kompilációt.
- Az aszinkron I/O io_uring interfészben új IORING_SETUP_DEFER_TASKRUN módot javasoltak, amely lehetővé teszi a gyűrűs pufferekkel kapcsolatos feladatok végrehajtásának ideiglenes elhalasztását addig, amíg a kérés meg nem érkezik az alkalmazástól, ami a feladatok csoportos végrehajtásának megszervezésére és a késlekedési problémák elkerülésére használható, amikor az alkalmazás nem megfelelő időpontban van kiszorítva.
- A felhasználói térben megvalósított folyamatok számára lehetőség nyílik a normál memóriaoldalak tartományának átalakítására egy halom nagy memóriaoldallá (Transparent Huge-Pages).
- Megvalósításra került a /dev/userfaultfd eszköz, amely lehetővé teszi a userfaultfd() rendszerhívás funkcióihoz való hozzáférést a fájlrendszerben található hozzáférési jogok felhasználásával. A userfaultfd funkció lehetővé teszi a felhasználói térben lévő nem kiosztott memóriaoldalak (page faults) kezelésére szolgáló kezelők létrehozását.
- Növekedtek a GNU Make segédprogram verziójára vonatkozó követelmények - a kernel összeállításához mostantól legalább 3.82-es verzió szükséges.
- Lemezszubszisztéma, bemenet/kipontozás és fájlrendszerek
- Jelentős teljesítményoptimalizálásokat hajtottak végre a Btrfs fájlrendszerben, többek között a FIEMAP ioctl-hívás teljesítménye drámaian megnőtt. Támogatás került bevezetésre az aszinkron puffertárolásra az io_uring-ot használó alkalmazások számára. A "send" művelethez hozzáadódott a fs-verity segítségével védett fájlok támogatása.
- Az ext4 fájlrendszerben teljesítményoptimalizálások kerültek bevezetésre a napló fenntartása és az írásvédett üzemmódban való működés terén.
- Az EROFS (Enhanced Read-Only File System) fájlrendszer, amely írásvédett módban használható partíciókhoz készült, lehetőséget biztosít arra, hogy az adatokat közösen tárolják, amelyeket különböző fájlrendszerek duplikálnak.
- A statx() rendszerhívásba beépítették a fájlhoz közvetlen belépési/jelentkezési információk megjelenítésének lehetőségét.
- A FUSE (Filesystems in User Space) alrendszerbe lehetőség került bevezetésre ideiglenes fájlok O_TMPFILE zászlóval való létrehozására.
- Virtualizáció és biztonság
- A CFI (Control Flow Integrity) protection mechanism has been replaced, which adds checks before each indirect function call to identify certain forms of undefined behavior that could potentially disrupt the normal execution order (control flow) due to exploits altering stored function pointers in memory. The standard CFI implementation from the LLVM project has been replaced with a version also based on Clang, but specifically adapted for protecting low-level subsystems and operating system kernels. In LLVM, the new implementation will be proposed in the Clang 16 release and will be included with the option "-fsanitize=kcfi". A key difference in the new implementation is that it is not tied to optimizations at the linking stage (LTO) and does not lead to replacing function pointers with references in the transition table.
- For LSM modules (Linux Security Module), the ability to create handlers that intercept namespace creation operations has been provided.
- Tools have been provided to verify PKCS#7 digital signatures in BPF programs.
- The ability to open /dev/random in non-blocking mode (O_NONBLOCK), which was mistakenly removed in kernel 5.6, has been restored.
- On x86 architecture systems, a warning will be issued in the case of memory page mappings by kernel subsystems that allow both execution and writing. The possibility of completely prohibiting such memory mapping is being considered for the future.
- A KMSAN (Kernel Memory Sanitizer) debugging mechanism has been added to detect the use of uninitialized memory in the kernel, as well as leaks of uninitialized memory between user space and devices.
- Improvements have been made to the cryptographically secure pseudo-random number generator CRNG used in the getrandom call. The changes were prepared by Jason Donenfeld, the creator of WireGuard, and aim to enhance the security of extracting pseudo-random integers. VPN A feature (disabled by default) has been implemented in the TCP stack to separately use hash tables for sockets in each namespace, allowing for improved performance in systems with a large number of namespaces.
- Hálózati alrendszer
- A feature (disabled by default) has been implemented in the TCP stack to separately use hash tables for sockets in each namespace, allowing for improved performance in systems with a large number of namespaces.
- A DECnet elavult protokoll támogatásának kódja eltávolításra került. Az API helyettesítők a felhasználói térben megmaradtak, lehetővé téve a DECnet-et használó alkalmazások lefordítását, de ezek az alkalmazások nem tudnak csatlakozni a hálózathoz.
- A netlink protokoll dokumentálva lett.
- Hardver
- Az amdgpu drivert frissítették a DSC (Display Stream Compression) átjáró támogatásával, amely lehetővé teszi az adatveszteség nélküli adatkompressziót a nagyon magas felbontású kijelzőkkel való adatcserénél. Folyamatosan dolgoznak az AMD RDNA3 (RX 7000) és CDNA (Instinct) platformok támogatásának biztosításán. Támogatás került bevezetésre az IP komponensekhez: DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x és GMC 11.x. Az amdkfd drivernél (diszkrét AMD GPU-k, például Polaris számára) a GFX 11.0.3 támogatása is megvalósításra került.
- Az i915 (Intel) drivernél a Meteor Lake GPU támogatása került bevezetésre. A Meteor Lake és újabb GPU-k esetében a DP 2.0 (DisplayPort) interfész támogatása is biztosított. Az Alder Lake S mikroarchitektúrára épülő videokártyákhoz új azonosítók kerültek hozzáadásra.
- Támogatás került bevezetésre az Apple Silicon, Intel SkyLake és Intel KabyLake processzorokban megvalósított hangalrendszerekhez. A CS35L41 HDA hangmeghajtóban biztosítva lett a hibernálás támogatása. A beágyazott Apple Silicon hangchipek, AMD Rembrandt DSP-k, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake és Kaby Lake, Mediatek MT8186, NXP i.MX8ULP DSP-k, Qualcomm SC8280XP, SM8250, SM8450 és Texas Instruments SRC4392 ASoC (ALSA System on Chip) támogatása is megvalósult.
- Támogatás került bevezetésre a 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 és Multi-Inno Technology MI0800FT-9 LCD panelekhez.
- Támogatás került bevezetésre az SoC Baikal-T1-es AHCI SATA vezérlők használatához.
- Támogatás került bevezetésre a MediaTek MT7921, Intel Magnetor (CNVi, Integrated Connectivity), Realtek RTL8852C, RTW8852AE és RTL8761BUV (Edimax BT-8500) Bluetooth chippekhez.
- Az ath11k drivert frissítették a Qualcomm vezeték nélküli modulokhoz, hogy támogassa a 160 MHz-es spektrális szkennelést, megvalósítva a többszálú NAPI-t, és javítva a Qualcomm WCN6750 Wi-Fi chippek támogatását.
- Új driverek kerültek bevezetésre a PinePhone billentyűzetéhez, az InterTouch (ThinkPad P1 G3) touchpadokhoz, a X-Box Adaptive Controllerhez, a PhoenixRC Flight Controllerhez, a VRC-2 Car Controllerhez, a DualSense Edge Controllerhez, az IBM vezérlőpanelekhez (IBM Operation Panel), az XBOX One Elite távirányítókhoz és az XP-PEN Deco Pro S és Intuos Pro Small (PTH-460) táblagépekhez.
- Új drivert kaptak az Aspeed HACE (Hash and Crypto Engine) kriptográfiai gyorsítók.
- Támogatás került bevezetésre az Intel Meteor Lake integrált Thunderbolt/USB4 vezérlők számára.
- Támogatás került bevezetésre a Sony Xperia 1 IV, Samsung Galaxy E5, E7 és Grand Max, valamint a Pine64 Pinephone Pro okostelefonok számára.
- Hozzáadva az ARM SoC és lapkák támogatása: AMD DaytonaX, Mediatek MT8186, Rockchips RK3399 és 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. Frissített driverek a Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom és NXP SoC-hoz.
Eközben a latin-amerikai Szabad Szoftver Alapítvány bemutatta a teljesen szabad 6.1-es kernelt — Linux-libre 6.1-gnu, amely mentes a firmware-ekből és driverekből származó nem szabad összetevőktől vagy kódrészletektől, amelyek használatát a gyártó korlátozza. Az új kiadásban megtisztították az új rtw8852b drivert és a DTS fájlokat különböző Qualcomm és MediaTek SoC-okhoz, amelyek az AArch64 architektúrára alapoznak. Frissült a blobok tisztítási kódja az amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI driverekben és alrendszerekben. Korrigálták a régi tm6000 TV kártyák, cpia2 v4l, sp8870, av7110 driverek tisztítását.
Forrás: opennet.ru
