Linux 5.7 kernel udgivelse

Efter to måneders udvikling, Linus Torvalds indsendt kerneudgivelse Linux 5.7. Blandt de mest bemærkelsesværdige ændringer: en ny implementering af exFAT-filsystemet, et bareudp-modul til at skabe UDP-tunneler, beskyttelse baseret på pointer-autentificering for ARM64, muligheden for at vedhæfte BPF-programmer til LSM-handlere, en ny implementering af Curve25519, en split- låsedetektor, BPF-kompatibilitet med PREEMPT_RT, fjernelse af grænsen for linjestørrelsen på 80 tegn i koden, under hensyntagen til CPU-temperaturindikatorer i opgaveplanlæggeren, muligheden for at bruge clone() til at frembringe processer i en anden cgroup, beskyttelse mod skrivning til hukommelsen ved hjælp af userfaultfd.

Den nye version indeholder 15033 rettelser fra 1961 udviklere,
patchstørrelse - 39 MB (ændringer påvirkede 11590 filer, tilføjet 570560 linjer kode,
297401 rækker fjernet). Omkring 41 % af alle præsenteret i 5.7
ændringer er relateret til enhedsdrivere, ca. 16 % af ændringerne er
holdning til opdatering af kode specifik for hardwarearkitekturer, 13 %
relateret til netværksstakken, 4% til filsystemer og 4% til interne
kerne undersystemer.

