Efter to måneders udvikling præsenterede Linus Torvalds den kerneudgivelse Linux 7.0. Blandt de mest bemærkelsesværdige ændringer: regler for anvendelse af AI-assistenter, integration af Rust som kernens primære funktioner, forbedret paging-ydeevne, aktivering af PREEMPT_LAZY som standardindstilling, support for filtre til io_uring-operationer, ny FS Nullfs, fserror-infrastruktur, XFS-overvågningsværktøjer, support for ommappning i Btrfs, aktivering af version NFS 4.1 som standard, integration af post-kvantum kryptografisk algoritme ML-DSA, aktivering af AccECN i netværkssystemet, indledende support for WiFi 8.
Nummer 7.0 er blevet tildelt, da der i 6.x-grenen er akkumuleret et tilstrækkeligt antal udgivelser til at ændre det første tal i versionsnummeret (den gang blev 6.0 udgivet efter 5.19). Nummerændringen sker af æstetiske årsager og er et formelt skridt, der fjerner ubehag ved akkumulationen af et stort antal udgivelser i serien.
I den nye version er 15624 rettelser blevet accepteret fra 2477 udviklere, patchstørrelsen er 56 MB (ændringerne har berørt 18053 filer, 704060 linjer kode er tilføjet, 278132 linjer er fjernet). I den foregående udgave var der 15657 rettelser fra 2237 udviklere, patchstørrelsen var 52 MB. Omkring 51% af ændringerne i 7.0 er relateret til enhedsdrivere, cirka 11% handler om opdatering af hardware-specifik kode, 14% vedrører netværksstakken, 5% relaterer til filsystemer, og 3% til interne kerneunderstøttelser.
De vigtigste nyheder i kerne 7.0 (kernelnewbies.org, lwn.net, OpenNET):
- DiskSubsystem, input/output og filsystemer
- fserror-infrastrukturen er implementeret og tilføjet API til at få oplysninger om input/output-fejl og beskadigelse af metadata ved filbearbejdning. Den foreslåede infrastruktur standardiserer overførslen af fejlmeddelelser til brugerens rum via mekanismen fsnotify i filsystemerne.
- I XFS er tilføjet nye muligheder for at overvåge tilstanden af filsystemet fra brugerrummet. En ioctl-operation, XFS_IOC_HEALTH_MONITOR, er foreslået for at returnere en filbeskrivelse, som gør det muligt at få oplysninger om fejl relateret til metadata-beskadigelse eller I/O-fejl samt overvåge ændringer af tilstandene i filsystemet, såsom afmontering og nedlukning. Desuden er der foreslået en systemd-styret baggrundsproces, xfs_healer, der håndterer hændelser om filsystemets tilstand fra brugerrummet og automatisk starter efter behov. genoprettelsesprocedurer.
- Det eksperimentelle understøttelse af strukturen "remapping tree" er tilføjet til Btrfs,remap tree, som i fremtiden kan bruges som et mellemled ved udførelse af I/O-operationer. Essence af den tilføjede funktionalitet er, at efter flytning af data på lagringsenheder i stedet for at opdatere alle relaterede strukturer i en ekstra struktur "remap tree", gemmes både gamle og nye adresser for data, hvorefter adresserne udskiftes, når der tilgås data. Den nye tilgang præsenteres som mere pålidelig og fleksibel, hvilket også letter fremtidig udvidelse af Btrfs-funktionaliteten.
- I Btrfs er implementeret understøttelse for direkte input/output i situationer, hvor blokstørrelsen overskrider systemets sidestørrelse.
- Tilføjet til er et nyt filsystem, Nullfs, som kan bruges som en pladsbesparende løsning for rodfilsystemet. Nullfs-filsystemet er altid tomt, indeholder ingen data og understøtter ikke ændringer. Formålet med Nullfs er at fungere som et initialt filsystem for at forenkle systemets boot-proces – oven på Nullfs monteres andre filsystemer, og systemkaldet pivot_root() bruges til at skifte rodfilsystemet i stedet for at rydde indholdet af initramfs og bruge det relaterede rodfilsystem.
- Implementeret opdatering af information om filmodifikationstid i ikke-blokerende tilstand. Tidligere returnerede kaldet file_update_time_flags() med flaget IOCB_NOWAIT fejlen -EAGAIN, hvilket forhindrede brug af direkte skrivningsoperationer i ikke-blokerende tilstand.
- I filsystemer er der specifikationen af ekstra aktiveringsmuligheder, oversat understøttelse af notifikation-locks (lease). Som standard aktiveres en sådan mekanisme ikke længere på grund af problemer med filsystemer, som ikke var designet til dens anvendelse. For eksempel understøtter filsystemerne 9p og cephfs det ikke.
- I filsystemet EROFS (Extendable Read-Only File System), der er beregnet til brug på partitioner, der kun er tilgængelige i skrivebeskyttet tilstand, anvendes som standard LZMA-algoritmen til kompression. Algoritmerne DEFLATE og Zstandard er også tilgængelige som valgmuligheder og er ikke længere mærket som eksperimentelle. Der er implementeret deling af poster i sidecachen for identiske filer i separate EROFS-filsystemer.
- Fjernet laptop_mode, der sparer strøm ved at forsinke og sammenflette skriveoperationer på harddisken for at forlænge diskens tid i dvaletilstand og reducere antallet af vækninger. Denne tilstand er blevet irrelevant, da moderne mobile enheder er blevet erstattet af solid-state drev.
- Filsystemet F2FS er blevet ændret til at anvende store store sider af hukommelse (large folios).
- Genoplivet arbejdet med ntfs3-driveren, der udvikles af Paragon Software. Understøttelse af filoperationer baseret på iomap er tilføjet, llseek SEEK_DATA/SEEK_HOLE-indstillinger er implementeret, og delalloc-tilstand for udsat tildeling af blokke er blevet tilføjet. Imens blev der i udviklernes mailingliste i februar godkendt inklusion af en ny implementering af NTFS i en af de kommende versioner af kernen — ntfsplus, som er udviklet til at erstatte ntfs3.
- Som standard, når der samles er version af NFS-protokollen 4.1 (CONFIG_NFS_V4_1). Sikret blokering af eksporten via NFS af specialiserede pseudo-filsystemer, såsom pidfs og nsfs. I NFSD er implementeret er der en eksperimentel mulighed for at bruge POSIX ACL, og tilføjet understøttelse af dynamisk ændring af trådpoolen afhængigt af belastningen.
- Hukommelse og systemtjenester
-
De officielle regler er blevet godkendt for anvendelse af AI-assistenter og inklusion i kernen af automatisk genereret indhold. Ved overførsel af den genererede kode skal den mærkes ved at angive den anvendte AI-assistent med tagget Assisted-by. AI-assistenter må ikke tilføje tagget Signed-off-by – den person, der har sendt patchen, betragtes som dens forfatter og er ansvarlig for den overførte ændring og garanterer dens kvalitet. Udviklere er forpligtet til at udføre manuel gennemgang af den AI-genererede kode og kontrollere, om resultatet overholder licenskravene.
-
Understøttelse af Rust oversat fra eksperimentelle til de grundlæggende funktioner i kernen.
-
Afsluttet integration i kernen af mekanismen "Swap Table", som gør det muligt at forbedre swap-ydelsen. Accelerationen opnås ved at reducere konkurencen om adgangen til swap-cache, mere effektiv søgning i cachen og nedbringelse af fragmentering. Backend baseret på Swap Table anvendes til caching af swap i stedet for backend XArray og har i testen redis-benchmark med BGSAVE øget antallet af behandlede forespørgsler med 22%.
-
Tilføjet støtte til det nye Clang 22-udvidelse Thread Safety Analysis, som gør det muligt at identificere potentielle race-tilstande og fejl forårsaget af forkert anvendelse af låse på kompileringstidspunktet. Udvidelsen tilbyder en serie attributter, såsom GUARDED_BY(…), REQUIRES(…), RELEASE(…) og ACQUIRE(…), som gør det muligt at markere funktioner dækket af låse og adskille låsens anvendelsesområder (definere kontekst). På kompileringstidspunktet udføres der validering af korrekt anvendelse af synkroniseringsprimitiver som mutexer, baseret på vurdering af aktivitet eller inaktivitet i det tilknyttede kontekst.
-
I systemopkaldet open_tree tilføjet flaget OPEN_TREE_NAMESPACE til forenklet konfiguration af isolerede containere og hurtigere opstart af containere på systemer med mange monteringspunkter. I lighed med OPEN_TREE_CLONE kopierer det nye flag kun det angivne monteringstræ (mount tree), men i stedet for at returnere en lokal filbeskrivelses kan det give en filbeskrivelses i det nye namespaces monteringspunkter, hvor det kopierede træ monteres oven på kopien af det virkelige rod-FS. Flaget OPEN_TREE_NAMESPACE er efterspurgt for at undgå separat udførelse af unshare(CLONE_NEWNS) og pivot_root(), som bruges ved oprettelse af containere.
-
I systemopkaldet rseq tilføjet en mekanisme til udvidelse af kvantetid (time slice), som giver mulighed for at få ekstra processor tid til ikke-afbrudt udførelse af kritiske sektioner. Ideen er at undgå, at opgaveplanlæggeren afbryder den kritiske sektion, som har en aktiv lock, hvilket fører til, at kontrollen overgås til andre tråde, der bruger ressourcen med en aktiv lås. Udvidelsen af kvantetid sker uden yderligere omkostninger, men også uden de strenge garantier, der gives ved fuld regulering af prioriteter.
-
For arm64, loongarch, powerpc, riscv, s390 og x86 arkitekturer er opgaveudskiftningsmodus (preemption) som standard i planlæggeren. ændret fra PREEMPT_NONE til PREEMPT_LAZY. Antallet af mulige tilstande er reduceret fra fire til to – PREEMPT_FULL og PREEMPT_LAZY (tilstandene PREEMPT_NONE og PREEMPT_VOLUNTARY er kun tilbageholdt for arkitekturer, der ikke understøtter PREEMPT_FULL og PREEMPT_LAZY). PREEMPT_LAZY anvender en model for fuld udskiftning (PREEMPT_FULL) for realtime-opgaver (RR/FIFO/DEADLINE), men udsætter udskiftningen af normale opgaver (SCHED_NORMAL) indtil ticks grænsen. Den indførte forsinkelse fører til en reduktion af tilfælde af udskiftning af låseholdere, hvilket gør det muligt at nærme sig ydeevnen til konfigurationer, der bruger en model for frivillig udskiftning (voluntary preemption), dvs. PREEMPT_LAZY muliggør at bevare fuld udskiftningsfunktionalitet for realtime-opgaver, men minimerer præstationsnedgangen for normale opgaver.
Aktivering af PREEMPT_LAZY har ført til en alvorlig regression, der halverer PostgreSQLs ydeevne på ARM64-systemer. For at løse faldet i ydeevne er det blevet foreslået til PostgreSQL-udviklerne at aktivere PR_RSEQ_SLICE_EXTENSION-muligheden for at reducere sandsynligheden for udskiftning af låseholdere.
-
Fortsat overførelse af ændringer fra grenen Rust-for-Linux, relateret til brugen af sprog Rust som et sekundært sprog til udvikling af drivere og kernemoduler (Rust-support er ikke aktiveret som standard, og fører ikke til, at Rust bliver en obligatorisk byggeafhængighed til kernen). Takket være det tidligere integrerede bibliotek “syn (crates.io)”, som forenkler skrivning af komplekse makroer, er det lykkedes at reducere størrelsen af Rust-koden i kernen ved at forenkle definitionerne af eksisterende proceduremakroer. Funktionaliteten af bibliotekerne kernel, macros og pin-init er blevet udvidet.
-
I systemet for asynkron input/output io_uring tilføjet mulighed for brug af ikke-cirkulære køer (non-circular submission queue), som effektivt kan caches, når udførelsen af en forespørgsel afsluttes før tilbagevenden fra systemopkald.
-
I eBPF-subsystemet i BTF-mekanismen (BPF Type Format), der giver information til typekontrol i BPF-pseudokode, til at finde fejlsøgningsinformation aktiveret binær søgning, hvilket har øget effektiviteten af BPF-programindlæsning. I eBPF tilføjet understøttelse af implicitte argumenter ved opkald kfunc (kernel-funktioner, der er tilgængelige til brug i BPF-programmer), defineret med flaget KF_IMPLICIT_ARGS.
-
Fjernet kode til støtte for initial RAM-disk (initrd) baseret på linuxrc, som for længe siden blev erklæret forældet. De resterende implementeringer af initrd planlægger at blive fjernet i 2027. I stedet for initrd bør initramfs anvendes (forskellen er, at initrd placerer det initiale boot-miljø i et diskbillede, mens initramfs gør det i filsystemet).
-
I blokapparatet zram, der anvendes til komprimeret opbevaring af swap-partitionen i hukommelsen, ændret logikken for arbejde med komprimerede hukommelsessider ved valgfri flytning af data til permanent lagring i tilfælde af, at den tilgængelige RAM er fyldt. Tidligere blev hukommelsessider udpakket før skrivning til det fysiske medie, men nu gemmes de som de er i komprimeret form, hvilket reducerer CPU-belastningen og sparer energi i drift.
-
I værktøjet timerlat, der er designet til at måle forsinkelser ved arbejdet med opgavestyreren, tilføjet muligheden —bpf-action til at køre BPF-programmer ved overskridelse af en fastsat grænse.
-
I ftrace-sporingssystemet er der tilføjet en bitmaskelisteindstilling til udskrivning af bitmasker i læsbart format (som en liste af bits, ikke et hexadecimalt tal). I tracefs er der tilføjet kapaciteter til revision filtre og udløsere. Tilføjet kommandoen perf sched stats til indsamling og visning af statistik om opgavestyrerens arbejde.
-
Tilføjet kompilationsmulighederne LOGO_LINUX_MONO_FILE, LOGO_LINUX_VGA16_FILE og LOGO_LINUX_CLUT224_FILE til at definere billedefilen med logoet, som vil blive vist ved opstart af kernen i stedet for standardlogoet med pingvinen Tux.
-
- Virtualisering og sikkerhed
- I systemet for asynkron input/output io_uring er implementeret muligheden for at knytte BPF-programmer med filtre, der kontrollerer, hvad specifikke SQE (Submission Queue Entry) operationer kan gøre (ligesom systemopkald i io_uring). Den tilføjede funktion er en analog til filtre for systemopkald. Filtre kan knyttes til bestemte opgaver, og de arves ved oprettelse af andre processer efter et fork()-kald. Når aktive filtre er til stede, kan tilføjede filtre kun knytte yderligere begrænsninger, men ikke deaktivere eksisterende. Den implementerede mulighed vil muliggøre blokering af metoder omgåelse af filtrering af systemopkald i sandbox-miljøer, baseret på at udføre operationer, der ligner systemopkald, der tilbydes i io_uring.
- I SELinux tilføjet muligheden for at styre adgang til BPF-tokens, der gør ugunstige processer i stand til at udføre nogle privilegerede operationer med BPF, såsom at indlæse BPF-programmer i kernen og oprette map-strukturer.
- Tilføjet understøttelse af algoritmen til dannelse af digitale underskrifter ML-DSA (CRYSTALS-Dilithium), baseret på gitterteori og modstandsdygtig over for angreb fra kvantecomputere. Givet muligheden for at bruge ML-DSA til autentificering af kernemoduler.
- Fjernet muligheden for at bruge digitale underskriftsalgoritmer med SHA-1 til at bekræfte kernemoduler (understøttelsen af indlæsning af signerede moduler er bevaret).
- I NETFILTER_PKT-auditloggen er tilføjet felterne sport og dport til inspektion af netværksportnumre, ikke kun IP-adresser.
- For systemer med RISC-V-arkitektur er implementeret understøttelse af Zicfiss- og Zicfilp-udvidelser, der giver hardwaremuligheder for anvendelse af CFI (Control Flow Integrity) beskyttelse, der blokerer overtrædelser af den normale udførelsesrækkefølge (control flow) som følge af udnyttelser, der ændrer mekanisk gemte funktionspejlinger.
- I hypervisoren KVM er implementeret muligheden for at overføre oplysninger om CPU'ens understøttelse af ERAPS (Enhanced Return Address Predictor Security) til gæstesystemer, hvilket gør det muligt at undgå visse CPU-statusnulstillingsoperationer, når gæstesystemet returnerer kontrol til værtsystemet. Desuden, tilføjet Understøttelse af pinning til gæstesystemers udstyr til overvågning af ydeevne (PMU, Performance Monitoring Unit), hvilket øger præcisionen af profilering sammenlignet med brugen af emulerede PMU.
- I driveren til hypervisoren Hyper-V tilføjet understøttelse af debugfs-grænsefladen til at se statistikker om hypervisorens drift.
- Netværkssubsystem
- AccECN-udvidelsen er som standard aktiveret (Accurate Explicit Congestion Notification), der implementerer en forbedret version af udvidelsen ECN (wikipedia.org), der giver værtssystemerne mulighed for at markere IP-pakker i tilfælde af overbelastning i stedet for at kassere dem, hvilket gør det muligt at identificere tidlige fase af trængsel i kommunikationskanaler uden tab af pakker. Den originale ECN-udvidelse har en begrænsning, der tillader kun ét overbelastningssignal i en enkelt TCP-transmissionscyklus (RTT, Round-Trip Time, sending af anmodning og modtagelse af svar). AccECN fjerner denne begrænsning og giver modtageren mulighed for at sende flere overbelastningsmærker til afsenderen i TCP-pakkens header. Algoritmer til overbelastningsstyring kan bruge den modtagne information til at reagere mere præcist på overbelastninger og undgå at reducere pakkeafsendelsen dramatisk ved mindre overbelastninger.
- I implementeringen af netværkskøstyringsalgoritmen Cake tilføjet muligheden for at håndtere flere køer til fordeling af belastningen på flere CPU-kerner. CAKE-algoritmen anvendes til at reducere de negative virkninger af pakke-buffering på grænsenetværksudstyr og sigter mod at opnå den maksimale mulige båndbredde og lavest mulige forsinkelser, selv på langsomme kommunikationskanaler.
- I sockets VSOCK, der anvendes til interaktion med virtuelle maskiner, tilføjet understøttelse af netværksnavneområder (network namespace).
- Tilføjet den indledende implementering af den kommende standard WiFi 8 (802.11bn, Ultra High Reliability WiFi).
- Tilføjet optimeringer, der har gjort det muligt at øge ydeevnen ved behandling af indgående UDP-pakker med 12% under stress-testning i et 100-gigabit net.
- Udstyr
- I AMDGPU-driveren er implementeret understøttelse af IP-blokke, der anvendes i nye AMD GPU'er, 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 og JPEG 5.3.
- I Nouveau-driveren er frekvensstyringen forbedret på Tegra 186+ systemer.
- I driveren i915 tilføjet grundlæggende support for display IP-blokken Xe3p_LPD, der anvendes i Intel Nova Lake-P processorer.
- Fortsat arbejdet med drm-driveren (Direct Rendering Manager) Xe til GPU'er baseret på Intel Xe-arkitektur, der bruges i Intel Arc grafikkort og integreret grafik, startende med Tiger Lake processorer. Tilføjet tilstand Multi Queue. Tilføjet komponenter, der er nødvendige for at diagnosticere GPU-frysninger i Mesa. Tilføjet support for MERT-mekanismen til styring af GPU-hukommelsesadgang.
- Fortsat integration af Nova driverkomponenter til NVIDIA GPU'er, der er udstyret med GSP-firmware, der anvendes fra NVIDIA GeForce RTX 2000-serien baseret på Turing mikroarkitektur. Driveren er skrevet i Rust. Den nye version forbereder understøttelse af GPU'er baseret på Turing mikroarkitektur og indeholder forskellige interne ændringer.
- Tilføjet support til controllere og perifere enheder med et multikanals SPI (Serial Peripheral Interface) interface, der muliggør overførsel af data i flere parallelle strømme.
- Tilføjet driver for kombinerede Type-C stik, der anvendes på enheder med Apple Silicon chips, som kombinerer USB3, DP-AltMode og Thunderbolt/USB4 interfaces.
- Tilføjet support for lydsystemer til Tegra238 chips, Minisforum V3 SE, iBasso DC04U, Intel Nova Lake, Nova Lake S og Focusrite Forte.
- Tilføjet support for ARM-platforme, SoC'er og enheder: 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,
- Tilføjet support for smartphones og tablets: Fairphone Gen 6 (SoC Qualcomm Milos/Snapdragon 7s Gen 3), Pixel 3/3 xl, Microsoft surface pro 11.
Samtidig oprettede den Latinamerikanske Free Software Foundation skabte variant fuldstændigt frit kernel 7.0 – Linux-libre 7.0-gnu, renset for elementer fra firmware og drivere, der indeholder ikke-frie komponenter eller kodeområder, hvis anvendelse er begrænset af producenten. I udgave 7.0 er der blevet foretaget en rengøring for blobs i iwlwifi driveren. Rensningskoden i amdgpu, adreno, TI PRUeth, air_en8811h, ath12k, TI VPE, rtw8852b, rt1320, rt5575 SPI, tas2783, Intel catpt drivere er opdateret. Navnene på blobs i dts-filer (device tree) for ARM-chips er blevet renset.
Kilde: linux.org.ru
