Udgivelse af Linux-kernen 6.14

Efter to måneders udvikling præsenterede Linus Torvalds udgivelsen af Linux-kernen 6.14. Blandt de mest markante ændringer er: ntsync-driver med synkroniseringsprimitive fra Windows NT, justering af belastningsbalancering af læseoperationer i Btrfs RAID1, understøttelse af reflink i XFS i realtime-tilstand, mulighed for ikke-cacheret bufferindgang/udgang, dmem cgroup til begrænsning af GPU-hukommelse, implementering af io_uring i FUSE, delegation af attributter i NFS, support for atomar skrivning i Device mapper, acceleration af symbolske links, styring af muligheden for at køre scripts, understøttelse af Qualcomm Snapdragon 8 Elite-chips, driver til AMD NPU.

Den nye version inkluderer 12115 rettelser fra 1984 udviklere, patchens størrelse er 39 MB (ændringerne berørte 10170 filer, tilføjet 531586 linjer kode, fjernet 235999 linjer). I den forrige udgave var der 14172 rettelser fra 2086 udviklere, patchens størrelse var 46 MB. Omtrent 41% af alle ændringerne i 6.14 er relateret til enhedsdrivere, cirka 13% af ændringerne har relation til opdatering af hardware-specifik kode, 14% vedrører netværksstakken, 7% om filsystemer og 4% af interne kerneunderstøttelser.

