Efter to måneders udvikling præsenterede Linus Torvalds udgivelsen af Linux-kernen 5.19. Blandt de mest bemærkelsesværdige ændringer er: støtte til processorarkitekturen LoongArch, integration af BIG TCP-patches, on-demand tilstand i fscache, fjernelse af kode til støtte for a.out-formatet, mulighed for at anvende ZSTD til komprimering af firmware, interface til håndtering af hukommelsesudvisning fra brugerrummet, forbedret pålidelighed og ydeevne af pseudo-tilfældige talgeneratorer, samt støtte for Intel IFS (In-Field Scan), AMD SEV-SNP (Secure Nested Paging), Intel TDX (Trusted Domain Extensions) og ARM SME (Scalable Matrix Extension).
I sin annonce meddelte Linus, at den næste version af kernen sandsynligvis vil få nummer 6.0, da der i 5.x-grenen er akkumuleret tilstrækkeligt mange udgivelser til at ændre det første ciffer i versionsnummeret. Ændringen af nummereringen sker af æstetiske grunde og er et formelt skridt, der fjerner ubehaget ved at have et stort antal udgivelser i serien.
Linus nævnte også, at han havde brugt en Apple-laptop baseret på ARM64-arkitekturen (Apple Silicon) med et Linux-miljø baseret på Asahi Linux-distributionen til at forme udgivelsen. Dette er ikke Linus' primære arbejdsstation, men han brugte denne platform til at teste dens egnethed til arbejde med kernen og for at være sikker på, at han kunne udgive kerner undervejs med en let laptop. For mange år siden havde Linus erfaring med at bruge Apple-hardware til udvikling - han brugte engang en computer baseret på CPU ppc970 og en Macbook Air.
Den nye version har accepteret 16.401 rettelser fra 2.190 udviklere (i den forrige udgave var der 16.206 rettelser fra 2.127 udviklere), patchstørrelsen er 90 MB (ændringerne berørte 13.847 filer, 1.149.456 linjer kode blev tilføjet, 349.177 linjer blev fjernet). Omkring 39% af alle de fremlagte ændringer i 5.19 relaterer til enhedsdrivere, cirka 21% af ændringerne vedrører opdatering af kode, der er specifik for hardware-arkitekturer, 11% relaterer til netværksstakken, 4% til filsystemer og 3% til interne subsystemer i kernen.
De vigtigste nyheder i kernen 5.19:
- DiskSubsystem, input/output og filsystemer
- EROFS-filsystemen (Enhanced Read-Only File System), designet til brug på partitioner, der kun er tilgængelige i skrivebeskyttet tilstand, er blevet oversat til brug af fscache-subsystemet, der tilbyder datacaching. Denne ændring har betydeligt øget ydeevnen på systemer, hvor mange containere startes fra et EROFS-baseret billede.
- Fscache-subsystemet har fået tilføjet en on-demand læsetilstand, der aktiveres for at optimere EROFS. Den nye tilstand gør det muligt at organisere caching af læsninger fra FS-billeder, der findes i det lokale system. I modsætning til den oprindeligt tilgængelige tilstand, der fokuserede på caching i det lokale filsystem af data, der overføres via netværksfilsystemer, delegerer on-demand-tilstanden funktionerne til dataudvinding og caching til en separat baggrundsproces, der kører i brugerrummet.
- XFS muliggør lagring af milliarder af udvidede attributter i i-node. Maksimalt antal extenter for én fil er steget fra 4 milliarder til 247. En tilstand for atomisk opdatering af flere udvidede attributter for en fil er blevet implementeret.
- I Btrfs-filsystemet er arbejdet med låse blevet optimeret, hvilket har givet en ydeevneforøgelse på cirka 7% ved direkte skrivning i nowait-tilstand. Ydeevnen for operationer i NOCOW-tilstand (uden copy-on-write) er steget med cirka 3%. Belastningen på sidcache er blevet reduceret under brugen af kommandoen 'send'. Den mindste størrelse af under-sider er reduceret fra 64K til 4K (det er muligt at bruge under-sider, der er mindre end kernesider). Der er sket et skift fra brugen af en basis træstruktur (radix tree) til algoritmen XArrays.
- I NFS-serveren er tilføjet en tilstand for forlængelse af låsesituationens opretholdelse, som er oprettet af en klient, der er holdt op med at svare på anmodninger. Den nye tilstand tillader, at låsens oprydning kan forsinkes i op til en dag, hvis en anden klient ikke anmoder om en konkurrerende lås. I normal tilstand rydder låsen op 90 sekunder efter, at klienten er holdt op med at svare.
- I fanotify FS-hændelsessporingssystemet er FLAG FAN_MARK_EVICTABLE blevet implementeret, som gør det muligt at deaktivere fastgørelsen af mål-i-node i cachen, eksempelvis for at ignorere undertræer uden at fastholde deres dele i cachen.
- Driveren til FAT32-filsystemet har fået tilføjet støtte til at hente information om oprettelsestidspunktet for filer via systemopkaldet statx med en mere effektiv og funktionel version af stat(), der returnerer udvidet information om filen.
- Der er foretaget betydelige optimeringer i exFAT-driveren, der relaterer sig til samtidig rensning af en sektorgroup i aktiv ‘dirsync’-tilstand i stedet for sekventiel sektor-rensning. Som følge af reduktionen af antal blokforespørgsler efter optimeringen er ydeevnen ved oprettelse af et stort antal mapper på SD-kortet steget med mere end 73-85% afhængigt af clusterstørrelsen.
- Det første korrigerende opdatering til ntfs3-driveren er blevet tilføjet til kernen. Siden ntfs3 blev inkluderet i kerneversion 5.15 i oktober sidste år, har driveren ikke været opdateret, og forbindelsen til udviklerne er blevet tabt, men nu er udviklerne genoptaget deres publicering af ændringer. I de foreslåede patches er der løst fejl, der førte til hukommelseslækager og krasj, problemer med udførelse af xfstests, oprydning af ubrugt kode og rettelse af tastefejl.
- OverlayFS har fået muligheden for at mappe bruger-id'er for monterede filsystemer, der anvendes til at matche filer tilhørende en bestemt bruger på et monteret fremmed partition med en anden bruger i det nuværende system.
- Hukommelse og systemtjenester
- Der er tilføjet indledende støtte til LoongArch-kommandoarkitekturen, der anvendes i Loongson 3 5000-prosessorer og implementerer en ny RISC ISA, der ligner MIPS og RISC-V. LoongArch-arkitekturen er tilgængelig i tre varianter: en skåret 32-bit (LA32R), en almindelig 32-bit (LA32S) og en 64-bit (LA64).
- Koden til at støtte a.out executable-filformatet er blevet fjernet, som blev henført til forældede i version 5.1. a.out-formatet anvendes ikke længere på Linux-systemer, og generering af a.out-filer understøttes ikke af moderne værktøjer i de standardkonfigurationer for Linux. En loader til a.out-filer kan implementeres helt i brugerrum.
- Støtte til bootmuligheder specifikke for x86-arkitekturen er ophørt: nosep, nosmap, nosmep, noexec og noclflush).
- Støtte til den forældede CPU-arkitektur h8300 (Renesas H8/300), som længe har været uden vedligeholdelse, er ophørt.
- Udvidede muligheder relateret til reaktion på opdagelse af split locks, der opstår ved adgang til ikke-justerede data i hukommelsen, fordi data ved udførelse af atomare instruktioner krydser to cache-linjer i CPU'en. Sådanne låse kan føre til betydelige fald i ydeevnen. Tidligere gav kernerne som standard en advarsel med oplysninger om den proces, der forårsagede låsen, men nu vil den problematiske proces desuden blive bremset for at bevare ydeevnen for resten af systemet.
- Understøttelse af den i Intel-processorer implementerede mekanisme IFS (In-Field Scan), der muliggør udførelse af lavniveau diagnostiske tests af CPU'en, som kan opdage problemer, der ikke registreres af de normale værktøjer, baseret på fejlkorrigeringskoder (ECC) eller paritetsbits, er blevet tilføjet. De udførte tests præsenteres i form af en flash, der ligner opdateringer af mikrokoden. Testresultaterne er tilgængelige via sysfs.
- Muligheden for at indbygge en bootconfig-fil i kernen er blevet tilføjet, hvilket muliggør bestemmelse af kerneindstillingsparametre gennem en konfigurationsfil udover kommandolinjeindstillinger. Indbygningen sker ved hjælp af build-indstillingen 'CONFIG_BOOT_CONFIG_EMBED_FILE="/PATH/TO/BOOTCONFIG/FILE"'. Tidligere blev bootconfig defineret ved at vedhæfte den til initrd-billedet. Indbygge i kernen tillader brug af bootconfig i konfigurationer uden initrd.
- Muligheden for at anmode om firmware, komprimeret med Zstandard-algoritmen, er blevet implementeret. Et sæt kontrolfiler er tilføjet til sysfs (/sys/class/firmware/*), hvilket muliggør initiere firmwareanmodninger fra brugerrummet.
- I grænsefladen for asynkron I/O io_uring er en ny flag IORING_RECVSEND_POLL_FIRST blevet foreslået, som når den er aktiveret, får den netværksoperation til først at blive behandlet ved hjælp af polling, hvilket kan spare ressourcer i situationer, hvor det er acceptabelt at behandle operationen med en vis forsinkelse. io_uring har også tilføjet understøttelse af systemopkaldet socket(), foreslået nye flag for at forenkle styring af filbeskrivelser, tilføjet en 'multi-shot'-tilstand til accept()-opkald for at acceptere flere forbindelser på én gang, og tilføjet operationer for direkte at sende NVMe-kommandoer til enheden.
- Til Xtensa-arkitekturen er KCSAN (Kernel Concurrency Sanitizer) blevet implementeret som et værktøj til dynamisk at identificere race-tilstande i kernen. Derudover er der tilføjet støtte til dvaletilstand og co-processorer.
- Til m68k-arkitekturen (Motorola 68000) er der implementeret virtual machine (platformsimulator), baseret på Android Goldfish-emulatoren.
- Til AArch64-arkitekturen er der blevet tilføjet support for Armv9-A SME (Scalable Matrix Extension).
- I eBPF-underdelen er det nu tilladt at gemme typede pegere i map-strukturer, og der er tilføjet støtte til dynamiske pegere.
- Der er foreslået en ny forudsigende mekanisme til hukommelsesudskydning, der understøtter kontrol fra brugerrum ved hjælp af filen memory.reclaim. At skrive et tal til den angivne fil vil forsøge at udskyde det specificerede antal bytes fra det, der er knyttet til cgroup.
- Præcisionen i hukommelsesanvendingen er forbedret ved komprimering af data i swap-sektionen ved hjælp af zswap-mekanismen.
- Til RISC-V-arkitekturen er der opnået støtte til at køre 32-bit eksekverbare filer på 64-bit systemer, tilføjet en tilstand til at binde begrænsende attributter til hukommelsessider (f.eks. for at forhindre caching), og funktionen kexec_file_load() er implementeret.
- Implementeringen af support til 32-bit Armv4T og Armv5 systemer er tilpasset til multikanalede platformssamlinger af kernen, der er passende til forskellige ARM-systemer.
- Virtualisering og sikkerhed
- I EFI-underdelen er der muligheden for fortrolig overførsel af hemmelig information til gæstesystemer uden at afsløre det for værtssystemet. Data gives via kataloget security/coco i securityfs.
- I Lockdown-beskyttelsesmodus, der begrænser adgang for root-brugeren til kernen og blokkerer omgåelsesveje for UEFI Secure Boot, er en sårbarhed blevet lukket, som tillod omgåelse af beskyttelsen gennem manipulation med kernen debugger.
- Patch-filer, der sigter mod at forbedre pålideligheden og ydeevnen af tilfældige talgeneratoren, er blevet inkluderet.
- Når der bygges med Clang 15, er der implementeret støtte til randomiseringsmekanismen af kernelstrukturer.
- I mekanismen Landlock, der begrænser interaktionen mellem en gruppe processer og det eksterne miljø, er der tilføjet støtte til regler, der gør det muligt at kontrollere udførelsen af filomdøbninger.
- IMA (Integrity Measurement Architecture) subsystem, designed to check the integrity of operating system components through digital signatures and hashes, has been transitioned to use the fs-verity module for file verification.
- The logic of actions has been changed when disabling unprivileged access to the eBPF subsystem — previously, all commands related to the bpf() system call were disabled, but starting from version 5.19, access is retained for commands that do not lead to the creation of objects. In this behavior, a privileged process is required to load the BPF program, but thereafter unprivileged processes can interact with this program.
- Support for the AMD SEV-SNP (Secure Nested Paging) extension has been added, providing secure handling of nested memory page tables and protection against 'undeSErVed' and 'SEVerity' attacks on AMD EPYC processors, which can bypass the AMD SEV (Secure Encrypted Virtualization) protection mechanism.
- Support for the Intel TDX (Trusted Domain Extensions) mechanism has been added, allowing the blocking of attempts for unauthorized access to encrypted memory. virtual machines.
- The virtio-blk driver, used for emulating block devices, has added support for input/output using polling, which, according to tests, has reduced latencies by approximately 10%.
- Netværkssubsystem
- A series of BIG TCP patches has been included, allowing for increasing the maximum size of a TCP packet to 4GB for optimizing the work of high-speed internal data center networks. This increase in packet size is achieved with a 16-bit size field in the header through the implementation of 'jumbo' packets, where the size in the IP header is set to 0, and the actual size is conveyed in a separate 32-bit field in an additional attached header. Performance testing showed that setting the packet size to 185KB resulted in a 50% increase in throughput and significantly reduced data transmission delays.
- Arbejdet med at integrere midler til sporing af årsager til pakkeafvisninger (årsagskoder) i netværksstakken er fortsat. Årsagskoden overføres under frigivelse af det hukommelse, der er knyttet til pakken, og muliggør registrering af situationer som pakkeafvisning på grund af fejl i headerfelter, spoofing opdaget af rp_filter, forkert kontrolsum, utilstrækkelig hukommelse, IPSec XFRM-regler, forkert TCP-sekvensnummer osv.
- Support for falling back from MPTCP (MultiPath TCP) to regular TCP has been added, in situations where certain MPTCP capabilities cannot be utilized. MPTCP is an extension of the TCP protocol that enables TCP connections to deliver packets simultaneously across multiple routes through different network interfaces associated with different IP addresses. An API for managing MPTCP streams from user space has been added.
- Udstyr
- More than 420 thousand lines of code related to the amdgpu driver have been added, of which about 400 thousand lines are automatically generated header files containing data for ASIC registers in the AMD GPU driver, while another 22.5 thousand lines provide the initial implementation of support for AMD SoC21. The total size of the driver for AMD GPUs has exceeded 4 million lines of code. Besides SoC21, support for SMU 13.x (System Management Unit) has been included in the AMD driver, support for USB-C and GPUVM has been updated, and preparations have been made for supporting the next generations of RDNA3 (RX 7000) and CDNA (AMD Instinct) platforms.
- In the i915 driver (Intel), enhanced capabilities related to power management have been introduced. Identifiers for Intel DG2 GPUs (Arc Alchemist) used in laptops have been added, initial support for the Intel Raptor Lake-P (RPL-P) platform has been provided, information about Arctic Sound-M graphics cards has been added, and an ABI for computational engines has been implemented; support for the Tile4 format has been added for DG2 cards, and DisplayPort HDR support has been implemented for systems based on the Haswell microarchitecture.
- In the Nouveau driver, a shift to using the drm_gem_plane_helper_prepare_fb handler has been made, with static memory allocation applied to certain structures and variables. As for the use of publicly available source code of kernel modules from NVIDIA in Nouveau, the current efforts are focused on identifying and fixing bugs. In the future, the published firmware is planned to be used to improve the performance of the driver.
- A driver for the NVMe controller used in Apple computers based on the M1 chip has been added.
Samtidig har den latinoamerikanske Fond for Fri Software udgivet en fuldstændig fri version af kerne 5.19 — Linux-libre 5.19-gnu, renset for elementer fra firmware og drivere, der indeholder usikre komponenter eller kodeudsnit, hvis anvendelse er begrænset af producenten. I den nye udgivelse er der blevet renset drivere for pureLiFi X/XL/XC og TI AMx3 Wkup-M3 IPC. Koden til rensning af blobs i drivere og subsystemer som Silicon Labs WFX, AMD amdgpu, Qualcomm WCNSS Peripheral Image Loader, Realtek Bluetooth, Mellanox Spectrum, Marvell WiFi-Ex, Intel AVS, IFS, pu3-imgu drivere er blevet opdateret. Behandling af devicetree-filer til Qualcomm AArch64 er blevet implementeret. Støtte til et nyt navnesystem for komponenter i Sound Open Firmware er blevet tilføjet. Rensningen af drivrutinen ATM Ambassador, der er fjernet fra kernen, er stoppet. Administrationen af rensning af blobs i HDCP og Mellanox Core er flyttet til separate kconfig-tags.
Kilde: opennet.ru
