Etter to måneder med utvikling av Linus Torvalds utgjeving av kjernen . Blant de mest bemerkelsesverdige endringene er: begrensning av import av symboler fra proprietære moduler til GPL-moduler, raskere kontekstbytteoperasjoner ved hjelp av FSGSBASE-prosessorinstruksjonen, støtte for komprimering av kjernens bilde ved hjelp av Zstd, omarbeiding av prioritering for tråder i kjernen, støtte for PRP-protokollen (Parallel Redundancy Protocol), kapasitetsplanlegging i deadline-planleggeren, proaktiv sidepakking, capability-flagget CAP_CHECKPOINT_RESTOR, systemanropet close_range(), ytelsesforbedringer i dm-crypt, fjerning av kode for 32-bits gjestesystemer i Xen PV, en ny slab-minnehåndteringsmekanisme, «rescue»-alternativet i Btrfs, støtte for inline-kryptering i ext4 og F2FS.
Den nye versjonen inneholder 16074 rettinger av 2011 utviklere,
patchstørrelsen er 62 MB (endringene berørte 14548 filer, 782155 linjer med kode ble lagt til, og 314792 linjer ble fjernet). Omtrent 45 % av alle endringene i 5.9
relaterer seg til enhetsdrivere, omtrent 15 % av endringene har
forhold til oppdatering av kode spesifikk for maskinvarearkitekturer, 13 %
er relatert til nettverksstacken, 3 % – til filsystemer og 3 % til interne
kjerneundersystemer.
:
- Minne og systemtjenester
- beskyttelse mot bruk av GPL-lag for å knytte proprietære drivere til kjernekomponenter som kun er tilgjengelige for GPL-moduler. Flagget TAINT_PROPRIETARY_MODULE arves nå 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 denne GPL-modulen arve merket TAINT_PROPRIETARY_MODULE og vil ikke kunne få tilgang til kjernekomponenter tilgjengelig kun for GPL-moduler, selv om modulen tidligere har importert symboler fra «gplonly»-kategorien. Bakfra blokkering (kun eksport av EXPORT_SYMBOL_GPL i moduler som har importert EXPORT_SYMBOL_GPL), som kan ha brutt funksjonen til proprietære drivere, er ikke implementert (bare flagget for proprietær modul arves, men ikke GPL-koblinger).
- støtte for mekanismen kcompactd for i bakgrunnen, som gjør det mulig å øke antall store minnesider tilgjengelige for kjernen. Foreløpige vurderinger viser at bakgrunnsinnpakking med minimale overheadkostnader kan redusere latens ved tildeling av store minnesider (huge-page) med 70-80 ganger sammenlignet med den tidligere anvendte innpakningsmekanismen som aktiveres ved behov (on-demand). For å definere grensene for ekstern fragmentering, som kcompactd skal håndtere, har sysctl vm.compaction_proactiveness blitt lagt til.
- støtte for komprimering av kjernebilde ved bruk av algoritmen (zstd).
- For x86-systemer er støtten for prosessorinstruksjonen , som tillater lesing og endring av innholdet i FS/GS registrene fra brukerområdet. I kjernen brukes FSGSBASE for å akselerere kontekstbytteoperasjoner ved å unngå unødvendige MSR-skriveoperasjoner for GSBASE, og i brukerområdet gjør det at man kan unngå unødvendige systemkall for å endre FS/GS.
- parameteren 'allow_writes', som gjør det mulig å forby endringer av CPU MSR-registere fra brukerområdet og begrense tilgangen til innholdet i disse registrene til leseoperasjoner, ettersom endringer av MSR kan føre til problemer. Som standard er skriving for tiden ikke forbudt, og endringer av MSR logges, men i fremtiden er det planlagt å sette standardtilgangen til kun lesemodus.
- I brukergrensesnittet for asynkron I/O full støtte for asynkrone operasjoner for buffret lesing er blitt lagt til, uten behov for kjernetråder. Støtte for skriving forventes i neste utgave.
- I deadline I/O-planleggeren planlegging med hensyn til båndbredde, ta riktige beslutninger i asymmetriske systemer, som ARM-systemer basert på og big.LITTLE, som kombinerer kraftige og mindre effektive energibesparende CPU-kjerner i én brikke. Spesielt den nye modusen unngår uoverensstemmelser under planlegging når en treg CPU-kerne ikke har tilstrekkelige ressurser til å fullføre oppgaven innen tidsfristen.
- Energimodellens forbruksmønster i kjernen er nå ikke bare oppførselen til CPU-energiforbruket, men dekker også periferiutstyr.
- systemkallet close_range() er implementert, som lar prosessen lukke et helt område med åpne filbeskrivelser samtidig.
- Fra implementeringen av tekstkonsollen og fbcon-driveren , som muliggjør programmatisk rulling av tekst bakover (CONFIG_VGACON_SOFT_SCROLLBACK) mer enn mengden videominne i tekstmodus VGA.
- prioriteringsalgoritmen for tråder inne i kjernen. Den nye versjonen gir bedre konsistens på tvers av alle kjernesubsystemer ved tildeling av prioriteter for sanntidsoppgaver.
- Legg til sysctl for å styre parametrene for frekvensforcing av CPU for sanntidsoppgaver (for eksempel kan oppførselen under utførelse av sanntidsoppgaver endres dynamisk for energibesparelse etter å ha gått over til batteristrøm eller på mobile systemer).
- Forberedt støtte for teknologien Transparent Huge Pages i sidetcache.
- I fanotify-mekanismen er nye flagg FAN_REPORT_NAME og FAN_REPORT_DIR_FID implementert for å overføre informasjon om foreldrenavnet og den unike FID-identifikatoren ved hendelser som oppretting, fjerning eller flytting av katalogelementer og ikke-katalogrelaterte objekter.
- For cgroups den nye slab minnestyringskontrolleren (slab memory controller), som er bemerkelsesverdig for overføringen av slab-regnskapet fra sideneivå til kjernens objektnivå, noe som muliggjør felles bruk av slab-sider i forskjellige cgroup i stedet for å tildele separate slab-cache for hver cgroup. Den foreslåtte tilnærmingen gjør det mulig å forbedre effektiviteten av slab-bruken, redusere mengden minne brukt til slab med 30-45%, betydelig redusere det totale minneforbruket til kjernen og redusere minnefragmenteringen.
- I lydsubsystemet og , i tråd med anbefalingene for bruk av inkluderende terminologi i Linux-kjernen, er det utført en rensing av upolitisk korrekt terminologi. Koden er renset for bruken av ord som «slave», «mester», «blacklist» og «whitelist».
- Virtualisering og sikkerhet
- Ved bygging av kjernen med Clang-kompilatoren muligheten for konfigurasjon (CONFIG_INIT_STACK_ALL_ZERO) for automatisk initialisering av alle variabler lagret i stabelen med nullverdi (ved bygging angis «-ftrivial-auto-var-init=zero»).
- I seccomp-subsystemet, ved bruk av prosesskontrollmodus i brukerrommet, substitusjonar i overvåka prosessen med filbeskrivingar for full emulering av systemkall som fører til oppretting av filbeskrivingar. Funksjonaliteten er etterspurt i system for isolerte containerar og implementering av sandbox for Chrome.
- For arkitekturar xtensa og csky er det lagt til støtte for å begrense systemkall ved hjelp av seccomp-undermodulen. For xtensa er det også gjennomført støtte for revisjonsmekanismen.
- ny capability-flag CAP_CHECKPOINT_RESTORE, som tillèt tilgang til funksjonar knytta til frysning og gjenoppretting av prosessstatus utan overføring av ekstra privilegier.
- I GCC 11 er alle funksjonar som trengs for
debuggingverktøyet KCSAN (Kernel Concurrency Sanitizer), som er designet for dynamisk identifikasjon av rasebetingelsar inne i kjernen, implementert. Dermed kan KCSAN nå brukast med kjernar som er samla med GCC. - For AMD Zen og nyare CPU-modellar støtte for P2PDMA-teknologi, som gjer det mogleg å bruke DMA for direkte datatransfer mellom minnet til to enheiter som er tilknytt til PCI-bussen.
- I dm-crypt er det lagt til ein modus som reduserer forsinkelsar ved å utføre kryptografisk behandling av data utan å bruke arbeidskøar. Denne modusen er også nødvendig for korrekt funksjon med blokk-enheter (enheiter med område som må skrivast sekvensielt med oppdatering av heile blokka i gruppa). Det er utført arbeid for å auke gjennomstrøyming og redusere forsinkelsar i dm-crypt.
- Koden for støtte av 32-bit gjestesystem i para-virtualisering under Xen-hypervisor er fjerna. Brukarar av slike system bør gå over til bruk av 64-bit kjernar i gjesteomgjevnader eller bruke full (HVM) eller kombinert (PVH) virtualisering i staden for para-virtualisering (PV).
- Disk subsystem, I/O og filsystemer
- I Btrfs-filsystemet er monteringsalternativet «rescue», som standardiserer tilgangen til alle andre alternativ for gjenoppretting. Støtte for alternativene «alloc_start» og «subvolrootid» er fjernet, og «inode_cache»-alternativet er erklært foreldra. Det er utført ytelsesoptimalisering, spesielt er utførselen av fsync()-operasjonar merkbart akselerert. muligheit for å bruke alternative typar kontrollsummar, ulike frå CRC32c.
- mulighet for å bruke inline-kryptering (Inline Encryption) i filsystemene ext4 og F2FS, som aktiveres med alternativet «inlinecrypt». Inline-krypteringsmodusen bruker innebygde mekanismer i lagringskontrolleren for å utføre gjennomsiktig kryptering og dekryptering av inn-/utdata.
- I XFS innholdsblokkering (flush) av inoder i en helt asynkron modus, som ikke blokkerer prosesser under utføring av minneopprydningsoperasjonen. Langvarig problem med kvoter er løst, der advarsler om overskridelse av myke grenser og begrensninger på antall inoder ble feilaktig sporet. Implementeringen av DAX-støtte for ext4 og xfs er forent.
- I Ext4 forhåndsinnlasting av bitmap-er for blokkfordeling. I kombinasjon med en begrensning på skanning av uinitialiserte grupper, har optimaliseringen redusert monteringstiden for svært store partisjoner.
- I F2FS ioctl F2FS_IOC_SEC_TRIM_FILE, som lar deg bruke TRIM/discard-kommandoer for fysisk å nullstille angitte data i filen, for eksempel for å slette tilgangsnøkler uten å etterlate restdata på lagringsenheten.
I F2FS også ny innstilling for søppelrydding GC_URGENT_LOW, som fungerer mer aggressivt ved å utelukke noen kontroller for å være i inaktiv tilstand før oppstart av søppelrydder. - I bcache er størrelsen på bucket_size for extents økt fra 16 til 32 biter som et ledd i forberedelsene for muligheten til å bruke det for cache av soneinndelte enheter.
- I SCSI-subsystemet er muligheten for å bruke inline-kryptering basert på innebygde maskinvarekrypteringsverktøy fra UFS-kontrollere lagt til ().
- Ny kommandolinjeparameter for kjernen «debugfs», som lar deg styre tilgjengeligheten til det navnestrukturen.
- I NFSv4.2-klienten er det lagt til støtte for utvidede filattributter (xattr).
- I dm-dust et grensesnitt for å vise 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 størrelsen på STRIPE-blokken.
- For NVMe-lagringsenheter støtte for kommandoer for sonering av lagringsenheten (ZNS, NVM Express Zoned Namespace), som lar deg dele lagringsplassen inn i soner som danner grupper av blokker for mer fullstendig datalagringskontroll.
- Nettverks subsystem
- I Netfilter mulighet for pakkeavvisning på stadiet før rutingkontroll (utseendet REJECT kan nå brukes ikke bare i INPUT, FORWARD og OUTPUT-kjedene, men også i PREROUTING-stadiet for icmp og tcp).
- I nftables mulighet for revisjon av hendelser knyttet til endringer i konfigurasjon.
- I nftables i netlink API støtte for anonyme kjeder, hvor navn tildeles dynamisk av kjernen. Når et regel knyttet til en anonym kjede fjernes, fjernes også selve kjeden automatisk.
- I BPF er støtte for iteratorer lagt til for traversering, filtrering og endring av elementer i assosiative array (map) uten å kopiere data til brukerens rom. Iteratorer kan brukes for TCP- og UDP-sockets, noe som lar BPF-programmer gå gjennom lister over åpne sockets og hente de nødvendige opplysningene fra dem.
- En ny type BPF-program BPF_PROG_TYPE_SK_LOOKUP er lagt til, som kjøres når kjernen leter etter en passende lyttersocket for innkommende tilkoblinger. Gjennom et slikt BPF-program kan man lage behandlere som tar beslutninger om hvilken socket en tilkobling skal assosieres med, uten å være begrenset av systemanropet bind(). For eksempel kan man organisere binding av én socket til et område av adresser eller porter. I tillegg er støtte for flagget SO_KEEPALIVE lagt til i bpf_setsockopt(), og muligheten for å sette opp BPF_CGROUP_INET_SOCK_RELEASE-behandlere, som kalles ved frigjøring av socket, er implementert.
- Støtte for protokoll (Parallel Redundancy Protocol) som muliggjør transparent bytte til en reservekanal i tilfelle svikt av noen nettverkskomponenter, basert på Ethernet.
- I mac80211-stakken støtte for fire-trinns kanalkonsensus WPA/WPA2-PSK i tilgangspunktmodus.
- Mulighet for å bytte qdisc (queuing discipline) til å bruke FQ-PIE (Flow Queue PIE) nettverkskøstyringsalgoritmen som standard, fokusert på å redusere den negative innvirkningen av mellombuffering av pakker på grenseutstyr (bufferbloat) i nettverk med kabelmodemer.
- Nye funksjoner er lagt til i MPTCP (MultiPath TCP), utvidelser av TCP-protokollen for å organisere TCP-forbindelsen ved å levere pakker samtidig over flere ruter gjennom forskjellige nettverksgrensesnitt knyttet til forskjellige IP-adresser. Støtte for syn cookie, DATA_FIN, automatisk bufferjustering, sokkeldiagnostikk og bruken av flaggene REUSEADDR, REUSEPORT og V6ONLY i setsockopt er lagt til.
- For virtuelle rutetabeller VRF (Virtual Routing and Forwarding), som gjør det mulig å organisere flere rutedomener på ett system, er modus «strict» implementert. I denne modusen kan den virtuelle rutetabellen kun være assosiert med rutetabellen som ikke brukes i andre virtuelle rutetabeller.
- I den trådløse driveren ath11k er støtte for frekvensen 6GHz og .
- Utstyr
- Koden for støtte av UniCore-arkitekturen, utviklet i mikroprosessorsenteret ved Peking universitet og inkludert i Linux-kjernen i 2011, er fjernet. Denne arkitekturen har vært uten vedlikehold siden 2014 og har ikke støtte i GCC.
- For RISC-V-arkitekturen er det implementert støtte for (debugfs-grensesnitt for analyse av kjernemørking), kmemleak (minnelekkasje-deteksjonssystem), stakkbeskyttelse, overganger og tickless-operasjoner (signal-uavhengig multitasking).
- For PowerPC-arkitekturen er støtte for køer for spinlock implementert, noe som betydelig har økt ytelsen i situasjoner med låsekonflikter.
- For ARM- og ARM64-arkitekturer er mekanismen for prosessorfrekvensregulering (cpufreq-governor) aktivert som standard, som bruker informasjon fra oppgaveplanleggeren for å ta avgjørelser om frekvensendring og kan umiddelbart kontakte cpufreq-drivere for å endre frekvensen dynamisk, og tilpasse CPU-ens arbeidsparametere til den nåværende belastningen.
- I DRM-driveren i915 for Intel-grafikkort er støtte for brikkene basert på mikroarkitekturen og innledende støtte for dedikerte kort .
- I amdgpu-driveren er det lagt til innledende støtte for AMD GPU (Navy Flounder) og (Sienna Cichlid). Støtte for akselerasjonsmotorer for kodings- og dekodingsvideo UVD/VCE for GPU Southern Islands (Radeon HD 7000) er lagt til.
Egenskap for å rotere visningen med 90, 180 eller 270 grader er lagt til.Det er interessant at driveren for AMD GPU den største driveren i kjernen — den har omtrent 2,71 millioner linjer med kode, som utgjør omtrent 10 % av den totale kjernestørrelsen (27,81 millioner linjer). Av disse er 1,79 millioner linjer genererte overskriftsfiler med data for GPU-registre, mens C-koden utgjør 366 tusen linjer (til sammenligning inkluderer Intel i915-driveren 209 tusen linjer, og Nouveau — 149 tusen).
- In the Nouveau driver støtte for rammessjekk av integritet ved hjelp av (Cyclic Redundancy Checks) i NVIDIA GPU-graphicsmotorer. Implementeringen er basert på dokumentasjonen levert av NVIDIA.
- Det er lagt til drivere for LCD-paneler: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 og Xingbangda XBD599.
- I lydsystemet ALSA er det lagt til støtte for (en modus for kontinuerlig strømforbruk for eksterne HDMI-enheter for å eliminere forsinkelse ved oppstart av avspilling) og for å styre belysningen av mikrofonaktiveringsknappene og mute-funksjonen, samt lagt til støtte for ny maskinvare, inkludert kontrolleren .
- Det er lagt til støtte for ARM-plattformer, enheter og plattformer: Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1, ASUS Google Nexus 7, Acer Iconia Tab A500, Qualcomm Snapdragon SDM630 (brukt i Sony Xperia 10, 10 Plus, XA2, XA2 Plus og XA2 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 har Latinamerikansk Stiftelse for fri programvare
variant — , renset for elementer fra fastvare og drivere som inneholder ikke-frie komponenter eller kodebiter, hvis bruksområde er begrenset av produsenten. I den nye utgaven er opplasting av blobber deaktivert i driverne for WiFi rtw8821c og SoC MediaTek mt8183. Koden for rensing av blobber i drivere og systemer som Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) og x86 berøringsskjerm er oppdatert.
Kilde: opennet.ru
