Linux-kjerneutgivelse 6.1

Etter to måneder med utvikling presenterte Linus Torvalds utgivelsen av Linux-kjernen 6.1. Blant de mest bemerkelsesverdige endringene: støtte for utvikling av drivere og moduler i Rust-språket, modernisering av mekanismen for å bestemme brukte minnesider, en spesiell minnebehandling for BPF-programmer, et system for å diagnostisere minneproblemer KMSAN, KCFI (Kernelk Control). -Flow Integrity) beskyttelsesmekanisme, introduksjonen av Maple-strukturtreet.

Den nye versjonen inkluderer 15115 2139 rettelser fra 51 2 utviklere, patchstørrelsen er 6.0 MB, som er omtrent 5.19 ganger mindre enn størrelsen på patcher fra kjernene 13165 og 716247. Endringene berørte 304560 45 filer, 6.1 14 linjer med kode ble lagt til, og 14 3 linjer ble slettet. Omtrent 3 % av alle endringer introdusert i XNUMX er relatert til enhetsdrivere, omtrent XNUMX % av endringene er relatert til oppdatering av kode spesifikk for maskinvarearkitekturer, XNUMX % er relatert til nettverksstakken, XNUMX % er relatert til filsystemer og XNUMX % er relatert til interne kjernedelsystemer.

