Efter tvÄ mÄnaders utveckling presenterade Linus Torvalds versionen av Linux-kÀrnan 6.8. Bland de mest framtrÀdande förÀndringarna finns: Xe-drivrutinen för Intels GPU, skyddslÀge för blockenheter med monterade filsystem, Deadline server schemalÀggar mekanism, automatisk optimering av sammanslagning av identiska minnessidor, den första drivrutinen pÄ Rust-sprÄket, systemanropen listmount och statmount, borttagning av bpfilter och SLAB, guest_memfd mekanism i KVM, och profilering av datatillgÄng.
I den nya versionen har 15 641 korrigeringar gjorts av 2018 utvecklare, patchens storlek Àr 44 MB (Àndringarna berörde 12 212 filer, 663 864 kodrader har lagts till, 339 094 rader har tagits bort). I den föregÄende utgÄvan fanns 18 405 korrigeringar frÄn 2 066 utvecklare, patchens storlek var 72 MB. Cirka 42 % av alla förÀndringar i 6.8 Àr relaterade till enhetsdrivrutiner, cirka 15 % förÀndringar handlar om uppdatering av kod som Àr specifik för hÄrdvaruarkitekturer, 14 % Àr kopplade till nÀtverksstacken, 6 % till filsystem och 3 % till interna subsystem i kÀrnan.
I Git-repositoriet för kÀrna 6.8 finns det 9,996 miljoner objekt, vilket indikerar att den kommande kÀrnan 6.9 kommer att nÄ den symboliska grÀnsen pÄ 10 miljoner git-objekt. Tidigare har byten av grenenumren 3.x och 4.x korrelerat vÀl med antalet git-objekt i repositoriet - kÀrnan 3.0 slÀpptes nÀr repositoriet hade cirka 2 miljoner objekt, och kÀrnan 4.0 - 4 miljoner objekt. Vidare bröts logiken i 2019 nÀr version 5.0 slÀpptes, eftersom repositoriet dÄ innehöll cirka 6,5 miljoner git-objekt.
Huvudsakliga nyheter i kÀrnan 6.8:
- Disksubsystem, in- och utmatning och filsystem
- LÀget för blockering av direkt skrivning till blockenheter med monterade filsystem har lagts till (efter aktivering av lÀget kan inte anvÀndaren root göra Àndringar i filsystemet via manipulationer pÄ nivÄ av blockenheten). Som standard Àr lÀget avstÀngt och krÀver att parametern BLK_DEV_WRITE_MOUNTED anges vid kompilering. För partitioner med Btrfs fungerar blockeringen för nÀrvarande inte, eftersom de nödvÀndiga Àndringarna Ànnu inte har antagits i Btrfs-koden.
- Systemanropen listmount() och statmount() har lagts till, vilket möjliggör för anvÀndarrummet att fÄ detaljerad information om monterade filsystem.
- I XFS-filsystemet har arbetet fortsatt med implementeringen av möjligheten att anvÀnda verktyget fsck för att kontrollera och ÄtgÀrda identifierade problem i online-lÀge, utan att demontera filsystemet.
- I Ext4 för block som Àr mindre Àn minnessidan anvÀnds anropet dioread_nolock, vilket möjliggör bÀttre prestanda genom att bli av med onödiga lÄsningar. Vissa funktioner har översatts för att anvÀnda minnessidans folios.
- I Btrfs har stöd för monteringsflaggan "nospace_cache" lagts till för att inaktivera cachen för lediga block. Vissa funktioner har översatts för att anvÀnda minnessidans folios.
- I filsystemet EROFS (Extendable Read-Only File System), avsett för anvÀndning pÄ partitioner som endast Àr tillgÀngliga i skrivskyddat lÀge, har stöd för komprimerade sub-sidor lagts till och prestandan har förbÀttrats i minnesbristsituationer.
- I filsystemet F2FS har stödet för zonade lagringsenheter förbÀttrats (uppdelning i grupper av block eller sektorer dÀr endast sekventiell tillÀgg av data Àr tillÄten med en fullstÀndig uppdatering av hela blockgruppen).
- För SMB-filsystemet har möjligheten att skapa block- och symboliska enhetsfiler realiserats.
- I Bcachefs har delvis stöd för kontroll och ÄterstÀllande av integriteten hos monterade filsystem lagts till.
- I device-mapper-subsystemet har stöd för handhavande MD_LINEAR, MD_MULTIPATH och MD_FAULTY upphört, dessa förklarades obsoleta 2021.
- Minne och systemtjÀnster
- I Zswap-subsystemet har en funktion lagts till som aktiveras vid brist pĂ„ RAM, vilket tvingar ut "kalla" sidor frĂ„n minnet till en riktig vĂ€xlingspartition, sidor som inte har begĂ€rts och som troligtvis inte kommer att anvĂ€ndas. Zswap cachelagrar sidor som förvisas till vĂ€xlingspartitionen och lagrar dem i RAM i komprimerad form sĂ„ mycket som möjligt utan att slĂ€ppa dem till den verkliga, okomprimerade vĂ€xlingspartitionen pĂ„ disken. Ăndringarna vid minnesbrist gör det möjligt att minska storleken pĂ„ den lagrade Zswap-poolen i RAM och frigöra minne för systemet.
- I Zswap har ett nytt lÀge föreslagits som helt inaktiverar fördröjd skrivning (writeback) till den verkliga vÀxlingspartitionen om skrivningsförsöket misslyckas och inte slÀpper sidor som redan finns i Zswap-poolen till vÀxlingspartitionen.
- I schemalÀggaren har en mekanism för SCHED_DEADLINE-servern lagts till, som löser problemet med att CPU-resurser inte tilldelas vanliga uppgifter nÀr CPU:n domineras av högprioriterade (realtids) uppgifter. För att förhindra CPU-monopol i kÀrnan anvÀndes tidigare mekanismen Realtime throttling, som försökte reservera 5% för lÄgt prioriterade uppgifter och lÀmnade 95% av tiden till realtidsuppgifter. Denna mekanism var inte tillfredsstÀllande eftersom vanliga uppgifter i mÄnga situationer inte fick tillrÀckligt med processortid. SCHED_DEADLINE-servern implementerar en mer effektiv resursreservationsmekanism.
- I DAMON (Data Access MONitor) subsystemet, som möjliggör övervakning av processens Ätkomst till data i RAM-minnet (till exempel kan man se vilka minnesomrÄden som processen har Ätkomst till och vilka omrÄden som förblivit oanvÀnda), har en mekanism för automatisk justering av minneskonsumtionsaggressivitet lagts till baserat pÄ angivna kvoter.
- Stödet för mĂ„ngstorleks stora minnessidor (mTHP â multi-size Transparent Huge Pages) har lagts till, vilket möjliggör allokering av minne i block som Ă€r större Ă€n grundlĂ€ggande sidor men mindre Ă€n traditionella THP-sidor.
- Stödet för stora folios (page folios, sammanslagna minnessidor) för anonymt minne (icke-kopplad till filsystemet, till exempel allokerat via malloc) har lagts till. Ăndringen syftar till att öka prestanda genom att allokera stora bitar minne nĂ€r man hanterar oanvĂ€nda minnessidor (page faults). AnvĂ€ndningen av stora folios har till exempel möjliggjort en 5% minskning av tiden för att Ă„terkompilera kĂ€rnan (med en minskning av tiden vid kĂ€rnnivĂ„ pĂ„ 40%).
- I kÀrnkonfigurationsfilen har parametern TRANSPARENT_HUGEPAGE_NEVER lagts till, vilket ger möjlighet att inaktivera anvÀndningen av stora minnessidor (Transparent Huge Pages).
- I systemanropet userfaultfd(), som möjliggör skapande av hanterare för oanvÀnda minnessidor (page faults) i anvÀndarutrymmet, har operationen UFFDIO_MOVE lagts till, vilket tillÄter flyttning av minnessidor i det virtuella adressutrymmet utan att utföra operationen för minnesallokering. I genomförda tester möjliggjorde tillÀmpningen av UFFDIO_MOVE en 40% minskning av tiden för minnespackning jÀmfört med anvÀndningen av operationen UFFDIO_COPY.
- En mekanism för "KSM advisor" har lagts till, vilket gör det möjligt att automatiskt optimera parametrarna för delsystemet för sammanslagning av identiska minnessidor (KSM - Kernel Samepage Merging).
- Ăverföringen av Ă€ndringar frĂ„n Rust-for-Linux-grenen har fortsatt, som rör anvĂ€ndningen av sprĂ„k som det andra sprĂ„ket för utveckling av drivrutiner och kĂ€rnmoduler (stödet för Rust Ă€r inaktiverat som standard och inkluderar inte Rust bland de obligatoriska byggberoenden för kĂ€rnan). I den nya versionen har Ă€ndringar inkluderats som lĂ€gger till en Rust-bindning ovanför abstraheringsnivĂ„n phylib och anvĂ€nder denna bindning drivrutinen ax88796b_rust, som ger stöd för PHY-grĂ€nssnittet för Ethernet-kontrollenheten Asix AX88772A (100MBit). NĂ€r det gĂ€ller funktionalitet Ă€r Rust-drivrutinen helt ekvivalent med den gamla drivrutinen ax88796b, skriven i C, och kan anvĂ€ndas med nĂ€tverkskort frĂ„n X-Surf 100, som har AX88796B-chippet. För LoongArch-arkitekturen har möjligheten att skriva moduler med Rust lagts till. ĂvergĂ„ngen till att anvĂ€nda Rust-version 1.74.1 har genomförts.
- En BPF-tokenmekanism har lagts till, vilket möjliggör selektiv delegering av hanteringen av specifika BPF-funktioner, sÄsom laddning av BPF-program eller skapande av BPF-kartor, till icke-privilegierade processer i anvÀndarrummet vars legitimitet bekrÀftas av en speciell token.
- Funktionaliteten hos verifieraren av BPF-program har utökats.
- Perf-verktyget har fÄtt stöd för dataprofilering, vilket möjliggör spÄrning av lÀsning och skrivning i datastrukturer, exempelvis för att identifiera de mest aktivt modifierade fÀlten i strukturer. PÄ system med processorer som stöder insamling av information om minnesoperationer (Intel, AMD, ARM), bör kommandot "perf mem record" anvÀndas för att samla statistiken, och för att generera en rapport om datakonstruktioner - "perf annotate --data-type".
- Prestandaoptimering av systemanrop pÄ s390-arkitekturen (IBM Z) har genomförts, vilket resulterade i en ökning av hastigheten för systemanrop pÄ cirka 11% i tester.
- Möjlighet att Àndra storleken pÄ spÄrningsbuffertarna, som anvÀnds för att buffra information om spÄrningsevent som skickas till anvÀndarrummet, har tillhandahÄllits.
- Den tidigare förÄldrade SLAB-minnesallokeringsmekanismen har tagits bort, och istÀllet anvÀnds nu endast SLUB i kÀrnan. Orsaken till detta anges vara underhÄllsproblem, kodproblem och duplicering av funktionalitet med den mer avancerade SLUB-allokatorn.
- Vid kompilering av kÀrnan aktiverades flaggan "-Wmissing-prototypes", som genererar varningar för anrop av globala funktioner utan prototyndefinition.
- För RISC-V-arkitekturen har stöd för övergÄng till vilolÀge med tillstÄndssparande i RAM implementerats pÄ system med stöd för SUSP SBI-tillÀgget. Ett systemanrop, riscv_hwprobe(), har tillhandahÄllits för att hÀmta information om de stödda tillÀggen i RISC-V-kommandosatsen.
- Virtualisering och sÀkerhet
- Nya systemanrop lsm_list_modules(), lsm_get_self_attr() och lsm_set_self_attr() har lagts till för att hÀmta en lista över laddade LSM-moduler (Linux Security Modules) och för att fÄ/setta egenskaper hos LSM-modulen. En ny struktur lsm_ctx har lagts till för kommunikation i LSM-kontakt mellan anvÀndarrum och kÀrna.
- AppArmor-subsystemet har övergÄtt till att anvÀnda SHA-256-algoritmen för reglerverifiering istÀllet för SHA-1-hashar.
- Implementation av funktionen strlcpy() har tagits bort frÄn kÀrnan, vilken inkluderades i C-biblioteket Glibc 3.38 i somras. Strlcpy Àr ett alternativ till funktionen strncpy(), som erbjuder skydd mot buffertöverskridning och alltid inkluderar en avslutande nollbyte.
- I hypervisorn KVM har stöd för gÀstminneshanteringssystemet guest_memfd (guest-first memory) lagts till, vilket tillhandahÄller minneshanteringsfunktioner som gör det möjligt att implementera funktioner och optimeringar som inte kan uppnÄs med den gemensamma minneshanteringssubsystemet. Till exempel gör guest_memfd det möjligt att allokera och spegla ett minnesomrÄde pÄ gÀstsystemet som inte Àr tillgÀngligt för vÀrdmiljön, vilket kan anvÀndas för att organisera konfidentiella berÀkningar.
- För gÀstsystem som körs under KVM-hypervisorn har stöd för den Intel-baserade LAM (Linear Address Masking)-modeet lagts till. Detta gör det möjligt att anvÀnda en del av bitarna i 64-bitarspekter (frÄn 57 till 62) för att lagra metadata som inte Àr relaterat till adressering.
- I hypervisor KVM för system baserade pÄ ARM64-arkitektur har stöd för 52-bitars (LPA2) fysiska adresser lagts till. För system med x86-arkitektur erbjuds möjligheten att bygga utan emulering av Hyper-V-hyperanrop, vilket minskar storleken pÄ kÀrnan.
- En drivrutin för iaa (IAA Compression Accelerator) har lagts till för att snabba upp komprimerings- och dekomprimeringsoperationer med DEFLATE-metoden, och anvÀnder kapaciteterna hos Intels kryptografiska acceleratorer Intel Analytics Accelerator (IAA).
- PÄ vÀrd-miljösidan har stöd för Intel TDX (Trusted Domain Extensions) implementerats, vilket gör det möjligt att skapa skyddade gÀstmiljöer med KVM-hypervisorn, dÀr minneskryptering anvÀnds. virtuella maskiner.
- I SELinux har SID-identifieraren "init" lagts till, vilket gör det möjligt att isolera processer som startas under initialiseringssteget före tillÀmpningen av SELinux-regler. GrÀnssnittet \/sys\/fs\/selinux för att hantera SELinux har förbÀttrats.
- NĂ€tverkssystemet
- En lĂ„gnivĂ„omorganisering av grundlĂ€ggande nĂ€tverksdatastrukturer har genomförts för att öka effektiviteten av cachehantering. Tidigare var fĂ€lten i nĂ€tverksstackens strukturer som socks, netdev, netns och mibs placerade i tur och ordning, vilket begrĂ€nsade anvĂ€ndningen av processor-cache. Ăversynen av variablernas placering i strukturerna ledde till en mĂ€rkbar ökning av TCP-prestanda genom att minimera cache-strĂ€ngens anvĂ€ndning under datatransfereringen och optimera Ă„tkomsten till variabler. Vid hantering av mĂ„nga parallella TCP-anslutningar kan hastighetsökningen nĂ„ upp till 40%.
- Bpsubsystemet för bpfilter, som anvÀnde BPF för paketfiltrering, har tagits bort. Bpfilter introducerades med version 4.18, men nÄdde aldrig en anvÀndbar nivÄ för bred anvÀndning. Under de senaste Ären har koden för bpfilter i kÀrnan inte utvecklats, medan utvecklingen fortsatte av Facebook i ett separat repository.
- Utrustning
- Den nya drm-drivrutinen (Direct Rendering Manager) Xe för GPU baserad pÄ Intels Xe-arkitektur har inkluderats, och anvÀnds i Intel Arc grafikkort samt i integrerad grafik frÄn och med Tiger Lake-processorer. Xe-drivrutinen positioneras som basen för att stödja nya chips utan att vara bundna till kod som stödjer Àldre plattformar. Drivrutinen Àr byggd med en ny arkitektur dÀr befintliga komponenter i DRM-subsystemet anvÀnds mer aktivt samt typiska komponenter frÄn drivrutinen i915, som inte Àr kopplade till specifika GPU:er, exempelvis kod för interaktion med skÀrmar, minnesmodell och execbuf-implementation. I Mesa har arbetet med OpenGL och Vulkan ovanpÄ Xe-drivrutinen genomförts baserat pÄ Àndringar gjorda i de existerande Mesa-drivrutinerna Iris och ANV.
- I i915-drivrutinen har arbetet fortsatt med att implementera stöd för Intel LunarLake-chip (Xe 2). Stödet för Intel Meteor Lake-chip har förbÀttrats.
- I Nouveau-drivrutinen har en instÀllning genomförts för att som standard anvÀnda GSP-firmwarefunktioner för att arbeta med NVIDIA GPU:er baserade pÄ Turing och Ampere mikroarkitekturer, dÀr initialiserings- och styroperationer för GPU:er utförs av en separat mikrokontroller GSP (GPU System Processor). NÀr instÀllningen Àr aktiverad kommer drivrutinen att fungera genom att anropa firmware istÀllet för att direkt programmera hÄrdvaruinteraktionsoperationer.
- I AMDGPU-drivrutinen har stöd för ACPI WBRF och VPE DPM implementerats, behandlingen av PCIe-kanalens hastighet har Àndrats, 64-bitars sekvensnummer anvÀnds i queues för synkronisering och det har lagts till stöd för AMD-specifika fÀrghanteringsmekanismer, vilket löser problemet med att gÄ i vilolÀge.
- En grundimplementering av drivrutinen för GPU Broadcom VideoCore 7.1, som anvÀnds i Raspberry Pi 5-kort, har lagts till.
- En drivrutin för PowerVR 6 GPU:er baserade pÄ Rogue mikroarkitektur frÄn Imagination Technologies har lagts till.
- Stöd har lagts till för Thunderbolt/USB4-kontroller integrerade i chips baserade pÄ Intels Lunar Lake mikrodesign.
- Drivrutiner för kameror som anvÀnds i SoC Starfive, GalaxyCore GC2145/GC0308, Chips&Media Wave och THine THP7312 har lagts till.
- Stöd för spelkontroller NSO (Nintendo Switch Online) har lagts till â varianter av Ă€ldre kontroller frĂ„n SNES (Super Nintendo), Genesis och N64 (Nintendo 64), anpassade för Nintendo Switch. En drivrutin för Adafruit Seesaw controllers har lagts till. I xpad-drivrutinen har support för Lenovo Legion Go-kontroller lagts till.
- I drivrutinen dts har stöd lagts till för spelanordningar som Powkiddy RK2023, Powkiddy X55 och Anbernic RG351V.
- Stöd har lagts till för ljudsystem som anvÀnds i NXP i.MX8m MICFIL, Qualcomm SM8250, AMD ACP5x, Intel Arrow Lake, SM8550, SM8650 och X1E80100.
- AMD har gjort Àndringar relaterade till stödet för den kommande serien av processorer baserade pÄ den nya mikroarkitekturen Zen 5.
- Stöd har lagts till för ARM64 SoC: Qualcomm SM8650 (Snapdragon 8 Gen 3), Qualcomm X1E80100 (Snapdragon X Elite), Samsung Exynos Auto v920, Google GS101 (Tensor G1), MediaTek MT8188 och Unisoc UMS9620 (Tanggula 7).
- Stöd har lagts till för ARM-plattformar och enheter: Huashan Pi, Microsoft Lumia, HTC One Mini 2, Motorola MotoG 4G, Huawei Honor 5X/GR5, Anbernic RG351V, Powkiddy RK2023, Powkiddy X55, ComXpress baserad pÄ Marvell CN913x, Chromebook Lenovo, Asus och Acer baserad pÄ Mediatek MT8183, Toradex Verdin AM62, kort baserade pÄ Allwinner H616/H618.
- Stödet för ARM11 ARMv6K SMP-processorer har upphört.
Samtidigt har den Latinamerikanska Fria programvarufonden tagit fram en version av det helt fria kĂ€rnan 6.8 â Linux-libre 6.8-gnu, rensad frĂ„n komponenter och drivrutiner som innehĂ„ller icke-fria komponenter eller koden delar dĂ€r anvĂ€ndningsomrĂ„det Ă€r begrĂ€nsat av tillverkaren. I utgĂ„van 6.8 har koden för rensning av blobar uppdaterats i olika drivrutiner och undersystem. Rensning har utförts av drivrutiner för Intel qat_420xx, Imagination PowerVR, Intel Xe, Chips&Media Wave5, Intel VSC, Aquantia PHY och Realtek rtw8922a. Genom borttagning frĂ„n kĂ€rnan har rensningen av drivrutiner för atmel, hermes, orinoco_usb, libertas_cs och zd1201 upphört. Rensning av blobnamn i dts-filer (devicetree) för architektur ARM och Aarch64 har genomförts. Problem med rensning av drivrutinen i915 har Ă„tgĂ€rdats.
KĂ€lla: opennet.ru
