Efter tvÄ mÄnaders utveckling presenterade Linus Torvalds lanseringen av kÀrnan Linux 7.0. Bland de mest anmÀrkningsvÀrda förÀndringarna: regler för anvÀndning av AI-assistenter, integration av Rust i kÀrnans huvudfunktioner, förbÀttrad prestanda för vÀxling, aktivering av PREEMPT_LAZY-lÀget som standard, stöd för filter i io_uring-operationer, ny filsystem Nullfs, infrastruktur för fserror, övervakningsverktyg för XFS, stöd för ommappning i Btrfs, aktivering av NFS 4.1 som standard och integration av post-kvantum-kryptoalgoritmen ML-DSA, aktivering av AccECN i nÀtverksunderlaget och inledande stöd för WiFi 8.
Nummer 7.0 tilldelades eftersom det i grenen 6.x hade samlats tillrÀckligt med utgÄvor för att byta det första numret (nÀr version 6.0 slÀpptes följde den direkt efter 5.19). Bytet av numrering görs av estetiska skÀl och Àr ett formellt steg som tar bort obehaget frÄn att ha ett stort antal utgÄvor i serien.
I den nya versionen ingÄr 15624 korrigeringar frÄn 2477 utvecklare, patchens storlek Àr 56 MB (Àndringarna berör 18053 filer, 704060 rader kod har lagts till, 278132 rader har tagits bort). I den föregÄende utgÄvan fanns det 15657 korrigeringar frÄn 2237 utvecklare, patchens storlek var 52 MB. UngefÀr 51% av alla Àndringar i 7.0 rör enhetsdrivrutiner, omkring 11% av Àndringarna Àr relaterade till uppdatering av hÄrdvaruspecifik kod, 14% har att göra med nÀtverksstacken, 5% med filsystemen och 3% med interna kÀrnunderkategorier.
De viktigaste nyheterna i kÀrnan 7.0 (1, 2, 3):
- Disksubsystem, in- och utmatning och filsystem
- Fserror-infrastrukturen har implementerats och ett API har lagts till för att hÀmta information om in-/utdatafel och metadataförlust vid filhantering. Den föreslagna infrastrukturen enhetliggör överföringen av felinformation till anvÀndarrummet genom mekanismen fsnotify i filsystemen.
- I XFS har nya funktioner för att övervaka tillstÄndet hos filsystemet frÄn anvÀndarutrymmet lagts till. En ioctl-operation, XFS_IOC_HEALTH_MONITOR, har introducerats, vilket returnerar en filbeskrivare genom vilken information om fel relaterade till skador pÄ metadata eller in-/utmatningsfel kan erhÄllas, samt övervaka FS-tillstÄnd som avmontering och nedstÀngning. Dessutom har en systemd-hanterad bakgrundsprocess, xfs_healer, föreslagits, som bearbetar hÀndelser om FS-tillstÄnd frÄn anvÀndarutrymmet och vid behov automatiskt startar ÄterstÀllningsprocedurer.
- Filsystemet Btrfs har fÄtt experimentellt stöd för en struktur kallad "remap tree", som i framtiden kan anvÀndas som ett mellanlager vid in- och utmatningsoperationer. Det tillagda stödet innebÀr att efter att data har flyttats pÄ lagringsenheten, istÀllet för att uppdatera alla relaterade strukturer, sparas de gamla och nya dataadresserna i den extra strukturen "remap tree", och vid Ätkomst till data maskeras adresserna. Den nya metoden presenteras som mer pÄlitlig och flexibel samt förenklar ytterligare funktionalitetsextensioner för Btrfs.
- Btrfs stöder direkt in-/utmatning i situationer dÀr blockstorleken överstiger systemets sidstorlek.
- Den nya filsystemet "Nullfs" har lagts till, vilket kan anvĂ€ndas som en placeholder för root-filsystemet. Nullfs Ă€r alltid tomt, innehĂ„ller inga data och stöder inga Ă€ndringar. Syftet med Nullfs Ă€r att anvĂ€ndas som det initiala filsystemet för att förenkla systemets uppstart â ovanpĂ„ Nullfs monteras andra filsystem, och systemanropet pivot_root() anvĂ€nds för att vĂ€xla till root-filsystemet istĂ€llet för att rensa innehĂ„llet i initramfs och anvĂ€nda det relaterade root-filsystemet.
- Uppdatering av filers modifieringstid har implementerats i icke-blockerande lÀge. Tidigare returnerade anropet file_update_time_flags() med flaggan IOCB_NOWAIT ett fel "-EAGAIN", vilket förhindrade anvÀndning av direkt skrivning i icke-blockerande lÀge.
- I filsystemerna har stöd för meddelandeblockeringar (lease) översatts till en separat valbar funktion. Som standard aktiveras inte denna mekanism pÄ grund av problem med filsystemen, som ursprungligen inte var avsedda för dess anvÀndning. Till exempel stöds det inte av filsystemen 9p och cephfs.
- I filsystemet EROFS (Extendable Read-Only File System), avsett för anvÀndning pÄ partitioner som Àr tillgÀngliga i skrivskyddat lÀge, anvÀnds standardmÀssigt LZMA-algoritmen för komprimering. Algoritmerna DEFLATE och Zstandard Àr nu tillgÀngliga som alternativ och Àr inte lÀngre markerade som experimentella. Dela poster i sidcache (page-cache) har implementerats för identiska filer i separata EROFS-filsystem.
- LÀget laptop_mode, som sparar energi genom att skjuta upp och sammanfoga skrivoperationer pÄ hÄrddisken för att förlÀnga diskens sömnperiod och minska antalet uppvaknanden, har tagits bort. Detta lÀge har förlorat relevans, eftersom moderna mobila enheter har hÄrddiskar ersatta av solid state-enheter.
- Filsystemet F2FS har övergÄtt till att anvÀnda stora minnessidor (large folios).
- Arbetet med drivrutinen ntfs3, utvecklad av Paragon Software, har Ă„terupptagits. Stöd för filoperationer baserade pĂ„ iomap har lagts till, alternativ som llseek SEEK_DATA/SEEK_HOLE har implementerats, och lĂ€get delalloc för fördröjd blockallokering har lagts till. Under tiden godkĂ€ndes en ny implementation av NTFS â ntfsplus, utvecklad för att ersĂ€tta ntfs3, i utvecklarlistan för kĂ€rnor i februari för inkludering i en av framtida kĂ€rnversioner.
- Som standard Àr version 4.1 av NFS-protokollet (CONFIG_NFS_V4_1) aktiverad vid byggnation. ExportlÄsning via NFS för specialiserade pseudofilsystem, sÄsom pidfs och nsfs, har sÀkerstÀllts. I NFSD har en experimentell möjlighet att anvÀnda POSIX ACL implementerats och stöd för dynamisk justering av trÄdpoolen beroende pÄ belastning har lagts till.
- Minne och systemtjÀnster
- De officiella reglerna för anvĂ€ndning av AI-assistenter och införande av automatiskt genererat innehĂ„ll har godkĂ€nts. Vid överföring av genererad kod ska den mĂ€rkas med den anvĂ€nda AI-assistentens namn genom taggen «Assisted-by». AI-assistenter fĂ„r inte lĂ€gga till taggen «Signed-off-by» â personen som överförde patchen anses vara dess författare, bĂ€r ansvar för den överförda Ă€ndringen och garanterar dess kvalitet. Utvecklare Ă„lĂ€ggs att genomföra manuell granskning av den kod som erhĂ„llits via AI och kontrollera att resultatet uppfyller licenskraven.
- Stödet för Rust har övergÄtt frÄn experimentella funktioner till kÀrnans huvudfunktioner. Stödet för Rust Àr inte aktiverat som standard och leder inte till att Rust inkluderas bland de obligatoriska byggberoenden för kÀrnan.
- Integrationen av mekanismen «Swap Table» i kÀrnan Àr slutförd, vilket ökar prestandan för bytehantering. FörbÀttringen uppnÄs genom att minska konkurrensen om tillgÄng till bytecacheminnet, effektivare sökning i cacheminnet och minska fragmenteringen. Backenden baserad pÄ Swap Table anvÀnds för cachelagring istÀllet för backend XArray, vilket i redis-benchmark-testet med BGSAVE ökade antalet behandlade förfrÄgningar med 22%.
- Stödet för den nya utvidgningen Thread Safety Analysis i Clang 22 har lagts till, vilket möjliggör identifiering av potentiella race-tillstĂ„nd och fel orsakade av felaktig lĂ„sning vid kompilering. Utvidgningen erbjuder en serie attribut, sĂ„som GUARDED_BY(âŠ), REQUIRES(âŠ), RELEASE(âŠ) och ACQUIRE(âŠ), som gör det möjligt att markera funktioner som skyddas av lĂ„s och skilja mellan lĂ„sens verkningsomrĂ„den (definiera kontext). Vid kompilering utförs en kontroll av korrekt anvĂ€ndning av synkroniseringsprimitiver, sĂ„som mutexar, baserat pĂ„ bedömning av aktivitet eller inaktivitet i den relaterade kontexten.
- Flaggan OPEN_TREE_NAMESPACE har lagts till i systemanropet open_tree för att förenkla konfigurationen av isolerade containrar och snabba upp start av containrar pÄ system med mÄnga monteringspunkter. PÄ liknande sÀtt som OPEN_TREE_CLONE kopierar den nya flaggan endast den angivna monteringsstrukturtrÀdet, men istÀllet för en lokal filbeskrivare returnerar den en filbeskrivare i det nya namespaces för monteringspunkter dÀr det kopierade trÀdet monteras ovanpÄ kopian av den verkliga rotfilsystemet. Flaggan OPEN_TREE_NAMESPACE efterfrÄgas för att undvika separat utförande av operationer som unshare(CLONE_NEWNS) och pivot_root(), som anvÀnds vid skapande av containrar.
- Systemanropet rseq har fÄtt en mekanism för att utvidga tidskvoter (time slice), vilket möjliggör ytterligare processortid för oavbruten exekvering av kritiska sektioner. Idén Àr att undvika avbrott frÄn schemalÀggaren under kritiska sektioner med en aktiv lÄs vilket leder till överlÀmnande av kontroll till andra trÄdar som anvÀnder resursen varpÄ lÄsen fortfarande Àr aktiva. Utvidgningen av tidskvoten görs utan ytterligare överhead, men utan strikta garantier som erbjuds vid fullstÀndig prioriteringsreglering.
- För arkitekturerna arm64, loongarch, powerpc, riscv, s390 och x86 har standardpreemptionslĂ€get i schemalĂ€ggaren Ă€ndrats frĂ„n PREEMPT_NONE till PREEMPT_LAZY. Antalet tillgĂ€ngliga lĂ€gen har reducerats frĂ„n fyra till tvĂ„ â PREEMPT_FULL och PREEMPT_LAZY (lĂ€gena PREEMPT_NONE och PREEMPT_VOLUNTARY lĂ€mnas kvar endast för arkitekturer som inte stöder PREEMPT_FULL och PREEMPT_LAZY). LĂ€get PREEMPT_LAZY tillĂ€mpar en modell för full preemption (PREEMPT_FULL) för realtime-uppgifter (RR/FIFO/DEADLINE), men fördröjer preemption av vanliga uppgifter (SCHED_NORMAL) till tickgrĂ€nsen. Denna fördröjning leder till en minskning av fallen av preemption av lĂ„sinhavare, vilket möjliggör att prestationen nĂ€rmar sig konfigurationer som anvĂ€nder modellen för frivillig preemption, dvs. PREEMPT_LAZY sparar möjligheterna för full preemption av realtime-uppgifter, men minimerar prestationsfall för vanliga uppgifter.
Aktivering av PREEMPT_LAZY har lett till en allvarlig regression som halverar PostgreSQL-prestanda pÄ ARM64-system. För att ÄtgÀrda prestandafallet föreslÄs PostgreSQL-utvecklarna att anvÀnda alternativet PR_RSEQ_SLICE_EXTENSION för att minska sannolikheten för att lÄsÀgarna trÀngs ut.
- Ăverföringen av Ă€ndringar frĂ„n Rust-for-Linux-grenen, relaterade till anvĂ€ndning av Rust som andrasprĂ„k för utveckling av drivrutiner och kĂ€rnmoduler, fortsĂ€tter. Tack vare det tidigare integrerade biblioteket "syn", som underlĂ€ttar skrivningen av komplexa makron, har storleken pĂ„ Rust-koden i kĂ€rnan kunnat minskas genom att förenkla definitionerna av befintliga procedurmakron. Möjligheterna för biblioteken kernel, macros och pin-init har utökats.
- I det asynkrona in- och utmatningssystemet io_uring har en ny funktionalitet lagts till för att anvÀnda icke-cirkulÀra köer (non-circular submission queue), som cachas mer effektivt i situationer dÀr en begÀran slutförs innan Äterkomsten frÄn systemanropet.
- I eBPF-subsystemet har binÀr sökning införts i mekanismen BTF (BPF Type Format), som tillhandahÄller information för typkontroll i BPF-pseudokod, för att söka efter felsökningsinformation, vilket har ökat effektiviteten vid laddning av BPF-program. Stöd för implicita argument vid anrop av kfunc (kÀrnfunktioner som Àr tillgÀngliga för anvÀndning i BPF-program) har lagts till, definierade med flaggan KF_IMPLICIT_ARGS.
- Koden för att stödja det inledande RAM-diskettprogrammet (initrd) baserat pÄ linuxrc, som lÀnge har utsetts som förÄldrad, har tagits bort. De ÄterstÄende implementeringarna av initrd planeras att tas bort Är 2027. IstÀllet för initrd bör initramfs anvÀndas (skillnaden Àr att initrd placerar den initiala startmiljön i en diskavbildning, medan initramfs gör det i ett filsystem).
- I blockanordningen zram, som anvÀnds för komprimerad lagring av vÀxlingspartitioner i minnet, har logiken för hantering av komprimerade minnessidor förÀndrats vid valfri flytt av data till permanent lagring vid fyllning av tillgÀngligt arbetsminne. Tidigare packades minnessidor upp innan de skrevs till den fysiska lagringsenheten, men nu sparas de som de Àr i komprimerad form, vilket minskar belastningen pÄ CPU och sparar energi vid autonom drift.
- I verktyget timerlat, som Ă€r avsett för att mĂ€ta förseningar vid arbetet med schemalĂ€ggaren, har en alternativ "âbpf-action" lagts till för att köra BPF-program om ett definierat tröskelvĂ€rde överskrids.
- I ftrace-systemet har instÀllningen "bitmask-list" lagts till för att visa bitmasker i ett lÀsbart format (i form av en lista av bitar, snarare Àn ett hexadecimalt tal). Tracefs har fÄtt nya funktioner för granskning av filter och triggers. Kommandot "perf sched stats" har lagts till för att samla in och visa statistik om schemalÀggarens verksamhet.
- Byggalternativen LOGO_LINUX_MONO_FILE, LOGO_LINUX_VGA16_FILE och LOGO_LINUX_CLUT224_FILE har lagts till för att definiera filen med logotypbilden som kommer att visas vid kÀrnans boot, istÀllet för den vanliga logotypen med pingvinen Tux.
- Virtualisering och sÀkerhet
- I systemet för asynkron in-/utdata io_uring har möjligheten att koppla BPF-program med filter implementerats, som kontrollerar vad specifika SQE (Submission Queue Entry) operationer kan göra (liknande systemanrop i io_uring). Den tillagda funktionen Àr en motsvarighet till systemanropsfilter. Filtrena kan kopplas till specifika uppgifter och de Àrver vid skapande av andra processer efter anrop av fork(). NÀr aktiva filter finns kan de tillagda filtren endast stÀlla ytterligare begrÀnsningar, men inte stÀnga av befintliga. Den implementerade funktionen möjliggör blockering av metoder för att kringgÄ systemanropsfilter i sandbox-miljöer, baserat pÄ att utföra liknande operationer, tillhandahÄllna i io_uring, istÀllet för systemanrop.
- I SELinux har möjligheten att styra Ätkomst till BPF-token lagts till, vilket tillÄter oprivilegierade processer att utföra vissa privilegierade operationer med BPF, exempelvis ladda BPF-program i kÀrnan och skapa map-strukturer.
- Stödet för algoritmen för digital signaturgenerering ML-DSA (CRYSTALS-Dilithium), som bygger pÄ gitterteori och Àr motstÄndskraftig mot bruteforce-attacker med kvantdatorer, har lagts till. Möjligheten att anvÀnda ML-DSA för autentisering av kÀrnmoduler har tillhandahÄllits.
- Möjligheten att anvÀnda signaturalgoritmer med SHA-1 för att signera kÀrnmoduler har tagits bort (stödet för att ladda signerade moduler kvarstÄr).
- I NETFILTER_PKT-auditposten har fÀlten 'sport' och 'dport' lagts till för att inspektera nÀtverksportnummer, och inte bara. IP-adresser.
- För system med RISC-V-arkitektur har stöd för Zicfiss- och Zicfilp-tillÀgg implementerats, vilket ger hÄrdvarumöjligheter för att tillÀmpa CFI (Control Flow Integrity) skydd, som blockerar störningar i den normala exekveringsordningen av instruktioner (control flow) till följd av exploateringar som Àndrar funktionpekare lagrade i minnet.
- I hypervisorn KVM har möjligheten att överföra information till gÀstsystem om processorns stöd för ERAPS (Enhanced Return Address Predictor Security) implementerats, vilket gör det möjligt att undvika vissa CPU-tillstÄndsrensningsoperationer nÀr kontrollen ÄterstÀlls frÄn gÀstsystemet till vÀrden. Dessutom har stöd för att knyta utrustning för prestandabevakning (PMU, Performance Monitoring Unit) till gÀstsystem lagts till, vilket ökar precisionen i profileringen jÀmfört med anvÀndningen av emulerade PMU.
- I drivrutinen för hypervisorn Hyper-V har stöd för debugfs-grÀnssnittet lagts till för att se statistiken över hypervisorns arbete.
- NĂ€tverkssystemet
- AccECN (Accurate Explicit Congestion Notification) tillĂ€gget har aktiverats som standard, vilket implementerar en förbĂ€ttrad version av ECN-tillĂ€gget och gör det möjligt för vĂ€rdar att, vid överbelastning, markera IP-paket istĂ€llet för att slĂ€nga dem, vilket ger möjlighet att identifiera uppkomsten av de första tecknen pĂ„ köbildning i kommunikationskanaler utan paketförlust. Den ursprungliga ECN-tillĂ€gget har en begrĂ€nsning som tillĂ„ter endast en överbelastningssignal per cykel av dataöverföring (RTT, Round-Trip Time, skicka begĂ€ran och ta emot svar). AccECN tar bort denna begrĂ€nsning och ger mottagaren möjlighet att skicka mer Ă€n en överbelastningsmarkering till avsĂ€ndaren i TCP-paketets rubrik. Ăverbelastningskontrollalgoritmer kan anvĂ€nda den erhĂ„llna informationen för att reagera mer exakt pĂ„ överbelastningar och undvika abrupta minskningar av paketöverföringsintensiteten vid mindre överbelastningar.
- I algoritmen för hantering av nÀtverksköer Cake har möjligheten att hantera flera köer lagts till för att fördela belastningen över flera CPU-kÀrnor. CAKE-algoritmen anvÀnds för att minska den negativa pÄverkan av paketbuffring pÄ grÀnsnÀtverksutrustning och syftar till att uppnÄ maximal genomströmning och minimal fördröjning Àven pÄ lÄngsamma kommunikationskanaler.
- I VSOCK-socketar, som anvÀnds för interaktion med virtuella maskiner, har stöd för nÀtverksnamnrymder (network namespace) lagts till.
- En grundlÀggande implementation av den framtida WiFi 8-standarden (802.11bn, Ultra High Reliability WiFi) har lagts till.
- Optimeringar har lagts till som har ökat prestandan vid bearbetning av inkommande UDP-paket med 12% under stresstester i ett 100-gigabit-nÀtverk.
- Utrustning
- I AMDGPU-drivrutinen har stöd för IP-block, som anvÀnds i nya AMD GPU:er, implementerats, sÄsom SMUIO 15.x, PSP 15.x, IH 6.1.1/7.1, MMHUB 3.4/4.2, GC 11.5.4/12.1, SDMA 6.1.4/7.1/7.11.4 och JPEG 5.3.
- I Nouveau-drivrutinen har frekvenshanteringen förbÀttrats pÄ system med Tegra 186+.
- I i915-drivrutinen har grundlÀggande stöd för display-IP-blocket Xe3p_LPD, som anvÀnds i Intel Nova Lake-P-processorer, 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, har fortsatt frÄn och med Tiger Lake-processorerna. Stödet för Multi Queue-lÀget har lagts till. Komponenter som behövs för att diagnostisera GPU-hÀngningar i Mesa har lagts till. Stöd för MERT-mekanismen för hantering av GPU-minnestillgÄng har lagts till.
- Integreringen av komponenter för Nova-drivrutinen för NVIDIA GPU:er som Àr utrustade med GSP-firmware, som anvÀnds frÄn NVIDIA GeForce RTX 2000-serien baserad pÄ Turing-mikroarkitekturen, har fortsatt. Drivrutinen Àr skriven i Rust. I den nya versionen har förberedelser gjorts för att implementera stöd för GPU:er baserade pÄ Turing-mikroarkitekturen och olika interna förÀndringar har genomförts.
- Stöd för kontroller och perifera enheter med flervÀgs SPI (Serial Peripheral Interface) har lagts till, vilket möjliggör överföring av data i flera parallella flöden.
- En drivrutin för kombinerade Type-C-kontakter som anvÀnds pÄ enheter med Apple Silicon-chip och som kombinerar USB3-, DP-AltMode- och Thunderbolt/USB4-grÀnssnitt har lagts till.
- Stöd för ljudsubsystemen i Tegra238, Minisforum V3 SE, iBasso DC04U, Intel Nova Lake, Nova Lake S och Focusrite Forte har lagts till.
- Stöd har lagts till för ARM-plattformar, SoC:er och enheter: Arduino UnoQ, OrangePi 6 Plus, OrangePi CM5, Anbernic RG-DS, Realtek Kent, Qualcomm Kaanapali, Mediatek Ezurio, Facebook Anacapa, Microchip LAN9668, Khadas VIM1S, QNAP TS133, i.MX952, i.MX93, i.MX94, VHIP4 EvalBoard, TQ-Systems MBLS1028A, Agilex5, Radxa CM3J, Glymur.
- Stöd för smartphones och surfplattor har lagts till: Fairphone Gen 6 (SoC Qualcomm Milos/Snapdragon 7s Gen 3), Pixel 3/3 xl, Microsoft Surface Pro 11.
Samtidigt har Latinamerikas stiftelse för fri programvara utvecklat en version av det helt fria kĂ€rnan 7.0 â Linux-libre 7.0-gnu, som Ă€r rensad frĂ„n element av firmware och drivrutiner som innehĂ„ller icke-fria komponenter eller kodavsnitt vars anvĂ€ndning Ă€r begrĂ€nsad av tillverkaren. I version 7.0 har rengöring av blobar av drivrutinen iwlwifi genomförts. Koden för rengöring har uppdaterats i drivrutinerna amdgpu, adreno, TI PRUeth, air_en8811h, ath12k, TI VPE, rtw8852b, rt1320, rt5575 SPI, tas2783, Intel catpt. Rengöring av blobnamn i dts-filer (devicetree) för ARM-chip har genomförts.
KĂ€lla: opennet.ru
