Na twee maanden ontwikkeling heeft Linus Torvalds de release van de Linux-kernel 6.1 gepresenteerd. Enkele opvallende veranderingen zijn: ondersteuning voor de ontwikkeling van stuurprogramma's en modules in de programmeertaal Rust, een geüpdatet mechanisme voor het bepalen van gebruikte geheugensegmenten, een speciale geheugenbeheerder voor BPF-programma's, een systeem voor het diagnosticeren van geheugproblemen genaamd KMSAN, een mechanisme voor bescherming genaamd KCFI (Kernel Control-Flow Integrity), en de introductie van de Maple tree-structuur.
In de nieuwe versie zijn 15.115 correcties van 2.139 ontwikkelaars opgenomen, de patchgrootte bedraagt 51 MB, wat ongeveer de helft is van de patchgrootte van de kernels 6.0 en 5.19. De veranderingen hebben betrekking op 13.165 bestanden, er zijn 716.247 regels code toegevoegd en 304.560 regels verwijderd. Ongeveer 45% van alle veranderingen in 6.1 heeft betrekking op stuurprogramma's, ongeveer 14% van de wijzigingen houdt verband met updates van code die specifiek is voor hardwarearchitecturen, 14% betreft het netwerkstack, 3% met bestandssystemen en 3% met interne subsystems van de kernel.
Belangrijkste innovaties in kernel 6.1:
- Geheugen en systeemdiensten
- De mogelijkheid om Rust als tweede taal te gebruiken voor de ontwikkeling van stuurprogramma's en kernelmodules is toegevoegd. De belangrijkste motivatie voor de ondersteuning van Rust is het vereenvoudigen van het schrijven van veilige en kwalitatieve stuurprogramma's door de kans op fouten in geheugentoegang te verkleinen. Rust-ondersteuning is standaard inactief en leidt niet tot het opnemen van Rust als verplichte bouwafhankelijkheid voor de kernel. Voorlopig is er slechts een minimale, ingekorte versie van de patches geaccepteerd, die is verminderd van 40.000 naar 13.000 regels code en alleen de noodzakelijke minimumvereisten biedt om een eenvoudig kernelmodule, geschreven in Rust, te bouwen. In de toekomst is het de bedoeling om geleidelijk de bestaande functionaliteit uit te breiden door andere wijzigingen van de Rust-for-Linux-tak over te brengen. Tegelijkertijd worden projecten ontwikkeld voor het gebruik van de voorgestelde infrastructuur voor het ontwikkelen van stuurprogramma's in Rust voor NVMe-opslagapparaten, het netwerkprotocol 9p en de Apple M1 GPU.
- Voor systemen op basis van AArch64-, RISC-V- en LoongArch-architecturen met EFI is de mogelijkheid van directe opstart met gecomprimeerde kernelafbeeldingen geïmplementeerd. Er zijn handlers toegevoegd voor het laden, starten en ontladen van kernelafbeeldingen, die rechtstreeks vanuit EFI zboot worden aangeroepen. Ook zijn er handlers voor het installeren en verwijderen van protocollen uit de EFI-protocoldatabase toegevoegd. Voorheen gebeurde de decompressie door een aparte bootloader, maar nu kan de handler in de kernel zelf dit uitvoeren — de kernelafbeelding wordt gevormd als een EFI-toepassing.
- Een deel van de patches voor het implementeren van een gelaagd geheugencontrolesysteem is aangenomen, dat het mogelijk maakt om geheugenbanken met verschillende prestatiekenmerken te scheiden. Bijvoorbeeld, de meest intensief gebruikte pagina’s kunnen in het snelste geheugen worden geplaatst, terwijl zelden gebruikte pagina’s in relatief langzaam geheugen worden opgeslagen. In de kernel 6.1 is een mechanisme aangenomen voor het bepalen van intensief gebruikte pagina’s in langzaam geheugen, zodat ze naar snel geheugen kunnen worden verplaatst, en er is een algemene conceptie van geheugenlagen en hun relatieve prestaties geïmplementeerd.
- Er is een MGLRU (Multi-Generational LRU) mechanisme opgenomen, dat de oude implementatie van LRU (Least Recently Used) op basis van twee wachtrijen heeft vervangen door een meertrapsstructuur, die beter in staat is vast te stellen welke geheugenpagina's daadwerkelijk worden gebruikt, en welke kunnen worden vervangen in de swapruimte.
- Ondersteuning is toegevoegd voor de door Oracle-ingenieurs voorgestelde datastructuur ‘maple tree’, die wordt gepresenteerd als een efficiëntere vervanging voor de ‘red-black tree’-structuur. Maple tree is een variant van de B-tree, die indexering op basis van waarde-intervallen ondersteunt en is ontworpen voor efficiënt cachegebruik. moderne processorenSommige subsysteemcomponenten voor geheugencapaciteitsbeheer zijn al omgezet naar de maple tree, wat hun prestaties positief heeft beïnvloed. In de toekomst kan de maple tree worden gebruikt voor het implementeren van gebiedsvergrendelingen (range locking).
- In het BPF-systeem is de mogelijkheid toegevoegd om "destructieve" BPF-programma's te creëren, die speciaal zijn ontworpen om een noodstop in te luiden via de aanroep crash_kexec(). Dergelijke BPF-programma's kunnen nodig zijn voor debugdoeleinden om een crashdump op een specifiek moment te initiëren. Voor toegang tot destructieve operaties bij het laden van een BPF-programma is het nodig om de vlag BPF_F_DESTRUCTIVE op te geven, sysctl kernel.destructive_bpf_enabled te activeren en over de rechten CAP_SYS_BOOT te beschikken.
- Voor BPF-programma's is de mogelijkheid toegevoegd om elementen van cgroup te doorlopen, evenals om middelen (bestanden, vma, processen, enzovoort) van een specifieke thread of taak door te lopen. Een nieuw map-type is geïmplementeerd voor het creëren van gebruikersringenbuffers (user ring buffers).
- Een speciale aanroep voor geheugenallocatie in BPF-programma's is toegevoegd, die een veiligere geheugenverdeling in de context van BPF biedt dan de standaard kmalloc().
- De eerste fase van wijzigingen is geïntegreerd, die de mogelijkheid biedt om drivers voor invoerapparaten met een HID (Human Interface Device) interface te creëren, uitgevoerd in de vorm van BPF-programma's.
- De code ter ondersteuning van het uitvoerbare bestandsformaat a.out is volledig uit de kernel verwijderd, dat in versie 5.1 als verouderd werd gemarkeerd en vanaf versies 5.18 en 5.19 is uitgeschakeld voor de belangrijkste architecturen. Het a.out-formaat wordt al lange tijd niet meer gebruikt op Linux-systemen, en het genereren van a.out-bestanden wordt niet meer ondersteund door moderne hulpmiddelen in de standaard Linux-configuraties. De loader voor a.out-bestanden kan volledig in de gebruikersruimte worden geïmplementeerd.
- Voor systemen op basis van de LoongArch-instructieset, gebruikt in Loongson 3 5000-processoren en die een nieuwe RISC ISA implementeren, vergelijkbaar met MIPS en RISC-V, is ondersteuning voor prestaties meetevenementen (perf event), kexec, kdump en JIT-compilatie van BPF geïmplementeerd.
- In de interface voor asynchrone invoer/uitvoer io_uring is een nieuwe modus IORING_SETUP_DEFER_TASKRUN geïntroduceerd, waarmee het tijdelijk mogelijk is om de taken die met de ringbuffer zijn verbonden uit te stellen tot er een verzoek van de applicatie binnenkomt, wat kan worden gebruikt om taken in batchmodus uit te voeren en vertragingen te voorkomen door het afstoten van de applicatie op een ongelegen moment.
- Gebruikersruimtes kunnen nu de transformatie van een bereik van reguliere geheugenspagina's naar een set grote geheugenspagina's (Transparent Huge-Pages) initiëren.
- Een implementatie van het apparaat \/dev\/userfaultfd is toegevoegd, waarmee toegang tot de functionaliteit van de systeemaanroep userfaultfd() kan worden georganiseerd met gebruik van bestandsrechten. De functionaliteit van userfaultfd maakt het mogelijk om handlers te maken voor niet-toegewezen geheugenspagina's (page faults) in de gebruikersruimte.
- De vereisten voor de versie van de GNU Make-hulpprogramma zijn verhoogd — voor het compileren van de kernel is nu minimaal versie 3.82 vereist.
- Opslagsubsystemen, invoer/uitvoer en bestandssystemen
- Er zijn aanzienlijke prestatieoptimalisaties aangebracht in het Btrfs-bestandssysteem, waaronder een orde verhoging van de prestaties van de ioctl-aanroep FIEMAP. Ondersteuning voor asynchrone gebufferde schrijfacties is toegevoegd voor applicaties die io_uring gebruiken. De operatie 'send' heeft ondersteuning gekregen voor bestanden die zijn beveiligd met fs-verity.
- Prestatieoptimalisaties zijn toegevoegd aan het ext4-bestandssysteem, gerelateerd aan het onderhouden van het logboek en het werken in alleen-lezen modus.
- In het EROFS (Enhanced Read-Only File System), bedoeld voor gebruik op partities die alleen-lezen zijn, is de mogelijkheid van gedeeld opslag van gegevens die in verschillende bestandenystemen dupliceren, geïmplementeerd.
- Aan de systeemaanroep statx() is de mogelijkheid toegevoegd om informatie te verstrekken over het toepassen van directe invoer\/uitvoer op een bestand.
- De FUSE (Filesystems in User Space)-subsystem heeft ondersteuning gekregen voor het creëren van tijdelijke bestanden met de vlag O_TMPFILE.
- Virtualisatie en beveiliging
- De implementatie van het CFI (Control Flow Integrity) beschermingsmechanisme is gewijzigd, waarbij voor elke indirecte functieaanroep een controle wordt toegevoegd om bepaalde vormen van onbepaald gedrag te identificeren die mogelijk kunnen leiden tot het verstoren van de normale uitvoering (control flow) als gevolg van exploits die opgeslagen functiepointers in het geheugen wijzigen. De standaardimplementatie van CFI van het LLVM-project is vervangen door een variant die ook gebruik maakt van Clang, maar speciaal is aangepast om laag-niveau subsystemen en besturingssysteemkernen te beschermen. In LLVM zal de nieuwe implementatie worden aangeboden in de release van Clang 16 en kan deze worden ingeschakeld met de optie "-fsanitize=kcfi". Het belangrijkste verschil met de nieuwe implementatie is dat deze niet is gebonden aan optimalisaties in de linkfase (LTO) en niet leidt tot het vervangen van functiepointers door verwijzingen in de overgangstabel.
- Voor LSM-modules (Linux Security Module) is de mogelijkheid toegevoegd om handlers te maken die de operaties voor het creëren van namespaces onderscheppen.
- Er zijn middelen beschikbaar gesteld voor het verifiëren van digitale handtekeningen PKCS#7 in BPF-programma's.
- In /dev/random is de mogelijkheid voor niet-blokkerende toegang (O_NONBLOCK) hersteld, die per ongeluk was verwijderd in kernel 5.6.
- Op systemen met een x86-architectuur is een waarschuwing toegevoegd in het geval dat de kernel-subsystemen geheugenpagina's mappen die zowel uitvoering als schrijven toestaan. In de toekomst wordt overwogen om dergelijke geheugenmapping volledig te verbieden.
- Een debugmechanisme KMSAN (Kernel Memory Sanitizer) is toegevoegd om het gebruik van niet-geïnitialiseerd geheugen in de kernel te identificeren, evenals lekken van niet-geïnitialiseerd geheugen tussen de gebruikersruimte en apparaten.
- Verbeteringen zijn aangebracht aan de cryptografisch veilige pseudowillekeurige getallengenerator CRNG, die wordt gebruikt bij de aanroep van getrandom. De wijzigingen zijn voorbereid door Jason Donenfeld, de auteur van WireGuard, en zijn gericht op het verbeteren van de veiligheid bij het extraheren van pseudowillekeurige gehele getallen. VPN In de TCP-stack is de mogelijkheid geïmplementeerd (standaard uitgeschakeld) om hash-tabellen voor sockets afzonderlijk te gebruiken voor elke namespace, wat de prestaties verhoogt van systemen met een groot aantal namespaces.
- Netwerk subsysteem
- In de TCP-stack is de mogelijkheid (standaard uitgeschakeld) geïmplementeerd om hash-tabellen voor sockets per namespace afzonderlijk te gebruiken, wat de prestaties verhoogt van systemen met veel namespaces.
- De ondersteuning voor het verouderde DECnet-protocol is verwijderd. Voor de gebruikersruimte zijn er API-plaatsvervangers behouden die het compileren van applicaties mogelijk maken die DECnet gebruiken, maar deze applicaties kunnen geen verbinding maken met het netwerk.
- Het netlink-protocol is gedocumenteerd.
- Apparatuur
- De amdgpu-driver heeft ondersteuning toegevoegd voor het doorgeven van DSC (Display Stream Compression) voor verliesloze gegevenscompressie bij de communicatie met schermen die zeer hoge resoluties ondersteunen. De ondersteuning voor de AMD RDNA3 (RX 7000) en CDNA (Instinct) platforms is voortgezet. Er is ondersteuning toegevoegd voor IP-componenten DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x en GMC 11.x. In de amdkfd-driver (voor discrete AMD GPU's zoals Polaris) is ondersteuning voor GFX 11.0.3 geïmplementeerd.
- In de i915-driver (Intel) is ondersteuning voor de GPU Meteor Lake ingeschakeld. Voor Meteor Lake en nieuwere GPU's is ondersteuning voor de DP 2.0-interface (DisplayPort) toegevoegd. Identificatoren voor videokaarten gebaseerd op de Alder Lake S microarchitectuur zijn toegevoegd.
- Ondersteuning is toegevoegd voor geluidsystemen die zijn geïmplementeerd in Apple Silicon-processors, Intel SkyLake en Intel KabyLake. In de CS35L41 HDA geluidsdriver is ondersteuning voor de slaapstand toegevoegd. Ondersteuning voor ASoC (ALSA System on Chip) is toegevoegd voor ingebouwde geluidschips van Apple Silicon, AMD Rembrant DSP's, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake en Kaby Lake, Mediatek MT8186, NXP i.MX8ULP DSP's, Qualcomm SC8280XP, SM8250, SM8450 en Texas Instruments SRC4392.
- Ondersteuning is toegevoegd voor LCD-panelen 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.
- Ondersteuning is toegevoegd voor AHCI SATA-controllers die worden gebruikt in de SoC Baikal-T1.
- Ondersteuning is toegevoegd voor Bluetooth-chips van MediaTek MT7921, Intel Magnetor (CNVi, Integrated Connectivity), Realtek RTL8852C, RTW8852AE en RTL8761BUV (Edimax BT-8500).
- In de ath11k-driver voor Qualcomm draadloze modules is ondersteuning voor spectraal scannen in het 160 MHz-bereik toegevoegd, meerthreading NAPI is geïmplementeerd, en de ondersteuning voor Wi-Fi chips van Qualcomm WCN6750 is verbeterd.
- Drivers voor toetsenborden zijn toegevoegd voor de PinePhone, touchpads van InterTouch (ThinkPad P1 G3), X-Box Adaptive Controller, PhoenixRC Flight Controller, VRC-2 Car Controller, DualSense Edge Controller, het bedieningspaneel van IBM (IBM Operation Panel), XBOX One Elite-afstandsbedieningen, en de XP-PEN Deco Pro S en Intuos Pro Small (PTH-460) tablets.
- Een driver is toegevoegd voor cryptografische versnellers van Aspeed HACE (Hash and Crypto Engine).
- Ondersteuning is toegevoegd voor geïntegreerde Thunderbolt/USB4-controllers van Intel Meteor Lake.
- Ondersteuning is toegevoegd voor smartphones Sony Xperia 1 IV, Samsung Galaxy E5, E7 en Grand Max, en Pine64 Pinephone Pro.
- Ondersteuning toegevoegd voor ARM SoC en borden: AMD DaytonaX, Mediatek MT8186, Rockchips RK3399 en 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. Stuurprogramma's voor SoC van Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom en NXP zijn bijgewerkt.
Tegelijkertijd heeft de Latijns-Amerikaanse Stichting Vrije Software een volledig vrije kern 6.1 - Linux-libre 6.1-gnu ontwikkeld, vrij van elementen van firmware en stuurprogramma's die niet-vrije componenten of code bevatten, waarvan het toepassingsgebied door de fabrikant is beperkt. In de nieuwe release is de nieuwe driver rtw8852b en de DTS-bestanden voor verschillende SoC Qualcomm en MediaTek met AArch64-gebaseerde processors opgeschoond. De code voor het opschonen van blobs in de stuurprogramma's en subsystemen amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI is bijgewerkt. Het opschonen van verouderde stuurprogramma's voor tm6000 TV-kaarten, cpia2 v4l, sp8870, av7110 is gecorrigeerd.
Bron: opennet.ru
