Efter tvÄ mÄnaders utveckling presenterade Linus Torvalds version 6.1 av Linux-kÀrnan. Bland de mest anmÀrkningsvÀrda förÀndringarna finns stöd för utveckling av drivrutiner och moduler med Rust-sprÄket, modernisering av mekanismen för att identifiera anvÀnda minnessidor, en sÀrskild minneshanterare för BPF-program, ett system för diagnostik av minnesproblem kallat KMSAN, en skyddsmekanik för KCFI (Kernel Control-Flow Integrity) samt införandet av datastrukturen Maple tree.
I den nya versionen ingĂ„r 15115 patchar frĂ„n 2139 utvecklare, patchens storlek Ă€r 51 MB, vilket Ă€r ungefĂ€r hĂ€lften av storleken pĂ„ patcharna för versionerna 6.0 och 5.19. Ăndringarna berör 13165 filer, 716247 rader kod har lagts till och 304560 rader har tagits bort. UngefĂ€r 45% av alla förĂ€ndringar som presenterades i 6.1 Ă€r relaterade till enhetsdrivrutiner, cirka 14% av Ă€ndringarna gĂ€ller uppdatering av kod specifik för hĂ„rdvaruarkitekturer, 14% Ă€r kopplade till nĂ€tverksstacken, 3% med filsystem och 3% med interna delsystem i kĂ€rnan.
Huvudnyheterna i kÀrnan 6.1:
- Minne och systemtjÀnster
- Möjligheten att anvÀnda Rust-sprÄket som ett andra sprÄk för utveckling av drivrutiner och moduler i kÀrnan har lagts till. Huvudmotivet för att stödja Rust Àr att förenkla skapandet av sÀkra och kvalitativa enhetsdrivrutiner genom att minska risken för fel vid hantering av minne. Stödet för Rust Àr inte aktiverat som standard och gör inte att Rust inkluderas bland obligatoriska byggberoenden för kÀrnan. En minimal nedskuren version av patcharna, som har minskats frÄn 40 000 till 13 000 rader kod, har hittills antagits i kÀrnan och erbjuder bara det nödvÀndiga minimumet som krÀvs för att bygga en enkel kÀrnmodul skriven i Rust. Planen Àr att gradvis öka den befintliga funktionaliteten genom att överföra andra Àndringar frÄn Rust-for-Linux-grenen. Samtidigt utvecklas projekt för att anvÀnda den föreslagna infrastrukturen för utveckling av drivrutiner för NVMe-lagringsenheter, nÀtverksprotokollet 9p och Apple M1 GPU.
- För system baserade pĂ„ AArch64, RISC-V och LoongArch med EFI har möjligheten att direktladda komprimerade kĂ€rnbilder implementerats. Hanterare för laddning, start och avlastning av kĂ€rnbilder, som kallas direkt frĂ„n EFI zboot, har lagts till. Dessutom har hanterare för installation och avinstallation av protokoll i EFI-protokollsdatabasen lagts till. Tidigare utfördes uppackning av en separat bootloader, men nu kan hanteraren i sjĂ€lva kĂ€rnan göra detta â kĂ€rnbilden skapas som en EFI-applikation.
- I den nya versionen ingÄr en del patchar med implementeringen av en flernivÄmodell för minneshantering, som möjliggör uppdelning av minnesbanker med olika prestandakarakteristika. Till exempel kan de mest intensivt anvÀnda sidorna placeras i det snabbaste minnet, medan sÀllan anvÀnda sidor kan lagras i relativt lÄngsamt minne. I kÀrnan 6.1 har en mekanism införts för att identifiera intensivt anvÀnda sidor i lÄngsamt minne för att flytta dem till snabbt minne, samt en gemensam koncept av minnesnivÄer och deras relativa prestanda har implementerats.
- I den nya versionen ingÄr mekanismen MGLRU (Multi-Generational LRU), som har ersatt den gamla LRU (Least Recently Used) implementeringen baserat pÄ tvÄ köer med en flerledad struktur, som bÀttre identifierar vilka minnessidor som verkligen anvÀnds, och vilka som kan flyttas till bytesomrÄdet.
- Stöd för den databasstruktur "maple tree" föreslagen av ingenjörer frÄn Oracle har lagts till, som positioneras som en mer effektiv ersÀttning för strukturen "red-black tree". Maple tree Àr en variant av B-tree, som stöder indexering baserat pÄ vÀrdeintervall och Àr utformad för att effektivt anvÀnda cachen. moderna processorer. Flera minneshanteringssubsystem har redan översatts till maple tree, vilket har haft en positiv inverkan pÄ deras prestanda. I framtiden kan maple tree anvÀndas för att implementera lÄs baserade pÄ intervall (range locking).
- I BPF-systemet har möjligheten att skapa "destruktiva" BPF-program lagts till, som Àr sÀrskilt utformade för att initiera nödstopp genom att anropa crash_kexec(). SÄdana BPF-program kan behövas för felsökningsÀndamÄl för att initiera skapandet av en crash-dump vid en specifik tidpunkt. För att fÄ tillgÄng till destruktiva operationer vid BPF-programladdning krÀvs att flaggan BPF_F_DESTRUCTIVE anges, sysctl kernel.destructive_bpf_enabled aktiveras och rÀttigheterna CAP_SYS_BOOT finns.
- För BPF-program har möjligheten att iterera över cgroup-element och resurser (filer, vma, processer osv.) för en viss trÄd eller uppgift lagts till. En ny map-typ har implementerats för att skapa anvÀndarspecifika ringbuffrar (user ring buffer).
- Ett sÀrskilt anrop för minnesallokering i BPF-program har lagts till, vilket ger en sÀkrare minnesfördelning i BPF:s kontext Àn den vanliga kmalloc().
- Den första delen av förÀndringarna som gör det möjligt att skapa drivrutiner för inmatningsenheter med HID (Human Interface Device) har integrerats, vilket implementeras i form av BPF-program.
- Koden för att stödja a.out-formatet har helt tagits bort frÄn kÀrnan, vilket klassificerades som förÄldrat i version 5.1 och stÀngdes av för de huvudsakliga arkitekturerna i versionerna 5.18 och 5.19. a.out-formatet anvÀnds sedan lÀnge inte pÄ system med Linux, och generering av a.out-filer stöds inte av moderna verktyg i standardkonfigurationer för Linux. Bootloader för a.out-filer kan helt implementeras i anvÀndarutrymmet.
- Stöd för hÀndelsesmÀtningar (perf event), kexec, kdump och JIT-kompilering av BPF har implementerats för system baserade pÄ LoongArch-instruktionsuppsÀttningen, som anvÀnds i Loongson 3 5000-processorerna och implementerar en ny RISC ISA som liknar MIPS och RISC-V.
- I grÀnssnittet för asynkron in-/utmatning io_uring har ett nytt lÀge IORING_SETUP_DEFER_TASKRUN föreslagits, vilket möjliggör att temporÀrt skjuta upp utförandet av uppgifter relaterade till ringbufferten tills en begÀran frÄn applikationen kommer in, vilket kan anvÀndas för att organisera bearbetningar i paketmode och förhindra förseningar pÄ grund av att applikationen avbryts vid ett olÀmpligt tillfÀlle.
- Processerna i anvÀndarutrymmet har fÄtt möjlighet att initiera omvandlingen av omrÄdet för vanliga minnessidor till en uppsÀttning stora minnessidor (Transparent Huge-Pages).
- Implementeringen av enheten /dev/userfaultfd har lagts till, vilket gör det möjligt att fÄ Ätkomst till funktionaliteten hos syscalls userfaultfd() med hjÀlp av behörigheter i filsystemet. Funktionaliteten hos userfaultfd gör det möjligt att skapa hanterare för sidfel (page faults) i anvÀndarutrymmet.
- Krav pÄ versionen av GNU Make-verktyget har höjts - för att kompilera kÀrnan krÀvs nu minst version 3.82.
- Disksubsystem, in- och utmatning och filsystem
- Betydande prestandaoptimeringar har gjorts i filsystemet Btrfs, bland annat har prestandan för ioctl-anropet FIEMAP ökat avsevÀrt. Stöd för asynkron buffrad skrivning har lagts till för applikationer som anvÀnder io_uring. Stöd för filer skyddade med fs-verity har lagts till i operationen 'send'.
- I ext4-filsystemet har prestandaoptimeringar lagts till som rör underhÄll av loggen och arbete i skrivskyddat lÀge.
- I filsystemet EROFS (Enhanced Read-Only File System), avsett för anvÀndning pÄ partitioner som Àr tillgÀngliga i skrivskyddat lÀge, har möjligheten att dela data som dupliceras i olika filsystem implementerats.
- I systemanropet statx() har möjligheten att rapportera information om möjligheten till direkt I/O för en fil lagts till.
- I FUSE (Filesystems in User Space) har stöd för skapande av temporÀra filer med flaggan O_TMPFILE lagts till.
- Virtualisering och sÀkerhet
- Implementeringen av CFI (Control Flow Integrity)-skyddsmekanismen har Àndrats. Detta lÀgger till en kontroll före varje indirekt funktionsanrop för att identifiera vissa former av odefinierat beteende som potentiellt kan leda till störningar i det normala utförandet (control flow) pÄ grund av anvÀndning av exploits som Àndrar de funktioner som lagras i minnet. Den standardmÀssiga CFI-implementeringen frÄn LLVM-projektet har ersatts med en version som ocksÄ bygger pÄ Clang, men som Àr speciellt anpassad för att skydda lÄgnivÄsystem och operativsystemkÀrnor. I LLVM kommer den nya implementeringen att föreslÄs i Clang 16-utgÄvan och kommer att inkluderas med alternativet "-fsanitize=kcfi". En nyckelförÀndring i den nya implementeringen Àr att den inte Àr kopplad till optimeringar vid lÀnkning (LTO) och att den inte leder till att funktionspekare ersÀtts med referenser i omstigningstabellen.
- LSM-moduler (Linux Security Module) fÄr nu möjlighet att skapa hanterare som fÄngar operationer vid skapande av namnrymder.
- Möjligheter för verifiering av PKCS#7 digitala signaturer har tillhandahÄllits i BPF-program.
- I /dev/random har möjligheten att öppnas i icke-blockerande lÀge (O_NONBLOCK) ÄterstÀllts, vilket oavsiktligt borttagits i kÀrnan 5.6.
- För x86-system har en varning lagts till vid mappning av minnessidor av kÀrnsystem som samtidigt tillÄter exekvering och skrivning. Framtida övervÀganden kan inkludera ett fullstÀndigt förbud mot sÄdan minnesmappning.
- En KMSAN (Kernel Memory Sanitizer) felsökningsmekanism har lagts till för att identifiera anvÀndning av oinitialiserat minne i kÀrnan samt lÀckor av oinitialiserat minne mellan anvÀndarutrymme och enheter.
- FörbĂ€ttringar har genomförts pĂ„ den kryptografisk sĂ€kra pseudorandomtalsgeneratorn CRNG, som anvĂ€nds vid anrop av getrandom. Ăndringarna har förberetts av Jason A. Donenfeld, skaparen av WireGuard, och syftar till att öka sĂ€kerheten vid extraktion av pseudorandom hela tal. VPN I TCP-stacken har en möjlighet (inaktiverad som standard) implementerats för separat anvĂ€ndning av hash-tabeller för varje namnrymd, vilket kan öka prestandan hos system med mĂ„nga namnrymder.
- NĂ€tverkssystemet
- I TCP-stacken har det implementerats en möjlighet (inaktiverad som standard) för separat anvÀndning av hash-tabeller för varje namnrymd, vilket kan öka prestandan hos system med mÄnga namnrymder.
- Koden för att stödja den förÄldrade DECnet-protokollet har tagits bort. För anvÀndarutrymmet har API-stubbar behÄllits för att möjliggöra kompilering av program som anvÀnder DECnet, men dessa program kan inte ansluta till nÀtverket.
- Netlink-protokollet Àr dokumenterat.
- Utrustning
- Stöd för DSC (Display Stream Compression) har lagts till i amdgpu-drivrutinen för att möjliggöra förlustfri komprimering av data vid kommunikation med skÀrmar som stöder mycket hög upplösning. Arbetet för att sÀkerstÀlla stöd för AMD RDNA3 (RX 7000) och CDNA (Instinct) plattformar har fortsatt. Stöd för IP-komponenter DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x och GMC 11.x har lagts till. Stöd för GFX 11.0.3 har implementerats i amdkfd-drivrutinen (för AMD diskreta GPU:er som Polaris).
- Stöd för GPU Meteor Lake har lagts till i i915-drivrutinen (Intel). För Meteor Lake och nyare GPU:er har stöd för DP 2.0 (DisplayPort) sÀkerstÀllts. Identifierare för grafikkort baserade pÄ mikroarkitekturen Alder Lake S har lagts till.
- Stöd för ljudsystem implementerade i Apple Silicon-processorer, Intel SkyLake och Intel KabyLake har lagts till. I ljuddrivrutinen CS35L41 HDA har stöd för vilolÀge implementerats. Stöd för ASoC (ALSA System on Chip) har tillkommit för inbyggda ljudchip frÄn Apple Silicon, AMD Rembrant DSP, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake och Kaby Lake, Mediatek MT8186, NXP i.MX8ULP DSP, Qualcomm SC8280XP, SM8250, SM8450 och Texas Instruments SRC4392.
- Stöd för LCD-panelerna 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 har lagts till.
- Stöd för AHCI SATA-kontroller som anvÀnds i SoC Baikal-T1 har lagts till.
- Stöd för Bluetooth-chip MediaTek MT7921, Intel Magnetor (CNVi, Integrated Connectivity), Realtek RTL8852C, RTW8852AE och RTL8761BUV (Edimax BT-8500) har lagts till.
- Stöd för spektral scanning i 160 MHz-bandet har lagts till i ath11k-drivrutinen för Qualcomm trÄdlösa moduler, flerskikts NAPI har implementerats och stöden för Wi-Fi-chip Qualcomm WCN6750 har förbÀttrats.
- Drivrutiner för tangentbord till PinePhone, pekplattor InterTouch (ThinkPad P1 G3), X-Box Adaptive Controller, PhoenixRC Flight Controller, VRC-2 Car Controller, DualSense Edge Controller, kontrollpaneler frÄn IBM (IBM Operation Panel), XBOX One Elite fjÀrrkontroller och tabletter XP-PEN Deco Pro S och Intuos Pro Small (PTH-460) har lagts till.
- En drivrutin för kryptografiska acceleratorer Aspeed HACE (Hash and Crypto Engine) har lagts till.
- Stöd för integrerade Thunderbolt/USB4 kontroller frÄn Intel Meteor Lake har lagts till.
- Stöd för smartphones Sony Xperia 1 IV, Samsung Galaxy E5, E7 och Grand Max, Pine64 Pinephone Pro har lagts till.
- Stöd för ARM SoC och kort har lagts till: 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, Kontron SL/BL i.MX8MM OSM-S, MT8195 (Acer Tomato), Radxa ROCK 4C+, NanoPi R4S Enterprise Edition, JetHome JetHub D1p. Drivrutiner för SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom och NXP har uppdaterats.
Samtidigt har den latinamerikanska Fria programvarufonden skapat en version av kĂ€rnan 6.1 â Linux-libre 6.1-gnu, som Ă€r rensad frĂ„n firmware- och drivrutinskomponenter som innehĂ„ller icke-fri komponenter eller kodavsnitt vars anvĂ€ndning Ă€r begrĂ€nsad av tillverkaren. I den nya utgĂ„van har den nya drivrutinen rtw8852b och DTS-filer för olika SoC Qualcomm och MediaTek med processorer baserade pĂ„ AArch64-arkitekturen rensats. Koden för att rensa bort blobs i drivrutiner och subsystem amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI har uppdaterats. Rensningen av förĂ„ldrade drivrutiner för tm6000 TV-kort, cpia2 v4l, sp8870, av7110 har justerats.
KĂ€lla: opennet.ru
