Linux-kärnan version 6.2

Efter två månaders utveckling presenterade Linus Torvalds releasen av Linux-kärnan 6.2. Bland de mest anmärkningsvärda förändringarna: acceptans av kod under Copyleft-Next-licensen är tillåten, implementeringen av RAID5/6 i Btrfs förbättras, integrationen av stödet för Rust-språket fortsätter, omkostnaderna för att skydda mot Retbleed-attacker minskar, förmåga att reglera minnesförbrukning under återskrivning läggs till, en mekanism läggs till för TCP-balansering PLB (Protective Load Balancing), en hybrid kommandoflödesskyddsmekanism (FineIBT) har lagts till, BPF har nu möjlighet att definiera sina egna objekt och datastrukturer , verktyget rv (Runtime Verification) ingår, strömförbrukningen i implementeringen av RCU-lås har minskat.

Den nya versionen innehåller 16843 2178 korrigeringar från 62 14108 utvecklare, patchstorleken är 730195 MB (ändringarna påverkade 409485 42 filer, 6.2 16 rader kod lades till, 12 4 rader raderades). Cirka 3 % av alla ändringar som introduceras i XNUMX är relaterade till drivrutiner, cirka XNUMX % av ändringarna är relaterade till uppdateringskod 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.2:

  • Minnes- och systemtjänster
    • Det är tillåtet att inkludera i kärnkoden och ändringar som tillhandahålls under licensen Copyleft-Next 0.3.1. Copyleft-Next-licensen skapades av en av författarna till GPLv3 och är helt kompatibel med GPLv2-licensen, vilket bekräftats av jurister från SUSE och Red Hat. Jämfört med GPLv2 är Copyleft-Next-licensen mycket mer kompakt och lättare att förstå (den inledande delen och omnämnandet av föråldrade kompromisser har tagits bort), definierar tidsramen och förfarandet för att eliminera överträdelser och tar automatiskt bort copyleft-kraven för föråldrad programvara som är mer än 15 år gammal.

      Copyleft-Next innehåller också en proprietär teknologisklausul, som, till skillnad från GPLv2, gör denna licens kompatibel med Apache 2.0-licensen. För att säkerställa full kompatibilitet med GPLv2, anger Copyleft-Next uttryckligen att ett härlett verk kan tillhandahållas under GPL-licensen utöver den ursprungliga Copyleft-Next-licensen.

    • Strukturen inkluderar verktyget "rv", som tillhandahåller ett gränssnitt för interaktion från användarutrymmet med hanterare av RV (Runtime Verification) delsystemet, utformat för att kontrollera korrekt funktion på mycket tillförlitliga system som garanterar frånvaron av fel. Verifiering utförs under körning genom att koppla hanterare till spårningspunkter som kontrollerar det faktiska framsteg av exekvering mot en förutbestämd referens deterministisk modell av maskinen som definierar systemets förväntade beteende.
    • zRAM-enheten, som gör att swap-partitionen kan lagras i minnet i en komprimerad form (en blockenhet skapas i minnet till vilken växling utförs med komprimering), implementerar möjligheten att packa om sidor med en alternativ algoritm för att uppnå en högre nivå av kompression. Huvudidén är att ge ett val mellan flera algoritmer (lzo, lzo-rle, lz4, lz4hc, zstd), erbjuda sina egna kompromisser mellan kompressions-/dekompressionshastighet och kompressionsnivå, eller optimalt i speciella situationer (till exempel för att komprimera stora minnessidor).
    • Lade till "iommufd" API för att hantera I/O-minneshanteringssystemet - IOMMU (I/O Memory-Management Unit) från användarutrymmet. Det nya API:et gör det möjligt att hantera sidtabeller för I/O-minnen med hjälp av filbeskrivningar.
    • BPF ger möjlighet att skapa typer, definiera dina egna objekt, bygga din egen hierarki av objekt och flexibelt skapa dina egna datastrukturer, såsom länkade listor. För BPF-program som går in i viloläge (BPF_F_SLEEPABLE) har stöd för bpf_rcu_read_{,un}lock()-lås lagts till. Implementerat stöd för att spara task_struct-objekt. Lade till karttyp BPF_MAP_TYPE_CGRP_STORAGE, vilket ger lokal lagring för cgroups.
    • För RCU-blockeringsmekanismen (Read-copy-update) implementeras en valfri mekanism för "lata" återuppringningsanrop, där flera återuppringningsanrop behandlas samtidigt med en timer i batchläge. Tillämpning av den föreslagna optimeringen gör att vi kan minska strömförbrukningen på Android- och ChromeOS-enheter med 5-10 % genom att skjuta upp RCU-förfrågningar under inaktiva tider eller låg belastning på systemet.
    • Lade till sysctl split_lock_mitigate för att kontrollera hur systemet reagerar när det upptäcker delade lås som uppstår vid åtkomst av ojusterade data i minnet på grund av att data korsar två CPU-cache-linjer när en atominstruktion körs. Sådana blockeringar leder till en betydande nedgång i prestanda. Att ställa in split_lock_mitigate till 0 ger bara en varning om att det finns ett problem, medan inställning av split_lock_mitigate till 1 gör att processen som gjorde att låset saktades ner för att bevara prestanda för resten av systemet.
    • En ny implementering av qspinlock har föreslagits för PowerPC-arkitekturen, som visar högre prestanda och löser vissa låsningsproblem som uppstår i undantagsfall.
    • MSI (Message-Signaled Interrupts) avbrottshanteringskod har omarbetats, vilket eliminerar ackumulerade arkitektoniska problem och har lagt till stöd för att binda enskilda hanterare till olika enheter.
    • 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 ftrace, stackskydd, viloläge och standbylägen.
    • Möjligheten att tilldela namn till områden med delat anonymt minne har tillhandahållits (tidigare kunde namn endast tilldelas privata anonyma minne som tilldelats en specifik process).
    • Lade till en ny kärnkommandoradsparameter "trace_trigger", utformad för att aktivera en spårningstrigger som används för att binda villkorliga kommandon som anropas när en kontrollkontroll utlöses (till exempel trace_trigger=”sched_switch.stacktrace if prev_state == 2″).
    • Kraven för versionen av binutils-paketet har höjts. Att bygga kärnan kräver nu åtminstone binutils 2.25.
    • Vid anrop av exec() har möjligheten att placera en process i ett tidsnamnområde, där tiden skiljer sig från systemtiden, lagts till.
    • Vi har börjat överföra ytterligare funktionalitet från Rust-for-Linux-grenen relaterad till användningen av Rust-språket som ett andra språk för att utveckla drivrutiner och kärnmoduler. Rust-stöd är inaktiverat som standard och resulterar inte i att Rust ingår som ett obligatoriskt kärnbyggeberoende. Den grundläggande funktionaliteten som erbjöds i den senaste utgåvan är utökad för att stödja lågnivåkod, såsom Vec-typen och makron pr_debug!(), pr_cont!() och pr_alert!(), samt procedurmakrot "#[vtable" ]”, vilket förenklar arbetet med pekartabeller på funktioner. Tillägget av Rust-bindningar på hög nivå över kärndelsystem, vilket kommer att möjliggöra skapandet av fullfjädrade drivrutiner i Rust, förväntas i framtida utgåvor.
    • Typen "char" som används i kärnan är nu deklarerad osignerad som standard för alla arkitekturer.
    • Mekanismen för platta minnesallokering - SLOB (slab allocator), som designades för system med en liten mängd minne, har förklarats föråldrad. Istället för SLOB rekommenderas under normala förhållanden att använda SLUB eller SLAB. För system med en liten mängd minne, rekommenderas att använda SLUB i SLUB_TINY-läget.
  • Diskundersystem, I/O och filsystem
    • Förbättringar har gjorts av Btrfs som syftar till att fixa "skrivhålsproblemet" i RAID 5/6-implementationer (ett försök att återställa en RAID om en krasch inträffar under skrivning och det är omöjligt att förstå vilket block på vilken RAID-enhet som skrevs korrekt, vilket kan leda till blockförstöring, motsvarande underskrivna block). Dessutom aktiverar SSD:er nu automatiskt asynkron kasseringsoperation som standard när det är möjligt, vilket möjliggör förbättrad prestanda på grund av effektiv gruppering av kasseringsoperationer i köer och bearbetning av kön av en bakgrundsprocessor. Förbättrad prestanda för sändnings- och lseek-operationerna, såväl som FIEMAP ioctl.
    • Möjligheterna för att hantera fördröjd skrivning (återskrivning, bakgrundslagring av ändrad data) för blockenheter har utökats. I vissa situationer, som när du använder nätverksblockenheter eller USB-enheter, kan lata skrivningar resultera i stor RAM-förbrukning. För att kontrollera beteendet hos lata skrivningar och hålla sidcachestorleken inom vissa gränser har nya parametrar strict_limit, min_bytes, max_bytes, min_ratio_fine och max_ratio_fine introducerats i sysfs (/sys/class/bdi/).
    • F2FS-filsystemet implementerar en atomic replace ioctl-operation, som låter dig skriva data till en fil inom en enda atomär operation. F2FS lägger också till en blockcache för att hjälpa till att identifiera aktivt använda data eller data som inte har nåtts på länge.
    • I ext4 FS noteras endast felkorrigeringar.
    • Filsystemet ntfs3 erbjuder flera nya monteringsalternativ: "nocase" för att kontrollera skiftlägeskänslighet i fil- och katalognamn; windows_name för att förbjuda skapandet av filnamn som innehåller tecken som inte är giltiga för Windows; hide_dot_files för att styra tilldelningen av den dolda filetiketten för filer som börjar med en punkt.
    • Squashfs filsystem implementerar ett “threads=” monteringsalternativ, som låter dig definiera antalet trådar för att parallellisera dekompressionsoperationer. Squashfs introducerade också möjligheten att kartlägga användar-ID:n för monterade filsystem, som används för att matcha filerna för en specifik användare på en monterad främmande partition med en annan användare på det aktuella systemet.
    • Implementeringen av POSIX-åtkomstkontrollistor (POSIX ACL) har omarbetats. Den nya implementeringen eliminerar arkitektoniska problem, förenklar kodbasunderhållet och introducerar säkrare datatyper.
    • Delsystemet fscrypt, som används för transparent kryptering av filer och kataloger, har lagt till stöd för SM4-krypteringsalgoritmen (kinesisk standard GB/T 32907-2016).
    • Möjligheten att bygga kärnan utan stöd för NFSv2 har tillhandahållits (i framtiden planerar de att helt sluta stödja NFSv2).
    • Organisationen för kontroll av åtkomsträttigheter till NVMe-enheter har ändrats. Ger möjlighet att läsa och skriva till en NVMe-enhet om skrivprocessen har tillgång till enhetens dedikerade fil (tidigare behövde processen ha CAP_SYS_ADMIN-behörigheten).
    • Tog bort drivrutinen för CD/DVD-paketet, som togs bort 2016.
  • Virtualisering och säkerhet
    • En ny metod för skydd mot Retbleed-sårbarheten har implementerats i Intel- och AMD-processorer, med användning av samtalsdjupsspårning, vilket inte bromsar arbetet lika mycket som det tidigare nuvarande skyddet mot Retbleed. För att aktivera det nya läget har kärnans kommandoradsparameter "retbleed=stuff" föreslagits.
    • Lade till en hybrid FineIBT-instruktionsflödesskyddsmekanism, som kombinerar användningen av hårdvaruinstruktioner från Intel IBT (Indirect Branch Tracking) och mjukvaruskydd kCFI (kernel Control Flow Integrity) för att blockera överträdelser av den normala exekveringsordern (kontrollflödet) som ett resultat av användningen av exploateringar som modifierar pekare lagrade i minnet på funktioner. FineIBT tillåter exekvering genom indirekt hopp endast i fallet med ett hopp till ENDBR-instruktionen, som placeras i början av funktionen. Dessutom, analogt med kCFI-mekanismen, kontrolleras hasharna sedan för att garantera oföränderligheten av pekare.
    • Lade till restriktioner för att blockera attacker som manipulerar genereringen av "oops"-tillstånd, varefter problematiska uppgifter slutförs och tillståndet återställs utan att systemet stoppas. Med ett mycket stort antal anrop till "oops"-tillståndet inträffar ett referensräknarespill (refcount), vilket tillåter utnyttjande av sårbarheter orsakade av NULL-pekarereferenser. För att skydda mot sådana attacker, har en gräns lagts till i kärnan för det maximala antalet "oops"-utlösare, efter överskridande kommer kärnan att initiera en övergång till "panik"-tillståndet följt av en omstart, vilket inte tillåter att uppnå antal iterationer som krävs för att fylla över återräkningen. Som standard är gränsen satt till 10 tusen "oops", men om så önskas kan den ändras genom parametern oops_limit.
    • Lade till konfigurationsparameter LEGACY_TIOCSTI och sysctl legacy_tiocsti för att inaktivera möjligheten att lägga in data i terminalen med ioctl TIOCSTI, eftersom denna funktionalitet kan användas för att ersätta godtyckliga tecken i terminalens indatabuffert och simulera användarinmatning.
    • En ny typ av intern struktur, encoded_page, föreslås, där de nedre bitarna av pekaren används för att lagra ytterligare information som används för att skydda mot oavsiktlig dereferens av pekaren (om dereferens faktiskt är nödvändigt måste dessa extra bitar rensas först) .
    • På ARM64-plattformen, vid uppstart, är det möjligt att aktivera eller inaktivera mjukvaruimplementeringen av Shadow Stack-mekanismen, som används för att skydda mot överskrivning av returadressen från en funktion i händelse av ett buffertspill på stacken ( kärnan i skyddet är att spara returadressen i en separat "skuggstack" efter att kontrollen har överförts till funktionen och hämtat den givna adressen innan funktionen avslutas). Stöd för hårdvaru- och mjukvaruimplementeringar av Shadow Stack i en kärnsamling låter dig använda en kärna på olika ARM-system, oavsett deras stöd för instruktioner för pekarautentisering. Inkluderingen av en mjukvaruimplementering utförs genom att de nödvändiga instruktionerna ersätts i koden under laddning.
    • Lade till stöd för att använda den asynkrona utgångsmeddelandemekanismen på Intel-processorer, vilket gör det möjligt att detektera enstegsattacker på kod som exekveras i SGX-enklaver.
    • En uppsättning operationer föreslås som tillåter hypervisorn att stödja förfrågningar från Intel TDX (Trusted Domain Extensions) gästsystem.
    • Kärnbyggnadsinställningarna RANDOM_TRUST_BOOTLOADER och RANDOM_TRUST_CPU har tagits bort, till förmån för motsvarande kommandoradsalternativ random.trust_bootloader och random.trust_cpu.
    • Landlock-mekanismen, som låter dig begränsa interaktionen mellan en grupp av processer och den externa miljön, har lagt till stöd för flaggan LANDLOCK_ACCESS_FS_TRUNCATE, vilket gör det möjligt att kontrollera utförandet av filavkortningsoperationer.
  • Nätverksdelsystem
    • För IPv6 har stöd för PLB (Protective Load Balancing) lagts till, en lastbalanseringsmekanism mellan nätverkslänkar som syftar till att minska överbelastningspunkter på datacenterswitchar. Genom att ändra IPv6-flödesetiketten ändrar PLB slumpmässigt paketvägar för att balansera belastningen på switchportar. För att minska omordning av paket utförs denna operation efter perioder av inaktiv när det är möjligt. Användningen av PLB i Googles datacenter har minskat belastningsobalansen på switchportar med i genomsnitt 60 %, minskat paketförlusten med 33 % och minskat latensen med 20 %.
    • Tillagd drivrutin för MediaTek-enheter som stöder Wi-Fi 7 (802.11be).
    • Tillagt stöd för 800-gigabit-länkar.
    • Lade till möjligheten att byta namn på nätverksgränssnitt i farten, utan att sluta arbeta.
    • Ett omnämnande av IP-adressen som paketet kom till har lagts till i loggmeddelandena om SYN flood.
    • För UDP har möjligheten att använda separata hashtabeller för olika nätverksnamnområden implementerats.
    • För nätverksbryggor har stöd för autentiseringsmetoden MAB (MAC Authentication Bypass) implementerats.
    • För CAN-protokollet (CAN_RAW) har stöd för SO_MARK-socketläget implementerats för att ansluta fwmark-baserade trafikfilter.
    • ipset implementerar en ny bitmaskparameter som låter dig ställa in en mask baserad på godtyckliga bitar i IP-adressen (till exempel "ipset create set1 hash:ip bitmask 255.128.255.0").
    • Lade till stöd för bearbetning av interna rubriker inuti tunnlade paket till nf_tables.
  • Оборудование
    • Delsystemet "accel" har lagts till med implementeringen av ett ramverk för beräkningsacceleratorer, som kan levereras antingen i form av individuella ASIC:er eller i form av IP-block inuti SoC och GPU. Dessa acceleratorer är främst inriktade på att påskynda lösningen av problem med maskininlärning.
    • Amdgpu-drivrutinen inkluderar stöd för GC, PSP, SMU och NBIO IP-komponenter. För ARM64-system är stöd för DCN (Display Core Next) implementerat. Implementeringen av skyddad skärmutgång har flyttats från att använda DCN10 till DCN21 och kan nu användas vid anslutning av flera skärmar.
    • Drivrutinen i915 (Intel) har stabiliserat stöd för diskreta Intel Arc (DG2/Alchemist) grafikkort.
    • Nouveau-drivrutinen stöder NVIDIA GA102 (RTX 30) GPU:er baserade på Ampere-arkitekturen. För nva3 (GT215)-kort har möjligheten att styra bakgrundsbelysningen lagts till.
    • Tillagt stöd för trådlösa adaptrar baserade på Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) och MediaTek MT7996-chips, Broadcom BCM4377/4378/4387 Bluetooth-gränssnitt, samt Motorcomm GE.
    • Stöd för ASoC (ALSA System on Chip) för inbyggda ljudchips HP Stream 8, Advantech MICA-071, Dell SKU 0C11, Intel ALC5682I-VD, Xiaomi Redmi Book Pro 14 2022, i.MX93, Armada 38x, RK3588. Lagt till stöd för ljudgränssnitt Focusrite Saffire Pro 40. Lagt till Realtek RT1318 audio codec.
    • Tillagt stöd för Sonys smartphones och surfplattor (Xperia 10 IV, 5 IV, X och X compact, OnePlus One, 3, 3T och Nord N100, Xiaomi Poco F1 och Mi6, Huawei Watch, Google Pixel 3a, Samsung Galaxy Tab 4 10.1.
    • Lade till stöd för ARM SoC och Apple T6000 (M1 Pro), T6001 (M1 Max), T6002 (M1 Ultra), Qualcomm MSM8996 Pro (Snapdragon 821), SM6115 (Snapdragon 662), SM4250 (Snapdragon 460), 6375 kort , SDM695 (Snapdragon 670), MSM670 (Snapdragon 8976), MSM652 (Snapdragon 8956), RK650 Odroid-Go/rg3326, Zyxel NSA351S, InnoComm i.MX310MM, Odroid Go Ultra.

Samtidigt bildade Latin American Free Software Foundation en version av den helt fria kärnan 6.2 - Linux-libre 6.2-gnu, rensat från element av firmware och drivrutiner som innehåller proprietära komponenter eller kodsektioner, vars omfattning är begränsad av tillverkaren. Den nya utgåvan rensar upp nya blobbar i nouveau-drivrutinen. Blob-laddning är inaktiverad i mt7622, ​​​​mt7996 wifi och bcm4377 bluetooth-drivrutiner. Rensat upp blobnamn i dts-filer för Aarch64-arkitekturen. Uppdaterad blob-rensningskod i olika drivrutiner och delsystem. Slutade rengöra s5k4ecgx-drivrutinen eftersom den togs bort från kärnan.

Källa: opennet.ru

Lägg en kommentar