Efter to måneders udvikling præsenterede Linus Torvalds udgivelsen af Linux-kernen 6.12. Blandt de mest markante ændringer er muligheden for at aktivere Realtime-tilstand, sched_ext til oprettelse af CPU-planlæggere via eBPF, QR-kodetransmission under nødtilstande, Device Memory TCP-mekanismen, SCHED_DEADLINE server-reserveringsmekanismen, forbedring af EEVDF-opgaveplanlæggeren og IPE-modulet til fastlægning af integritetspolitikker.
Den nye version inkluderer 14.607 rettelser fra 2.167 udviklere, patchstørrelsen er 37 MB (ændringerne berører 13.087 filer, 507.913 linjer kode er tilføjet, 234.083 linjer er fjernet). I den forrige udgave var der 15.130 rettelser fra 2.078 udviklere, patchstørrelsen var 85 MB (i kernen 6.10 var patchen 41 MB). Omtrent 45 % af alle ændringerne i 6.12 relaterer sig til enhedsdrivere, cirka 12 % til opdateringer af hardware-specifik kode, 13 % relaterer sig til netværksstakken, 6 % til filsystemer og 3 % til interne kernen subsystems.
De vigtigste nyheder i kernen 6.12:
- Hukommelse og systemtjenester
- Muligheden for at bygge kernen med PREEMPT_RT-optionen uden ekstra patches til realtidsdrift er blevet tilføjet. Det sidste manglende element i kernen, som forhindrede aktivering af PREEMPT_RT-tilstanden, var understøttelsen af ikke-blokerende atomar output via printk-funktionen, som nu også er blevet inkluderet i kernen. Støtte til PREEMPT_RT er tilgængelig for arkitekturerne x86, x86_64, ARM64 og RISC-V. Indtil nu blev implementeringen af PREEMPT_RT-tilstanden leveret som eksterne patches, på basis af hvilke nogle distributioner som RHEL, SUSE og Ubuntu skabte separate Realtime-udgaver af deres produkter, som er efterspurgt inden for finansielle systemer, lyd- og video behandlingsenheder, luftfart, medicin, robotteknik, telekommunikation og industrielle systemer, hvor forudsigelig behandlingstid er nødvendig.
- Tilføjet er mekanismen "sched_ext" (SCX), som giver mulighed for at bruge eBPF til oprettelse af CPU-planlæggere, der dækker næsten alle aspekter af opgavelægning og fordeling af CPU-ressourcer. Sådanne planlæggere kan indlæses dynamisk og udføres inden for Linux-kernen. virtuelle maskiner eBPF. Mekanismen sched_ext forenkler oprettelsen af opgave-specifikke planlæggere, muliggør eksperimentering med forskellige teknikker og strategier for planlægning og gør det muligt hurtigt at oprette fungerende prototyper samt udskifte planlæggere i realtid i driftinfrastrukturer. For eksempel kan man ved hjælp af sched_ext oprette en planlægger, der tager højde for specifikationen af en bestemt applikation og dynamisk ændrer planlægningsstrategien baseret på systemets tilstand og andre faktorer.
- Sættet inkluderer den resterende del af patchene, der er nødvendige for at mekanismen SCHED_DEADLINE server fungerer, hvilket løser problemet med, at almindelige opgaver ikke får tildelt CPU-ressourcer i situationer, hvor CPU'en monopoliseres af højprioriterede (realtime) opgaver. Tidligere blev mekanismen Realtime throttling brugt i kernen for at reservere 5% til lavprioriterede opgaver, hvilket efterlod 95% af tiden til realtime-opgaver. Denne mekanisme efterlod meget at ønske, da almindelige opgaver i mange situationer ikke fik tilstrækkelig CPU-tid. SCHED_DEADLINE server implementerer en mere effektiv mekanisme til ressourceallokering.
- Integration af opgaveplanlæggeren EEVDF (Earliest Eligible Virtual Deadline First) er afsluttet, hvilket erstatter planlæggeren CFS (Completely Fair Scheduler), som blev leveret fra version 2.6.23 af kernen. Den nye planlægger tager hensyn til processer, der ikke har fået tildelt tilstrækkelige CPU-ressourcer, eller som har fået tildelt uforholdsmæssigt meget CPU-tid, når den vælger den næste proces til udførelse. I det første tilfælde tvangsoverføres kontrollen til processen, mens det i det andet tilfælde omvendt udsættes. Den gamle CFS-planlægger brugte heuristik og fine justeringer til at bestemme, hvilke processer der krævede særlig opmærksomhed, mens den nye planlægger overvåger dem mere eksplicit og ikke kræver finindstilling. Det forventes, at EEVDF vil reducere forsinkelserne ved udførelse af opgaver, som CFS havde problemer med at planlægge.
- I kernelet til nødhåndtering — DRM Panic, der bruger DRM (Direct Rendering Manager) subsystemet til at vise en visualisering af "blå skærm død", er muligheden for at vise et logo og en QR-kode med kmsg-rapporten tilføjet, når der opstår en kritisk tilstand. Da der kun kan placeres 2953 byte i QR-koden, er der mulighed for DRM_PANIC_SCREEN_QR_CODE_URL, hvor kmsg-rapporten komprimeres med zlib og tilføjes som et parameter til URL'en, hvilket gør det muligt at overføre ca. 7500 byte via QR-kode V40. Under opbygning af pakker med kernen kan distributionerne angive en grundlæggende link til URL'en, som gør det muligt at overgå til en side for at rapportere problemer. Der er en indstilling for at vælge QR-kodeformatet med DRM_PANIC_SCREEN_QR_VERSION.
- Understøttelse af ARM POE (Permission Overlay Extension) er blevet tilføjet, som gør det muligt at angive adgangsrettigheder til hukommelsesområder. Ved hjælp af denne udvidelse kan der implementeres en mekanisme for Memory Protection Keys på systemer med ARM64-processorer, der anvendes til at begrænse adgangen til hukommelsessider uden at ændre hukommelsestabellen.
- Implementeringen af systemopkaldet getrandom() er blevet overført til arkitekturerne Loongarch, ARM64, PowerPC og s390, optimeret ved hjælp af vDSO (virtual dynamic shared object) mekanismen, der muliggør overførsel af systemopkaldsbehandleren fra kernen til brugerens rum og undgå konteksskift. Optimeringen gør det muligt at accelerere indsamlingen af tilfældige tal op til 15 gange.
- I io_uring subsystemet for asynkron input/output er muligheden for at bruge absolutte timeout-indstillinger blevet tilføjet, som udløses, når et bestemt tidspunkt på systemklokkerne nås (tidligere kunne der kun angives relative timeout-indstillinger, hvor varigheden blev angivet fra start af operationen).
- Filer til generering af bindings til libcpupower bibliotekerne er blevet tilføjet ved hjælp af SWIG-værktøjet, der muliggør oprettelse af bindings fra C/C++ kode til forskellige programmeringssprog. Bindingsene gør det muligt at oprette scripts i Python og andre sprog og bruge dem til at udvide funktionaliteten af libcpupower-biblioteket, der tilbyder API til styring af cpufreq og drivere fra brugerens rum.
- I cpuidle-værktøjet har værdien af "residency" status vist, der anvendes til realtime-systemer, og som tager højde for den minimale tid, processoren skal være i inaktiv tilstand for at retfærdiggøre energiforbruget ved at gå ind i denne tilstand og komme ud af den.
- Muligheden for at anvende Clang-kompilatoren til at bygge den standard C-bibliotek nolibc, som er en del af Linux-kernes kildekoder og giver et lag over de grundlæggende systemopkald, er blevet tilføjet. Ved opbygning af nolibc i Clang er det muligt at bruge optimering på bindingsstadiet (LTO).
- Nogle cgroup1-grænseflader, såsom TCP-rapportering, den første version af bløde begrænsninger (soft limit) og kontrol af udtømning af fri hukommelse, er blevet erklæret forældede. Støtten til disse funktioner opretholdes stadig fuldt ud, og advarslen er lavet for at undersøge, hvor mange brugere der fortsat bruger disse muligheder.
- Muligheden for at konfigurere ringbuffer til tracing for at gemme indsamlede data efter genstart er blevet tilføjet, hvilket vil sikre, at indsamlet debuginformation ikke går tabt i tilfælde af en nødstop af kernen. Data gemmes i hukommelsen. Aktivering sker gennem en kernel kommandolinjeparameter trace_instance; for eksempel vil indstillingen "trace_instance=boot_map@0x285400000:12M" reservere 12 MB hukommelse på adressen 0x285400000 til "boot_map"-bufferen, som vil være tilgængelig gennem filen /sys/kernel/tracing/instances/boot_map.
- Overførslen af ændringer fra Rust-for-Linux-grenen er fortsat, relateret til brugen af Rust som det andet sprog til udvikling af drivere og kernelmoduler (støtte for Rust er ikke aktiveret som standard og medfører ikke, at Rust inkluderes som et obligatorisk byggeafhængighed til kernen). Modulerne ‘list’ og ‘rbtree’ er tilføjet til arbejde med dobbeltkædede lister og røde-sorte søgetræer. Funktionerne i modulerne ‘init’, ‘sync’, ‘types’ og ‘error’ er blevet udvidet. Der er givet mulighed for at bruge Rust-kode ved sammenstilling af kernen med beskyttelse mod Spectre-angreb (mulighederne MITIGATION_{RETHUNK, RETPOLINE, SLS}), brug af KASAN-fejlsøgningssystemet, mekanismer til kernen Control Flow Integrity (kCFI) og Shadow Call, samt ved brug af ekstra GCC-plugins. En driver til Ethernet-controlleren Applied Micro QT2025 PHY, skrevet i Rust, er blevet tilføjet. En separat hjemmeside med dokumentation er blevet oprettet — rust.docs.kernel.org.
- I kildeteksterne til kernen er værktøjet xdrgen blevet tilføjet for at konvertere XDR-specifikationer (eXternal Data Representation) til funktioner til kodning og dekodning af XDR, skrevet med det C-stil, der er accepteret i Linux-kernen.
- Der er vedtaget en ændring i kernen med implementeringen af en mekanisme til maskering af pegepunkter for at reducere antallet af langsomme opkald til barrier_nospec() i den 64-bit version af copy_from_user(), der bruges til at kopiere data ind i kernen fra brugerområdet. Brug af maskering fremskynder gennemførelsen af testen 'per_thread_ops' med 2,6%, hvor antallet af operationer, der kan udføres i en enkelt tråd, vurderes.
- En ny USB-driver er blevet tilføjet, der muliggør anvendelse af 9pfs-protokollen som transport til overførsel og modtagelse af data fra USB-enheder, når FS 9p monteres over USB (for eksempel ‘mount -t 9p -o trans=usbg,aname=/path/to/fs /mnt/9’). Et eksempel på anvendelsen af den nye driver er at bruge den i stedet for NFS til at organisere indlæsningen af rodpartitionen under udvikling af indlejrede enheder.
- DiskSubsystem, input/output og filsystemer
- I VFS-underområdet er der tilføjet mulighed for at arbejde med lagringsenheder, hvis blokstørrelse er større end størrelsen på en hukommelsesside i systemet. I filsystemerne understøttes denne mulighed kun midlertidigt i XFS.
- I FUSE-subsystem, som gør det muligt at skabe filsystemimplementeringer, der fungerer i brugerrummet, er der tilføjet understøttelse af mapping af bruger-id'er for monterede filsystemer, som bruges til at matche filer fra en bestemt bruger på et monteret fremmed partition med en anden bruger i det aktuelle system.
- Der er implementeret en ny fcntl-operation F_CREATED_QUERY, der giver applikationen mulighed for at afgøre, om en fil, der åbnes med flaget O_CREAT, er blevet oprettet, eller om den allerede eksisterede før dette.
- Til systemopkaldet name_to_handle_at() er der tilføjet en mulighed for at bruge unikke 64-bit identifikatorer for monteringspunkter for at undgå race-tilstande ved parsing af /proc/mountinfo.
- Størrelsen på 'file'-strukturen i kernen er blevet reduceret fra 232 til 184 byte, hvilket gør det muligt at reducere hukommelsesforbruget på systemer, der aktivt arbejder med filer.
- Montering af filsystemer til monteringspunkter inden for hierarkiet /proc, som f.eks. i /proc/PID/fd, er blevet forbudt, da dette kan skabe potentielle sikkerhedsproblemer.
- I den pseudofilsystem NSFS (NameSpace FS), der bruges til at arbejde med navneområder, er der implementeret leverancer af yderligere oplysninger om navneområder for monteringspunkter.
- I filsystemet EROFS (Extendable Read-Only File System), designet til brug på partitioner, der kun er tilgængelige i skrivebeskyttet tilstand, er der kommet understøttelse af at montere filsystemer direkte fra diskbilleder gemt i filformat.
- I XFS er der tilføjet nye ioctl-kommandoer XFS_IOC_START_COMMIT og XFS_IOC_COMMIT_RANGE til at udveksle indhold mellem to filer.
- I NFS er der tilføjet understøttelse af protokollen 'LOCALIO', der gør det muligt at afgøre, om klienten og server NFS er på samme vært for at aktivere de relevante optimeringer.
- I filsystemet Btrfs er der foreslået ydeevneoptimeringer, udført en omstrukturering af koden, reduceret omfanget af blokeringer af extent under læseoperationer, og arbejdet med at overføre til brugen af side-folios er fortsat, ligesom der er implementeret automatisk frigivelse af hukommelse for strukturen btrfs_path.
- I filsystemet Ext4 er der rettet fejl relateret til blokallokering, styring af extents, 'fast commit' mekanisme og journaling.
- Virtualisering og sikkerhed
- LSM-modulet IPE (Integrity Policy Enforcement), udviklet af Microsoft til at udvide det eksisterende system for mandatstyring af adgang, er blevet tilføjet. Modulet gør det muligt at definere en overordnet integritetspolitik for hele systemet, der angiver, hvilke operationer der er tilladte, og hvordan komponenternes autenticitet skal verificeres. For eksempel kan IPE bruges til at angive, hvilke eksekverbare filer der må køres under hensyntagen til kontrol af deres overensstemmelse med referenceversionen ved hjælp af kryptografiske hashes, der leveres af systemet dm-verity.
- I kernekompileringstrinnet er det muligt at aktivere beskyttelsesmetoder mod forskellige sårbarheder af typen Spectre i CPU'en individuelt. Kconfig introducerer nye parametre: MITIGATE_MDS (beskyttelse mod sårbarheden Microarchitectural Data Sampling), MITIGATE_TAA (beskyttelse mod sårbarheden TSX Asynchronous Abort), MITIGATE_MMIO_STALE_DATA (beskyttelse mod sårbarheden MMIO Stale Data), MITIGATE_L1TF (beskyttelse mod sårbarheden L1 Terminal Fault), MITIGATE_RETBLEED (beskyttelse mod sårbarheden Retbleed), MITIGATE_SPECTRE_V1, MITIGATE_SPECTRE_V2 (beskyttelse mod sårbarhederne Spectre), MITIGATE_SRBDS (beskyttelse mod sårbarheden Special Register Buffer Data Sampling), MITIGATE_SSB (beskyttelse mod sårbarheden Speculative Store Bypass).
- Der er tilføjet parameteren proc_mem.force_override til kommandolinjen samt en række byggeindstillinger i Kconfig (PROC_MEM_FORCE_ALWAYS, PROC_MEM_FORCE_PTRACE og PROC_MEM_FORCE_NEVER), der tillader forbud mod ændring af hukommelse via /proc/pid/mem.
- LSM-systemet (Linux security module) er blevet ændret til at bruge statiske kald, hvilket har øget sikkerheden og forbedret ydeevnen.
- Muligheden for at bruge standardkerner til ARM64-arkitekturen i gæstebaserede miljøer, der kører på Android-systemer med en modificeret KVM-hypervisor (protected KVM), er blevet sikret.
- I LSM-modulet Landlock, der gør det muligt at begrænse en gruppe procesers interaktion med det ydre miljø, er konceptet 'IPC scoping' implementeret for selektivt at begrænse interaktionen med sandbox-miljøer ved hjælp af Unix-sockets og signaler. For eksempel kan det forbydes at etablere forbindelser ved hjælp af Unix-sockets fra sandbox-miljøet til processer, hvor isolation ikke anvendes, men tillades forbindelser til processer inden for samme scope-område.
- I KVM-hypervisoren er der tilføjet en flag i CPUID for gæstede systemer, der signalerer støtte til AVX10.1-udvidelser.
- Netværkssubsystem
- Der er tilføjet en mekanisme til Device Memory TCP, som gør det muligt at bruge netværkssokler til direkte at sende indholdet af hukommelsen fra periferienheder over netværket (zero-copy-mode) og placere indholdet af netværkspakker direkte i hukommelsesområdet for enheden på modtagerens side. Dataene, der overføres i pakkerne, sendes direkte fra netværkskortet til hukommelsen hos periferienheden eller fra enhedens hukommelse til netværkskortet, hvilket omgår CPU’en, mens pakkeoverskrifterne sendes til de almindelige kernelbuffere.
- Mulighederne for mange Ethernet- og trådløse drivere er blevet udvidet. For eksempel er der i driveren til Intel iwlwifi tilføjet support til udflytning af RLC/SMPS-operationer til firmware-siden; i driveren til RealTek rtw89 er ydeevnen forbedret, og der er tilføjet support for chipperne RTL8852BT/8852BE-VT (WiFi 6); i Ethernet-driveren til Microchip er der tilføjet support til specifikationerne IEEE 802.3bw (100BASE-T1) og IEEE 802.3bp; implementeringerne af Microsoft vNIC og IBM veths virtuelle Ethernet er blevet forbedret. Der er tilføjet nye drivere for Ethernet-chips fra Realtek RTL9054, RTL9068, RTL9072, RTL9075, RTL9068, RTL9071 og Microchip LAN8650/1 10BASE-T1S MAC-PHY.
- I MPTCP (MultiPath TCP), en udvidelse af TCP-protokollen til at organisere leveringen af TCP-pakker samtidig via flere ruter gennem forskellige netværksinterfaces, er størrelsen på de vægtede koefficienter, der anvendes ved routning, øget fra 8 til 16 bit. Implementeringen af at identificere tabt (blackhole) trafik og at suspendere forsøg på at etablere forbindelser med systemer, der fører til tab af trafik, i et stykke tid er også udført.
- For IPv6 er der implementeret support til flaget "p" i PIO (Prefix Information Option), der anvendes i RA (IPv6 Router Advertisements) til at vælge modellen for udstilling af klienter via DHCPv6-PD (DHCPv6 Prefix Delegation, RFC9663) i stedet for at tildele individuelle adresser baseret på præfikser ved at bruge SLAAC (Stateless Address Autoconfiguration). Der er tilføjet support til den nye tunsrc-inkapslingsmode i IPv6 IOAM6, som muliggør højere ydeevne.
- Ydeevnen ved behandling af kontrolpakker til IPsec er blevet forbedret.
- Ydeevnen ved at nulstille (flush) store sæt af nftables-regler er blevet forbedret. I nfnetlink_queue er supporten for SCTP-protokollen forbedret.
- I API'et ethtool er der tilføjet support til binding af flere netværkskort til ét netværksinterface.
- Udstyr
- I driveren til AMDGPU er arbejdet med at implementere support til GPU AMD RDNA4 ("GFX12") fortsat. Der er tilføjet mulighed for at nulstille individuelle opgavekøer uden at nulstille tilstanden for hele GPU'en.
- Arbejdet med drm-driveren (Direct Rendering Manager) Xe til GPU'er baseret på Intel Xe-arkitekturen, som anvendes i Intel Arc grafikkort og integreret grafik siden Tiger Lake-processorerne, er fortsat. Den nye version inkluderer support til GPU'er baseret på mikroarkitekturerne Battlemage og Lunar Lake. Der er tilføjet support for CCS-modifikatorer (Color Control Surface) Xe2 til styring af indstillingerne for både integrerede og diskrete GPU'er.
- I i915-driveren er der implementeret mulighed for at outputte via HWMON-interface eller sysfs (attributten „fan1_input”) information om ventilatorens rotationshastighed. Parameteren „i915.modeset” er blevet afskrevet; i stedet for „i915.modeset=0” skal „i915.nomodeset” anvendes.
- I DRM-driveren msm (GPU Qualcomm Adreno) er der tilføjet support til GPU'erne A615, A306 og A621.
- I Nouveau-driveren er der blevet foretaget en revision og oprydning af interne strukturer.
- I driveren intel_pstate, der styrer energiforbrugsparametre (P-state) på systemer med Intel-processorer, er der tilføjet støtte til hybride systemer med asymmetrisk (forskelligartet) CPU samt støtte til strømstyring af processorer baseret på mikroarkitekturerne Granite Rapids og Sierra Forest. I driveren intel_idle er der tilføjet support til CPU Xeon Granite Rapids. I driveren intel_rapl er der sikret genkendelse af AMD-processer fra familie 1Ah og Intel ArrowLake-U-processorer.
- Ændringerne for at støtte ARM SoC Snapdragon X Elite, som bruger sin egen 12-core CPU Qualcomm Oryon og GPU Qualcomm Adreno, er fortsat. Chippen er målrettet brug i bærbare computere og pc'er og overgår i mange ydelsestests chips fra Apple M3 og Intel Core Ultra 155H.
- Support er blevet tilføjet for ARM-platforme, SoC'er og enheder: Broadcom bcm2712 (Raspberry Pi 5), Renesas R9A09G057 (RZ/V2H), Qualcomm Snapdragon 414 (MSM8929), Lenovo ThinkPad T14s Gen 6, Lenovo A6000/A6010, Surface Laptop 7, Anbernic RG35XXSP, Firefly Core-PX30-JD4, Lunzn Fastrhino R68S, Aspeed Riser, AGX Orin, Rockchip Qnap-TS433, Huashan Pi, Meta Catalina, BeagleY-AI, NanoPi R2S Plus, ExynosAuto v920, SOPHGO SG2002, Qualcomm IPQ5332, LG G4 (h815), Cool Pi CM5 GenBook, Anbernic RG35XXSP, GameForce Ace, IBM P11, Kontron i.MX93 OSM-S, NanoPC-T6.
- Support er blevet tilføjet for skærmpaneler: Anbernic RG28XX, On Tat Industrial Company KD50G21-40NT-A1, Innolux G070ACE-LH3, Melfas lmfbx101117480, Densitron DMT028VGHMCMI-1D, Microchip AC40T08A, AOU B116XTN02.3, AUO B116XAN06.1, AOU B116XAT04.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.
- Lydsystemet har fået tilføjet support for RME Digiface USB, AMD ACP 7.1, Mediatek MT6367, MT8365, Realtek RTL1320, C-Media CM9825 chipsets og codecs. De gamle lyddrivere til ASoC Intel er blevet erklæret forældede, og det anbefales nu at bruge AVS-drivere. Der er lavet mange forbedringer i SoundWire-driveren.
Kilde: opennet.ru
