Linux-kärnan version 6.1

Efter två månaders utveckling presenterade Linus Torvalds releasen av Linux-kärnan 6.1. Bland de mest anmärkningsvärda förändringarna: stöd för utveckling av drivrutiner och moduler i Rust-språket, modernisering av mekanismen för att bestämma använda minnessidor, en speciell minneshanterare för BPF-program, ett system för att diagnostisera minnesproblem KMSAN, KCFI (Kernelk Control). -Flödesintegritet) skyddsmekanism, införandet av lönnstrukturträdet.

Den nya versionen innehåller 15115 2139 korrigeringar från 51 2 utvecklare, patchstorleken är 6.0 MB, vilket är ungefär 5.19 gånger mindre än storleken på patchar från kärnorna 13165 och 716247. Ändringarna påverkade 304560 45 filer, 6.1 14 rader kod lades till och 14 3 rader raderades. Cirka 3 % av alla ändringar som introduceras i XNUMX är relaterade till drivrutiner, cirka XNUMX % av ändringarna är relaterade till uppdatering av kod som är specifik för hårdvaruarkitekturer, XNUMX % är relaterade till nätverksstacken, XNUMX % är relaterade till filsystem och XNUMX % är relaterade till interna kärndelsystem.

Huvudsakliga innovationer i kärnan 6.1:

  • Minnes- och systemtjänster
    • Lade till möjligheten att använda Rust som ett andra språk för att utveckla drivrutiner och kärnmoduler. Det främsta skälet till att stödja Rust är att göra det lättare att skriva säkra och högkvalitativa enhetsdrivrutiner genom att minska sannolikheten för att göra fel när man arbetar med minne. Rust-stöd är inaktiverat som standard och resulterar inte i att Rust ingår som ett obligatoriskt kärnbyggeberoende. Kärnan har hittills antagit en minimal, avskalad version av patcharna, som har reducerats från 40 till 13 tusen rader kod och ger endast det nödvändiga minimum, tillräckligt för att bygga en enkel kärnmodul skriven på Rust-språket. I framtiden är det planerat att gradvis öka den befintliga funktionaliteten, och överföra andra förändringar från Rust-for-Linux-grenen. Parallellt utvecklas projekt för att använda den föreslagna infrastrukturen för att utveckla drivrutiner för NVMe-enheter, 9p-nätverksprotokollet och Apple M1 GPU på språket Rust.
    • För system baserade på AArch64, RISC-V och LoongArch arkitekturer med EFI, har möjligheten att direkt ladda komprimerade kärnavbildningar implementerats. Lade till hanterare för att ladda, köra och ta bort kärnavbildningar, anropade direkt från EFI zboot. Hanterare för att installera och ta bort protokoll från EFI-protokolldatabasen har också lagts till. Tidigare utfördes uppackning av en separat starthanterare, men nu kan detta göras av en hanterare i själva kärnan - kärnavbildningen bildas som en EFI-applikation.
    • Sammansättningen inkluderar en del av patchar med implementering av en minneshanteringsmodell på flera nivåer, som låter dig separera minnesbanker med olika prestandaegenskaper. Till exempel kan de mest använda sidorna lagras i det snabbaste minnet, medan de mest sällan använda sidorna kan lagras i relativt långsamt minne. Kernel 6.1 introducerar en mekanism för att avgöra var mycket använda sidor finns i långsamt minne så att de kan främjas till snabbt minne, och introducerar också ett allmänt koncept för minnesnivåer och deras relativa prestanda.
    • Den inkluderar MGLRU-mekanismen (Multi-Generational LRU), som ersätter den gamla LRU-implementeringen (Least Recently Used) baserad på två köer med en flerstegsstruktur som bättre avgör vilka minnessidor som faktiskt används och vilka som kan tryckas ut till swap-partitionen.
    • Lade till stöd för datastrukturen "lönnträd" som föreslagits av Oracles ingenjörer, som är placerad som en mer effektiv ersättning för strukturen "röd-svart träd". Maple tree är en variant av B-tree som stöder intervallindexering och är designad för att effektivt använda cachen hos moderna processorer. Vissa undersystem för minneshantering har redan överförts till lönnträd, vilket har haft en positiv effekt på deras prestanda. I framtiden kan lönnträd användas för att implementera räckviddslåsning.
    • Möjligheten att skapa "destruktiva" BPF-program speciellt utformade för att initiera en nödavstängning via anropet crash_kexec() har lagts till i BPF-delsystemet. Sådana BPF-program kan krävas för felsökningsändamål för att initiera skapandet av en kraschdump vid en viss tidpunkt. För att komma åt destruktiva operationer när du laddar ett BPF-program måste du ange flaggan BPF_F_DESTRUCTIVE, aktivera sysctl kernel.destructive_bpf_enabled och ha CAP_SYS_BOOT-rättigheter.
    • För BPF-program är det möjligt att räkna upp cgroup-element, samt räkna upp resurser (filer, vma, processer, etc.) för en specifik tråd eller uppgift. En ny karttyp har implementerats för att skapa användarringbuffertar.
    • Lade till ett speciellt anrop för minnesallokering i BPF-program (minnestilldelning), vilket ger säkrare minnesallokering i BPF-sammanhang än standarden kmalloc().
    • Den första delen av förändringarna har integrerats, vilket ger möjlighet att skapa drivrutiner för indataenheter med ett HID-gränssnitt (Human Interface Device), implementerat i form av BPF-program.
    • Kärnan har helt tagit bort koden för att stödja det körbara filformatet a.out, vilket föråldrades i version 5.1 och har inaktiverats för större arkitekturer sedan versionerna 5.18 och 5.19. A.out-formatet har länge föråldrats på Linux-system, och generering av a.out-filer stöds inte av moderna verktyg i standard Linux-konfigurationer. Laddaren för a.out-filer kan implementeras helt och hållet i användarutrymmet.
    • För system baserade på LoongArch-instruktionsuppsättningsarkitekturen som används i Loongson 3 5000-processorerna och implementerar den nya RISC ISA, liknande MIPS och RISC-V, implementeras stöd för prestandamätningshändelser (perf-händelser), kexec, kdump och BPF JIT-kompilering .
    • Det asynkrona I/O-gränssnittet io_uring erbjuder ett nytt läge, IORING_SETUP_DEFER_TASKRUN, som tillåter att ringbuffertrelaterat arbete tillfälligt skjuts upp tills en applikationsbegäran görs, vilket kan användas för att batcharbete och undvika latensproblem på grund av preemption. fel tid.
    • Processer i användarutrymme ges möjlighet att initiera konvertering av en rad normala minnessidor till en uppsättning stora minnessidor (Transparent Huge-Pages).
    • Lade till implementering av enheten /dev/userfaultfd, som tillåter åtkomst till funktionaliteten för systemanropet userfaultfd() med hjälp av åtkomsträttigheter i FS. Userfaultfd-funktionen låter dig skapa hanterare för åtkomst av icke-allokerade minnessidor (sidfel) i användarutrymmet.
    • Kraven för versionen av verktyget GNU Make har ökat - åtminstone version 3.82 krävs nu för att bygga kärnan.
  • Diskundersystem, I/O och filsystem
    • Betydande prestandaoptimeringar har gjorts av filsystemet Btrfs, bland annat har prestandan för FIEMAP ioctl-anropet ökat i storleksordningar. Lagt till stöd för asynkron buffrad skrivning för applikationer som använder io_uring. Lade till stöd för filer skyddade med fs-verity till "skicka"-operationen.
    • Ext4-filsystemet har lagt till prestandaoptimeringar relaterade till journalunderhåll och skrivskyddad drift.
    • Filsystemet EROFS (Enhanced Read-Only File System), designat för användning på partitioner som är tillgängliga i skrivskyddat läge, implementerar möjligheten att dela data duplicerad i olika filsystem.
    • Systemanropet statx() har lagts till för att visa information om huruvida direkt I/O kan tillämpas på en fil.
    • Stöd för att skapa temporära filer med flaggan O_TMPFILE har lagts till undersystemet FUSE (Filesystems in User Space).
  • Virtualisering och säkerhet
    • Implementeringen av CFI-skyddsmekanismen (Control Flow Integrity) har ersatts och lagt till kontroller före varje indirekt anrop av en funktion för att upptäcka vissa former av odefinierat beteende som potentiellt kan leda till en överträdelse av den normala exekveringsordern (kontrollflödet) som en resultat av användningen av exploateringar som ändrar pekare till funktioner lagrade i minnet. Standardimplementeringen av CFI från LLVM-projektet har ersatts av ett alternativ också baserat på användningen av Clang, men speciellt anpassat för att skydda lågnivåundersystem och operativsystemkärnor. I LLVM kommer en ny implementering att erbjudas i Clang 16-versionen och kommer att aktiveras med alternativet "-fsanitize=kcfi". Den viktigaste skillnaden med den nya implementeringen är att den inte är kopplad till länktidsoptimering (LTO) och inte resulterar i att funktionspekare ersätts av länkar i hopptabellen.
    • För LSM-moduler (Linux Security Module) är det möjligt att skapa hanterare som avlyssnar operationer för att skapa namnutrymmen.
    • Verktyg tillhandahålls för att verifiera PKCS#7 digitala signaturer i BPF-program.
    • Möjligheten att öppna i icke-blockerande läge (O_NONBLOCK), som oavsiktligt togs bort i kärnan 5.6, har återställts till /dev/random.
    • På system med x86-arkitektur har en varning lagts till vid mappning av minnessidor av kärndelsystem som samtidigt tillåter exekvering och skrivning. I framtiden övervägs möjligheten att helt förbjuda sådan minneskartläggning.
    • Lade till KMSAN (Kernel Memory Sanitizer) felsökningsmekanism för att upptäcka oinitierad minnesanvändning i kärnan, såväl som oinitierade minnesläckor mellan användarutrymme och enheter.
    • Förbättringar har gjorts av den kryptosäkra CRNG pseudo-slumptalsgeneratorn som används i det slumpmässiga samtalet. Ändringarna förbereddes av Jason A. Donenfeld, författare till VPN WireGuard, och syftar till att förbättra säkerheten för pseudo-slumpmässig heltalsextraktion.
  • Nätverksdelsystem
    • TCP-stacken ger möjligheten (inaktiverad som standard) att använda socket-hashtabeller separat för varje namnområde, vilket förbättrar prestandan på system med ett stort antal namnutrymmen.
    • Koden togs bort för att stödja det äldre DECnet-protokollet. Användarutrymme API-stubbar lämnas kvar för att tillåta applikationer som använder DECnet att kompileras, men dessa applikationer kommer inte att kunna ansluta till nätverket.
    • Netlink-protokollet är dokumenterat.
  • Оборудование
    • Amdgpu-drivrutinen har lagt till stöd för DSC (Display Stream Compression)-vidarebefordran för förlustfri datakomprimering vid informationsutbyte med skärmar som stöder mycket höga upplösningar. Arbetet fortsätter med att tillhandahålla stöd för plattformarna AMD RDNA3 (RX 7000) och CDNA (Instinct). Lagt till stöd för DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x och GMC 11.x IP-komponenter. Amdkfd-drivrutinen (för diskreta AMD-GPU:er som Polaris) ger stöd för GFX 11.0.3.
    • Drivrutinen i915 (Intel) inkluderar stöd för Meteor Lake GPU. Meteor Lake och nyare grafikprocessorer stöder DP 2.0 (DisplayPort)-gränssnitt. Lade till identifierare för grafikkort baserade på Alder Lake S mikroarkitektur.
    • Tillagt stöd för ljudundersystem implementerade i Apple Silicon, Intel SkyLake och Intel KabyLake-processorer. CS35L41 HDA-ljuddrivrutinen stöder viloläge. Stöd för ASoC (ALSA System on Chip) för integrerade ljudchips Apple Silicon, AMD Rembrant DSPs, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake och Kaby Lake, Mediatek MT8186, NXP i.MX8ULP DSPs, Qualcomm SC8280XP, SM SM8250 och Texas Instruments SRC8450
    • Lagt till stöd för LCD-paneler Samsung LTL101AL01, B120XAN01.0, R140NWF5 RH, Densitron DMT028VGHMCMI-1A TFT, AUO B133UAN02.1, IVO M133NW4J-R3, Innolux N120ACA-EA-EA1, B116ACA-EA01.6, B116ACA-EA -N21, INX N116BCA- EA2 , INX N116BCN-EA1, Multi-Inno Technology MI0800FT-9.
    • Tillagt stöd för AHCI SATA-kontroller som används i Baikal-T1 SoC.
    • Tillagt stöd för Bluetooth-chips MediaTek MT7921, Intel Magnetor (CNVi, Integrated Connectivity), Realtek RTL8852C, RTW8852AE och RTL8761BUV (Edimax BT-8500).
    • ath11k-drivrutinen för Qualcomm trådlösa moduler har lagt till stöd för spektral scanning i 160 MHz-området, implementerat flertrådig NAPI och förbättrat stöd för Qualcomm WCN6750 Wi-Fi-chips.
    • Tillagda drivrutiner för PinePhone-tangentbord, InterTouch-pekplattor (ThinkPad P1 G3), X-Box Adaptive Controller, PhoenixRC Flight Controller, VRC-2 Car Controller, DualSense Edge Controller, IBM Operation Panel, XBOX One Elite-fjärrkontroller, surfplattor XP-PEN Deco Pro S och Intuos Pro Small (PTH-460).
    • Tillagd drivrutin för Aspeed HACE (Hash and Crypto Engine) kryptografiska acceleratorer.
    • Tillagt stöd för integrerade Thunderbolt/USB4 Intel Meteor Lake-kontroller.
    • Tillagt stöd för Sony Xperia 1 IV, Samsung Galaxy E5, E7 och Grand Max, Pine64 Pinephone Pro-smarttelefoner.
    • Tillagt stöd för ARM SoC och kort: AMD DaytonaX, Mediatek MT8186, Rockchips RK3399 och RK3566, TI AM62A, NXP i.MX8DXL, Renesas R-Car H3Ne-1.7G, Qualcomm IPQ8064-v2.0, IPQ8062, IPQ8065, IPQ8, IPQ8195, BL i.MX4MM OSM-S, MT4 (Acer Tomato), Radxa ROCK 1C+, NanoPi RXNUMXS Enterprise Edition, JetHome JetHub DXNUMXp. Uppdaterade drivrutiner för SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom och NXP.

Samtidigt bildade Latin American Free Software Foundation en version av den helt fria kärnan 6.1 - Linux-libre 6.1-gnu, rensat från element av firmware och drivrutiner som innehåller icke-fria komponenter eller kodavsnitt, vars omfattning är begränsat av tillverkaren. Den nya utgåvan rensar den nya rtw8852b-drivrutinen och DTS-filerna för olika Qualcomm och MediaTek SoCs med processorer baserade på AArch64-arkitekturen. Uppdaterad blob-rensningskod i drivrutiner och delsystem amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. Rengöring av föråldrade drivrutiner tm6000 TV-kort, cpia2 v4l, sp8870, av7110 har korrigerats.

Källa: opennet.ru

Lägg en kommentar