Efter tvÄ mÄnaders utveckling slÀppte Linus Torvalds kÀrnan. Linux 6.12. Bland de mest anmÀrkningsvÀrda förÀndringarna: möjligheten att aktivera realtidslÀge, sched_ext för att skapa CPU-schemalÀggare via eBPF, QR-kodutmatning i nödsituationer, TCP-mekanism för enhetsminne, reservationsmekanism för serverresurser SCHED_DEADLINE, förbÀttring av EEVDF-schemalÀggaren, IPE-modul för att stÀlla in integritetspolicyer.
Den nya versionen innehÄller 14607 2167 korrigeringar frÄn 37 13087 utvecklare, patchstorleken Àr 507913 MB (Àndringarna pÄverkade 234083 15130 filer, 2078 85 rader kod lades till, 6.10 41 rader raderades). Den senaste utgÄvan hade 45 6.12 korrigeringar frÄn 12 13 utvecklare, patchstorleken var 6 MB (i 3-kÀrnan var patchen XNUMX MB stor). Cirka XNUMX % av alla Àndringar som införs 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.12:
- Minnes- och systemtjÀnster
- Möjligheten att bygga kÀrnan med alternativet PREEMPT_RT utan ytterligare patchar för realtidsdrift Àr nu tillgÀnglig. Den sista saknade kÀrnfunktionen som förhindrade att PREEMPT_RT-lÀget aktiverades var stöd för icke-blockerande atomÀr utdata via printk-funktionen, som ocksÄ ingÄr i kÀrnan. PREEMPT_RT-stöd Àr tillgÀngligt för arkitekturerna x86, x86_64, ARM64 och RISC-V. Fram tills nu har implementeringen av PREEMPT_RT-lÀget tillhandahÄllits i form av externa patchar, som vissa distributioner, sÄsom RHEL, SUSE och ... Ubuntu, skapade separata realtidsutgÄvor av sina produkter, efterfrÄgade inom omrÄden som finansiella system, ljud- och videobehandlingsenheter, flyg, medicin, robotik, telekommunikation och industriella system, dÀr det Àr nödvÀndigt att sÀkerstÀlla förutsÀgbar hÀndelsebehandlingstid.
- Mekanismen "sched_ext" (SCX) har lagts till, vilket möjliggör anvĂ€ndning av eBPF för att skapa CPU-schemalĂ€ggare som tĂ€cker praktiskt taget alla aspekter av uppgiftsschemalĂ€ggning och CPU-resursallokering. SĂ„dana schemalĂ€ggare kan laddas och köras dynamiskt i kĂ€rnan. Linux ĐČ virtuell maskin eBPF. Mekanismen sched_ext förenklar skapandet av uppgiftsspecifika schemalĂ€ggare, möjliggör experiment med olika schemalĂ€ggningstekniker och strategier, och möjliggör snabb skapande av fungerande prototyper och snabb ersĂ€ttning av schemalĂ€ggare i produktionsinfrastrukturer. Med hjĂ€lp av sched_ext kan du till exempel skapa en schemalĂ€ggare som tar hĂ€nsyn till detaljerna i en specifik applikation och dynamiskt Ă€ndrar dess schemalĂ€ggningsstrategi beroende pĂ„ systemtillstĂ„nd och andra faktorer.
- SammansÀttningen inkluderar den ÄterstÄende delen av de patchar som Àr nödvÀndiga för driften av SCHED_DEADLINE-servermekanismen, som löser problemet med underutnyttjande av CPU-resurser av vanliga uppgifter nÀr CPU:n monopoliseras av högprioriterade (realtids)uppgifter. För att förhindra CPU-monopolisering anvÀnde kÀrnan tidigare mekanismen Realtime trottling, som försökte reservera 5 % för lÄgprioriterade uppgifter, vilket lÀmnade 95 % av tiden för realtidsuppgifter. Denna mekanism lÀmnade mycket att önska, eftersom vanliga uppgifter i mÄnga situationer inte fick tillrÀckligt med processortid. SCHED_DEADLINE-servern implementerar en mer effektiv resursreservationsmekanism.
- Integrationen av EEVDF (Earliest Eligible Virtual Deadline First) uppgiftsschemalÀggaren har slutförts, som ersatte CFS (Completely Fair Scheduler) schemalÀggaren, som levereras frÄn kÀrnan 2.6.23. NÀr man vÀljer nÀsta process för att överföra exekvering tar den nya schemalÀggaren hÀnsyn till processer som inte har fÄtt tillrÀckligt med processorresurser eller har fÄtt en oförtjÀnt stor mÀngd processortid. I det första fallet tvingas överföringen av kontrollen till processen, och i det andra, tvÀrtom, skjuts den upp. Den gamla CFS-schemalÀggaren anvÀnde heuristik och finjustering för att identifiera processer som behövde sÀrskild uppmÀrksamhet, medan den nya schemalÀggaren övervakar dem mer explicit och inte krÀver finjustering. EEVDF förvÀntas minska förseningar i uppgifter som CFS har haft schemalÀggningsproblem med.
- I kÀrnans nödhanterare - DRM Panic, som anvÀnder delsystemet DRM (Direct Rendering Manager) för att visa en visuell rapport i stil med "blue screen of death", möjligheten att visa en logotyp och en QR-kod med en kmsg-rapport pÄ skÀrmen nÀr ett nödlÀge intrÀffar har lagts till. Eftersom endast 2953 byte passar in i en QR-kod, tillhandahÄlls alternativet DRM_PANIC_SCREEN_QR_CODE_URL, dÀr kmsg-rapporten komprimeras med zlib och bifogas som en parameter till URL:en, vilket gör att cirka 40 byte kan överföras genom V7500 QR-koden. NÀr man bygger paket med kÀrnan kan distributioner stÀlla in en bas-URL för URL:en, vilket gör att de kan navigera till en sida för att rapportera ett problem. För att vÀlja QR-kodformat tillhandahÄlls instÀllningen DRM_PANIC_SCREEN_QR_VERSION.
- Tillagt stöd för ARM POE (Permission Overlay Extension), som lÄter dig stÀlla in ÄtkomstrÀttigheter till minnesomrÄden. Genom att anvÀnda denna förlÀngning, pÄ system med ARM64-processorer, kan Memory Protection Keys-mekanismen implementeras, som anvÀnds för att begrÀnsa Ätkomsten till minnessidor utan att Àndra sidtabellen för minnet.
- För arkitekturerna Loongarch, ARM64, PowerPC och s390 har implementeringen av systemanropet getrandom() flyttats, optimerat med hjÀlp av vDSO-mekanismen (virtual dynamic shared object), vilket gör det möjligt att flytta systemanropshanteraren frÄn kÀrnan till anvÀndarutrymme och undvik kontextvÀxlingar. Optimering gör att du kan pÄskynda genereringen av slumptal med upp till 15 gÄnger.
- Möjligheten att anvÀnda absoluta timeouts, utlösta nÀr en viss tid uppnÄs pÄ systemklockan, har lagts till i det io_uring asynkrona in-/utgÄngsundersystemet (tidigare kunde endast relativa timeouts stÀllas in, vilket indikerade varaktigheten frÄn början av operationen ).
- Lade till filer för att generera bindningar för libcpupower-biblioteket med hjÀlp av SWIG-verktygslÄdan, som lÄter dig generera bindningar frÄn C/C++-kod för olika programmeringssprÄk. Bindningar lÄter dig skapa skript i Python och andra sprÄk, och anvÀnda dem för att utöka funktionaliteten hos libcpupower-biblioteket, som tillhandahÄller ett API för att hantera cpufreq och drivrutiner frÄn anvÀndarutrymmet.
- Verktyget cpuidle visar vÀrdet pÄ vilotillstÄndet "residency", som anvÀnds för realtidssystem och med hÀnsyn till den minsta tid som processorn mÄste vara inaktiv för att motivera energikostnaderna för övergÄngen till och ut ur detta tillstÄnd.
- Lade till möjligheten att anvÀnda Clang-kompilatorn för att bygga standard C-biblioteket nolibc, vilket ingÄr i kÀrnans kÀllkod. Linux och tillhandahÄller ett omslag runt grundlÀggande systemanrop. NÀr nolibc bygger i Clang aktiveras lÀnktidsoptimering (LTO).
- Vissa cgroup1-grÀnssnitt har förÄldrats, sÄsom TCP-redovisning, soft limit version XNUMX och hantering av minnesutmattning. Stödet för dessa funktioner förblir fullt ut Àn sÄ lÀnge, och varningen görs för att studera antalet anvÀndare som fortsÀtter att anvÀnda dessa funktioner.
- Lade till möjligheten att konfigurera en ringspÄrningsbuffert för att spara ackumulerad data efter en omstart, vilket gör att du inte kan förlora ackumulerad felsökningsinformation i hÀndelse av en kÀrnkrasch. Data lagras i minnet. Aktivering görs via kommandoradsparametern trace_instance kernel, till exempel, instÀllningen "trace_instance=boot_map@0x285400000:12M" reserverar 12 MB minne vid 0x285400000 för bufferten "boot_map", som kommer att vara tillgÀnglig via filen /sys/kernel /tracing/instanser/boot_map.
- Fortsatt migrering av Àndringar frÄn Rust-for-grenenLinux, relaterat till att anvÀnda Rust som ett andrasprÄk för att utveckla drivrutiner och kÀrnmoduler (Rust-stöd Àr inte aktivt som standard och inkluderar inte Rust bland de obligatoriska byggberoendena för kÀrnan). Modulerna 'list' och 'rbtree' har lagts till för att arbeta med dubbelt lÀnkade listor och röd-svarta söktrÀd. Funktionerna för modulerna 'init', 'sync', 'types' och 'error' har utökats. Möjligheten att anvÀnda Rust-kod nÀr man bygger en kÀrna med skydd mot Spectre-attacker (MITIGATION_{RETHUNK,RETPOLINE,SLS}-alternativ), med hjÀlp av KASAN-felsökningssystemet, skyddsmekanismerna kCFI (kernel Control Flow Integrity) och Shadow Call, och vid anvÀndning av ytterligare GCC-plugins har lagts till. En drivrutin för Applied Micro QT2025 PHY Ethernet-styrenheten, skriven i Rust, har lagts till. En separat webbplats med dokumentation har förberetts: rust.docs.kernel.org.
- Verktyget xdrgen har lagts till i kÀrnans kÀllkod för att konvertera XDR-specifikationer (eXternal Data Representation) till XDR-kodnings- och avkodningsfunktioner skrivna med den C-stil som anvÀnds av kÀrnan. Linux.
- KÀrnan har antagit en förÀndring för att implementera en pekarmaskeringsmekanism för att minska antalet lÄngsamma anrop till barrier_nospec() i 64-bitars copy_from_user()-funktionen, som anvÀnds för att kopiera data till kÀrnan frÄn anvÀndarutrymmet. Att anvÀnda maskering pÄskyndar "per_thread_ops"-testet, som utvÀrderar antalet operationer som kan utföras i en trÄd, med 2.6 %.
- En ny USB-drivrutin har lagts till som lÄter dig anvÀnda 9pfs-protokollet som en transport för att skicka och ta emot data frÄn en USB-enhet nÀr du monterar 9p-filsystemet över USB (till exempel "mount -t 9p -o trans=usbg, aname=/sökvÀg/till/ fs /mnt/9"). Ett exempel pÄ anvÀndningen av den nya drivrutinen Àr anvÀndningen av NFS istÀllet för att organisera uppstarten av rotpartitionen vid utveckling av inbÀddade enheter.
- Diskundersystem, I/O och filsystem
- Möjligheten att arbeta med lagringsenheter vars blockstorlek Àr större Àn storleken pÄ minnessidan i systemet har lagts till i VFS-undersystemet. I filsystem stöds denna funktion för nÀrvarande endast i XFS.
- FUSE-undersystemet, som lÄter dig skapa implementeringar av filsystem som fungerar i anvÀndarutrymmet, har lagt till stöd för kartlÀggning av anvÀndaridentifierare 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Ä den aktuella system.
- En ny fcntl-operation, F_CREATED_QUERY, har implementerats, vilket ger en applikation möjlighet att avgöra om en fil som öppnats med O_CREAT-flaggan skapades eller om den redan existerade tidigare.
- Lade till möjligheten att anvÀnda unika 64-bitars monteringspunkts-ID:n till systemanropet name_to_handle_at() för att undvika rasförhÄllanden vid analys av /proc/mountinfo.
- Storleken pÄ "fil"-strukturen i kÀrnan har minskat frÄn 232 till 184 byte, vilket minskar minnesförbrukningen pÄ system som aktivt arbetar med filer.
- Montering av filsystem för att montera punkter inom /proc-hierarkin, sÄsom /proc/PID/fd, var förbjuden, vilket skapade potentiella sÀkerhetsproblem.
- Pseudo-FS NSFS (NameSpace FS), som anvÀnds för att arbeta med namnutrymmen, tillhandahÄller ytterligare information om namnomrÄdena för monteringspunkter.
- EROFS-filsystemet (Extendable Read-Only File System), designat för anvÀndning pÄ skrivskyddade partitioner, stöder nu montering av filsystem direkt frÄn diskbilder som sparats som filer.
- Nya ioctl-kommandon XFS_IOC_START_COMMIT och XFS_IOC_COMMIT_RANGE har lagts till XFS för utbyte av innehÄll mellan tvÄ filer.
- NFS har lagt till stöd för protokollet "LOCALIO", vilket lÄter dig avgöra om klienten och server NFS pÄ samma vÀrd för att aktivera motsvarande optimeringar.
- I Btrfs-filsystemet har prestandaoptimeringar föreslagits, koden har omstrukturerats, omrÄdet för omfattning av lÄsning under lÀsoperationer har minskat, arbetet har fortsatt med att konvertera minnessidor till att anvÀnda sidfolios, och automatisk minnesslÀppning har gjorts implementerat för btrfs_path-strukturen.
- I Ext4-filsystemet har buggar relaterade till blockallokering, omfattningshantering, fast commit och journalföring fixats.
- Virtualisering och sÀkerhet
- Lade till IPE (Integrity Policy Enforcement) LSM-modulen, utvecklad av Microsoft för att utöka det befintliga obligatoriska Ätkomstkontrollsystemet. Modulen lÄter dig definiera en generell integritetspolicy för hela systemet, som indikerar vilka operationer som Àr tillÄtna och hur Àktheten av komponenter ska verifieras. Med hjÀlp av IPE kan du till exempel ange vilka körbara filer som fÄr köras, med hÀnsyn till deras överensstÀmmelse med referensversionen med hjÀlp av kryptografiska hash som tillhandahÄlls av dm-verity-systemet.
- I kÀrnkompileringsstadiet Àr det möjligt att separat aktivera tillgÀngliga metoder för skydd mot olika Spectre-klasssÄrbarheter i CPU:n. Kconfig erbjuder nya parametrar: MITIGATE_MDS (skydd mot sÄrbarheten för Microarchitectural Data Sampling), MITIGATE_TAA (skydd mot sÄrbarheten TSX Asynchronous Abort), MITIGATE_MMIO_STALE_DATA (skydd mot sÄrbarheten MMIO Stale Data), MITIGATE_L1TF (skydd mot L1TF), FIGATE_L1TF (skyddssÄrbarheten) (skydd mot Retbleed-sÄrbarheter), MITIGATE_SPECTRE_V2, MITIGATE_SPECTRE_VXNUMX (skydd mot Spectre-sÄrbarheter), MITIGATE_SRBDS (skydd mot sÄrbarheten för Special Register Buffer Data Sampling), MITIGATE_SSB (skydd mot Speculative Store Bypass-sÄrbarheten).
- Lade till kommandoradsalternativ proc_mem.force_override och en uppsÀttning bygginstÀllningar i Kconfig (PROC_MEM_FORCE_ALWAYS, PROC_MEM_FORCE_PTRACE och PROC_MEM_FORCE_NEVER) för att förhindra minnesÀndringar via /proc/pid/mem.
- LSM-delsystem (Linux sÀkerhetsmodul) har bytts till att anvÀnda statiska anrop, vilket har förbÀttrat sÀkerhet och prestanda.
- Möjligheten att anvÀnda standardkÀrnor för ARM64-arkitekturen i gÀstmiljöer som körs pÄ Android-system med en modifierad KVM-hypervisor (skyddad KVM).
- Landlock LSM-modulen, som lÄter dig begrÀnsa interaktionen av en grupp av processer med den externa miljön, implementerar "IPC scoping"-konceptet för att selektivt begrÀnsa interaktion med sandlÄdemiljöer med hjÀlp av Unix-sockets och -signaler. Du kan till exempel förbjuda anslutningar som anvÀnder Unix-sockets frÄn en sandlÄdemiljö till processer som inte har tillÀmpat isolering, men tillÄta anslutningar till processer i samma omfattning.
- I KVM-hypervisorn har en flagga lagts till CPUID för gÀstsystem som indikerar stöd för AVX10.1-tillÀgg.
- NĂ€tverksdelsystem
- Device Memory TCP-mekanismen har lagts till, vilket gör det möjligt att anvÀnda nÀtverksuttag för att direkt skicka innehÄllet i minnet av kringutrustning över nÀtverket (nollkopieringslÀge) och direkt placera innehÄllet i nÀtverkspaket i enhetens minnesomrÄde pÄ mottagarsidan. Data som överförs i paket överförs frÄn nÀtverkskortet till minnet av en kringutrustning eller frÄn enhetsminnet till nÀtverkskortet direkt, utan att CPU:n gÄr förbi, och pakethuvuden hamnar i vanliga kÀrnbuffertar.
- Möjligheterna för mÄnga Ethernet- och trÄdlösa drivrutiner har utökats. Till exempel lade Intel iwlwifi-drivrutinen till stöd för att flytta RLC/SMPS-operationer till firmwaresidan, RealTek rtw89-drivrutinen ökade prestandan och lade till stöd för RTL8852BT/8852BE-VT (WiFi 6)-chips, mikrochipset Ethernet-drivrutinen lade till stöd för IEEE 802.3 bw (100BASE) specifikationer -T1) och IEEE 802.3bp, Microsoft vNIC och IBM veth virtuella Ethernet-implementationer har förbÀttrats. Lade till nya drivrutiner för Realtek RTL9054, RTL9068, RTL9072, RTL9075, RTL9068, RTL9071 och Microchip LAN8650/1 10BASE-T1S MAC-PHY Ethernet-chips.
- I MPTCP (MultiPath TCP), en förlÀngning av TCP-protokollet för att organisera leveransen av TCP-paket samtidigt lÀngs flera rutter genom olika nÀtverksgrÀnssnitt, ökas storleken pÄ vikterna som anvÀnds vid routing frÄn 8 till 16 bitar. Implementerat detektering av förlorad (svarthÄls) trafik och avstÀngning under en tid av försök att upprÀtta förbindelser med system som leder till förlust av trafik.
- För IPv6 implementeras stöd för "p"-flaggan i PIO (Prefix Information Option), som anvÀnds i RA-annonser (IPv6 Router Advertisements) för att vÀlja en klientdistributionsmodell via DHCPv6-PD (DHCPv6 Prefix Delegation, RFC9663) istÀllet för att tilldela individuella adresser baserade pÄ prefix med SLAAC (Stateless Address Autoconfiguration). IPv6 IOAM6 lÀgger till stöd för ett nytt tunsrc-inkapslingslÀge för förbÀttrad prestanda.
- FörbÀttrad prestanda för bearbetning av IPsec-kontrollpaket.
- FörbÀttrad prestanda för att spola stora nftables regeluppsÀttningar. nfnetlink_queue har förbÀttrat stöd för SCTP-protokollet.
- Ethtool API har lagt till stöd för att binda flera nÀtverkskort till ett nÀtverksgrÀnssnitt.
- ĐĐ±ĐŸŃŃĐŽĐŸĐČĐ°ĐœĐžĐ”
- I AMDGPU-drivrutinen fortsĂ€tter arbetet med att implementera stöd för AMD RDNA4 (âGFX12â) GPU:er. Lade till möjligheten att Ă„terstĂ€lla individuella uppgiftsköer utan att Ă„terstĂ€lla hela GPU:n.
- Arbetet fortsatte med Xe drm-drivrutinen (Direct Rendering Manager) för GPU:er baserad pÄ Intel Xe-arkitekturen, som anvÀnds i Intel Arc-familjens grafikkort och integrerad grafik, med början i Tiger Lake-processorer. Den nya versionen inkluderar stöd för grafikprocessorer baserade pÄ mikroarkitekturerna Battlemage och Lunar Lake. Stöd för Xe2 CCS (Color Control Surface) modifierare har introducerats för att styra parametrarna för integrerade och diskreta GPU:er.
- i915-drivrutinen implementerar möjligheten att mata ut information om flÀkthastigheten via HWMON eller sysfs-grÀnssnittet (attributet "fan1_input"). Parametern "i915.modeset" har förÄldrats. Parametern "i915.nomodeset" ska anvÀndas istÀllet för "i0.modeset=915".
- Lade till stöd för A615, A306 och A621 GPU:er till msm DRM-drivrutinen (Qualcomm Adreno GPU).
- Nouveau-föraren har fÄtt sina inre strukturer omarbetade och rengjorda.
- Intel_pstate-drivrutinen, som styr strömförbrukningsparametrar (P-state) pÄ system med Intel-processorer, har lagt till stöd för hybridsystem med asymmetriska (olika egenskaper) processorer, samt stöd för strömhantering av processorer baserade pÄ Granite Rapids och Sierra Forest mikroarkitekturer. Lade till stöd för Xeon Granite Rapids CPU till intel_idle-drivrutinen. Intel_rapl-drivrutinen ger igenkÀnning av AMD 1Ah-familjens processer och Intel ArrowLake-U-processorer.
- Fortsatt införande av Àndringar för att stödja ARM SoC Snapdragon X Elite, som anvÀnder Qualcomms egen 12-kÀrniga Oryon CPU och Qualcomm Adreno GPU. Chipet Àr avsett för anvÀndning i bÀrbara och PC-datorer, och ligger före Apple M3 och Intel Core Ultra 155H-chips i mÄnga prestandatester.
- Tillagt stöd för ARM-kort, SoC:er och enheter: Broadcom bcm2712 (Raspberry Pi 5), Renesas R9A09G057 (RZ/V2H), Qualcomm Snapdragon 414 (MSM8929), Lenovo ThinkPad T14s Gen 6, Lenovo A6000/A6010 Laptop RG 7, An Surface 35 RG 30/A4 , Firefly Core-PX68-JD433, Lunzn Fastrhino R2S, Aspeed Riser, AGX Orin, Rockchip Qnap-TS920, Huashan Pi, Meta Catalina, BeagleY-AI, NanoPi R2002S Plus, ExynosAuto v5332, SOPHGO SG4m815, SOPHGO SG5m35, LG11 SG93 ), Cool Pi CM6 GenBook, Anbernic RGXNUMXXXSP, GameForce Ace, IBM PXNUMX, Kontron i.MXXNUMX OSM-S, NanoPC-TXNUMX
- Lagt till stöd för skÀrmpaneler Anbernic RG28XX, On Tat Industrial Company KD50G21-40NT-A1, Innolux G070ACE-LH3, Melfas lmfbx101117480, Densitron DMT028VGHMCMI-1D, Microchip AC40T08A, B116X02.3, B116XNOU B06.1 116XAT04.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.
- Ljudundersystemet har lagt till stöd för chips och codecs RME Digiface USB, AMD ACP 7.1, Mediatek MT6367, MT8365, Realtek RTL1320, C-Media CM9825. Gamla ljuddrivrutiner för Intel ASoC har förklarats förÄldrade, och det rekommenderas att istÀllet anvÀnda AVS-drivrutiner. MÄnga förbÀttringar har gjorts av SoundWire-drivrutinen.
KĂ€lla: opennet.ru
