Utgivelsen av Linux-kjernen 6.9

Etter to måneders utvikling presenterte Linus Torvalds utgivelsen av Linux-kjernen 6.9. Blant de mest bemerkelsesverdige endringene er: dm-vdo-modulen for deduplisering og komprimering av blokkenheter, modus for direkte tilgang til filer i FUSE, støtte for oppretting av pidfd for individuelle tråder, BPF-tokenmekanisme, støtte for Rust på ARM64-systemer, klassifisering av Ext2-filsystemet som utdaterte, fjerning av den gamle NTFS-driveren, støtte for Intel FRED-mekanisme.

Den nye versjonen har mottatt 15680 rettelser fra 2106 utviklere, patchstørrelsen er 54 MB (endringer berørte 11825 filer, 687954 linjer kode ble lagt til, 225344 linjer ble fjernet). I forrige utgave var det 15641 rettelser fra 2018 utviklere, patchstørrelsen var 44 MB. Omtrent 42 % av alle endringene i 6.9 gjelder enhetsdrivere, omtrent 17 % av endringene er relatert til oppdatering av maskinvare-spesifikk kode, 13 % er knyttet til nettverksstakken, 7 % til filsystemer og 4 % til interne kjernemekanismer.

De viktigste nyhetene i kjernen 6.9:

  • Disk subsystem, I/O og filsystemer
    • I Device Mapper (DM) er det lagt til en ny behandler dm-vdo (virtual data optimizer), som gjør det mulig å implementere en virtuell blokkenhet basert på eksisterende blokkenheter med funksjoner som deduplisering av gjentatte data, datakomprimering, utelukkelse av tomme blokker og økning av blokkenhetens størrelse etter behov (thin provisioning). De nevnte funksjonene implementeres på blokkenhetsnivå og er uavhengige av filsystemet som brukes (for eksempel kan dm-vdo muliggjøre automatisk sammenslåing av dupliserte data og lagring av informasjon i komprimert format for alle FS). Det støttes bruk av dm-vdo for fysiske lagringsenheter på opptil 256TB, samt oppretting av logiske volumer på opptil 4PB. For å administrere vdo-partisjoner anbefales det å bruke lvm. VDO-teknologien ble utviklet av Permabit og ble gjort åpen etter oppkjøpet av Red Hat i 2017.
    • I FUSE-subsystem som brukes til å implementere filsystemer i brukerrommet, ble det lagt til en tidlig implementering av 'passthrough'-modusen, som tillater direkte tilgang til fildata på kjernenivå, og omgår prosessen som kjører i brukerrommet. Dette kan i enkelte situasjoner betydelig forbedre ytelsen. For eksempel kan FUSE-implementasjoner av FS som kjører i skrivebeskyttet modus og begrenser tilgang til filer, levere innholdet fra filene fra det originale FS uten å måtte sende dem til FUSE-prosessen.
    • Driveren med implementering av filsystemet Ext2 er klassifisert som utdatert (deprecated). Årsaken er at driveren kun støtter 32-bits tids tellere i inode, som vil overfylles den 19. januar 2038. I stedet for Ext2-driveren anbefales det å bruke Ext4-driveren, som kan håndtere Ext2-filsystemet fullstendig kompatibelt, men samtidig kan bruke tidsstempler i ext2-partisjoner som ikke er påvirket av 2038-problemet, hvis FS er opprettet med inode på mer enn 255 byte (i Ext2-driveren ble 32-bits tids tellere brukt uavhengig av inode-størrelse).
    • Den gamle NTFS-filsystemdriveren er fjernet, og fra versjon 5.15 ble den nye NTFS3-driveren innført. Det er ikke hensiktsmessig å ha to drivere med NTFS-implementering i kjernen, ettersom den gamle driveren ikke har vært oppdatert på mange år, er i en beklagelig tilstand og kan kun fungere i lesemodus.
    • Det er lagt til støtte for mappingen av brukerkontoinformasjon i filsystemene zonefs og hugetlbfs, som brukes for å knytte filer fra en bestemt bruker på en montert delt partisjon med en annen bruker i det nåværende systemet.
    • For NFSv4 er det nå mulig for administratorer å rydde opp i åpningstilstander og filblokkeringer.
    • Det rapporteres kun om feilrettinger og oppdateringer av kunit-tester for filsystemet Ext4.
    • I Btrfs har det fortsatt blitt oversatt funksjoner til bruk av minnesider (page folios).
    • I filsystemet XFS er arbejdet med implementeringen af værktøjet fsck til kontrol og reparation af identificerede problemer i online-tilstand uden at afmontere filsystemet fortsat.
    • Det er lagt til et flagg RWF_NOAPPEND til systemanropet pwritev2(), som lar brukeren spesifisere en offset for skriving, selv når filen er åpnet i kun append-modus.
    • Nye ioctl-kommandoer er lagt til: FS_IOC_GETUUID — returnerer UUID-identifikatoren for det angitte filsystemet, og FS_IOC_GETFSSYSFSPATH — angir plasseringen i /sys/fs for det angitte monterte FS.
    • Filsystemene efs, qnx4 og coda er oversatt til bruk av den nye API-en for montering av partisjoner.
    • Implementeringen av filoperasjoner utført i case-insensitive-modus er forbedret. Ytelsen er økt ved å først gjøre en sammenligning med case-sensitivitet, og deretter gå tilbake til å søke uten hensyn til store/små bokstaver. Problemer ved montering av overlayfs over kataloger med case-insensitive-modus er løst.
  • Minne og systemtjenester
    • Støtte for Intel FRED (Flexible Return and Event Delivery) mekanisme er implementert, designet for å forbedre effektiviteten og påliteligheten ved levering av informasjon om lavnivåhendelser, sammenlignet med den nåværende IDT (Interrupt Descriptor Table)-mekanismen. Ytelsesforbedringer og redusert forsinkelse oppnås ved å returnere hendelser med CPU-instruksjonen IRET i stedet for å sende hendelser gjennom IDT-tabellen. Påliteligheten økes ved separat behandling av hendelsesinntrengning i kjernens og brukerens kontekst, beskyttelse mot innleid utførelse av NMI, samt lagring av alle registre knyttet til unntak i et utvidet stakkramme.
    • Muligheten for å optimalisere dataadgangen til enkelte CPU-kjerner ved å bruke navngitte adresserom (Named Address Spaces) implementert i GCC som en utvidelse av GNU C er lagt til.
    • Flagget PIDFD_THREAD er lagt til i funksjonen pidfd_open(), noe som gjør det mulig å opprette pidfd for individuelle tråder, i stedet for kun å bruke pidfd i konteksten av en gruppe av tråder. Det er også foreslått en implementering av et pseudo-FS for tilgang til pidfd gjennom det virtuelle filsystemet. I motsetning til prosessidentifikasjon ved hjelp av pid, er pidfd-identifikatoren knyttet til en spesifikk prosess og endres ikke, mens PID etter at prosessen er avsluttet kan bli tilknyttet en annen prosess.
    • Et BPF-token-mekanisme er lagt til i BPF-subsystemet, som tillater selektiv delegasjon av programmerettigheter til privilegerte BPF-operasjoner, for eksempel kan man gi et uppriviligert program tilgang til spesifikke BPF-subsystemer uten å gi full CAP_BPF-rettigheter.
    • En BPF-subsystemen er det lagt til en ny type delt minne, bpf_arena, som definerer et område tilgjengelig for deling mellom BPF-programmer og prosesser i brukerens rom. Det er også lagt til instruksjonen may_goto, som gjør det mulig å organisere arbeidsflyten i sløyfer som kan avbrytes av verifikatoren. Muligheten for å generere vilkårlige TCP SYN-cookies fra BPF-programmer er lagt til, samt BPF-håndterere for å håndtere SYN-flom.
    • Overføringen av endringer fra Rust-for-Linux-grenen fortsetter, relatert til bruken av Rust som et andre språk for utvikling av drivere og kjerne-moduler (Rust-støtte er ikke aktivert som standard og fører ikke til at Rust blir en obligatorisk byggeavhengighet for kjernen). Det er lagt til støtte for å bruke Rust-språket på 64-biters ARM-prosessorer. Overgangen til Rust 1.76 er gjennomført. Makroen ‘container_of!’ er lagt til. I stedet for den ustabile funksjonaliteten ‘ptr_metadata’ er den stabile metoden ‘byte_sub’ benyttet. Modulen ‘time’ med funksjonen for tidskonvertering ‘msecs_to_jiffies()’ er også lagt til.
    • I io_uring-subsystemen er muligheten for å trimme filer (ftruncate_file) lagt til.
    • En ny type arbeidskøer, WQ_BH (workqueue Bottom Halves), er lagt til for asynkron utførelse av kode i konteksten av programvareavbrudd, designet for å brukes i stedet for utdaterte tasklets.
    • Timer-subsystemet er betydelig omarbeidet, med forbedret logikk for valg av aktiv CPU-kjerne for utføring av utløste timere, for å unngå å vekke inaktive kjerner fra dvalemodus.
    • Muligheten for å oppdatere kjernens energiforbruksmodell (EM, Energy Model) under drift er implementert, noe som kan brukes for eksempel til å ta hensyn til innvirkningen av driftstemperaturen på energieffektiviteten til CPU. Ytelsen til funksjonen em_cpu_energy() er betydelig forbedret, som nå kjører 1.43 ganger raskere på en stasjonær testsystem og 1.69 ganger raskere på RockPi 4B.
    • Støtte for å starte systemer basert på ARM64-arkitektur i LPA2-modus med et 52-bits virtuelt adresseområde er lagt til.
    • For ARM64-systemer er det implementert støtte for kontinuerlige PTE (Page Table Entry) skrivemuligheter, som kan øke ytelsen ved å forbedre effektiviteten i bruken av TLB (Translation Lookaside Buffer).
    • Det er komme patchar for å auke ytelsen til minnehandteringssystemet ved å redusere oppkomsten av konkurrerande låsingar i vmalloc().
    • For LoongArch-arkitekturen er det implementert ein mekanisme for hot patching av kjernen, som gjer det mogleg å bruke rettingar på kjernen utan omstart.
    • For RISC-V-system er det implementert støtte for systemkallet membarrier(), som sørgjer for å sette minnebarrierar for trådar som køyrer i systemet.
    • Krav til versjonen av LLVM/Clang som kan brukast for å bygge kjernen er auka. For bygge er no minst versjon LLVM 13.0.1 påkrevd (tidlegare var støtte for bygging med LLVM 11+).
    • I mekanismen «User trace events», som gjer det mogleg å lage sporevent frå brukerprosesser for å overvake aktivitet i brukarrummet, er det lagt til støtte for eksport av informasjon om hendingar i ulike format (USER_EVENT_REG_MULTI_FORMAT).
    • I mekanismen for funksjonssporing er det lagt til moglegheit for å overvake tilstanden til innkommande argument for funksjonen når ein sporar utgangen frå funksjonen. Return-verdiar kan no koplast med argumenta som vart brukte under kallingen av funksjonen.
    • Verktøyet perf har fått støtte for aggregert utdata-modus «cluster» («perf stat -a --per-cluster») for å samle statistikk om delte ressursar. Moglegheit for bruk av biblioteket libcapstone for desassemblering av prosessorinstruksjonar («perf script -F disasm») er implementert. Det er utført optimaliseringar av minnebruken når ein køyrer kommandoar som perf report og perf annotate.
  • Virtualisering og sikkerhet
    • Det er lagt til beskyttelse mot sårbarheita RFDS (Register File Data Sampling) i Intel Atom-prosessorar, som gjer det mogleg å hente ut resterande informasjon frå registerfilene (RF, Register File) til prosessoren, som blir brukt til å felles lagra innhaldet i registrane på alle oppgåver på same CPU-kjerne. For å blokkere sårbarheita er det nødvendig med eit mikroprogramvareoppdatering og bruk av instruksjonen VERW for å tømme innhaldet i mikroarkitekturbufferane ved tilbakeføring frå kjernen til brukarrummet. For å aktivere beskyttelse ved oppstart av kjernen kan ein angi flagget «reg_file_data_sampling=on». Informasjon om sårbarheita og tilgjengeleg mikroprogramvare for beskyttelse kan vurderast i fila «/sys/devices/system/cpu/vulnerabilities/reg_file_data_sampling».
    • Grunnleggende støtte for beskyttelse av gjestesystemer er lagt til ved hjelp av AMD SEV-SNP (Secure Nested Paging) utvidelsen, som sikrer sikker drift med innkapslede minneside-tabeller og beskytter mot «undeSErVed» og «SEVerity» angrep på AMD EPYC prosessorer, som kan omgå AMD SEV (Secure Encrypted Virtualization) beskyttelsesmekanismen. KVM Nødvendige endringer for bruk av SNP planlegges lagt til i versjon 6.10.
    • Moduler med implementering av teknologiene IMA (Integrity Measurement Architecture) og EVM (Extended Verification Module) er nå blitt konvertert til å bruke LSM (Linux Security Modules) rammeverket, noe som, uten tap av funksjonalitet, har betydelig forenklet koden, kombinert duplisert funksjonalitet og utnyttet de standardmulighetene som er tilgjengelige gjennom LSM. IMA-modulen er laget for å sjekke integriteten av operativsystemets komponenter ved hjelp av digitale signaturer og hashes. EVM-modulen beskytter utvidede filattributter (xattrs) mot angrep rettet mot å kompromittere deres integritet (EVM forhindrer en offline-angrep der en angriper kan endre metadata, for eksempel ved å starte fra sin egen lagringsenhet).
    • Systemanropene lsm_list_modules(), lsm_get_self_attr() og lsm_set_self_attr() er omarbeidet for bedre kompatibilitet med 32-bit miljøer. Disse er ment for å gi en liste over lastede LSM-moduler (Linux Security Modules) og for å hente/sette LSM-modulens attributter. Endringen bryter bakoverkompatibiliteten, men siden de nye systemanropene ble lagt til i den forrige kjernerelansen og ikke brukes i applikasjoner for øyeblikket, anså Linus Torvalds endringen for å være akseptabel.
    • Det ble gjort et forsøk på å gjennoppta bruken av mekanismen UBSAN (Undefined Behavior Sanitizer). Problemet er at kompilatorer håndterer heltallsoverskridelser av både signerte og usignerte typer forskjellig. Signerte overskridelser og overskridelse av pekere faller inn under kategorien udefinert atferd, mens usignerte overskridelser kuttes med modulus 2n, og bare de laveste bitene av resultatet beholdes ("wrap-around"), og faller ikke under udefinert atferd. For å unngå situasjoner som kan føre til udefinert atferd, blir kjernen bygget med alternativet "-fno-strict-overflow", som fører til bruk av "wrap-around" for alle heltallsoverskridelser. GCC og Clang kan ikke diagnostisere noen problemer ordentlig når de bruker flagget "-fno-strict-overflow", og aktivering av UBSAN har som mål å utføre samarbeid med utviklerne av kompilatorer for å eliminere falske positiv og avdekke heltallsoverskridelser på steder der det ikke finnes eksplisitte kontroller.

      For å sjekke mulige overskridelser i kjernen brukes konstruksjoner som "var + offset PAGE_SHIFT) < pgoff){..}"), som er bundet til bygging med flagget "-fno-strict-overflow" og dekker ikke all kode der overskridelse potensielt kan oppstå. Problemet er at når man bruker UBSAN, førte slike sjekker til et stort antall falske varsler, og derfor måtte UBSAN deaktiveres i 2021. I den oppdaterte implementeringen er det foreslått å bruke spesielle annotasjoner __signed_wrap og __unsigned_wrap, samt eksisterende makroer med sjekker add_would_overflow(a, b) og add_wrap(a, b), som skiller mellom det utviklerne forutsatte ved bruk av heltallsoverskridelser fra tilfeldige overskridelser som kan føre til sårbarheter. Forslaget om en mer omfattende omskrivning av kjernen med innføring av flere type-definisjoner ble avvist av Linus Torvalds.

  • Nettverks subsystem
    • I nettverksunderdelen har det blitt gjort arbeid for å redusere forekomsten av konkurrerende låser ("lock contention", et forsøk på å få tilgang til en lås som holdes av en annen tråd). Bruken av RTNL-låser har blitt redusert.
    • Muligheten for å aktivere støtte for busy polling i konteksten av individuelle epoll-kall er lagt til. Størrelsen på poolen og budsjettparametere kan settes separat fra standard systemparametere.
    • Strukturen net_hotdata er realisert for å forbedre effektiviteten av caching av de mest brukte variablene i nettverkskonfigurasjonen.
    • I MPTCP er støtte for å sette TCP_NOTSENT_LOWAT-alternativet for sokler lagt til, noe som begrenser størrelsen på sendepufferen. I MCTP-sokkel-APIet er støtte for nettverksidentifikatorer ('network ID') lagt til, som gir mulighet til å bruke flere ikke-overlappende MCTP-nettverk på én vert.
    • I IPSec er støtte for omdirigering av ICMP-meldinger med feilinformasjon (RFC 4301) lagt til.
    • Prosessen med skanning av ruter med utløpt levetid er akselerert.
    • XDPs ytelse er forbedret gjennom strammere unngåelse av allokering av store minneblokker.
    • Muligheten for å knytte metadata til netconsole-meldinger er lagt til.
    • I Netfilter er det nå tillatt å definere tabeller fra brukerrommet som knyttes til en administratorprosess og ikke automatisk fjernes etter at brukerapplikasjonen er fullført.
    • I nftables er det akselerert å legge til elementer i set-samlinger med sammenkoblede områder.
  • Utstyr
    • I i915-driveren er arbeidet med å implementere støtte for Intel LunarLake-brikker (Xe 2) fortsatt. Nye PCI-identifikatorer for enheter basert på Intel Arrow Lake og Alder Lake N er lagt til. For DisplayPort er støtte for tunneling (DP tunneling) og tilordning av båndbredde lagt til. Fastboot-modus er aktivert for alle plattformer. Støtte for feilsøkingsutdata knyttet til spesifikke enheter er lagt til.
    • I AMDGPU-driveren er det gjort forberedelser for å implementere støtte for GPU AMD RDNA3.5 og RDNA4. Støtte for ATHUB 4.1, LSDMA 7.0, JPEG DPG, IH 7.0, HDP 7.0, VCN 5.0, SMU 13.0.6, NBIO 7.11, SDMA 6.1, MMHUB 3.3, DCN 3.5.1, NBIF 6.3.1, VPE 6.1.1 og RAS ACA-rammeverket er lagt til. Frikoblingsparameteren freesync_video er lagt til i kjernemodulen for å aktivere eksperimentell støtte for optimalisering av videomodusveksling ved hjelp av FreeSync-teknologi.
    • I Nouveau-driveren er skjermkontrollkoden overført til å bruke funksjonen kmemdup().
    • Arbeidet med DRM-driveren (Direct Rendering Manager) for Xe-grafikkprosessorer basert på Intel Xe-arkitekturen, som brukes i Intel Arc-grafikkort og integrert grafikk fra og med Tiger Lake-prosessorene, er fortsatt i gang.
    • DRM-driveren for Mediatek MT8188 VDOSYS1-brikkene er lagt til.
    • Innstillinger relatert til videosystemer er flyttet til seksjonen CONFIG_VIDEO.
    • Støtte for ARM64 SoC-er: Mediatek MT7981B (Filogic 820), MT7988A (Filogic 880), NXP i.MX8DXP, Renesas R8A779G2 (R-Car V4H ES2.0), R8A779H0 (R-Car V4M), TI J722S er lagt til.
    • Støtte for ARM-plattformer og enheter er lagt til: Android-telefoner med Tegra30-brikken, Chromebook-modeller med Mediatek MT8186, NAS, nettbrett og spillkonsoller med Rockchips RK35xx, White Hawk-kort med Renesas SoC, kort basert på Qualcomm SM8550 (Snapdragon 8 Gen 2), Apalis Evaluation Board, Sielaff i.MX6 Solo Board, Samsung Galaxy Tab 4 10.1 LTE.
    • Koden for ALSA-lydsystemet er refaktorert. Støtte for lydsystemer fra Microchip SAM9x7, NXP i.MX95 og Qualcomm WCD939x er lagt til. I SoundWire-driveren er støtte for ASoC med AMD ACP 6.3 lydkoprosessorer lagt til, og for Intel-systemer er DSPless-modus implementert. Støtte for flere lydkodeker fra Cirrus HD er også lagt til. Lydstyringen i virtio-driveren er forbedret.
    • Støtte for Ethernet-kontrollere Marvell Octeon PCI Endpoint NIC VF og Intel E825-C 100G er lagt til.

Samtidig har den latinamerikanske Free Software Foundation utviklet en variant av det helt frie kjernen 6.9 – Linux-libre 6.9-gnu, renset for programvare og drivere som inneholder ikke-frie komponenter eller kodeavsnitt, der bruksområdet er begrenset av produsenten. I utgivelsen 6.9 er kode for rensing av blobber i amdgpu, ath12k, adreno, btusb og r8169-driverne oppdatert. Det er gjort rensing av den nye ptp_fc3-driveren. Navnene på blobber i dts-filer (devicetree) for Aarch64-arkitekturen er renset. Problemer med rensing av i915-driveren, som førte til henginger under initiering, er løst. Endringer relatert til håndtering av blobber levert som hex-dumper er gjort.

Kilde: opennet.ru

Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster