Etter to måneder med utvikling presenterte Linus Torvalds utgivelsen av Linux-kjerne 6.17. Blant de mest bemerkelsesverdige endringene er: økt ytelse av Btrfs, systemanropene file_getattr() og file_setattr(), samordning av enspråkede og flerpråkede konfigurasjoner i oppgaveplanleggeren, DAMON_STAT-modulen med statistikk for minnetilgang, støtte for Live-patching på ARM64-systemer, sending av core-dumper via AF_UNIX-socket, begrensning av SCHED_EXT gjennom cgroup, forenklet oppsett av beskyttelse mot sårbarheter i CPU, bygging med Clang med initialisering av variabler på stakken, beskyttelse mot endringer av /proc, utvidelse av RV (Runtime Verification)-undersystemet, begrensning av AF_UNIX-sockets gjennom AppArmor, samt TCP DualPI2-overbelastningskontrollalgoritmen.
Den nye versjonen inkluderer 14334 feilrettinger fra 2118 utviklere, patch-størrelsen er 46 MB (endringene berørte 12841 filer, 646654 linjer med kode ble lagt til og 398782 linjer ble fjernet). I den forrige utgivelsen var det 15924 feilrettinger fra 2145 utviklere, patch-størrelsen var 50 MB. Omtrent 43 % av alle endringene i 6.17 er relatert til enhetsdrivere, omtrent 12 % av endringene angår oppdatering av arkitekturspesifikk kode, 14 % er relatert til nettverksstakken, 4 % til filsystemene og 3 % til interne kjerneundersystemer.
Hovednyhetene i kjerne 6.17 (1, 2, 3):
- Disk subsystem, I/O og filsystemer
- I Btrfs er eksperimentell støtte for store folier av minnesider (large folios) lagt til, noe som reduserer overhead og øker ytelsen til en rekke operasjoner. Cache-lagring av forespørslene til bitmapene av tilgjengelig plass er implementert, noe som har økt ytelsen ved oppretting av tomme filer med 20 %. Forhåndslesing er forbedret i systemer som bruker datakomprimering. Nøklene er plassert tettere i XArray-strukturen, noe som øker kompakt lagring av noder i extent-treet og reduserer antall terminalnoder med 50-70 %. Ytterligere innstillinger for bruk av komprimering i defragmenterte extenter er gitt.
- I FS ext4 er det lagt til støtte for bufferert I/O med flagget RWF_DONTCACHE, der data blir fjernet fra sidecache umiddelbart etter at operasjonen er fullført.
- I FS EROFS er det implementert støtte for komprimering av metadata.
- NFS-serveren kan nå delegere skriveoperasjoner til klienter som åpner filer i skrivebeskyttet modus.
- I systemkallet fallocate() er det lagt til en flagg FALLOC_FL_WRITE_ZEROES, som gjør det mulig å fylle det angitte området i filen med nuller, ved å bruke kommanden WRITE_ZERO som støttes av enkelte SSD-er, og som utfører nullstilling uten input/output-operasjoner. Dette alternativet er for tiden tilgjengelig kun i ext4 filsystemet.
- Systemkallene file_getattr() og file_setattr() er lagt til for å manipulere attributtene til inode for den angitte filen.
- Driveren "pktcdvd" for arbeid med optiske medier i pakket modus er fjernet, da den ble merket som utdatert i 2016.
- Bcachefs-filsystemet i Linux-kjernen er overført til en ekstern vedlikeholdsmodus, som innebærer at endringer for Bcachefs ikke lenger vil bli akseptert i den primære kjernen samtidig som dette filsystemet skal beholdes i kjernens kodebase. Utviklingen av Bcachefs vil skje utenfor kodebasen til kjernen inntil Kent Overstreet faktisk kan bevise muligheten for riktig samarbeid med andre kjerneløpere og evnen til å følge etablerte utviklingsregler.
- Minne og systemtjenester
- Støtten for enkeltprosessor konfigurasjoner er fjernet fra oppgaveplanleggeren. På systemer med én prosessor bør det nå brukes kjerner bygget for flerprosessor systemer (SMP). Koden for enkelt- og flerprosessor systemer er forent og frigjort fra unødvendig tilknytning til kjernens parameter CONFIG_SMP.
- Kjermodulen DAMON_STAT (Data Access Monitoring Results Stat) er lagt til, som gjør det mulig å overvåke tilgangen til RAM ved hjelp av DAMON (Data Access MONitor) subsystemet. Modulen gir statistikk om inaktivitet (memory_idle_ms_percentiles) og estimert minnebåndbredde (estimated_memory_bandwidth).
- På ARM64-arkitekturer er støtten for Live-patcher realisert, som gjør det mulig å anvende rettelser på Linux-kjernen mens systemet kjører, uten omstart eller stopp.
- Den minimalistiske C-biblioteket nolibc, som følger med kildekodene til Linux-kjernen og leverer et grensesnitt til grunnleggende systemkall, har fått støtte for SuperH, x32, MIPS n32 og MIPS n34 arkitekturene.
- Muligheten for å sende innholdet fra core-dumper via socket AF_UNIX er utvidet, noe som gjør det mulig å lage sikrere core-dump behandlere i brukerrummet, uavhengig av kjernens privilegerte prosessanrop. Den nye versjonen har lagt til en protokoll for opprettelse. servere, i stand til å håndtere behandling av kjerne dump på nivå med individuelle oppgaver. For eksempel kan enkelte prosesser ignorere kjerndumper, mens andre kan sende dem via socket. En prototypisk server for håndtering av kjerndumper er spesielt forberedt.
- En ny kommandolinjealternativ for kjernen «crashkernel=size,cma» er lagt til for å reservere minne via CMA (Contiguous Memory Allocator) for lagring av kjernedump.
- Mulighetene til mekanismen pidfd er utvidet, slik at identifikatorer knyttet til spesifikke prosesser, i motsetning til pid, ikke kan tildeles på nytt. Det er lagt til mulighet for å knytte utvidede attributter fra brukerrommet til pidfd. Åpning av filbeskrivere for pidfd er tillatt gjennom funksjonen open_by_handle_at() uten bånd til filsystemet. Intern informasjon opprettet av kjernen sammen med pidfd er nå knyttet til prosessen, og ikke pidfd, og beholdes mellom gjentatte åpninger av den samme prosessen.
- I BPF-subsystemet er funksjonen bpf_cgroup_read_xattr() lagt til for å lese utvidede filattributter. Mulighet for å bruke standardstrengoperasjoner i BPF-programmer, som bpf_strcmp, bpf_strnchr, bpf_strchrnul, bpf_strlen og bpf_strspn, som fungerer i skrivebeskyttet modus, er tilbudt. Mulighet for å bruke standardstrømmer stdout og stderr for interaksjon med komponenter i brukerrommet er lagt til. For systemer basert på LoongArch-arkitektur er det implementert mulighet for dynamisk kodeendring, mekanismen «BPF trampoline» (reduserer overhead ved å overføre kall mellom kjernen og BPF-programmer) og kjøring av programmer som bruker struct_ops for å lage kjernekontrollfunksjoner via BPF.
- I tidssystemet er det lagt til støtte for hjelpeklokker (auxiliary), som ikke er knyttet til vanlige systemklokker og går med sitt eget tempo (tidligere gikk alle klokker med samme tempo og skilte seg bare med forskyvning).
- Innledende støtte for proxy-eksekvering (Proxy Execution) er lagt til for å mildne inversjonsprioritetsproblemer. Proxy-eksekvering lar en oppgave som venter på å frigjøre en lås, overføre sin utførelseskontekst til oppgaven som holder låsen, for å akselerere frigjøringen av den låsen.
- Endringen fra Rust-for-Linux-grenen fortsetter, knyttet til bruken av Rust som andre programmeringsspråk for utvikling av drivere og kjernemoduler (Rust-støtte er ikke aktivert som standard og fører ikke til at Rust blir en obligatorisk byggeavhengighet for kjernen). Abstraksjoner for styring av spennings- og strømregulatorer, firmwareegenskaper, I/O-ressurser og minne for inn- og utdata er lagt til. Makroen «warn_on!()» er implementert. UserPtr-typen for pekere i brukerrommet er lagt til. Funksjonaliteten til moduler for workqueue, uaccess, dma, time og list er utvidet. Modulen 'bits' med funksjonene 'bit' og 'genmask' er lagt til.
- Koden for beregning av CRC-kontrollsummer er redesignet, og nye kall for generering av SHA-1- og SHA-2-hashverdier er lagt til. Arkitekturspesifikke optimaliseringer er lagt til. ytelsen til crc32c()-funksjonen er forbedret på nye x86_64-CPU-er som støtter VPCLMULQDQ-utvidelsen (Vector Carry-Less Multiplication of Quadwords).
- Støtte for swapping-overskriving og migrering av store minnesider (transparent huge page) er implementert for S390-systemer.
- Muligheten til å konfigurere aggressiviteten ved frigjøring av minnesider (proactive-reclaim) ved knapphet, knyttet til separate NUMA-noder, er lagt til, noe som muliggjør tildeling av NUMA-noder der det vil bli brukt en mer aktiv minnefrigjøring. For eksempel, "echo '512M swappiness=10' > /sys/devices/system/node/node1/reclaim".
- I SCHED_EXT-mekanismen, som tillater bruk av BPF til å lage CPU-planleggere, er muligheten for å administrere båndbredde via cgroup lagt til. For eksempel kan parameteren cpu.max brukes til å begrense CPU-belastningen.
- Den automatiske montering av den virtuelle filsystemet tracefs i katalogen /sys/kernel/debug/tracing er erklært foreldet, og det anbefales å bruke /sys/kernel/tracing i stedet.
- Virtualisering og sikkerhet
- Muligheten for å aktivere beskyttelse mot sårbarheter i CPU-en ved valg av blokkerte angrepsvektorer i stedet for å spesifisere konkrete sårbarheter i innstillingene. Blokkeringsmetoder velges basert på typen isolasjonsbrudd: mellom bruker og kjerna (user-kernel), mellom bruker og en annen bruker (user-user), mellom gjestesystemet og vertsmiljøet (guest-host), mellom ulike gjestesystemer (guest-guest), og mellom ulike tråder (cross-thread). Den foreslåtte tilnærmingen gjør det mulig å aktivere beskyttelse kun mot de klassene av sårbarheter som faktisk angår brukeren. For eksempel kan eiere av skybaserte miljøer aktivere gjest-vert og gjest-gjest-moduser, hvoretter metoder for beskyttelse mot sårbarhetene BHI, GD, L1TF, MDS, MMIO, Retbleed, RFDS, Spectre_v2, SRBDS, SRSO og TAA aktiveres.
- Støtte for kompilatoren Clang med en stakkdybdeoppfølgingsmodus er lagt til, der alle variabler lagret på stakken initialiseres. Initialisering skjer for å forhindre lekkasje av informasjon fra kjernen gjennom uinitialiserte variabler, som kan inneholde rester av tidligere lagrede stakkdata. Før dette ble en lignende funksjonalitet støttet ved bruk av GCC-pluginen STACKLEAK.
- Beskyttelse mot angrep som omgår filsystemet /proc gjennom montering i 'bind'-modus er lagt til. Inode-nummeret til roten av /proc er nå fast (PROCFS_ROOT_INO) og kan verifiseres av prosessen i brukerrummet.
- I RV (Runtime Verification)-systemet, som er designet for å verifisere korrekt drift av høy-pålitelighetssystemer, er komponenten rtapp (Real-time application monitor) lagt til for å overvåke typiske problemer i applikasjoner som kjører i sanntid, samt komponentene rp, sssw og opid for testing av oppgaveplanleggeren. Muligheten til å lage overvåkingskomponenter som bruker lineær temporær logikk for å definere atferdsmodellen i stedet for en deterministisk automat er implementert. Verifikasjonen skjer under kjøring ved å knytte håndterere til sporingspunkter som sammenligner faktisk utførelse med en forhåndsdefinert referansemodell som definerer forventet systematferd.
- Støtte for tilgangskontroll til AF_UNIX-sokler er lagt til i AppArmor-systemet.
- I KVM-hypervisoren på ARM-systemer er støtte for GICv5-interruptkontrolleren implementert.
- Den innstilling CONFIG_KVM_IOAPIC er lagt til, noe som muliggjør deaktivering av KVM-støtte for emulering av APIC, PIC og PIT.
- Beskyttelse mot sårbarheten VMSCAPE er lagt til.
- Ioctl-kommandoen FS_IOC_GETLBMD_CAP er lagt til for å hente informasjon fra brukerrommet om anvendelse av integritetsbeskyttelse på filen.
- Grensesnittet /sys/fs/selinux/user er erklært foreldet, og tilgang til det vil nå medføre en forsinkelse på fem sekunder og en advarsel i loggen.
- Nettverks subsystem
- Implementeringen av teknologien PSE (Power Sourcing Equipment), som brukes til å levere strøm via Ethernet til enheter som IP-kameraer og trådløse tilgangspunkter, har fått støtte for justerbare strategier for strømbudsjettering (total tilgjengelig effekt). Slike strategier kan bestemme hvilke porter som skal slås av først for å unngå overbelastning.
- Implementeringen av MCTP (Management Component Transport Protocol) har fått støtte for ruting av pakker til eksterne noder via mellomliggende noder (gateway-routing). For eksempel gjør følgende regler det mulig å rute pakker til noden med ID 10 (Endpoint ID 10) gjennom enhet mctpi2c0, ved å bruke adressen 0x1d som er direkte tilknyttet noden med ID 9. mctp route add 9 via mctpi2c0 mctp neigh add 9 dev mctpi2c0 lladdr 0x1d mctp route add 10 gw 9
- For UNIX-sokker (AF_UNIX) er alternativet SO_INC implementert, og for VSOCK-adressefamilien er alternativet SIOCINQ. De implementerte alternativene ligner på TCP_INQ-alternativet for TCP og tillater, via en kontrollmelding, å få informasjon om antall byter som er tilgjengelige for lesing i sokkelen.
- For TCP er det innført strengt overholdelse av den annonserte størrelsen på mottaksvinduet, som definerer størrelsen på data som kan sendes før ACK-bekreftelsen fra den andre siden. Tidligere fortsatte kjernen å behandle data som kom inn over det annonserte mottaksvinduet, men dette vil ikke lenger være tilfelle.
- I MPTCP (Multipath TCP) er det lagt til mulighet for å bruke sokkealternativet TCP_MAXSEG for å begrense den maksimale størrelsen på sendte segmenter. MPTCP er en utvidelse av TCP-protokollen for å organisere leveringen av pakker samtidig via flere ruter gjennom forskjellige nettverksgrensesnitt som er knyttet til forskjellige IP-adresser.
- Støtte for TCP overload control algorithm DualPI2 (RFC 9332) er lagt til, som tillater bruk av skalerbare overbelastningskontrollere for trafikk med høye krav til kvaliteten på tjenesten (for eksempel TCP-Prague og DCTCP), uten å forårsake redusering av ytelsen for klassisk trafikk, der slike overbelastningskontrollere som Reno og Cubic benyttes.
- Sysctl «force_forwarding» er lagt til, som lar deg aktivere omdirigering av trafikk på valgte nettverksgrensesnitt med IPv6.
- Støtte for SACK (Selective Acknowledgment) pakke-tapsdeteksjonsalgoritmen, beskrevet i RFC 6675, er fjernet. Denne algoritmen ble erklært foreldet i 2018. Det anbefales å bruke RACK-TLP algoritmen for å oppdage TCP-pakke tap.
- Utstyr
- Arbeidet med drm-driveren (Direct Rendering Manager) Xe for GPU basert på Intel Xe-arkitekturen, som brukes i Intel Arc grafikkort og integrert grafikk fra Tiger Lake-prosessorer, har fortsatt. Den nye versjonen inkluderer støtte for Panthor Lake mikroarkitektur som standard og lagt til støtte for WildCat Lake mikroarkitektur.
- I AMDGPU-driveren for GPU GFX9.x er støtten for Cleaner Shader mekanismen implementert, som sørger for rydding av GPU-minne før det gjenbrukes for å unngå datalekkasjer fra tidligere prosesser. Støtten for dvalemodus er forbedret. Muligheten for å gå inn i sleep-modus er lagt til i miljøer med AMD SR-IOV. Belysningskontrollen er forbedret.
- I i915-driveren er støtten for drm_panic mekanismen implementert, som viser en lignende «blå skjerm for døden» ved feil. Støtte for en skjermkontroller brukt i Wildcat Lake chipene er lagt til.
- Integrasjonen av Nova-drivere for NVIDIA GPU-er utstyrt med GSP-firmware, brukt siden NVIDIA GeForce RTX 2000-serien basert på Turing mikroarkitektur, har fortsatt. Driveren er skrevet i Rust. Den nye versjonen inkluderer et abstraksjonsnivå for DMA-operasjoner, en VBIOS-parser er implementert, koden for å konfigurere rammebufferen er lagt til, og støtte for akselerert oppstart i Falcon-modus er levert.
- I adreno-driveren er støtten for Qualcomm Adreno GPU x1-45 og x1-85 lagt til.
- I msm-driveren er støtten for Adreno GPU SM8750 og videominne-mapping (VM_BIND) lagt til.
- I panfrost-driveren er støtten for Mali GPU-er brukt i Mediatek mt8370 SoC lagt til.
- GPU-støtte er lagt til i lima-driveren, som brukes i Rockchip RK3528 SoC.
- En mtd-driver (Memory Technology Devices) er lagt til for tilgang til NVM-minne integrert i Intel GPU.
- Støtte for lydsystemene ASoC IMX WM8524, AMD ACP7.2, SoundWire ACP 7.1, Fairphone 4 & 5, Qualcomm QCS8275, Framework Laptop 13 (AMD Ryzen AI 300), CS35L41 HDA (som brukes i ASUS-bærbare datamaskiner), Richtek RTQ9124, TI TAS5753, HP EliteBook x360 830 G6, EliteBook 830 G6, LG 16Z90R-A og HP 15-fc000 er lagt til. Koden for HD-audio er omorganisert.
- Støtte for ARM-plattformer, SoCs og enheter er lagt til: NVIDIA Tegra264, Marvell PXA1908 (den første 64-biters brikken fra Marvell for smarttelefoner), CIX P1, Axiado AX3000, Sophgo SG2000 (kombinerer ARM- og RISC-V-kjerner), Mediatek mt6572, exynos2200 (brukes i Samsung Galaxy S22), Renesas R-Car V4M-7, TI am62d2 og Sophgo sg2042, bærbare datamaskiner basert på Mediatek mt8186 og Qualcomm Snapdragon X1, samt smarttelefoner og nettbrett basert på SoC mt6572, tegra30 og msm8976.
Samtidig har den latinamerikanske Frie Programvare-fondet utviklet en versjon av det helt frie kjerne 6.17 — Linux-libre 6.17-gnu, renset for elementer fra fastvare og drivere som inneholder ikke-frie komponenter eller kodeområder begrenset av produsenten. I utgivelsen 6.17 er koden for rensing av blobber i driverne amdgpu, prueth, iwlwifi, btusb, pci mhi host, adreno a6xx, nova-core og Intel AVS oppdatert. Renserne av blobber i dts-filer (device tree) for ARM-brikker og Intel IPU7 er oppdatert. Lasting av blobber i nye pci hda-drivere er deaktivert. Rensing av blobber i QLogic infiniband-driveren, som er fjernet fra kjernen, er stoppet.
Kilde: opennet.ru
