Etter to måneder med utvikling ga Linus Torvalds ut kjernen. Linux 7.2. Blant de mest bemerkelsesverdige endringene: USB4STREAM-datastrømmemekanisme, ytelsesoptimaliseringer for btrfs, xfs og ext4, fortsatt fjerning av kode for i486 CPU-støtte, muligheten til å opprette nestede SCHED_EXT-planleggere, redusert minneforbruk i swap-undersystemet, akselererte navnløse rør, støtte for Intel MBEC- og AMD GMET-utvidelser i KVM, fjerning av AppleTalk-protokollen, initial støtte for HDMI 2.1 FRL i AMDGPU-driveren.
De viktigste nye funksjonene i kjernen 7.2 (1, 2, 3):
- Diskundersystem, I/O og filsystemer
- I iomap-mekanismen er et ekstra kall til memset-funksjonen for allerede fullførte iterasjoner i iomap_iter()-funksjonen fjernet, noe som, med høy I/O-intensitet på raske NVMe-disker, økte antallet input/output-operasjoner per sekund (IOPS) med 5 % i testene som ble utført ved bruk av ext4- og xfs-filsystemene.
- XFS er erklært stabilt for støtte av sonede lagringsenheter (deling av grupper av blokker eller sektorer i soner, der bare sekvensielle tillegg av data er tillatt, og oppdatering av hele blokkgruppen).
- Btrfs støtter nå store folioer som standard, noe som reduserer overhead og forbedrer ytelsen under intensiv sekvensiell I/O. Eksperimentell støtte for enorme folioer (opptil 2 MB) er lagt til. En ny ioctl, GET_CSUMS, er lagt til for å hente sjekksuminformasjon i brukerområdet, for eksempel for mkfs-verktøyet og optimalisering av deduplisering. Ytelsen for sekvensiell skriving er økt med 15 % og ytelsen for direkte I/O med 59 %.
- Ext4-filsystemets «fast commit»-mekanisme har blitt betydelig redesignet for å eliminere konflikt og vranglåser. Eksport av inode-snapshotstatistikk er lagt til via /proc/fs/ext4/*/fc_info. Ytelsen til beregning av kataloghash er optimalisert (nesten doblet hastigheten for navn på 255 tegn, 27 % for navn på 64 tegn og 11 % for navn på 32 tegn).
- F2FS støtter nå fserror-feilretur, noe som gjør at filsystemproblemer kan overvåkes fra brukerområdet. Tiden brukt på avbruddshåndtering er redusert.
- En ny dm-inlinecrypt-håndterer er lagt til i Device Mapper (DM) for transparent kryptering og dekryptering av blokkenheter ved hjelp av maskinvareenheter med innebygd krypteringsfunksjonalitet.
- Dokumentasjon om hvordan du legger til nye filsystemer i kjernen er levert.
- I NFS er standard blokkstørrelse økt til 4 MB på systemer med minst 16 GB RAM (du kan bruke /proc/fs/nfsd/max_block_size for å endre blokkstørrelsen manuelt). Støtte for katalogdelegering er lagt til, slik at operasjoner med en gitt katalog kan utføres i en viss tidsperiode uten å sjekke om det er noen tilstandsendringer på server.
- SMB-serveren støtter nå filer lagret i komprimert form, samt datakomprimering under overføring over nettverket.
- Den nye NTFS-implementeringen (ntfsplus) legger til støtte for symbolske lenker. Windows og korrekt håndtering av mange typer metadatakorrupsjon er sikret.
- fscache-backend for mellomlagring av EROFS-data (Enhanced Read-Only File System), som ble avskrevet for to år siden, er fjernet.
- Ceph FS støtter nå manuell tilbakestilling av klientøkter.
- 9P-filsystemet er optimalisert for å forbedre ytelsen i scenarier som prosjektbygging.
- Flagg for henting av informasjon om filsystemets store og små bokstaver er lagt til i systemkallet file_getattr(). FS_XFLAG_CASEFOLD-flagget indikerer at filnavnkontroll utføres uten å skille mellom store og små bokstaver, og FS_XFLAG_CASENONPRESERVING-flagget indikerer at informasjon om store og små bokstaver ikke bevares når nye filnavn opprettes. Disse flaggene kan brukes i NFS-klienter som ikke skiller mellom store og små bokstaver.
- Flagget O_EMPTYPATH er lagt til systemkallet openat2(), noe som tillater at en tom filsti sendes. I dette tilfellet bestemmes banen til filen som åpnes basert på den sendte filbeskrivelsen.
- OPENAT2_REGULAR-flagget er lagt til i systemkallet openat2(), som bare tillater åpning av vanlige filer (en EFTYPE-feil returneres hvis en spesiell fil, for eksempel en socket, pipe eller enhet, forsøkes å åpnes).
- Minne- og systemtjenester
- USB4STREAM-mekanismen er implementert for strømming av data mellom datamaskiner som er koblet til via USB4-porter. Enheten /dev/tbstreamX er lagt til, slik at du kan lese og skrive data ved hjelp av standard read()- og write()-funksjoner, på samme måte som å lese og skrive filer. For eksempel kan du på én vert sende informasjon ved hjelp av kommandoen "echo hello > /dev/tbstream0", og på en annen kan du lese den ved hjelp av kommandoen "cat /dev/tbstream0". USB4STREAM-mekanismen kan kombineres med muligheten til å opprette en nettverkstilkobling via en USB4-kabel (thunderbolt_net) eller brukes separat for å overføre data mellom applikasjoner som ikke støtter nettverkskontakter.
- Den andre serien med endringer for å fjerne støtte for i486-prosessorer er inkludert. Over 13 kodelinjer relatert til flyttallsemulering for prosessorer uten en FPU er fjernet. Støtte for i486-prosessorer uten maskinvareoperasjonene CX8 (sammenlign og utveksle 8 byte) og TSC (CPU-syklusteller brukt i oppgaveplanleggeren) er fjernet, ettersom emuleringskoden for disse er fjernet.
- Støtte for AMD Geode-prosessorer som brukes i OLPC XO-1-datamaskinen har blitt annonsert som foreldreløs.
- La til støtte for oppdatering av implementeringen av Intels TDX (Trusted Domain Extensions), en mekanisme som brukes til å kryptere gjestesystemets RAM. TDX implementeres som en spesiell programvarekjøretidsmodul som overføres fra flashminne til RAM av BIOS under oppstart. Kjernen inkluderer nå muligheter for å administrere denne modulen og erstatte den med en nyere versjon på et kjørende system uten å kreve omstart.
- En ny GPU-ressursallokeringsplanlegger (Fair GPU scheduler) er implementert. Den brukes til å bestemme rekkefølgen arbeid som sendes inn av GPU-brukende prosesser utføres på GPU-en. I stedet for å bruke den tradisjonelle FIDO-køen for GPU-forespørsler, bruker den nye planleggeren mekanismer for rettferdig ressursallokering basert på oppgaveplanleggeren Completely Fair Scheduler (CFS), som bruker en oppstartsplan med en overgangstid for neste prosess. Den mest merkbare effekten av den nye planleggeren observeres under parallell utførelse av interaktive oppgaver som bruker GPU-en i stor grad. I siste liten før utgivelsen av kjerne 7.2 ble Fair GPU-planleggeren deaktivert, og den gamle FIFO-planleggeren ble tilbakestilt på grunn av behovet for å feilsøke regresjon, noe som forårsaket ytelsesforringelse og 100 % GPU-utnyttelse når man kjørte visse spill i Proton.
- Endringer i eBPF-delsystemet: La til muligheten til å knytte et enkelt BPF-program til flere sporingspunkter. BPF-programmer som er koblet til sporingspunkter, kan nå få tilgang til minnet til brukerområdekomponenter, med korrekt håndtering av ikke-allokerte minnesider (sidefeil). Systemkallet bpf() støtter nå standardattributter (log_buf, log_size, log_level og log_true_size), som tillater enhetlig overføring av metadata på tvers av alle BPF-kommandoer, ikke begrenset til BPF_PROG_LOAD, BPF_BTF_LOAD og BPF_MAP_CREATE. Begrensningen på å sende maksimalt 5 parametere til BPF-funksjoner er fjernet. La til muligheten til å få sikker tilgang til bpf_arena delt minne uten frykt for å få tilgang til ikke-allokerte minnesider (sidefeil). En ny versjon av BPF hash-kartstrukturen er implementert, noe som tillater dynamisk endring av størrelse.
- Genereringen av «/proc/interrupts»-utdataene med avbruddsstatistikk er optimalisert, strukturene for lagring av avbruddstellere er modernisert og mellomlagring er lagt til.
- Genereringen av filen "/proc/filesystems" som brukes i libselinux har blitt fremskyndet.
- Oppgaveplanleggeren støtter nå lastbalansering på tvers av CPU-kjerner, og tar hensyn til tilstanden til prosessorens interne hurtigbuffer. Planleggeren prøver nå å gruppere prosesser ved hjelp av delte ressurser, for eksempel tråder i en enkelt prosess, for å dele den samme hurtigbufferen på høyt nivå, noe som forbedrer effektiviteten til datatilgang ved å øke sannsynligheten for at de nødvendige dataene blir funnet i hurtigbufferen.
- SCHED_EXT-mekanismen, som tillater bruk av BPF til å opprette CPU-planleggere, har fortsatt å implementere muligheten til å opprette nestede planleggere (underplanleggere), som lar hver c-gruppe bruke sin egen oppgaveplanlegger.
- Fortsatt migrering av endringer fra Rust-for-grenenLinux, relatert til bruk av Rust som et andrespråk for utvikling av drivere og kjernemoduler (Rust-støtte er ikke aktivert som standard og inkluderer ikke Rust som en obligatorisk kjerneavhengighet). Rust-støtte i kjernen er implementert for s390-arkitekturen. Pakken "zerocopy", som gir raske minneprimitiver for kode i "usikker" modus, er inkludert.
- Minimumsversjonen av LLVM-verktøysettet som kreves for å bygge kjernen er økt til 17.0.1.
- I det minimalistiske C-biblioteket nolibc, levert med kjernens kildekode Linux og gir et rammeverk for grunnleggende systemkall, som støtter OpenRISC- og 32-biters PA-RISC-arkitekturer.
- Swap-undersystemet er optimalisert for å forbedre ytelsen og redusere minneforbruket i selve undersystemet ved å eliminere overhead ved lagring av statiske metadata og forene anonymt og delt minne ved bruk av bøker. Minnereduksjonen er ganske betydelig; for eksempel reduserer montering av en swap-partisjon på 1 TB minneforbruket med omtrent 512 MB.
- Ytelsen til minneutkastningsmekanismen, som sletter eller flytter minne til bytteplass for å frigjøre minne når systemet er under press, er forbedret. Under visse arbeidsbelastninger, for eksempel ved testing av MongoDB med YCSB (Yahoo! Cloud Serving Benchmark), er det observert ytelsesforbedringer på opptil 30 %.
- Kommandoen «make sbom» er lagt til i byggesystemet for å generere SBOM-lister (Software Bill Of Materials) som gjenspeiler komponentene, bibliotekene og avhengighetene som brukes i den gjeldende kjernebyggingen, samt lisensinformasjonen deres hentet fra SPDX-overskriftene i kodefilene.
- Implementeringen av navnløse rør har blitt optimalisert for håndtering av låser (minneallokeringsoperasjoner flyttes utenfor låsens omfang), noe som har økt gjennomstrømningen av navnløse rør med 21–48 % og redusert latensen med 17–33 %.
- Virtualisering og sikkerhet
- Slab-allokatoren støtter nå bruk av Allocation Tokens, implementert i Clang 22-kompilatoren. Tokens tillater unike identifikatorer for minneallokeringsoperasjoner og separat allokering av forskjellige typer objekter for å komplisere utnyttelsen av bufferoverløpssårbarheter (med separasjon blir ikke bufferoverløp i én type objekt lett utnyttet til å skade andre typer objekter).
- AF_ALG-mekanismen, som ble utnyttet i Copy Fail-sårbarheten for å endre data i sidebufferen, er avskrevet og skal etter planen fjernes i en fremtidig utgivelse. AF_ALG aktiverer maskinvareakseleratorer for kryptografiske beregninger i kjernens Crypto API, men brukes i ganske spesifikke situasjoner. I kjerne 7.2 er støtte for asynkron I/O, eldre drivere og nullkopimekanismen i skcipher- og aead-implementeringene fjernet fra AF_ALG. Bare programvareimplementeringer av kryptografiske algoritmer er beholdt, og støtte for maskinvarekryptografiske akseleratorer i kjernens Crypto API er fjernet, ettersom AF_ALG utvider angrepsflaten betydelig, men gir ingen ytelsesfordel sammenlignet med implementeringer av brukerområdekryptografi. AF_ALG ble brukt i Cryptsetup-verktøysettet, men støtten ble fjernet i den nylige 2.8.7-utgivelsen.
- IMA-mekanismen (Integrity Measurement Architecture), som lar en ekstern tjeneste verifisere tilstanden til kjerneundersystemer for å sikre deres autentisitet, har blitt supplert med støtte for eksport av interne tabeller med måleresultater til brukerområdet og sletting av dem fra kjernebuffere for å spare minne.
- I Landlock-modulen, som gir uprivilegerte programmer muligheten til å begrense bruken av kjerneobjekter Linux (filhierarkier, nettverkssockets, ioctl osv.), støtte for tilgangskontroll til UDP-sockets er lagt til, samt muligheten til selektivt å deaktivere utdata av objektlåsinformasjon til loggen for å forhindre at loggen blir overfylt med irrelevant informasjon.
- Kjernen har blitt avskrevet fra å bruke strncpy()-funksjonen, som kopierer et spesifisert antall byte fra en input-streng. Bruk av strncpy() skapte risiko for feil på grunn av manglende nulltegn på slutten av strengen eller ekstra utfylling med nuller. I stedet for strncpy() anbefales det å bruke funksjonene strscpy() og strscpy_pad() for å kopiere null-avsluttede strenger, samt strtomem_pad(), memcpy_and_pad() og memcpy() for å kopiere strenger med en kjent, fast størrelse. Arbeidet med å avvikle bruken av strncpy() i kjernen startet i 2020 og krevde 362 commits fra 70 utviklere.
- I hypervisoren KVM La til støtte for Intel MBEC (Mode-Based Execution Control) og AMD GMET (Guest-Mode Execution Trap)-utvidelsene, som muliggjør separat håndtering av kjerne- og brukerområdeutførelsesrettigheter i gjestesystemer i minneoversettelsestabeller. Tidligere tillot Intel- og AMD-maskinvarevirtualiseringsutvidelser at minnesider ble merket som kjørbare med bare én bit, med programvarebasert separasjon av kjerne- og brukerområderettigheter på hypervisornivå. Bruk av MBEC og GMET eliminerer tillatelseskontroller på hypervisorsiden og reduserer ressurskrevende kontrolloverføringer betydelig fra gjestesystemet til VMexit-hypervisoren.
- Nettverksundersystem
- TCP-AO-utvidelsen (TCP Authentication Option, RFC 5925) har blitt migrert til det nye kryptografiske biblioteket libcrypto, noe som forenkler koden og forbedrer ytelsen. TCP-AO muliggjør verifisering av TCP-headere ved hjelp av MAC-koder (Message Authentication Code), ved bruk av de mer moderne algoritmene HMAC-SHA-1-96 og AES-128-CMAC-96, og erstatter det tidligere tilgjengelige TCP-MD5-alternativet, som var avhengig av den utdaterte MD5-algoritmen.
- Antall understrømmer som støttes for Multipath TCP (MPTCP)-tilkoblinger har blitt økt fra 8 til 64.
- Arbeidet med å redusere bruken av den globale låsen rtnl_lock i kjernenettverksstakken fortsatte.
- Kjernen har fjernet implementeringen av AppleTalk-protokollstakken, som ble brukt i Apple-datamaskiner siden 1985 og ble erstattet på 1990-tallet av TCP/IPI tillegg er komponenter for ATM-dataoverføringsteknologi som ikke er relatert til PPPoATM fjernet, i tillegg til ARCnet-nettverksgrensesnitt basert på ISA- og PCMCIA-busser, Bluetooth-adaptere med PCMCIA-grensesnitt, Chelsea TLS-akseleratorer, kode for integrering av TLS med sockmap og støtte for 5/10 MHz-frekvensbåndene i den trådløse cfg80211/mac80211-stakken. På grunn av uløste blokkeringsproblemer og mangel på vedlikeholdere er en spesifikk implementering av TLS-prosesseringsakselerasjon basert på TCP Offload Engine fjernet (den vanligste TLS-offload-implementeringen er beholdt). Kompatibilitetskode med 32-biters x_tables på 64-biters systemer er deaktivert og skal etter planen fjernes.
- PPpoe-driveren støtter nå GRO (Generic Receive Offload) og GSO (Generic Segmentation Offload) mekanismer for maskinvareakselerasjon av pakkesammenstilling og segmentering. Bruk av GRO og GSO øker gjennomstrømningen av innkommende trafikk betydelig. For eksempel, på MediaTek MT7621-enheter konfigurert med en adresseoversetter, økte den maksimale gjennomstrømningen fra 130 Mbit/s til 630 Mbit/s.
- Оборудование
- AMDGPU-driveren inkluderer nå innledende støtte for HDMI 2.1 FRL (Fixed Rate Link)-teknologi, som muliggjør overføring av ukomprimert video i 4K/120Hz og 8K/60Hz. HDMI 2.1-støtte var tidligere unnvikende i drivere med åpen kildekode på grunn av lisenskrav fra HDMI Forum, men AMD har nå sikret seg en lignende implementering.
- i915-driveren støtter nå angivelse av bakgrunnsfarge for skjermkontrolleren. Parameteren pin_params.needs_low_address er implementert.
- Arbeidet med Xe DRM-driveren (Direct Rendering Manager) for GPU-er basert på Intel Xe-arkitekturen, som brukes i grafikkort og integrert grafikk i Intel Arc-serien, fortsatte, og startet med Tiger Lake-prosessorer. Innledende støtte for CRI-plattformen (Crescent Island) er lagt til. En systemkontroller er implementert for Xe3p dGPU-plattformer.
- Nouveau-driveren løser problemer med NVIDIA GA100 GPU-en.
- v3d-driveren er oppdatert for å inkludere muligheten til å administrere v3D GPU-strømforbruk på Raspberry Pi-kort.
- Vi har fortsatt å integrere Nova-driverkomponenter for NVIDIA GPU-er utstyrt med GSP-fastvare som har blitt brukt siden NVIDIA GeForce RTX 2000-serien basert på Turing-mikroarkitekturen. Driveren er skrevet i Rust. Støtte er lagt til for GPU-ene i NVIDIA GA100-, Hopper- og Blackwell-serien.
- La til støtte for ARM-kort, SoC og enheter: Apple t8122 (M3), Motorola Edge 30, Nothing Phone 3a, Google Pixel 3a XL, Qualcomm Dragonwing IPQ9650, Huawei Hawi, ZTE zx297520v3, Renesas R-Car M3Le, ASPEED AST27xx, Cortina Gemini, NXP i.MX6/8/9, NXP LX2160A, TI K3 AM62x.
Samtidig laget Latin American Free Software Foundation en versjon av den helt gratis kjernen 7.2 - Linux-libre 7.2-gnu, renset for fastvare- og driverelementer som inneholder ikke-frie komponenter eller kodeseksjoner med begrenset omfang av produsenten. Versjon 7.2 inkluderer en blob-opprydding for de nye rt722-sdca- og tac5xx2-driverne. Oppryddingskoden for driverne amdgpu, nova core, qcom iris, q6v5, iwlwifi, amdxnda, adreno, r8152 og mt792x er oppdatert. Grensesnitt for lasting av fastvare er justert. Blob-navn i devicetree (dts)-filer for ARM-brikker er renset.
Kilde: opennet.ru
