Efter to måneders udvikling præsenterede Linus Torvalds kerneudgivelse . Blandt de mest bemærkelsesværdige ændringer er: en ny implementering af exFAT-filsystemet, bareudp-modul til oprettelse af UDP-tunneler, beskyttelse baseret på pegerautentificering for ARM64, muligheden for at knytte BPF-programmer til LSM-håndterere, en ny implementering af Curve25519, "split-lock" detektor, BPF-kompatibilitet med PREEMPT_RT, ophævelse af begrænsningen på 80-tegns længde for strenge i koden, hensyntagen til CPU-temperaturmålinger i opgaven scheduler, muligheden for at bruge clone() til at skabe processer i en anden cgroup, beskyttelse mod skrivning til hukommelse ved hjælp af userfaultfd.
I den nye version er der 15033 rettelser fra 1961 udviklere,
patchstørrelsen er 39 MB (ændringerne berørte 11590 filer, 570560 linjer kode blev tilføjet,
297401 linjer blev fjernet). Omkring 41% af alle ændringerne i 5.7
er relateret til enhedsdrivere, cirka 16% af ændringerne har
relation til opdatering af kode, som er specifik for hardwarearkitekturer, 13%
er relateret til netværksstakken, 4% til filsystemer og 4% til interne
kernesubsystemer.
:
- DiskSubsystem, input/output og filsystemer
- En ny implementering af exFAT-driveren er tilføjet, på den aktuelle kodebase "sdfat" (2.x), udviklet af Samsung til sine Android-smartphones. Den tidligere tilføjede driver i kernen var baseret på forældet Samsung-kode (version 1.2.9) og præsterede cirka 10% dårligere end den nye driver. Det skal bemærkes, at tilføjelsen af exFAT-support i kernen blev muligt, efter at Microsoft de offentlige specifikationer og gav mulighed for gratis brug af exFAT-patenter i Linux.
- I Btrfs er en ny ioctl()-kommando implementeret — BTRFS_IOC_SNAP_DESTROY_V2, der muliggør sletning af et underafsnit baseret på dets ID. Der er opnået fuld støtte til kloning af inline-extent. Antallet af fortrydelsessteder i omfordelingsoperationer er blevet udvidet, hvilket har reduceret lange ventetider ved udførelse af kommandoen 'balance cancel'. Bestemmelsen af omvendte henvisninger til extenter er blevet accelereret (f.eks. er tiden til udførelse af testscenariet reduceret fra en time til nogle få minutter). Muligheden for at knytte et inode til hver extent i filens extent-træ er blevet tilføjet. Låseordningen, der anvendes ved skrivning til underafsnit og ved undtagelse af NOCOW, er blevet revideret. Effektiviteten af fsync til intervaller er blevet forbedret.
- I XFS er metadata-kontrollen og udførelsen af fsck til aktive partitioner forbedret. Et bibliotek til genopbygning af btree-strukturer er foreslået, hvilket i fremtiden vil blive brugt til at redesignere xfs_repair og implementere muligheden for at genoprette uden at afmontere partitionen.
- I CIFS er eksperimentel støtte til placering af swap-partitioner i SMB3-lagre tilføjet. POSIX-udvidelser til readdir, som defineret i SMB3.1.1-specifikationen, er implementeret. Skrivningsydelsen for 64KB-sider er forbedret, når cache=strict-tilstand er aktiveret, og protokolversionerne 2.1+ anvendes.
- EXT4-filsystemet er overført fra bmap og iopoll til brug af iomap.
- I F2FS er der indført valgfri støtte til datakomprimering ved hjælp af zstd-algoritmen. Som standard anvendes LZ4-algoritmen til komprimering. Støtte til kommanden «chattr -c commit» er tilføjet. Tidsstemplet for montering vises. ioctl F2FS_IOC_GET_COMPRESS_BLOCKS er tilføjet til at få oplysninger om antallet af komprimerede blokke. Komprimeringsdata vises via statx.
- I Ceph-filsystemet er der tilføjet mulighed for lokalt at udføre operationer til oprettelse og sletning (unlink) af filer uden at vente på svar fra serveren (asynkron drift). Denne ændring forbedrer betydeligt ydelsen ved brug af rsync.
- I OVERLAYFS er der tilføjet mulighed for at bruge virtiofs som et overliggende filsystem.
- koden til at gennemløbe stier i VFS, koden til at analysere symbolske links er genopbygget, og gennemgangen af monteringspunkter er ensartet.
- I scsi-subsystemet er det tilladt for ikke-privilegerede brugere I dm_writecache
- er muligheden for gradvis rensning af cachen baseret på parameteren max_age, som angiver den maksimale levetid for en blok, tilføjet. I dm_integrity
- er støtten til «discard»-operationen. I null_blk
- er der støtte til fejlsimulering for at simulere nedbrud under testning. muligheden for at sende udev-meddelelser om ændring i størrelsen af blokenheden.
- I Netfilter er der inkluderet
- Netværkssubsystem
- ændringer, der væsentligt øger hastigheden for behandling af store matchlister (nftables set), hvor kombinationen af subnet, netværksporte, protokol og MAC-adresser skal kontrolleres. er blevet foretaget.
Optimeringer I modulet nft_set_pipapo (PIle PAcket POlicies), som løser opgaven med at matche indholdet af pakker med de anvendte filtreringsregler for vilkårlige rækkevidder af felts tilstand, såsom IP- og netværksportområder (nft_set_rbtree og nft_set_hash håndterer matchningen af intervaller og direkte refleksion af værdier). Den vektoriserede version af pipapo med 256-bit AVX2-instruktioner på et system med en AMD Epyc 7402-processor viste en ydeevneforøgelse på 420% ved parsing af 30.000 posteringer, som inkluderede port-protokol-koblinger. Forøgelsen ved at matche en gruppe fra et subnet og portnummeret ved parsing af 1.000 posteringer var 87% for IPv4 og 128% for IPv6. - Modulet bareudp, der muliggør indkapsling af forskellige L3-protokoller i en UDP-tunnel, såsom MPLS, IP og NSH.
- Integrationen af MPTCP (MultiPath TCP) komponenter er blevet fortsat, en udvidelse af TCP-protokollen for at organisere arbejdet med TCP-forbindelsen ved at levere pakker samtidig via flere ruter gennem forskellige netværksgrænseflader, knyttet til forskellige IP-adresser.
- Understøttelse af mekanismer til hardwareacceleration af indkapsling af Ethernet-rammer i 802.11 (Wi-Fi).
- Ved flytning af en enhed fra et netværksnavnrum (network namespace) til et andet, er der sikret en justering af adgangsrettigheder og ejer af de relevante filer i sysfs.
- Mulighed for at bruge flaget SO_BINDTODEVICE er blevet givet til brugere uden root-rettigheder.
- Den tredje del af patchene til at omdanne ethtool-værktøjet fra ioctl() til brugen af netlink-grænsefladen er blevet vedtaget. Den nye grænseflade forenkler tilføjelsen af udvidelser, forbedrer fejlbehandling, muliggør at sende underretninger ved ændringer af status, forenkler interaktionen mellem kernen og brugerrummet og reducerer antallet af synkroniserede navngivne lister.
- Mulighed for at anvende specialiserede hardwareacceleratorer til udførelse af forbindelse-tracking operationer er blevet tilføjet.
- I netfilter en hook til tilslutning af klassifikatorer for udgående pakker (egress), som supplerer den tidligere tilstedeværende hook for indgående pakker (ingress).
- ændringer, der væsentligt øger hastigheden for behandling af store matchlister (nftables set), hvor kombinationen af subnet, netværksporte, protokol og MAC-adresser skal kontrolleres. er blevet foretaget.
- Virtualisering og sikkerhed
- En hardwareimplementation af pointerautentificering er blevet tilføjet (), der anvender specialiserede ARM64 CPU-instruktioner til at beskytte mod angreb ved hjælp af return-oriented programming (ROP), hvor angriberen ikke forsøger at placere sin kode i hukommelsen, men arbejder med eksisterende maskininstruktioner i de indlæste biblioteker, der slutter med en return-instruktion. Beskyttelsen består i brugen af digitale signaturer til at kontrollere returadresser på kerne-niveau. Signaturen gemmes i de ubrugte øverste bits af selve pegeren. I modsætning til softwareimplementeringer, skabes og kontrolleres digitale signaturer ved hjælp af specialiserede CPU-instruktioner.
- muligheden for at beskytte hukommelsesområder mod skrivning ved hjælp af systemopkaldet userfaultfd(), som er beregnet til at håndtere page faults (adgang til ikke-allokerede hukommelsessider) i brugerens rum. Ideen er at bruge userfaultfd() til også at spore adgangsforstyrrelser til sider, der er markeret som skrivebeskyttede, og kalde en behandler, der kan reagere på sådanne skrivningsforsøg (for eksempel til at håndtere ændringer i processen med at oprette live-snapshots af kørende processer, sikre tilstand ved dump af hukommelse til disk, implementere delt hukommelse, spore ændringer i hukommelsen). Funktionaliteten anvendelsen af mprotect() i forbindelse med signalbehandleren SIGSEGV, men fungerer mærkbart hurtigere.
- I SELinux er parameteren «checkreqprot», der gør det muligt at deaktivere hukommelsesbeskyttelseskontrol ved behandling af regler (tillader brug af udførelsesområder i hukommelsen, uanset de restriktioner fastsat i reglerne), blevet erklæret forældet. Symboliske links i kernfs har fået tilladelse til at arve konteksten fra forældrekataloger.
- Tilføjet til modul , der gør det muligt at knytte BPF-programmer til enhver LSM-hæk i kernen. Ændringen muliggør oprettelse af LSM-moduler (Linux Security Module) i form af BPF-programmer til at løse opgaver med revision og mandatadgangskontrol.
- ydelsesoptimering af /dev/random ved hjælp af batchoverførsel af CRNG-værdier i stedet for separate opkald af RNG-instruktioner. Ydelsen for getrandom og /dev/random på ARM64-systemer, der leverer RNG-instruktioner, er forbedret.
- Implementeringen af den elliptiske kurve Curve25519 udskiftet HACL matematisk bevis for formel verifikation af pålidelighed.
- mekanismen til at informere om frie hukommelsessider. Ved hjælp af denne mekanisme kan gæstesystemer sende oplysninger til værtsystemet om sider, der ikke længere bruges, og værtsystemet kan genoptage disse sider.
- I vfio/pci støtte til SR-IOV (Single-Root I/O Virtualization).
- Hukommelse og systemtjenester
- Fra 80 til 100 tegn begrænsning på den maksimale længde af linjen i kildekoderne. Udviklere anbefales stadig at holde sig inden for 80 tegn i linjen, men dette er ikke længere en streng grænse. Desuden vil overskridelse af grænsen for linjestørrelse nu kun medføre en advarsel under kompileringen, hvis værktøjet checkpatch køres med indstillingen "—strict". Denne ændring vil gøre det muligt for udviklere at med mellemrum og i højere grad føle sig frit til at justere koden, samt overdreven linjeskille, forståelsen af koden og søgningen.
- støtte til blandet boot-tilstand EFI, der muliggør boot af et 64-bit kerne fra en 32-bit firmware uden brug af en specialiseret bootloader, der kører på en 64-bit CPU.
- system til opdagelse og debugging af split locks (""), der opstår ved adgang til ikke-alignerede data i hukommelsen, fordi data under udførelsen af en atomar instruktion krydser to cache-linjer i CPU'en. Sådanne låse fører til et betydeligt fald i ydeevnen (op til 1000 cyklusser langsommere end en atomar operation med data, der falder inden for en cache-linje). Afhængig af bootparameteren "split_lock_detect" kan kernen dynamisk opdage sådanne låse og udgive advarsler eller sende SIGBUS signal til den applikation, der forårsagede låsen.
- I opgaveplanlæggeren er der sikret overvågning af temperatureksemets data () og overvåger overophedning ved opgaveplacering. Ved at bruge den udleverede statistik kan temperaturbehandleren (thermal governor) justere maksimal CPU-frekvens ved overophedning, og opgaveplanlæggeren tager nu højde for reduktion af beregningskraft på grund af sådanne frekvensjusteringer ved planlægning af opgavekørsler (tidligere reagerede planlæggeren på ændringer i frekvensen med en vis forsinkelse, idet den i nogen tid traf beslutninger baseret på overvurderede forudsætninger om tilgængelige beregningsressourcer).
- I opgaveplanlæggeren er der involveret til belastningsovervågning, som muliggør korrekt vurdering af belastningen, uanset den aktuelle CPU-frekvens. Ændringen giver en mere præcis forudsigelse af opgavers adfærd under dynamiske ændringer i spænding og CPU-frekvens. For eksempel vil en opgave, der tidligere krævede 1/3 af CPU'ens ressourcer ved en frekvens på 1000 MHz, nu kræve 2/3 af ressourcerne ved nedsættelse af frekvensen til 500 MHz, hvilket tidligere skabte en falsk antagelse om fuld kapacitet (dvs. opgaverne sås som større for planlæggeren blot på grund af reduktionen i frekvens, hvilket førte til forkerte beslutninger i schedutil cpufreq governor).
- Intel P-state-driveren, der er ansvarlig for valget af ydeevneindstillinger, er overgået til brug af .
- Muligheden for at bruge BPF-subsystemet under kernelens realtidsdrift (PREEMPT_RT) er implementeret. Tidligere blev det anbefalet at deaktivere BPF, når PREEMPT_RT blev aktiveret.
- En ny type BPF-programmer er blevet tilføjet — BPF_MODIFY_RETURN, som kan knyttes til funktioner i kernen og ændre den værdi, som disse funktioner returnerer.
- Tilføjet for at anvende systemopkaldet clone3() til at oprette en proces i en cgroup, der adskiller sig fra den overordnede cgroup, hvilket gør det muligt for den overordnede proces at anvende begrænsninger og aktivere regnskab straks efter oprettelsen af en ny proces eller tråd. For eksempel kan servicehåndtereren direkte tildele nye tjenester til separate cgroups, og nye processer placeret i 'frosne' cgroups vil straks blive stoppet.
- i Kbuild støtte til miljøvariablen 'LLVM=1' for at skifte til Clang/LLVM-værktøjet ved kompilering af kernen. Kravene til binutils-versionen er hævet (2.23).
- I debugfs er sektionen /sys/kernel/debug/kunit/ blevet tilføjet med resultaterne fra kunit-testene.
- Tilføjet parameter til indlæsning af kernen pm_debug_messages (analog til /sys/power/pm_debug_messages), der inkluderer output af fejlsøgning af informationssystemet for strømstyring (nyttigt til fejlfinding af problemer med hvile- og dvale-tilstande).
- I grænsefladen for asynkron input/output tilføjet støtte til og .
- Forbedret profilering af cgroup ved hjælp af perf værktøjet. Tidligere kunne perf kun profilere opgaver i en bestemt cgroup og kunne ikke finde ud af, hvilken cgroup den aktuelle prøve tilhørte. Nu får perf oplysninger om cgroup for hver prøve, hvilket muliggør profilering af mere end én cgroup og anvendelse af sortering efter
cgroup i rapporterne. - I cgroupfs, pseudo-FS til styring af cgroups, er der tilføjet støtte til udvidede attributter (xattrs), som fx gør det muligt at efterlade yderligere oplysninger til behandlere i brugerrummet.
- I cgroup memory controller tilføjet støtte til rekursiv beskyttelse af værdien "memory.low", som regulerer det minimale mængde RAM, der tildeles gruppens medlemmer. Når hierarkiet af cgroup er monteret med indstillingen "memory_recursiveprot", vil værdien "memory.low", der er indstillet for de nederste noder, automatisk blive fordelt til alle underliggende noder.
- Uacce framework (Unified/User-space-access-intended Accelerator Framework) til deling af virtuelle adresser (SVA, Shared Virtual Addressing) mellem CPU og perifere enheder, hvilket giver hardwareacceleratorer adgang til datakonstruktioner i hoved-CPU.
- Hardwarearkitekturer
- For ARM-arkitekturen er muligheden for hot-plugging af hukommelse blevet implementeret.
- For RISC-V-arkitekturen er der tilføjet støtte til hot-plugging og hot-unplugging af CPU (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.
- Den "fiktive" implementering af NUMA til s390 arkitekturen er blevet fjernet, da der ikke er fundet brugsscenarier, der kan give forbedret ydeevne.
- For ARM64 er støtte til AMU (Activity Monitors Unit) tilføjet, som er defineret i ARMv8.4 og giver præstationsstællere, der er brugt til beregning af skalering af frekvenskorrektion i opgaveplanlæggeren.
- Udstyr
- understøttelse af vDPA-enheder, der bruger en datakanal, der er i overensstemmelse med virtio-specifikationerne. vDPA-enheder kan være både fysisk tilsluttede enheder og software-emulerede virtuelle enheder.
- I GPIO-underdelen et nyt ioctl()-kommando til overvågning af ændringer, der muliggør at informere processen om ændringer i tilstanden af enhver GPIO-linie. Som eksempel på brugen af den nye kommando værktøjet gpio-watch.
- I DRM-driveren i915 til Intel-grafikkort er der som standard tilføjet understøttelse af Tigerlake-chips ("Gen12") og tilføjet indledende understøttelse af OLED-baggrundsbelysning. Understøttelsen af Ice Lake, Elkhart Lake, Baytrail og Haswell-chips er forbedret.
- I amdgpu-driveren er der mulighed for at indlæse firmware i USBC-chippen for ASIC. Understøttelsen af AMD Ryzen 4000 "Renoir"-chips er forbedret. Der er blevet tilføjet understøttelse af OLED-paneler. Tilstanden for firmwaren vises i debugfs.
- I DRM-driveren vmwgfx til VMware-virtualiseringssystemer er muligheden for at bruge OpenGL 4 i gæstesystemerne blevet tilføjet (tidligere blev OpenGL 3.3 understøttet).
- En ny DRM-driver tidss til display-systemet på TI Keystone-platformen er blevet tilføjet.
- Der er tilføjet drivere til LCD-paneler: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101II01D-CT, Frida FRD350H54004.
- I strømstyringssystemet er understøttelsen af Intel Jasper Lake (JSL) platformen baseret på Atom blevet tilføjet.
- Der er tilføjet understøttelse af Pinebook Pro-bærbare computere baseret på Rockchip RK3399, Pine64 PineTab-tabletten og smartphones baseret på Allwinner A64.
- Der er tilføjet understøttelse af nye lydkodek og chips:
Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc. - Der er tilføjet understøttelse af ARM-platforme og Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron "sl28", 11 forskellige i.MX6 TechNexion Pico boards, tre nye varianter af Toradex Colibri, 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
