Efter tvÄ mÄnaders utveckling presenterade Linus Torvalds versionen av Linux-kÀrnan 6.12. NÄgra av de mest framtrÀdande förÀndringarna Àr: möjligheten att aktivera Realtime-lÀge, sched_ext för att skapa CPU-scheman via eBPF, QR-kodutmatning vid nödsituationer, en mekanism för Device Memory TCP, en mekanism för resursreservations SCHED_DEADLINE server, förbÀttringar av EEVDF-taskschemalÀggaren, samt IPE-modulen för att stÀlla in integritetspolicys.
Den nya versionen innehÄller 14607 korrigeringar frÄn 2167 utvecklare, patchstorleken Àr 37 MB (förÀndringarna berörde 13087 filer, 507913 rader kod lades till, och 234083 rader togs bort). I föregÄende version var det 15130 korrigeringar frÄn 2078 utvecklare, patchstorleken var 85 MB (i kÀrna 6.10 var patchen 41 MB). UngefÀr 45% av alla Àndringar i 6.12 Àr relaterade till enhetsdrivrutiner, cirka 12% av förÀndringarna avser uppdateringar av kod specifik för hÄrdvaruarkitekturer, 13% relaterar till nÀtverksstacken, 6% till filsystem och 3% till interna kÀrnsystem.
Huvudnyheterna i kÀrnan 6.12:
- Minne och systemtjÀnster
- Möjlighet att bygga kÀrnan med alternativet PREEMPT_RT utan ytterligare patchar för att arbeta i realtidslÀge. Den sista sak som saknades i kÀrnan, vilket hindrade aktivering av PREEMPT_RT-lÀget, var stöd för icke-blockerande atomÀr utmatning via funktionen printk, vilket ocksÄ har tagits upp i kÀrnan. Stödet för PREEMPT_RT Àr tillgÀngligt för arkitekturerna x86, x86_64, ARM64 och RISC-V. Tidigare erbjöds implementationen av PREEMPT_RT i form av externa patchar, baserat pÄ vilka vissa distributioner, sÄsom RHEL, SUSE och Ubuntu, skapade separata Realtime-versioner av sina produkter, efterfrÄgade inom omrÄden som finansiella system, ljud- och videohantering, flygindustri, medicin, robotik, telekommunikation och industriella system dÀr det krÀvs förutsÀgbart hÀndelsebehandlingstid.
- En mekanism "sched_ext" (SCX) har lagts till, som gör det möjligt att anvÀnda eBPF för att skapa CPU-scheman som tÀcker nÀstan alla aspekter av schemalÀggning av uppgiftsutförande och fördelning av CPU-resurser. SÄdana scheman kan laddas dynamiskt och köras inne i Linux-kÀrnan. en virtuell maskin eBPF. Mekanismen sched_ext förenklar skapandet av uppgiftsspecifika schemalÀggare, möjliggör experimenterande med olika tekniker och strategier för schemalÀggning, samt gör det möjligt att snabbt skapa fungerande prototyper och ersÀtta schemalÀggare i realtid i arbetsinfrastrukturer. Till exempel kan en schemalÀggare skapas med hjÀlp av sched_ext som tar hÀnsyn till specifika applikationsegenskaper och dynamiskt Àndrar schemalÀggningsstrategin för dess genomförande beroende pÄ systemets tillstÄnd och andra faktorer.
- I paketet ingÄr den ÄterstÄende delen av patcharna som behövs för att mekanismen SCHED_DEADLINE-servern ska fungera, som löser problemet med att vanliga uppgifter inte fÄr tillrÀckligt med CPU-resurser under CD-monopol av högprioriterade (realtime) uppgifter. För att förhindra monopol pÄ CPU-anvÀndningen har kÀrnan tidigare anvÀnt mekanismen Realtime throttling, som försökte reservera 5 % för lÄgt prioriterade uppgifter, vilket lÀmnade 95 % av tiden för realtidsuppgifter. Denna mekanism var inte optimal, eftersom vanliga uppgifter i mÄnga situationer inte fick tillrÀckligt med processorstid. SCHED_DEADLINE-servern implementerar en mer effektiv resursreservationsmekanism.
- Integrationen av uppgiftsschemalÀggaren EEVDF (Earliest Eligible Virtual Deadline First) Àr nu slutförd, vilket ersÀtter schemalÀggaren CFS (Completely Fair Scheduler) som levererades frÄn och med kÀrna 2.6.23. Den nya schemalÀggaren tar vid valet av nÀsta process för att överföra utförandet hÀnsyn till processer som inte har fÄtt tillrÀckligt med CPU-resurser eller som fÄtt orÀttvist mycket processorstid. I det första fallet pressas kontrollen över till processen, och i det andra skjuts den upp. Den gamla CFS-schemalÀggaren anvÀnde heuristik och fininstÀllningar för att identifiera processer som krÀvde sÀrskild uppmÀrksamhet, medan den nya schemalÀggaren spÄrar dem mer explicit och krÀver ingen fininstÀllning. Det förvÀntas att EEVDF kommer att minska latensen vid utförandet av uppgifter, vilket CFS hade problem med att schemalÀgga.
- I kÀrnans nödsituationhanterare - DRM Panic, som anvÀnder DRM (Direct Rendering Manager) för att visa en överskÄdlig rapport i stil med "blÄ skÀrm av död", har möjligheten att visa logotyp och QR-kod med kmsg-rapporten pÄ skÀrmen vid nödsituationer lagts till. Eftersom QR-koden endast rymmer 2953 byte, finns alternativet DRM_PANIC_SCREEN_QR_CODE_URL, dÀr kmsg-rapporten komprimeras med hjÀlp av zlib och bifogas som parameter till URL:en, vilket gör att ungefÀr 7500 byte kan överföras genom QR-kod V40. Vid paketbygge med kÀrnan kan distributionerna ange en grundlÀggande lÀnk för URL:en, vilket gör det möjligt att organisera Äterkopplingen till en sida för att rapportera ett problem. För att vÀlja QR-kodens format finns en instÀllning för DRM_PANIC_SCREEN_QR_VERSION.
- Stöd för ARM POE (Permission Overlay Extension) har lagts till, vilket gör det möjligt att stÀlla in Ätkomstbehörigheter för minnesomrÄden. Genom denna förlÀngning kan system med ARM64-processorer implementera en mekanism för Memory Protection Keys, som anvÀnds för att begrÀnsa Ätkomsten till minnessidor utan att Àndra minnestabellerna.
- För arkitekturerna Loongarch, ARM64, PowerPC och s390 har implementationen av systemanropet getrandom() överförts, optimerad med hjÀlp av mekanismen vDSO (virtual dynamic shared object), vilket gör det möjligt att flytta systemanropets hanterare frÄn kÀrnan till anvÀndarutrymmet och undvika kontextbyten. Optimeringen gör det möjligt att hÀmta slumpmÀssiga tal upp till 15 gÄnger snabbare.
- I io_uring-subsystemet för asynkron in- och utdata har möjligheten att anvÀnda absoluta tidsgrÀnser lagts till, som aktiveras vid ett visst klockslag pÄ systemklockan (tidigare kunde endast relativa tidsgrÀnser stÀllas, dÀr varaktigheten angavs frÄn operationens början).
- Filer för att generera bindningar för biblioteket libcpupower med hjÀlp av SWIG-verktyget har lagts till, vilket möjliggör skapandet av bindningar frÄn C/C++-kod för olika programmeringssprÄk. Bindningarna gör det möjligt att skapa skript i Python och andra sprÄk, och anvÀnda dem för att utöka funktionaliteten i biblioteket libcpupower, som tillhandahÄller API:er för att hantera cpufreq och drivrutiner frÄn anvÀndarutrymmet.
- I cpuidle-verktyget har vÀrdet för "residency" implementerats, vilket anvÀnds för realtidsystem och tar hÀnsyn till den minimi tid som processorn mÄste vara i vilolÀge för att motivera energikostnaden för att gÄ in i detta tillstÄnd och komma ut ur det.
- Möjligheten att anvÀnda Clang-kompilatorn för att bygga den standard S-C-bibliotek nolibc, som ingÄr i kÀllkoden till Linux-kÀrnan och erbjuder en avskiljning ovanför grundlÀggande systemanrop, har lagts till. Vid byggande av nolibc med Clang tillÄts anvÀndning av optimering vid lÀnkning (LTO).
- Vissa cgroup1-grÀnssnitt har förklarats som förÄldrade, sÄsom TCP-redovisning, den första versionen av mjuka grÀnser (soft limit) och hantering av uttömning av ledigt minne. Stödet för dessa funktioner kvarstÄr för nÀrvarande fullt ut, och en varning har utfÀrdats för att undersöka antalet anvÀndare som fortsÀtter att anvÀnda dessa möjligheter.
- Möjligheten att konfigurera cirkulÀr buffertspÄrning för att spara ackumulerad data efter omstart har lagts till, vilket gör att ackumulerad felsökningsinformation inte gÄr förlorad vid omedelbar avslutning av kÀrnan. Data sparas i minnet. Aktivering sker via kommandoradparametern trace_instance, till exempel att stÀlla in "trace_instance=boot_map@0x285400000:12M" reserverar 12 MB minne vid adress 0x285400000 för bufferten "boot_map", som kommer att vara tillgÀnglig via filen /sys/kernel/tracing/instances/boot_map.
- Ăndringarna frĂ„n Rust-for-Linux-grenen har fortsatt att implementeras, relaterat till anvĂ€ndningen av Rust som ett sekundĂ€rt sprĂ„k för att utveckla drivrutiner och kĂ€rnmoduler (stöd för Rust Ă€r inte aktiverat som standard och innebĂ€r inte att Rust blir en obligatorisk byggberoende för kĂ€rnan). Modulerna 'list' och 'rbtree' har lagts till för att hantera dubbellĂ€nkade listor och röda-svarta söktrĂ€d. Funktionerna hos modulerna 'init', 'sync', 'types' och 'error' har utvidgats. Det har blivit möjligt att anvĂ€nda Rust-kod vid sammanstĂ€llningen av kĂ€rnan med skydd mot Spectre-attacker (alternativen MITIGATION_{RETHUNK, RETPOLINE, SLS}), anvĂ€ndning av KASAN-felsökningssystem, kCFI (kernel Control Flow Integrity) och Shadow Call-skyddsmekanismer, samt vid anvĂ€ndning av ytterligare GCC-plugin-moduler. En drivrutin för Ethernet-kontrollern Applied Micro QT2025 PHY, skriven i Rust, har lagts till. En separat webbplats med dokumentation har ocksĂ„ skapats - rust.docs.kernel.org.
- En utility, xdrgen, har lagts till i kÀllkoden för kÀrnan för att omvandla XDR-specifikationer (eXternal Data Representation) till XDR-kodnings- och avkodningsfunktioner som Àr skrivna i C-stil, sÄsom det anvÀnds i Linux-kÀrnan.
- Ett förÀndring har antagits i kÀrnan som implementerar en mekanism för maskering av pekare för att minska antalet lÄngsamma anrop av barrier_nospec() i den 64-bitars funktionen copy_from_user(), som anvÀnds för att kopiera data till kÀrnan frÄn anvÀndarutrymme. AnvÀndningen av maskering ökar hastigheten med 2.6% i testet 'per_thread_ops', vilket bedömer antalet operationer som kan utföras i en enda trÄd.
- En ny USB-drivrutin har lagts till som möjliggör anvÀndning av protokollet 9pfs som transport för att överföra och ta emot data frÄn USB-enheten, vid montering av FS 9p ovanpÄ USB (t.ex. 'mount -t 9p -o trans=usbg,aname=\/path\/to\/fs \/mnt\/9'). Som ett exempel pÄ anvÀndningen av den nya drivrutinen nÀmns anvÀndningen istÀllet för NFS för att organisera laddningen av rotpartitionen vid utveckling av inbyggda enheter.
- Disksubsystem, in- och utmatning och filsystem
- Det har lagts till möjlighet i VFS-underdelen att arbeta med lagringsenheter vars blockstorlek Àr större Àn storleken pÄ minnessidan i systemet. I filsystem stöds denna funktionalitet för nÀrvarande endast i XFS.
- I FUSE-subsystemet, som möjliggör skapandet av filsystemimplementationer som fungerar i anvÀndarutrymme, har stöd för mappning av anvÀndaridentifierare för monterade filsystem lagts till, vilket anvÀnds för att matcha filer för en viss anvÀndare pÄ ett monterat frÀmmande partition med en annan anvÀndare i det aktuella systemet.
- En ny fcntl-operation F_CREATED_QUERY har implementerats, vilket ger applikationen möjlighet att avgöra om en fil som öppnades med flaggan O_CREAT skapades eller om den redan fanns innan.
- Systemanropet name_to_handle_at() har fÄtt möjlighet att anvÀnda unika 64-bitars identifierare för monteringspunkter för att undvika tidstÀvling vid analys av /proc/mountinfo.
- Storleken pÄ strukturen "file" i kÀrnan har minskats frÄn 232 till 184 byte, vilket möjliggör en minskning av minnesanvÀndningen pÄ system som aktivt arbetar med filer.
- Montering av filsystem till monteringspunkter inom hierarkin /proc, exempelvis i /proc/PID/fd, Àr förbjudet eftersom det kan skapa potentiella sÀkerhetsproblem.
- I pseudo-FS NSFS (NameSpace FS), som anvÀnds för att arbeta med namnrymder, har implementeringen av ytterligare information om namnrymders monteringspunkter genomförts.
- I filsystemet EROFS (Extendable Read-Only File System), avsett för anvÀndning pÄ partitioner som Àr tillgÀngliga i skrivskyddat lÀge, har stöd för montering av filsystem direkt frÄn diskavbilder som sparats som filer lagts till.
- I XFS har nya ioctl-kommandon XFS_IOC_START_COMMIT och XFS_IOC_COMMIT_RANGE lagts till för att utbyta innehÄll mellan tvÄ filer.
- NFS har fÄtt stöd för protokollet "LOCALIO", som gör det möjligt att avgöra om klienten och NFS finns pÄ samma vÀrd, för att aktivera motsvarande optimeringar. server I filsystemet Btrfs har prestandaoptimeringar föreslagits, koden har refaktorerats, lÄsomrÄdet för extenter har minskats vid lÀsoperationer, arbetet med övergÄngen till anvÀndning av sid-ark (page folios) har fortsatt, och automatisk minnesfrisÀttning för strukturen btrfs_path har implementerats.
- I filsystemet Ext4 har fel relaterade till blockallokering, hantering av extenter, mekanismen "fast commit" och journalföring ÄtgÀrdats.
- I filsystemet Ext4 har fel relaterade till blockallokering, hantering av extenter, mekanismen "fast commit" och journalföring ÄtgÀrdats.
- Virtualisering och sÀkerhet
- Den LSM-modul IPE (Integrity Policy Enforcement) har lagts till, utvecklad av Microsoft för att utöka det befintliga systemet för mandatÄtkomstkontroll. Modulen möjliggör att definiera en övergripande policy för att sÀkerstÀlla integritet i hela systemet, som angiver vilka ÄtgÀrder som Àr tillÄtna och pÄ vilket sÀtt autentisering av komponenter bör verifieras. Till exempel kan man med hjÀlp av IPE ange vilka körbara filer som fÄr startas med hÀnsyn till att de överensstÀmmer med referensversionen genom kryptografiska hashvÀrden som tillhandahÄlls av systemet dm-verity.
- Vid kompileringen av kÀrnan har det blivit möjligt att separat aktivera tillgÀngliga skyddsmetoder mot olika sÄrbarheter av typen Spectre i CPU:n. I Kconfig föreslÄs nya parametrar: MITIGATE_MDS (skydd mot sÄrbarhet för Microarchitectural Data Sampling), MITIGATE_TAA (skydd mot sÄrbarhet för TSX Asynchronous Abort), MITIGATE_MMIO_STALE_DATA (skydd mot sÄrbarhet för MMIO Stale Data), MITIGATE_L1TF (skydd mot sÄrbarhet för L1 Terminal Fault), MITIGATE_RETBLEED (skydd mot sÄrbarhet för Retbleed), MITIGATE_SPECTRE_V1, MITIGATE_SPECTRE_V2 (skydd mot sÄrbarheter i Spectre), MITIGATE_SRBDS (skydd mot sÄrbarhet för Special Register Buffer Data Sampling), MITIGATE_SSB (skydd mot sÄrbarhet för Speculative Store Bypass).
- Parametern proc_mem.force_override har lagts till i kommandoraden och en uppsÀttning bygginstÀllningar i Kconfig (PROC_MEM_FORCE_ALWAYS, PROC_MEM_FORCE_PTRACE och PROC_MEM_FORCE_NEVER) som gör det möjligt att förbjuda modifiering av minne via /proc/pid/mem.
- LSM-subsystemet (Linux security module) har övergÄtt till att anvÀnda statiska anrop, vilket har förstÀrkt sÀkerheten och förbÀttrat prestandan.
- Det har blivit möjligt att anvÀnda standardkÀrnor för ARM64-arkitekturen i virtuella miljöer som körs pÄ Android-system med modifierad hypervisor KVM (protected KVM).
- I LSM-modulen Landlock, som möjliggör att begrÀnsa en grupp processers interaktion med omvÀrlden, har konceptet "IPC scoping" införts för att selektivt begrÀnsa interaktionen med sandbox-miljöer, genom att anvÀnda Unix-sockets och signaler. Till exempel kan det vara möjligt att förbjuda etablering av anslutningar med hjÀlp av Unix-sockets frÄn sandbox-miljön till processer dÀr isolering inte tillÀmpas, men tillÄta anslutningar till processer inom samma scope-omrÄde.
- I hypervisorn KVM har en flagga lagts till i CPUID för gÀstsystem som signalerar stöd för AVX10.1-förlÀngningar.
- NĂ€tverkssystemet
- Enheten Device Memory TCP har lagts till, vilket möjliggör anvÀndning av nÀtverks-sockets för direktöverföring av data frÄn periferiminne över nÀtverket (zero-copy-lÀge) och direkt placering av data frÄn nÀtverkspaket i enhetens minnesomrÄde pÄ mottagarsidan. Data som överförs i paketen gÄr direkt frÄn nÀtverkskortet till periferienheten eller frÄn enhetens minne till nÀtverkskortet, utan att passera CPU, medan pakethuvuden hamnar i vanliga kÀrnbuffrar.
- Möjligheterna för flera Ethernet och trÄdlösa drivrutiner har utökats. Till exempel har drivrutinen Intel iwlwifi fÄtt stöd för att flytta RLC/SMPS-operationer till firmware-sidan, drivrutinen RealTek rtw89 har förbÀttrad prestanda och fÄtt stöd för chipen RTL8852BT/8852BE-VT (WiFi 6), Ethernet-drivrutinen microchip har fÄtt stöd för specifikationerna IEEE 802.3bw (100BASE-T1) och IEEE 802.3bp, och implementeringarna av virtuella Ethernet Microsoft vNIC och IBM veth har förbÀttrats. Nya drivrutiner har lagts till för Ethernet-chipen Realtek RTL9054, RTL9068, RTL9072, RTL9075, RTL9068, RTL9071 och Microchip LAN8650/1 10BASE-T1S MAC-PHY.
- I MPTCP (MultiPath TCP), en utvidgning av TCP-protokollet för att leverera TCP-paket över flera vÀgar samtidigt via olika nÀtverksgrÀnssnitt, har storleken pÄ de viktkoefficienter som anvÀnds för routing ökat frÄn 8 till 16 bitar. Implementering av detektering av förlorad trafik (blackhole) har genomförts, och försöken att etablera anslutningar med system som leder till trafikförlust har pausats under en period.
- För IPv6 har stöd för flaggan "p" i PIO (Prefix Information Option) implementerats, vilket anvÀnds i RA (IPv6 Router Advertisements) för att vÀlja modell för klientdistribution genom DHCPv6-PD (DHCPv6 Prefix Delegation, RFC9663) istÀllet för att tilldela individuella adresser baserat pÄ prefixen, genom att anvÀnda SLAAC (Stateless Address Autoconfiguration). I IPv6 IOAM6 har stöd för det nya inkapslingslÀget tunsrc lagts till för att uppnÄ högre prestanda.
- Prestanda för hantering av IPsec-kontrollpaket har ökat.
- Prestandan vid rensning (flush) av stora mÀngder nftables-regler har förbÀttrats. Stödet för SCTP-protokollet har förbÀttrats i nfnetlink_queue.
- I API:et ethtool har stöd för att binda flera nÀtverkskort till ett enda nÀtverksgrÀnssnitt lagts till.
- Utrustning
- I drivrutinen AMDGPU har arbetet fortsatt med att implementera stöd för GPU AMD RDNA4 ("GFX12"). Möjligheten att rensa specifika uppgiftköer utan att rensa hela GPU:ns tillstÄnd har lagts till.
- Arbetet med drm-drivrutinen (Direct Rendering Manager) Xe för GPU:er baserade pÄ Intel Xe-arkitekturen, som anvÀnds i Intel Arc-grafikkort och integrerad grafik som börjar med Tiger Lake-processorer, har fortsatt. Den nya versionen inkluderar stöd för GPU:er baserade pÄ mikroarkitekturerna Battlemage och Lunar Lake. Stöd för CCS-modifierare (Color Control Surface) Xe2 för att hantera instÀllningar för bÄde integrerade och diskreta GPU:er har introducerats.
- I drivrutinen i915 har möjligheten att visa hastighetsinformation för flÀktar via HWMON- eller sysfs-grÀnssnittet (attributet 'fan1_input') implementerats. Parametern 'i915.modeset' har förklarats som utdaterad, och istÀllet för 'i915.modeset=0' bör parametern 'i915.nomodeset' anvÀndas.
- I DRM-drivrutinen msm (GPU Qualcomm Adreno) har stöd för GPU:erna A615, A306 och A621 lagts till.
- I Nouveau-drivrutinen har interna strukturer omarbetats och rensats.
- I drivrutinen intel_pstate, som hanterar energikonsumtionsparametrar (P-state) pÄ system med Intel-processorer, har stöd för hybrida system med asymmetriska (olika specifikationer) CPU:er lagts till, liksom stöd för strömhantering för processorer baserade pÄ mikroarkitekturerna Granite Rapids och Sierra Forest. I drivrutinen intel_idle har stöd för CPU Xeon Granite Rapids lagts till. I drivrutinen intel_rapl har möjligheten att kÀnna igen processer frÄn AMD:s familj 1Ah och Intel ArrowLake-U-processorer sÀkerstÀllts.
- Arbetet med att inkludera förÀndringar för stöd för ARM SoC Snapdragon X Elite, som anvÀnder den egna 12-kÀrniga Qualcomm Oryon CPU:n och Qualcomm Adreno GPU, har fortsatt. Chippet Àr avsett för anvÀndning i bÀrbara datorer och PC, och övertrÀffar mÄnga prestandatest av Apple M3 och Intel Core Ultra 155H.
- Stöd har lagts till för ARM-plattformar, SoC och enheter: Broadcom bcm2712 (Raspberry Pi 5), Renesas R9A09G057 (RZ/V2H), Qualcomm Snapdragon 414 (MSM8929), Lenovo ThinkPad T14s Gen 6, Lenovo A6000/A6010, Surface Laptop 7, Anbernic RG35XXSP, Firefly Core-PX30-JD4, Lunzn Fastrhino R68S, Aspeed Riser, AGX Orin, Rockchip Qnap-TS433, Huashan Pi, Meta Catalina, BeagleY-AI, NanoPi R2S Plus, ExynosAuto v920, SOPHGO SG2002, Qualcomm IPQ5332, LG G4 (h815), Cool Pi CM5 GenBook, Anbernic RG35XXSP, GameForce Ace, IBM P11, Kontron i.MX93 OSM-S, NanoPC-T6.
- Stöd har lagts till för skÀrmpanelerna Anbernic RG28XX, On Tat Industrial Company KD50G21-40NT-A1, Innolux G070ACE-LH3, Melfas lmfbx101117480, Densitron DMT028VGHMCMI-1D, Microchip AC40T08A, AOU B116XTN02.3, AUO B116XAN06.1, AOU B116XAT04.1, BOE TV101WUM-LL2, BOE NV140WUM-N41, BOE NV133WUM-N63, BOE NV116WHM-A4D, BOE NE140WUM-N6G, CMN N116BCA-EA2, CMN N116BCP-EA2, CSW MNB601LS1-4, Starry er88577.
- Ljudsystemet har fÄtt stöd för chip och kodekar RME Digiface USB, AMD ACP 7.1, Mediatek MT6367, MT8365, Realtek RTL1320, C-Media CM9825. Gamla ljuddrivrutiner för ASoC Intel har förklarats som förÄldrade och det rekommenderas att anvÀnda AVS-drivrutiner istÀllet. MÄnga förbÀttringar har införts i SoundWire-drivrutinen.
KĂ€lla: opennet.ru
