Linux 5.16 kernel udgivelse

Efter to måneders udvikling præsenterede Linus Torvalds udgivelsen af ​​Linux-kernen 5.16. Blandt de mest bemærkelsesværdige ændringer: futex_waitv-systemopfordringen til at forbedre ydeevnen af ​​Windows-spil i Wine, fejlsporing i FS via fanotify, konceptet med folioer i hukommelsesstyringssystemet, understøttelse af AMX-processorinstruktioner, muligheden for at reservere hukommelse til netværkssockets, understøttelse af pakkeklassificering på stadiet i netfilter "egress", ved hjælp af DAMON-undersystemet til proaktivt at fjerne ubrugte hukommelsesområder, forbedre håndteringen af ​​overbelastninger med en stor mængde skriveoperationer, understøttelse af multi-drev harddiske.

Den nye version indeholder 15415 rettelser fra 2105 udviklere, patchstørrelsen er 45 MB (ændringerne berørte 12023 filer, 685198 linjer kode blev tilføjet, 263867 linjer blev slettet). Omkring 44 % af alle ændringer introduceret i 5.16 er relateret til enhedsdrivere, cirka 16 % af ændringerne er relateret til opdatering af kode, der er specifik for hardwarearkitekturer, 16 % er relateret til netværksstakken, 4 % er relateret til filsystemer og 4 % er relateret til interne kerneundersystemer.

