Efter to måneders udvikling præsenterede Linus Torvalds udgivelsen af Linux-kernen 6.15. Blandt de mest markante ændringer er: revisjonsmekanismen i Landlock, den låste hukommelseskortlægningstilstand, fwctl-subsystemet, Nova-driveren til NVIDIA GPU'er, implementeringen af værtssystemet til Hyper-V hypervisoren, understøttelse af zonede lagringsenheder i XFS, optimering af netværkssubsystemet, scrub-check i Bcachefs, samt evnen til at kontrollere operationer gennem io_uring.
Den nye version inkluderer 15945 rettelser fra 2154 udviklere, patchstørrelsen er 59 MB (ændringerne berørte 13596 filer, 739608 linjer kode blev tilføjet, 312168 linjer blev fjernet). Den tidligere udgave havde 12115 rettelser fra 1984 udviklere, patchstørrelsen var 39 MB. Omtrent 41% af alle ændringerne i 6.15 er relateret til enhedsdrivere, ca. 16% vedrører opdatering af arkitekturspecifik kode, 13% er relateret til netværksstakken, 5% til filsystemer og 4% til de interne subsystemer i kernen.
De vigtigste nyheder i kernen 6.15:
- DiskSubsystem, input/output og filsystemer
- Mekanismen fanotify har fået tilføjet funktionalitet til at overvåge monterings- og afmonteringsbegivenheder.
- I XFS er der tilføjet understøttelse for zonede lagringsenheder (opdeling i zoner af blokgrupper eller sektorer, der kun tillader sekventiel tilføjelse af data med opdatering af hele blokgruppen). Flaget rwf_dontcache er tilføjet for at deaktivere caching ved skrivning. Der er implementeret mulighed for atomar skrivning af flere datablokke på én gang.
- I Btrfs er det blevet muligt at angive negative komprimeringsniveauer med zstd ved montering (-15 til -1, for eksempel 'compress=zstd:-5'), hvilket sikrer højere hastighed på bekostning af nedsat kompressionseffektivitet. Cache til filstier er blevet forbedret (i et udført test blev 'send'-operationen accelereret med 30%). Understøttelse af blokke på 2 KB er tilfføjet.
- I EXT4 er ydeevnen ved behandling af loggen blevet forbedret med et meget stort antal tilbagekalte poster (belastning, der er typisk for partitioner til filsystemet Lustre). Der er implementeret lineær søgning af 'dentry'-poster (intern repræsentation af katalogelementer), der løser problemer med adgang til visse filer i case-insensitive tilstand. Monteringsmuligheden 'errors=remount-ro' fungerer nu korrekt. Robustheden ved behandling af beskadigede filsystemer er blevet forbedret.
- I F2FS er ioctl implementeret for at opnå oplysninger om prioriteten af I/O-operationer for en given fil. Der er blevet arbejdet på at skifte til brugen af side-folioer (page folios).
- I Bcachefs er tilføjet en "scrub"-tilstand, hvor der udføres en kontrol af data og metadata for at sikre korrekt læsning fra filsystemet. Ved opdagelse af fejl startes en genoprettelsesprocedure. Bcachefs har også fået tilføjet støtte til filsystemer, hvor blokstørrelsen er større end størrelsen på en side i hukommelsen. Formatet for Bcachefs' diskstrukturer er stabiliseret (fremtidige ændringer til formatet vil blive implementeret som valgfrie tilføjelser).
- I EROFS er der tilføjet support for 48-bit blokadressering.
- I FUSE-subsystemet er syctl default_request_timeout og max_request_timeout implementeret for at angive tidsgrænser for forespørgsler, hvilket muliggør overvågning af fastfrysninger af FUSE-komponenter, der kører i brugerrummet. Den maksimale størrelse af filnavne i FUSE er blevet øget til 1024 tegn.
- I systemopkaldet statmount() er der tilføjet mulighed for at få oplysninger om mapping af brugerkonti for de monterede filsystemer, som anvendes til at matche filer fra en bestemt bruger på et monteret eksternt partition med en anden bruger i det aktuelle system.
- Der er blevet releaset mulighed for at oprette et monteringspunkt med en anden mapping af brugerkonti end den oprindelige monterede partition.
- I API'en til håndtering af montering er der foretaget ændringer, der forenkler opbygningen af komplekse hierarkier af filsystemer uden at afsløre de enkelte dele af filsystemerne, som skal forblive skjulte.
- I subsystemet til arbejde med blokkerede enheder er der tilføjet støtte til hardwareenheder til beskyttelse af krypteringsnøgler.
- I SMB-filsystemet er der implementeret en option is_network_name_deleted og standard er smb_server_kerberos5-tilstand aktiveret.
- For OverlayFS-filsystemet er der tilføjet en monteringsoption "override_creds", som, når den angives, gør det muligt at bruge den kaldende brugers legitimationsoplysninger til adgang til de lavere lag i lagringssystemet i stedet for dem, der udførte montering. Denne ændring muliggør for eksempel, at OverlayFS kræver en bruger med CAP_SYS_ADMIN-rettigheder til montering, mens det er muligt at bruge filsystemet med legitimationsoplysninger uden denne privilegium.
- I exFAT er filfjerning operationer blevet accelereret. I stedet for at sende "discard" anmodninger hver for sig for hver frigivet klynge af den slettede fil, grupperer driveren nu anmodningerne. I en test blev tiden for at slette en fil på 80 GB reduceret fra 286 sekunder til 1,6 sekunder.
- Alle pseudo-filsystemer samt EXT2-filsystemet er blevet overført til at bruge den nye API til montering af partitioner.
- Koden til support af SYSV-filsystemer (SystemV/386, Xenix og Coherent) er blevet fjernet, da den fra 2023 er blevet markeret som ikke-understøttet (orphaned).
- Hukommelse og systemtjenester
- Den minimale version af GCC, der kræves for at bygge kernen, er hævet til 8.1, og Clang til 15.0.0.
- Fwctl (Firmware Control) subsystemet er blevet tilføjet, hvilket giver en API til sikker håndtering af firmware og udførelse af behandlere på firmware-siden fra brugerrummet. Driverne til CXL-enheder (Compute Express Link), Ethernet-adaptere fra Mellanox ConnectX (mlx5) og AMD/Pensando servicekort er baseret på fwctl.
- Funktionaliteten af pidfd-mekanismen er blevet udvidet, hvilket gør det muligt at bruge identifikatorer, der er relateret til specifikke processer og som, i modsætning til pid, ikke kan genudeles. Muligheden for at udtrække data om en proces status bliver identificeret via pidfd efter at forældreprocessen har modtaget en bekræftelse på, at barnets proces er blevet afsluttet (reaped) og dens ressourcer er blevet frigivet. En PIDFD_SELF-flag er blevet tilføjet til systemopkald, hvilket gør det muligt for processen at referere til sig selv.
- Der er tilføjet support for udvidelser til RISC-V-arkitekturen såsom BFloat16, Zaamo (atomiske operationer med hukommelse), Zalrsc (Load-Reserved/Store-conditional) og ZBKB (bitoperationer til kryptografi).
- Under sporingen er det muligt at gemme argumenterne for de kaldte funktioner og vise dem i sporingsloggene.
- Der er tilføjet support til io_uring asynkrone input/output for at læse informationsoplysninger om epoll hændelser. Anvendelsen af io_uring til behandling af epoll hændelser reducerer antallet af kontekstskift og giver mulighed for at håndtere flere epoll hændelser ad gangen.
- I eBPF-subsystemet er programverificeringen forbedret i forhold til løkker. Nye instruktioner "timed_may_goto", "load-acquire" og "store-release" er tilføjet. Muligheden for at ændre udvidede filattributter fra BPF-programmer er blevet tilføjet. Funktionen try_alloc_pages(), designet til at allokere hukommelse under høj sandsynlighed for fejl, er også blevet tilføjet, når BPF-programmer køres i begrænsede sammenhænge.
En ny låsprimitive er blevet implementeret — rqspinlock (Resilient Queued Spin Lock), der under udførelsen afslører situationer, der fører til døde punkter. Den nye primitive muliggør indlæsning af BPF-programmer, som verificeringssystemet ikke garanterede for korrekt funktion med låse.
- Pålideligheden af allokering af store hukommelsessider (huge-page) er betydeligt forbedret.
- Beregningen af CRC64-kontrolsummer på x86-systemer er blevet betydeligt hurtigere. Blandt andet er nye vektorinstruktioner fra AVX-512-sættet blevet udnyttet for at forbedre hastigheden. I nogle situationer er ydelsen steget med 100 gange.
- Overførslen af ændringer fra Rust-for-Linux-grenen, relateret til brugen af Rust som det andet sprog til udvikling af drivere og kerne-moduler, fortsætter (Rust-support er ikke aktiveret som standard og gør ikke Rust til en obligatorisk byggeafhængighed for kernen). Muligheden for at bruge makroen "#[kunit_tests()]" i kernelkoden til kørsel af enhedstest er blevet tilføjet. Support til ARMv7-arkitekturen er blevet implementeret. DMA- og hrtimer-moduler med Rust-bindinger for DMA (tilføjet af Linus udenom maintaineren, der derefter forlod sin post) og højpræcisions-timere er blevet implementeret. Modulerne 'list', 'str', 'sync', 'error' og 'alloc' er blevet udvidet. Support til den nye syntaks '&raw' (raw_ref_op) er blevet tilføjet.
- I perf-subsystemet er muligheden for profilering af forsinkelse blevet implementeret, ved hjælp af information fra opgaveplanen.
- Et kernel kommando parameter "traceoff_after_boot" er blevet tilføjet, der deaktiverer tracing efter at kernen er indlæst og init-processen er startet. Parameteren kan bruges til at diagnosticere opstartsproblemer, og sikrer, at de data, der er indsamlet under opstarten, ikke bliver overskrevet.
- Understøttelsen af 32-bit x86-systemer med mere end 8 CPU'er og 4 GB RAM er ophørt. Sådan hardware findes ikke længere, og systemer, der kræver sådanne ressourcer, er blevet opgraderet til 64-bit CPU'er.
- Der er foretaget ændringer i implementeringen af POSIX-timere, der giver CRIU (Checkpoint/Restore in Userspace) værktøjer mulighed for at gemme og genoprette timeridentifikatorer.
- Virtualisering og sikkerhed
- Muligheden for at bruge Linux som rodmiljø (Dom0. root partition) for hypervisoren Hyper-V (Microsoft Hypervisor) er blevet tilføjet. Værtmiljøet er ansvarlig for at styre hypervisoren, organisere opstart af gæstesystemer, allokere ressourcer og sikre interaktion med hardware. virtual machines Styringen af Hyper-V hypervisoren i Linux sker gennem enhed /dev/mshv.
- Landlock-modulet, der giver ikke-privilegerede programmer midler til at begrænse brugen af objekter i Linux-kernen (filhierarkier, netværkssokler, ioctl osv.), har fået en revideringsmekanisme. Revisionen gør det muligt at vurdere grundene til adgangsblokeringer, der udføres ved brug af Landlock, samt forstå, hvornår og hvilken operation der blev blokeret, hvorfor blokeringen blev udført, og hvilken regel der aktiveredes.
- Muligheden for at implementere controllere i LSM-moduler (Linux Security Modules), som styrer anmodninger om asynkron ind-/udgang io_uring og tillader blokering af brugen af io_uring til at omgå adgangsbegrænsninger til systemopkald, er blevet tilføjet. En sådan controller er implementeret i LSM-modulet SELinux.
- I SELinux er der tilføjet muligheden for at anvende politikker på alle datatyper, der indlæses af kernen, inklusive firmwarebilleder, sikkerhedspolitikker og certifikater.
- En indstillingsmetode for at låse visse hukommelseskortlæsningsoperationer udført af kernen i procesens addressrum er blevet tilføjet. Låsen konverterer kortlægningen til skrivebeskyttet tilstand og forhindrer ændringer i tilfælde af udnyttelse af sårbarheder. Effekten gælder for kortlægning af vDSO, vsyscall, vvar, sigpage og uprobes. Standardindstillingen er deaktiveret, da det kan forstyrre driften af visse applikationer. En konfigurationsindstilling CONFIG_MSEAL_SYSTEM_MAPPINGS er tilføjet for at aktivere det.
- Netværkssubsystem
- Arbejdet med at fjerne netværksstakken fra den globale lås RTNL (rtnl_lock) og omdanne den til låse, der er knyttet til separate netværksnavneområder, er fortsat.
- Den indledende funktionalitet til at modtage netværkspakker via io_uring er blevet tilføjet med direkte kopiering af indholdet til programmets hukommelse i brugerummet uden mellemlagring (zero-copy). I udførte tests har ændringen gjort det muligt at håndtere trafik gennem en 200 gigabits forbindelse ved brug af ét CPU-kerne.
- Sysctl tcp_rto_max_ms og TCP-socket-muligheden TCP_RTO_MAX_MS er implementeret, hvormed man kan angive den maksimale tid mellem forsøg på at genoverføre pakker.
- En serie callback-kald er blevet tilføjet til BPF for at få oplysninger om tid fra forskellige steder i netværksstakken, hvilket kan bruges til diagnosticering af problemer med netværksforsinkelser.
- Ydeevnen for netværksoperationer er blevet optimeret:
- Optimeringen GRO (Generic Receive Offload), som samler flere små pakker til én stor, er nu aktiveret ved skift af pakkehåndtering til en anden CPU (til belastningsbalancering) ved brug af XDP (eXpress Data Path) subsystemet, som muliggør behandling af pakker på niveau med netværksdriveren inden de sendes til netværksstakken. Ydeevnen for behandling af TCP-strømme ved brug af optimeringen kan nå op til det dobbelte.
- Under høj belastning er ydeevnen af funktionen connect() forbedret op til det dobbelte ved at erstatte spin-låsning med synchroniseringsmekanismen RCU (Read-Copy-Update) i søgningen efter poster med oplysninger om forbindelsesparter (kilde og destination og porte). Derudover er hashing-optimeringen blevet udført, hvilket har givet en yderligere forbedring af ydeevnen med 229%. IP-adresser Implementeringen af MPTCP (Multipath TCP), en udvidelse af TCP-protokollen til at organisere levering af pakker samtidigt gennem flere ruter via forskellige netværksinterface bundet til forskellige IP-adresser, er blevet accelereret. MPTCP i en enkelt strøm er blevet accelereret med 29%.
- I netfilter er operationer for ruteopslag i FIB (Forwarding Information Base) stoppet, hvis der findes en socket. Denne optimering har resulteret i en ydeevneforøgelse på 20%.
- Ydeevnen af UDP under flooding-forhold er steget med 10% ved at udelukke unødvendige operationer med strukturen sk_tsflags ved modtagelse af pakker.
- Ydeevnen for UDP under flud (flood) er øget med 10 % ved at udelukke unødvendige operationer med strukturen sk_tsflags ved modtagelse af pakker.
- Der er tilføjet en driver med implementeringen af MCTP-over-USB-protokollen.
- Udstyr
- Den indledende implementering af Nova-driveren til NVIDIA GPU'er er blevet accepteret i kernen, udstyret med GSP-firmware, der anvendes fra NVIDIA GeForce RTX 2000 serien baseret på Turing-mikroarkitekturen. Driveren er skrevet i Rust. I første omgang er kun rammerne for nova-core tilføjet, som tæller cirka 400 linjer kode og implementerer det grundlæggende abstraktionsniveau over firmware-grænsefladerne for GSP. I næste fase planlægges det at inkludere DRM-driveren nova-drm (Direct Rendering Manager) i kernen for interaktion med GPU'en fra brugerområdet samt VFIO-driveren med vGPU-manager, der muliggør brugen af virtuelle NVIDIA GPU'er i virtualiseringssystemer.
- Arbejdet med drm-driveren (Direct Rendering Manager) Xe til GPU'er baseret på Intel Xe-arkitekturen, som bruges i Intel grafikort i Arc-familien og integreret grafik fra Tiger Lake-processorer, er fortsat. Understøttelse af SVM (Shared Virtual Memory), en komponent i DRM-rammen, der håndterer delt hukommelse mellem CPU og GPU, er blevet tilføjet.
- Driveren i915 har fået identifikatorer for nye GPU'er.
- GSP RPC i Nouveau-driveren er blevet redesignet og drm_slave_encoder-interfacet er blevet integreret.
- I AMDGPU-driveren er understøttelse af DCN36-arkitekturen (Display Core Next) implementeret. Muligheden for at angive egne lyskurver til brug ved lysstyrkekorrektion af skærmen er blevet tilføjet.
- Support for Qualcomm Adreno 623 GPU er blevet tilføjet i adreno-driveren.
- Understøttelse af Apple Touch Bar berøringspaneler er blevet tilføjet.
- Understøttelsen af den anden version af eUSB2-udvidelsen (eUSB2V2 - Embedded USB2 Version 2.0) er blevet tilføjet, hvilket muliggør en reduktion af spændingen (ned til 1,2 volt) og forbedrer ydelsen af USB 2.0. Dataoverførselshastigheden i eUSB2V2 kan nå op på 4,8 Gbit pr. sekund, hvilket er 10 gange hurtigere end de almindelige 480 Mbit pr. sekund, der er typiske for USB 2.0. eUSB2V2 giver producenterne af bærbare computere mulighed for at udstyre deres enheder med højere opløsnings webcam, samtidig med at de fortsat bruger den Embedded USB2-bus til tilslutning.
- Understøttelsen af Intel Killer E5000 Ethernet-adaptere (RTL8126) er blevet tilføjet.
- Understøttelsen af skærmpanelerne Visionox RM692E5, Rockchip w552793dba-v10, kingdisplay-kd110n11-51ie og starry-2082109qfh040022-50e er blevet tilføjet.
- En driver til Samsung Galaxy Book bærbare computere er blevet tilføjet.
- Understøttelsen af lydsystemerne Presonus Studio 1824c, Jabra Evolve 65 er blevet tilføjet. Understøttelsen af DSP-modulerne AMD ACP 7.x, AWINC WM88166, Everest ES8388, Intel AVS PEAKVOL og GAIN er blevet tilføjet. Lydsupporten på bærbare computere fra ASUS, HP og Lenovo er blevet forbedret.
- Understøttelsen af ARM-platforme, SoC og enheder er blevet tilføjet: Arm Morello, AMD (Xilinx) Versal NET, Google Pixel Pro 6, NetCube Kumquat, MYIR Remi Pi, Huawei Matebook E Go, Milk-V Jupiter ST STM32MP2, Mediatek MT8370, Apple T2, Skov (i.MX8MP), EVK (i.MX95), Rockchip RK35xx, Allwinner A523, 11 Toradex-kort baseret på i.MX6.
Samtidig har den latinamerikanske Free Software Foundation dannet en version af det fuldstændigt fri kernel 6.15 - Linux-libre 6.15-gnu, renset for firmware og drivere, der indeholder ikke-frie komponenter eller kodedelområder, hvis anvendelse er begrænset af producenten. I version 6.15 er loading af blobs i nova-drivere, Qualcomm iris v4l2, Airoha NPU, Tehuti Networks TN40xx 10G ethernet, Realtek 8814A wifi, Apple Silicon SoC touchscreen, Renesas UFS og aw88166 audio neutraliseret. Rensningen af Spider 1Gb ethernet-drivere, som blev fjernet fra kernen, er blevet stoppet. Henvisninger til tivoiserede binære filer er blevet fjernet. Blobs loading fra Rust kode er blevet blokeret.
Kilde: opennet.ru
