Utgivelsen av Linux-kjernen 5.16

Etter to måneders utvikling har Linus Torvalds presentert utgivelsen av Linux-kjernen 5.16. Blant de mest bemerkelsesverdige endringene er systemanropet futex_waitv for å forbedre ytelsen til Windows-spill i Wine, feilsøkingssporing i filsystemet via fanotify, konseptet med filkataloger i minnehåndteringssystemet, støtte for prosessorinstruksjoner fra AMX, muligheten til å reservere minne for nettverks-sokler, støtte for klassifisering av pakker i netfilter under «egress»-fasen, bruk av DAMON-subsystemet for proaktiv utskifting av unødvendige minneområder, forbedret håndtering av overbelastninger ved høy skriveaktivitet og støtte for flerplaters harddisker.

Den nye versjonen inkluderer 15415 feilrettinger fra 2105 utviklere, patchstørrelsen er 45 MB (endringene har berørt 12023 filer, 685198 linjer med kode lagt til, 263867 linjer slettet). Omtrent 44% av alle endringene i 5.16 er knyttet til enhetsdrivere, omtrent 16% av endringene gjelder oppdatering av arkitekturspecifikk kode, 16% er relatert til nettverksstakken, 4% til filsystemer og 4% til interne kjernesystemer.

Hovednyhetene i kjernen 5.16:

  • Disk subsystem, I/O og filsystemer
    • Det er lagt til verktøy for overvåkning av filsystemets tilstand og sporing av feil in mekanismen fanotify. Feilinformasjonen overføres gjennom en ny type hendelse — FAN_FS_ERROR, som kan fanges opp i brukerrommet i overvåkingssystemer for å informere administratoren eller igangsette gjenopprettingsprosesser. Ved kaskadisk oppståing av en serie feil sørger fanotify for levering av meldingen om den første feilen sammen med en total teller for problemer, for å forenkle den påfølgende analysen av årsaken til feilen. Støtten for feilsporing er for tiden kun implementert for Ext4-filsystemet.
    • Forbedret håndtering av skroverbelastning ved utføring av skriveoperasjoner (write congestion), som oppstår når volumet av skriveoperasjoner overstiger lagringsenhetens båndbredde og systemet må blokkere skriveprosessens forespørselen til allerede sendte forespørsler er fullført. I den nye versjonen er kjernemekanismen, brukt for å hente informasjon om oppstått overbelastning og blokkering av oppgaver, fullstendig redesignet, da det i den gamle implementeringen ble observert problemer med sammenkobling av håndtering av skr_overbelastning med utskifting av minnesider til siden ved mangel på minne i systemet.
    • Btrfs har fått støtte for enheter med zoneringsteknologi (Zoned Namespace), brukt i harddisker eller NVMe SSD-er for å dele lagringsrommet inn i soner, som består av grupper av blokker eller sektorer, hvor data kun kan legges til sekvensielt med oppdatering av hele blokgruppen. I tillegg er det gjort små optimaliseringer i inode-loggføringen, som har ført til en økning i båndbredde på 3% i dbench-testen og redusert latens med 11%. Mekanismen for katalogloggføring er redesignet for å redusere antall søkeoperasjoner og blokkeringer i treet for å forbedre effektiviteten. Insertion av elementer i btree-strukturen er akselerert i batch-modus (tiden for masseinnsetting av elementer er redusert med 4%, mens sletting er kuttet med 12%). Begrenset støtte for komprimering ved skriving av ufullstendige sider er lagt til, samt muligheten for å defragmentere under-sider (subpage). Forberedelser for å inkludere støtte for den andre versjonen av protokollen for «send»-kommandoen er gjort.
    • I XFS-filsystemet er minnebruken redusert ved å bruke separate slab-cache for ofte brukte elementer og redusere noen datakonstruksjoner.
    • I Ext4-filsystemet er det kun gjort feilrettinger og en mer nøyaktig beregning av parametere for forsinket initialisering av inode-tabellen.
    • På blokkenhetsnivå er det implementert optimaliseringer som betydelig forbedrer effektiviteten ved å knytte operasjoner til CPU-kjerner.
    • Innledende støtte for harddisker med flere uavhengige drivere (multi-actuator) er lagt til, som gir mulighet for å få tilgang til flere sektorer i forskjellige soner på den magnetiske platen samtidig.
    • Lagt til ny ioctl-kommando CDROM_TIMED_MEDIA_CHANGE for å bestemme hendelser knyttet til medieskift i optiske enheter.
    • Filsystemet EROFS (Enhanced Read-Only File System) har fått mulighet til å fungere over flere lagringsenheter. Ulike enheter kan avspeiles i ett 32-bits adresserom for blokker. Det er også lagt til støtte for komprimering ved hjelp av LZMA-algoritmen.
    • I F2FS-filsystemet er det lagt til monteringsalternativer for å kontrollere fragmenteringen av filer ved lagring (for eksempel for å feilsøke optimaliseringer for fragmenterte lagringsenheter).
    • I CEPH er katalogopprettings- og sletteoperasjoner som standard aktivert i asynkront modus (for å gjenopprette gammel atferd, bruk '-o wsync' flagget ved montering). Det er også lagt til innsamling av målinger som sporer kopieringsoperasjoner av eksterne objekter.
    • I CIFS er det lagt til monteringsparameter tcpnodelay, som setter tcp_sock_set_nodelay-modus for nettverksocket, og deaktiverer venting for å fylle køen i TCP-stakken. Støtte for nestede DFS Link (Distributed File System) er også lagt til ved remontering.
    • Støtte for å fullføre forespørslene til blokk-enheten i batch-modus er lagt til. Testing av endringen viste en økning i intensiteten av tilfeldige leseoperasjoner fra Optane-lagringer fra 6,1 til 6,6 millioner IOPS på én CPU-kjerne.
  • Minne og systemtjenester
    • En ny systemanrop futex_waitv er lagt til, som gjør det mulig å overvåke tilstanden til flere futexer med ett systemanrop. Denne funksjonen ligner på funksjonaliteten WaitForMultipleObjects tilgjengelig i Windows, og emulering av den gjennom futex_waitv kan være nyttig for å forbedre ytelsen til Windows-spill som kjører under Wine eller Proton. I tillegg kan samtidig venting av futexer brukes for å optimalisere ytelsen til native Linux-spill.
    • Konseptet med minnesblader (page folios) er implementert, og bruken av dette i enkelte delsystemer av kjernen vil gjøre minnehåndtering mer effektiv under typiske belastninger. I dag er hoveddelen av minnehåndteringssystemet i kjernen allerede oversatt til minnesblader, og implementeringen av sidereferanser er på plass. I fremtiden er det planlagt å oversette filsystemer. Det blir også lagt til støtte for fler-sidede minnesblader i kjernen senere.

      Minnebladene ligner på sammenslåtte minnesider (compound pages), men de har en forbedret semantikk og en mer forståelig organisering av arbeid. For å håndtere systemminnet deles tilgjengelig RAM inn i minnesider, hvor størrelsen avhenger av arkitekturen, men på x86-systemer er de vanligvis på kilobyte-nivå (vanligvis 4096 byte). Moderne systemer er utstyrt med titalls gigabyte RAM, noe som kompliserer minnehåndteringen på grunn av behovet for å håndtere et enormt antall minnesider. For å redusere antallet sider ble konseptet med sammenslåtte sider (compound pages) tidligere implementert i kjernen, med strukturer som dekker mer enn en fysisk minneside. Men API-en for å manipulere de sammenslåtte minnesidene har ikke vært optimal, noe som har ført til ekstra kostnader.

    • Det er lagt til en behandler i oppgaveplanleggeren som tar hensyn til minneklynge i CPU. I enkelte prosessorer, som Kunpeng 920 (ARM) og Intel Jacobsville (x86), kan et visst antall CPU-kjerner, vanligvis 4, dele L3 eller L2-cache. Å ta hensyn til slike topologier kan betydelig øke effektiviteten i fordelingen av oppgaver på CPU-kjerner i oppgaveplanleggeren, ettersom flytting av oppgaver innen samme klynge av CPU kan forbedre minnekapasiteten og redusere konkurransen i cachen.
    • Støtte for AMX-instruksjoner (Advanced Matrix Extensions) som implementeres i kommende serverprosessorer fra Intel Xeon Scalable under kodenavnet Sapphire Rapids, er lagt til. AMX tilbyr nye konfigurerbare registre TMM «TILE» og instruksjoner for håndtering av data i disse registrene, som TMUL (Tile matrix MULtiply) for matrise­multiplikasjon.
    • Flere nye funksjoner er implementert, basert på den nyopprettede DAMON (Data Access MONitor) underkomponenten, som gjør det mulig å spore dataene som er tilgjengelige i arbeidshukommelsen i forbindelse med den valgte prosessen som kjører i brukerrommet. For eksempel gir underkomponenten mulighet til å analysere hvilke spesifikke minneområder prosessen har hatt tilgang til gjennom hele sin drift, og hvilke minneområder som har forblitt ubenyttet.
      • DAMON_RECLAIM for å identifisere og fjerne minneområder som ikke har vært brukt. Mekanismen kan brukes for proaktivt å fjerne minnesider under forhold der det nærmer seg utarmingen av tilgjengelig minne.
      • DAMOS (Data Access Monitoring-based Operation Schemes) for å anvende angitte operasjoner med madvise(), slik som å frigjøre ekstra ledig minne, til minneområder for prosessen hvor en bestemt tilgangsfrekvens til minnet registreres. Innstillinger for DAMOS-parametere gjøres via debugfs.
      • Muligheten for overvåking av det fysiske adresseområdet for minne (tidligere var det kun mulig å spore virtuelle adresser).
    • Implementeringen av zstd-kompresjonsalgoritmen er oppdatert til versjon 1.4.10, noe som har ført til en betydelig økning i ytelsen til ulike kjernens underkomponenter som bruker kompresjon (for eksempel er oppakking av kjernebilder akselerert med 35 %, og ytelsen til oppakking av komprimerte data i Btrfs og SquashFS har økt med 15 %, mens det i ZRAM har økt med 30 %). Opprinnelig ble det i kjernen brukt en separat implementering av zstd, basert på versjon 1.3.1, som ble utgitt for over tre år siden og som ikke inkluderte mange viktige optimaliseringer. I tillegg til overgangen til den aktuelle versjonen forenkler den nye patchen også synkroniseringen med upstream-grenen av zstd, og gjør det mulig å generere kode for å inkludere i kjernen direkte fra hovedlageret av zstd. I fremtiden er det planlagt at zstd-koden i kjernen skal oppdateres i takt med utgivelsen av nye versjoner av zstd-biblioteket.
    • Det er gjort en betydelig forbedring av eBPF-systemet. Muligheten for å kalle funksjoner fra kjerner for BPF-programmer er lagt til. Funksjonen bpf_trace_vprintk() er implementert, som i motsetning til bpf_trace_printk() tillater utskrift av mer enn tre argumenter om gangen. En ny datalagringsstruktur (BPF map) av typen bloom filter er lagt til, som gjør det mulig å bruke den probabilistiske datamodellen for å avgjøre om et element finnes i et sett. Den nye attributten BTF_KIND_TAG er lagt til, som kan brukes i BPF-programmer for å knytte tagger til funksjonsparametre, for eksempel for å forenkle feilsøking i brukerprogrammer. I libbpf er det tillatt å opprette egne seksjoner .rodata.* / .data.*, og støtte for sporing av uprobe og kprobe-hendelser er implementert, med et API for å kopiere alle typer BTF fra ett objekt til et annet. Støtten for AF_XDP er flyttet fra libbpf til et eget bibliotek, libxdp. En JIT-kompilator for BPF-maskinvare er implementert for MIPS-arkitekturen.
    • Støtte for ARMv8.6-utvidelser for timer er implementert for ARM64-arkitekturen, inkludert muligheten for å oppnå selv-synkronisering av systemregistervisning uten bruk av ISB-instruksjoner.
    • For PA-RISC-arkitekturen er det gjort muligheter for å bruke KFENCE-mekanismen for å oppdage feil i minnet, og støtte for KCSAN-race state detektorer er lagt til.
    • Muligheten til å konfigurere tilgangsrettigheter til tracefs på nivå av individuelle brukere og grupper er gitt, for eksempel kan tilgang til sporingsverktøy nå tillates kun for medlemmer av en bestemt gruppe.
  • Virtualisering og sikkerhet
    • I io_uring- og device-mapper-systemene er støtte for generering av revisjonshendelser implementert. I io_uring er muligheten for tilgangskontroll gjennom LSM-moduler gitt. Støtten for revisjon av systemanropet openat2() er lagt til.
    • Kildekoden til kjernen er helt fri for uavbrutte uttrykk case i switch (uten return eller break etter hver case-blokk). Ved bygging av kjernen kan nå modus '-Wimplicit-fallthrough' brukes.
    • Endringer for å stramme grensekontrollene under utførelsen av memcpy()-funksjonen er inkludert.
    • I io_uring-grensesnittet for asynkron inndata / utdata er muligheten for å bruke sikkerhetspolicyer, definert av SELinux- og Smack-moduler, til I/O-operasjoner implementert.
    • I subsystemet IMA (Integrity Measurement Architecture), som gir en ekstern tjeneste muligheten til å verifisere tilstanden til kjernens subsystemer for å sikre deres ekthet, er det implementert muligheten for å bruke regler basert på gruppeidentifikatoren (GID) som filen tilhører eller som brukeren som henvender seg til filen, tilhører.
    • Noen avanserte beskyttelsesmekanismer for tråder og seccomp() mot Spectre-angrep er som standard deaktivert, ettersom de ble ansett som unødvendige og betydelig ikke økte sikkerheten, men derimot negative innvirkninger på ytelsen. Appliceringen av Retpoline-beskyttelse er gjennomgått.
    • Implementeringen av mekanismen cryptoloop er fjernet, og den ble i 2004 erstattet av dm-crypt, som om nødvendig støtter de samme algoritmene.
    • Som standard er ikke-privilegert tilgang til eBPF-subsystemet forbudt. Endringen er gjort for å forhindre bruk av BPF-programmer til å omgå beskyttelse mot angrep via sidekanaler. Ved behov kan administratoren gjenopprette bruken av eBPF av ikke-privilegerte brukere.
    • Hypervisor ACRN, designet for å utføre sanntidsoppgaver og bruke i kritiske systemer, har fått støtte for opprettelse/sletting av virtuelle enheter og MMIO-enhetspassthrough.
    • Kryptomotoren har fått støtte for KPP (Key-agreement Protocol Primitives) definisjoner, som forenkler logikken for utvikling av drivere for kryptosystemer.
    • For hypervisor Hyper-V er det implementert støtte for isolasjonsmodus virtual machines, som innebærer kryptering av innholdet i minnet.
    • I hypervisoren KVM er det lagt til støtte for RISC-V-arkitekturen. Det er implementert muligheter for migrering av virtuelle maskiner innen vertsmiljøet, som kjører med bruk av AMD SEV og SEV-ES-utvidelser. API for live-migrering av gjestesystemer som er kryptert ved hjelp av AMD SEV (Secure Encrypted Virtualization) er lagt til.
    • For PowerPC-arkitekturen er MODUS STRICT_KERNEL_RWX som standard aktivert, som blokkerer bruk av minnesider som samtidig er tilgjengelige for skriving og utføring.
    • Støtte for hot-pluggable minne (Memory hotplug) er avsluttet på 32-bits x86-systemer, som har vært i uvirksom tilstand i over ett år.
    • Biblioteket liblockdep er utelatt fra kjernen og vil nå bli vedlikeholdt separat fra kjernen.
  • Nettverks subsystem
    • For sockets, a new option SO_RESERVE_MEM has been implemented, which allows reserving a certain amount of memory for a socket that will always remain available for the socket and will not be reclaimed. Using this option achieves better performance by reducing the operations of memory allocation and deallocation in the network stack, especially when memory shortages occur in the system.
    • Support has been added for the Automatic Multicast Tunneling protocol (RFC 7450), allowing multicast traffic to be delivered from Multicast-supported networks to recipients in networks without Multicast. The protocol operates by encapsulating in UDP packets.
    • Data IOAM (In-situ Operations, Administration, and Maintenance) encapsulation in transit packets has been improved.
    • The ethtool netlink API has been enhanced with the ability to manage the power 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. In nftables, support for the corresponding filters 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), which follow the transport header, has been added.
    • New sysctl parameters arp_evict_nocarrier and ndisc_evict_nocarrier have been added, where setting them will clear the ARP cache and the ndisc (neighbor discovery) table in case of a link failure (NOCARRIER).
    • The fq_codel (Controlled Delay) queuing management mechanism has added modes for Low Latency, Low Loss, and Scalable Throughput (L4S).
  • Utstyr
    • The amdgpu driver has implemented initial support for the DP 2.0 (DisplayPort 2.0) specification and DisplayPort tunneling over USB4. For the Cyan Skillfish APU (equipped with GPU Navi 1x), support for display controllers has been added. Support for the Yellow Carp APU (mobile Ryzen 6000 'Rembrandt' processors) has been expanded.
    • In the i915 driver, support for Intel Alder Lake S chips has been stabilized, and support for Intel PXP (Protected Xe Path) technology has been implemented, enabling the organization of a hardware-protected graphics session on systems with Intel Xe chips.
    • In the nouveau driver, work has been done to fix bugs and improve code style.
    • Støtte for x86-kompatible Vortex CPU-er (Vortex86MX) er lagt til. Linux har tidligere fungert på disse prosessorene, men det ble nødvendig med eksplisitt identifisering av disse CPU-ene for å deaktivere beskyttelsen mot Spectre/Meltdown-angrep, som ikke gjelder for de nevnte brikkene.
    • Innledende støtte for x86-plattformer Surface Pro 8 og Surface Laptop Studio er lagt til.
    • Driver for lydbrikker brukt i APU-ene AMD Yellow Carp, Van Gogh er lagt til, i tillegg til støtte for lydsystemer og kodeker 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.
    • Driveren ishtp_eclite er lagt til for tilgang til innebygde Intel PSE-kontrollerne (Programmable Service Engine) via ISHTP-protokollen (Integrated Sensor Hub Transport Protocol), for eksempel for å hente data om batteri, temperatur og informasjon relatert til UCSI (USB Type-C Connector System Software Interface).
    • Driver for Nintendo Switch spillkontrollere er lagt til, som støtter Switch Pro og Joy-Cons-enheter. Støtte for Wacom Intuos BT (CTL-4100WL/CTL-6100WL) nettbrett og Apple 2021 Magic Keyboard er også lagt til. Støtten for Sony PlayStation DualSense-kontrollere er forbedret. Støtte for sideknappene på Xiaomi Mi-mus har blitt lagt til.
    • Driver RT89 med støtte for trådløse Realtek 802.11ax-brikker er lagt til, samt drivere for Ethernet-adaptere Asix AX88796C-SPI og Realtek RTL8365MB-VC-svitsjer.
    • For Apple M1-brikkene er drivere for PCI og PASemi i2c lagt til.
    • Støtte for ARM SoC, enheter og plattformer 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 er lagt til.

Kilde: opennet.ru

Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster