Efter to måneders udvikling præsenterede Linus Torvalds udgivelsen af Linux-kerne 6.17. Blandt de mest bemærkelsesværdige ændringer er: forbedret ydeevne for Btrfs, systemopkald file_getattr() og file_setattr(), ensretning af enkelt- og multiprocessorkonfigurationer i jobplanlæggeren, modulet DAMON_STAT med statistik om hukommelsesadgang, understøttelse af Live-patching på ARM64-systemer, afsendelse af core-dumps via socket AF_UNIX, limitere SCHED_EXT gennem cgroup, forenklet opsætning af beskyttelse mod sårbarheder i CPU'en, bygning i Clang med initialisering af variabler på stakken, beskyttelse mod manipulation af /proc, udvidelse af RV (Runtime Verification) subsystemet, begrænsning af AF_UNIX sockets via AppArmor, og TCP overload kontrol algoritme DualPI2.
Den nye version inkluderer 14334 rettelser fra 2118 udviklere, patchstørrelsen er 46 MB (ændringerne berørte 12841 filer, 646654 linjer kode blev tilføjet, 398782 linjer fjernet). I den foregående udgave var der 15924 rettelser fra 2145 udviklere, patchstørrelsen var 50 MB. Omkring 43% af alle de præsenterede ændringer i 6.17 er relateret til enhedsdrivere, cirka 12% vedrører opdatering af arkitekturspecifik kode, 14% er relateret til netværksstakken, 4% til filsystemer og 3% til interne kernesubsystemer.
De vigtigste nyheder i kerne 6.17 (1, 2, 3):
- DiskSubsystem, input/output og filsystemer
- I Btrfs er der tilføjet eksperimentel understøttelse af store hukommelsessider (large folios), som reducerer overhead og forbedrer ydeevnen for en række operationer. Implementeret caching af anmodninger til bitmap-kort for gratis plads, hvilket har øget ydeevnen ved oprettelse af tomme filer med 20%. Forbedret præ-fetching i systemer, der anvender datakomprimering. Sørget for en mere kompakt placering af nøgler i XArray-strukturen, hvilket har øget kompaktheden i lagringen af extenttræknuder og reduceret antallet af endenoder med 50-70%. Yderligere indstillinger for brug af komprimering i de-fra-gmenterede eksterne strukturer er tilvejebragt.
- I ext4-filsystemet er der tilføjet understøttelse af bufferet input/output med flaget RWF_DONTCACHE, hvormed data fjernes fra siden cache straks efter operationens afslutning.
- I EROFS-filsystemet er der implementeret understøttelse af metadata-komprimering.
- NFS-serveren kan nu delegere skriveoperationer til klienter, der åbner filer i kun-skrive-tilstand.
- Der systemopkald fallocate() er blevet tilføjet en flag FALLOC_FL_WRITE_ZEROES, der muliggør udfyldning af et angivet interval i filen med nuller ved hjælp af WRITE_ZERO-kommandoen, som findes på visse SSD-lagringsenheder og udfører nulstilling uden I/O-operationer. Denne mulighed er kun tilgængelig i ext4-filsystemet.
- Der er blevet tilføjet systemopkald file_getattr() og file_setattr() til manipulation af inode-attributter for den angivne fil.
- Driveren 'pktcdvd' til arbejde med optiske medier i pakkemodus er blevet fjernet, da den blev mærket som forældet i 2016.
- Bcachefs-filsystemet i Linux-kernen er blevet flyttet til en ekstern vedligeholdelsestilstand, hvilket betyder, at ændringer til Bcachefs ikke længere vil blive accepteret i den primære kerne, mens dette filsystem bevares i kernelens kodebase. Udviklingen af Bcachefs vil blive udført uden for kernelens kodebase, indtil Kent Overstreet faktisk kan bevise muligheden for korrekt samarbejde med andre kerneludviklere og evnen til at følge de etablerede udviklingsregler.
- Hukommelse og systemtjenester
- Understøttelse af enkelprocessor-konfigurationer er blevet fjernet fra planlæggeren. På systemer med én processor bør der nu anvendes kerner, der er samlet til multiprocessorsystemer (SMP). Koden for enkelprocessor- og multiprocessorsystemer er blevet ensartet og befriet for unødvendige bindinger til kernelparameteren CONFIG_SMP.
- Der er tilføjet en kernelmodul DAMON_STAT (Data Access Monitoring Results Stat), der muliggør overvågning af adgang til RAM ved hjælp af DAMON (Data Access MONitor) subsystemet. Modulet giver statistik om inaktivitet (memory_idle_ms_percentiles) og den forventede hukommelsesbåndbredde (estimated_memory_bandwidth).
- På systemer med ARM64-arkitektur er der implementeret støtte til Live-patches, der muliggør anvendelse af rettelser til Linux-kernen i realtid, uden genstart og stop af systemet.
- I det minimalistiske C-bibliotek nolibc, der leveres med kildeteksterne til Linux-kernen og giver en wrapper over basis systemopkald, er der tilføjet støtte til arkitekturerne SuperH, x32, MIPS n32 og MIPS n34.
- Muligheden for at sende indholdet af core-dumps via AF_UNIX-socket er blevet udvidet, hvilket muliggør oprettelse af mere sikre core-dump-behandlere i brugerens rum, som ikke er bundet til at kalde privilegerede processer fra kernen. Den nye version inkluderer en protokol til oprettelse. servere, der kan administrere behandling af core-dumps på niveauet for individuelle opgaver. For eksempel kan der ignoreres core-dumps for nogle processer, mens de for andre sendes via socket. En prototype af serveren til administration af core-dumps er blevet forberedt særskilt.
- En ny kommando til kerneboot-parameteren «crashkernel=size,cma» er blevet tilføjet for at reservere hukommelse gennem CMA (Contiguous Memory Allocator) til opbevaring af kernel crash-dump.
- Funktionaliteten i pidfd-mekanismen er blevet udvidet, hvilket muliggør brug af identifikatorer tilknyttet specifikke processer, der ikke kan tildeles igen i modsætning til pid. Der er tilføjet mulighed for at knytte udvidede attributter fra brugerrum til pidfd. Det er tilladt at åbne filbeskriver for pidfd gennem funktionen open_by_handle_at() uden binding til filsystemet. Den interne information, der blev oprettet af kernen sammen med pidfd, knyttes nu til processen i stedet for pidfd og opbevares mellem gentagne åbninger af den samme proces.
- I BPF-subsystemet er der tilføjet en funktion bpf_cgroup_read_xattr() til læsning af udvidede filattributter. Der er givet mulighed for at anvende standard strengeoperationer i BPF-programmer, såsom bpf_strcmp, bpf_strnchr, bpf_strchrnul, bpf_strlen og bpf_strspn, der fungerer i kun-læsemodus. Muligheden for at bruge standardstrømme stdout og stderr til interaktion med komponenter i brugerrum er blevet tilføjet. For LoongArch-baserede systemer er BPF-funktionen til dynamisk kodeændring, mekanismen «BPF trampoline» (som reducerer overhead ved at overføre opkald mellem kernen og BPF-programmer) samt kørsel af programmer, der bruger struct_ops til at oprette håndteringsfunktioner for kernen gennem BPF, blevet implementeret.
- I tidsregistreringssystemet er der implementeret støtte til supplerende ure (auxiliary), som ikke er knyttet til de almindelige systemure og kører i deres eget tempo (tidligere kørte alle ure i samme tempo og adskilte kun med offset).
- Der er tilføjet indledende støtte til proxy-udførelse (Proxy Execution) for at afbøde prioritetsinversionsproblemer. Proxy-udførelse gør det muligt for en opgave, der venter på at frigive en lås, at overdrage sin kørsel til en opgave, der holder låsen, for at fremskynde frigivelsen af denne lås.
- Fortsættelse af overførslen af ændringer fra Rust-for-Linux-grenen, relateret til brugen af Rust som det andet sprog til udvikling af drivere og kernemoduler (Rust-support er ikke aktiveret som standard og medfører ikke, at Rust bliver en obligatorisk byggeafhængighed for kernen). Abstraktioner til håndtering af spændings- og strømregulatorer, firmwareegenskaber, input/output-ressourcer og input/output-hukommelse er blevet tilføjet. Makroen «warn_on!()» er implementeret. UserPtr-type til brugerområdets pegere er blevet tilføjet. Funktionaliteten af workqueue-, uaccess-, dma-, time- og list-moduler er blevet udvidet. Der er tilføjet et ‘bits’-modul med funktionerne ‘bit’ og ‘genmask’.
- Koden til beregning af CRC-sum er blevet omarbejdet, og nye opkald til generering af SHA-1 og SHA-2 hashes er blevet tilføjet. Arkitektur-specifikke optimeringer er blevet implementeret. Ydeevnen af funktionen crc32c() er blevet forbedret på nye x86_64 CPU'er, der understøtter VPCLMULQDQ-udvidelsen (Vector Carry-Less Multiplication of Quadwords).
- Der er implementeret understøttelse af udskiftning i swap-partitionen og migrering af store hukommelsessider (transparent huge page) for S390-systemer.
- Muligheden for at konfigurere aggressivitet ved frigivelse af hukommelsessider (proactive-reclaim) ved mangel på hukommelse i forhold til individuelle NUMA-noder er blevet tilføjet, hvilket gør det muligt at udpege NUMA-noder, hvor der vil blive anvendt en mere aktiv frigivelse af hukommelse. For eksempel, «echo «512M swappiness=10″ > /sys/devices/system/node/node1/reclaim».
- I SCHED_EXT-mekanismen, der muliggør brugen af BPF til at skabe CPU-planlæggere, er muligheden for at styre båndbredde gennem cgroup blevet tilføjet. For eksempel kan parameteren cpu.max bruges til at begrænse CPU-belastningen.
- Automatisk montering af den virtuelle filsystem tracefs i katalogen /sys/kernel/debug/tracing er blevet erklæret forældet; i stedet bør /sys/kernel/tracing anvendes.
- Virtualisering og sikkerhed
- Muligheden for at aktivere beskyttelse mod sårbarheder i CPU'en gennem valg af blokerede angrebsvektorer er blevet tilføjet. i stedet for at angive specifikke sårbarheder i indstillingerne. Blokeringsmetoder vælges afhængigt af typen af isolationsbrud: mellem bruger og kerne (user-kernel), mellem bruger og en anden bruger (user-user), mellem gæstesystemet og værtsmiljøet (guest-host), mellem forskellige gæstesystemer (guest-guest) og mellem forskellige tråde (cross-thread). Den foreslåede tilgang giver mulighed for kun at aktivere beskyttelse mod de sårbarhedsklasser, der faktisk bekymrer brugeren. For eksempel kan ejere af cloud-miljøer aktivere tilstandene guest-host og guest-guest, hvorefter beskyttelsesmetoder mod sårbarhederne BHI, GD, L1TF, MDS, MMIO, Retbleed, RFDS, Spectre_v2, SRBDS, SRSO og TAA aktiveres.
- Tilføjet support for at kompilere med Clang-compiler med aktivering af dybde-sporingsmetoden, hvor alle variabler gemt på stakken initialiseres. Initialiseringen udføres for at forhindre lækage af information fra kernen gennem ikke-initialiserede variabler, som kan indeholde rester af tidligere gemte data på stakken. Dette blev tidligere understøttet ved brug af GCC-pluginet STACKLEAK.
- Tilføjet beskyttelse mod angreb på filsystemet /proc ved at montere i "bind"-tilstand. Inode-nummeret for roden af /proc er nu fast (PROCFS_ROOT_INO) og kan verificeres af processen i brugerområdet.
- I RV (Runtime Verification) subsystemet, designet til at verificere korrektheden af højpålidelige systemer, er der tilføjet en monitoring-komponent rtapp (Real-time application monitor) til at overvåge typiske problemer i applikationer, der kører i realtid, samt komponenterne rp, sssw og opid til testning af opgavestyreren. Muligheden for at oprette overvågningskomponenter er implementeret ved hjælp af lineær tidslogik i stedet for en deterministisk automat til at bestemme adfærdsmønsteret. Verifikationen udføres under kørslen ved at knytte behandlere til trace-punkter, der sammenligner den faktiske udførelse med en foruddefineret reference-model, der definerer det forventede systemadfærd.
- AppArmor-systemet har fået tilføjet støtte til adgangskontrol af AF_UNIX-sockets.
- KVM-hypervisoren på ARM-systemer har fået implementeret support for GICv5 interrupt controller.
- Indstillingen CONFIG_KVM_IOAPIC er tilføjet, hvilket muliggør deaktivering af understøttelse af APIC, PIC og PIT-emulering i KVM.
- Beskyttelse mod sårbarheden VMSCAPE er tilføjet.
- Ioctl-kommandoen FS_IOC_GETLBMD_CAP er tilføjet for at få oplysninger om anvendelse af integritetsbeskyttelse for filer fra brugerrummet.
- Grænsefladen /sys/fs/selinux/user er blevet erklæret forældet, og når den tilgås, vil der nu være en forsinkelse på fem sekunder og advarsler logs.
- Netværkssubsystem
- Implementeringen af teknologien PSE (Power Sourcing Equipment), der anvendes til at levere strøm via Ethernet til enheder som IP-kameraer og trådløse adgangspunkt, har fået støtte til konfigurerbare strategier til estimering af energibudgettet (total tilgængelig strøm). Sådanne strategier gør det muligt at bestemme, hvilke porte der skal deaktiveres først for at forhindre overbelastning.
- Implementeringen af MCTP (Management Component Transport Protocol) har fået støtte til at rute pakker til eksterne noder gennem mellemnoder (gateway-routing). For eksempel tillader nedenstående regler at sende pakker til noden med identifikatoren 10 (Endpoint ID 10) gennem enheden mctpi2c0, ved at bruge adressen 0x1d, som er direkte tilsluttet noden med identifikator 9. mctp route add 9 via mctpi2c0 mctp neigh add 9 dev mctpi2c0 lladdr 0x1d mctp route add 10 gw 9
- For UNIX-sokler (AF_UNIX) er indstillingen SO_INC implementeret, mens for VSOCK-adressefamilien er indstillingen SIOCINQ implementeret. De implementerede indstillinger svarer til TCP_INQ-indstillingen for TCP og gør det muligt at få oplysninger om antallet af bytes, der er tilgængelige til læsning i soklen via en kontrolbesked.
- For TCP er der indført streng overholdelse af den annoncerede modtager-vinduesstørrelse, som bestemmer størrelsen af data, der må sendes, før der modtages en ACK-bekræftelse fra den anden side. Tidligere fortsatte kernen med at behandle data, der kom ind over det annoncerede modtager-vindue, men det vil nu stoppe med at gøre dette.
- I MPTCP (Multipath TCP) er der tilføjet mulighed for at bruge socket-indstillingen TCP_MAXSEG for at begrænse den maksimale størrelse af sendte segmenter. MPTCP er en udvidelse af TCP-protokollen, der tilrettelægger levering af pakker samtidig via flere ruter gennem forskellige netværksgrænseflader, der er knyttet til forskellige IP-adresser.
- Tilføjet understøttelse af TCP overbelastningskontrolalgoritmen DualPI2 (RFC 9332), som gør det muligt at bruge skalerbare overbelastningskontrollere til trafik med høje krav til kvaliteten af servicen (for eksempel TCP-Prague og DCTCP) uden at reducere ydeevnen for klassisk trafik, hvor sådanne overbelastningskontrollere som Reno og Cubic anvendes.
- Tilføjet sysctl "force_forwarding", som gør det muligt at aktivere trafikomdirigering på valgte netværksinterfaces med IPv6.
- Understøttelse af SACK (Selective Acknowledgment) algoritmen til pakke tab, beskrevet i RFC 6675, er blevet fjernet. Denne algoritme blev erklæret forældet i 2018. For at bestemme tab af TCP-pakker anbefales det at bruge RACK-TLP algoritmen.
- Udstyr
- Arbejdet med DRM-driveren (Direct Rendering Manager) Xe til GPU'er baseret på Intel Xe-arkitekturen, der anvendes i Intel Arc grafikkort og integreret grafik, startet med Tiger Lake processorerne, er fortsat. Den nye version inkluderer som standard understøttelse af chips baseret på Panthor Lake mikroarkitekturen og tilføjet understøttelse af WildCat Lake mikroarkitekturen.
- I AMDGPU-driveren for GPU GFX9.x er der implementeret understøttelse af Cleaner Shader mekanismen, som sikrer rensning af GPU-hukommelse før genbrug for at undgå datalækager fra et tidligere proces. Understøttelsen af standby-tilstand er forbedret. Muligheden for at gå i søvnstilstand i miljøer med AMD SR-IOV er tilføjet. Belysningsstyringen er forbedret.
- I i915-driveren er der tilføjet støtte for drm_panic mekanismen, som viser en lignende "blå skærm af død" ved fejl. Understøttelse af displaycontrolleren, der bruges i Wildcat Lake chipfamilien, er også tilføjet.
- Integration af Nova driverkomponenterne til NVIDIA GPU'er udstyret med GSP-firmware, anvendt fra NVIDIA GeForce RTX 2000 serien baseret på Turing mikroarkitekturen, er fortsat. Driveren er skrevet i Rust. Den nye version tilføjer et abstraheringslag tilDMA-operationer, implementerer en VBIOS-parser, tilføjer kode til konfiguration af framebufferen og sikrer understøttelse af hurtig opstart i Falcon-tilstand.
- Adreno-driveren har fået tilføjet understøttelse af Qualcomm Adreno x1-45 og x1-85 GPU'er.
- MSM-driveren har fået tilføjet understøttelse af Adreno SM8750 GPU og mapping af videohukommelse (VM_BIND).
- I panfrost-driveren er der tilføjet understøttelse af Mali GPU'er, der anvendes i Mediatek mt8370 SoC.
- Driveren lima har tilføjet support for GPU'er, der anvendes i SoC Rockchip RK3528.
- Der er tilføjet en mtd-driver (Memory Technology Devices) for at få adgang til NVM-hukommelse, der er integreret i Intel GPU'er.
- Support til ASoC lyssystemer er blevet tilføjet: IMX WM8524, AMD ACP7.2, SoundWire ACP 7.1, Fairphone 4 & 5, Qualcomm QCS8275, Framework Laptop 13 (AMD Ryzen AI 300), CS35L41 HDA (anvendes i ASUS bærbare), Richtek RTQ9124, TI TAS5753, HP EliteBook x360 830 G6, EliteBook 830 G6, LG 16Z90R-A, HP 15-fc000. Koden til HD-audio er blevet reorganiseret.
- Support til ARM-platforme, SoC'er og enheder er blevet tilføjet: NVIDIA Tegra264, Marvell PXA1908 (den første 64-bit chip fra Marvell til smartphones), CIX P1, Axiado AX3000, Sophgo SG2000 (kombinerer ARM- og RISC-V kerner), Mediatek mt6572, exynos2200 (brugt i Samsung Galaxy S22), Renesas R-Car V4M-7, TI am62d2 og Sophgo sg2042, bærbare computere baseret på Mediatek mt8186 og Qualcomm Snapdragon X1, smartphones og tablets baseret på SoC mt6572, tegra30 og msm8976.
Samtidig har den latinamerikanske Free Software Foundation dannet en version af det helt frie kernel 6.17 - Linux-libre 6.17-gnu, renset for elementer fra firmware og drivere, som indeholder ikke-frie komponenter eller kodeløg, hvis brug er begrænset af producenten. I version 6.17 er koden til rensning af blobs i drivere amdgpu, prueth, iwlwifi, btusb, pci mhi host, adreno a6xx, nova-core og Intel AVS blevet opdateret. Navnene på blobs i dts-filerne (devicetree) for ARM-chips og Intel IPU7 er blevet renset. Indlæsning af blobs i de nye pci hda-drivere er blevet neutraliseret. Rensningen af blobs i QLogic infiniband-driveren er blevet ophørt, og den er blevet fjernet fra kernen.
Kilde: opennet.ru
