Linux-kjerneutgivelse 5.7

Etter to måneder med utvikling Linus Torvalds innsendt kjerneutgivelse Linux 5.7. Blant de mest bemerkelsesverdige endringene: en ny implementering av exFAT-filsystemet, en bareudp-modul for å lage UDP-tunneler, beskyttelse basert på pekerautentisering for ARM64, muligheten til å knytte BPF-programmer til LSM-behandlere, en ny implementering av Curve25519, en delt- låsdetektor, BPF-kompatibilitet med PREEMPT_RT, fjerning av grensen på 80-tegns linjestørrelse i koden, tar hensyn til CPU-temperaturindikatorer i oppgaveplanleggeren, muligheten til å bruke clone() for å skape prosesser i en annen cgroup, beskyttelse mot skriving til minnet ved å bruke userfaultfd.

Den nye versjonen inkluderer 15033 1961 rettelser fra XNUMX XNUMX utviklere,
oppdateringsstørrelse - 39 MB (endringer påvirket 11590 filer, lagt til 570560 linjer med kode,
297401 rader fjernet). Omtrent 41 % av alle presentert i 5.7
endringer er relatert til enhetsdrivere, omtrent 16 % av endringene er det
holdning til oppdatering av kode spesifikk for maskinvarearkitekturer, 13 %
relatert til nettverksstakken, 4 % til filsystemer og 4 % til interne
kjerneundersystemer.