The main innovationer:

  • Diskundersystem, I/O og filsystemer
    • Tilføjet ny exFAT driver implementering, Grundlagt baseret på den nuværende "sdfat" (2.x) kodebase udviklet af Samsung til sine Android-smartphones. Driveren, der tidligere blev tilføjet til kernen, var baseret på ældre Samsung-kode (version 1.2.9) og var omkring 10 % bagefter den nye driver i ydeevne. Lad os huske på, at tilføjelse af exFAT-understøttelse til kernen blev muligt efter Microsoft опубликовала offentlige specifikationer og gjort exFAT-patenter tilgængelige til royaltyfri brug på Linux.
    • Btrfs implementerer en ny ioctl()-kommando - BTRFS_IOC_SNAP_DESTROY_V2, som giver dig mulighed for at slette en undersektion ved dens identifikator. Fuld support til kloning af inline-udstrækninger er tilvejebragt. Antallet af annulleringspunkter for omfordelingsoperationer er blevet udvidet, hvilket har reduceret lange ventetider ved udførelse af 'balance cancel'-kommandoen. Bestemmelsen af ​​backlinks til omfang er blevet fremskyndet (for eksempel er testscriptudførelsestiden faldet fra en time til flere minutter). Tilføjet muligheden for at vedhæfte filudstrækninger til hver inode i et træ. Blokeringsskemaet, der bruges ved skrivning til underpartitioner, og når NOCOW ekskluderes, er blevet omdesignet. Forbedret effektivitet af fsync-udførelse for områder.
    • XFS har forbedret metadatakontrol og fsck for aktive partitioner. Et bibliotek er blevet foreslået til at genopbygge btree-strukturer, som i fremtiden vil blive brugt til at omarbejde xfs_repair og implementere muligheden for gendannelse uden at afmontere partitionen.
    • Eksperimentel støtte til at placere en swap-partition i SMB3-lager er blevet tilføjet til CIFS. Implementerede POSIX-udvidelser til readdir, defineret i SMB3.1.1-specifikationen. Forbedret skriveydelse for 64KB sider, når cache=strict mode er aktiveret, og protokolversioner 2.1+ bruges.
    • FS EXT4 er blevet overført fra bmap og iopoll til at bruge iomap.
    • F2FS giver valgfri support til datakomprimering ved hjælp af zstd-algoritmen. Som standard bruges LZ4-algoritmen til komprimering. Tilføjet understøttelse af kommandoen "chattr -c commit". Visning af monteringstid leveres. Tilføjet ioctl F2FS_IOC_GET_COMPRESS_BLOCKS for at få information om antallet af komprimerede blokke. Tilføjet komprimeringsdataoutput via statx.
    • Ceph-filsystemet har tilføjet muligheden for lokalt at udføre filoprettelse og sletning (fjern link) uden at vente på et svar fra serveren (fungerer i asynkron tilstand). Ændringen kan for eksempel forbedre ydeevnen betydeligt, når du kører rsync-værktøjet.
    • Muligheden for at bruge virtiofs som et filsystem på øverste niveau er blevet tilføjet til OVERLAYFS.
    • Omskrevet stigennemløbskode i VFS, symbolsk linkparsingkode er blevet omarbejdet, og monteringspunktgennemgang er blevet forenet.
    • I scsi-undersystemet til uprivilegerede brugere tilladt udførelse af ZBC-kommandoer.
    • I dm_writecache implementeret evnen til gradvist at rydde cachen baseret på parameteren max_age, som angiver den maksimale levetid for en blok.
    • I dm_integrity tilføjet understøttelse af "kassere"-operationen.
    • I null_blk tilføjet understøttelse af fejlerstatning for at simulere fejl under test.
    • Tilføjet mulighed for at sende udev-meddelelser om ændringer i blokenhedens størrelse.
  • Netværks undersystem
    • Netfilter medfølger ændringer, der markant fremskynder behandlingen af ​​store matchlister (nftables-sæt), som kræver kontrol af en kombination af undernet, netværksporte, protokol og MAC-adresser.
      Optimeringer lavet ind i modulet nft_set_pipapo (PIle PAcket POlicies), som løser problemet med at matche indholdet af en pakke med vilkårlige felttilstandsintervaller, der bruges i filtreringsregler, såsom IP- og netværksportintervaller (nft_set_rbtree og nft_set_hash manipulerer intervalmatching og direkte afspejling af værdier ). Versionen af ​​pipapo vektoriseret ved hjælp af 256-bit AVX2-instruktioner på et system med en AMD Epyc 7402-processor viste en 420% ydelsesforøgelse ved parsing af 30 tusinde poster inklusive portprotokolkombinationer. Stigningen ved sammenligning af en kombination af et undernet og et portnummer ved parsing af 1000 poster var 87 % for IPv4 og 128 % for IPv6.

    • Tilføjet bareudp-modul, som giver dig mulighed for at indkapsle forskellige L3-protokoller, såsom MPLS, IP og NSH, i en UDP-tunnel.
    • Integrationen af ​​MPTCP (MultiPath TCP) komponenter, en udvidelse af TCP-protokollen til at organisere driften af ​​en TCP-forbindelse med levering af pakker samtidigt langs flere ruter gennem forskellige netværksgrænseflader knyttet til forskellige IP-adresser, er fortsat.
    • Tilføjet understøttelse af hardwareaccelerationsmekanismer til indkapsling af Ethernet-rammer i 802.11 (Wi-Fi).
    • Når en enhed flyttes fra et netværksnavneområde til et andet, justeres adgangsrettighederne og ejerskabet af de tilsvarende filer i sysfs.
    • Tilføjet muligheden for at bruge SO_BINDTODEVICE-flaget for ikke-rootbrugere.
    • Den tredje del af patches er blevet accepteret, der konverterer ethtool-værktøjssættet fra ioctl() til at bruge netlink-grænsefladen. Den nye grænseflade gør det nemmere at tilføje udvidelser, forbedrer fejlhåndteringen, gør det muligt at sende meddelelser, når tilstanden ændres, forenkler interaktionen mellem kernen og brugerrummet og reducerer antallet af navngivne lister, der skal synkroniseres.
    • Tilføjet muligheden for at bruge specielle hardwareacceleratorer til at udføre forbindelsessporingsoperationer.
    • I netfilter tilføjet en krog til at forbinde klassifikatorer af udgående pakker (egress), som komplementerede den tidligere nuværende krog for indgående pakker (ingress).
  • Virtualisering og sikkerhed
    • Tilføjet hardwareimplementering af pointer-godkendelse (Pointer-godkendelse), som bruger specialiserede ARM64 CPU-instruktioner til at beskytte mod angreb ved hjælp af returorienteret programmering (ROP) teknikker, hvor angriberen ikke forsøger at placere sin kode i hukommelsen, men opererer på stykker af maskininstruktioner, der allerede er tilgængelige i indlæste biblioteker, slutter med en kontrolreturinstruktion. Sikkerhed kommer ned til at bruge digitale signaturer til at verificere returadresser på kerneniveau. Signaturen gemmes i de ubrugte topstykker af selve markøren. I modsætning til softwareimplementeringer udføres oprettelsen og verifikationen af ​​digitale signaturer ved hjælp af specielle CPU-instruktioner.
    • Tilføjet evnen til at beskytte et hukommelsesområde mod skrivning ved hjælp af systemkaldet userfaultfd(), designet til at håndtere sidefejl (adgang til ikke-allokerede hukommelsessider) i brugerrummet. Ideen er at bruge userfaultfd() både til at opdage adgangskrænkelser til sider, der er markeret som skrivebeskyttede, og til at kalde en behandler, der kan reagere på sådanne skriveforsøg (f.eks. til at håndtere ændringer under oprettelsen af ​​live snapshots af kørende processer, stat. capture, når du dumper hukommelsesdumps til disk, implementerer delt hukommelse, sporer ændringer i hukommelsen). Funktionalitet tilsvarende ved at bruge mprotect() i forbindelse med SIGSEGV-signalhandleren, men det virker mærkbart hurtigere.
    • SELinux har forældet parameteren "checkreqprot", som giver dig mulighed for at deaktivere kontrol af hukommelsesbeskyttelse ved behandling af regler (tillader brug af eksekverbare hukommelsesområder, uanset reglerne specificeret i reglerne). Kernfs-symlinks får lov til at arve konteksten af ​​deres overordnede mapper.
    • sammensætningen inkluderet modul KRSI, som giver dig mulighed for at vedhæfte BPF-programmer til alle LSM-hooks i kernen. Ændringen giver dig mulighed for at oprette LSM-moduler (Linux Security Module) i form af BPF-programmer til at løse revisionsproblemer og obligatorisk adgangskontrol.
    • Udført Optimerer ydeevnen af ​​/dev/random ved at samle CRNG-værdier i stedet for at kalde RNG-instruktioner individuelt. Forbedret ydeevne af getrandom og /dev/random på ARM64-systemer, der giver RNG-instruktioner.
    • Implementering af en elliptisk kurve Curve25519 erstattet for muligheden fra biblioteket HACL, for hvilket givet matematisk bevis for formel pålidelighedsverifikation.
    • Tilføjet mekanisme til at informere om ledige hukommelsessider. Ved at bruge denne mekanisme kan gæstesystemer overføre information om sider, der ikke længere bruges til værtssystemet, og værten kan tage sidedataene tilbage.
    • I vfio/pci tilføjet understøttelse af SR-IOV (Single-Root I/O Virtualization).
  • Hukommelse og systemtjenester
    • Fra 80 til 100 tegn steget begrænsning af den maksimale linjelængde i kildeteksterne. Samtidig anbefales udviklere stadig at holde sig inden for 80 tegn per linje, men det er ikke længere en hård grænse. Derudover vil overskridelse af linjestørrelsesgrænsen nu kun resultere i en build-advarsel, hvis checkpatch køres med muligheden '--strict'. Ændringen vil gøre det muligt ikke at distrahere udviklere ved manipulation med mellemrum og føle dig mere fri, når du justerer kode, samt vil forhindre overdreven linjebrud, foruroligende kodeforståelse og søgning.
    • Tilføjet understøttelse af EFI mixed boot mode, som giver dig mulighed for at indlæse en 64-bit kerne fra 32-bit firmware, der kører på en 64-bit CPU uden at bruge en specialiseret bootloader.
    • Inkluderet system til identifikation og fejlretning af splitlåse (“split lås"), som opstår ved adgang til ikke-justerede data i hukommelsen på grund af det faktum, at når man udfører en atominstruktion, krydser dataene to CPU-cache-linjer. En sådan blokering resulterer i et betydeligt præstationshit (1000 cyklusser langsommere end en atomoperation på data, der falder ind i én cache-linje). Afhængigt af "split_lock_detect" boot-parameteren, kan kernen opdage sådanne låse med det samme og udstede advarsler eller sende et SIGBUS-signal til den applikation, der forårsager låsen.
    • Opgaveplanlæggeren giver sporing af temperatursensorer (Termisk tryk) og implementeret under hensyntagen til overophedning ved placering af opgaver. Ved at bruge de leverede statistikker kan den termiske regulator justere den maksimale CPU-frekvens, når den er overophedet, og opgaveplanlæggeren tager nu hensyn til reduktionen i computerkraft på grund af en sådan reduktion i frekvens, når den planlægger opgaver til at køre (tidligere reagerede planlæggeren på ændringer i frekvens med en vis forsinkelse, i nogen tid ved at træffe beslutninger baseret på oppustede antagelser om tilgængelige computerressourcer).
    • Opgaveplanlæggeren inkluderer invariante indikatorer belastningssporing, så du kan estimere belastningen korrekt, uanset den aktuelle CPU-driftsfrekvens. Ændringen giver dig mulighed for mere præcist at forudsige opførsel af opgaver under forhold med dynamiske ændringer i spænding og CPU-frekvens. For eksempel vil en opgave, der forbrugte 1/3 af CPU-ressourcerne ved 1000 MHz, forbruge 2/3 af ressourcerne, når frekvensen falder til 500 MHz, hvilket tidligere skabte en falsk antagelse om, at den kørte med fuld kapacitet (dvs. større til skemalæggeren kun ved at reducere frekvensen, hvilket førte til, at der blev truffet forkerte beslutninger i schedutil cpufreq-guvernøren).
    • Intel P-state-driveren, som er ansvarlig for at vælge ydeevnetilstande, er blevet skiftet til brug skema.
    • Muligheden for at bruge BPF-undersystemet, når kernen kører i realtid (PREEMPT_RT), er blevet implementeret. Tidligere, når PREEMPT_RT var aktiveret, skulle BPF være deaktiveret.
    • En ny type BPF-program er blevet tilføjet - BPF_MODIFY_RETURN, som kan knyttes til en funktion i kernen og ændre værdien returneret af denne funktion.
    • Tilføjet lejlighed Brug af clone3()-systemkaldet til at oprette en proces i en cgroup, der er forskellig fra den overordnede cgroup, hvilket gør det muligt for den overordnede proces at anvende begrænsninger og aktivere regnskab umiddelbart efter at have skabt en ny proces eller tråd. For eksempel kan en service manager direkte allokere nye tjenester til separate cgroups, og nye processer, når de placeres i "frosne" cgroups, vil blive stoppet øjeblikkeligt.
    • i Kbuild tilføjet understøttelse af miljøvariablen "LLVM=1" for at skifte til Clang/LLVM-værktøjssættet, når kernen bygges. Kravene til binutils-versionen er blevet hævet (2.23).
    • En sektion /sys/kernel/debug/kunit/ er blevet tilføjet til debugfs med resultaterne af kunit-tests.
    • Tilføjet kernestartparameter pm_debug_messages (analogt med /sys/power/pm_debug_messages), som muliggør output af fejlfindingsoplysninger om driften af ​​strømstyringssystemet (nyttigt ved fejlfinding af problemer med dvale- og standbytilstand).
    • Til det asynkrone I/O-interface io_uring understøttelse tilføjet splejs () и valg af atombuffer.
    • Forbedret cgroup-profilering ved hjælp af perf-værktøjssættet. Tidligere kunne perf kun profilere opgaver i en specifik cgroup og kunne ikke finde ud af, hvilken cgroup den aktuelle prøve tilhører. perf henter nu cgroup information for hver prøve, så du kan profilere mere end én cgroup og anvende sortering efter
      cgroup i rapporter.

    • cgroupfs, en pseudo-FS til håndtering af cgroups, har tilføjet understøttelse af udvidede attributter (xattrs), hvormed du for eksempel kan efterlade yderligere information til handlere i brugerrummet.
    • I cgroup memory controller tilføjetog understøttelse af rekursiv beskyttelse af "memory.low"-værdien, som regulerer den minimale mængde RAM, der leveres til gruppemedlemmer. Når du monterer et cgroup-hierarki med "memory_recursiveprot"-indstillingen, vil værdien af ​​"memory.low", der er indstillet for de nederste noder, automatisk blive distribueret til alle underordnede noder.
    • Tilføjet Uacce (Unified/User-space-access-intended Accelerator Framework)-ramme til deling af virtuelle adresser (SVA, Shared Virtual Addressing) mellem CPU'en og perifere enheder, hvilket giver hardwareacceleratorer adgang til datastrukturer i hoved-CPU'en.
  • Hardware arkitekturer
    • For ARM-arkitekturen er muligheden for hot-fetch-hukommelse implementeret.
    • Til RISC-V-arkitekturen er der tilføjet understøttelse af hot plugging og fjernelse af CPU'er (CPU hotplug). For 32-bit RISC-V er eBPF JIT implementeret.
    • Muligheden for at bruge 32-bit ARM-systemer til at køre KVM-gæstemiljøer er blevet fjernet.
    • Fjernede "dummy" NUMA-implementeringen for s390-arkitekturen, for hvilken der ikke blev fundet nogen use cases til at opnå ydeevneforbedringer.
    • For ARM64, tilføjet understøttelse af AMU (Activity Monitors Unit) udvidelsen, defineret i ARMv8.4 og giver ydeevnetællere, der bruges til at beregne frekvensskaleringskorrektionsfaktorer i opgaveplanlæggeren.
  • Оборудование
    • Tilføjet understøttelse af vDPA-enheder, der bruger en dataudvekslingskanal, der overholder virtio-specifikationerne. vDPA-enheder kan enten være fysisk tilsluttet udstyr eller software-emulerede virtuelle enheder.
    • I GPIO-undersystemet optrådte en ny ioctl()-kommando til at overvåge ændringer, der giver dig mulighed for at informere processen om ændringer i tilstanden af ​​enhver GPIO-linje. Som et eksempel på brug af den nye kommando foreslog gpio-watch værktøj.
    • I i915 DRM-driveren til Intel-skærmkort inkluderet standardunderstøttelse af Tigerlake ("Gen12") chips og tilføjet indledende understøttelse af OLED-baggrundsbelysningskontrol. Forbedret understøttelse af Ice Lake, Elkhart Lake, Baytrail og Haswell chips.
    • I amdgpu-driveren tilføjet mulighed for at indlæse firmware i USBC-chippen til ASIC. Forbedret understøttelse af AMD Ryzen 4000 "Renoir"-chips. Der er nu understøttelse af styring af OLED-paneler. Visning af firmwarestatus i debugfs.
    • Muligheden for at bruge OpenGL 4 i gæstesystemer er blevet tilføjet til vmwgfx DRM-driveren til VMware-virtualiseringssystemer (tidligere blev OpenGL 3.3 understøttet).
    • Tilføjet ny DRM driver tidss til TI Keystone platform display systemet.
    • Tilføjede drivere til LCD-paneler: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech FRK101D, 01, Rocktech
    • Til strømstyringssystemet tilføjet understøttelse af den Atom-baserede Intel Jasper Lake (JSL) platform.
    • Tilføjet understøttelse af Pinebook Pro laptop baseret på Rockchip RK3399, Pine64 PineTab tablet og smartphone PinePhone baseret på Allwinner A64.
    • Tilføjet understøttelse af nye audio-codecs og chips:
      Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc.

    • Tilføjet understøttelse af ARM-kort og platforme Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron "sl28", 11 i.MX6 TechNexion Pico-kortmuligheder, tre nye Toradex Colibri-muligheder, Samsung S7710 Galaxy Xcover 2 baseret på ST -Ericsson u8500, DH Electronics DHCOM SoM og PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.

Kilde: opennet.ru

Tilføj en kommentar