Linux 6.1 kernel-release

Na twee maanden ontwikkeling presenteerde Linus Torvalds de release van de Linux-kernel 6.1. Een van de meest opvallende veranderingen: ondersteuning voor de ontwikkeling van stuurprogramma's en modules in de Rust-taal, modernisering van het mechanisme voor het bepalen van gebruikte geheugenpagina's, een speciale geheugenmanager voor BPF-programma's, een systeem voor het diagnosticeren van geheugenproblemen KMSAN, de KCFI (Kernelk Control -Flow Integrity) beschermingsmechanisme, de introductie van de Maple-structuurboom.

De nieuwe versie bevat 15115 fixes van 2139 ontwikkelaars, de patchgrootte is 51 MB, wat ongeveer 2 keer kleiner is dan de grootte van patches van kernels 6.0 en 5.19. De wijzigingen hadden betrekking op 13165 bestanden, er werden 716247 regels code toegevoegd en 304560 regels verwijderd. Ongeveer 45% van alle wijzigingen die in 6.1 zijn geïntroduceerd, hebben betrekking op apparaatstuurprogramma's, ongeveer 14% van de wijzigingen heeft betrekking op het updaten van code die specifiek is voor hardware-architecturen, 14% heeft betrekking op de netwerkstack, 3% heeft betrekking op bestandssystemen en 3% zijn gerelateerd aan interne kernelsubsystemen.

