Linux-kjerneutgivelse 6.2

Etter to måneder med utvikling har Linus Torvalds gitt ut Linux 6.2-kjernen. Viktige endringer inkluderer: Copyleft-Next-lisensiert kode er tillatt, RAID5/6-implementering i Btrfs har blitt forbedret, Rust-språkstøtte har fortsatt å bli integrert, Rebleed-beskyttelsesoverhead er redusert, tilbakeskrivning av minnet har blitt lagt til, og en TCP mekanisme er lagt til PLB (Protective Load Balancing) balansering, en hybrid mekanisme for å beskytte flyten av kommandoutførelse (FineIBT) er lagt til, BPF har muligheten til å definere sine egne objekter og datastrukturer, rv (Runtime Verification) verktøyet er inkludert i sammensetningen, strømforbruket i implementeringen av RCU-låser er redusert.

Den nye versjonen mottok 16843 rettelser fra 2178 utviklere, patchstørrelsen er 62 MB (endringene berørte 14108 filer, 730195 linjer med kode ble lagt til, 409485 linjer ble slettet). Omtrent 42 % av alle endringer introdusert i 6.2 er relatert til enhetsdrivere, omtrent 16 % av endringene er relatert til oppdatering av kode spesifikk for maskinvarearkitekturer, 12 % er relatert til nettverksstakken, 4 % til filsystemer og 3 % til interne kjerneundersystemer.