Den viktigste innovasjoner:

  • Diskundersystem, I/O og filsystemer
    • Lagt til ny exFAT-driverimplementering, grunnlagt basert på den nåværende "sdfat" (2.x) kodebasen utviklet av Samsung for sine Android-smarttelefoner. Driveren tidligere lagt til kjernen var basert på eldre Samsung-kode (versjon 1.2.9) og var omtrent 10 % bak den nye driveren i ytelse. La oss huske at det ble mulig å legge til exFAT-støtte til kjernen etter Microsoft опубликовала offentlige spesifikasjoner og gjort exFAT-patenter tilgjengelig for royaltyfri bruk på Linux.
    • Btrfs implementerer en ny ioctl()-kommando - BTRFS_IOC_SNAP_DESTROY_V2, som lar deg slette en underseksjon ved hjelp av identifikatoren. Full støtte for kloning av inline-utstrekninger er gitt. Antall kanselleringspunkter for redistribusjonsoperasjoner er utvidet, noe som har redusert lange ventetider når du utfører kommandoen "saldo avbryt". Bestemmelsen av tilbakekoblinger til omfang har blitt akselerert (for eksempel har testskriptutførelsestiden redusert fra en time til flere minutter). Lagt til muligheten til å legge ved filutstrekninger til hver inde i et tre. Blokkeringsskjemaet som brukes ved skriving til underpartisjoner og når NOCOW ekskluderes, har blitt redesignet. Forbedret effektivitet av fsync-kjøring for områder.
    • XFS har forbedret metadatasjekking og fsck for aktive partisjoner. Et bibliotek er foreslått for å gjenoppbygge btree-strukturer, som i fremtiden vil bli brukt til å omarbeide xfs_repair og implementere muligheten for gjenoppretting uten å demontere partisjonen.
    • Eksperimentell støtte for å plassere en swap-partisjon i SMB3-lagringer er lagt til CIFS. Implementerte POSIX-utvidelser til readdir, definert i SMB3.1.1-spesifikasjonen. Forbedret skriveytelse for 64KB sider når cache=strict mode er aktivert og protokollversjoner 2.1+ brukes.
    • FS EXT4 er overført fra bmap og iopoll til å bruke iomap.
    • F2FS gir valgfri støtte for datakomprimering ved hjelp av zstd-algoritmen. Som standard brukes LZ4-algoritmen for komprimering. Lagt til støtte for kommandoen "chattr -c commit". Visning av monteringstid er gitt. Lagt til ioctl F2FS_IOC_GET_COMPRESS_BLOCKS for å få informasjon om antall komprimerte blokker. Lagt til komprimeringsdatautgang via statx.
    • Ceph-filsystemet har lagt til muligheten til å lokalt utføre filopprettings- og slettingsoperasjoner (frakoble) uten å vente på svar fra serveren (fungerer i asynkron modus). Endringen kan for eksempel forbedre ytelsen betydelig når du kjører rsync-verktøyet.
    • Muligheten til å bruke virtiofs som et filsystem på toppnivå er lagt til OVERLAYFS.
    • Omskrevet banetraverseringskode i VFS, symbolsk linkparsingkode har blitt omarbeidet, og monteringspunktgjennomgang er blitt forenet.
    • I scsi-undersystemet til uprivilegerte brukere lov utførelse av ZBC-kommandoer.
    • I dm_writecache implementert muligheten til å gradvis tømme hurtigbufferen basert på max_age-parameteren, som angir maksimal levetid for en blokk.
    • I dm_integrity la til støtte for "kast"-operasjonen.
    • I null_blk la til støtte for feilerstatning for å simulere feil under testing.
    • La til muligheten til å sende udev-varsler om endringer i blokkeringsenhetsstørrelse.
  • Nettverksundersystem
    • Nettfilter inkludert endringer, øker betydelig hastighet på behandlingen av store samsvarslister (nftables-sett), som krever kontroll av en kombinasjon av subnett, nettverksporter, protokoll og MAC-adresser.
      Optimaliseringer introdusert inn i nft_set_pipapo (PIle PAcket POlicies)-modulen, som løser problemet med å matche innholdet i en pakke med vilkårlige felttilstandsområder som brukes i filtreringsregler, for eksempel IP- og nettverksportområder (nft_set_rbtree og nft_set_hash manipulerer intervalltilpasning og direkte refleksjon av verdier ). Versjonen av pipapo vektorisert ved hjelp av 256-bits AVX2-instruksjoner på et system med en AMD Epyc 7402-prosessor viste en ytelsesøkning på 420 % ved parsing av 30 tusen poster inkludert portprotokollkombinasjoner. Økningen ved sammenligning av en kombinasjon av et subnett og et portnummer ved parsing av 1000 poster var 87 % for IPv4 og 128 % for IPv6.

    • La til bareudp-modul, som lar deg kapsle inn ulike L3-protokoller, som MPLS, IP og NSH, i en UDP-tunnel.
    • Integreringen av MPTCP (MultiPath TCP) komponenter, en utvidelse av TCP-protokollen for å organisere driften av en TCP-forbindelse med levering av pakker samtidig langs flere ruter gjennom forskjellige nettverksgrensesnitt knyttet til forskjellige IP-adresser, har fortsatt.
    • La til støtte for maskinvareakselerasjonsmekanismer for innkapsling av Ethernet-rammer i 802.11 (Wi-Fi).
    • Når du flytter en enhet fra ett nettverksnavneområde til et annet, justeres tilgangsrettighetene og eierskapet til de tilsvarende filene i sysfs.
    • Lagt til muligheten til å bruke SO_BINDTODEVICE-flagget for ikke-rootbrukere.
    • Den tredje delen av patchene har blitt akseptert, og konverterer ethtool-verktøysettet fra ioctl() til å bruke netlink-grensesnittet. Det nye grensesnittet gjør det enklere å legge til utvidelser, forbedrer feilhåndtering, lar varslinger sendes når tilstanden endres, forenkler interaksjonen mellom kjernen og brukerområdet, og reduserer antallet navngitte lister som må synkroniseres.
    • Lagt til muligheten til å bruke spesielle maskinvareakseleratorer for å utføre tilkoblingssporingsoperasjoner.
    • I nettfilter la til en krok for tilkobling av klassifiserere av utgående pakker (egress), som komplementerte den tidligere nåværende kroken for innkommende pakker (ingress).
  • Virtualisering og sikkerhet
    • Lagt til maskinvareimplementering av pekerautentisering (Pekerautentisering), som bruker spesialiserte ARM64 CPU-instruksjoner for å beskytte mot angrep ved bruk av returorientert programmering (ROP) teknikker, der angriperen ikke prøver å plassere koden sin i minnet, men opererer på deler av maskininstruksjoner som allerede er tilgjengelige i lastede biblioteker, og slutter med en kontrollreturinstruks. Sikkerhet kommer ned til å bruke digitale signaturer for å bekrefte returadresser på kjernenivå. Signaturen lagres i de ubrukte toppbitene på selve pekeren. I motsetning til programvareimplementeringer, utføres opprettelsen og verifiseringen av digitale signaturer ved hjelp av spesielle CPU-instruksjoner.
    • La til muligheten til å beskytte et minneområde fra å skrive ved å bruke systemkallet userfaultfd(), designet for å håndtere sidefeil (tilgang til ikke-allokerte minnesider) i brukerområdet. Ideen er å bruke userfaultfd() både for å oppdage tilgangsbrudd til sider som er merket som skrivebeskyttede og for å ringe en behandler som kan svare på slike skriveforsøk (for eksempel for å håndtere endringer under opprettelsen av levende øyeblikksbilder av kjørende prosesser, stat. fangst når du dumper minnedumper til disk, implementerer delt minne, sporer endringer i minnet). Funksjonalitet tilsvarende bruker mprotect() i forbindelse med SIGSEGV-signalbehandleren, men det fungerer merkbart raskere.
    • SELinux har avviklet "checkreqprot"-parameteren, som lar deg deaktivere minnebeskyttelsessjekker når du behandler regler (som tillater bruk av kjørbare minneområder, uavhengig av reglene spesifisert i reglene). Kernfs-symlinker har lov til å arve konteksten til overordnede kataloger.
    • Strukturen inkludert modul KRSI, som lar deg knytte BPF-programmer til alle LSM-kroker i kjernen. Endringen lar deg lage LSM-moduler (Linux Security Module) i form av BPF-programmer for å løse revisjonsproblemer og obligatorisk tilgangskontroll.
    • Utført Optimaliserer ytelsen til /dev/random ved å samle CRNG-verdier i stedet for å ringe RNG-instruksjoner individuelt. Forbedret ytelse for getrandom og /dev/random på ARM64-systemer som gir RNG-instruksjoner.
    • Implementering av en elliptisk kurve Curve25519 erstattet for alternativet fra biblioteket HACL, for hvilket gitt matematisk bevis på formell pålitelighetsverifisering.
    • La til mekanisme for å informere om ledige minnesider. Ved å bruke denne mekanismen kan gjestesystemer overføre informasjon om sider som ikke lenger brukes til vertssystemet, og verten kan ta tilbake sidedataene.
    • I vfio/pci la til støtte for SR-IOV (Single-Root I/O Virtualization).
  • Minne- og systemtjenester
    • Fra 80 til 100 tegn økt begrensning på maksimal linjelengde i kildetekstene. Samtidig anbefales fortsatt utviklere å holde seg innenfor 80 tegn per linje, men dette er ikke lenger en hard grense. I tillegg vil overskridelse av linjestørrelsesgrensen nå resultere i en byggeadvarsel bare hvis checkpatch kjøres med alternativet '--strict'. Endringen vil gjøre det mulig å ikke distrahere utviklere manipulasjon med mellomrom og føle deg mer fri når du justerer kode, så vel som vil forhindre overdreven linjebrudd, urovekkende kodeforståelse og søk.
    • La til støtte for EFI blandet oppstartsmodus, som lar deg laste inn en 64-bit kjerne fra 32-bits fastvare som kjører på en 64-bits CPU uten å bruke en spesialisert oppstartslaster.
    • Aktivert system for å identifisere og feilsøke delte låser ("delt lås"), som oppstår når du får tilgang til ujusterte data i minnet på grunn av det faktum at når du utfører en atominstruksjon, krysser dataene to CPU-hurtigbufferlinjer. Slik blokkering resulterer i et betydelig ytelsestreff (1000 sykluser langsommere enn en atomoperasjon på data som faller inn i én hurtigbufferlinje). Avhengig av oppstartsparameteren "split_lock_detect", kan kjernen oppdage slike låser i farten og gi advarsler eller sende et SIGBUS-signal til applikasjonen som forårsaker låsen.
    • Oppgaveplanleggeren gir sporing av temperatursensorer (Termisk trykk) og implementert under hensyntagen til overoppheting ved plassering av oppgaver. Ved å bruke statistikken som er oppgitt, kan den termiske regulatoren justere den maksimale CPU-frekvensen når den er overopphetet, og oppgaveplanleggeren tar nå hensyn til reduksjonen i datakraft på grunn av en slik reduksjon i frekvens når den planlegger at oppgaver skal kjøres (tidligere reagerte planleggeren på endringer i frekvens med en viss forsinkelse, for noen tid å ta beslutninger basert på oppblåste forutsetninger om tilgjengelige dataressurser).
    • Oppgaveplanleggeren inkluderer invariante indikatorer belastningssporing, slik at du kan estimere belastningen riktig, uavhengig av gjeldende CPU-driftsfrekvens. Endringen lar deg forutsi oppførselen til oppgaver mer nøyaktig under forhold med dynamiske endringer i spenning og CPU-frekvens. For eksempel vil en oppgave som forbrukte 1/3 av CPU-ressursene ved 1000 MHz forbruke 2/3 av ressursene når frekvensen synker til 500 MHz, noe som tidligere skapte en falsk antagelse om at den kjørte med full kapasitet (dvs. oppgaver dukket opp større til planleggeren bare ved å redusere frekvensen, noe som førte til at feil beslutninger ble tatt i schedutil cpufreq-guvernøren).
    • Intel P-state-driveren, som er ansvarlig for å velge ytelsesmoduser, har blitt byttet til bruk tidsplan.
    • Muligheten til å bruke BPF-delsystemet når kjernen kjører i sanntid (PREEMPT_RT) er implementert. Tidligere, når PREEMPT_RT var aktivert, måtte BPF være deaktivert.
    • En ny type BPF-program er lagt til - BPF_MODIFY_RETURN, som kan knyttes til en funksjon i kjernen og endre verdien som returneres av denne funksjonen.
    • La til mulighet Bruk av clone3()-systemkallet for å lage en prosess i en cgroup som er forskjellig fra den overordnede cgroupen, slik at den overordnede prosessen kan bruke begrensninger og aktivere regnskap umiddelbart etter at en ny prosess eller tråd er opprettet. For eksempel kan en tjenesteleder direkte allokere nye tjenester til separate cgroups, og nye prosesser, når de plasseres i "frosne" cgroups, vil bli stoppet umiddelbart.
    • i Kbuild la til støtte for miljøvariabelen "LLVM=1" for å bytte til Clang/LLVM-verktøysettet når du bygger kjernen. Kravene til binutils-versjonen er hevet (2.23).
    • En seksjon /sys/kernel/debug/kunit/ har blitt lagt til debugfs med resultatene av kunit-tester.
    • Lagt til kjerneoppstartsparameter pm_debug_messages (analogt med /sys/power/pm_debug_messages), som muliggjør utmating av feilsøkingsinformasjon om driften av strømstyringssystemet (nyttig ved feilsøking av problemer med dvale- og standby-modus).
    • Til det asynkrone I/O-grensesnittet io_uring støtte lagt til skjøte () и valg av atombuffer.
    • Forbedret cgroup-profilering ved hjelp av perf-verktøysettet. Tidligere kunne perf bare profilere oppgaver i en spesifikk cgroup og kunne ikke finne ut hvilken cgroup den gjeldende prøven tilhører. perf henter nå cgroup-informasjon for hver prøve, slik at du kan profilere mer enn én cgroup og bruke sortering etter
      cgroup i rapporter.

    • cgroupfs, en pseudo-FS for å administrere cgroups, har lagt til støtte for utvidede attributter (xattrs), som du for eksempel kan legge igjen tilleggsinformasjon for behandlere i brukerrommet.
    • I cgroup minnekontroller la tilog støtte for rekursiv beskyttelse av "memory.low"-verdien, som regulerer minimumsmengden RAM som gis til gruppemedlemmer. Når du monterer et cgroup-hierarki med "memory_recursiveprot"-alternativet, vil verdien av "memory.low" som er satt for de nedre nodene automatisk distribueres til alle undernoder.
    • La til Uacce (Unified/User-space-access-intended Accelerator Framework) rammeverk for deling av virtuelle adresser (SVA, Shared Virtual Addressing) mellom CPU og perifere enheter, slik at maskinvareakseleratorer får tilgang til datastrukturer i hoved-CPU.
  • Maskinvarearkitekturer
    • For ARM-arkitekturen er muligheten til å hot-fetch minne implementert.
    • For RISC-V-arkitekturen er støtte for hot plugging og fjerning av CPUer (CPU hotplug) lagt til. For 32-biters RISC-V er eBPF JIT implementert.
    • Muligheten til å bruke 32-biters ARM-systemer for å kjøre KVM-gjestemiljøer er fjernet.
    • Fjernet "dummy" NUMA-implementeringen for s390-arkitekturen, som ingen brukstilfeller ble funnet for å oppnå ytelsesforbedringer.
    • For ARM64, lagt til støtte for AMU (Activity Monitors Unit)-utvidelsen, definert i ARMv8.4 og gir ytelsestellere som brukes til å beregne korreksjonsfaktorer for frekvensskalering i oppgaveplanleggeren.
  • Оборудование
    • La til støtte for vDPA-enheter som bruker en datautvekslingskanal som samsvarer med virtio-spesifikasjonene. vDPA-enheter kan enten være fysisk tilkoblet utstyr eller programvareemulerte virtuelle enheter.
    • I GPIO-undersystemet dukket opp en ny ioctl()-kommando for å overvåke endringer, som lar deg informere prosessen om endringer i tilstanden til enhver GPIO-linje. Som et eksempel på bruk av den nye kommandoen foreslått gpio-watch-verktøyet.
    • I i915 DRM-driveren for Intel-skjermkort inkludert standardstøtte for Tigerlake ("Gen12")-brikker og lagt til innledende støtte for OLED-bakgrunnsbelysningskontroll. Forbedret støtte for Ice Lake, Elkhart Lake, Baytrail og Haswell chips.
    • I amdgpu-driveren la til muligheten til å laste fastvare inn i USBC-brikken for ASIC. Forbedret støtte for AMD Ryzen 4000 "Renoir"-brikker. Det er nå støtte for å kontrollere OLED-paneler. Gir visning av fastvarestatus i debugfs.
    • Muligheten til å bruke OpenGL 4 i gjestesystemer er lagt til vmwgfx DRM-driveren for VMware-virtualiseringssystemer (tidligere ble OpenGL 3.3 støttet).
    • Lagt til ny DRM driver tidss for TI Keystone plattform display system.
    • Lagte til drivere for LCD-paneler: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech FRK101D,01H350D, 54004HXNUMXD, XNUMX.
    • Til strømstyringssystemet la til støtte for den Atom-baserte Intel Jasper Lake (JSL)-plattformen.
    • Lagt til støtte for Pinebook Pro bærbar PC basert på Rockchip RK3399, Pine64 PineTab nettbrett og smarttelefon PinePhone basert på Allwinner A64.
    • Lagt til støtte for nye lydkodeker og brikker:
      Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc.

    • Lagt til støtte for ARM-kort og plattformer Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron “sl28”, 11 i.MX6 TechNexion Pico-kortalternativer, tre nye Toradex Colibri-alternativer, Samsung S7710 Galaxy Xcover 2 basert på ST -Ericsson u8500, DH Electronics DHCOM SoM og PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.

Kilde: opennet.ru

Legg til en kommentar