Efter to måneders udvikling præsenterede Linus Torvalds udgivelsen af Linux-kernen 6.1. Blandt de mest markante ændringer er: støtte til udvikling af drivere og moduler på Rust-sprog, opgradering af mekanismen til bestemmelse af anvendte hukommelsessider, en særlig hukommelsesmanager til BPF-programmer, et diagnostisk system til hukommelsesproblemer KMSAN, mekanismen til beskyttelse KCFI (Kernel Control-Flow Integrity) samt implementeringen af Maple tree-strukturen.
I den nye version er der sammenlagt 15115 rettelser fra 2139 udviklere, patch-størrelsen er 51 MB, hvilket er cirka dobbelt så lille som patch-størrelserne fra kernerne 6.0 og 5.19. Ændringerne berører 13165 filer, 716247 linjer kode er tilføjet, og 304560 linjer er fjernet. Omkring 45% af de præsenterede ændringer i 6.1 vedrører enhedsdrivere, cirka 14% vedrører opdatering af hardware-specifik kode, 14% vedrører netværksstakken, 3% vedrører filsystemer, og 3% vedrører interne kernen subsystems.
De vigtigste nyheder i kernen 6.1:
- Hukommelse og systemtjenester
- Muligheden for at bruge Rust-sprog som det sekundære sprog til udvikling af drivere og moduler i kernen er tilføjet. Hovedmotivet for at støtte Rust er at forenkle skrivningen af sikre og kvalitetsdrivere til enheder ved at mindske sandsynligheden for at begå fejl i forbindelse med hukommelse. Rust-support er ikke aktiv som standard og fører ikke til, at Rust bliver en obligatorisk byggeafhængighed for kernen. Der er indtil videre accepteret en minimal reduceret variant af patches, som er skåret ned fra 40 til 13 tusinde linjer kode og kun sikre det nødvendige minimum, der er tilstrækkeligt til at bygge et simpelt kernen modul skrevet på Rust. Fremover planlægges det gradvist at øge den eksisterende funktionalitet ved at overføre andre ændringer fra Rust-for-Linux-grenen. Samtidig udvikles projekter til brug af den foreslåede infrastruktur til at udvikle drivere til NVMe-lagring, netværksprotokollen 9p og GPU Apple M1 med Rust.
- For systems based on AArch64, RISC-V, and LoongArch architectures with EFI, direct booting from compressed kernel images is now possible. Handlers have been added for loading, launching, and unloading kernel images, called directly from EFI zboot. Additionally, handlers for installing and removing protocols from the EFI protocol database have been implemented. Previously, unpacking was done by a separate bootloader, but now this can be managed by the kernel handler itself — the kernel image is formed as an EFI application.
- A portion of patches with the implementation of a multi-tiered memory management model has been accepted, allowing the separation of memory banks with different performance characteristics. For example, the most frequently used pages can be placed in the fastest memory, while rarely used pages may be stored in relatively slower memory. In kernel 6.1, a mechanism has been adopted to determine the location of frequently accessed pages in slow memory for their promotion to fast memory, as well as a general concept of memory levels and their relative performance.
- The MGLRU (Multi-Generational LRU) mechanism has been included, which replaced the old LRU (Least Recently Used) implementation based on two queues with a multi-level structure that better determines which memory pages are genuinely in use and which can be evicted to the swap area.
- Support has been added for the data structure 'maple tree' proposed by Oracle engineers, which is positioned as a more efficient replacement for the 'red-black tree' structure. The maple tree is a variant of B-tree that supports indexing by ranges of values and is designed for efficient cache usage. moderne processorerSome memory management subsystems have already been translated to use the maple tree, positively impacting their performance. In the future, maple tree may be used to implement range locking.
- BPF-subsystemen har fået muligheden for at oprette "destruktive" BPF-programmer, der er specielt designet til at initiere en nødstop via kaldet crash_kexec(). Sådanne BPF-programmer kan være nødvendige til fejlsøgning for at initiere oprettelsen af en crash dump på et bestemt tidspunkt. For at få adgang til destruktive operationer ved indlæsning af BPF-programmet kræves angivelse af flaget BPF_F_DESTRUCTIVE, aktivering af sysctl kernel.destructive_bpf_enabled og besiddelse af rettighederne CAP_SYS_BOOT.
- BPF-programmerne har nu mulighed for at iterere over cgroup-elementer samt iterere over ressourcer (filer, vma, processer osv.) for en bestemt tråd eller opgave. Der er implementeret en ny map-type til oprettelse af brugerdefinerede ringbuffere (user ring buffer).
- Der er tilføjet et særligt kald til hukommelsesallokering i BPF-programmer (memory allocator), som sikrer en mere sikker hukommelsesfordeling i BPF-konteksten end standard kmalloc().
- Den første del af ændringerne, der muliggør oprettelse af drivere til inputenheder med HID (Human Interface Device) interface, er integreret i form af BPF-programmer.
- Koden til at understøtte a.out eksekverbare filformater er helt fjernet fra kernen, hvilket blev forældet i version 5.1, og fra versionerne 5.18 og 5.19 blev det deaktiveret for de primære arkitekturer. a.out-formatet anvendes sjældent på Linux-systemer, og generering af a.out-filer understøttes ikke af moderne værktøjer i standard Linux-konfigurationer. Loaderen for a.out-filer kan implementeres fuldt ud i brugerrummet.
- For systemer baseret på LoongArch-arkitekturen, der anvendes i Loongson 3 5000-processorerne og implementerer en ny RISC ISA, der ligner MIPS og RISC-V, er der implementeret support til måling af præstationsbegivenheder (perf event), kexec, kdump og JIT-kompilering af BPF.
- I grænsefladen for asynkron input/output io_uring er der foreslået en ny tilstand IORING_SETUP_DEFER_TASKRUN, der gør det muligt midlertidigt at udsætte udførelsen af opgaver relateret til ringbufferen, indtil der kommer en anmodning fra applikationen, hvilket kan bruges til at organisere opgaver i batchmode og forhindre problemer med forsinkelser på grund af, at applikationen bliver fortrængt på uheldige tidspunkter.
- Brugerlandets processer har fået mulighed for at initiere konvertering af et område af almindelige hukommelsessider til et sæt af store hukommelsessider (Transparent Huge-Pages).
- Implementeringen af en enhed /dev/userfaultfd er blevet tilføjet, hvilket muliggør adgang til funktionaliteten af systemopkaldet userfaultfd() med brug af adgangsrettigheder i filsystemet. Funktionaliteten userfaultfd gør det muligt at oprette håndterere til sidefejl (page faults) i brugerområdet.
- Kravene til versionen af værktøjet GNU Make er blevet hævet — mindst version 3.82 er nu nødvendig for at kompilere kernen.
- DiskSubsystem, input/output og filsystemer
- Der er foretaget betydelige præstationsoptimeringer i filsystemet Btrfs, herunder en betydelig stigning i ydeevnen af ioctl-opkaldet FIEMAP. Der er tilføjet støtte til asynkron buffermodtagelse for applikationer, der bruger io_uring. Støtte til filer beskyttet med fs-verity er blevet tilføjet til 'send'-operationen.
- I filsystemet ext4 er der tilføjet præstationsoptimeringer i forbindelse med vedligeholdelse af journalen og drift i skrivebeskyttet tilstand.
- I filsystemet EROFS (Enhanced Read-Only File System), der er beregnet til brug på partitioner tilgængelige i skrivebeskyttet tilstand, er muligheden for deling af data, der duplikeres i forskellige filsystemer, blevet implementeret.
- Til systemopkaldet statx() er der tilføjet muligheden for at udtrække oplysninger om muligheden for direkte input/output anvendt på en fil.
- Der er tilføjet støtte til oprettelse af midlertidige filer med flaget O_TMPFILE i FUSE (Filesystems in User Space) subsystemet.
- Virtualisering og sikkerhed
- Implementeringen af CFI (Control Flow Integrity) beskyttelsesmekanismen er blevet ændret. Den tilføjer en kontrol for at opdage nogle former for uidentificeret adfærd før hver indirekte funktionsopkald, som potentielt kan føre til afvigelse fra den normale kontrolstrøm som følge af exploiter, der ændrer de i hukommelsen gemte funktionspegepinde. Den oprindelige CFI-implementering fra LLVM-projektet er blevet erstattet med en variant, der også er baseret på Clang, men som er specielt tilpasset til beskyttelse af lavniveau subsystems og operativsystemkerner. Den nye implementering vil blive præsenteret i Clang 16 og kan aktiveres med indstillingen "-fsanitize=kcfi". En central forskel i den nye implementering er, at den ikke er knyttet til optimeringer ved sammenkædning (LTO) og ikke fører til, at funktionspegepinde erstattes med referencer i springtabet.
- For LSM-moduler (Linux Security Module) er der tilføjet mulighed for at skabe håndteringsfunktioner, der opsnapper operationer til oprettelse af navnerum.
- Der er blevet tilvejebragt midler til verificering af digitale signaturer PKCS#7 i BPF-programmer.
- Muligheden for at åbne /dev/random i ikke-blokeringsmode (O_NONBLOCK) er blevet genindført, efter at den ved en fejl blev fjernet i kerne 5.6.
- På x86-arkitekturssystemer er der blevet tilføjet en advarsel ved kortlægning af hukommelsessider af kerne-subsystemer, der samtidig tillader udførelse og skrivning. Det overvejes muligvis at forbyde sådanne hukommelseskortlægninger helt.
- Der er tilføjet en debug-mekanisme KMSAN (Kernel Memory Sanitizer) til at identificere brug af ikke-initialiseret hukommelse i kernen samt lækager af ikke-initialiseret hukommelse mellem brugerrum og enheder.
- Der er blevet foretaget forbedringer i den kryptosikre pseudorandom number generator CRNG, der anvendes i getrandom-opkaldet. Ændringerne er udarbejdet af Jason A. Donenfeld, forfatter til WireGuard, og sigter mod at øge sikkerheden ved udtrækning af pseudorandom heltal. VPN I TCP-stakken er der realiseret muligheden (deaktivert som standard) for separat brug af hash-tabeller for sockets i hvert navnerum, hvilket muliggør forbedret ydeevne for systemer med mange navnerum.
- Netværkssubsystem
- I TCP-stakken er der implementeret (deaktiveret som standard) muligheden for separat brug af hash-tabeller for sockets i hvert navnerum, hvilket kan forbedre ydeevnen for systemer med mange navnerum.
- Koden til støtte for den forældede DECnet-protokol er blevet fjernet. Der er efterladt API-pladsholdere til brugermiljøet, som muliggør kompilering af applikationer, der bruger DECnet, men disse applikationer vil ikke kunne oprette forbindelse til netværket.
- Netlink-protokollen er dokumenteret.
- Udstyr
- I amdgpu-driveren er der tilføjet støtte til DSC (Display Stream Compression) for tabsfri data kompression ved udveksling af oplysninger med skærme som understøtter meget høj opløsning. Arbejdet med at støtte AMD RDNA3-platforme (RX 7000) og CDNA (Instinct) er fortsat. Støtte er tilføjet for IP-komponenter DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x og GMC 11.x. I amdkfd-driveren (til diskrete AMD GPU'er som Polaris) er GFX 11.0.3-støtte implementeret.
- I i915-driveren (Intel) er der tilføjet støtte til Meteor Lake GPU'er. For Meteor Lake og nyere GPU'er er der tilføjet støtte for DP 2.0 (DisplayPort) interfacen. Identifikatorer for grafikprocessorer baseret på Alder Lake S mikroarkitekturen er blevet tilføjet.
- Støtte til lydsystemer implementeret i Apple Silicon, Intel SkyLake og Intel KabyLake processorer er blevet tilføjet. I lyd-driveren CS35L41 HDA er der tilføjet støtte for dvaletilstand. Støtte til ASoC (ALSA System on Chip) for indbyggede lydchips fra Apple Silicon, AMD Rembrandt DSP'er, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake og Kaby Lake, Mediatek MT8186, NXP i.MX8ULP DSP'er, Qualcomm SC8280XP, SM8250, SM8450, og Texas Instruments SRC4392 er blevet tilføjet.
- Støtte til LCD-paneler som 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 er blevet tilføjet.
- Støtte til AHCI SATA-controllere, der anvendes i Baikal-T1 SoC, er blevet tilføjet.
- Support til Bluetooth-chips MediaTek MT7921, Intel Magnetor (CNVi, Integrated Connectivity), Realtek RTL8852C, RTW8852AE og RTL8761BUV (Edimax BT-8500) er blevet tilføjet.
- I ath11k-driveren for Qualcomm trådløse moduler er der tilføjet støtte til spektret scanning i 160 MHz-båndet, implementeret flertrådet NAPI og forbedret support til Qualcomm WCN6750 Wi-Fi-chips.
- Drivere til tastaturer til PinePhone, touchpads InterTouch (ThinkPad P1 G3), X-Box Adaptive Controller, PhoenixRC Flight Controller, VRC-2 Car Controller, DualSense Edge Controller, IBM kontrolpaneler (IBM Operation Panel), XBOX One Elite controllere, XP-PEN Deco Pro S og Intuos Pro Small (PTH-460) er blevet tilføjet.
- Driver til cryptographic accelerators Aspeed HACE (Hash and Crypto Engine) er blevet tilføjet.
- Støtte til integrerede Thunderbolt/USB4 controllere Intel Meteor Lake er blevet tilføjet.
- Støtte til smartphones Sony Xperia 1 IV, Samsung Galaxy E5, E7 og Grand Max, Pine64 Pinephone Pro er blevet tilføjet.
- Understøttelse af ARM SoC og kort er blevet tilføjet: AMD DaytonaX, Mediatek MT8186, Rockchips RK3399 og 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. Drivere for SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom og NXP er blevet opdateret.
Samtidig har den latinamerikanske Free Software Foundation udviklet en fuldstændig fri variant af kernen 6.1 — Linux-libre 6.1-gnu, der er renset for firmware- og driverkomponenter, der indeholder ikke-frie elementer eller kodeafsnit, hvis anvendelse er begrænset af producenten. I den nye udgivelse er der udført en oprydning af den nye driver rtw8852b samt DTS-filer til forskellige SoC Qualcomm og MediaTek med processorer baseret på AArch64-arkitekturen. Rensningskoden for blobs i driverne og subsystemerne amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI er blevet opdateret. Oprydningen af de forældede drivere tm6000 TV-kort, cpia2 v4l, sp8870, av7110 er blevet justeret.
Kilde: opennet.ru
