Udgivelse af Linux-kernen 6.8

Efter to måneders udvikling præsenterede Linus Torvalds udgivelsen af Linux-kernen 6.8. Blandt de mest markante ændringer: Xe-driveren til Intel GPU'er, en beskyttelsesmode for blokenheder med indkoblede filsystemer, Deadline server opgaveplanlægningsmekanismen, automatisk optimering af sammenlægning af identiske hukommelsessider, den første driver i Rust, systemopkald som listmount og statmount, fjernelse af bpfilter og SLAB, guest_memfd mekanismen i KVM, samt profilering af dataadgang.

I den nye version er der indarbejdet 15.641 rettelser fra 2018 udviklere, patch-størrelsen er 44 MB (ændringerne påvirkede 12.212 filer, 663.864 nye kodelinjer blev tilføjet, og 339.094 kodelinjer blev fjernet). I forrige udgave var der 18.405 rettelser fra 2066 udviklere, og patch-størrelsen var 72 MB. Omkring 42% af alle ændringerne præsenteret i 6.8 relaterer sig til enhedsdrivere, cirka 15% har relation til opdateringer af kode specifik for hardwarearkitekturer, 14% vedrører netværksstakken, 6% med filsystemer, og 3% med interne kerneundersystemer.

I Git-repositoriet med kernen 6.8 er der 9,996 millioner objekter, hvilket indikerer, at den næste kerneudgave, 6.9, vil overgå milepælen på 10 millioner git-objekter. Tidligere korrelerede skiftet fra branchnumre 3.x og 4.x godt med antallet af git-objekter i repositoriet — kernen 3.0 blev udgivet, da repositoriet havde cirka 2 millioner objekter, og kernen 4.0 — 4 millioner objekter. I 2019 brød udgivelsen af 5.0 denne logiske kæde, da repositoriet ved dens dannelse indeholdt cirka 6,5 millioner git-objekter.