Belangrijkste innovaties in kernel 6.1:

  • Geheugen- en systeemservices
    • De mogelijkheid toegevoegd om Rust als tweede taal te gebruiken voor het ontwikkelen van stuurprogramma's en kernelmodules. De belangrijkste reden voor het ondersteunen van Rust is om het gemakkelijker te maken om veilige en hoogwaardige stuurprogramma's te schrijven door de kans op fouten bij het werken met geheugen te verkleinen. Rust-ondersteuning is standaard uitgeschakeld en heeft niet tot gevolg dat Rust wordt opgenomen als een vereiste kernelbuild-afhankelijkheid. De kernel heeft tot nu toe een minimale, uitgeklede versie van de patches aangenomen, die is teruggebracht van 40 naar 13 regels code en alleen het noodzakelijke minimum biedt, voldoende om een ​​eenvoudige kernelmodule te bouwen die is geschreven in de Rust-taal. In de toekomst is het de bedoeling om de bestaande functionaliteit geleidelijk uit te breiden en andere wijzigingen van de Rust-for-Linux-tak over te dragen. Tegelijkertijd worden er projecten ontwikkeld om de voorgestelde infrastructuur te gebruiken om stuurprogramma's te ontwikkelen voor NVMe-schijven, het 9p-netwerkprotocol en de Apple M1 GPU in de Rust-taal.
    • Voor systemen gebaseerd op AArch64-, RISC-V- en LoongArch-architecturen met EFI is de mogelijkheid geïmplementeerd om gecomprimeerde kernelimages direct te laden. Handlers toegevoegd voor het laden, uitvoeren en verwijderen van kernelimages, rechtstreeks aangeroepen vanuit EFI zboot. Er zijn ook handlers toegevoegd voor het installeren en verwijderen van protocollen uit de EFI-protocoldatabase. Voorheen werd het uitpakken uitgevoerd door een aparte bootloader, maar nu kan dit worden gedaan door een handler in de kernel zelf - de kernelimage wordt gevormd als een EFI-applicatie.
    • De compositie omvat een deel van de patches met de implementatie van een geheugenbeheermodel op meerdere niveaus, waarmee u geheugenbanken met verschillende prestatiekenmerken kunt scheiden. De meest gebruikte pagina's kunnen bijvoorbeeld in het snelste geheugen worden opgeslagen, terwijl de meest zelden gebruikte pagina's in een relatief traag geheugen kunnen worden opgeslagen. Kernel 6.1 introduceert een mechanisme om te bepalen waar veelgebruikte pagina's zich in het langzame geheugen bevinden, zodat ze kunnen worden gepromoveerd naar snel geheugen, en introduceert ook een algemeen concept van geheugenlagen en hun relatieve prestaties.
    • Het omvat het MGLRU-mechanisme (Multi-Generational LRU), dat de oude LRU-implementatie (Least Recent Used) op basis van twee wachtrijen vervangt door een meertrapsstructuur die beter bepaalt welke geheugenpagina's daadwerkelijk in gebruik zijn en welke naar buiten kunnen worden gepusht. de swappartitie.
    • Ondersteuning toegevoegd voor de ‘maple tree’-datastructuur voorgesteld door Oracle-ingenieurs, die is gepositioneerd als een effectievere vervanging voor de ‘rood-zwarte boom’-structuur. Maple Tree is een variant van B-tree die bereikindexering ondersteunt en is ontworpen om efficiënt gebruik te maken van de cache van moderne processors. Sommige subsystemen voor geheugenbeheer zijn al overgezet naar Maple Tree, wat een positief effect heeft gehad op hun prestaties. In de toekomst kan esdoorn worden gebruikt om bereikvergrendeling te implementeren.
    • De mogelijkheid om “destructieve” BPF-programma's te maken die speciaal zijn ontworpen om een ​​noodstop te initiëren via de crash_kexec()-aanroep is toegevoegd aan het BPF-subsysteem. Dergelijke BPF-programma's kunnen nodig zijn voor foutopsporingsdoeleinden om op een bepaald moment het creëren van een crashdump te initiëren. Om toegang te krijgen tot destructieve bewerkingen bij het laden van een BPF-programma, moet u de vlag BPF_F_DESTRUCTIVE opgeven, sysctl kernel.structl_bpf_enabled activeren en CAP_SYS_BOOT-rechten hebben.
    • Voor BPF-programma's is het mogelijk om cgroup-elementen op te sommen, evenals bronnen (bestanden, vma, processen, enz.) van een specifieke thread of taak. Er is een nieuw kaarttype geïmplementeerd om gebruikersringbuffers te creëren.
    • Er is een speciale oproep toegevoegd voor geheugentoewijzing in BPF-programma's (geheugenallocator), die veiliger geheugentoewijzing in de BPF-context biedt dan de standaard kmalloc().
    • Het eerste deel van de wijzigingen is geïntegreerd en biedt de mogelijkheid om stuurprogramma's te maken voor invoerapparaten met een HID-interface (Human Interface Device), geïmplementeerd in de vorm van BPF-programma's.
    • De kernel heeft de code ter ondersteuning van het uitvoerbare bestandsformaat a.out volledig verwijderd, dat in release 5.1 verouderd was en sinds versies 5.18 en 5.19 voor de belangrijkste architecturen is uitgeschakeld. Het a.out-formaat is al lang verouderd op Linux-systemen, en het genereren van a.out-bestanden wordt niet ondersteund door moderne tools in standaard Linux-configuraties. De lader voor a.out-bestanden kan volledig in de gebruikersruimte worden geïmplementeerd.
    • Voor systemen gebaseerd op de LoongArch-instructiesetarchitectuur die wordt gebruikt in de Loongson 3 5000-processors en die de nieuwe RISC ISA implementeren, vergelijkbaar met MIPS en RISC-V, wordt ondersteuning voor prestatiemetingsgebeurtenissen (perf-gebeurtenissen), kexec, kdump en BPF JIT-compilatie geïmplementeerd .
    • De io_uring asynchrone I/O-interface biedt een nieuwe modus, IORING_SETUP_DEFER_TASKRUN, waarmee ringbuffergerelateerd werk tijdelijk kan worden uitgesteld totdat een applicatieverzoek is gedaan, wat kan worden gebruikt om werk in batches uit te voeren en latentieproblemen als gevolg van voorrang te voorkomen. verkeerde tijd.
    • Processen in de gebruikersruimte krijgen de mogelijkheid om de conversie van een reeks normale geheugenpagina's naar een reeks grote geheugenpagina's (Transparent Huge-Pages) te initiëren.
    • Implementatie toegevoegd van het /dev/userfaultfd-apparaat, dat toegang geeft tot de functionaliteit van de userfaultfd()-systeemaanroep met behulp van toegangsrechten in de FS. Met de userfaultfd-functionaliteit kunt u handlers maken voor toegang tot niet-toegewezen geheugenpagina's (paginafouten) in de gebruikersruimte.
    • De vereisten voor de versie van het GNU Make-hulpprogramma zijn verhoogd - ten minste versie 3.82 is nu vereist om de kernel te bouwen.
  • Schijfsubsysteem, I/O en bestandssystemen
    • Er zijn aanzienlijke prestatie-optimalisaties doorgevoerd in het Btrfs-bestandssysteem; onder andere zijn de prestaties van de FIEMAP ioctl-aanroep met ordes van grootte verbeterd. Ondersteuning toegevoegd voor asynchrone gebufferde schrijfbewerkingen voor toepassingen die io_uring gebruiken. Ondersteuning toegevoegd voor bestanden die zijn beveiligd met fs-verity aan de “send”-bewerking.
    • Het ext4-bestandssysteem heeft prestatie-optimalisaties toegevoegd met betrekking tot journaalonderhoud en alleen-lezen-werking.
    • Het EROFS-bestandssysteem (Enhanced Read-Only File System), ontworpen voor gebruik op partities die toegankelijk zijn in de alleen-lezen-modus, implementeert de mogelijkheid om gegevens te delen die in verschillende bestandssystemen zijn gedupliceerd.
    • De systeemaanroep statx() is toegevoegd om informatie weer te geven over de vraag of directe I/O op een bestand kan worden toegepast.
    • Ondersteuning voor het maken van tijdelijke bestanden met de vlag O_TMPFILE is toegevoegd aan het FUSE-subsysteem (Filesystems in User Space).
  • Virtualisatie en beveiliging
    • De implementatie van het CFI-beschermingsmechanisme (Control Flow Integrity) is vervangen, waarbij controles zijn toegevoegd vóór elke indirecte aanroep van een functie om bepaalde vormen van ongedefinieerd gedrag te detecteren dat mogelijk zou kunnen leiden tot een schending van de normale uitvoeringsvolgorde (control flow). resultaat van het gebruik van exploits die verwijzingen wijzigen naar functies die in het geheugen zijn opgeslagen. De standaardimplementatie van CFI uit het LLVM-project is vervangen door een optie die ook gebaseerd is op het gebruik van Clang, maar speciaal aangepast om subsystemen op laag niveau en besturingssysteemkernels te beschermen. In LLVM wordt een nieuwe implementatie aangeboden in de Clang 16-release en ingeschakeld met de optie "-fsanitize=kcfi". Het belangrijkste verschil met de nieuwe implementatie is dat deze niet gebonden is aan link-time-optimalisaties (LTO) en er niet toe leidt dat functieaanwijzers worden vervangen door koppelingen in de springtabel.
    • Voor LSM-modules (Linux Security Module) is het mogelijk om handlers te maken die bewerkingen onderscheppen om naamruimten te creëren.
    • Er zijn hulpmiddelen beschikbaar voor het verifiëren van PKCS#7 digitale handtekeningen in BPF-programma's.
    • De mogelijkheid om te openen in niet-blokkerende modus (O_NONBLOCK), die per ongeluk werd verwijderd in kernel 5.6, is teruggekeerd naar /dev/random.
    • Op systemen met x86-architectuur is een waarschuwing toegevoegd in het geval van het in kaart brengen van geheugenpagina's door kernelsubsystemen die gelijktijdig uitvoering en schrijven mogelijk maken. In de toekomst wordt de mogelijkheid overwogen om dergelijke geheugentoewijzing volledig te verbieden.
    • KMSAN-foutopsporingsmechanisme (Kernel Memory Sanitizer) toegevoegd om niet-geïnitialiseerd geheugengebruik in de kernel te detecteren, evenals niet-geïnitialiseerde geheugenlekken tussen gebruikersruimte en apparaten.
    • Er zijn verbeteringen aangebracht aan de crypto-beveiligde CRNG-generator voor pseudo-willekeurige getallen die wordt gebruikt bij de getrandom-oproep. De wijzigingen zijn voorbereid door Jason A. Donenfeld, auteur van VPN WireGuard, en zijn gericht op het verbeteren van de beveiliging van pseudo-willekeurige gehele extractie.
  • Netwerksubsysteem
    • De TCP-stack biedt de mogelijkheid (standaard uitgeschakeld) om socket-hashtabellen afzonderlijk te gebruiken voor elke naamruimte, wat de prestaties verbetert op systemen met een groot aantal naamruimten.
    • Code verwijderd ter ondersteuning van het oude DECnet-protocol. Er worden API-stubs in de gebruikersruimte gelaten zodat applicaties die DECnet gebruiken, kunnen worden gecompileerd, maar deze applicaties kunnen geen verbinding maken met het netwerk.
    • Het netlink-protocol is gedocumenteerd.
  • Uitrusting
    • Het amdgpu-stuurprogramma heeft ondersteuning toegevoegd voor DSC-forwarding (Display Stream Compression) voor verliesloze datacompressie bij het uitwisselen van informatie met schermen die zeer hoge resoluties ondersteunen. Er wordt verder gewerkt aan het bieden van ondersteuning voor de AMD RDNA3 (RX 7000) en CDNA (Instinct) platforms. Ondersteuning toegevoegd voor DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x en GMC 11.x IP-componenten. Het amdkfd-stuurprogramma (voor afzonderlijke AMD GPU's zoals Polaris) biedt ondersteuning voor GFX 11.0.3.
    • Het i915 (Intel)-stuurprogramma biedt ondersteuning voor Meteor Lake GPU. Meteor Lake en nieuwere GPU's ondersteunen de DP 2.0-interface (DisplayPort). ID's toegevoegd voor videokaarten op basis van de Alder Lake S-microarchitectuur.
    • Ondersteuning toegevoegd voor audiosubsystemen geïmplementeerd in Apple Silicon-, Intel SkyLake- en Intel KabyLake-processors. Het CS35L41 HDA-audiostuurprogramma ondersteunt de slaapmodus. ASoC (ALSA System on Chip)-ondersteuning toegevoegd voor geïntegreerde audiochips 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 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 NT116WH M-N ​​21, INX N116BCA- EA2, INX N116BCN-EA1, Multi-Inno-technologie MI0800FT-9.
    • Ondersteuning toegevoegd voor AHCI SATA-controllers die worden gebruikt in de Baikal-T1 SoC.
    • Ondersteuning toegevoegd voor Bluetooth-chips MediaTek MT7921, Intel Magnetor (CNVi, Integrated Connectivity), Realtek RTL8852C, RTW8852AE en RTL8761BUV (Edimax BT-8500).
    • De ath11k-driver voor draadloze Qualcomm-modules heeft ondersteuning toegevoegd voor spectraal scannen in het 160 MHz-bereik, multi-threaded NAPI geïmplementeerd en verbeterde ondersteuning voor Qualcomm WCN6750 Wi-Fi-chips.
    • Stuurprogramma's toegevoegd voor PinePhone-toetsenbord, InterTouch-touchpads (ThinkPad P1 G3), X-Box Adaptive Controller, PhoenixRC Flight Controller, VRC-2 Car Controller, DualSense Edge Controller, IBM Operation Panel, XBOX One Elite-afstandsbedieningen, tablets XP-PEN Deco Pro S en Intuos Pro Small (PTH-460).
    • Stuurprogramma toegevoegd voor cryptografische versnellers Aspeed HACE (Hash en Crypto Engine).
    • Ondersteuning toegevoegd voor geïntegreerde Thunderbolt/USB4 Intel Meteor Lake-controllers.
    • Ondersteuning toegevoegd voor Sony Xperia 1 IV, Samsung Galaxy E5, E7 en Grand Max, Pine64 Pinephone Pro smartphones.
    • Ondersteuning toegevoegd voor ARM SoC en boards: 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. Bijgewerkte stuurprogramma's voor SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom en NXP.

Tegelijkertijd vormde de Latin American Free Software Foundation een versie van de volledig vrije kernel 6.1 - Linux-libre 6.1-gnu, ontdaan van elementen van de firmware en stuurprogramma's die niet-vrije componenten of delen van code bevatten, waarvan de reikwijdte beperkt door de fabrikant. De nieuwe release schoont de nieuwe rtw8852b-driver en DTS-bestanden op voor verschillende Qualcomm- en MediaTek SoC's met processors gebaseerd op de AArch64-architectuur. Bijgewerkte code voor het opschonen van blobs in stuurprogramma's en subsystemen amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. Het opschonen van verouderde stuurprogramma's tm6000 TV-kaarten, cpia2 v4l, sp8870, av7110 is gecorrigeerd.

Bron: opennet.ru

Voeg een reactie