Efter tvÄ mÄnaders utveckling presenterade Linus Torvalds utgivningen av Linux-kÀrnan 6.9. Bland de mest anmÀrkningsvÀrda förÀndringarna finns: modulen dm-vdo för deduplicering och komprimering av blockenheter, direkt ÄtkomstlÀge för filer i FUSE, stöd för skapande av pidfd för individuella trÄdar, BPF-token mekanism, stöd för Rust pÄ ARM64-system, nedgradering av filsystemet Ext2 till förÄldrat, borttagning av den gamla NTFS-drivrutinen, stöd för Intel FRED-mekanismen.
Den nya versionen innehÄller 15680 korrigeringar frÄn 2106 utvecklare, storleken pÄ patchen Àr 54 MB (Àndringarna berör 11825 filer, 687954 kodrader har lagts till och 225344 kodrader har tagits bort). I den föregÄende versionen fanns 15641 korrigeringar frÄn 2018 utvecklare, storleken pÄ patchen var 44 MB. UngefÀr 42% av alla förÀndringar i 6.9 Àr relaterade till enhetsdrivrutiner, cirka 17% handlar om uppdatering av kod specifik för hÄrdvaruarkitekturer, 13% rör nÀtverksstacken, 7% har att göra med filsystem och 4% med interna kÀrnsystem.
Huvudnyheterna i kÀrnan 6.9:
- Disksubsystem, in- och utmatning och filsystem
- I Device Mapper (DM) har en ny hanterare dm-vdo (virtual data optimizer) lagts till, vilket gör det möjligt att skapa en virtuell blockenhet baserad pÄ befintliga blockenheter som erbjuder funktioner som deduplicering av upprepade data, komprimering av data, utelÀmnande av tomma block och ökning av blockenhetens storlek vid behov (thin provisioning). Dessa funktioner implementeras pÄ blockenhetsnivÄ och Àr oberoende av det anvÀnda filsystemet (till exempel kan dm-vdo implementera automatisk sammanslagning av duplicerade data och lagring av information i komprimerad form för alla filsystem). AnvÀndning av dm-vdo stöds för fysiska lagringssystem med en storlek pÄ upp till 256 TB och skapande av logiska volymer upp till 4 PB. För hantering av vdo-partitioner rekommenderas att anvÀnda lvm. VDO-teknologin utvecklades av Permabit och blev öppen efter att företaget köptes upp av Red Hat 2017.
- I FUSE-underdelen, som anvÀnds för att implementera filsystem i anvÀndarutrymme, har en grundlÀggande implementering av "passthrough"-lÀget lagts till, vilket möjliggör direkt Ätkomst till fildata pÄ kÀrnnivÄ utan att gÄ igenom processen som körs i anvÀndarutrymme. Detta kan, i vissa situationer, avsevÀrt öka prestandan. Till exempel kan FUSE-implementationer av filsystem som arbetar i skrivskyddat lÀge och begrÀnsar Ätkomst till filer returnera innehÄllet i filer frÄn det ursprungliga filsystemet utan att överföra dem till FUSE-processen.
- Drivrutinen för filsystemet Ext2 har klassificerats som förÄldrad (deprecated). Anledningen anges vara att drivrutinen endast stödjer 32-bitars tidsrÀknare i inode, som kommer att överflödas den 19 januari 2038. IstÀllet för ext2-drivrutinen rekommenderas att anvÀnda ext4-drivrutinen, som har stöd för Ext2-filsystemet och Àr helt kompatibel med det, men som ocksÄ kan anvÀnda tidsstÀmplar i ext2-partitioner som inte Àr pÄverkade av 2038-problemet om filsystemet skapats med inode-storlek större Àn 255 byte (i ext2-drivrutinen anvÀndes 32-bitars tidsrÀknare oavsett inode-storlek).
- Den gamla NTFS-filsystemdrivrutinen har tagits bort och har ersatts av den nya NTFS3-drivrutinen som kom med version 5.15. Leverans av tvÄ drivrutiner som implementerar NTFS i kÀrnan anses oklokt, med hÀnsyn till att den gamla drivrutinen inte har uppdaterats pÄ mÄnga Är, Àr i ett bedrövligt skick och endast kan köras i lÀslÀge.
- I filsystemen zonefs och hugetlbfs har stöd för kartlÀggning av anvÀndaridentifierings-id för monterade filsystem lagts till, vilket anvÀnds för att associera filer av en viss anvÀndare pÄ ett monterat annat partition med en annan anvÀndare i det aktuella systemet.
- För NFSv4 har administratörer fÄtt möjlighet att rensa öppnings- och lÄsningsstatusar för filer.
- För Ext4-filsystemet noteras endast buggfixar och uppdatering av kunit-tester.
- I Btrfs har översÀttningen av funktioner till anvÀndning av minnessidor (page folios) fortsatt.
- 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.
- Funktionen pwritev2() har fÄtt flaggan RWF_NOAPPEND, som gör det möjligt att ange en förskjutning för skrivning, Àven om filen har öppnats i lÀget enbart för tillÀgg av data i slutet av filen.
- Nya ioctl-kommandon har lagts till: FS_IOC_GETUUID â returnerar UUID-koden för det angivna filsystemet, och FS_IOC_GETFSSYSFSPATH â anger platsen i /sys/fs för det angivna monterade filsystemet.
- Filssystemen efs, qnx4 och coda har övergÄtt till att anvÀnda det nya API:t för montering av partitioner.
- Implementeringen av filoperationer som körs utan hÀnsyn till versaler har förbÀttrats. Prestandan har ökat genom att först utföra en kÀnslig jÀmförelse och sedan gÄ tillbaka till att söka utan hÀnsyn till versaler. Problem vid montering av overlayfs ovanpÄ kataloger som har stÀllts in för att vara utan hÀnsyn till versaler har ÄtgÀrdats.
- Minne och systemtjÀnster
- Stödet för Intel FRED (Flexible Return and Event Delivery) har implementerats, vilket Ă€r utformat för att öka effektiviteten och tillförlitligheten för leverans av information om lĂ„g-nivĂ„hĂ€ndelser jĂ€mfört med det nuvarande systemet IDT (Interrupt Descriptor Table). PrestandaförbĂ€ttringar och minskade fördröjningar uppnĂ„s genom att hĂ€ndelser Ă„terförs av processorinstruktionen IRET istĂ€llet för att levereras via IDT. Ăkad tillförlitlighet uppnĂ„s genom separat hantering av hĂ€ndelseintrĂ€de i kĂ€rnkontext och anvĂ€ndarkontext, skydd mot inbĂ€ddad NMI-exekvering och bevarande av alla CPU-register relaterade till undantaget i den utvidgade stackramen.
- Möjligheten att optimera Ätkomst till data för individuella CPU-kÀrnor har lagts till genom att anvÀnda namngivna adressutrymmen (Named Address Spaces) i kÀrnkoden, implementerade i GCC som en del av GNU C-förlÀngningen.
- Flaggan PIDFD_THREAD har lagts till i funktionen pidfd_open(), vilket gör det möjligt att skapa pidfd för enskilda trÄdar, istÀllet för att endast anvÀnda pidfd i sammanhanget för gruppens ledartrÄd. Det har ocksÄ föreslagits att implementera ett pseudo-filsystem för Ätkomst till pidfd genom det virtuella filsystemet. Till skillnad frÄn identifiering av processer med pid Àr pidfd-koden kopplad till en specifik process och Àndras inte, medan PID efter att den aktuella processen har avslutats kan knytas till en annan process.
- I BPF-subsystemen har en BPF-tokenmekanism lagts till, vilket gör att program kan delegera Ätkomstbehörigheter till privilegierade BPF-operationer selektivt; till exempel kan ett icke-privilegierat program ges tillgÄng till vissa BPF-subsystem utan att ge fulla CAP_BPF-rÀttigheter.
- En ny typ av delad minne, bpf_arena, har lagts till i BPF-subsystemen, vilket definierar det omrÄde som Àr tillgÀngligt för delning mellan BPF-program och processer i anvÀndarutrymmet. Instruktionen may_goto har lagts till, vilket möjliggör loopar som kan avbrytas av verifieraren. Möjlighet att generera godtyckliga TCP SYN-cookies frÄn BPF-program har lagts till, samt skapande av BPF-handlers för att bekÀmpa SYN-flodattacker.
- Arbetet med att föra över Ă€ndringar frĂ„n Rust-for-Linux-grenen fortsĂ€tter, kopplat till anvĂ€ndning av Rust som det andra sprĂ„ket för utveckling av drivrutiner och kĂ€rnmoduler (Rust-stöd Ă€r inte aktiverat som standard och gör inte Rust till ett obligatoriskt byggberoende för kĂ€rnan). Stöd för anvĂ€ndning av Rust med 64-bitars ARM-processorer har lagts till. ĂvergĂ„ng har gjorts till Rust-version 1.76. Makrot âcontainer_of!â har lagts till. IstĂ€llet för den instabila funktionen âptr_metadataâ har den stabila metoden âbyte_subâ anvĂ€nts. Modulen âtimeâ med funktionen för tidskonvertering âmsecs_to_jiffies()â har lagts till.
- Möjligheten att trunkera filer (ftruncate_file) har lagts till i io_uring-subsystemet.
- En ny typ av arbetsköer, WQ_BH (workqueue Bottom Halves), har lagts till för asynkron exekvering av kod i kontexten av programvaruinterrupper, avsedd för anvÀndning istÀllet för förÄldrade tasklets.
- Timerhanteringssystemet har omarbetats avsevÀrt, dÀr logiken för att vÀlja aktiv CPU-kÀrna för att utföra den utlösta timern har förbÀttrats för att inte vÀcka inaktiva kÀrnor frÄn vilolÀge.
- Möjlighet att uppdatera processorns energimodell (EM, Energy Model) under drift har implementerats, vilket kan anvÀndas för att ta hÀnsyn till effekten av arbetstemperaturen pÄ CPU:ns energieffektivitet. Funktionaliteten em_cpu_energy() har avsevÀrt förbÀttrats, vilket nu körs 1,43 gÄnger snabbare i tester pÄ en stationÀr system och 1,69 gÄnger snabbare i tester pÄ RockPi 4B.
- Stöd för körning av system baserade pÄ ARM64-arkitekturen har lagts till i LPA2-lÀget med 52-bitars virtuellt adressutrymme.
- För ARM64-system har stöd för kontinuerlig PTE (Page Table Entry)-skrivning implementerats, vilket ökar prestandan genom att förbÀttra effektiviteten i anvÀndningen av TLB (Translation Lookaside Buffer).
- Patchar har antagits för att förbÀttra prestandan i minneshanteringssystemet genom att minska konkurrerande lÄs i vmalloc().
- För LoongArch-arkitekturen har en mekanism för live patching av kÀrnan implementerats, vilket möjliggör tillÀmpning av korrigeringar pÄ kÀrnan utan omstart.
- För RISC-V-system har stöd för systemanropet membarrier() implementerats, vilket sÀkerstÀller minnesbarriÀrer för aktiva trÄdar i systemet.
- Krav pÄ versionen av LLVM/Clang som kan anvÀndas för att kompilera kÀrnan har höjts. Nu krÀvs minst version 13.0.1 av LLVM (tidigare stöddes kompilering med LLVM 11+).
- Mekanismen 'User trace events', som gör det möjligt att skapa spÄrningsevents frÄn anvÀndarprocesser för att övervaka aktiviteter i anvÀndarutrymmet, har fÄtt stöd för export av hÀndelseinformation i olika format (USER_EVENT_REG_MULTI_FORMAT).
- I funkionsspÄrningsmekanismen har möjligheten att spÄra tillstÄndet av inparametrar vid utgÄngsspringandet lagts till. VÀrdena frÄn return-operatorn kan nu matchas med parametrarna som anvÀndes vid funktionsanropet.
- I verktyget perf har stöd för lĂ€get för aggregatutsnitt 'cluster' ('perf stat -a âper-cluster') lagts till för att sammanfoga statistik för delade resurser. Möjlighet att anvĂ€nda libcapstone-biblioteket för disassemblering av processorinstruktioner ('perf script -F disasm') har ocksĂ„ implementerats. Optimeringar för minnesanvĂ€ndning har genomförts vid körning av kommandona perf report och perf annotate.
- Virtualisering och sÀkerhet
- Skydd mot RFDS (Register File Data Sampling) sÄrbarhet har lagts till i Intel Atom-processorer, vilket gör det möjligt att extrahera kvarvarande information frÄn registerfiler (RF, Register File) i processorn, vilka anvÀnds för att gemensamt lagra innehÄllet i registren för alla uppgifter pÄ samma CPU-kÀrna. För att blockera sÄrbarheten krÀvs en mikroprogramsuppdatering och anvÀndning av instruktionen VERW för att rensa innehÄllet i mikroarkitekturella buffertar vid ÄtergÄng frÄn kÀrnan till anvÀndarutrymmet. För att aktivera skyddet vid kÀrnstart kan flaggan "reg_file_data_sampling=on" anges. Information om sÄrbarhetens förekomst och tillgÄng till nödvÀndigt mikroprogram för att skydda kan bedömas i filen "/sys/devices/system/cpu/vulnerabilities/reg_file_data_sampling".
- GrundlÀggande stöd för skydd av gÀstsystem har lagts till med hjÀlp av AMD SEV-SNP (Secure Nested Paging) för att sÀkerstÀlla sÀker hantering av inbÀddade sidtabeller i minnet och skydda mot "undeSErVed" och "SEVerity" attacker pÄ AMD EPYC-processorer, vilket möjliggör omgÄelse av skyddsmekanismen AMD SEV (Secure Encrypted Virtualization). KVM De nödvÀndiga Àndringarna för att anvÀnda SNP planeras att lÀggas till i version 6.10.
- Moduler med implementation av IMA (Integrity Measurement Architecture) och EVM (Extended Verification Module) har överförts till att anvÀnda LSM (Linux Security Modules) ramverket, vilket utan att tappa funktionalitet betydligt har förenklat koden, sammanfogat duplicerad funktionalitet och utnyttjat de tillgÀngliga standardmöjligheterna via LSM. IMA-modulen Àr avsedd för att kontrollera integriteten hos operativsystemets komponenter genom digitala signaturer och hash-vÀrden. EVM-modulen skyddar utökade filattribut (xattrs) mot attacker som syftar till att ÄsidosÀtta deras integritet (EVM kommer inte att tillÄta offline-attacker dÀr en angripare kan Àndra metadata, till exempel genom att starta frÄn sin egen lagringsenhet).
- Systemanropen lsm_list_modules(), lsm_get_self_attr() och lsm_set_self_attr() har omarbetats för bĂ€ttre kompatibilitet med 32-bitarsmiljöer, som Ă€r avsedda för att lista laddade LSM-moduler (Linux Security Modules) och för att hĂ€mta/stĂ€lla in egenskaper för LSM-moduler. Ăndringen bryter mot bakĂ„tkompatibiliteten, men eftersom de nya systemanropen lades till i den senaste kĂ€rnversionen och Ă€nnu inte anvĂ€nds i applikationer, ansĂ„g Linus Torvalds att Ă€ndringen var godtagbar.
- Ett försök gjordes att Äteruppta anvÀndningen av mekanismen UBSAN (Undefined Behavior Sanitizer). Problemet ligger i att kompilatorer hanterar heltalige överskridningar av tecknade och o-tecknade typer pÄ olika sÀtt. Tecknade överskridningar och överskridningar av pekare tillhör kategorin av odefinierat beteende, medan o-tecknade överskridningar hanteras pÄ ett modulÀrt sÀtt enligt 2n med endast de lÀgsta bitarna av resultatet bevarade ("wrap-around") och pÄverkas inte av odefinierat beteende. För att utesluta situationer som kan leda till odefinierat beteende kompileras kÀrnan med alternativet "-fno-strict-overflow", vilket leder till anvÀndning av "wrap-around" för alla heltalige överskridningar. GCC och Clang kan inte korrekt diagnostisera vissa problem vid anvÀndning av flaggan "-fno-strict-overflow", och aktiveringen av UBSAN syftar till ett samarbete med kompilatorutvecklarna för att eliminera falska positiva och identifiera heltalige överskridningar dÀr det saknas tydliga kontroller.
För att kontrollera möjliga överskridningar i kÀrnan anvÀnds konstruktioner av typen "var + offset < var" (till exempel, "if (pgoff + (size > PAGE_SHIFT) < pgoff){..}"), som Àr kopplade till kompileringen med flaggan "-fno-strict-overflow" och tÀcker inte all kod dÀr en överskridning potentiellt kan intrÀffa. Problemet Àr att vid anvÀndning av UBSAN ledde sÄdana kontroller till ett stort antal falska varningar, vilket gjorde att UBSAN mÄste stÀngas av Är 2021. I den uppdaterade implementationen föreslÄs anvÀndning av speciella annotationer __signed_wrap och __unsigned_wrap, samt fÀrdiga makron med kontroller som add_would_overflow(a, b) och add_wrap(a, b), som möjliggör separation av utvecklarnas tillÄtna anvÀndning av heltalige överskridningar frÄn oavsiktliga överskridningar som kan leda till sÄrbarheter. Förslaget om en mer omfattande omarbetning av kÀrnan med introduktion av ytterligare typdefinitioner avvisades av Linus Torvalds.
- NĂ€tverkssystemet
- I det nÀtverksbaserade subsystemet har arbete genomförts för att minska förekomsten av konkurrerande lÄsning ("lock contention", ett försök att fÄ en lÄs som hÄlls av en annan trÄd). AnvÀndningen av RTNL-lÄs har minskats.
- möjligheten att aktivera stöd för aktiv polling av sockets (busy polling) i samband med individuella anrop av epoll. Storin och budgetparametrar kan stÀllas in separat frÄn systemets standardinstÀllningar.
- en struktur för net_hotdata har implementerats för att öka effektiviteten av cache för de mest anvÀnda nÀtverkskonfigurationsvariablerna.
- MPTCP har fÄtt stöd för att stÀlla in TCP_NOTSENT_LOWAT-alternativet för sockets, vilket gör det möjligt att begrÀnsa storleken pÄ sÀndningsbuffer. I MCTP:s socket-API har stöd för nÀtverksidentifierare ("network ID") lagts till, vilket möjliggör anvÀndning av flera icke-överlappande MCTP-nÀtverk pÄ en och samma vÀrd.
- IPSec har fÄtt stöd för att omdirigera ICMP-meddelanden med felinformation (RFC 4301).
- processen för att skanna rutter med utgÄnget liv har pÄskyndats.
- XDP:s prestanda har förbÀttrats genom att mer strikt undvika allokering av stora minnesblock.
- möjligheten att bifoga metadata till netconsole-meddelanden har lagts till.
- I Netfilter har det blivit tillÄtet att definiera tabeller frÄn anvÀndarskiktet som kopplas till en styrande bakgrundsprocess och som inte tas bort automatiskt efter att anvÀndarapplikationen har avslutats.
- i nftables har tillÀgg av element till set-grupper med sammanfallande intervall pÄskyndats.
- Utrustning
- i i915-drivrutinen fortsÀtter arbetet med att implementera stöd för Intel LunarLake (Xe 2) chip. Nya PCI-identifikatorer för enheter baserade pÄ Intel Arrow Lake och Alder Lake N-chip har lagts till. För Displayport har stöd för tunneling (DP tunneling) och bandbreddsallokering (bandwidth allocation) lagts till. Fastboot-lÀget har aktiverats för alla plattformar. Stöd för felsökningsutskrift kopplat till specifika enheter har lagts till.
- i AMDGPU-drivrutinen har förberedelser gjorts för att implementera stöd för GPU AMD RDNA3.5 och RDNA4. Stöd för ATHUB 4.1, LSDMA 7.0, JPEG DPG, IH 7.0, HDP 7.0, VCN 5.0, SMU 13.0.6, NBIO 7.11, SDMA 6.1, MMHUB 3.3, DCN 3.5.1, NBIF 6.3.1, VPE 6.1.1 och RAS ACA-ramverket har lagts till. En parameter har lagts till i kÀrnmodulen för freesync_video för att aktivera experimentellt stöd för optimering av vÀxling av videolÀgen med hjÀlp av teknik för adaptiv synkronisering FreeSync.
- i Nouveau-drivrutinen har koden för bildskÀrmskontrollen översatts till att anvÀnda funktionen kmemdup().
- Arbetet med DRM-drivrutinen (Direct Rendering Manager) Xe för GPU:er baserade pÄ Intel Xe-arkitekturen, som anvÀnds i grafikkort frÄn Intel i Arc-serien och integrerad grafik, har fortsatt, med början frÄn Tiger Lake-processorer.
- DRM-drivrutinen för Mediatek MT8188 VDOSYS1-chip har lagts till.
- InstÀllningar relaterade till videoundersystem har flyttats till sektionen CONFIG_VIDEO.
- Stöd har lagts till för ARM64 SoC: Mediatek MT7981B (Filogic 820), MT7988A (Filogic 880), NXP i.MX8DXP, Renesas R8A779G2 (R-Car V4H ES2.0), R8A779H0 (R-Car V4M), TI J722S.
- Stöd har lagts till för ARM-plattformar och enheter: Android-telefoner baserade pÄ Tegra30-chip, Chromebook-modeller baserade pÄ Mediatek MT8186, NAS, surfplattor och spelkonsoler baserade pÄ Rockchips RK35xx, White Hawk-kort baserade pÄ Renesas SoC, kort baserade pÄ Qualcomm SM8550 (Snapdragon 8 Gen 2), Apalis Evaluation Board, Sielaff i.MX6 Solo Board, Samsung Galaxy Tab 4 10.1 LTE.
- Koden för ljudundersystemet ALSA har refaktorerats. Stöd har lagts till för ljudsystem frÄn Microchip SAM9x7, NXP i.MX95 och Qualcomm WCD939x. SoundWire-drivrutinen har fÄtt stöd för ASoC med ljudkoprocessorer frÄn AMD ACP 6.3, och för Intel-system har ett DSPless-lÀge implementerats. Stöd för ytterligare ljudkodekar Cirrus HD har lagts till. I virtio-drivrutinen har hanteringen av ljudenheter förbÀttrats.
- Stöd för Ethernet-kontrollerna Marvell Octeon PCI Endpoint NIC VF och Intel E825-C 100G har lagts till.
Samtidigt har den latinamerikanska Stiftelsen för fri programvara bildat en version av det helt fria kĂ€rnan 6.9 â Linux-libre 6.9-gnu, rensad frĂ„n firmware och drivrutiner som innehĂ„ller icke-fria komponenter eller kodavsnitt vars anvĂ€ndning Ă€r begrĂ€nsad av tillverkaren. I utgĂ„van 6.9 har koden för att rensa blobbar i drivrutinerna amdgpu, ath12k, adreno, btusb och r8169 uppdaterats. Rensning av den nya drivrutinen ptp_fc3 har genomförts. Blobnamnen i dts-filer (devicetree) för Aarch64-arkitekturen har rensats. Problem med rensning av i915-drivrutinen som ledde till lĂ„sning under initialisering har Ă„tgĂ€rdats. Ăndringar relaterade till hantering av blobbar som levereras i form av hexadecimala dumpningar har gjorts.
KĂ€lla: opennet.ru