Nøkkelinnovasjoner i kjerne 6.1:

  • Minne- og systemtjenester
    • Lagt til muligheten til å bruke Rust som et andrespråk for å utvikle drivere og kjernemoduler. Hovedgrunnen til å støtte Rust er å gjøre det enklere å skrive sikre enhetsdrivere av høy kvalitet ved å redusere sannsynligheten for å gjøre feil når du arbeider med minne. Rust-støtte er deaktivert som standard og resulterer ikke i at Rust inkluderes som en nødvendig kjernebyggingsavhengighet. Kjernen har så langt tatt i bruk en minimal, nedstrippet versjon av oppdateringene, som er redusert fra 40 til 13 tusen linjer med kode og gir kun det nødvendige minimum, tilstrekkelig til å bygge en enkel kjernemodul skrevet på Rust-språket. I fremtiden er det planlagt å gradvis øke den eksisterende funksjonaliteten, og overføre andre endringer fra Rust-for-Linux-grenen. Parallelt utvikles prosjekter for å bruke den foreslåtte infrastrukturen til å utvikle drivere for NVMe-stasjoner, 9p-nettverksprotokollen og Apple M1 GPU på Rust-språket.
    • For systemer basert på AArch64-, RISC-V- og LoongArch-arkitekturer med EFI, er muligheten til å laste inn komprimerte kjernebilder direkte. Lagt til behandlere for lasting, kjøring og utlasting av kjernebilder, kalt direkte fra EFI zboot. Håndtere for installasjon og sletting av protokoller fra EFI-protokolldatabasen er også lagt til. Tidligere ble utpakking utført av en egen bootloader, men nå kan dette gjøres av en behandler i selve kjernen – kjernebildet er dannet som en EFI-applikasjon.
    • Sammensetningen inkluderer en del av oppdateringene med implementering av en multi-level minnestyringsmodell, som lar deg skille minnebanker med forskjellige ytelsesegenskaper. For eksempel kan de mest brukte sidene lagres i det raskeste minnet, mens de mest sjeldent brukte sidene kan lagres i relativt tregt minne. Kernel 6.1 introduserer en mekanisme for å bestemme hvor mye brukte sider er plassert i sakte minne, slik at de kan forfremmes til raskt minne, og introduserer også et generelt konsept for minnelag og deres relative ytelse.
    • Den inkluderer MGLRU (Multi-Generational LRU) mekanismen, som erstatter den gamle LRU (Least Recently Used) implementeringen basert på to køer med en flertrinns struktur som bedre bestemmer hvilke minnesider som faktisk er i bruk og hvilke som kan skyves ut til swap-partisjonen.
    • Lagt til støtte for "lønnetre"-datastrukturen foreslått av Oracle-ingeniører, som er posisjonert som en mer effektiv erstatning for strukturen "rød-svart tre". Maple tree er en variant av B-tree som støtter rekkeviddeindeksering og er designet for å gjøre effektiv bruk av hurtigbufferen til moderne prosessorer. Noen undersystemer for minneadministrasjon er allerede overført til lønnetre, noe som har hatt en positiv effekt på ytelsen deres. I fremtiden kan lønnetre brukes til å implementere rekkeviddelåsing.
    • Muligheten til å lage "destruktive" BPF-programmer spesielt designet for å starte en nødavstenging via crash_kexec()-kallet er lagt til BPF-delsystemet. Slike BPF-programmer kan være nødvendige for feilsøkingsformål for å starte opprettelsen av en krasjdump på et bestemt tidspunkt. For å få tilgang til destruktive operasjoner når du laster et BPF-program, må du spesifisere flagget BPF_F_DESTRUCTIVE, aktivere sysctl kernel.destructive_bpf_enabled og ha CAP_SYS_BOOT-rettigheter.
    • For BPF-programmer er det mulig å telle opp cgroup-elementer, samt å telle opp ressurser (filer, vma, prosesser, etc.) for en spesifikk tråd eller oppgave. En ny karttype er implementert for å lage brukerringbuffere.
    • Lagt til en spesiell oppfordring for minneallokering i BPF-programmer (minneallokator), som gir sikrere minneallokering i BPF-sammenheng enn standard kmalloc().
    • Den første delen av endringene er integrert, og gir muligheten til å lage drivere for inngangsenheter med et HID-grensesnitt (Human Interface Device), implementert i form av BPF-programmer.
    • Kjernen har fullstendig fjernet koden for å støtte det kjørbare filformatet a.out, som ble avviklet i versjon 5.1 og har vært deaktivert for store arkitekturer siden versjon 5.18 og 5.19. A.out-formatet har lenge vært avviklet på Linux-systemer, og generering av a.out-filer støttes ikke av moderne verktøy i standard Linux-konfigurasjoner. Lasteren for a.out-filer kan implementeres utelukkende i brukerområdet.
    • For systemer basert på LoongArch-instruksjonssett-arkitekturen brukt i Loongson 3 5000-prosessorene og implementerer den nye RISC ISA, lik MIPS og RISC-V, er støtte for ytelsesmålingshendelser (perf-hendelser), kexec, kdump og BPF JIT-kompilering implementert .
    • Det asynkrone I/O-grensesnittet io_uring tilbyr en ny modus, IORING_SETUP_DEFER_TASKRUN, som gjør at ringbufferrelatert arbeid midlertidig kan utsettes til en applikasjonsforespørsel sendes, som kan brukes til batcharbeid og unngå forsinkelsesproblemer på grunn av forhåndsavtale. feil tid.
    • Prosesser i brukerrom gis muligheten til å initiere konvertering av en rekke normale minnesider til et sett med store minnesider (Transparent Huge-Pages).
    • La til implementering av /dev/userfaultfd-enheten, som gir tilgang til funksjonaliteten til userfaultfd()-systemkallet ved å bruke tilgangsrettigheter i FS. Userfaultfd-funksjonaliteten lar deg lage behandlere for tilgang til ikke-allokerte minnesider (sidefeil) i brukerområdet.
    • Kravene til versjonen av GNU Make-verktøyet har blitt økt - minst versjon 3.82 kreves nå for å bygge kjernen.
  • Diskundersystem, I/O og filsystemer
    • Betydelige ytelsesoptimaliseringer er gjort til Btrfs-filsystemet; blant annet er ytelsen til FIEMAP ioctl-anropet økt i størrelsesordener. Lagt til støtte for asynkron bufret skriving for applikasjoner som bruker io_uring. Lagt til støtte for filer beskyttet med fs-verity til "send"-operasjonen.
    • Ext4-filsystemet har lagt til ytelsesoptimaliseringer knyttet til journalvedlikehold og skrivebeskyttet drift.
    • EROFS-filsystemet (Enhanced Read-Only File System), designet for bruk på partisjoner som er tilgjengelige i skrivebeskyttet modus, implementerer muligheten til å dele data duplisert i forskjellige filsystemer.
    • Statx()-systemkallet er lagt til for å vise informasjon om hvorvidt direkte I/O kan brukes på en fil.
    • Støtte for å lage midlertidige filer med O_TMPFILE-flagget er lagt til undersystemet FUSE (Filesystems in User Space).
  • Virtualisering og sikkerhet
    • Implementeringen av CFI-beskyttelsesmekanismen (Control Flow Integrity) har blitt erstattet, og har lagt til kontroller før hvert indirekte anrop av en funksjon for å oppdage noen former for udefinert atferd som potensielt kan føre til brudd på den normale utførelsesordre (kontrollflyt) som en resultat av bruk av utnyttelser som endrer pekere til funksjoner som er lagret i minnet. Standardimplementeringen av CFI fra LLVM-prosjektet er erstattet av et alternativ som også er basert på bruk av Clang, men spesielt tilpasset for å beskytte lavnivåundersystemer og operativsystemkjerner. I LLVM vil en ny implementering tilbys i Clang 16-utgivelsen og vil bli aktivert med alternativet "-fsanitize=kcfi". Den viktigste forskjellen med den nye implementeringen er at den ikke er knyttet til link-time optimizations (LTO) og ikke resulterer i at funksjonspekere erstattes av linker i hoppetabellen.
    • For LSM-moduler (Linux Security Module) er det mulig å lage behandlere som fanger opp operasjoner for å lage navneområder.
    • Det finnes verktøy for å bekrefte PKCS#7 digitale signaturer i BPF-programmer.
    • Muligheten til å åpne i ikke-blokkerende modus (O_NONBLOCK), som ved et uhell ble fjernet i kjernen 5.6, har blitt returnert til /dev/random.
    • På systemer med x86-arkitektur er det lagt til en advarsel i tilfelle kartlegging av minnesider av kjernedelsystemer som samtidig tillater kjøring og skriving. I fremtiden vurderes muligheten for å fullstendig forby slik minnekartlegging.
    • Lagt til KMSAN (Kernel Memory Sanitizer) feilsøkingsmekanisme for å oppdage uinitialisert minnebruk i kjernen, samt uinitialiserte minnelekkasjer mellom brukerplass og enheter.
    • Det er gjort forbedringer av den kryptosikre CRNG pseudo-tilfeldige tallgeneratoren som brukes i det tilfeldige anropet. Endringene ble utarbeidet av Jason A. Donenfeld, forfatter av VPN WireGuard, og har som mål å forbedre sikkerheten for pseudo-tilfeldig heltallsekstraksjon.
  • Nettverksundersystem
    • TCP-stakken gir muligheten (deaktivert som standard) til å bruke socket-hash-tabeller separat for hvert navneområde, noe som forbedrer ytelsen på systemer med et stort antall navneområder.
    • Fjernet kode for å støtte den eldre DECnet-protokollen. Brukerplass API-stubber blir stående på plass for å tillate kompilering av applikasjoner som bruker DECnet, men disse applikasjonene vil ikke kunne koble til nettverket.
    • Netlink-protokollen er dokumentert.
  • Оборудование
    • Amdgpu-driveren har lagt til støtte for DSC (Display Stream Compression) videresending for tapsfri datakomprimering ved utveksling av informasjon med skjermer som støtter svært høye oppløsninger. Arbeidet fortsetter med å gi støtte for plattformene AMD RDNA3 (RX 7000) og CDNA (Instinct). Lagt til støtte for DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x og GMC 11.x IP-komponenter. Amdkfd-driveren (for diskrete AMD GPUer som Polaris) gir støtte for GFX 11.0.3.
    • i915 (Intel)-driveren inkluderer støtte for Meteor Lake GPU. Meteor Lake og nyere GPU-er støtter DP 2.0 (DisplayPort)-grensesnitt. Lagt til identifikatorer for skjermkort basert på Alder Lake S mikroarkitektur.
    • Lagt til støtte for lydundersystemer implementert i Apple Silicon-, Intel SkyLake- og Intel KabyLake-prosessorer. CS35L41 HDA-lyddriveren støtter hvilemodus. Lagt til ASoC (ALSA System on Chip)-støtte for integrerte lydbrikker Apple Silicon, AMD Rembrant DSP-er, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake og Kaby Lake, Mediatek MT8186, NXP i.MX8ULP DSP-er, Qualcomm SC8280XP, SM SM8250 og Texas Instruments SRC8450
    • Lagt til støtte for LCD-paneler Samsung LTL101AL01, B120XAN01.0, R140NWF5 RH, Densitron DMT028VGHMCMI-1A TFT, AUO B133UAN02.1, IVO M133NW4J-R3, Innolux N120XAKOE-EA1, B116ACA-EA-EA01.6. -N116, INX N21BCA- EA116 , INX N2BCN-EA116, Multi-Inno Technology MI1FT-0800.
    • Lagt til støtte for AHCI SATA-kontrollere brukt i Baikal-T1 SoC.
    • Lagt til støtte for Bluetooth-brikker MediaTek MT7921, Intel Magnetor (CNVi, Integrated Connectivity), Realtek RTL8852C, RTW8852AE og RTL8761BUV (Edimax BT-8500).
    • ath11k-driveren for Qualcomm trådløse moduler har lagt til støtte for spektralskanning i 160 MHz-området, implementert flertråds NAPI og forbedret støtte for Qualcomm WCN6750 Wi-Fi-brikker.
    • Lagt til drivere for PinePhone-tastatur, InterTouch-berøringsplater (ThinkPad P1 G3), X-Box Adaptive Controller, PhoenixRC Flight Controller, VRC-2 Car Controller, DualSense Edge Controller, IBM Operation Panel, XBOX One Elite-fjernkontroller, nettbrett XP-PEN Deco Pro S og Intuos Pro Small (PTH-460).
    • Lagt til driver for Aspeed HACE (Hash and Crypto Engine) kryptografiske akseleratorer.
    • Lagt til støtte for integrerte Thunderbolt/USB4 Intel Meteor Lake-kontrollere.
    • Lagt til støtte for Sony Xperia 1 IV, Samsung Galaxy E5, E7 og Grand Max, Pine64 Pinephone Pro-smarttelefoner.
    • Lagt til støtte for ARM SoC og kort: AMD DaytonaX, Mediatek MT8186, Rockchips RK3399 og RK3566, TI AM62A, NXP i.MX8DXL, Renesas R-Car H3Ne-1.7G, Qualcomm IPQ8064-v2.0, IPQ8062, IPQ 8065, IPQ BL i.MX8MM OSM-S, MT8195 (Acer Tomato), Radxa ROCK 4C+, NanoPi R4S Enterprise Edition, JetHome JetHub D1p. Oppdaterte drivere for SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom og NXP.

Samtidig dannet Latin American Free Software Foundation en versjon av den helt gratis kjernen 6.1 - Linux-libre 6.1-gnu, renset for elementer av fastvare og drivere som inneholder ikke-frie komponenter eller kodeseksjoner, hvis omfang er begrenset av produsenten. Den nye utgivelsen renser den nye rtw8852b-driveren og DTS-filene for ulike Qualcomm og MediaTek SoCs med prosessorer basert på AArch64-arkitekturen. Oppdatert blob-rensekode i drivere og undersystemer amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. Rengjøring av utdaterte drivere tm6000 TV-kort, cpia2 v4l, sp8870, av7110 er rettet.

Kilde: opennet.ru

Legg til en kommentar