Efter to måneders udvikling præsenterede Linus Torvalds udgivelsen af Linux-kernen 5.16. Blandt de mest markante ændringer er: systemopkaldet futex_waitv for at forbedre ydeevnen for Windows-spil i Wine, fejlsporing i Filsystemet via fanotify, konceptet med folioer i hukommelsesstyring, understøttelse af processorinstruktioner AMX, muligheden for at reservere hukommelse til netværkssokler, understøttelse i netfilter af klassificering af pakker på 'egress'-fasen, inddragelse af DAMON-systemet til proaktivt at udskille ubrugte hukommelsesområder, forbedret håndtering af overbelastninger ved store skriveoperationer, samt understøttelse af flere harddiske.
I den nye version er der blevet anvendt 15.415 rettelser fra 2.105 udviklere, patchens størrelse er 45 MB (ændringerne påvirkede 12.023 filer, 685.198 linjer kode er blevet tilføjet, og 263.867 linjer er blevet fjernet). Omkring 44% af alle ændringerne i 5.16 er relateret til enhedsdrivere, cirka 16% af ændringerne vedrører opdatering af hardware-specifik kode, 16% relaterer sig til netværksstakken, 4% til filsystemer og 4% til interne subsystemer i kernen.
Hovednyhederne i kernen 5.16:
- DiskSubsystem, input/output og filsystemer
- I fanotify-mekanismen er der tilføjet værktøjer til overvågning af tilstanden for filsystemet og til at spore opståen af fejl. Fejlinformation overføres ved hjælp af en ny type begivenheder - FAN_FS_ERROR, som kan fanges i brugerens udførelsesrum overvågningssystemer for hurtigt at informere administratoren eller starte genopretningsprocesser. Ved kaskadeopståen af en række fejl sikrer fanotify levering af beskeden om den første fejl sammen med en samlet tæller af problemer for at lette den efterfølgende analyse af årsagerne til nedbruddet. Understøttelse af fejlsporing er dog i øjeblikket kun implementeret for Ext4-filsystemet.
- Forbedret håndtering af skrive-overbelastninger, der opstår, når mængden af skriveoperationer overstiger lagringskapaciteten, og systemet er nødt til at blokere skriveanmodningerne, indtil tidligere anmodninger er afsluttet. I den nye version er mekanismen i kernen, der bruges til at indhente oplysninger om opståede overbelastninger og blokkering af opgaver, blevet fuldstændigt redesignet, da der i den gamle implementering blev observeret problemer med at kombinere håndteringen af skriveoverbelastninger med udskiftning af hukommelsessider til swap for ved mangel på hukommelse i systemet.
- I Btrfs er der implementeret understøttelse af Zoned Namespace-teknologi, der anvendes i harddiske eller NVMe SSD'er til at opdele lagringsområdet i zoner, som består af grupper af blokke eller sektorer, hvor der kun må tilføjes data sekventielt, og hele blokgruppen skal opdateres. Derudover er der foretaget små optimeringer i inode-logning, hvilket har resulteret i en stigning i kapacitet på 3% i dbench-testen og en reduktion af forsinkelsen på 11%. Mekanismen til logning af mapper er blevet omarbejdet for at øge effektiviteten ved at reducere antallet af søge- og låseoperationer i træstrukturen. Indsættelsen af elementer i btree-strukturen er blevet accelereret i batches (den tid, det tager at indsætte elementer i masse, er blevet reduceret med 4%, og sletning med 12%). Der er tilføjet begrænset understøttelse for brug af kompression ved skrivning af ufuldstændige sider samt muligheden for at defragmentere sub-sider. Der er blevet forberedt til at inkludere støtte til den anden version af protokollen for kommandoen «send».
- I XFS-filsystemet er hukommelsesforbruget blevet reduceret ved brug af separate slab-caches til ofte anvendte elementer og ved at reducere visse datastukturer.
- I Ext4-filsystemet er der kun registreret fejlrettelser og en mere præcis beregning af parametrene for forsinket initialisering af inode-tabellen.
- På blokniveau er der implementeret optimeringer, der væsentligt øger effektiviteten af bindingen af operationer til CPU-kerner.
- Der er tilføjet indledende understøttelse af harddiske med flere uafhængige drev (multi-actuator), hvilket giver mulighed for at tilgå flere sektioner i forskellige zoner på den magnetiske plade samtidig.
- Der er tilføjet en ny ioctl-kommando CDROM_TIMED_MEDIA_CHANGE til at afgøre medieskiftbegivenheder i optiske drev.
- Filsystemet EROFS (Enhanced Read-Only File System) har fået mulighed for at arbejde på tværs af flere lagringsenheder. Forskellige enheder kan afspejles i et enkelt 32-bit adresseområde for blokke. Der er også tilføjet support for kompression ved hjælp af LZMA-algoritmen.
- I F2FS-filsystemet er der tilføjet monteringsmuligheder til at styre fragmentering af filer ved placering i lageret (for eksempel til fejlfinding af optimeringer ved arbejde med fragmenterede lagre).
- I CEPH er operationer til oprettelse og sletning af mapper som standard aktiveret i asynkront tilstand (for at genoprette den gamle adfærd, skal der bruges flaget '-o wsync' ved montering). Der er også tilføjet overvågning af metrikker for kopieringsoperationer af eksterne objekter.
- I CIFS er der tilføjet en monteringsparameter tcpnodelay, som sætter netværkssocketen i tcp_sock_set_nodelay-tilstand, der deaktiverer ventetid på fyldning af kø i TCP-stakken. Der er tilføjet support for indlejrede DFS Link (Distributed File System) ved remontering.
- Support for afslutning af forespørgsler til blokenheder i batch-tilstand er blevet tilføjet. Test af ændringen viste en stigning i intensiteten af tilfældige læseoperationer fra Optane-lagringsenheder fra 6,1 til 6,6 millioner IOPS på en enkelt CPU-kerne.
- Hukommelse og systemtjenester
- En ny systemopkald futex_waitv er blevet tilføjet, hvilket muliggør overvågning af tilstanden for flere futexer med ét systemopkald. Denne funktionalitet minder om den tilgængelige funktion i Windows, WaitForMultipleObjects, hvis emulering via futex_waitv kan være nyttig til at forbedre ydeevnen af Windows-spil, der køres under Wine eller Proton. Derudover kan samtidig venten på futexer også anvendes til at optimere ydeevnen af indfødte spil til Linux.
- Implementeringen af memory page folios-koncepter betyder, at de kan accelerere hukommelsesstyring under typiske belastninger i nogle af kerne-systemernes subsystemer. I øjeblikket er den primære hukommelsesstyringssubsystem allerede blevet konverteret til folios, ligesom implementeringen af page cache, og i fremtiden er der planer om at oversætte filsystemer. Der er også planer om at tilføje support til multipage folios i kernen.
Folios ligner sammenlagte hukommelsessider (compound pages), men adskiller sig ved forbedret semantik og en klarere arbejdsgang. Til styring af systemhukommelsen opdeles det tilgængelige RAM i hukommelsessider, hvis størrelse afhænger af arkitekturen, men på x86-systemer måles den i kilobyte (normalt 4096 byte). Moderne systemer er udstyret med titusinder af gigabyte RAM, hvilket komplicerer hukommelsesstyring på grund af behovet for at håndtere et stort antal hukommelsessider. For at reducere antallet af sider blev der tidligere implementeret en koncept for sammenlagte sider (compound pages) i kernen med strukturer, der dækker mere end én fysisk hukommelsesside. Men API'en til manipulation af sammenlagte hukommelsessider efterlod meget at ønske og førte til ekstra omkostninger.
- Der er tilføjet en handler til opgaveplanlæggeren, som tager højde for cache-klustering i CPU'en. I nogle processorer, såsom Kunpeng 920 (ARM) og Intel Jacobsville (x86), kan et bestemt antal CPU-kerner, typisk 4, dele L3 eller L2 cache. At tage højde for sådanne topologier kan betydeligt øge effektiviteten af opgavefordelingen mellem CPU-kernerne i opgaveplanlæggeren, da flytning af opgaver inden for en enkelt CPU-klynge kan øge hukommelsesadgangens båndbredde og mindske konkurrencen i cachen.
- Der er tilføjet support for AMX (Advanced Matrix Extensions)-instruktioner, som implementeres i de kommende server-processorer Intel Xeon Scalable, udviklet under kode-navnet Sapphire Rapids. AMX tilbyder nye tilpassede registre TMM "TILE" og instruktioner til manipulation af data i disse registre, såsom TMUL (Tile matrix MULtiply) til matrixmultiplikation.
- Implementeret flere nye funktioner baseret på det i sidste udgave tilføjede DAMON (Data Access MONitor) subsystem, der muliggør overvågning af adgang til data i RAM i forhold til den valgte proces, der kører i brugerrummet. For eksempel giver subsystemet mulighed for at analysere, hvilke specifikke hukommelsesområder processen har haft adgang til gennem sin drift, og hvilke hukommelsesområder der forblev ubenyttede.
- DAMON_RECLAIM til identifikation og frigivelse af hukommelsesområder, der ikke er blevet tilgået. Mekanismen kan bruges til proaktivt at bløde frigive hukommelsessider, når man nærmer sig udtømning af ledig hukommelse.
- DAMOS (Data Access Monitoring-based Operation Schemes) til anvendelse af de angivne operationer madvise(), såsom frigivelse af ekstra ledig hukommelse, til hukommelsesområder fra den proces, hvor der registreres en bestemt tilgangsfrekvens. Parametrene for DAMOS konfigureres gennem debugfs.
- Mulighed for overvågning af det fysiske adresseområde i hukommelsen (tidligere kunne man kun overvåge virtuelle adresser).
- Implementeringen af zstd komprimeringsalgoritmen er opdateret til version 1.4.10, hvilket har resulteret i en mærkbar stigning i ydeevnen af forskellige kerne-subsystemer, der anvender komprimering (for eksempel er udpakning af kernebilledet accelereret med 35 %, ydeevnen ved udpakning af komprimerede data i Btrfs og SquashFS er steget med 15 %, og i ZRAM med 30 %). Oprindeligt blev der i kernen brugt en separat implementering af zstd baseret på version 1.3.1, der blev udgivet for over tre år siden og ikke inkluderede mange vigtige optimeringer. Udover opdateringen til den aktuelle version forenkler den tilføjede patch også synkroniseringen med upstream-grenen af zstd, hvilket gør det muligt at generere koden til integration i kernen direkte fra det primære zstd repository. I fremtiden planlægger man at opdatere zstd-koden i kernen i takt med, at nye versioner af zstd-biblioteket udgives.
- Der er foretaget en omfattende forbedring af eBPF-subsystemet. Der er tilføjet mulighed for at kalde funktioner fra kernelmoduler i BPF-programmer. Funktionen bpf_trace_vprintk() er implementeret, som adskiller sig fra bpf_trace_printk() ved at tillade udskrivning af mere end tre argumenter ad gangen. En ny datalagringsstruktur (BPF map) i form af en bloom filter er blevet tilføjet, hvilket muliggør brug af denne sandsynlighedsdatastruktur til at bestemme tilstedeværelsen af et element i en mængde. Der er tilføjet en ny attribut BTF_KIND_TAG, som kan anvendes i BPF-programmer til at binde tags til funktionsparametre, eksempelvis for at forenkle fejlfinding i brugerprogrammer. I libbpf er det tilladt at oprette egne sektioner .rodata.* / .data.*, understøttelse af tracing events uprobe og kprobe er implementeret, og der er tilføjet en API til at kopiere alle typer BTF fra et objekt til et andet. Støtte til AF_XDP er blevet flyttet fra libbpf til et separat bibliotek, libxdp. Der er implementeret en JIT-kompilator for BPF-maskinen til MIPS-arkitekturen.
- For ARM64-arkitekturen er der implementeret understøttelse af ARMv8.6-erweiterungen til timeren, inklusive evner, der muliggør selvsynkronisering af systemregistre uden brug af ISB-instruktioner.
- For PA-RISC-arkitekturen er der implementeret mulighed for at anvende KFENCE-mekanismen til at afsløre fejl ved håndtering af hukommelse, samt tilføjet støtte til KCSAN-race condition detektoren.
- Muligheden for at konfigurere adgangsrettigheder til tracefs på niveau med individuelle brugere og grupper er blevet givet, for eksempel kan adgangen til tracing-værktøjer nu kun tillades for medlemmer af en bestemt gruppe.
- Virtualisering og sikkerhed
- I io_uring- og device-mapper-subsystemerne er der blevet implementeret støtte til at generere revisionsbegivenheder. I io_uring er det muligt at styre adgangen gennem LSM-moduler. Der er tilføjet mulighed for at revidere systemopkaldet openat2().
- Kernelens kode er helt blevet befriet for vedvarende case-udtryk i switch (uden return eller break efter hver case-blok). Ved bygning af kernen kan der nu anvendes tilstanden “-Wimplicit-fallthrough”.
- Ændringer er inkluderet for at stramme grænsekontrol ved udførelse af memcpy()-funktionen.
- I grænsefladen til asynkron ind-/udgang io_uring er der implementeret mulighed for at anvende sikkerhedspolitikker, som er defineret af SELinux- og Smack-moduler til ind-/udgangsoperationer.
- I IMA-system (Integrity Measurement Architecture), der giver en ekstern tjeneste mulighed for at verificere tilstanden af kernekomponenterne for at sikre deres autenticitet, er der implementeret en mulighed for at anvende regler baseret på gruppeidentifikatoren (GID), som filen tilhører, eller som brugeren, der tilgår filen, indgår i.
- Nogle avancerede beskyttelsesmekanismer for tråde, såsom seccomp(), er som standard frakoblet for at undgå unødvendige komplikationer, da de ikke nævneværdigt forbedrer sikkerheden, men kan påvirke ydeevnen negativt. Anvendelsen af Retpoline-beskyttelse er blevet revideret.
- Implementeringen af mekanismen cryptoloop er blevet fjernet, hvilket i 2004 blev erstattet af dm-crypt, som ved behov understøtter de samme algoritmer.
- Som standard er uhjulpet adgang til eBPF-systemet forbudt. Ændringen er foretaget for at forhindre brugen af BPF-programmer til at omgå beskyttelsen mod angreb via sidelæns kanaler. Om nødvendigt kan administratoren genindføre muligheden for, at uhjulpet brugere kan anvende eBPF.
- Hypervisoren ACRN, designet til realtidsopgaver og brug i kritiske systemer, har fået tilføjet understøttelse af oprettelse/fjernelse af virtuelle enheder samt MMIO-enhedsudlåsning.
- Kryptomotoren har fået tilføjet understøttelse af KPP (Key-agreement Protocol Primitives), hvilket forenkler logikken i udviklingen af drivere til kryptosystemer.
- Hypervisoren Hyper-V har fået implementeret support for isolationsmodus virtual machines, der indebærer kryptering af hukommelsesindholdet.
- I hypervisoren KVM Understøttelse af RISC-V-arkitekturen er blevet tilføjet. Muligheden for migration inden for værtens virtualiseringsmiljø er blevet implementeret, når virtuelle maskiner kører med AMC SEV og SEV-ES udvidelser. Der er tilføjet en API til live-migration af gæstesystemer, der er krypteret ved hjælp af AMD SEV (Secure Encrypted Virtualization).
- For PowerPC-arkitekturen er STRICT_KERNEL_RWX-tilstand som standard aktiveret, hvilket blokerer for brugen af hukommelsessider, der er tilgængelige til både skrivning og udførelse.
- På 32-bit x86-systemer er understøttelsen af hot-plugging af hukommelse (Memory hotplug) blevet ophørt, da den har været ude af drift i over et år.
- Biblioteket liblockdep er blevet fjernet fra kernen og vil nu blive vedligeholdt separat fra kernen.
- Netværkssubsystem
- For sockets, a new option SO_RESERVE_MEM has been implemented, allowing for the reservation of a specific amount of memory for the socket that will always remain available and not be reclaimed. The use of this option enables improved performance by reducing the number of memory allocation and release operations in the network stack, especially in conditions of memory shortage in the system.
- Support for the Automatic Multicast Tunneling protocol (RFC 7450) has been added, enabling the delivery of multicast traffic from multicast-supporting networks to recipients in networks without multicast. The protocol operates by encapsulating in UDP packets.
- The encapsulation of IOAM (In-situ Operations, Administration, and Maintenance) data into transit packets has been improved.
- The ethtool netlink API has added the capability to manage the power consumption modes of transceivers.
- The netfilter subsystem has implemented the ability to classify packets at the egress level, i.e., at the stage when the driver receives the packet from the kernel's network stack. Support for the corresponding filters in nftables appeared in version 1.0.1. In netfilter, the ability to match and modify inner headers and data for UDP and TCP (inner header / payload) following the transport header has been added.
- New sysctl parameters arp_evict_nocarrier and ndisc_evict_nocarrier have been added, which clear the ARP cache and ndisc table (neighbor discovery) in the event of a communication break (NOCARRIER).
- The fq_codel queue management mechanism (Controlled Delay) has added Low Latency, Low Loss, and Scalable Throughput (L4S) modes.
- Udstyr
- The amdgpu driver has implemented initial support for the DP 2.0 (DisplayPort 2.0) specification and the ability to tunnel DisplayPort over USB4. For the APU Cyan Skillfish (equipped with Navi 1x GPUs), support for display controllers has been added. Support for the APU Yellow Carp (mobile Ryzen 6000 'Rembrandt' processors) has been expanded.
- The i915 driver has stabilized support for Intel Alderlake S chips and has implemented support for Intel PXP (Protected Xe Path) technology, enabling the operation of a hardware-protected graphics session on systems with Intel Xe chips.
- The nouveau driver has undergone bug fixes and improvements in code styling.
- Tilføjet støtte til x86-kompatible CPU'er Vortex (Vortex86MX). Linux har tidligere fungeret på sådanne processorer, men en eksplicit identifikation af de nævnte CPU'er var nødvendig for at deaktivere beskyttelsen mod Spectre/Meltdown-angreb, som ikke gælder for de nævnte chips.
- Tilføjet indledende support til x86-platformene Surface Pro 8 og Surface Laptop Studio.
- Tilføjet driver til støtte for lydchips, der anvendes i AMD Yellow Carp, Van Gogh APU'er, samt tilføjet support for lydsystemer og codecs Cirrus CS35L41, Maxim MAX98520/MAX98360A, Mediatek MT8195, Nuvoton NAU8821, NVIDIA Tegra210, NXP i.MX8ULP, Qualcomm AudioReach, Realtek ALC5682I-VS, RT5682S, RT9120, Rockchip RV1126 og RK3568.
- Tilføjet driver ishtp_eclite til adgang til Intel PSE (Programmable Service Engine) indbyggede controllere via ISHTP-protokollen (Integratd Sensor Hub Transport Protocol), fx til at indhente data om batteri, temperatur og oplysninger relateret til UCSI (USB Type-C Connector System Software Interface).
- Tilføjet driver til Nintendo Switch-controllerne, der understøtter Switch Pro- og Joy-Con-enheder. Tilføjet support til Wacom Intuos BT (CTL-4100WL/CTL-6100WL) tablets og Apple 2021 Magic Keyboard. Forbedret support til Sony PlayStation DualSense controllere. Tilføjet support til sideknapper på Xiaomi Mi-mus.
- Tilføjet driver RT89 med støtte for Realtek 802.11ax trådløse chips samt drivere til Ethernet-adaptere Asix AX88796C-SPI og Realtek RTL8365MB-VC switches.
- Tilføjet drivere til PCI og PASemi i2c for Apple M1-chips.
- Tilføjet støtte til ARM SoCs, enheder og boards såsom Raspberry Pi Compute Module 4, Fairphone 4, Snapdragon 690, LG G Watch R, Sony Xperia 10 III, Samsung Galaxy S4 Mini Value Edition, Xiaomi MSM8996 (Mi 5, Mi Note 2, Mi 5s, Mi Mix, Mi 5s Plus og Xiaomi Mi 5), Sony Yoshino (Sony Xperia XZ1 og Sony Xperia XZ Premium), F(x)tec Pro1 QX1000, Microchip LAN966, CalAmp LMU5000, Exegin Q5xR5, sama7g5, Samsung ExynosAutov9, Rockchip RK3566, RK3399 ROCK Pi 4A+, RK3399 ROCK Pi 4B+, Firefly ROC-RK3328-PC, Firefly ROC-RK3399-PC-PLUS, ASUS Chromebook Tablet CT100, Pine64 Quartz64-A, Netgear GS110EMX, Globalscale MOCHAbin 7040, NXP S32G2, Renesas R8A779M*, Xilinx Kria, Radxa Zero, JetHub D1/H1, Netronix E70K02.
Kilde: opennet.ru