Vigtigste innovationer i kerne 5.16:

  • Diskundersystem, I/O og filsystemer
    • Værktøjer er blevet tilføjet til fanotify-mekanismen til at overvåge tilstanden af ​​filsystemet og spore forekomsten af ​​fejl. Oplysninger om fejl transmitteres ved hjælp af en ny type hændelser - FAN_FS_ERROR, som kan opsnappes i overvågningssystemer, der kører i brugerrummet for omgående at informere administratoren eller starte gendannelsesprocesser. Når en række fejl opstår kaskadende, sikrer fanotify, at den første fejlmeddelelse leveres sammen med en generel problemtæller for at forenkle efterfølgende analyse af årsagen til fejlen. Understøttelse af fejlsporing er i øjeblikket kun implementeret for Ext4-filsystemet.
    • Forbedret håndtering af skriveoverbelastning, som opstår, når mængden af ​​skriveoperationer overstiger drevets gennemløb, og systemet er tvunget til at blokere en process skriveanmodninger, indtil de anmodninger, der allerede er indsendt, er afsluttet. I den nye version er kernemekanismen, der bruges til at indhente information om forekomsten af ​​overbelastning og blokering af opgaver, blevet fuldstændig redesignet, da der i den gamle implementering var problemer med at koble behandlingen af ​​skriveoverbelastning med forskydningen af ​​hukommelsessider til swap sektion, når der ikke er tilstrækkelig hukommelse i systemet.
    • Btrfs implementerer understøttelse af enhedszoneringsteknologi (Zoned Namespace), der bruges i harddiske eller NVMe SSD'er til at opdele lagerplads i zoner, som udgør grupper af blokke eller sektorer, hvori kun sekventiel tilføjelse af data er tilladt, opdatering af hele gruppen af blokke. Derudover blev der foretaget mindre optimeringer af inodelogning, hvilket øgede gennemløbet i dbench-testen med 3% og reducerede latensen med 11%. Directory-logningsmekanismen er blevet redesignet, hvor antallet af søge- og blokeringsoperationer i træet er blevet reduceret for at øge effektiviteten. Indsættelsen af ​​elementer i btree-strukturen i batch-tilstand er blevet fremskyndet (tiden for masseindsættelse af elementer er blevet reduceret med 4 % og sletning med 12 %). Tilføjet begrænset understøttelse til brug af komprimering ved skrivning af delvise sider, samt mulighed for at defragmentere undersider. Der er lavet forberedelser til at muliggøre understøttelse af den anden version af protokollen for "send"-kommandoen.
    • XFS-filsystemet reducerer hukommelsesforbruget ved at bruge separate pladecacher til ofte brugte elementer og reducere nogle datastrukturer.
    • I Ext4-filsystemet noteres kun fejlrettelser og mere nøjagtig beregning af de dovne initialiseringsparametre i Inode-tabellen.
    • Optimeringer er blevet implementeret på blokenhedsniveau for betydeligt at øge effektiviteten af ​​at linke operationer til CPU-kerner.
    • Tilføjet indledende understøttelse af harddiske med flere uafhængige drev (multi-aktuator), hvilket gør det muligt samtidigt at få adgang til flere sektorer i forskellige områder af den magnetiske plade.
    • Tilføjet en ny ioctl-kommando CDROM_TIMED_MEDIA_CHANGE for at registrere medieændringshændelser i et optisk diskdrev.
    • EROFS-filsystemet (Enhanced Read-Only File System) har tilføjet muligheden for at arbejde oven på flere lagerenheder. Forskellige enheder kan tilknyttes et enkelt 32-bit blok adresserum. Understøttelse af komprimering ved hjælp af LZMA-algoritmen er også blevet tilføjet.
    • Monteringsmuligheder er blevet tilføjet til F2FS-filsystemet for at kontrollere filfragmentering, når den placeres i lager (for eksempel for at fejlsøge optimeringer til arbejde med fragmenteret lager).
    • CEPH muliggør som standard asynkron mappeoprettelse og sletning (for at vende tilbage til den gamle adfærd, brug '-o wsync'-flaget ved montering). Tilføjet vedligeholdelse af metrikker, der sporer kopieringsoperationer af eksterne objekter.
    • En tcpnodelay-monteringsparameter er blevet tilføjet til CIFS, som indstiller tcp_sock_set_nodelay-tilstanden for netværkssocket, hvilket deaktiverer ventetiden på, at køen udfylder TCP-stakken. Tilføjet understøttelse af indlejrede DFS-links (Distributed File System) ved genmontering.
    • Tilføjet support til at fuldføre anmodninger til en blokenhed i batch-tilstand. Test af ændringen viste en stigning i intensiteten af ​​tilfældige læseoperationer fra Optane-drev fra 6.1 til 6.6 millioner IOPS på en enkelt CPU-kerne.
  • Hukommelse og systemtjenester
    • Tilføjet et nyt systemkald futex_waitv, som giver dig mulighed for at overvåge tilstanden for flere futexes på én gang ved hjælp af et enkelt systemkald. Denne funktion minder om WaitForMultipleObjects-funktionaliteten, der er tilgængelig i Windows, hvis emulering via futex_waitv kan være nyttig til at forbedre ydeevnen af ​​Windows-spil, der kører under Wine eller Proton. Derudover kan samtidig ventetid på futexes også bruges til at optimere ydeevnen af ​​native builds af spil til Linux.
    • Konceptet med sidefolioer er blevet implementeret, hvis brug i nogle kerneundersystemer vil fremskynde hukommelseshåndtering under typiske arbejdsbelastninger. I øjeblikket er hovedhukommelsesstyringsundersystemet i kernen og implementeringen af ​​sidecachen allerede blevet overført til folioer, og filsystemer er planlagt til at blive overført i fremtiden. I fremtiden er det også planlagt at tilføje understøttelse af flersidede folioer til kernen.

      Tomes ligner sammensatte sider, men har forbedret semantik og en klarere organisering af arbejdet. For at styre systemhukommelsen er tilgængelig RAM opdelt i hukommelsessider, hvis størrelse varierer efter arkitektur, men på x86-systemer måles i kilobyte (typisk 4096 bytes). Moderne systemer kommer med snesevis af gigabyte RAM, hvilket gør hukommelseshåndtering mere kompleks på grund af behovet for at behandle et stort antal hukommelsessider. For at reducere antallet af sider implementerede kernen tidligere konceptet med sammensatte sider med strukturer, der spænder over mere end én fysisk side i hukommelsen. Men API'et til at manipulere flettede hukommelsessider lod meget tilbage at ønske og førte til yderligere overhead.

    • En handler er blevet tilføjet til opgaveplanlæggeren, der tager højde for cache-klynger på CPU'en. I nogle processorer, såsom Kunpeng 920 (ARM) og Intel Jacobsville (x86), kan et vist antal CPU-kerner, normalt 4, kombinere L3- eller L2-cache. At tage højde for sådanne topologier kan betydeligt forbedre effektiviteten af ​​fordelingen af ​​opgaver på tværs af CPU-kerner i opgaveplanlæggeren, da flytning af opgaver inden for den samme CPU-klynge giver mulighed for at øge hukommelsesadgangsgennemstrømningen og reducere cache-konflikt.
    • Tilføjet understøttelse af AMX (Advanced Matrix Extensions) instruktioner implementeret i de kommende Intel Xeon Scalable serverprocessorer, kodenavnet Sapphire Rapids. AMX tilbyder nye konfigurerbare TMM "TILE" registre og instruktioner til at manipulere data i disse registre, såsom TMUL (Tile matrix MULTiply) til matrix multiplikation.
    • Adskillige nye funktioner er blevet implementeret baseret på DAMON (Data Access MONitor) undersystemet tilføjet i den seneste udgivelse, som giver dig mulighed for at overvåge adgang til data i RAM i forhold til den valgte proces, der kører i brugerrummet. For eksempel gør subsystemet det muligt at analysere, hvilke hukommelsesområder processen fik adgang til under hele dens drift, og hvilke hukommelsesområder der forblev uopkrævet.
      • DAMON_RECLAIM for at identificere og fjerne hukommelsesområder, der ikke er blevet tilgået. Mekanismen kan bruges til proaktivt at fjerne hukommelsessider, når ledig hukommelse er ved at være opbrugt.
      • DAMOS (Data Access Monitoring-based Operation Schemes) til at anvende specificerede madvise()-operationer, såsom frigivelse af yderligere ledig hukommelse, til at behandle hukommelsesområder, for hvilke der er fastsat en bestemt frekvens af hukommelsesadgang. DAMOS-parametre konfigureres via debugfs.
      • Mulighed for at overvåge hukommelsens fysiske adresserum (tidligere kunne kun virtuelle adresser overvåges).
    • Implementeringen af ​​zstd-komprimeringsalgoritmen er blevet opdateret til version 1.4.10, hvilket har forbedret ydeevnen for forskellige kerne-undersystemer, der bruger komprimering (f.eks. er udpakning af et kernebillede blevet accelereret med 35 %, ydeevnen ved udpakning af komprimerede data i Btrfs og SquashFS er steget med 15%, og i ZRAM - med 30%). Kernen brugte oprindeligt en separat implementering af zstd, baseret på version 1.3.1, som blev udgivet for over tre år siden og ikke indeholdt mange vigtige optimeringer. Ud over at flytte til den nuværende version, forenkler den tilføjede patch også synkronisering med zstd upstream-grenen, så du kan generere kode til inklusion i kernen direkte fra zstd-hovedlageret. I fremtiden planlægges zstd-koden i kernen at blive opdateret, efterhånden som nye versioner af zstd-biblioteket frigives.
    • En stor del af forbedringerne er foretaget til eBPF-undersystemet. Tilføjet muligheden for at kalde kernemodulfunktioner fra BPF-programmer. Funktionen bpf_trace_vprintk() er blevet implementeret, i modsætning til bpf_trace_printk(), som giver dig mulighed for at udlæse mere end tre argumenter på én gang. Der er tilføjet et nyt bloomfilter for datalagringsstruktur (BPF map), som giver dig mulighed for at bruge den sandsynlige datastruktur af samme navn til at bestemme tilstedeværelsen af ​​et element i et sæt. Der er tilføjet en ny attribut BTF_KIND_TAG, som kan bruges i BPF-programmer til at binde tags til funktionsparametre, for eksempel for at forenkle opdagelsen af ​​fejl i brugerprogrammer. I libbpf er det muligt at lave dine egne .rodata.*/.data.* sektioner, understøttelse af uprobe og kprobe trace events er implementeret, og der er tilføjet en API til kopiering af alle BTF typer fra et objekt til et andet. AF_XDP-understøttelse er blevet flyttet fra libbpf til et separat libxdp-bibliotek. Til MIPS-arkitekturen er der implementeret en JIT-kompiler til den virtuelle BPF-maskine.
    • For ARM64-arkitekturen er der implementeret understøttelse af ARMv8.6-udvidelser til timeren, inklusive dem, der tillader selvsynkroniserende repræsentation af systemregistre uden brug af ISB-instruktioner.
    • For PA-RISC-arkitekturen er muligheden for at bruge KFENCE-mekanismen til at opdage fejl, når der arbejdes med hukommelse blevet implementeret, og understøttelse af KCSAN-racetilstandsdetektoren er blevet tilføjet.
    • Det er muligt at konfigurere adgangsrettigheder til tracefs på niveau med individuelle brugere og grupper; for eksempel kan du nu kun tillade adgang til sporingsværktøjer til medlemmer af en bestemt gruppe.
  • Virtualisering og sikkerhed
    • io_uring og device-mapper-undersystemerne implementerer support til generering af revisionsbegivenheder. io_uring giver mulighed for at kontrollere adgang gennem LSM-moduler. Tilføjet muligheden for at revidere openat2() systemkaldet.
    • Kernekoden er fuldstændig fri for kontinuerlige kasusudtryk i switch (ingen retur eller pause efter hver kasusblok). Når du bygger kernen, vil det nu være muligt at bruge "-Wimplicit-fallthrough"-tilstanden.
    • Inkluderede ændringer for at stramme grænsekontrol ved udførelse af memcpy()-funktionen.
    • Den io_uring asynkrone I/O-grænseflade implementerer muligheden for at anvende sikkerhedspolitikker defineret af SELinux- og Smack-modulerne til I/O-operationer.
    • IMA-undersystemet (Integrity Measurement Architecture), som gør det muligt for en ekstern tjeneste at verificere tilstanden af ​​kerneundersystemer for at sikre deres ægthed, implementerer muligheden for at anvende regler baseret på den gruppeidentifikator (GID), som filen tilhører, eller som brugeren tilhører. adgang til filen tilhører.
    • Deaktiverede som standard nogle avancerede mekanismer til at beskytte seccomp()-tråde mod Spectre-angreb, som blev betragtet som unødvendige og ikke væsentligt forbedrede sikkerheden, men påvirkede ydeevnen negativt. Brugen af ​​Retpoline-beskyttelse er blevet revideret.
    • Implementeringen af ​​cryptoloop-mekanismen er blevet fjernet, som blev erstattet i 2004 af dm-crypt og understøtter om nødvendigt de samme algoritmer.
    • Som standard er uprivilegeret adgang til eBPF-undersystemet forbudt. Ændringen blev foretaget for at forhindre BPF-programmer i at blive brugt til at omgå beskyttelse mod sidekanalangreb. Hvis det er nødvendigt, kan administratoren gendanne muligheden for ikke-privilegerede brugere til at bruge eBPF.
    • ACRN-hypervisoren, designet til opgaver i realtid og brug i missionskritiske systemer, har tilføjet understøttelse til at oprette/slette virtuelle enheder og videresende MMIO-enheder.
    • Understøttelse af KPP (Key-agreement Protocol Primitives) definitioner er blevet tilføjet til kryptomotoren, hvilket forenkler logikken i at udvikle drivere til kryptosystemer.
    • Hyper-V hypervisoren understøtter nu virtuel maskine isolationstilstand, som involverer kryptering af hukommelsesindhold.
    • KVM-hypervisoren har tilføjet understøttelse af RISC-V-arkitekturen. Muligheden for at migrere virtuelle maskiner, der kører ved hjælp af AMD SEV- og SEV-ES-udvidelserne i værtsmiljøet, er blevet implementeret. Tilføjet API til live migrering af gæstesystemer krypteret med AMD SEV (Secure Encrypted Virtualization).
    • For PowerPC-arkitekturen er STRICT_KERNEL_RWX-tilstanden aktiveret som standard, hvilket blokerer brugen af ​​hukommelsessider, der samtidigt er tilgængelige til skrivning og udførelse.
    • På 32-bit x86-systemer er understøttelse af memory hotplug afbrudt, som har været ude af drift i mere end et år.
    • Liblockdep-biblioteket er blevet fjernet fra kernen og vil nu blive vedligeholdt separat fra kernen.
  • Netværks undersystem
    • For sockets er der implementeret en ny mulighed SO_RESERVE_MEM, hvormed man kan reservere en vis mængde hukommelse til en socket, som altid vil forblive tilgængelig for socket og ikke fjernes. Brug af denne mulighed giver dig mulighed for at opnå øget ydeevne ved at reducere hukommelsesallokering og genvinde operationer i netværksstakken, især når der opstår lav hukommelse i systemet.
    • Tilføjet understøttelse af protokollen Automatic Multicast Tunneling (RFC 7450), som gør det muligt at levere multicast-trafik fra netværk, der understøtter Multicast, til modtagere på netværk uden Multicast. Protokollen fungerer gennem indkapsling i UDP-pakker.
    • Forbedret indkapsling af IOAM (In-situ Operations, Administration, and Maintenance) data i transitpakker.
    • Muligheden for at styre transceiverens strømforbrugstilstande er blevet tilføjet til ethtool netlink API.
    • Netfilter-undersystemet implementerer evnen til at klassificere pakker på udgangsniveau, dvs. på det stadie, hvor driveren modtager en pakke fra kernenetværksstakken. I nftables dukkede understøttelse af de tilsvarende filtre op i version 1.0.1. Netfilter har tilføjet muligheden for at sammenligne og ændre interne headers og data for UDP og TCP (inner header / payload), der kommer efter transportheaderen.
    • Tilføjede nye sysctl-parametre arp_evict_nocarrier og ndisc_evict_nocarrier, når de er indstillet, vil ARP-cachen og ndisc-tabellen (neighbour discovery) blive ryddet i tilfælde af en forbindelsesfejl (NOCARRIER).
    • Modes Low Latency, Low Loss og Scalable Throughput (L4S) er blevet tilføjet til fq_codel (Controlled Delay) netværkskøstyringsmekanisme.
  • Оборудование
    • Amdgpu-driveren giver indledende understøttelse af DP 2.0-specifikationen (DisplayPort 2.0) og DisplayPort-tunneling over USB4. For Cyan Skillfish APU'er (udstyret med GPU Navi 1x) er understøttelse af skærmcontrollere blevet tilføjet. Understøttelse af Yellow Carp APU'er (Ryzen 6000 "Rembrandt" mobile processorer) er blevet udvidet.
    • i915-driveren stabiliserer understøttelse af Intel Alderlake S-chips og implementerer understøttelse af Intel PXP-teknologi (Protected Xe Path), som giver dig mulighed for at organisere en hardwarebeskyttet grafiksession på systemer med Intel Xe-chips.
    • Der er blevet arbejdet i nouveau-driveren for at rette fejl og forbedre kodestilen.
    • Tilføjet understøttelse af x86-kompatible Vortex CPU'er (Vortex86MX). Linux har arbejdet på lignende processorer før, men eksplicit identifikation af de specificerede CPU'er var påkrævet for at deaktivere beskyttelse mod Spectre/Meltdown-angreb, som ikke er gældende for de specificerede chips.
    • Tilføjet indledende understøttelse af x86-platforme til Surface Pro 8 og Surface Laptop Studio.
    • Tilføjet driver til at understøtte lydchips brugt i AMD Yellow Carp, Van Gogh APU'er, også tilføjet understøttelse af lydsystemer og codecs Cirrus CS35L41, Maxim MAX98520/MAX98360A, Mediatek MT8195, Nuvoton NAU8821, NVIDIA Tegra210, NXP i.Realtekm AudioReach, Qu, ALC8I-VS, RT5682S, RT5682, Rockchip RV9120 og RK1126.
    • Tilføjet ishtp_eclite driver for at få adgang til Intel PSE (Programmable Service Engine) indlejrede controllere ved hjælp af ISHTP (Integratd Sensor Hub Transport Protocol), såsom batteri, temperatur og UCSI (USB Type-C Connector System Software) relateret informationsgrænseflade).
    • Tilføjet en driver til Nintendo Switch-spilcontrollere, der understøtter Switch Pro og Joy-Cons. Tilføjet understøttelse af Wacom Intuos BT-tablets (CTL-4100WL/CTL-6100WL) og Apple 2021 Magic Keyboard. Forbedret understøttelse af Sony PlayStation DualSense-controllere. Tilføjet understøttelse af Xiaomi Mi-musens sideknapper.
    • Tilføjet RT89-driver med understøttelse af Realtek 802.11ax trådløse chips, samt drivere til Asix AX88796C-SPI Ethernet-adaptere og Realtek RTL8365MB-VC-switche.
    • Drivere til PCI og PASemi i1c er blevet tilføjet til Apple M2-chips.
    • Tilføjet support til ARM SoС, enheder og boards 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, 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 GSscale 110 SCHAAS, 7040, Global ROC-32-PC 2A8M * , Xilinx Kria, Radxa Zero, JetHub D779/H1, Netronix E1K70.

Kilde: opennet.ru

Tilføj en kommentar