Nøkkelinnovasjoner i kjerne 6.2:

  • Minne- og systemtjenester
    • Det er tillatt å inkludere i kjernekoden og endringer levert under Copyleft-Next 0.3.1-lisensen. Copyleft-Next-lisensen ble opprettet av en av GPLv3-bidragsyterne og er fullstendig kompatibel med GPLv2-lisensen, som bekreftet av advokater fra SUSE og Red Hat. Sammenlignet med GPLv2, er Copyleft-Next-lisensen mye mer kompakt og lettere å forstå (fjernet den innledende delen og omtalen av foreldede kompromisser), bestemmer tidspunktet og prosedyren for å eliminere brudd, fjerner automatisk copyleft-kravene for den foreldede når, som er mer enn 15 år gammel.

      Copyleft-Next inneholder også en proprietær teknologibevilgningsklausul, som, i motsetning til GPLv2, gjør denne lisensen kompatibel med Apache 2.0-lisensen. For å sikre full GPLv2-kompatibilitet, sier Copyleft-Next eksplisitt at et avledet verk kan distribueres under GPL så vel som den originale Copyleft-Next-lisensen.

    • "rv"-verktøyet er inkludert, som gir et grensesnitt for samhandling fra brukerplass med behandlerne av RV (Runtime Verification) delsystemet, designet for å kontrollere riktig drift på svært pålitelige systemer som garanterer fravær av feil. Validering gjøres ved kjøretid ved å knytte behandlere til sporingspunkter som kontrollerer den faktiske fremdriften av utførelse mot en forhåndsbestemt referanse deterministisk automatmodell som definerer den forventede oppførselen til systemet.
    • zRAM-enheten, som gjør det mulig å lagre swap-partisjonen i minnet i en komprimert form (en blokkenhet er opprettet i minnet som bytting utføres på med komprimering), muligheten for å pakke om sider ved hjelp av en alternativ algoritme for å oppnå et høyere nivå av komprimering er implementert. Hovedideen er å gi et valg mellom flere algoritmer (lzo, lzo-rle, lz4, lz4hc, zstd), som tilbyr sine avveininger mellom kompresjons-/dekompresjonshastighet og kompresjonsnivå, eller optimal i spesielle situasjoner (f.eks. komprimere store minnesider).
    • "iommufd" API er lagt til for å administrere I/O Memory-Management Unit (I/O Memory-Management Unit) fra brukerplass. Det nye API-et gjør det mulig å administrere I/O-minnesidetabeller ved hjelp av filbeskrivelser.
    • BPF gir muligheten til å lage typer, definere dine egne objekter, bygge ditt eget objekthierarki og fleksibelt danne dine egne datastrukturer, for eksempel koblede lister. Støtte for bpf_rcu_read_{,un}lock()-låser er lagt til for sovende BPF-programmer (BPF_F_SLEEPABLE). Implementert støtte for lagring av task_struct-objekter. Lagt til karttype BPF_MAP_TYPE_CGRP_STORAGE for å gi lokal lagring for cgroups.
    • For RCU-blokkeringsmekanismen (Read-copy-update) implementeres en valgfri mekanisme for "late" tilbakeringingsanrop, der flere tilbakeringingsanrop behandles samtidig i batchmodus av en tidtaker. Anvendelsen av den foreslåtte optimaliseringen gjør det mulig å redusere strømforbruket på Android- og ChromeOS-enheter med 5–10 % ved å utsette RCU-forespørsler under inaktiv eller lav systembelastning.
    • Lagt til sysctl split_lock_mitigate for å kontrollere hvordan systemet reagerer når det oppdager "delte låser" som oppstår ved tilgang til ujusterte data i minnet på grunn av data som krysser to CPU-hurtigbufferlinjer når en atominstruksjon utføres. Slike låser fører til et betydelig fall i ytelse. Å sette split_lock_mitigate til 0 advarer bare om at det er et problem, mens å sette den til 1, i tillegg til å gi en advarsel, også bremser utførelsen av prosessen som fikk låsen til å bevare ytelsen til resten av systemet.
    • For PowerPC-arkitekturen er det foreslått en ny implementering av qspinlock-låser som viser høyere ytelse og løser noen låseproblemer som oppstår i unntakstilfeller.
    • MSI (Message-Signaled Interrupts) avbruddshåndteringskode har blitt redesignet, noe som eliminerer de akkumulerte arkitektoniske problemene og legger til støtte for å binde individuelle behandlere til forskjellige enheter.
    • For systemer basert på LoongArch-instruksjonssett-arkitekturen som brukes i Loongson 3 5000-prosessorene og implementerer en ny RISC ISA som ligner på MIPS og RISC-V, har støtte for ftrace, stackbeskyttelse, hvilemodus og standby blitt implementert.
    • Muligheten til å tilordne navn til områder med delt anonymt minne har blitt gitt (tidligere kunne navn bare tilordnes til privat anonymt minne tildelt en spesifikk prosess).
    • Et nytt kjernekommandolinjealternativ "trace_trigger" er lagt til for å aktivere en sporingsutløser som brukes til å binde betingede kommandoer som kalles når en utsjekking utløses (for eksempel trace_trigger="sched_switch.stacktrace if prev_state == 2").
    • Økte versjonskrav for binutils-pakken. Kjernebygg krever nå minst binutils 2.25.
    • Når du kaller exec(), la til muligheten til å plassere prosessen i et tidsnavnområde, der tiden er forskjellig fra systemtiden.
    • En port med tilleggsfunksjonalitet har begynt fra Rust-for-Linux-grenen relatert til å bruke Rust som et andrespråk for å utvikle drivere og kjernemoduler. Rust-støtte er deaktivert som standard og fører ikke til at Rust inkluderes som en nødvendig kjernebyggingsavhengighet. Den grunnleggende funksjonaliteten som tilbys i den siste utgivelsen er utvidet med støtte for lavnivåkode, slik som Vec-typen og pr_debug!(), pr_cont!() og pr_alert!() makroene, samt "#[vtable] " prosedyremakro, som forenkler arbeidet med pekertabeller på funksjoner. Tillegget av rustinnpakninger på høyt nivå over kjerneundersystemer, som vil tillate deg å lage fullverdige drivere i Rust, forventes i fremtidige utgivelser.
    • "char"-typen som brukes i kjernen er nå erklært usignert som standard for alle arkitekturer.
    • Utdatert plateminnetildelingsmekanisme - SLOB (plateallokator), som ble designet for et system med en liten mengde minne. Det anbefales å bruke SLUB eller SLAB i stedet for SLOB under normale omstendigheter. For systemer med liten mengde minne, anbefales det å bruke SLUB i SLUB_TINY-modus.
  • Diskundersystem, I/O og filsystemer
    • Det er gjort forbedringer av Btrfs som tar sikte på å fikse "skrivehull"-problemet i RAID 5/6-implementeringen (forsøker å gjenoppbygge en RAID hvis en krasj oppstod under en skriving og det er umulig å forstå hvilken blokk på hvilken av RAID-enhetene som var skrevet riktig, noe som kan føre til blokkering korrupsjon, tilsvarende underskrevne blokker). I tillegg er standard asynkron utførelse av "kast"-operasjonen nå automatisk aktivert for SSD-er når det er mulig, noe som gir bedre ytelse på grunn av den effektive grupperingen av "kast"-operasjoner i en kø og behandling av køen av en bakgrunnsbehandler. Forbedret ytelse av sende- og lseek-operasjoner, samt FIEMAP ioctl.
    • Utvidede alternativer for å håndtere forsinket skriving (tilbakeskrivning, bakgrunnslagring av endrede data) for blokkenheter. I noen situasjoner, for eksempel når du bruker nettverksblokkenheter eller USB-stasjoner, kan forsinket skriving føre til et stort forbruk av RAM. Nye parametere strict_limit, min_bytes, max_bytes, min_ratio_fine og max_ratio_fine har blitt introdusert i sysfs (/sys/class/bdi/) for å kontrollere oppførselen til late skrivinger og holde sidebufferstørrelsen innenfor visse grenser.
    • F2FS-filsystemet implementerer atomic replace ioctl-operasjonen, som lar deg skrive data til en fil som en del av en enkelt atomoperasjon. F2FS legger også til en blokkutvidelsesbuffer for å hjelpe med å identifisere data som brukes aktivt eller som ikke har blitt åpnet på en stund.
    • I FS ext4 er bare feilrettinger notert.
    • ntfs3-filsystemet tilbyr flere nye monteringsalternativer: "nocase" for å kontrollere store og små bokstaver i fil- og katalognavn; windows_name for å forhindre opprettelse av filnavn som inneholder tegn som er ugyldige for Windows; hide_dot_files for å kontrollere hvordan den skjulte filetiketten tildeles filer som starter med en prikk.
    • Squashfs-filsystemet implementerer "threads="-monteringsalternativet, som du kan angi antall tråder for å parallellisere dekompresjonsoperasjoner. Squashfs introduserte også muligheten til å kartlegge bruker-IDer for monterte filsystemer, brukt til å kartlegge filer fra en spesifikk bruker på en montert utenlandsk partisjon til en annen bruker på det gjeldende systemet.
    • Redesignet implementering av POSIX Access Control Lists (POSIX ACLs). Den nye implementeringen fikser arkitektoniske problemer, gjør kodebasen enklere å vedlikeholde og bruker sikrere datatyper.
    • Støtte for SM4-krypteringsalgoritmen (kinesisk standard GB/T 32907-2016) er lagt til fscrypt-undersystemet, som brukes til å kryptere filer og kataloger transparent.
    • Forutsatt muligheten til å bygge en kjerne uten NFSv2-støtte (i fremtiden er NFSv2-støtte planlagt fullstendig fjernet).
    • Organiseringen av å sjekke tilgangsrettigheter til NVMe-enheter er endret. Tildelt muligheten til å lese og skrive til en NVMe-enhet hvis skriveprosessen har tilgang til enhetens spesialfil (tidligere måtte prosessen ha CAP_SYS_ADMIN-tillatelsen).
    • Fjernet pakket CD/DVD-driver som ble avviklet i 2016.
  • Virtualisering og sikkerhet
    • Implementerte en ny metode for å beskytte mot Retbleed-sårbarheten i Intel og AMD CPUer ved å bruke sporing av samtaledybde, som ikke er like treg som den tidligere nåværende Retbleed-beskyttelsen. For å aktivere den nye modusen, foreslås kjernekommandolinjeparameteren "retbleed=stuff".
    • En hybrid FineIBT-kommandoflytbeskyttelsesmekanisme er lagt til, som kombinerer bruken av Intel IBT (Indirect Branch Tracking) maskinvareinstruksjoner og kCFI (kernel Control Flow Integrity) programvarebeskyttelse for å blokkere brudd på den normale utførelsesordren (kontrollflyt) som følge av bruke utnyttelser som endrer pekere lagret i minnet på funksjoner. FineIBT tillater kjøring på en indirekte gren bare i tilfelle et hopp til ENDBR-instruksjonen, som er plassert helt i begynnelsen av funksjonen. I tillegg, analogt med kCFI-mekanismen, sjekkes hashene deretter, og garanterer uforanderligheten til pekere.
    • Det er lagt til restriksjoner for å blokkere angrep som manipulerer genereringen av "oops"-tilstander, hvoretter de problematiske oppgavene er fullført og tilstanden gjenopprettes uten å stoppe systemet. Med et veldig stort antall anrop til "oops"-tilstanden, oppstår en referanseteller (refcount)-overflyt, som tillater utnyttelse av sårbarheter forårsaket av avreferanse NULL-pekere. For å beskytte mot slike angrep har kjernen lagt til en grense på det maksimale antallet "oops"-operasjoner, etter overskridelse vil kjernen starte en overgang til "panikk"-tilstanden, etterfulgt av en omstart, som ikke vil tillate å nå antallet av iterasjoner som kreves for å flyte over gjentellingen. Som standard er grensen satt til 10 tusen "oops", men om ønskelig kan den endres gjennom parameteren oops_limit.
    • Lagt til konfigurasjonsparameter LEGACY_TIOCSTI og sysctl legacy_tiocsti for å deaktivere muligheten til å sette data inn i terminalen ved hjelp av ioctl TIOCSTI, siden denne funksjonaliteten kan brukes til å erstatte vilkårlige tegn i terminalens inngangsbuffer og simulere brukerinndata.
    • En ny type interne strukturer encoded_page er foreslått, der de nedre bitene av pekeren brukes til å lagre tilleggsinformasjon som brukes for å beskytte mot utilsiktet dereferering av pekeren (hvis en dereferanse virkelig er nødvendig, må disse ekstra bitene først slettes).
    • På ARM64-plattformen, på oppstartsstadiet, er det mulig å aktivere og deaktivere programvareimplementeringen av Shadow Stack-mekanismen, som brukes til å beskytte mot overskriving av returadressen fra en funksjon i tilfelle bufferoverflyt på stabelen (den essensen av beskyttelse er å lagre returadressen i en egen "skygge"-stabel etter at kontrollen er overført til funksjonen som henter den gitte adressen før funksjonen avsluttes). Støtte i samme kjernesammenstilling for maskinvare- og programvareimplementeringen av Shadow Stack lar deg bruke samme kjerne på forskjellige ARM-systemer, uavhengig av om de støtter instruksjoner for pekerautentisering. Inkludering av programvareimplementering utføres gjennom erstatning under lasting av nødvendige instruksjoner i koden.
    • Lagt til støtte for bruk av den asynkrone utgangsvarslingsmekanismen på Intel-prosessorer, som gjør det mulig å oppdage enkelttrinnsangrep på kode som kjører i SGX-enklaver.
    • Et sett med operasjoner er foreslått som lar hypervisoren støtte forespørsler fra Intel TDX (Trusted Domain Extensions) gjestesystemer.
    • Fjernet RANDOM_TRUST_BOOTLOADER og RANDOM_TRUST_CPU kjernebyggingsinnstillinger, bruk i stedet de riktige kommandolinjealternativene random.trust_bootloader og random.trust_cpu.
    • Støtte for LANDLOCK_ACCESS_FS_TRUNCATE-flagget er lagt til Landlock-mekanismen, som lar deg begrense interaksjonen mellom en gruppe prosesser med det eksterne miljøet, noe som gjør det mulig å kontrollere utførelsen av filavkortingsoperasjoner.
  • Nettverksundersystem
    • For IPv6 er det lagt til støtte for PLB (Protective Load Balancing), en lastbalanseringsmekanisme mellom nettverkskoblinger, rettet mot å redusere overbelastningspunkter på datasentersvitsjer. Ved å endre IPv6-flytetiketten, endrer PLB tilfeldig pakkeveier for å balansere belastningen på svitsjportene. For å redusere pakkeombestilling utføres denne operasjonen etter inaktive perioder når det er mulig. Bruken av PLB i Googles datasentre har redusert belastningsubalansen på switchporter med gjennomsnittlig 60 %, redusert pakketap med 33 % og redusert ventetid med 20 %.
    • Lagt til driver for MediaTek Wi-Fi 7 (802.11be)-enheter.
    • Lagt til støtte for 800-gigabit-lenker.
    • Lagt til muligheten til å endre navn på nettverksgrensesnitt i farten, uten å stoppe arbeidet.
    • Lagt til en omtale av IP-adressen som pakken ankom til SYN-flommeldingene skrevet til loggen.
    • For UDP er muligheten til å bruke separate hashtabeller for forskjellige nettverksnavneområder implementert.
    • Nettverksbroer støtter MAB (MAC Authentication Bypass) autentiseringsmetoden.
    • For CAN (CAN_RAW)-protokollen støttes SO_MARK-socket-modus for å koble til trafikkfiltre basert på fwmark.
    • ipset har en ny bitmask-parameter som lar deg sette en maske basert på vilkårlige biter i en IP-adresse (for eksempel "ipset create set1 hash:ip bitmask 255.128.255.0").
    • Lagt til støtte til nf_tables for behandling av indre overskrifter i tunnelpakker.
  • Оборудование
    • "Accel"-delsystemet er lagt til med implementeringen av rammeverket for dataakseleratorer, som kan leveres både i form av separate ASIC-er og i form av IP-blokker inne i SoC og GPU. Disse akseleratorene er hovedsakelig fokusert på å fremskynde løsningen av maskinlæringsproblemer.
    • Amdgpu-driveren inkluderer støtte for GC-, PSP-, SMU- og NBIO IP-komponenter. DCN (Display Core Next)-støtte er implementert for ARM64-systemer. Implementeringen av sikker skjermutgang er flyttet fra å bruke DCN10 til DCN21 og kan nå brukes når flere skjermer er koblet til.
    • i915 (Intel) driver stabilisert støtte for Intel Arc (DG2/Alchemist) diskrete grafikkort.
    • Nouveau-driveren støtter NVIDIA GA102 (RTX 30) GPU basert på Ampere-arkitekturen. For nva3 (GT215)-kort er muligheten til å kontrollere bakgrunnsbelysningen lagt til.
    • Lagt til støtte for trådløse adaptere basert på Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) og MediaTek MT7996-brikker, Broadcom BCM4377/4378/4387 Bluetooth-grensesnitt og Motorcomm yt8521 Ethernet-kontroller.
    • Lagt til ASoC (ALSA System on Chip)-støtte for innebygde lydbrikker HP Stream 8, Advantech MICA-071, Dell SKU 0C11, Intel ALC5682I-VD, Xiaomi Redmi Book Pro 14 2022, i.MX93, Armada 38x, RK3588. Lagt til støtte for lydgrensesnittet Focusrite Saffire Pro 40. Lagt til Realtek RT1318 lydkodek.
    • Lagt til støtte for Sony-smarttelefoner og nettbrett (Xperia 10 IV, 5 IV, X og X compact, OnePlus One, 3, 3T og Nord N100, Xiaomi Poco F1 og Mi6, Huawei Watch, Google Pixel 3a, Samsung Galaxy Tab 4 10.1.
    • Lagt til støtte for ARM SoC og Apple-kort T6000 (M1 Pro), T6001 (M1 Max), T6002 (M1 Ultra), Qualcomm MSM8996 Pro (Snapdragon 821), SM6115 (Snapdragon 662), SM4250 (Snapdragon 460), (Snapdragon 6375), (Snapdragon 695) ), SDM670 (Snapdragon 670), MSM8976 (Snapdragon 652), MSM8956 (Snapdragon 650), RK3326 Odroid-Go/rg351, Zyxel NSA310S, InnoComm i.MX8MM, Odroid Go Ultra.

Samtidig dannet Latin American Free Software Foundation en variant av den helt gratis kjernen 6.2 - Linux-libre 6.2-gnu, renset for fastvare- og driverelementer som inneholder ikke-frie komponenter eller kodeseksjoner, hvis omfang er begrenset av produsenten. I den nye utgivelsen er rensingen av nye klatter i nouveau-driveren utført. Deaktiverte blobs lasting i mt7622, ​​​​mt7996 wifi og bcm4377 bluetooth-drivere. Renset blob-navn i dts-filer for Aarch64-arkitektur. Oppdatert blob-oppryddingskode i forskjellige drivere og undersystemer. Sluttet å rense s5k4ecgx-driveren da den ble fjernet fra kjernen.

Kilde: opennet.ru

Legg til en kommentar