Efter tvÄ mÄnaders utveckling presenterade Linus Torvalds lanseringen av Linux-kÀrnan 7.2. Bland de mest anmÀrkningsvÀrda förÀndringarna finns en mekanism för USB4STREAM datastreaming, prestandaoptimeringar för btrfs, xfs och ext4, fortsÀttning pÄ borttagningen av stöd för CPU i486, möjlighet till skapande av inbÀddade schemalÀggare SCHED_EXT, minskad minnesanvÀndning i bytesystemet, snabbare unnamed pipes, stöd för Intel MBEC och AMD GMET-utvidgningar i KVM samt borttagning av AppleTalk-protokollet. Inledande stöd för HDMI 2.1 FRL i AMDGPU-drivrutinen.
De viktigaste nyheterna i kÀrna 7.2 (1, 2, 3):
- Disksubsystem, in- och utmatning och filsystem
- I iomap-mekanismen har onödiga anrop till funktionen memset för redan avslutade iterationer i funktionen iomap_iter() tagits bort, vilket vid hög intensitet av in- och utdata pÄ snabba NVMe-lagringar har ökat antalet in- och utdataoperationer per sekund (IOPS) med 5 % i genomförda tester vid anvÀndning av filsystemen ext4 och xfs.
- I XFS har stabilt stöd för zonerade lagringsenheter (avdelning i zoner av blockgrupp eller sektorer, dÀr endast sekventiell tillÀgg av data tillÄts, vilket uppdaterar hela blockgruppen) utannonserats.
- I Btrfs har stöd för stora minnessidor (large folios) aktiverats som standard, vilket minskar overhead och ökar prestanda vid intensiv sekventiell in- och utdata. Experimentellt stöd för enorma sidor (âhuge foliosâ) upp till 2 MB har lagts till. En ny ioctl GET_CSUMS har lagts till för att hĂ€mta information om kontrollsummor i anvĂ€ndarutrymmet, till exempel för verktyget mkfs och optimering av deduplicering. Prestanda för sekventiell skrivning av data har ökat med 15 % och direkt in- och utdata med 59 %.
- I filsystemet Ext4 har implementeringen av mekanismen 'fast commit' omarbetats avsevĂ€rt för att förhindra konkurrerande och ömsesidiga blockeringar. Statistik över inode-snapshots har lagts till via /proc/fs/ext4/*/fc_info. Prestandan för berĂ€kning av hash för kataloger har optimerats (för namn som Ă€r 255 tecken lĂ„ng har hastigheten nĂ€stan ökat dubbelt, 64 tecken med 27 %, 32 tecken â 11 %).
- I F2FS har stöd för att returnera fserror-fel lagts till, vilket gör det möjligt att frÄn anvÀndarutrymmet övervaka problem med filsystemet. Tiden som spenderas i samband med hantering av avbrott har minskats.
- I Device Mapper (DM) har en ny handler dm-inlinecrypt lagts till för att möjliggöra transparent kryptering och dekryptering av blockenheter med hjÀlp av hÄrdvaruenheter med inline-krypteringsfunktion.
- Dokumentation för att lÀgga till nya filsystem i kÀrnan har föreslagits.
- I NFS har standardblockstorleken ökat till 4 MB pÄ system med minst 16 GB RAM (för manuell justering av blockstorleken kan /proc/fs/nfsd/max_block_size anvÀndas). Stöd för delegatkontroll av katalogen (directory delegation) har lagts till, vilket gör det möjligt att utföra operationer med denna katalog under en viss tid utan att kontrollera förÀndringar av tillstÄndet. servern.
- I SMB-servern har stöd för filer som lagras komprimerat lagts till, liksom komprimering av data vid överföring över nÀtverket.
- I den nya NTFS-implementeringen (ntfsplus) har stöd för symboliska lÀnkar i Windows lagts till, och korrekt hantering av mÄnga typer av metadatafel har sÀkerstÀllts.
- Backend fscache för cachelagring av data frÄn EROFS (Enhanced Read-Only File System) har tagits bort, vilken för tvÄ Är sedan förklarades som förÄldrad.
- I Ceph-filsystemet har stöd för manuell ÄterstÀllning av klientsessioner lagts till.
- I 9P-filsystemet har optimeringar genomförts som har ökat hastigheten i scenarier som projektkompilering.
- I systemanropet file_getattr() har flaggor lagts till för att fÄ information om skiljeteckenens betydelse i filsystemet. Flaggan FS_XFLAG_CASEFOLD indikerar att kontrollen av filnamn sker utan att ta hÀnsyn till skiljetecken, medan flaggan FS_XFLAG_CASENONPRESERVING indikerar att information om skiljetecken inte bevaras vid skapandet av nya filnamn. De angivna flaggorna kan tillÀmpas i NFS-klienter som fungerar utan att ta hÀnsyn till skiljetecken.
- I systemanropet openat2() har flaggan O_EMPTYPATH lagts till, vilket tillÄter överföring av en tom filvÀg. I detta fall bestÀms vÀgen till den öppnade filen baserat pÄ den överförda filbeskrivaren.
- I systemanropet openat2() har flaggan OPENAT2_REGULAR lagts till, vilket tillÄter öppning av endast vanliga filer (vid försök att öppna en specialfil, till exempel en socket, kanal eller enhet, kommer felet EFTYPE att returneras).
- Minne och systemtjÀnster
- En USB4STREAM-mekanism har implementerats för att strömma data mellan datorer kopplade med en USB4-kabel. Enheten /dev/tbstreamX har lagts till, vilket möjliggör lÀsning och skrivning av data med hjÀlp av standardfunktionerna read() och write(), pÄ liknande sÀtt som lÀsning och skrivning i filer. Till exempel kan information skickas pÄ en vÀrd med kommandot "echo hello > /dev/tbstream0", medan den andra vÀrden kan lÀsa med kommandot "cat /dev/tbstream0". USB4STREAM-mekanismen kan kombineras med möjligheten att skapa ett nÀtverkskoppling via USB4-kabel (thunderbolt_net) eller anvÀndas separat vid behov av datatransfer mellan applikationer som inte stöder nÀtverks-sockets.
- Den andra serien av Ă€ndringar för att upphöra med stödet för i486-processorer har aktiverats. Ăver 13 rader kod relaterade till emulering av block för flyttalsberĂ€kningar för processorer utan FPU har tagits bort. Stödet för i486-processorer utan hĂ„rdvaruoperationer CX8 (jĂ€mför och byt 8 byte) och TSC (CPU-cykelrĂ€knaren som anvĂ€nds i schemalĂ€ggaren), koden för att emulera dem har ocksĂ„ tagits bort.
- Stödet för AMD Geode-processorer, som anvÀnds i OLPC XO-1-datorn, har förklarats som övergivet (orphaned).
- Stödet för uppdatering av implementationen av Intel TDX (Trusted Domain Extensions) har lagts till, vilket anvÀnds för att kryptera minnet i gÀstsysten. TDX implementeras i form av en speciell programmatisk runtime-modul som under initialiseringen överförs av BIOS frÄn flashminnet till RAM. Möjligheter för att hantera denna modul har lagts till i kÀrnan och för att byta till en nyare version pÄ det fungerande systemet utan behov av omstart.
- En ny GPU-resursplanerare (Fair GPU scheduler) har implementerats för att bestÀmma ordningen för exekvering av GPU-uppgifter som skickas av processer som anvÀnder GPU. IstÀllet för att anvÀnda en traditionell FIDO-kö för GPU-förfrÄgningar, anvÀnder den nya planerarens mekanismer för rÀttvis resursfördelning, inspirerad av CFS (Completely Fair Scheduler) som tillÀmpar en schemalÀggning med tidsövergÄng till nÀsta process. Den mest mÀrkbara effekten av att anvÀnda den nya planeraren ses vid samtidig exekvering av interaktiva uppgifter som aktivt arbetar med GPU. I sista stund före slÀppet av kÀrna 7.2 avbröts aktiveringen av Fair GPU scheduler och den gamla FIFO-planeraren ÄterstÀlldes pÄ grund av behovet av debug av regressioner som ledde till minskad prestanda och 100% belastning pÄ GPU vid körning av vissa spel i Proton.
- Ăndringar i eBPF-under-systemet: Möjligheten att koppla en BPF-program till flera spĂ„rningspunkter (tracepoints) har lagts till. BPF-program kopplade till spĂ„rningspunkter har fĂ„tt möjlighet till Ă„tkomst till minnet hos komponenter som körs i anvĂ€ndarutrymmet, med korrekt bearbetning av Ă„tkomst till icke allokerade minnessidor (page fault). Systemanropet bpf() har fĂ„tt stöd för typiska attribut (log_buf, log_size, log_level och log_true_size), vilket möjliggör en enhetlig överföring av metadata i alla BPF-kommandon, utan begrĂ€nsning till kommandon BPF_PROG_LOAD, BPF_BTF_LOAD och BPF_MAP_CREATE. BegrĂ€nsningen av att överföra mer Ă€n 5 parametrar i BPF-funktioner har tagits bort. SĂ€ker Ă„tkomst till den delade minnet bpf_arena har möjliggjorts utan rĂ€dsla för att fĂ„ Ă„tkomst till icke allokerade minnessidor (page fault). En ny variant av BPF hash map-strukturen har implementerats, som tillĂ„ter dynamisk storleksĂ€ndring.
- Utdataformatet för «/proc/interrups» med statistik om avbrott har optimerats, strukturerna för lagring av avbrottsrÀknare har moderniserats och caching har lagts till.
- Genereringen av filen «/proc/filesystems», som anvÀnds i libselinux, har pÄskyndats.
- I schemalÀggaren har stöd för belastningsbalansering mellan CPU-kÀrnor, vilket tar hÀnsyn till tillstÄndet i processorns interna cache. SchemalÀggaren försöker nu gruppera processer som anvÀnder gemensamma resurser, till exempel trÄdar frÄn samma process, för att de ska anvÀnda samma nivÄ 1-cache, vilket ökar effektiviteten vid datatillgÄng genom att öka sannolikheten att de nödvÀndiga data finns i cachen.
- I mekanismen SCHED_EXT, som möjliggör anvÀndning av BPF för att skapa CPU-schemalÀggare, har genomförandet av möjligheten att skapa inbÀddade schemalÀggare (sub-scheduler) fortsatt, via vilka varje cgroup kan inkludera sin egen schemalÀggare.
- Arbetet med att överföra Àndringar frÄn Rust-for-Linux-grenen, relaterade till anvÀndningen av Rust som det andra sprÄket för utveckling av drivrutiner och kÀrnmoduler, har fortsatt (stöd för Rust Àr inte aktiverat som standard och ingÄr inte i de obligatoriska byggberoendena för kÀrnan). Möjligheten att anvÀnda Rust i kÀrnan har realiserats för arkitektur s390. Paketet "zerocopy" har inkluderats med snabba primitiva metoder för minneshantering för kod i "unsafe"-lÀge.
- Den minimi version av LLVM-verktygen som krÀvs för att bygga kÀrnan har höjts till 17.0.1.
- I den minimalistiska C-biblioteket nolibc, som följer med Linux-kÀrnans kÀllkod och tillhandahÄller ett grÀnssnitt över grundlÀggande systemanrop, har stöd för arkitekturerna OpenRISC och 32-bit PA-RISC realiserats.
- I byte-systemet har optimeringar genomförts för att öka prestandan och minska minnesförbrukningen inom systemet genom att eliminera overhead vid lagring av statiska metadata och enhetliggöra hanteringen av anonym och delad minne vid anvÀndning av swap. Minskningen av minnesförbrukningen Àr ganska markant, till exempel nÀr en swap-partition pÄ 1 TB monteras, observeras en minskning av minnesförbrukningen med cirka 512 MB.
- Effektiviteten hos mekanismen för minnesutskjutning, som tar bort eller flyttar minnesomrÄden till bytesystemet för att frigöra minne vid brist pÄ minne i systemet, har ökat. Vid vissa belastningsformer, till exempel vid testning av MongoDB med YCSB (Yahoo! Cloud Serving Benchmark), observeras en prestandaökning pÄ upp till 30%.
- Ett kommando "make sbom" har lagts till i byggsystemet för att generera SBOM-listor (Software Bill Of Materials) som Äterspeglar komponenter, bibliotek och beroenden som anvÀnds i den aktuella kÀrnbyggnaden, samt information om deras licenser, erhÄllen frÄn SPDX-rubriker i kodfiler.
- I implementeringen av namnlösa rör (pipe) har optimering av lÄsningarna genomförts (minnesallokeringsoperationer har flyttats utanför lÄsningsomrÄdet), vilket har ökat genomströmningen av namnlösa rör med 21-48% och minskat fördröjningarna med 17-33%.
- Virtualisering och sÀkerhet
- I slab-minnesfördelningsmekanismen (slab allocator) har möjligheten att anvÀnda minnesallokeringstoken (Allocation Token), implementerade i Clang 22, lagts till. Token gör det möjligt att mÀrka minnesallokeringsoperationer med unika identifierare och organisera separat placering av olika typer av objekt för att komplicera utnyttjandet av sÄrbarheter orsakade av buffertöverskridningar (vid uppdelning Àr det svÄrt att anvÀnda buffertöverskridningen i en typ av objekt för att skada andra typer).
- AF_ALG-mekanismen, som utnyttjades i Copy Fail-sÄrbarheten för att modifiera data i sidcache, har förklarats förÄldrad och planeras att tas bort i en av de kommande utgÄvorna. AF_ALG möjliggör utnyttjande av hÄrdvaruacceleratorer för kryptografiska berÀkningar i kÀrnans Crypto API, men anvÀnds i ganska specifika situationer. I kÀrnan 7.2 har stöd för asynkron in-/utmatning, Àldre drivrutiner och zero-copy-mekanismen i implementeringen av skcipher och aead tagits bort frÄn AF_ALG. Endast programvaruimplementeringar av kryptografiska algoritmer har kvarblivit, och stödet för hÄrdvaru-kryptoacceleratorer i kÀrnans crypto API har tagits bort, eftersom AF_ALG avsevÀrt ökar angriparens yta utan att erbjuda prestandavinster jÀmfört med kryptografi i anvÀndarutrymmet. AF_ALG anvÀndes i Cryptsetup-verktyget, men dess stöd har tagits bort i den senaste versionen 2.8.7.
- I IMA-mekanismen (Integrity Measurement Architecture), som gör det möjligt för externa tjÀnster att verifiera kÀrnsystemets lÀge för att sÀkerstÀlla deras Àkthet, har stöd för att exportera interna tabeller med mÀtresultat till anvÀndarutrymmet lagts till med rensning frÄn kÀrnbuffrar för att spara minne.
- I modulen Landlock, som ger oprivilegerade program möjligheter att begrÀnsa anvÀndningen av Linux-kÀrnobjekt (filhierarkier, nÀtverks-sockets, ioctl, osv.), har stöd för att hantera Ätkomst till UDP-sockets lagts till, samt möjligheten att selektivt stÀnga av loggningen av information om blockering av objekt för att förhindra att loggen fylls med irrelevant information.
- KÀrnan har tagits bort frÄn anvÀndningen av funktionen strncpy(), som kopierar ett angivet antal byte frÄn en ingÄngsstrÀng. AnvÀndningen av strncpy() medförde risk för fel pÄ grund av att nolltecknet i slutet av strÀngen kunde missas eller fyllas pÄ med nollor. IstÀllet rekommenderas det att anvÀnda funktionerna strscpy() och strscpy_pad() för att kopiera strÀngar som avslutas med nolltecken, samt strtomem_pad(), memcpy_and_pad() och memcpy() för att kopiera strÀngar av kÀnd, fast storlek. Arbetet med att ta bort strncpy() frÄn kÀrnan pÄbörjades 2020 och krÀvde att 362 förÀndringar gjordes av 70 utvecklare.
- I hypervisorn KVM Stödet för Intel MBEC (Mode-Based Execution Control) och AMD GMET (Guest-Mode Execution Trap) har lagts till, vilket gör det möjligt att separat hantera ÄtkomstrÀttigheterna för kodexekvering för kÀrnan och anvÀndarutrymmet i gÀstsystemen i minnesöversÀttnings-tabellerna. Tidigare tillÀt Intel- och AMD:s hÄrdvaruvirtualiseringsutvidgningar att markera minnessidor som endast exekverbara med en bit i programvaruseparation av rÀttigheter för kÀrnan och anvÀndarutrymmet pÄ hypervisor-nivÄ. AnvÀndningen av MBEC och GMET gör det möjligt att utesluta verifieringar pÄ hypervisor-sidan och betydligt minska den resurskrÀvande intensiteten av kontrollöverföringar frÄn gÀstsystemet till hypervisorn (VMexit).
- NĂ€tverkssystemet
- Implementeringen av TCP-AO (TCP Authentication Option, RFC 5925) har övergÄtt till att anvÀnda det nya kryptografiska biblioteket libcrypto, vilket har förenklat koden och ökat effektiviteten. TCP-AO gör det möjligt att verifiera TCP-rubriker med MAC-koder (Message Authentication Code), och anvÀnder mer moderna algoritmer HMAC-SHA-1-96 och AES-128-CMAC-96 istÀllet för den tidigare tillgÀngliga alternativet TCP-MD5 baserat pÄ den förÄldrade MD5-algoritmen.
- Antalet undermappar som stöds för Multipath TCP (MPTCP) har ökat frÄn 8 till 64.
- Arbetet med att minska anvÀndningen av den globala lÄsningen rtnl_lock i nÀtverksstacken hos kÀrnan har fortsatt.
- FrÄn kÀrnan har genomförandet av AppleTalk-protokollstacken tagits bort, vilket anvÀndes i Apple-datorer sedan 1985 och under 1990-talet ersattes av TCP/IP. Dessutom har komponenter frÄn ATM-datatjÀnstteknologin, som inte Àr relaterade till PPPoATM, samt nÀtverksgrÀnssnitt för ARCnet baserade pÄ ISA- och PCMCIA-bussar, Bluetooth-adaptrar med PCMCIA-grÀnssnitt, Chelsea TLS-acceleratorer, kod för integrering av TLS med sockmap och stöd för frekvensomrÄdena 5/10 MHz i den trÄdlösa stacken cfg80211/mac80211 tagits bort. PÄ grund av olösliga problem med blockering och avsaknad av underhÄll har en specifik implementering för acceleration av TLS-bearbetning baserad pÄ TCP Offload Engine tagits bort (den mer omfattande implementeringen av TLS offload har bevarats). Koden för kompatibilitet med 32-bitars x_tables pÄ 64-bitars system har inaktiverats och planeras att tas bort.
- I drivrutinen pppoe har stöd för mekanismerna GRO (Generic Receive Offload) och GSO (Generic Segmentation Offload) lagts till för hÄrdvaruaccelerering av ombyggnad och segmentering av paket. AnvÀndning av GRO och GSO kan avsevÀrt öka genomströmningen för inkommande trafik; till exempel har den maximala genomströmningen pÄ MediaTek MT7621-enheter i konfiguration med adressöversÀttning ökat frÄn 130 Mbit/s till 630 Mbit/s.
- Utrustning
- I AMDGPU-drivrutinen har grundlÀggande stöd för HDMI 2.1 FRL (Fixed Rate Link) implementerats, vilket möjliggör överföring av okomprimerad video med kvalitet 4K/120Hz och 8K/60Hz. Tidigare har stödet för HDMI 2.1 inte kunnat realiseras i öppna drivrutiner pÄ grund av licenskrav frÄn HDMI Forum, men nu har AMD lyckats nÄ en överenskommelse om en sÄdan implementering.
- I i915-drivrutinen har stöd för att stÀlla in bakgrundsfÀrg av displaykontrollern lagts till. Parametern pin_params.needs_low_address har implementerats.
- Arbetet med drm-drivrutinen (Direct Rendering Manager) Xe för GPU baserad pÄ Intel Xe-arkitekturen, som anvÀnds i Intel Arc grafikkort och integrerad grafik, har fortsatt sedan Tiger Lake-processorerna. GrundlÀggande stöd för CRI-plattformen (Crescent Island) har lagts till. För dGPU-plattformar har Xe3p implementerat en systemkontroller.
- I Nouveau-drivrutinen har problem med NVIDIA GA100 GPU lösts.
- I v3d-drivrutinen har möjligheten att hantera energiförbrukningen för v3D GPU pÄ Raspberry Pi-kort lagts till.
- Integrationen av Nova-drivrutinskomponenter för NVIDIA GPU:er med GSP-firmware har fortsatt, och anvĂ€nds frĂ„n NVIDIA GeForce RTX 2000-serien baserad pĂ„ Turing-mikroarkitektur. Drivrutinen Ă€r skriven i Rust. UnterstĂŒtzung fĂŒr NVIDIA GPU GA100 samt Hopper- och Blackwell-serierna har lagts till.
- Stöd för ARM-plattformar, SoC och enheter har lagts till: Apple t8122 (M3), Motorola Edge 30, Nothing Phone 3a, Google Pixel 3a XL, Qualcomm Dragonwing IPQ9650, Huawei Hawi, ZTE zx297520v3, Renesas R-Car M3Le, ASPEED AST27xx, Cortina Gemini, NXP i.MX6/8/9, NXP LX2160A, TI K3 AM62x.
Samtidigt har den latinamerikanska Stiftelsen för fri programvara skapat en version av det helt fria kĂ€rnet 7.2 â Linux-libre 7.2-gnu, som Ă€r rensad frĂ„n firmware och drivrutiner som innehĂ„ller icke-fria komponenter eller kodavsnitt vars anvĂ€ndningsomrĂ„de begrĂ€nsas av tillverkaren. I version 7.2 har nya drivrutiner som rt722-sdca och tac5xx2 rensats frĂ„n blobs. Kodrengöringen i drivrutiner för amdgpu, nova core, qcom iris, q6v5, iwlwifi, amdxnda, adreno, r8152 och mt792x har uppdaterats. Justeringar har gjorts av grĂ€nssnitten för laddning av firmware. Namnen pĂ„ blobs i dts-filer (devicetree) för ARM-chips har rensats.
KĂ€lla: opennet.ru
