Efter to måneders udvikling udgav Linus Torvalds kernen. Linux 7.2. Blandt de mest bemærkelsesværdige ændringer: USB4STREAM datastreamingmekanisme, optimeringer af btrfs, xfs og ext4 ydeevne, fortsat fjernelse af kode til i486 CPU-understøttelse, muligheden for at oprette indbyggede SCHED_EXT-planlæggere, reduceret hukommelsesforbrug i swap-undersystemet, accelererede navnløse pipes, understøttelse af Intel MBEC- og AMD GMET-udvidelser i KVM, fjernelse af AppleTalk-protokollen, initial understøttelse af HDMI 2.1 FRL i AMDGPU-driveren.
Vigtigste nye funktioner i kerne 7.2 (1, 2, 3):
- Diskundersystem, I/O og filsystemer
- I iomap-mekanismen er et ekstra kald til memset-funktionen for allerede gennemførte iterationer i iomap_iter()-funktionen blevet fjernet, hvilket med høj I/O-intensitet på hurtige NVMe-drev øgede antallet af input/output-operationer pr. sekund (IOPS) med 5% i de tests, der blev udført, når ext4- og xfs-filsystemerne blev brugt.
- XFS er blevet erklæret stabil til understøttelse af zoneopdelte lagringsenheder (opdeling af grupper af blokke eller sektorer i zoner, hvor kun sekventielle tilføjelser af data er tilladt, hvorved hele blokgruppen opdateres).
- Btrfs understøtter nu store folioer som standard, hvilket reducerer overhead og forbedrer ydeevnen under intensiv sekventiel I/O. Eksperimentel understøttelse af store folioer (op til 2 MB) er blevet tilføjet. En ny ioctl, GET_CSUMS, er blevet tilføjet til hentning af checksumoplysninger i brugerområdet, for eksempel til mkfs-værktøjet og deduplikeringsoptimering. Ydeevnen for sekventiel skrivning er blevet øget med 15 % og ydeevnen for direkte I/O med 59 %.
- Ext4-filsystemets "fast commit"-mekanisme er blevet væsentligt redesignet for at eliminere konflikt og fastlåste filer. Eksport af inode-snapshotstatistik er blevet tilføjet via /proc/fs/ext4/*/fc_info. Ydeevnen for beregning af mappehash er blevet optimeret (næsten fordoblet hastigheden for navne på 255 tegn, 27 % for navne på 64 tegn og 11 % for navne på 32 tegn).
- F2FS understøtter nu fserror-fejlreturnering, hvilket gør det muligt at overvåge filsystemproblemer fra brugerområdet. Tiden brugt på afbrydelseshåndtering er blevet reduceret.
- En ny dm-inlinecrypt-handler er blevet tilføjet til Device Mapper (DM) til transparent kryptering og dekryptering af blokenheder ved hjælp af hardwareenheder med inline-krypteringsfunktionalitet.
- Dokumentation om tilføjelse af nye filsystemer til kernen er blevet leveret.
- I NFS er standardblokstørrelsen blevet øget til 4 MB på systemer med mindst 16 GB RAM (du kan bruge /proc/fs/nfsd/max_block_size til manuelt at ændre blokstørrelsen). Understøttelse af mappedelegering er blevet tilføjet, hvilket tillader handlinger med en given mappe at blive udført i en bestemt periode uden at kontrollere for tilstandsændringer på server.
- SMB-serveren understøtter nu filer gemt i komprimeret form, samt datakomprimering under transmission over netværket.
- Den nye NTFS-implementering (ntfsplus) tilføjer understøttelse af symbolske links. Windows og korrekt håndtering af mange typer metadatakorruption sikres.
- fscache-backend'en til caching af EROFS-data (Enhanced Read-Only File System), som blev udfaset for to år siden, er blevet fjernet.
- Ceph FS understøtter nu manuel nulstilling af klientsessioner.
- 9P-filsystemet er blevet optimeret for at forbedre ydeevnen i scenarier som projektbuilds.
- Flag til hentning af information om filsystemets forskel på store og små bogstaver er blevet tilføjet til systemkaldet file_getattr(). FS_XFLAG_CASEFOLD-flaget angiver, at filnavnskontrol udføres uden at skelne mellem store og små bogstaver, og FS_XFLAG_CASENONPRESERVING-flaget angiver, at information om store og små bogstaver ikke bevares, når nye filnavne oprettes. Disse flag kan bruges i NFS-klienter, der ikke skelner mellem store og små bogstaver.
- Flaget O_EMPTYPATH er blevet tilføjet til systemkaldet openat2(), hvilket tillader, at en tom filsti sendes. I dette tilfælde bestemmes stien til den fil, der åbnes, baseret på den sendte filbeskrivelse.
- OPENAT2_REGULAR-flaget er blevet tilføjet til openat2()-systemkaldet, som kun tillader åbning af almindelige filer (en EFTYPE-fejl returneres, hvis en speciel fil, såsom en socket, pipe eller enhed, forsøges at blive åbnet).
- Hukommelse og systemtjenester
- USB4STREAM-mekanismen er blevet implementeret til streaming af data mellem computere, der er tilsluttet via USB4-porte. /dev/tbstreamX-enheden er blevet tilføjet, hvilket giver dig mulighed for at læse og skrive data ved hjælp af standardfunktionerne read() og write(), svarende til at læse og skrive filer. For eksempel kan du på én vært sende information ved hjælp af kommandoen "echo hello > /dev/tbstream0", og på en anden læse den ved hjælp af kommandoen "cat /dev/tbstream0". USB4STREAM-mekanismen kan kombineres med muligheden for at etablere en netværksforbindelse via et USB4-kabel (thunderbolt_net) eller bruges separat til at overføre data mellem applikationer, der ikke understøtter netværkssockets.
- Den anden række ændringer, der fjerner understøttelse af i486-processorer, er blevet inkluderet. Over 13 linjer kode relateret til emulering af flydende komma-enheder til processorer uden en FPU er blevet fjernet. Understøttelse af i486-processorer uden CX8-hardwareoperationer (sammenlign og udveksl 8 bytes) og TSC (CPU-cyklustæller brugt i opgaveplanlæggeren) er blevet fjernet, da emuleringskoden for disse er blevet fjernet.
- Understøttelse af AMD Geode-processorer, der bruges i OLPC XO-1-computeren, er blevet annonceret som forældreløs.
- Tilføjet understøttelse af opdatering af implementeringen af Intels TDX (Trusted Domain Extensions), en mekanisme, der bruges til at kryptere gæstesystemets RAM. TDX implementeres som et specielt software-runtime-modul, der overføres fra flashhukommelse til RAM af BIOS under opstart. Kernen indeholder nu funktioner til at administrere dette modul og erstatte det med en nyere version på et kørende system uden at kræve en genstart.
- En ny GPU-ressourceallokeringsplanlægger (Fair GPU scheduler) er blevet implementeret. Den bruges til at bestemme den rækkefølge, hvor arbejde, der indsendes af GPU-brugende processer, udføres på GPU'en. I stedet for at bruge den traditionelle FIDO-kø til GPU-anmodninger, anvender den nye planlægger fair ressourceallokeringsmekanismer baseret på Completely Fair Scheduler (CFS) opgaveplanlæggeren, som bruger en startplan med en overgangstid til den næste proces. Den mest mærkbare effekt af den nye planlægger observeres under parallel udførelse af interaktive opgaver, der bruger GPU'en i høj grad. I sidste øjeblik før udgivelsen af kernel 7.2 blev Fair GPU-planlæggeren deaktiveret, og den gamle FIFO-planlægger blev vendt tilbage på grund af behovet for at fejlfinde regression, hvilket forårsagede ydeevneforringelse og 100% GPU-udnyttelse, når visse spil blev kørt i Proton.
- Ændringer i eBPF-undersystemet: Tilføjet muligheden for at tilknytte et enkelt BPF-program til flere tracepoints. BPF-programmer, der er tilknyttet tracepoints, kan nu få adgang til hukommelsen i brugerområdekomponenter med korrekt håndtering af ikke-allokerede hukommelsessider (sidefejl). Systemkaldet bpf() understøtter nu standardattributter (log_buf, log_size, log_level og log_true_size), hvilket muliggør samlet overførsel af metadata på tværs af alle BPF-kommandoer, ikke begrænset til BPF_PROG_LOAD, BPF_BTF_LOAD og BPF_MAP_CREATE. Begrænsningen på at overføre højst 5 parametre til BPF-funktioner er fjernet. Tilføjet muligheden for sikker adgang til bpf_arena delt hukommelse uden frygt for at få adgang til ikke-allokerede hukommelsessider (sidefejl). En ny version af BPF hash map-strukturen er blevet implementeret, hvilket muliggør dynamisk ændring af størrelse.
- Genereringen af outputtet "/proc/interrupts" med afbrydelsesstatistik er blevet optimeret, strukturerne til lagring af afbrydelsestællere er blevet moderniseret, og caching er blevet tilføjet.
- Genereringen af filen "/proc/filesystems", der bruges i libselinux, er blevet fremskyndet.
- Opgaveplanlæggeren understøtter nu belastningsbalancering på tværs af CPU-kerner, idet der tages højde for tilstanden af processorens interne cache. Planlæggeren forsøger nu at gruppere processer ved hjælp af delte ressourcer, såsom tråde inden for en enkelt proces, for at dele den samme cache på højt niveau, hvilket forbedrer effektiviteten af dataadgang ved at øge sandsynligheden for, at de nødvendige data findes i cachen.
- SCHED_EXT-mekanismen, som tillader brug af BPF til at oprette CPU-planlæggere, har fortsat implementeret muligheden for at oprette indbyggede planlæggere (underplanlæggere), som tillader hver c-gruppe at bruge sin egen opgaveplanlægger.
- Fortsat migrering af ændringer fra Rust-for-grenenLinux, relateret til brugen af Rust som et andet sprog til udvikling af drivere og kernemoduler (Rust-understøttelse er ikke aktiveret som standard og inkluderer ikke Rust som en obligatorisk kerne-bygningsafhængighed). Rust-understøttelse i kernen er implementeret til s390-arkitekturen. Pakken "zerocopy", som leverer hurtige hukommelsesprimitiver til kode i "usikker" tilstand, er inkluderet.
- Minimumversionen af LLVM-værktøjssættet, der kræves for at bygge kernen, er blevet øget til 17.0.1.
- I det minimalistiske C-bibliotek nolibc, leveret med kernens kildekode Linux og giver et framework for grundlæggende systemkald, der understøtter OpenRISC- og 32-bit PA-RISC-arkitekturerne.
- Swap-undersystemet er blevet optimeret for at forbedre ydeevnen og reducere hukommelsesforbruget i selve undersystemet ved at eliminere overhead ved lagring af statiske metadata og forene anonym og delt hukommelse ved brug af bøger. Hukommelsesreduktionen er ret betydelig; for eksempel reducerer montering af en swap-partition på 1 TB hukommelsesforbruget med cirka 512 MB.
- Ydeevnen af hukommelsesudkastningsmekanismen, som sletter eller flytter hukommelse til swap-plads for at frigøre hukommelse, når systemet er under pres, er blevet forbedret. Under visse arbejdsbelastninger, f.eks. når MongoDB testes ved hjælp af YCSB (Yahoo! Cloud Serving Benchmark), er der observeret ydeevneforbedringer på op til 30%.
- Kommandoen "make sbom" er blevet tilføjet til byggesystemet for at generere SBOM-lister (Software Bill Of Materials), der afspejler de komponenter, biblioteker og afhængigheder, der bruges i den aktuelle kerneopbygning, samt deres licensoplysninger hentet fra SPDX-headerne i kodefilerne.
- Implementeringen af unavngivne pipes er blevet optimeret til håndtering af låse (hukommelsesallokeringsoperationer flyttes uden for låsens omfang), hvilket har øget gennemløbshastigheden af unavngivne pipes med 21-48% og reduceret latenstiden med 17-33%.
- Virtualisering og sikkerhed
- Slab-allokatoren understøtter nu brugen af Allocation Tokens, implementeret i Clang 22-compileren. Tokens tillader unikke identifikatorer til hukommelsesallokeringsoperationer og separat allokering af forskellige typer objekter for at komplicere udnyttelsen af bufferoverløbssårbarheder (med separation udnyttes et bufferoverløb i én type objekt ikke let til at beskadige andre typer objekter).
- AF_ALG-mekanismen, der udnyttes i Copy Fail-sårbarheden til at ændre data i sidecachen, er blevet udfaset og forventes fjernet i en fremtidig udgivelse. AF_ALG muliggør hardwareacceleratorer til kryptografiske beregninger i kernens Crypto API, men bruges i ret specifikke situationer. I kernel 7.2 er understøttelse af asynkron I/O, ældre drivere og nul-kopi-mekanismen i skcipher- og aead-implementeringerne blevet fjernet fra AF_ALG. Kun softwareimplementeringer af kryptografiske algoritmer bevares, og understøttelse af hardwarekryptografiske acceleratorer i kernens Crypto API er blevet fjernet, da AF_ALG udvider angrebsfladen betydeligt, men ikke giver nogen ydeevnefordel sammenlignet med implementeringer af brugerpladskryptografi. AF_ALG blev brugt i Cryptsetup-værktøjssættet, men dets understøttelse blev fjernet i den seneste 2.8.7-udgivelse.
- IMA-mekanismen (Integrity Measurement Architecture), som gør det muligt for en ekstern tjeneste at verificere tilstanden af kernelundersystemer for at sikre deres ægthed, er blevet suppleret med understøttelse af eksport af interne tabeller med måleresultater til brugerområdet og sletning af dem fra kernelbuffere for at spare hukommelse.
- I Landlock-modulet, som giver uprivilegerede programmer mulighed for at begrænse brugen af kerneobjekter Linux (filhierarkier, netværkssockets, ioctl osv.) er der tilføjet understøttelse af adgangskontrol til UDP-sockets, samt muligheden for selektivt at deaktivere outputtet af objektlåsinformation til loggen for at forhindre, at loggen bliver fyldt med irrelevante oplysninger.
- Kernen er blevet udfaset fra at bruge funktionen strncpy(), som kopierer et bestemt antal bytes fra en inputstreng. Brug af strncpy() skabte risiko for fejl på grund af manglende null-tegn i slutningen af strengen eller ekstra polstring med nuller. I stedet for strncpy() anbefales det at bruge funktionerne strscpy() og strscpy_pad() til at kopiere strenge med nul-terminering, samt strtomem_pad(), memcpy_and_pad() og memcpy() til at kopiere strenge med en kendt, fast størrelse. Arbejdet med at udfase brugen af strncpy() i kernen begyndte i 2020 og krævede 362 commits fra 70 udviklere.
- I hypervisoren KVM Tilføjet understøttelse af Intel MBEC (Mode-Based Execution Control) og AMD GMET (Guest-Mode Execution Trap) udvidelserne, som muliggør separat håndtering af kerne- og brugerplads-udførelsesrettigheder i gæstesystemer i hukommelsesoversættelsestabeller. Tidligere tillod Intel- og AMD-hardwarevirtualiseringsudvidelser, at hukommelsessider blev markeret som eksekverbare med kun en enkelt bit, med softwarebaseret adskillelse af kerne- og brugerpladsrettigheder på hypervisorniveau. Brug af MBEC og GMET eliminerer tilladelseskontroller på hypervisorsiden og reducerer ressourcekrævende kontroloverførsler betydeligt fra gæstesystemet til VMexit-hypervisoren.
- Netværks undersystem
- TCP-AO (TCP Authentication Option, RFC 5925)-udvidelsen er blevet migreret til det nye kryptografiske bibliotek libcrypto, hvilket forenkler koden og forbedrer dens ydeevne. TCP-AO muliggør verifikation af TCP-headere ved hjælp af MAC-koder (Message Authentication Code) med de mere moderne HMAC-SHA-1-96- og AES-128-CMAC-96-algoritmer, der erstatter den tidligere tilgængelige TCP-MD5-mulighed, som var baseret på den forældede MD5-algoritme.
- Antallet af understrømme, der understøttes til Multipath TCP (MPTCP)-forbindelser, er blevet øget fra 8 til 64.
- Arbejdet med at reducere brugen af den globale lås rtnl_lock i kernens netværksstakk fortsatte.
- Kernen har fjernet implementeringen af AppleTalk-protokolstakken, som blev brugt i Apple-computere siden 1985 og blev erstattet i 1990'erne af TCP/IPDerudover er ATM-dataoverførselsteknologikomponenter, der ikke er relateret til PPPoATM, blevet fjernet, såvel som ARCnet-netværksgrænseflader baseret på ISA- og PCMCIA-busser, Bluetooth-adaptere med PCMCIA-grænseflade, Chelsea TLS-acceleratorer, kode til integration af TLS med sockmap og understøttelse af 5/10 MHz-frekvensbåndene i den trådløse cfg80211/mac80211-stakken. På grund af uløste blokeringsproblemer og manglen på vedligeholdere er en specifik implementering af TLS-behandlingsacceleration baseret på TCP Offload Engine blevet fjernet (den mere almindelige TLS-offload-implementering er bevaret). Kompatibilitetskode med 32-bit x_tables på 64-bit systemer er blevet deaktiveret og er planlagt til fjernelse.
- PPpoe-driveren understøtter nu GRO (Generic Receive Offload) og GSO (Generic Segmentation Offload) mekanismer til hardwareacceleration af pakkesamling og segmentering. Brug af GRO og GSO øger den indgående trafikgennemstrømning betydeligt. For eksempel steg den maksimale gennemstrømning fra 130 Mbit/s til 630 Mbit/s på MediaTek MT7621-enheder konfigureret med en adresseoversætter.
- Оборудование
- AMDGPU-driveren inkluderer nu initial understøttelse af HDMI 2.1 FRL (Fixed Rate Link) teknologi, der muliggør transmission af ukomprimeret video ved 4K/120Hz og 8K/60Hz. HDMI 2.1-understøttelse var tidligere vanskelig at finde i open source-drivere på grund af HDMI Forum-licenskrav, men AMD har nu sikret sig en lignende implementering.
- i915-driveren understøtter nu indstilling af baggrundsfarven for skærmcontrolleren. Parameteren pin_params.needs_low_address er blevet implementeret.
- Arbejdet med Xe DRM (Direct Rendering Manager) driveren til GPU'er baseret på Intel Xe-arkitekturen, som bruges i Intel Arc-serien af grafikkort og integrerede grafikkort, fortsatte, startende med Tiger Lake-processorer. Indledende understøttelse af CRI (Crescent Island) platformen er blevet tilføjet. En systemcontroller er blevet implementeret til Xe3p dGPU platforme.
- Nouveau-driveren løser problemer med NVIDIA GA100 GPU'en.
- v3d-driveren er blevet opdateret og inkluderer nu muligheden for at styre v3D GPU-strømforbrug på Raspberry Pi-kort.
- Vi har fortsat med at integrere Nova-driverkomponenter til NVIDIA GPU'er udstyret med GSP-firmware, der er blevet brugt siden NVIDIA GeForce RTX 2000-serien baseret på Turing-mikroarkitekturen. Driveren er skrevet i Rust. Understøttelse er blevet tilføjet til NVIDIA GA100-, Hopper- og Blackwell-serien af GPU'er.
- Tilføjet understøttelse af ARM-kort, SoC og enheder: 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 skabte Latin American Free Software Foundation en version af den helt gratis kerne 7.2 - Linux-libre 7.2-gnu, renset for firmware- og driverelementer, der indeholder ikke-frie komponenter eller kodeafsnit med begrænset omfang af producenten. Version 7.2 inkluderer en blob-oprydning til de nye rt722-sdca- og tac5xx2-drivere. Oprydningskoden til amdgpu-, nova core-, qcom iris-, q6v5-, iwlwifi-, amdxnda-, adreno-, r8152- og mt792x-driverne er blevet opdateret. Grænseflader til indlæsning af firmware er blevet justeret. Blob-navne i devicetree-filer (dts) til ARM-chips er blevet renset.
Kilde: opennet.ru
