Linux-kjerneutgivelse 5.9

Etter to måneder med utvikling Linus Torvalds innsendt kjerneutgivelse Linux 5.9. Blant de mest bemerkelsesverdige endringene: begrense importen av symboler fra proprietære moduler til GPL-moduler, fremskynde kontekstbytteoperasjoner ved å bruke FSGSBASE-prosessorinstruksjonen, støtte for kjernebildekomprimering ved bruk av Zstd, omarbeide prioriteringen av tråder i kjernen, støtte for PRP. (Parallell Redundancy Protocol) , båndbreddebevisst planlegging i tidsfristplanleggeren, forebyggende pakking av minnesider, kapasitetsflagg CAP_CHECKPOINT_RESTOR, close_range() systemkall, dm-crypt ytelsesforbedringer, fjerning av kode for 32-bits Xen PV-gjester, nytt plateminne administrasjonsmekanisme, alternativ "redning" i Btrfs, støtte for inline-kryptering i ext4 og F2FS.

Den nye versjonen inkluderer 16074 rettelser fra 2011-utviklere,
oppdateringsstørrelse - 62 MB (endringer påvirket 14548 filer, 782155 linjer med kode ble lagt til, 314792 linjer ble slettet). Omtrent 45 % av alle presentert i 5.9
endringer er relatert til enhetsdrivere, omtrent 15 % av endringene er det
holdning til oppdatering av kode spesifikk for maskinvarearkitekturer, 13 %
relatert til nettverksstakken, 3 % til filsystemer og 3 % til interne
kjerneundersystemer.

