Efter tvÄ mÄnaders utveckling presenterade Linus Torvalds version 6.18 av Linux-kÀrnan. Bland de mest anmÀrkningsvÀrda förÀndringarna finns: dm-pcache för diskcache i icke-flyktigt minne (PMEM), borttagning av Bcachefs, online-kontrolllÀge för XFS, drivrutiner för Binder (Android IPC) och Tyr (GPU Mali) pÄ Rust, möjlighet att skapa USB-drivrutiner pÄ Rust, optimering av cachehantering i SLUB-minnesallokeraren, adressering av namespaces via filbeskrivare, pÄskyndad vÀxling (swap), verifiering av BPF-program genom digital signering, Intel CET virtualisering i KVM och nÀtverksprotokollet PSP (hybrid av TLS och IPsec), stöd för IP-tillÀgget AccECN samt optimering av UDP-stacken.
I den nya versionen har 15035 fixar tagits emot frÄn 2217 utvecklare, patchens storlek Àr 45 MB (Àndringar har pÄverkat 13142 filer, 601897 kodrader har lagts till och 355006 kodrader har tagits bort). I det förra slÀppet var det 14334 fixar frÄn 2118 utvecklare, patchens storlek var 46 MB. UngefÀr 40% av alla förÀndringar i 6.18 Àr relaterade till enhetsdrivrutiner, cirka 16% handlar om uppdatering av kod som Àr specifik för hÄrdvaruarkitekturer, 12% Àr relaterade till nÀtverksstacken, 5% handlar om filsystem och 3% om interna subsystem i kÀrnan.
Huvudnyheterna i kÀrnan 6.18 (1, 2, 3):
- Disksubsystem, in- och utmatning och filsystem
- I Device Mapper har en hanterare dm-pcache lagts till för att anvÀnda permanent minne (CXL-minne adresserat via DAX-enhet) som en extra högpresterande cache före de lÄngsammare traditionella disk- eller flash-enheterna. Dm-pcache sÀkerstÀller att cacheinnehÄllet bevaras vid krasch (crash-safe) genom att anvÀnda icke-flyktigt minne, duplikering av metadata samt verifiering av dataintegritet och metadata med CRC32-kontrollsummor. För nÀrvarande stöds endast caching i skriv-back-lÀge (write-back).
- Koden för filsystemet Bcachefs har tagits bort frÄn kÀrnan och kommer nu att distribueras som en extern modul som kompileras med hjÀlp av DKMS (Dynamic Kernel Module Support). Koden för Bcachefs kan Äterföras till kÀrnan efter att Kent Overstreet faktiskt bevisar möjlighet att korrekt samarbeta med andra kÀrnutvecklare och förmÄga att följa etablerade utvecklingsregler.
- I systemanropet pwritev2() har flaggan RWF_NOSIGNAL lagts till, vilket inaktiverar sÀndning av signalen SIGPIPE vid skrivning till brutna namnlösa rör eller sockets.
- I Procfs har monteringens alternativ âpidnsâ lagts till för att ange processidentifieringsnamnrum (PID namespace). Till exempel: âmount -t proc -o pidns=\/proc\/self\/ns\/pid proc \/tmp\/procâ.
- I XFS har möjligheten att anvÀnda verktyget fsck för att kontrollera och ÄtgÀrda upptÀckta problem i online-lÀge, utan att avmontera filsystemet, tillagts och gjorts standard. Systemanropen file_getattr och file_setattr har lagts till för att Àndra attribut för speciella filer (alla inode). I KConfig har alternativen XFS_SUPPORT_V4 (version 4 av XFS) och XFS_SUPPORT_ASCII_CI (icke skiftlÀgeskÀnsligt lÀge för ASCII) inaktiverats som standard, efter att ha blivit förÄldrade. FörÄldrade monteringsalternativ som attr2, noattr2, ikeep och noikeep har tagits bort.
- I MD RAID har en ny typ av bitkartor â llbitmap (lockless bitmap) implementerats, som fungerar utan lĂ„s och ger högre prestanda.
- FrĂ„n den allmĂ€nna strukturen âinodeâ har information relaterad till kryptering och verifiering (pekare till i_crypt_info och i_verity_info) tagits bort. Ăndringen minskar minnesanvĂ€ndningen i filsystem som inte stöder kryptering och verifiering.
- I FUSE-subsystemet har stöd för systemanropet copy_file_range() och direkt kopiering av omrÄden med 64-bitars storlek lagts till (tidigare stöddes endast 32-bitarsstorlek). Stöd för initiering i synkront lÀge under montering (FUSE_DEV_IOC_SYNC_INIT) har lagts till.
- I ext4-filsystemet har möjligheten att anvÀnda 32-bitars anvÀndar-ID (uid) och grupp-ID (gid) vid Ätkomst till reserverade block implementerats. Ioctl-operationer för att stÀlla in och lÀsa superblock-parametrar för monterade filsystem har lagts till (tune2fs kan Àndra parametrar i superblocket utan skrivbehörighet pÄ blockenheten). FörÄldrade instÀllningar specifika för ext3 har helt tagits bort.
- I f2fs har det lagts till en monteringsoption "lookup_mode" för att vĂ€lja söklĂ€ge: perf â sökning med hash, compat â linjĂ€r sökning, auto â automatisk val. Ăndring av lĂ€get Ă€r relevant för konfigurationer med kataloger dĂ€r stor bokstav inte beaktas. Det aktuella söklĂ€get kan kontrolleras via filen "/sys/fs/f2fs//effective_lookup_mode". Möjlighet att reservera inode har lagts till, som endast Ă€r tillgĂ€nglig för privilegierade anvĂ€ndare.
- I Overlayfs har ett lÀge utan hÀnsyn till stor bokstav lagts till, som aktiveras pÄ filsystemsnivÄ (instÀllning för specifika kataloger stöds för nÀrvarande inte).
- I BTRFS har parallelliseringen av operationer förbÀttrats under hög lÀsbelastning och lÄg skrivbelastning, transaktionsfixeringstiden har minskat och synkroniseringstiden har avsevÀrt kortats ned (frÄn minuter till tiotals sekunder). Möjlighet att anvÀnda block (bs) större Àn minnessidstorlek (ps) har lagts till.
- I ksmbd (som arbetar pÄ kÀrnnivÄ, SMB-server) har en parameter lagts till för att begrÀnsa det maximala antalet anslutningar frÄn en IP-adresser. smbdirect, smbclient och smbserver har omvandlats till att anvÀnda standardkÀrnstrukturer.
- I SQUASHFS har möjligheten att anvÀnda i systemanropet lseek() med alternativen SEEK_DATA och SEEK_HOLE för att söka efter data och luckor i glest befolkade filer lagts till. I vissa tester har en ökning av prestandan för kopiering av glest befolkade filer registrerats upp till 150 gÄnger.
- I EXFAT har stöd för ioctl FS_IOC_GETFSLABEL och FS_IOC_SETFSLABEL lagts till för att lÀsa och skriva partitionsetiketter. Möjlighet att Àndra monteringsalternativ under Ätermontering har lagts till. InlÀsning av bitkartor har pÄskyndats.
- I NTFS3 har stöd för ioctl FS_IOC_GETFSLABEL och FS_IOC_SETFSLABEL lagts till för att lÀsa och stÀlla in partitionsetiketter.
- Minne och systemtjÀnster
- Implementeringen av mekanismen för mellanprocesskommunikation Binder, skriven i Rust, har antagits. Binder anvÀnds i Android för att organisera interprocesskommunikation och fjÀrranrop av metoder (ett Android-process kan anropa en metod eller funktion i en annan Android-process, och anvÀnda Binder för att identifiera, anropa och överföra argument mellan processerna). Binder-koden har skrivits om pÄ Rusts sprÄk som en del av Googles initiativ för att stÀrka sÀkerheten i Android.
- I SLUB, kÀrnminnesallokatorn, har en valfri cachelagringsnivÄ "sheaves" implementerats, som anvÀnder flera cacher, dÀr varje Àr kopplad till en separat CPU-kÀrna, vilket gör det möjligt för en kÀrna att lokalisera operationerna vid allokering eller frigöring av minne. Denna cache har ökat prestandan vid allokering och frigöring av minne i kÀrnan, tack vare avskaffandet av onödiga synkroniseringsprimitive som krÀvs nÀr olika CPU-kÀrnor Àr involverade. I genomförda tester var prestandaförbÀttringen mellan 6.3% och 31% beroende pÄ belastningstypen.
- Möjligheten att skapa filbeskrivare kopplade till ett specifikt namnrymde (namespace) har lagts till. Till skillnad frÄn att rikta sig mot namnrymden via identifierare (/proc//ns/), Àr filbeskrivaren kopplad till en specifik instans av namnrymden och utesluter situationen dÀr identifieraren Äterigen tilldelas och pekar pÄ ett annat objekt. PÄ samma sÀtt som med anvÀndningen av pidfds, öppnas filbeskrivare som refererar till namnrymden via funktionerna open_by_handle_at() och name_to_handle_at().
- En mekanism för "Swap Table" har implementerats för att öka prestandan för sidbyte. Accelerationen uppnÄs genom att minska konkurrensen om Ätkomst till swap-cachen, effektivare sökningar i cachen och minskad fragmentering. Backend-baserat pÄ Swap Table anvÀnds för cachning av sidbyte istÀllet för backend XArray, vilket genomsnittligen har ökat prestandan med 5-20%. I usemem-testet ökade genomströmningen med 17-28%, i testet för flerkÀrnig omkompilering av kÀrnan minskade kompilerings tiden med 1.12-3.19%, och redis-benchmark-testet med BGSAVE visade en ökning av antalet hanterade förfrÄgningar med 6-7%.
- Zswap-subsystemet har övergÄtt till direkt anvÀndning av zsmalloc minnesallokeringssystemet istÀllet för zpool-lagret, som inte lÀngre anvÀnds och nu har tagits bort frÄn kÀrnan.
- För att styra beteendet hos mikrokodsldaren pÄ x86-system har en kommandoradsoption "microcode=flaggslista" implementerats. I sin nuvarande form har den nya optionen ersatt "microcode.force_minrev" och gör det ocksÄ möjligt att stÀlla in den minimalt acceptabla versionen av mikrokoden för uppstart.
- Arbetet med att omstrukturera den överdrivet komplexa strukturen "page", som anvÀnds för att hantera sidor i det operativa minnet, har inletts. En typ 'memdesc_flags_t' har lagts till för fÀlt med universella flaggor som kan anvÀndas efter den förvÀntade framtida separeringen av strukturen "page" till separata strukturer för slab och folio.
- För nios2-arkitekturen, som anvÀnds i Altera Nios II-processorer (en mjukvaruprocessor baserad pÄ FPGA), har stöd för systemanropet clone3() implementerats.
- I kÀrnkonfigurationen (KConfig) har attributet "transitional" lagts till, vilket kan anvÀndas för att markera instÀllningar som inte visas i anvÀndargrÀnssnitt sÄsom "make menuconfig" och inte inkluderas i de genererade konfigurationsfilerna. Huvudsyftet med attributet Àr att underlÀtta omdöpning av alternativ med bibehÄllen bakÄtkompatibilitet.
- Den minimi version av Clang-kompilatorn som kan anvÀndas för att bygga kÀrnan har höjts till LLVM 15-verktygen. I Debian 12 och Ubuntu 22.04 levereras LLVM 14.
- Ăverföringen av Ă€ndringar frĂ„n Rust-for-Linux-grenen, relaterade till anvĂ€ndning av sprĂ„ket Rust som det andra sprĂ„ket för att utveckla drivrutiner och kĂ€rnmoduler, har fortsatt (stöd för Rust Ă€r inte aktiverat som standard och innebĂ€r inte att Rust inkluderas bland obligatoriska byggberoenden för kĂ€rnan). I den nya versionen har atomĂ€ra operationer med minne, maple tree-strukturen, möjligheten att skapa DebugFS-filer och funktioner för att manipulera bitkartor implementerats för koden i Rust-sprĂ„ket. Ă tkomsten till API:er för utveckling av drivrutiner har utökats. En fullstĂ€ndig uppsĂ€ttning abstraheringar för utveckling av USB-enhetsdrivrutiner har lagts till (exempel pĂ„ USB-drivrutin). I verktyget perf har stöd för debug-symboler som genereras av kompilatorn rustc lagts till.
- Virtualisering och sÀkerhet
- Stöd för kryptografisk verifiering av laddade BPF-program via digital signatur har lagts till. I framtiden kommer denna funktionalitet att utökas med verktyg för att definiera regler för inladdning av signerade BPF-program och ge icke-privilegierade anvÀndare möjlighet att anvÀnda verifierade BPF-program.
- I hypervisorn KVM har stöd för virtualisering av Intels CET (Control-flow Enforcement Technology), som anvĂ€nds för att skydda mot exploateringar som utnyttjar tekniker för returorienterad programmering (ROP â Return-Oriented Programming). Skyddets kĂ€rna Ă€r att efter överföringen av kontroll till en funktion sparas returadressen av processorn, inte bara i vanliga stacken, utan ocksĂ„ i en separat skugga stack som inte kan Ă€ndras direkt.
- Möjligheten att anvÀnda mer Àn 255 CPU:er i gÀstsystem som körs under hypervisorn Bhyve pÄ vÀrdar med FreeBSD 15 har lagts till.
- Ett lager av dibs (Direct Internal Buffer Sharing) har lagts till för hanterad delning av buffertar inom en isolerad miljö, sÄsom en hypervisor eller en kÀrninstans.
- Stödet för att arbeta med flera samtidigt aktiverade LSM-moduler (Linux Security Module) har lagts till i revisionssystemet.
- En virtio-drivrutin för spi-virtio har lagts till för Ätkomst till SPI-enheter (Serial Peripheral Interface) frÄn virtuella maskiner.
- Stödet för SEV-SNP CipherText Hiding-lÀget har lagts till i hypervisorn KVM, vilket blockerar lÀsning av krypterad minnesdata frÄn skyddade gÀstsystem i obehörig CPU.
- En qtee-drivrutin för TEE-miljöer (Trusted Execution Environment) frÄn Qualcomm har lagts till.
- NĂ€tverkssystemet
- Stödet för kryptering av TCP-anslutningar med hjÀlp av PSP-protokollet (PSP Security Protocol), utvecklat av Google för kryptering av trafik mellan datacenter, har lagts till. PSP tillhandahÄller kryptering, kryptografisk integritetskontroll och autentisering av kÀllan, vilket realiserar en unik kombination av funktioner frÄn TLS- och IPsec-protokollen. PSP tillÀmpar kryptering pÄ nivÄn av enskilda nÀtverksanslutningar snarare Àn hela kommunikationskanalen. PSP anvÀnder separata krypteringsnycklar för olika tunnelerade TCP-anslutningar för strikt isolering av trafik frÄn olika applikationer och handhavare. För att minska belastningen pÄ CPU stöds avlastning av krypterings- och dekrypteringsoperationer till nÀtverkskortens sida (offload). Protokollet UDP anvÀnds som transport för dataöverföring, ovanpÄ vilket innehÄllet i det ursprungliga TCP-paketet vidarebefordras.

- Stöd för AccECN (Accurate Explicit Congestion Notification) har lagts till. Detta Àr en förbÀttrad version av ECN-förlÀngningen som gör det möjligt för vÀrdar att mÀrka IP-paket istÀllet för att kassera dem vid överbelastning. Detta ger möjlighet att identifiera det inledande skedet av trÀngsel i kommunikationskanaler utan att förlora paket. Den ursprungliga ECN-förlÀngningen har en begrÀnsning som tillÄter endast en överbelastningssignal under en enda TCP-överföringscykel (RTT, Round-Trip Time, skicka begÀran och ta emot svar). AccECN tar bort denna begrÀnsning och ger mottagaren möjlighet att skicka fler Àn en överbelastningstÀmpel till avsÀndaren i TCP-paketets rubrik. Algoritmer för överbelastningshantering kan anvÀnda den mottagna informationen för en mer exakt reaktion pÄ överbelastningar utan att behöva kraftigt minska paketutsÀndningen vid en liten överbelastning.
- Bearbetningen av inkommande paket inom UDP-stacken har optimerats under DDoS-attacker, vilket leder till en stor mÀngd paket som anlÀnder till en eller flera UDP-sockets. De optimeringar som gjorts, sÄsom minskning av konkurrerande lÄs, optimering av datauppbyggnadernas placering i minnet och anvÀndning av lÄs med hÀnsyn till NUMA-arkitektur (Non-Uniform Memory Access), har ökat prestandan vid mottagning av UDP-paket med 47 % och mer under extremt förhÄllanden.
- Möjligheten att stÀnga av I/O-caching pÄ NFS-servern har införts, vilket möjliggör anvÀndning av NFS-servern i system med begrÀnsat minne (t.ex. skalade molnmiljöer). Att stÀnga av cachen kan ocksÄ vara anvÀndbart pÄ belastade NFS-servrar för att undvika att data relaterade till lokala lagringselement skjuts ut ur cachen nÀr minnet frigörs för NFS-cachen.
- Den maximala storleken pÄ buffrar för inkommande och utgÄende paket för nÀtverksockets (net.core.rmem_max och net.core.wmem_max) har ökat frÄn 2 MB till 4 MB. Standardstorleken har förblivit oförÀndrad (net.core.rmem_default och net.core.wmem_default = 2 MB).
- En drivrutin för Qualcomm PPE (Packet Processing Engine), som anvÀnds i SoC Qualcomm IPQ9574, har lagts till för att pÄskynda nÀtverksoperationer.
- Stödet för kryptering av TCP-anslutningar med hjÀlp av PSP-protokollet (PSP Security Protocol), utvecklat av Google för kryptering av trafik mellan datacenter, har lagts till. PSP tillhandahÄller kryptering, kryptografisk integritetskontroll och autentisering av kÀllan, vilket realiserar en unik kombination av funktioner frÄn TLS- och IPsec-protokollen. PSP tillÀmpar kryptering pÄ nivÄn av enskilda nÀtverksanslutningar snarare Àn hela kommunikationskanalen. PSP anvÀnder separata krypteringsnycklar för olika tunnelerade TCP-anslutningar för strikt isolering av trafik frÄn olika applikationer och handhavare. För att minska belastningen pÄ CPU stöds avlastning av krypterings- och dekrypteringsoperationer till nÀtverkskortens sida (offload). Protokollet UDP anvÀnds som transport för dataöverföring, ovanpÄ vilket innehÄllet i det ursprungliga TCP-paketet vidarebefordras.
- Utrustning
- KÀrnan har antagit drivrutinen Tyr, skriven i Rust, som möjliggör arbete med GPU:er frÄn ARM Mali, dÀr teknologin CSF (Command Stream Frontend) tillÀmpas, sÄsom Mali G310, G510 och G710. Drivrutinen Àr Ànnu inte redo för permanent anvÀndning av vanliga anvÀndare och betraktas som en experimentell prototyp för testning av abstraktioner för utveckling av drivrutiner i Rust.
- Drivrutiner för HID-enheter (Human Interface Device) har fÄtt stöd för pekplattor med taktil feedback och trycksensorer.
- Arbetet med drm-drivrutinen (Direct Rendering Manager) Xe för GPU:er baserade pÄ Intel Xe-arkitekturen har fortsatt, vilken anvÀnds i Intel-grafikkort av Arc-familjen och i integrerad grafik, som börjar med Tiger Lake-processorer. I den nya versionen har grÀnssnittet madvise lagts till, stöd för SR-IOV PF (Single Root I/O Virtualization Physical Function) har aktiverats, stöd för Intel PSMI-lÀget för hÄrdvaruvalidering har införts, bearbetning av överförd firmware-information om fel har sÀkerstÀllts, energiförbrukningsprofilen SLPC har implementerats och stöd för laddning av sekundÀr firmware (till exempel till kylkontrollen och spÀnningsregulatorn) under drivrutinskontroll har lagts till.
- I AMDGPU-drivrutinen har stöd för enheter med APU Cyan Skillfish lagts till, stödet för AMD GCN 1.0 har förbÀttrats och kompatibilitet med verktyget criu har realiserats, i sysfs har temperaturmetrik lagts till, och remapping-förfrÄgningar för MMIO frÄn anvÀndarutrymmet har godkÀnts.
- I i915-drivrutinen har stöd för Wildcat Lake-chipseten lagts till och arbetet med GPU:er frÄn Jasper Lake, Elkhart Lake, Gen7 och Gen6 har förbÀttrats.
- I Nouveau-drivrutinen anvÀnds som standard GSP-firmware frÄn NVIDIA och felhanteringen har förbÀttrats.
- Integrationen av komponenterna i Nova-drivrutinen för NVIDIA GPU:er, 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 stödet för GSP-firmware utökats, implementeringen av makrot "register!" har förbÀttrats, stöd för PCI-enhetsklasser och tillverkaridentifierare har lagts till.
- En rocket-drivrutin för NPU-acceleratorer, som anvÀnds i SoC Rockchip RK3588, har lagts till.
- En kÀrnparameter "boot_display" har lagts till för att vÀlja utgÄngsenhet för att visa laddningsprocessen pÄ system med flera GPU:er.
- I vesadrm-drivrutinen har stöd för 8-bitars paletter realiserats.
- I msm-drivrutinen har stöd lagts till för GPU Adreno 663 och stöd för energibesparande teknik IFPC (Inter Frame Power Collapse) har implementerats.
- I panthor-drivrutinen har stöd lagts till för GPU Mali-G710, Mali-G510, Mali-G310, Mali-Gx15, Mali-Gx20 och Mali-Gx25.
- Stöd har lagts till för ljudsystemen ASoC Qualcomm Glymur och PM4125, Realtek RT1321, Shanghai FourSemi FS2104/5S, Texas Instruments PCM1754 och TAS2783A, qcs615, CS35L56 B2, tas2118, tas2x20, tas5825. Stöd har lagts till för ljud USB-kort Tascam US-144mkII och Presonus S1824c.
- Stöd har lagts till för ARM CPU Cortex-A320/A520AE/A720AE och C1-Nano/Pro/Premium/Ultra.
- Stöd har lagts till för ARM-plattformar, SoC och enheter: Apple M2 Pro, M2 Max och M2 Ultra, Sony Xperia SP, Samsung Galaxy S22, Samsung Galaxy S20 FE, ASUS Eee Pad Slider SL101, Lenovo ThinkBook 16, HP Omnibook X14 X1P42100, Dell Inspiron 7441 / Latitude 7455, Sige1, NanoPi Zero2, Axis Artpec8, NXP i.MX91, ROCK 2A/2F, Qualcomm Lemans Auto, Renesas RZ/T2H, RZ/N2H, RZ/T2H och RZ/N2H, Aspeed AST27xx, Meta Clemente BMC, Netcube Nagami som, Tqma91xx, Ultratronik i.MX8MP Ultra-MACH, i.MX8ULP EVK9, Buffalo WXR-1750DHP.
Samtidigt har den latinamerikanska stiftelsen för fri programvara skapat en version av det helt fria kĂ€rnan 6.18 â Linux-libre 6.18-gnu, rensad frĂ„n firmware och drivrutiner som innehĂ„ller icke-fria komponenter eller kodavsnitt vars anvĂ€ndning Ă€r begrĂ€nsad av tillverkaren. I version 6.18 har koden för att rensa blobbar i drivrutinerna Nova-Core, Intel XE, TI PRUeth, Lantiq GSWIP, Marvell WiFi-Ex uppdaterats. Namnen pĂ„ blobbar i dts-filer (devicetree) för ARM-chips frĂ„n Qualcomm, Mediatek och TI ARM64 har rensats. Blobbar i nya drivrutiner frĂ„n FourSemi fs2104/5s, TI TAS2783 och Qualcomm GENI har neutraliserats.
KĂ€lla: opennet.ru