De vigtigste nyheder i kernen 6.14:

  • DiskSubsystem, input/output og filsystemer
    • I Btrfs-filsystemet blev der tilføjet understøttelse for nye metoder til belastningsbalancering af læseoperationer mellem de lagringsenheder, der indgår i RAID1-arrayet. Udover den tidligere belastningsfordeling baseret på proces-id'er (pid) tilbyder den nye version tre nye balanceringsmetoder: "rotation" (ensartet belastningsfordeling på tværs af alle lagringsenheder, denne tilstand er som standard aktiveret); "latency" (fordeling under hensyntagen til forsinkelser, kan være nyttig ved fejl eller ustabil drift af lagringsenheder); devid (manuelt kontrol). For at ændre balanceringsmetoden er der tilføjet et interface "\/sys\/fs\/btrfs\/\/read_policy". Blandt andre ændringer i Btrfs er implementeringen af ioctl FS_IOC_READ_VERITY_METADATA.
    • En tilstand for ikke-cachet bufferinput/output er blevet tilføjet, hvor data fjernes fra sidecachen straks efter, at læse- eller skriveoperationerne er afsluttet. Ændringen kan være nyttig, når der anvendes meget hurtige lagringsenheder, da caching af operationer med dem vil være overflødig. For sådanne enheder tillader den nye tilstand at undgå unødvendigt hukommelsesforbrug fra sidecachen uden at skulle bruge en kompleks direkte input/output-API.
    • I fsnotify, mekanismen til at spore ændringer i filsystemet, er der tilføjet en ny hændelse FS_PRE_ACCESS, der genereres før adgang til filindholdet. Hændelsen behandles synkront, hvilket betyder, at kernen sender hændelsen og venter på et svar. Hvis der modtages et svar, udføres operationen, mens systemopkaldet returnerer en fejlkode til brugerrummet, hvis der opstår en fejl. Ved hjælp af FS_PRE_ACCESS kan processer i brugerrummet for eksempel arrangere udfyldning af en fil, efterhånden som data bliver klar fra langsom lagring.
    • I FUSE-subsystemet, der muliggør oprettelse af implementeringer af filsystemer i brugerrummet, er der tilføjet support til dataudveksling mellem kernen og handleren i brugerrummet ved hjælp af io_uring input/output-mekanismen. Ændringen giver mulighed for at forbedre ydeevnen i FUSE ved at reducere kontekstskift mellem kernen og brugerrummet.
    • I XFS-filsystemet er muligheden for at anvende reverse-mapping (rmap) i en tilstand med forudsigelige forsinkelser ('realtime device') blevet tilføjet. Reverse-mapping muliggør at identificere, hvilken fil der anvender den angivne blok på lagringsenheden. Ved hjælp af rmap er der i XFS for realtime-tilstanden implementeret support til reflink-operationen, der gør det muligt at oprette kopier af filer ved at klone filmetadata og oprette en henvisning til eksisterende data uden faktisk at kopiere dem.
    • I VFS er der implementeret caching af størrelsen af symbolske links, hvilket har ført til en 1,5% hurtigere udførelse af readlink-operationen (i testen med /initrd.img i ext4). Caching er aktiveret i filsystemerne ext4 og tmpfs.
    • Implementeringen af NFSv4.2 har tilføjet understøttelse af delegering af filattributter, hvilket gør det muligt at administrere sådanne filattributter som ændringsdato (mtime) på NFS-klienten uden behov for at nulstille ændringerne på serveren. Desuden er understøttelsen af protokollen "LOCALIO" forbedret, hvilket muliggør at bestemme, om klienten og NFS-serveren er på samme vært for at implementere relevante optimeringer, såsom brug af direkte ind-/udskrivning (Direct I/O) af klienten.
    • Ydelsen af læseoperationer i filsystemer som NETFS, CIFS og AFS (Andrew File System) er blevet forbedret.
    • I Squashfs er der tilføjet en tilstand for direkte indlæsning af blokke i sidecache (SQUASHFS_FILE_DIRECT), hvilket muliggør undgåelse af en separat read_page-cache. Ændringen har reduceret den mængde hukommelse, der bruges under arbejdet med Squashfs.
    • Der er implementeret en flag i systemopkaldet statx() kaldet STATX_DIO_READ_ALIGN for at bestemme det nødvendige justering for læseoperationer fra en fil.
    • I filsystemet Bcachefs er formatspecifikationerne for diskstrukturer blevet opdateret og stabiliseret. Enhver fremtidig ændring i formatet vil blive betragtet som valgfrie og vil blive implementeret som optionale tilføjelser. Hastigheden for integritetskontrol af filsystemet er blevet betydeligt forbedret. Derudover er der forbedret læseadgangen i skrivebeskyttet tilstand; problemer, der førte til adgang til hukommelse efter frigivelse (use after free), er blevet løst; problemer med reflink-pegepinde i fsck er blevet løst; og behandlingen af transaktionsgenstart er blevet rettet.
    • Modulet md-linear, som er designet til at samle blok-enheder, er blevet tilbageført. Dette modul blev tidligere erklæret forældet og fjernet fra kerne 6.8, men det viste sig at være efterspurgt og er derfor nu genoprettet.
    • Filsystemerne F2FS og SQUASHFS er blevet overført til brug af hukommelsessider (page folios).
    • Filsystemerne OCFS2 og DLMFS er blevet overført til brug af ny API til montering af partitioner.
    • I driveren null_blk er der implementeret attributten "rotational", som kan sættes via configfs og simulerer arbejdet med en enhed baseret på roterende diske for at lette test af kernelens funktioner.
    • I Device mapper-systemet og i modulerne dm-mirror, dm-io, dm-table, dm-linear, dm-stripe og dm-raid1 er der implementeret understøttelse af atomisk skrivning.
  • Hukommelse og systemtjenester
    • Integrationen i kernen af ntsync-driveren, der implementerer det symbolske enhed \/dev\ntsync og et sæt primitive for synkronisering anvendt i Windows NT-kernen, er nu afsluttet. Implementeringen af sådanne primitive på kernniveau gør det muligt at væsentligt forbedre ydeevnen for Windows-spil, der køres ved hjælp af Wine. Ydeevneforøgelsen opnås ved at eliminere omkostningerne forbundet med brugen af RPC i brugerrummet. Oprettelsen af en separat driver til Linux-kernen skyldes besværet ved korrekt implementering af NT-synkroniserings-API'et oven på eksisterende primitive i kernen.
    • En ny DMEM cgroup-controller er tilføjet til separat registrering af hukommelsesområder for enheder som GPU'er. DMEM giver mulighed for at oprette separate cgroups for forskellige opgaver, der arbejder med GPU'en, så de kan køre uden at påvirke hinanden. Denne nye funktion løser problemet med tvangsafslutning af operationer med GPU, når tilgængelig hukommelse er udtømt, takket være separat registrering af den reflekterede GPU-hukommelse og den hukommelse, der anvendes af CPU-driverne.
    • Optimeringer er blevet foretaget for skaleringen af flush-operationen af TLB-cachen (Translation Lookaside Buffer), som anvendes til at fremskynde konverteringen af virtuelle adresser til fysiske. De tilføjede optimeringer indebærer forsinket opdatering af visse data strukturer under kontekstskift, hvilket gør det muligt at forbedre ydeevnen ved gennemførelse af visse tests.
    • Ydeevnen af MGLRU-mekanismerne (Multi-Generational LRU), som anvendes til at bestemme, hvilke hukommelsessider der er i brug, og hvilke der kan udskiftes til swap-området, er blevet forbedret.
    • Overførslen af ændringer fra Rust-for-Linux-grenen er fortsat, relateret til brugen af Rust som det andet sprog til udvikling af drivere og kerne-moduler (Rust-support er ikke aktiveret som standard, og fører ikke til, at Rust bliver en obligatorisk byggeafhængighed for kernen). Der er givet mulighed for at bruge makroen 'derive(CoercePointee)' i kernekoden, som muliggør brug af smarte pointers med trait-objekter. Rust-bindings til PCI, platforme, Open Firmware, symboliske enheder samt nogle input/output-funktioner er inkluderet i kernen. Greg Kroah-Hartman, der er ansvarlig for support af den stabile Linux-kernegren, har karakteriseret den nuværende tilstand som 'næsten klar til at skrive en rigtig driver i Rust'.
    • I bygge-scenarierne er der foreslået ny kode til at generere versioner af debug-symboler til indlæste moduler, som nu bruger information fra debug-poster i DWARF-format i stedet for at analysere kildekoden direkte. Ændringen muliggør versionering af debug-symboler for moduler skrevet i Rust. Den gamle implementering er også efterladt i kernen, og valget af generator foretages på niveauet for byggeindstillinger.
    • For PowerPC-arkitekturen er der implementeret understøttelse af lazy preemption-mode (PREEMPT_LAZY), som svarer til fuld preemption-mode ('full preemption') for realtime-opgaver (RR/FIFO/DEADLINE), men forsinker preemption af normale opgaver (SCHED_NORMAL) indtil tic-grænsen.
    • Underperformance-profileringssystemet 'perf' har fået tilføjet understøttelse af energiforbrugstællere for AMD-processorer. Der er tilføjet mulighed for drift på systemer med op til 2048 CPU-kerner.
    • Der er givet mulighed for at bruge sysctl-parameteren pid_max med process-id-namespace (ID namespace). Parameteren pid_max er designet til at begrænse den maksimale værdi for process-id'er (PID) og kan nu bruges til at begrænse det maksimale antal processer, der kan køre i det angivne namespace. Behandlingen af parameteren sker hierarkisk, dvs. begrænsninger i ydre namespaces gælder for indlejrede namespaces.
    • Når execveat systemopkaldet bruges, vil filnavnet for den kørende fil nu blive vist i filsystemet /proc i stedet for filbeskriverens nummer.
    • Kildekoden i kernen (i mappen samples/vfs) er blevet udvidet med værktøjet mountinfo, der demonstrerer brugen af systemopkaldene statmount() og listmount().
    • I BPF-under-systemet er der tilbudt nye funktioner bpf_local_irq_save() og bpf_local_irq_restore() til midlertidigt at deaktivere afbrydelser på den lokale CPU. Funktionerne kan anvendes til at implementere strukturer, hvis behandling ikke skal suspenderes ved afbrydelser.
    • I systemopkaldet madvise() er der sikret frigivelse af sidenoteringstabel for hukommelse, der er knyttet til det frigivne adresseområde ved brug af flagene MADV_DONTNEED og MADV_FREE, da tomme hukommelsessider i visse situationer kan optage betydelig hukommelse.
    • For OpenRISC-arkitekturen er der implementeret støtte til genstartelige sekvenser (rseq, restartable sequences), der er designet til hurtig atomisk udførelse af operationer, som ved afbrydelse fra en anden tråd nulstilles og forsøges igen.
    • Koden er blevet reorganiseret med implementeringen af algoritmerne CRC32 og CRC-T10DIF, som ikke længere overlapper med crypto-subsystemet og kaldes direkte fra bibliotekets interface. Ændringen har gjort det muligt at forenkle koden og forbedre dens effektivitet.
    • Der er tilføjet et interface til io_uring asynkron input/output systemet for at overføre yderligere metadata om integritet ved udførelse af læse- og skriveoperationer.
  • Virtualisering og sikkerhed
    • I execveat systemopkaldet er flaget AT_EXECVE_CHECK tilføjet, hvilket muliggør kontrol af filens udførbarhed uden faktisk at køre den, men under hensyntagen til sikkerhedspolitikker, adgangsrettigheder og aktive LSM-moduler. Til brug sammen med AT_EXECVE_CHECK er de sikre bitflag SECBIT_EXEC_RESTRICT_FILE og SECBIT_EXEC_DENY_INTERACTIVE foreslået, som kan bruges til at begrænse udførelsen af scriptfiler i tolknings-sprog. Flaget SECBIT_EXEC_RESTRICT_FILE pålægger linkere og tolknere at anvende AT_EXECVE_CHECK muligheden for at tjekke udførbarheden, mens flaget SECBIT_EXEC_DENY_INTERACTIVE forhindrer behandling af interaktive kommandoer. Den centrale idé i ændringen er muligheden for at anvende sikkerhedspolitikker ikke kun til traditionelle udførbare filer, men også til tekstfiler med scripts, der kan indlæses via kørsel af en fortolker (dvs. forbud mod udførelse kan gennemføres ikke kun ved kørsel af './script.sh' men også ved udførelse i form af 'sh script.sh').
    • På x86-systemer er der implementeret støtte til beskyttede tidsstællere for gæstesystemer, som forhindrer ændring af systemuret i gæstesystemet fra værtsmiljøet. Muligheden er implementeret ved hjælp af AMD SEV (Secure Encrypted Virtualization)-mekanismen, der anvendes i virtualiseringssystemer til beskyttelse virtual machines mod indblanding fra hypervisoren eller administratoren af værtsystemet.
    • SELinux-mandatkontrolsystemet har fået tilføjet støtte til xperm-regler, der gør det muligt at binde SELinux-politikker til specifikke ioctl()-opkald eller netlink-beskeder.
    • Til verifikation af kernelmoduler med digitalt underskrift anvendes der som standard SHA512-algoritmen i stedet for SHA1.
    • I driverne for gæstesystemer VirtualBox er der tilføjet støtte til ARM64-arkitekturen.
    • I hypervisoren KVM er der fortsat arbejde med at implementere Intel TDX (Trusted Domain Extensions)-mekanismen til kryptering af hukommelse i gæstesystemer.
    • I virtio_blk er der tilføjet støtte til fejlgendannelsestilstand.
  • Netværkssubsystem
    • I implementeringen af RxRPC-protokollen er det blevet muligt at anvende større UDP-rammer for at øge båndbredden.
    • For TCP er der tilføjet støtte til RACK-TLP-algoritmen til bestemmelse af pakkebetydning.
    • Der er tilføjet en ny sysctl-parameter tcp_tw_reuse_delay, der fungerer i tilknytning til navnerummet (network namespace) og gør det muligt at bestemme den forsinkelse, der tilføjes, før systemet kan genbruge portnummeret efter lukningen af en TCP-socket.
    • Der er tilføjet mulighed for at vælge en nøjagtig tidsleverandør (PTP) til dannelse af tidsstempler på PHY- og MAC-niveau.
    • For IPsec er der implementeret støtte til mekanismen for aggregering og fragmentering af indkapslede IP-pakker — IP-TFS/AGGFRAG (IP Traffic Flow Security/Aggregation and Fragmentation Mode for Encapsulating Security Payload).
    • I netværkssocket-systemet er der tilføjet støtte til overførsel af prioriteringsinformation (SO_PRIORITY) i form af kontrolbeskeder (cmsg — control messages). For netværkssocket-systemet er der tilføjet en mulighed SO_RCVPRIORITY, der aktiverer overførsel af prioriteringsinformation ved funktionen recvmsg().
  • Udstyr
    • Der er tilføjet en driver til amdxdna for AMD NPU (Neural Processing Unit) acceleratorer integreret i CPU'en, baseret på XDNA-arkitekturen, designet til at accelerere operationer relateret til maskinlæring. NPU baseret på XDNA-arkitekturen leveres i serierne 7040 og 8040 af AMD Ryzen-processorerne, AMD Alveo V70 acceleratoren og SoC AMD Versal.
    • I driver i915 har fået tilføjet identifikatorer for nye GPU'er, implementeret en håndterer for HDMI-initieringsfejl, og forbedret pålideligheden af GPU-motorens nulstilling på Haswell og ældre systemer.
    • Arbejdet med drm-driveren (Direct Rendering Manager) Xe fortsætter for GPU'er baseret på Intel Xe-arkitekturen, som anvendes i Intel Arc-grafikkort og integreret grafik siden Tiger Lake-processorerne.
    • I Nouveau driveren tilføjet mulighed for overførsel af buffer med GSP-RM logs via debugfs.
    • I AMDGPU-driveren er der implementeret understøttelse af DRM panic-mekanismen, der viser noget der ligner en 'blå skærm af død' ved fejl. Forberedelserne fortsætter til understøttelse af den kommende Radeon RX 9000-serie grafikkort baseret på RDNA4-arkitekturen. Understøttelsen af DCN 3.5, GG 9.5, IH 4.4, PSP 13.x, SMU 13.x, VCN 5.x, JPEG 5.x, GC 12.x, DC FAMS, RAS og ISP er blevet opdateret.
    • I DRM-driveren msm (GPU Qualcomm Adreno) er der tilføjet understøttelse for Qualcomm SM6150 (QCS615) platformen.
    • I DRM-driveren panfrost tilføjet support til SoC MediaTek MT8188 med Mali-G57 GPU.
    • I DRM-driveren vc4 tilføjet support til SoC Broadcom BCM2712 (Raspberry Pi 5).
    • I vfio-driveren nvgrace-gpu er der tilføjet understøttelse af NVIDIA Grace Blackwell 200-chips.
    • Driveren til Intel THC (Touch Host Controller) er blevet inkluderet, som anvendes til interaktion med touchskærme og touchpads på visse bærbare computere. Understøttelsen af Wacom-enheder med PCI-interface er blevet tilføjet. Understøttelse af QH Electronics-spilcontrollere er også tilføjet.
    • Der er tilføjet understøttelse for ARM-platforme, SoC og enheder: Qualcomm Snapdragon 8 Elite (SM8750), Qualcomm Snapdragon AR2 (SAR2130P), Qualcomm IQ6/IQ8, Snapdragon 425 (MSM8917), Samsung Exynos 9810, Blaize BLZP1600, Microchip SAMA7D65, Renesas R-Car V4H ES3.0, Renesas RZ/G3E. Understøttelse af SoC SpacemiT K1 baseret på RISC-V arkitekturen er også blevet tilføjet.
    • I ALSA-lydsystemet er API'erne rawmidi og sequencer blevet udvidet til MIDI 2.0. I API'et til udflytning af kompressionsoperationer er der tilføjet understøttelse for ASRC (Asynchronous Sample Rate Conversion).
    • Der er tilføjet understøttelse af lydsystemer fra enhederne Allwinner suinv F1C100s, Awinc AW88083, Realtek ALC5682I-VE, TAS2781, Focusrite Scarlett 4. generation 16i16, 18i16 og 18i20. Understøttelse af trådløse hovedtelefoner SteelSeries Arctis 9 er også tilføjet.

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