Den viktigste innovasjoner:

  • Minne- og systemtjenester
    • Stramming beskyttelse mot bruk av GPL-lag for å koble proprietære drivere med kjernekomponenter eksportert kun for moduler under GPL-lisensen. TAINT_PROPRIETARY_MODULE-flagget er nå arvet i alle moduler som importerer symboler fra moduler med dette flagget. Hvis en GPL-modul prøver å importere symboler fra en ikke-GPL-modul, vil den GPL-modulen arve etiketten TAINT_PROPRIETARY_MODULE og vil ikke kunne få tilgang til kjernekomponenter som bare er tilgjengelige for GPL-lisensierte moduler, selv om modulen tidligere har importert symboler fra kategorien "gplonly". Den omvendte låsen (eksporterer bare EXPORT_SYMBOL_GPL i moduler som importerte EXPORT_SYMBOL_GPL), som kan ødelegge arbeidet til proprietære drivere, er ikke implementert (bare det proprietære modulflagget er arvet, men ikke GPL-bindingene).
    • La til kcompactd motorstøtte for forhåndspakking av minnesider i bakgrunnen for å øke antallet store minnesider som er tilgjengelige for kjernen. I følge foreløpige estimater kan bakgrunnspakking, på bekostning av minimal overhead, redusere forsinkelser ved tildeling av store minnesider (stor side) med 70-80 ganger sammenlignet med den tidligere brukte pakkemekanismen, lansert når behovet oppstår (on-demand) ). For å sette grensene for den eksterne fragmenteringen som kcompactd vil gi, har sysctl vm.compaction_proactiveness blitt lagt til.
    • La til støtte for kjernebildekomprimering ved hjelp av algoritme ZStandard (zstd).
    • Støtte for prosessorinstruksjoner er implementert for x86-systemer FSGSBASE, som lar deg lese og endre innholdet i FS/GS-registrene fra brukerplass. I kjernen brukes FSGSBASE for å fremskynde kontekstbytteoperasjoner ved å eliminere unødvendige MSR-skriveoperasjoner for GSBASE, og i brukerrommet unngår den unødvendige systemkall for å endre FS/GS.
    • La til parameteren "allow_writes" lar deg forby endringer i prosessorens MSR-registre fra brukerområdet og begrense tilgangen til innholdet i disse registrene for å lese operasjoner, siden endring av MSR kan føre til problemer. Som standard er skriving ennå ikke deaktivert, og endringer i MSR gjenspeiles i loggen, men i fremtiden er det planlagt å bytte standardtilgang til skrivebeskyttet modus.
    • Til det asynkrone I/O-grensesnittet io_uring Lagt til full støtte for asynkron bufret leseoperasjoner som ikke krever kjernetråder. Opptaksstøtte forventes i en fremtidig utgivelse.
    • I I/O-planleggerens frist implementert planlegging basert på kapasitet, tillater ta riktige beslutninger om asymmetriske systemer som ARM-baserte systemer DynamiIQ og big.LITTLE, som kombinerer kraftige og mindre effektive energieffektive CPU-kjerner i én brikke. Spesielt lar den nye modusen deg unngå planleggingsfeil når en treg CPU-kjerne ikke har de riktige ressursene til å fullføre en oppgave i tide.
    • Energiforbruksmodellen i kjernen (Energy Model framework) er nå beskriver ikke bare CPU strømforbruk atferd, men dekker også perifere enheter.
    • Close_range() systemkallet har blitt implementert for å tillate en prosess å lukke en hel rekke åpne filbeskrivelser på en gang.
    • Fra implementeringen av tekstkonsollen og fbcon-driveren kode fjernet, som gir muligheten til å programmatisk rulle tekst tilbake (CONFIG_VGACON_SOFT_SCROLLBACK) med mer enn mengden videominne i VGA-tekstmodus.
    • Omarbeidet algoritme for å tildele prioriteter til tråder i kjernen. Det nye alternativet gir bedre konsistens på tvers av alle kjernedelsystemer når du tildeler prioriteringer til sanntidsoppgaver.
    • Lagt til sysctl sched_uclamp_util_min_rt_default for å kontrollere CPU-forsterkningsinnstillinger for sanntidsoppgaver (du kan for eksempel endre oppførselen til sanntidsoppgaver i farten for å spare strøm etter bytte til batteristrøm eller på mobilsystemer).
    • Forberedelser er gjort for å implementere støtte for Transparent Huge Pages-teknologi i sidebufferen.
    • Fanotify-motoren implementerer nye flagg FAN_REPORT_NAME og FAN_REPORT_DIR_FID for å rapportere overordnet navn og unik FID-informasjon når opprettelse, sletting eller bevegelseshendelser forekommer for katalogelementer og ikke-katalogobjekter.
    • For cgroups implementert en ny skive-minnekontroller, som er kjent for å flytte skiveregnskap fra minnesidenivå til kjerneobjektnivå, som gjør det mulig å dele skivesider i forskjellige cgroups, i stedet for å tildele separate platecacher for hver cgroup. Den foreslåtte tilnærmingen gjør det mulig å øke effektiviteten ved bruk av plate, redusere størrelsen på minnet som brukes til plate med 30-45%, redusere det totale minneforbruket til kjernen betydelig og redusere minnefragmentering.
    • I lydundersystemet ALSA и USB-stabel, i samsvar med nylig vedtatt anbefalinger om bruk av inkluderende terminologi i Linux-kjernen; politisk ukorrekte termer ble ryddet opp. Koden er tømt for ordene "slave", "master", "blacklist" og "whitelist".
  • Virtualisering og sikkerhet
    • Når du bygger kjernen ved å bruke Clang-kompilatoren dukket opp muligheten til å konfigurere (CONFIG_INIT_STACK_ALL_ZERO) automatisk initialisering til null av alle variabler som er lagret på stabelen (når du bygger, spesifiser "-ftrivial-auto-var-init=null").
    • I seccomp-delsystemet, når du bruker prosesskontrollmodus i brukerområdet, la til mulighet substitusjon av filbeskrivelser i den overvåkede prosessen for å fullstendig emulere systemanrop som fører til opprettelse av filbeskrivelser. Funksjonaliteten er etterspurt i isolerte containersystemer og sandkasseimplementeringer for Chrome.
    • For xtensa- og csky-arkitekturene er det lagt til støtte for å begrense systemanrop ved å bruke seccomp-delsystemet. For xtensa er støtte for revisjonsmekanismen i tillegg implementert.
    • La til nytt kapasitetsflagg CAP_CHECKPOINT_RESTORE, som lar deg gi tilgang til muligheter knyttet til frysing og gjenoppretting av tilstanden til prosesser uten å overføre tilleggsrettigheter.
    • GCC 11 har alle funksjonene du trenger
      feilsøkingsverktøyet KCSAN (Kernel Concurrency Sanitizer), designet for å dynamisk oppdage raseforhold i kjernen. Dermed kan KCSAN nå brukes med kjerner bygget i GCC.

    • For AMD Zen og nyere CPU-modeller la til støtte for P2PDMA-teknologi, som lar deg bruke DMA for direkte dataoverføring mellom minnet til to enheter koblet til PCI-bussen.
    • En modus er lagt til dm-crypt som lar deg redusere ventetiden ved å utføre kryptografisk databehandling uten å bruke arbeidskøer. Denne modusen er også nødvendig for korrekt drift med sonet blokkere enheter (enheter med områder som må skrives sekvensielt, oppdatering av hele gruppen av blokker). Det er jobbet med å øke gjennomstrømningen og redusere latens i dm-crypt.
    • Fjernet kode for å støtte 32-biters gjester som kjører i paravirtualiseringsmodus som kjører Xen hypervisor. Brukere av slike systemer bør bytte til å bruke 64-bits kjerner i gjestemiljøer eller bruke full (HVM) eller kombinert (PVH) virtualiseringsmodus i stedet for paravirtualisering (PV) for å kjøre miljøer.
  • Diskundersystem, I/O og filsystemer
    • På Btrfs-filsystemet implementert et "rescue"-monteringsalternativ som forener tilgang til alle andre gjenopprettingsalternativer. Støtte for alternativene "alloc_start" og "subvolrootid" er fjernet, og alternativet "inode_cache" er avviklet. Ytelsesoptimaliseringer har blitt foretatt, noe som spesielt fremskynder utførelsen av fsync()-operasjoner merkbart. La til muligheten til å bruke andre typer kontrollsummer enn CRC32c.
    • La til muligheten til å bruke inline-kryptering (Inline Encryption) i ext4- og F2FS-filsystemer, for å aktivere "inlinecrypt"-monteringsalternativet. Inline-krypteringsmodus lar deg bruke krypteringsmekanismene innebygd i stasjonskontrolleren, som transparent krypterer og dekrypterer input/output.
    • I XFS sikret inode tilbakestilling (spyling) i en fullstendig asynkron modus som ikke blokkerer prosesser når du utfører en minneopprydding. Løste et langvarig kvoteproblem som førte til at advarsler om myk grense og inodegrense ble feil sporet. Enhetlig implementering av DAX-støtte for ext4 og xfs.
    • I Ext4 implementert forhåndsinnlast blokktildeling bitmaps. Kombinert med begrenset skanning av uinitialiserte grupper, reduserte optimaliseringen tiden som trengs for å montere veldig store partisjoner.
    • I F2FS la til ioctl F2FS_IOC_SEC_TRIM_FILE, som lar deg bruke TRIM/discard-kommandoene til å fysisk tilbakestille spesifiserte data i en fil, for eksempel for å slette tilgangsnøkler uten å etterlate gjenværende data på stasjonen.
      Også i F2FS la til ny søppeloppsamlingsmodus GC_URGENT_LOW, som fungerer mer aggressivt ved å eliminere noen kontroller for å være i inaktiv tilstand før du starter søppeloppsamleren.

    • I bcache er bucket_size for utstrekninger økt fra 16 til 32 biter som forberedelse til å aktivere sonede enhetsbuffere.
    • Muligheten til å bruke innebygd kryptering basert på innebygd maskinvarekryptering levert av UFS-kontrollere er lagt til SCSI-undersystemet (Universal Flash Storage).
    • En ny kjernekommandolinjeparameter "debugfs" er lagt til, som lar deg kontrollere tilgjengeligheten til pseudo-FS med samme navn.
    • NFSv4.2-klienten gir støtte for utvidede filattributter (xattr).
    • I dm-støv la til grensesnitt for å vise på en gang en liste over alle identifiserte dårlige blokker på disken ("dmsetup message dust1 0 listbadblocks").
    • For md/raid5 er parameteren /sys/block/md1/md/stripe_size lagt til for å konfigurere STRIPE-blokkstørrelsen.
    • For NVMe-lagringsenheter la til støtte for stasjonssonekommandoer (ZNS, NVM Express Zoned Namespace), som lar deg dele opp lagringsplass i soner som utgjør grupper av blokker for mer fullstendig kontroll over plassering av data på stasjonen.
  • Nettverksundersystem
    • I Netfilter la til muligheten til å avvise pakker på stadiet før rutekontroll (REJECT-uttrykket kan nå brukes ikke bare i INPUT-, FORWARD- og OUTPUT-kjedene, men også på PREROUTING-stadiet for icmp og tcp).
    • I nftables la til muligheten til å revidere hendelser knyttet til konfigurasjonsendringer.
    • I nftables i netlink API la til støtte for anonyme kjeder, hvis navn tildeles dynamisk av kjernen. Når du sletter en regel knyttet til en anonym kjede, slettes selve kjeden automatisk.
    • BPF legger til støtte for iteratorer for å krysse, filtrere og modifisere elementer i assosiative arrays (kart) uten å kopiere data til brukerområdet. Iteratorer kan brukes for TCP- og UDP-sockets, slik at BPF-programmer kan iterere over lister over åpne sockets og trekke ut informasjonen de trenger fra dem.
    • Lagt til en ny type BPF-program BPF_PROG_TYPE_SK_LOOKUP, som startes når kjernen ser etter en passende lyttekontakt for en innkommende tilkobling. Ved å bruke et BPF-program som dette kan du lage behandlere som tar avgjørelser om hvilken socket en tilkobling skal knyttes til, uten å være begrenset av bind()-systemkallet. Du kan for eksempel knytte en enkelt stikkontakt til en rekke adresser eller porter. I tillegg er støtte for SO_KEEPALIVE-flagget lagt til bpf_setsockopt() og muligheten til å installere BPF_CGROUP_INET_SOCK_RELEASE-behandlere, kalt når socket slippes, er implementert.
    • Protokollstøtte implementert PRP (Parallell Redundancy Protocol), som tillater Ethernet-basert veksling til en sikkerhetskopikanal, gjennomsiktig for applikasjoner, i tilfelle feil på nettverkskomponenter.
    • Stack mac80211 la til støtte for fire-trinns WPA/WPA2-PSK-kanalforhandling i tilgangspunktmodus.
    • Lagt til muligheten til å bytte qdisc (kødisiplin)-planleggeren til å bruke FQ-PIE (Flow Queue PIE) nettverkskøadministrasjonsalgoritmen som standard, rettet mot å redusere den negative effekten av mellomliggende pakkebuffring på kantnettverksutstyr (bufferbloat) i nettverk med kabelmodemer.
    • Nye funksjoner er lagt til MPTCP (MultiPath TCP), utvidelser 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. Lagt til støtte for syn-cookie, DATA_FIN, buffer auto-tuning, socket diagnostikk og REUSEADDR, REUSEPORT og V6ONLY flagg i setsockopt.
    • For virtuelle rutingtabeller VRF (Virtual Routing and Forwarding), som gjør det mulig å organisere driften av flere rutingdomener på ett system, er den "strenge" modusen implementert. I denne modusen kan en virtuell tabell bare knyttes til en rutingtabell som ikke brukes i andre virtuelle tabeller.
    • Den trådløse driveren er ath11k la til støtter 6GHz frekvens og spektral skanning.
  • Оборудование
    • Fjernet kode for å støtte UniCore-arkitekturen, utviklet ved Microprocessor Center ved Peking University og inkludert i Linux-kjernen i 2011. Denne arkitekturen har ikke vært vedlikeholdt siden 2014 og har ingen støtte i GCC.
    • Støtte for RISC-V-arkitektur er implementert kcov (debugfs-grensesnitt for å analysere kjernekodedekning), kmemleak (system for minnelekkasjedeteksjon), stabelbeskyttelse, hoppmerker og tickless-operasjoner (multitasking uavhengig av timersignaler).
    • For PowerPC-arkitekturen er støtte for spinlock-køer implementert, noe som har forbedret ytelsen betydelig i låsekonfliktsituasjoner.
    • For ARM- og ARM64-arkitekturer er prosessorfrekvensreguleringsmekanismen aktivert som standard tidsplan (cpufreq-guvernør), som direkte bruker informasjon fra oppgaveplanleggeren for å ta en beslutning om å endre frekvensen og umiddelbart kan få tilgang til cpufreq-driverne for raskt å endre frekvensen, og umiddelbart justere CPU-driftsparameterne til gjeldende belastning.
    • i915 DRM-driveren for Intel-grafikkort inkluderer støtte for brikker basert på mikroarkitektur rakettsjø og lagt til innledende støtte for diskrete kort Intel Xe DG1.
    • Amdgpu-driveren la til innledende støtte for AMD GPUer Navi 21 (Marineflyndre) og Navi 22 (Sienna Cichlid). Lagt til støtte for UVD/VCE-videokoding og dekoding av akselerasjonsmotorer for Southern Islands GPU (Radeon HD 7000).
      Lagt til en egenskap for å rotere skjermen med 90, 180 eller 270 grader.

      Interessant nok driveren for AMD GPU er den største driveren i kjernen - den har omtrent 2.71 millioner linjer med kode, som er omtrent 10 % av den totale kjernestørrelsen (27.81 millioner linjer). Samtidig står 1.79 millioner linjer for automatisk genererte overskriftsfiler med data for GPU-registre, og C-koden er 366 tusen linjer (til sammenligning inkluderer Intel i915-driveren 209 tusen linjer, og Nouveau - 149 tusen).

    • I Nouveau driver la til støtte for bilde-for-bilde integritetskontroll ved hjelp av CRC (Sykliske redundanssjekker) i NVIDIA GPU-skjermmotorer. Implementeringen er basert på dokumentasjon levert av NVIDIA.
    • Lagte til drivere for LCD-paneler: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 og Xingbangda XBD599.
    • ALSA-lydundersystemet støtter Intel Silent Stream (kontinuerlig strømmodus for eksterne HDMI-enheter for å eliminere forsinkelse ved start av avspilling) og ny enhet for å kontrollere belysningen av mikrofonaktiverings- og mute-knappene, og også lagt til støtte for nytt utstyr, inkludert en kontroller Longson 7A1000.
    • Lagt til støtte for ARM-kort, enheter og plattformer: Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1, ASUS Google Nexus 7, Acer Iconia Tab A500, Qualcomm Snapdragon SDM630 (brukes i Sony Xperia 10, 10 Plus, XA2 og X2A2, XA Ultra), Jetson Xavier NX, Amlogic WeTek Core2, Aspeed EthanolX, fem nye kort basert på NXP i.MX6, MikroTik RouterBoard 3011, Xiaomi Libra, Microsoft Lumia 950, Sony Xperia Z5, MStar, Microchip Sparx5, Intel Keem Bay, Amazon Alpine v3, Renesas RZ/G2H.

Samtidig la Latin American Free Software Foundation dannet
вариант helt gratis kjerne 5.9 - Linux-fri 5.9-gnu, fjernet for fastvare- og driverelementer som inneholder ikke-frie komponenter eller kodeseksjoner, hvis omfang er begrenset av produsenten. Den nye utgivelsen deaktiverer blob-lasting i drivere for WiFi rtw8821c og SoC MediaTek mt8183. Oppdatert blob-rensekode i Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) og x86 berøringsskjermdrivere og undersystemer.

Kilde: opennet.ru

Legg til en kommentar