Efter tvÄ mÄnaders utveckling presenterade Linus Torvalds lanseringen av kÀrnan Linux 6.17. Bland de mest anmÀrkningsvÀrda Àndringarna finns: förbÀttrad prestanda för Btrfs, systemanropen file_getattr() och file_setattr(), enhetliggöring av en- och flerkÀrniga konfigurationer i schemalÀggaren, modulen DAMON_STAT med statistik över minnesÄtkomst, stöd för live-patching pÄ ARM64-system, skickande av core-dumpar via socket AF_UNIX, begrÀnsning av SCHED_EXT via cgroup, förenklad konfiguration av skydd mot sÄrbarheter i CPU, byggnation i Clang med initialisering av variabler pÄ stacken, skydd mot manipulering av /proc, utvidgning av RV (Runtime Verification) undergruppen, begrÀnsning av sockets AF_UNIX via AppArmor och algoritmen för TCP-överbelastningskontroll DualPI2.
I den nya versionen har 14334 correctioner accepterats frÄn 2118 utvecklare, patchens storlek Àr 46 MB (Àndringarna berörde 12841 filer, 646654 kodrader lades till, 398782 kodrader togs bort). I den föregÄende versionen fanns det 15924 correctioner frÄn 2145 utvecklare, patchens storlek var 50 MB. UngefÀr 43% av alla Àndringar i 6.17 rör enhetsdrivrutiner, cirka 12% av Àndringarna handlar om uppdatering av arkitektur-specifik kod, 14% avser nÀtverksstacken, 4% rör filsystem och 3% interna kÀrnunder system.
De huvudsakliga nyheterna i kÀrnan 6.17 (1, 2, 3):
- Disksubsystem, in- och utmatning och filsystem
- I Btrfs har stöd för stora sidblads minnen (large folios) lagts till pÄ experimentell basis, vilket minskar overhead och förbÀttrar prestanda för flera operationer. Cache-lagring av begÀrningar till bitmap-kartor för ledigt utrymme har implementerats, vilket har ökat prestanda vid skapande av tomma filer med 20%. FörbÀttrad funktionalitet för förhandslÀsning i system som anvÀnder datakomprimering. Nycklar i strukturen XArray placeras tÀtare, vilket har ökat kompaktiteten i lagring av extens-noder och minskat antalet terminalnoder med 50-70%. Ytterligare instÀllningar för anvÀndning av komprimering i defragmenterade extens har tillhandahÄllits.
- I ext4-filsystemet har stöd för buffrad I/O med flaggan RWF_DONTCACHE lagts till, dÀr data tas bort frÄn sidcache direkt efter att operationen har avslutats.
- I EROFS-filsystemet har stöd för komprimering av metadata implementerats.
- NFS-servern kan nu delegera skrivoperationer till klienter som öppnar filer i skrivskyddat lÀge.
- I systemanropet fallocate() har flaggan FALLOC_FL_WRITE_ZEROES lagts till, vilket gör det möjligt att fylla ett angivet omrÄde i filen med nollor, genom att anvÀnda kommandot WRITE_ZERO som stöds av vissa SSD-enheter, vilket möjliggör nollstÀllning utan in- och utdataoperationer. Alternativet Àr för nÀrvarande endast tillgÀngligt i filsystemet ext4.
- Systemanropen file_getattr() och file_setattr() har lagts till för att manipulera attributen för inode i en angiven fil.
- Drivern "pktcdvd" för arbete med optiska medier i paketlÀge har tagits bort, vilket markerats som förÄldrat sedan 2016.
- Filsystemet Bcachefs i Linux-kÀrnan har övergÄtt till extern underhÄllsmodus, vilket innebÀr att inga fler Àndringar kommer att tas in i den primÀra kÀrnan för Bcachefs, samtidigt som detta filsystem behÄlls i kÀllkoden för kÀrnan. Utvecklingen av Bcachefs kommer att fortsÀtta utanför kÀrnkodbasen tills Kent Overstreet kan bevisa korrekt samarbete med andra kÀrnutvecklare och förmÄgan att följa etablerade utvecklingsregler.
- Minne och systemtjÀnster
- Stödet för ensprÄkiga konfigurationer har tagits bort frÄn schemalÀggaren. PÄ system med en processor bör nu kÀrnor som Àr byggda för multiprocessorsystem (SMP) anvÀndas. Koden för ensprÄkiga och multiprocessorsystem har enhetliggjorts och befriats frÄn onödiga bindningar till kÀrnparametern CONFIG_SMP.
- KÀrnmodulen DAMON_STAT (Data Access Monitoring Results Stat) har lagts till, vilket gör det möjligt att övervaka Ätkomst till det operativa minnet med hjÀlp av DAMON (Data Access MONitor) underhÄllssystemet. Modulen ger statistik om inaktivitet (memory_idle_ms_percentiles) och förvÀntad minnesbandbredd (estimated_memory_bandwidth).
- Stöd för Live-patchar, vilket gör det möjligt att tillÀmpa korrigeringar pÄ Linux-kÀrnan i realtid, utan omstart och nedstÀngning av systemet, har implementerats pÄ system med ARM64-arkitektur.
- I det minimalistiska C-biblioteket nolibc, som levereras med kÀllkoden för Linux-kÀrnan och tillhandahÄller ett grÀnssnitt över grundlÀggande systemanrop, har stöd för SuperH-, x32-, MIPS n32- och MIPS n34-arkitekturer lagts till.
- Möjligheten att skicka innehÄllet i core-dumpar via socket AF_UNIX har utökats, vilket gör det möjligt att skapa mer sÀkra core-dumpbehandlare i anvÀndarutrymmet, oberoende av att kÀrnan anropar privilegierade processer. Den nya versionen inkluderar ett protokoll för att skapa servrar, som kan hantera behandlingen av core-dumps pÄ nivÄn av individuella uppgifter. Till exempel kan core-dumps ignoreras för vissa processer, medan de för andra kan överföras via socket. En prototyp av servern för hantering av core-dumps har förberetts sÀrskilt.
- Ett nytt alternativ för kommandoraden i kÀrnan "crashkernel=size,cma" har lagts till för att reservera minne genom CMA (Contiguous Memory Allocator) för att spara kÀrnans crash-dump.
- Möjligheterna hos pidfd-mekanismen har utvidgats, vilket gör det möjligt att anvĂ€nda identifierare kopplade till specifika processer och som, till skillnad frĂ„n pid, inte kan tilldelas om. Det har lagts till möjlighet att binda utökade attribut till pidfd frĂ„n anvĂ€ndarrummet. Ăppning av filbeskrivare för pidfd tillĂ„ts genom funktionen open_by_handle_at() utan att binda till filsystemet. Intern information som skapats av kĂ€rnan tillsammans med pidfd kopplas nu till processen snarare Ă€n pidfd och sparas mellan Ă„teröppningar av samma process.
- BPF-subsystemet har fÄtt funktionen bpf_cgroup_read_xattr() för att lÀsa utökade filattribut. Möjligheten att anvÀnda typiska strÀngoperationer i BPF-program, sÄsom bpf_strcmp, bpf_strnchr, bpf_strchrnul, bpf_strlen och bpf_strspn, som arbetar i lÀslÀge har tillhandahÄllits. Det har Àven lagts till möjlighet att anvÀnda standard strömmarna stdout och stderr för interaktion med komponenter i anvÀndarrummet. För system baserade pÄ LoongArch-arkitekturen har BPF implementerat möjlighet för dynamisk kodmodifiering, mekanismen "BPF trampoline" (som minskar overhead vid samtal mellan kÀrnan och BPF-program) och körning av program som anvÀnder struct_ops för att skapa funktionhandlers för kÀrnan via BPF.
- I tidshanteringssystemet har stöd för hjÀlptimmar (auxiliary) införts, som inte Àr kopplade till de vanliga systemtimmarna och gÄr i sin egen takt (tidigare gick alla klockor med samma takt och skilde sig endast Ät i offset).
- Initialt stöd för proxy-körning (Proxy Execution) har lagts till för att mildra problem med prioriteringsinversion. Proxy-körning tillÄter en uppgift som vÀntar pÄ att en lÄs ska slÀppas att överföra sin körkontext till uppgiften som hÄller lÄsen för att snabba pÄ frigörandet av denna lÄs.
- Fortsatt överföring av Ă€ndringar frĂ„n Rust-for-Linux-grenen relaterade till anvĂ€ndningen av Rust som andrasprĂ„k för utveckling av drivrutiner och kĂ€rnmoduler (Stödet för Rust Ă€r inte aktiverat som standard och gör inte Rust till ett obligatoriskt byggberoende för kĂ€rnan). Abstraktioner för hantering av spĂ€nnings- och strömregulatorer, firmwareegenskaper, I/O-resurser och I/O-minne har lagts till. Makrot "warn_on!()" har implementerats. UserPtr-typ för pekare i anvĂ€ndarutrymme har lagts till. Funktionaliteten hos modulerna workqueue, uaccess, dma, time och list har utvidgats. En ny modul âbitsâ med funktionerna âbitâ och âgenmaskâ har lagts till.
- Koden för berÀkning av CRC-kontrollsummor har omarbetats och nya anrop för att generera SHA-1- och SHA-2-hashar har lagts till. Arkitekturspecifika optimeringar har lagts till. Prestandan för funktionen crc32c() har förbÀttrats pÄ nya x86_64 CPU:er som stöder VPCLMULQDQ-tillÀgget (Vector Carry-Less Multiplication of Quadwords).
- För S390-system har stöd för utslagning till vÀxlingsutrymme och migration av stora minnessidor (transparent huge page) implementerats.
- Möjlighet att justera aggressiviteten vid frigöring av minnessidor (proactive-reclaim) vid brist pÄ minne kopplad till specifika NUMA-noder har lagts till, vilket gör det möjligt att tilldela NUMA-noder dÀr mer aktiv frigöring av minne ska tillÀmpas. Till exempel, "echo "512M swappiness=10" > /sys/devices/system/node/node1/reclaim".
- I SCHED_EXT-mechanismen, som möjliggör anvÀndning av BPF för att skapa CPU-schemalÀggare, har möjligheten att styra bandbredd genom cgroup lagts till. Till exempel kan parametern cpu.max anvÀndas för att begrÀnsa belastningen pÄ CPU.
- Automatisk montering av den virtuella filsystemet tracefs i katalogen /sys/kernel/debug/tracing har förklarats som förÄldrad, och istÀllet bör /sys/kernel/tracing anvÀndas.
- Virtualisering och sÀkerhet
- Möjlighet till aktivering har lagts till. skydd mot sÄrbarheter i CPU genom val av blockerade attackvektorer. i stÀllet för att ange specifika sÄrbarheter i instÀllningarna. Blockeringsmetoder vÀljs beroende pÄ typen av isoleringsbrott: mellan anvÀndaren och kÀrnan (user-kernel), mellan anvÀndaren och en annan anvÀndare (user-user), mellan gÀstsystemet och vÀrdmiljön (guest-host), mellan olika gÀstsystem (guest-guest) och mellan olika trÄdar (cross-thread). Den föreslagna metoden gör det möjligt att aktivera skydd endast mot de klasser av sÄrbarheter som verkligen oroar anvÀndaren. Till exempel kan Àgare av molnmiljöer aktivera lÀgena guest-host och guest-guest, varefter metoder för skydd mot sÄrbarheterna BHI, GD, L1TF, MDS, MMIO, Retbleed, RFDS, Spectre_v2, SRBDS, SRSO och TAA aktiveras.
- Stöd för kompilatorn Clang har lagts till med aktivering av lÀget för att spÄra stackdjup, dÀr alla variabler som lagras pÄ stacken initieras. Initieringen görs för att förhindra informationslÀckor frÄn kÀrnan genom icke-initierade variabler som kan innehÄlla rester av tidigare lagrade data pÄ stacken. Tidigare stödde liknande funktionalitet anvÀndningen av GCC-plugin STACKLEAK.
- Skydd mot attacker som manipulerar filsystemet /proc genom montering i "bind"-lÀge har lagts till. Inode-nummer för roten av /proc Àr nu fast (PROCFS_ROOT_INO) och kan kontrolleras av processen i anvÀndarutrymmet.
- I RV (Runtime Verification) subsystemet, som Àr avsett för att verifiera korrekt drift av högpÄlitliga system, har en komponent för övervakning av rtapp (Real-time application monitor) lagts till för att spÄra typiska problem i applikationer som körs i realtid, samt komponenterna rp, sssw och opid för att testa schemalÀggaren. Möjligheten att skapa övervakningskomponenter som anvÀnder linjÀr tidslogik för att bestÀmma beteendemodellen istÀllet för en deterministisk automat har implementerats. Verifieringen sker under körning genom att koppla handler till spÄrningspunkter som jÀmför den faktiska körningen med en fördefinierad referensmodell som definierar det förvÀntade beteendet hos systemet.
- Stöd för Ätkomstkontroll av AF_UNIX-sockets har lagts till i AppArmor-systemet.
- I KVM-hypervisorn pÄ ARM-system har stöd för GICv5 avbrottskontroller implementerats.
- InstÀllningen CONFIG_KVM_IOAPIC har lagts till, vilket möjliggör avstÀngning av stödet för emulering av APIC, PIC och PIT i KVM.
- Skydd mot sÄrbarheten VMSCAPE har lagts till.
- Ioctl-kommandot FS_IOC_GETLBMD_CAP har lagts till för att hÀmta information om anvÀndningen av integritetsskydd för filer frÄn anvÀndarrummet.
- GrÀnssnittet /sys/fs/selinux/user har förklarats som förÄldrat, och en fem sekunders fördröjning införs med en varning i loggen vid Ätkomst.
- NĂ€tverkssystemet
- I implementationen av PSE-teknologin (Power Sourcing Equipment), som anvÀnds för att ge ström över Ethernet till enheter som IP-kameror och trÄdlösa Ätkomstpunkter, har stöd för anpassningsbara strategier för kraftbudgetbedömning lagts till (total tillgÀnglig ström). SÄdana strategier gör det möjligt att bestÀmma vilka portar som bör stÀngas av först för att undvika överbelastning.
- I implementationen av MCTP-protokollet (Management Component Transport Protocol) har stöd för routing av paket till externa noder via mellanliggande noder (gateway-routing) lagts till. Till exempel kan nedanstÄende regler anvÀndas för att styra paket till noden med ID 10 (Endpoint ID 10) via enhet mctpi2c0, som anvÀnder adressen 0x1d, direkt ansluten till noden med ID 9. mctp route add 9 via mctpi2c0 mctp neigh add 9 dev mctpi2c0 lladdr 0x1d mctp route add 10 gw 9
- För UNIX-sockets (AF_UNIX) har alternativet SO_INC implementerats, och för VSOCK-adressfamiljen alternativet SIOCINQ. Implementerade alternativ Àr liknande alternativet TCP_INQ för TCP och gör det möjligt att fÄ information om antalet byte som Àr tillgÀngliga för lÀsning i socket genom en styrmeddelande.
- För TCP har strikt efterlevnad av den deklarerade fönsterstorleken för mottagning införts, vilket definierar storleken pÄ de data som fÄr skickas innan ACK-bekrÀftelse frÄn den andra sidan mottas. Tidigare fortsatte kÀrnan att bearbeta data som kom in över den deklarerade mottagningsfönsterstorleken, men kommer nu att sluta med detta.
- I MPTCP (Multipath TCP) har möjligheten att anvÀnda socketalternativet TCP_MAXSEG för att begrÀnsa den maximala storleken pÄ skickade segment lagts till. MPTCP Àr en utvidgning av TCP-protokollet för att möjliggöra paketleverans över flera vÀgar samtidigt via olika nÀtverksgrÀnssnitt knutna till olika IP-adresser.
- Stöd för TCP DualPI2 överbelastningskontrollalgoritmen (RFC 9332) har lagts till, vilket möjliggör anvÀndning av skalbara överbelastningskontrollörer för trafik med höga krav pÄ kvaliteten (t.ex. TCP-Prague och DCTCP) utan att pÄverka prestandan för klassisk trafik, dÀr sÄdana överbelastningskontrollörer som Reno och Cubic anvÀnds.
- Sysctl "force_forwarding" har lagts till, genom vilket trafikdirigering kan aktiveras pÄ valda nÀtverksgrÀnssnitt med IPv6.
- Stödet för SACK (Selective Acknowledgment) algoritmen för paketförlust, som beskrivs i RFC 6675, har tagits bort. Denna algoritm förklarades som förÄldrad 2018. För att faststÀlla TCP-paketförlust rekommenderas att anvÀnda RACK-TLP-algoritmen.
- Utrustning
- Arbetet med drm-drivrutinen (Direct Rendering Manager) Xe för GPU baserade pÄ Intel Xe-arkitekturen, som anvÀnds i Intel Arc-grafikkort och integrerad grafik med start frÄn Tiger Lake-processorer, har fortsatt. Den nya versionen har nu som standard stöd för chip baserade pÄ Panther Lake mikroarkitektur och stöd för WildCat Lake mikroarkitektur har lagts till.
- I AMDGPU-drivrutinen för GPU GFX9.x Àr stöd för Cleaner Shader-mekanismen implementerad, vilket sÀkerstÀller att GPU-minnet rensas innan det ÄteranvÀnds för att förhindra datalÀckage frÄn andra processer. Stödet för vilolÀge har förbÀttrats. Möjligheten att övergÄ till vilotillstÄnd i miljöer med AMD SR-IOV har lagts till. Belysningshanteringen har ocksÄ förbÀttrats.
- I i915-drivrutinen har stöd för drm_panic-mekanismen implementerats, som vid fel visar en liknande "blÄ skÀrm av död". Stöd har lagts till för bildskÀrmskontrollern som anvÀnds i Wildcat Lake-familjens chip.
- Integration av Nova-drivrutinens komponenter för NVIDIA GPU:er med GSP-firmware, som anvÀnds frÄn NVIDIA GeForce RTX 2000-serien baserad pÄ Turing-arkitekturen, har fortsatt. Drivrutinen Àr skriven i Rust. Den nya versionen innehÄller en abstraheringsnivÄ för DMA-arbete, en VBIOS-parser har implementerats, kod för att konfigurera framebuffer har lagts till, och stöd för snabbstart i Falcon-lÀget har sÀkerstÀllts.
- I adreno-drivrutinen har stöd för Qualcomm Adreno x1-45 och x1-85 GPU lagts till.
- I msm-drivrutinen har stöd för Adreno SM8750 GPU och minnesmappning (VM_BIND) lagts till.
- I panfrost-drivrutinen har stöd för Mali GPU:er, som anvÀnds i Mediatek mt8370 SoC, lagts till.
- I drivrutinen lima har stöd för GPU:er som anvÀnds i SoC Rockchip RK3528 lagts till.
- Drivrutinen mtd (Memory Technology Devices) för Ätkomst till NVM-minnet som Àr integrerat i Intel GPU:er har lagts till.
- Stöd för ljudsystem ASoC IMX WM8524, AMD ACP7.2, SoundWire ACP 7.1, Fairphone 4 & 5, Qualcomm QCS8275, Framework Laptop 13 (AMD Ryzen AI 300), CS35L41 HDA (anvÀnds i ASUS-laptops), Richtek RTQ9124, TI TAS5753, HP EliteBook x360 830 G6, EliteBook 830 G6, LG 16Z90R-A, HP 15-fc000 har lagts till. Koden för HD-ljud har omorganiserats.
- Stöd för ARM-plattformar, SoC och enheter har lagts till: NVIDIA Tegra264, Marvell PXA1908 (den första 64-bitarschipet frÄn Marvell för smartphones), CIX P1, Axiado AX3000, Sophgo SG2000 (kombinerar ARM- och RISC-V-kÀrnor), Mediatek mt6572, exynos2200 (anvÀnds i Samsung Galaxy S22), Renesas R-Car V4M-7, TI am62d2 och Sophgo sg2042, laptops baserade pÄ Mediatek mt8186 och Qualcomm Snapdragon X1, smartphones och surfplattor baserade pÄ SoC mt6572, tegra30 och msm8976.
Samtidigt har den latinamerikanska stiftelsen för fri programvara skapat en version av det helt fria kĂ€rnet 6.17 â Linux-libre 6.17-gnu, rensat frĂ„n firmware och drivrutiner som innehĂ„ller oberoende komponenter eller kodavsnitt vars anvĂ€ndning Ă€r begrĂ€nsad av tillverkaren. I version 6.17 har koden för rensning av blobbar i drivrutinerna amdgpu, prueth, iwlwifi, btusb, pci mhi host, adreno a6xx, nova-core och Intel AVS uppdaterats. Blobbenamn har rensats i dts-filer (devicetree) för ARM-chips och Intel IPU7. Laddning av blobbar i nya pci hda-drivrutiner har neutraliserats. Rensningen av blobbar i QLogic infiniband-drivrutinen, som tagits bort frĂ„n kĂ€rnan, har upphört.
KĂ€lla: opennet.ru