De vigtigste nyheder i kernen 6.8:

  • DiskSubsystem, input/output og filsystemer
    • Der er tilføjet en rettet tilstandsblokering for direkte skrivning på blokenheder, hvor der findes monterede filsystemer (når tilstanden er aktiveret, kan root-brugeren ikke ændre filsystemet ved manipulation på blokniveau). Som standard er tilstanden deaktiveret og kræver angivelse af parameteren BLK_DEV_WRITE_MOUNTED ved kompilering. For partitioner med Btrfs fungerer blokeringen stadig ikke, da de nødvendige ændringer i Btrfs-koden endnu ikke er blevet accepteret.
    • Systemopkaldene listmount() og statmount() er blevet tilføjet, hvilket giver brugerrum adgang til detaljerede oplysninger om de monterede filsystemer.
    • I filsystemet XFS er der fortsat arbejdet på implementeringen af muligheden for at anvende værktøjet fsck til at kontrollere og rette op på identificerede problemer i online-tilstand, uden at det er nødvendigt at afmontere filsystemet.
    • I Ext4 for blokke, der er mindre end en hukommelsesside, er der aktiveret kaldet dioread_nolock, hvilket gør det muligt at forbedre ydeevnen ved at eliminere unødvendige låsninger. Nogle funktioner er blevet oversat til at bruge sidenes folios.
    • I Btrfs er der tilføjet støtte til monteringsflaget „nospace_cache“ for at deaktivere cachen for ledige blokke. Nogle funktioner er blevet oversat til at bruge sidenes folios.
    • I filsystemet EROFS (Extendable Read-Only File System), designet til brug på partitioner, der er tilgængelige i skrivebeskyttet tilstand, er der tilføjet støtte til komprimering af subsekvenser og forbedret ydeevne i situationer med mangel på hukommelse.
    • I filsystemet F2FS er den støtte, der gives til zonede lagringsenheder, blevet forbedret (opdeling i zoner for grupper af blokke eller sektorer, hvor kun sekventiel tilføjelse af data er tilladt ved fuld opdatering af hele blokgruppen).
    • For SMB FS er der implementeret muligheden for at oprette blokke og symboliske enheds filer.
    • I Bcachefs er der tilføjet delvis støtte til kontrol og gendannelse af integriteten af monterede FS.
    • I device-mapper subsystemet er støtten til håndtererne MD_LINEAR, MD_MULTIPATH og MD_FAULTY blevet stoppet, idet de blev erklæret forældede i 2021.
  • Hukommelse og systemtjenester
    • I Zswap subsystemet er der tilføjet en aktiverbare mulighed for ved mangel på RAM at tvinge udlæsning til den faktiske swap-partition af „kolde“ hukommelsessider, som ikke er blevet adresseret og som sandsynligvis vil forblive uanvendte. Zswap udfører caching af de sideløbende sider, der skubbes ud til swap-partitionen, og opbevarer dem i RAM i komprimeret form, hvis det er muligt uden at skubbe dem til den faktiske ukomprimerede swap-partition på disken. De ændringer, der er foretaget ved mangel på hukommelse, gør det muligt at reducere størrelsen af den opbevarede pool i RAM for Zswap og frigøre hukommelse til systemet.
    • I Zswap er der foreslået en ny tilstand, der fuldstændig deaktiverer den forsinkede skrivning (writeback) til den faktiske swap-partition, hvis skrivningen mislykkedes, og ikke frigiver de sider, der allerede er i Zswap-poolen, til swap-partitionen.
    • I planlæggeren er der tilføjet en SCHED_DEADLINE-server, som løser problemet med, at almindelige opgaver ikke får tilstrækkelige CPU-ressourcer under monopolisering af CPU'en af højt prioriterede (realtids) opgaver. For at forhindre monopolisering af CPU'en blev der tidligere brugt en mekanisme kaldet Realtime throttling, der forsøgte at reservere 5% til lavprioriterede opgaver, hvilket efterlod 95% af tiden til realtidsopgaver. Denne mekanisme var ikke tilstrækkelig, da almindelige opgaver i mange situationer ikke fik ret til processtid. SCHED_DEADLINE-serveren implementerer en mere effektiv ressourcereservationsmekanisme.
    • I DAMON (Data Access MONitor), der gør det muligt at overvåge en proces' adgang til data i RAM (for eksempel kan man se, hvilke områder af hukommelsen en proces har anmodet om, og hvilke områder der forblev ubenyttede), er der tilføjet en mekanisme til automatisk justering af hukommelsesforbrugets aggressivitet baseret på angivne kvoter.
    • Der er tilføjet support til multi-størrelse store hukommelsessider (mTHP — multi-size Transparent Huge Pages), der gør det muligt at allokere hukommelse i blokke, der er større end standard siden, men mindre end traditionelle THP-sider.
    • Der er tilføjet support til store folier (page folios, samlede hukommelsessider) for anonym hukommelse (som ikke er bundet til et filsystem, for eksempel allokeret via malloc). Ændringen sigter mod at forbedre ydeevnen ved at allokere større hukommelsesblokke, når der anmodes om uallokerede hukommelsessider (page faults). For eksempel har brugen af store folier reduceret tiden til genopbygning af kernen med 5% (samt reduceret tiden brugt på kernen med 40%).
    • Konfigurationsfilen for kernen har fået tilføjet parameteren TRANSPARENT_HUGEPAGE_NEVER, der giver mulighed for at deaktivere brugen af store hukommelsessider (Transparent Huge Pages).
    • I systemopkaldet userfaultfd(), der giver mulighed for at oprette håndtere for anmodninger om uallokerede hukommelsessider (page faults) i brugerrummet, er der tilføjet operationen UFFDIO_MOVE, der tillader flytning af hukommelsessider i det virtuelle adresseområde under heap komprimering uden at udføre en sidesallokeringsoperation. I gennemførte tests tillod anvendelsen af UFFDIO_MOVE en reduktion i komprimeringstiden på 40% sammenlignet med brugen af UFFDIO_COPY.
    • Der er tilføjet en mekanisme kaldet «KSM advisor», der automatisk optimerer parametrene for subsystemet, der sammenfletter identiske hukommelsessider (KSM — Kernel Samepage Merging).
    • Overførslen af ændringer fra Rust-for-Linux-grenen er fortsat, som vedrører brugen af Rust som det andet sprog til udvikling af drivere og kernelmoduler (Rust-support er ikke aktiveret som standard og medfører ikke, at Rust bliver en obligatorisk byggeafhængighed for kernen). I den nye version er der inkluderet ændringer, der tilføjer en Rust-wrapper over abstractionsniveauet phylib, og som bruger denne wrapper-drivere ax88796b_rust, der understøtter PHY-interface til Ethernet-controlleren Asix AX88772A (100MBit). Funktionsmæssigt er Rust-driveren fuldt ud ækvivalent med den gamle ax88796b-driver skrevet i C, og kan bruges med netværkskort X-Surf 100, der har AX88796B-chippen. For LoongArch-arkitekturen er det muligt at skrive moduler på Rust. Der er sket et skift til at bruge Rust-version 1.74.1.
    • Der er tilføjet en BPF-tokenmekanisme, der gør det muligt at delegere håndtering af specifikke BPF-funktioner, såsom indlæsning af BPF-programmer eller oprettelse af BPF maps, til ikke-privilegerede processer i brugerrummet, hvor troværdigheden er bekræftet med et specifikt token.
    • Funktionaliteten af BPF-programverifikatoren er blevet udvidet.
    • Perf-nyttigheden har fået tilføjet understøttelse af dataprofilering, som muliggør overvågning af læsning og skrivning i datastrukturer, f.eks. med henblik på at identificere de feltder, der oftest ændres i strukturer. På systemer med processorer, der understøtter indsamling af information om hukommelsesoperationer (Intel, AMD, ARM), skal man bruge kommandoen «perf mem record» til at samle statistik, og for at generere en rapport om adgang til datastrukturer skal man bruge «perf annotate —data-type».
    • Der er sket en optimering af ydeevnen ved behandling af systemopkald på s390-arkitekturen (IBM Z), hvilket i tests har ført til en forkortelse af indgangen til systemopkald på cirka 11%.
    • Muligheden for at ændre størrelsen på trace buffers, der anvendes til at buffer information om trace events, der sendes til brugerrummet, er blevet tilføjet.
    • Den tidligere forældede hukommelsesfordelingsmekanisme SLAB er blevet fjernet, og i stedet anvendes kun SLUB i kerne. Årsagen nævnes som problemer med vedligeholdelse, eksisterende fejl i koden og duplication af funktionalitet med den mere avancerede allokator SLUB.
    • Under opbygningen af kernen er flaget “-Wmissing-prototypes” aktiveret, som genererer advarsler for kald til globale funktioner, der ikke har definition af prototype.
    • For RISC-V-arkitekturen på systemer, der understøtter SUSP SBI-udvidelsen, er der implementeret understøttelse af overgangen til dvaletilstand med opbevaring af status i RAM. Der er givet mulighed for at anvende systemkaldet riscv_hwprobe() for at få information om de understøttede udvidelser i RISC-V-instruktionssættet.
  • Virtualisering og sikkerhed
    • Der er tilføjet nye systemkald lsm_list_modules(), lsm_get_self_attr() og lsm_set_self_attr() til at vise listen over indlæste LSM-moduler (Linux Security Modules) og til at få/sette attributter for LSM-modulet. En ny struktur lsm_ctx er blevet tilføjet til kommunikation i LSM-konteksten mellem brugerrummet og kernen.
    • AppArmor-subsystemet er blevet overført til at anvende SHA-256 algoritmen til verifikation af regler i stedet for SHA-1 hashes.
    • Implementeringen af funktionen strlcpy() er blevet fjernet fra kernen, som blev inkluderet i C-biblioteket Glibc 3.38 om sommeren. Strlcpy er et alternativ til strncpy(), som indeholder beskyttelse mod buffer-overløb og altid sætter en afsluttende nul byte.
    • I hypervisoren KVM Der er tilføjet understøttelse af guest_memfd-subsystemet (guest-first memory), der tilbyder hukommelseshåndteringsfunktioner, som muliggør funktionalitet og optimeringer, der ikke kan opnås ved brug af den almindelige hukommelseshåndteringssubsystem. For eksempel giver guest_memfd mulighed for at allokere og spejle et hukommelsesområde til gæstesystemet, som ikke er tilgængeligt for værtsmiljøet, hvilket kan bruges til at organisere fortrolige beregninger.
    • For gæstesystemer, der kører under KVM-hypervisoren, er støtte til den i Intel-processorer tilbydes LAM (Linear Address Masking) aktiveret, hvilket muliggør brugen af en del af bitene i 64-bit pegepinde (fra 57 til 62 bit) til at gemme metadata, der ikke er relateret til adressering.
    • I hypervisor KVM har fået tilføjet support for 52-bit (LPA2) fysiske adresser til systemer baseret på ARM64-arkitektur. For x86-arkitektur er det muligt at bygge uden emulering af Hyper-V-hyperkald, hvilket gør det muligt at reducere kernenstørrelsen.
    • En iaa-driver (IAA Compression Accelerator) er blevet tilføjet for at accelerere komprimerings- og dekomprimeringsoperationer ved hjælp af DEFLATE-metoden, ved at udnytte mulighederne fra Intel Analytics Accelerator (IAA).
    • I hostmiljøet er der implementeret støtte til Intel TDX (Trusted Domain Extensions)-mekanismen, som gør det muligt at oprette beskyttede gæste-miljøer ved hjælp af KVM-hypervisoren, hvor hukommelsen krypteres. virtual machines.
    • I SELinux er SID-identifikatoren 'init' blevet tilføjet for at identificere processer, der kører i opstartsfasen, før SELinux-politikkerne anvendes. Grænsefladen /sys/fs/selinux til styring af SELinux er forbedret.
  • Netværkssubsystem
    • Der er foretaget en lavniveauomorganisering af de grundlæggende netværksdatastrukturer, udført for at øge effektiviteten af cachelagringen. Tidligere var felterne i netværksstakken socks, netdev, netns og mibs organiseret i rækkefølge af tilføjelse, hvilket begrænsede anvendelsen af processor-cache. Genovervejelsen af placeringen af variabler i strukturerne har resulteret i en markant stigning i TCP-ydeevne, takket være minimal brug af cachelinjer under dataoverførsel og optimering af adgang til variabler. Ved håndtering af mange parallelle TCP-forbindelser kan hastigheden øges med op til 40%.
    • Subsystemet bpfilter, der brugte BPF til pakke-filtrering, er blevet fjernet. Bpfilter blev introduceret i version 4.18, men nåede aldrig et niveau, der var egnet til bred anvendelse. I de senere år har koden til bpfilter i kernen ikke været under udvikling, da udviklingen fortsatte af Facebook i et separat repository.
  • Udstyr
    • Den nye Xe DRM-driver (Direct Rendering Manager) er inkluderet til GPU'er baseret på Intel Xe-arkitekturen, som anvendes i Intel Arc-grafikkort og integreret grafik, der starter med Tiger Lake-processorerne. Xe-driveren er designet som grundlaget for at aktivere driften af nye chips uden at være bundet til kode, der understøtter ældre platforme. Driveren er bygget ved hjælp af en ny arkitektur, hvor eksisterende komponenter af DRM-subsystemet samt generiske komponenter fra i915-driveren, der ikke er bundet til specifikke GPU'er, såsom koden til interaktion med skærme, hukommelsesmodellen og implementeringen af execbuf, anvendes mere aktivt. I Mesa er OpenGL- og Vulkan-arbejde oven på Xe-driveren implementeret på baggrund af ændringer foretaget i de eksisterende Mesa-drivere Iris og ANV.
    • I i915-driveren er arbejdet med at implementere understøttelse af Intel LunarLake-chips (Xe 2) fortsat. Understøttelsen af Intel Meteor Lake-chips er forbedret.
    • I Nouveau-driveren er der implementeret en indstilling til standardmæssigt at bruge GSP-firmwarefunktioner til interaktion med NVIDIA GPU'er baseret på Turing- og Ampere-mikroarkitekturer, hvor GPU-initiering og styring udføres af en separat GSP (GPU System Processor) mikrocontroller. Når indstillingen er aktiveret, vil driveren fungere gennem firmwarekald i stedet for direkte programmering af hardwareinteraktionsoperationer.
    • I AMDGPU-driveren er der tilføjet understøttelse af ACPI WBRF og VPE DPM, behandlingen af PCIe-båndbredde er ændret, der anvendes 64-bit sekventielle numre i de anvendte synkroniseringskøer, specifikke AMD-funktioner til farvestyring er tilføjet, og der er løst et problem med at gå i dvale.
    • Der er tilføjet en tidlig implementering af driveren til Broadcom VideoCore 7.1 GPU'en, der anvendes i Raspberry Pi 5-kort.
    • Der er tilføjet en driver til PowerVR 6 GPU-serien baseret på Rogue mikroarkitekturen fra Imagination Technologies.
    • Understøttelse af Thunderbolt/USB4-controllere, der er integreret i chips baseret på Intel Lunar Lake-mikroarkitekturen, er blevet tilføjet.
    • Der er tilføjet drivere til kameraer, der bruges i SoC Starfive, GalaxyCore GC2145/GC0308, Chips&Media Wave og THine THP7312.
    • Understøttelse af NSO (Nintendo Switch Online) gamecontrollere er blevet tilføjet — varianter af gamle controllere fra SNES (Super Nintendo), Genesis og N64 (Nintendo 64), tilpasset til Nintendo Switch. Der er tilføjet en driver til Adafruit Seesaw gamepads. I xpad-driveren er der tilføjet understøttelse af Lenovo Legion Go-controllere.
    • Driver dts har fået support til spilleenhederne Powkiddy RK2023, Powkiddy X55 og Anbernic RG351V.
    • Support til lydsystemer, der bruges i NXP i.MX8m MICFIL, Qualcomm SM8250, AMD ACP5x, Intel Arrow Lake, SM8550, SM8650 og X1E80100-chips, er blevet tilføjet.
    • AMD har foretaget ændringer vedrørende support til den kommende processorserie baseret på den nye mikroarkitektur Zen 5.
    • Der er tilføjet support for ARM64 SoC: Qualcomm SM8650 (Snapdragon 8 Gen 3), Qualcomm X1E80100 (Snapdragon X Elite), Samsung Exynos Auto v920, Google GS101 (Tensor G1), MediaTek MT8188 og Unisoc UMS9620 (Tanggula 7).
    • Support til ARM-platforme og enheder er blevet tilføjet: Huashan Pi, Microsoft Lumia, HTC One Mini 2, Motorola MotoG 4G, Huawei Honor 5X/GR5, Anbernic RG351V, Powkiddy RK2023, Powkiddy X55, ComXpress baseret på Marvell CN913x, Lenovo Chromebook, Asus og Acer baseret på Mediatek MT8183, Toradex Verdin AM62, og boards baseret på Allwinner H616/H618.
    • Support til ARM11 ARMv6K SMP-processorer er blevet opsagt.

Samtidig har den latinamerikanske Free Software Foundation udviklet en version af det helt frie kernel 6.8 — Linux-libre 6.8-gnu, der er renset for firmware og drivere, der indeholder ikke-frie komponenter eller kodeområder, hvis anvendelse er begrænset af producenten. I version 6.8 er kode til rensning af blobs blevet opdateret i forskellige drivere og undersystemer. Der er blevet renset drivere til Intel qat_420xx, Imagination PowerVR, Intel Xe, Chips&Media Wave5, Intel VSC, Aquantia PHY og Realtek rtw8922a. På grund af fjernelse af drivere fra kernen er rensning af drivere som atmel, hermes, orinoco_usb, libertas_cs og zd1201 blevet stoppet. Rensning af blob-navne i dts-filer (devicetree) til ARM- og Aarch64-arkitekturer er også blevet udført. Problemer med rensning af driveren i915 er blevet løst.

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster