Udgivelse af Linux 6.18-kernen

Efter to måneders udvikling præsenterede Linus Torvalds udgivelsen af Linux-kernen 6.18. Blandt de mest mærkbare ændringer er: dm-pcache til diskcache i ikke-flygtig hukommelse (PMEM), fjernelse af Bcachefs, online-kontrol af XFS, drivers til Binder (Android IPC) og Tyr (GPU Mali) skrevet i Rust, mulighed for at oprette USB-drivere i Rust, optimering af caching i SLUB-hukommelsesallokatoren, navnerum adressering ved filbeskrivelser, acceleration af swap, verifikation af BPF-programmer med digitale signaturer, Intel CET virtualisering i KVM, netværksprotokol PSP (hybrid TLS og IPsec), support for IP-udvidelsen AccECN, og optimering af UDP-stakken.

Den nye version indeholder 15035 rettelser fra 2217 udviklere, patch-størrelsen er 45 MB (ændringerne påvirker 13142 filer, 601897 linjer kode er tilføjet, 355006 linjer er fjernet). I den tidligere udgave var der 14334 rettelser fra 2118 udviklere, og patch-størrelsen var 46 MB. Omkring 40% af alle ændringerne præsenteret i 6.18 relaterer sig til enhedsdrivere, cirka 16% vedrører opdatering af arkitektur-specifik kode, 12% er relateret til netværksstakken, 5% vedrører filsystemer, og 3% til interne under-systemer i kernen.

De vigtigste nyskabelser i kernen 6.18 (1, 2, 3):

  • DiskSubsystem, input/output og filsystemer
    • I Device Mapper er der tilføjet en dm-pcache-handler til brug af permanent hukommelse (CXL-hukommelse, adresseret via DAX-enheden) som en ekstra højtydende cache foran langsommere traditionelle disk- eller flashlagringsenheder. Dm-pcache sikrer indholdet af cachen i tilfælde af nedbrud (crash-safe) ved at benytte ikke-flygtig hukommelse, duplikering af metadata og kontrol af dataintegritet og metadata integritet ved hjælp af CRC32 checksummer. I øjeblikket understøttes kun caching i write-back tilstand.
    • Koden til filsystemet Bcachefs er blevet fjernet fra kernen, og vil nu blive distribueret i form af en ekstern modul, der kompileres ved hjælp af DKMS (Dynamic Kernel Module Support) værktøjet. Koden til Bcachefs kan vende tilbage til kernen, efter at Kent Overstreet faktisk har bevist muligheden for korrekt samarbejde med andre kerneludviklere og evnen til at følge de etablerede udviklingsregler.
    • Flags RWF_NOSIGNAL er tilføjet til systemopkaldet pwritev2(), hvilket deaktiverer sendingen af signalet SIGPIPE ved skrivning til brudte ikke-navngivne kanaler eller sockets.
    • Der er tilføjet en mount-option «pidns» til Procfs for at angive process-ID namespaces (PID namespace). For eksempel: «mount -t proc -o pidns=/proc/self/ns/pid proc /tmp/proc».
    • Muligheden for at anvende værktøjet fsck til at kontrollere og rette identificerede problemer i online-tilstand, uden at filsystemet skal afmonteres, er blevet erklæret stabilt i XFS og er aktiveret som standard. Systemopkaldene file_getattr og file_setattr er tilføjet for at ændre attributter på specielle filer (enhver inode). I KConfig er indstillingerne XFS_SUPPORT_V4 (version 4 af XFS) og XFS_SUPPORT_ASCII_CI (mode uden hensyntagen til ASCII-tegns store og små bogstaver), der er erklæret forældede, som standard deaktiveret. Forældede mount-options attr2, noattr2, ikeep og noikeep er blevet fjernet.
    • En ny type bitmaps — llbitmap (lockless bitmap), der fungerer uden låse og giver højere ydeevne, er blevet realiseret i MD RAID.
    • Oplysninger relateret til kryptering og verifikation (pegepinde i_crypt_info og i_verity_info) er blevet fjernet fra den generelle struktur «inode». Ændringen reducerer hukommelsesforbruget i filsystemer, der ikke understøtter kryptering og verifikation.
    • Støtte til systemopkaldet copy_file_range() og direkte kopiering af intervaller med en 64-bit type (tidligere blev kun 32-bit størrelse understøttet) er blevet tilføjet til FUSE-subsystemet. Der er også tilføjet support for initialisering i synkron tilstand under montering (FUSE_DEV_IOC_SYNC_INIT).
    • Muligheden for at bruge 32-bit bruger-ID'er (uid) og gruppe-ID'er (gid) ved adgang til reserverede blokke er blevet implementeret i ext4 FS. ioctl-operationer til at sætte og læse parametre for superblokken af monterede FS er blevet tilføjet (tune2fs vil kunne ændre parametre i superblokken uden skrivetilladelse til blokenheden). Forældede indstillinger specifikke for ext3 er blevet helt fjernet.
    • I f2fs er der tilføjet en monteringsindstilling "lookup_mode" til valg af søgemetode: perf — hash-søgning, compat — lineær søgning, auto — automatisk valg. Ændring af modus giver mening for konfigurationer med mapper, hvor store og små bogstaver ikke skelnes. Den nuværende søgemetode kan findes i filen "/sys/fs/f2fs//effective_lookup_mode". Der er tilføjet mulighed for at reservere inodes, som kun er tilgængelige for privilegerede brugere.
    • I Overlayfs er der tilføjet en driftsmode uden hensyntagen til store og små bogstaver, som aktiveres på filsystemlag-niveau (til specifikke mapper er det endnu ikke understøttet).
    • I BTRFS er paralleliseringen af operationer forbedret under høj læsebelastning og lav skrivebelastning, tiden for transaktionsbehandling er reduceret, og synkroniseringstiden er betydeligt forkortet (fra minutter til sekunder). Muligheden for at bruge blokke (bs) større end fælles hukommelsessider (ps) er blevet tilføjet.
    • I ksmbd (SMB-server der arbejder på kernel-niveau) er der tilføjet en parameter til at begrænse det maksimale antal forbindelser fra én. IP-adresser. smbdirect, smbclient og smbserver er blevet opdateret til at bruge standardkernestrukturer.
    • I SQUASHFS er der tilføjet mulighed for at bruge lseek()-systemkaldets muligheder SEEK_DATA og SEEK_HOLE til at finde data og huller i sparse filer. I nogle tests er der observeret en stigning i ydeevnen ved kopiering af sparse filer med op til 150 gange.
    • I EXFAT er der tilføjet understøttelse af ioctl FS_IOC_GETFSLABEL og FS_IOC_SETFSLABEL til læsning og skrivning af partitionsmærker. Der er mulighed for at ændre monteringsindstillinger under remontering. Indlæsningen af bitmapfiler er blevet fremskyndet.
    • I NTFS3 er der tilføjet understøttelse af ioctl FS_IOC_GETFSLABEL og FS_IOC_SETFSLABEL til læsning og indstilling af partitionsmærker.
  • Hukommelse og systemtjenester
    • Implementeringen af inter-process kommunikationsmekanismen Binder, skrevet i Rust, er blevet accepteret. Binder bruges i Android til at organisere inter-process kommunikation og fjernopkald af metoder (én Android-proces kan kalde en metode eller funktion i en anden Android-proces ved hjælp af Binder til at identificere, kalde og overføre argumenter mellem processerne). Binder-koden er blevet gen skrevet i Rust som en del af Googles initiativ til at styrke sikkerheden i Android.
    • I SLUB, kernenes hukommelsesallokator, er der implementeret et valgfrit cachelag ved navn "sheaves", som benytter flere caches, hver knyttet til en enkelt CPU-kerne. Dette muliggør lokalisering af hukommelsesallokeringer eller -frigivelser til én kerne. Denne cache har forbedret ydeevnen ved hukommelsesallokering og -frigivelse i kernen ved at fjerne de unødvendige synkroniseringsprimitiver, der kræves ved involvering af forskellige CPU-kerner. I gennemførte tests varierede ydeevneforøgelsen fra 6,3% til 31% afhængigt af belastningstypen.
    • Muligheden for at oprette filbeskrivelser, der er knyttet til et bestemt navnerum (namespace), er blevet tilføjet. I modsætning til at tilgå navnerum via id’er (\/proc\/\/ns\/), knyttes filbeskriveren til en specifik instans af navnerummet og undgår tilfælde, hvor id’et genallokeres og nu peger på et andet objekt. På samme måde som ved brug af pidfds åbnes filbeskrivelser, der refererer til navnerum, via funktionerne open_by_handle_at() og name_to_handle_at().
    • Der er implementeret en "Swap Table" mekanisme, der øger ydeevnen ved side swapping. Forbedringen opnås ved at reducere konkurrencen om adgangen til swap-cachen, mere effektiv datafindelse i cachen og mindsket fragmentering. Backend baseret på Swap Table anvendes til caching af swapping i stedet for backend XArray og har i gennemsnit øget ydeevnen med 5-20%. I brugsmem-testen steg throughputen med 17-28%, tiden til flerskydning af kernen faldt med 1,12-3,19%, og testen redis-benchmark med BGSAVE viste en stigning i antallet af behandlede forespørgsler på 6-7%.
    • Zswap subsystemet er blevet overført til direkte brug af hukommelsesallokeringssystemet zsmalloc i stedet for zpool-laget, der ikke længere anvendes og nu er fjernet fra kernen.
    • For at styre adfærden for mikrokodebootloaderen på x86-systemer er der implementeret en kommandolinjeindstilling "microcode=liste over flag". I sin nuværende form erstatter den nye indstilling "microcode.force_minrev" og tillader også at angive den minimale version af mikrokoden, der er nødvendig for at kunne boot.
    • Arbejdet med at omorganisere den overdrevent oppustede struktur "page", der anvendes til at administrere sider i det operative hukommelse, er startet. En type 'memdesc_flags_t' er tilføjet til felterne med universelle flag, som kan bruges efter den forventede fremtidige udskillelse af separate strukturer til slab og folier (folio) fra strukturen "page".
    • Der er tilføjet support for systemopkaldet clone3() til nios2-arkitekturen, som anvendes i Altera Nios II processorer (soft processor baseret på FPGA).
    • Der er tilføjet attributten "transitional" til kernelkonfigurationen (KConfig), som kan bruges til at markere indstillinger, der ikke vises i brugergrænseflader som "make menuconfig", og ikke inkluderes i de genererede konfigurationsfiler. Den primære hensigt med attributten er at forenkle omdøbningen af muligheder med bevarelse af bagudkompatibilitet.
    • Den mindste version af Clang-kompilatoren, der kan bruges til at bygge kernen, er hævet til LLVM værktøjssæt 15. Debian 12 og Ubuntu 22.04 leveres med LLVM 14.
    • Fortsat overførslen af ændringer fra Rust-for-Linux-grenen, relateret til brugen af Rust som det andet sprog til udvikling af drivere og kernelmoduler (Rust support er ikke aktiveret som standard og fører ikke til, at Rust bliver en ufravigelig bygget afhængighed for kernen). Den nye version har implementeret atomare operationer med hukommelse for Rust-kode, strukturen maple tree, muligheden for at oprette DebugFS-filer, og funktioner til manipulation af bitmapper. Adgangen til API'et for udvikling af drivere er blevet udvidet. Et komplet sæt af abstraktioner til udvikling af USB-enhedsdrivere er blevet tilføjet (eksempel USB-driver). Perf-værktøjet har fået tilføjet støtte til debug-symboler genereret af rustc-kompilatoren.
  • Virtualisering og sikkerhed
    • Støtten til kryptografisk verifikation af indlæste BPF-programmer via digital signatur er blevet tilføjet. Denne funktionalitet vil fremover blive udvidet med værktøjer til at bestemme reglerne for indlæsning af signerede BPF-programmer og give ikke-privilegerede brugere mulighed for at anvende verificerede BPF-programmer.
    • I KVM-hypervisoren er der implementeret støtte til virtualisering af Intel CET (Control-flow Enforcement Technology), der bruges til at beskytte mod exploits, der anvender metoder til return-oriented programming (ROP). Essensen af beskyttelsen er, at efter overdragelse af kontrol til en funktion, gemmes returadressen ikke kun i den almindelige stak, men også i en separat skyggestak, der ikke kan ændres direkte.
    • Muligheden for at bruge mere end 255 CPU'er i gæstesystemer, der kører under Bhyve-hypervisoren på værter med FreeBSD 15, er blevet tilføjet.
    • Der er tilføjet et lag dibs (Direct Internal Buffer Sharing) til styret deling af buffer blandt isolerede miljøer, som f.eks. en hypervisor eller en instans af Linux-kernen.
    • Audit-subsystemet har fået tilføjet støtte til drift med flere aktiverede LSM-moduler (Linux Security Module) samtidig.
    • Der er tilføjet en virtio-driver spi-virtio for adgang til SPI-enheder (Serial Peripheral Interface) fra virtual machines.
    • KVM-hypervisoren har fået implementeret støtte til SEV-SNP CipherText Hiding, som forhindrer uautoriseret CPU i at læse hukommelsens krypterede tekst fra beskyttede gæstesystemer.
    • Der er tilføjet en qtee-driver til TEE-miljøer (Trusted Execution Environment) for Qualcomm-chips.
  • Netværkssubsystem
    • Der er tilføjet støtte til kryptering af TCP-forbindelser ved hjælp af PSP-protokollen (PSP Security Protocol), udviklet af Google til kryptering af trafik mellem datacentre. PSP sikrer kryptering, kryptografisk integritetskontrol og kildeautentifikation, og implementerer en unik kombination af TLS- og IPsec-protokollens evner. PSP anvender kryptering på niveau med enkelte netværksforbindelser, snarere end hele kommunikationskanalen. PSP bruger separate krypteringsnøgler til forskellige tunnelerede TCP-forbindelser for streng isolation af trafik fra forskellige applikationer og håndterere. For at reducere belastningen på CPU'en understøttes overførsel af krypterings- og dekrypteringsoperationer til netværkskortene (offload). Protokollen UDP anvendes som transport til dataoverførsel, hvor indholdet af det oprindelige TCP-pakket gennemstrømmes.

      Udgivelse af Linux 6.18-kernen
    • Indført er den initiale støtte til AccECN-udvidelsen (Accurate Explicit Congestion Notification), som er en forbedret version af ECN-udvidelsen, der giver værter mulighed for at mærke IP-pakker i tilfælde af overbelastning i stedet for at kassere dem, hvilket muliggør identifikation af tidlige tegn på trafikpropper i kommunikationskanaler uden tab af pakker. Den oprindelige ECN-udvidelse har en begrænsning, der tillader signalering af kun ét overbelastningssignal i hvert TCP-transmissionscyklus (RTT, Round-Trip Time, sending af anmodning og modtagelse af svar). AccECN fjerner denne begrænsning og gør det muligt for modtageren at sende mere end ét overbelastningsmærke til afsenderen i TCP-pakkens header. Overbelastningskontrolalgoritmer kan bruge de modtagne oplysninger til mere præcist at reagere på overbelastninger og undgå pludselige reduktioner i pakkeleveringsintensiteten ved moderate overbelastninger.
    • I UDP-stakken er behandlingen af indkommende pakker blevet optimeret under DDoS-angreb, som resulterer i en stor tilstrømning af pakker til én eller flere UDP-sockets. De indførte optimeringer, såsom reduktion af konkurrerende blokeringer, optimering af datastrukturernes placering i hukommelsen og anvendelse af blokeringer, som tager højde for NUMA-arkitekturen (Non-Uniform Memory Access), har øget ydelsen ved modtagelse af UDP-pakker med 47 % eller mere under ekstreme forhold.
    • Muligheden for at deaktivere input/output-caching på NFS-serveren er blevet realiseret, hvilket gør det muligt at bruge NFS-serveren i systemer med begrænset hukommelse (for eksempel beskårne cloud-miljøer). At deaktivere cachen kan også være nyttigt på belastede NFS-servere for at undgå at data relateret til lokale lagringsenheder bliver skubbet ud af cachen på grund af hukommelsesfrigivelse til NFS-cachen.
    • Den maksimale størrelse af buffere for indkommende og afsendte pakker til netværks-sockets (net.core.rmem_max og net.core.wmem_max) er blevet forøget fra 2 MB til 4 MB. Den standardstørrelse, der er indstillet, er forblevet uændret (net.core.rmem_default og net.core.wmem_default = 2 MB).
    • Der er tilføjet en driver til Qualcomm PPE (Packet Processing Engine), som anvendes i Qualcomm SoC IPQ9574 til at accelerere netværksoperationer.
  • Udstyr
    • Kernen indeholder driveren Tyr, skrevet i Rust, der understøtter GPU'er fra ARM Mali, som anvender teknologien CSF (Command Stream Frontend), såsom Mali G310, G510 og G710. Driveren er endnu ikke klar til almindelige brugere og betragtes som en eksperimentel prototype til test af abstraktioner til udvikling af drivere i Rust.
    • Der er tilføjet støtte til touchpad med taktil feedback og tryksensorer i drivere til inputenheder med HID (Human Interface Device) grænseflade.
    • 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 siden Tiger Lake-processorerne, er fortsat. Den nye version inkluderer et madvise-interface, støtte til SR-IOV PF (Single Root I/O Virtualization Physical Function), tilføjet støtte til Intel PSMI-tilstand for hardwarevalidering, sikret behandling af firmware-overførte fejlmeddelelser, implementeret SLPC strømsparsingsprofil, og tilføjet støtte til indlæsning af hjælpefirmwares (f.eks. til kølekontrollere og spændingsregulatorer) under driververifikation.
    • I AMDGPU-driveren er der tilføjet støtte til enheder med APU Cyan Skillfish, forbedret support for AMD GCN 1.0, implementeret kompatibilitet med værktøjet criu, og der er tilføjet temperaturmålinger i sysfs, ligesom anmodninger om MMIO remapping fra brugerrum er tilladt.
    • I i915-driveren er chips fra Wildcat Lake-familien blevet understøttet, og der er forbedret funktionalitet med GPU'er som Jasper Lake, Elkhart Lake, Gen7 og Gen6.
    • I Nouveau-driveren er NVIDIA GSP-firmware aktiveret som standard, og fejlhåndtering er forbedret.
    • Integration af komponenter i Nova-driveren for NVIDIA GPU'er udstyret med GSP-firmware, brugt siden NVIDIA GeForce RTX 2000-serien baseret på Turing mikroarkitektur, fortsætter. Driveren er skrevet i Rust. Den nye version udvider understøttelsen af GSP-firmware, forbedrer macroen ‘register!’, og tilføjer støtte til PCI-enheds klasser og producent identificeringsnumre.
    • Der er tilføjet en rocket-driver til NPU acceleratorer, som anvendes i SoC Rockchip RK3588.
    • Der er tilføjet en kernelparameter ‘boot_display’ til at vælge output-enheden til visning af bootprocessen på systemer med flere GPU'er.
    • I vesadrm-driveren er der implementeret støtte for 8-bit paletter.
    • I drivere til msm er der tilføjet understøttelse af GPU Adreno 663 og implementeret støtte til energibesparende teknologi IFPC (Inter Frame Power Collapse).
    • I drivere til panthor er der tilføjet understøttelse af GPU Mali-G710, Mali-G510, Mali-G310, Mali-Gx15, Mali-Gx20 og Mali-Gx25.
    • Der er tilføjet understøttelse af lydsystemer ASoC Qualcomm Glymur og PM4125, Realtek RT1321, Shanghai FourSemi FS2104/5S, Texas Instruments PCM1754 og TAS2783A, qcs615, CS35L56 B2, tas2118, tas2x20, tas5825. Undersøttelse af USB-lydkort Tascam US-144mkII og Presonus S1824c er også blevet tilføjet.
    • Der er tilføjet understøttelse af ARM CPU Cortex-A320/A520AE/A720AE og C1-Nano/Pro/Premium/Ultra.
    • Der er tilføjet understøttelse af ARM-platforme, SoC og enheder: Apple M2 Pro, M2 Max og M2 Ultra, Sony Xperia SP, Samsung Galaxy S22, Samsung Galaxy S20 FE, ASUS Eee Pad Slider SL101, Lenovo ThinkBook 16, HP Omnibook X14 X1P42100, Dell Inspiron 7441 / Latitude 7455, Sige1, NanoPi Zero2, Axis Artpec8, NXP i.MX91, ROCK 2A/2F, Qualcomm Lemans Auto, Renesas RZ/T2H, RZ/N2H, RZ/T2H og RZ/N2H, Aspeed AST27xx, Meta Clemente BMC, Netcube Nagami som, Tqma91xx, Ultratronik i.MX8MP Ultra-MACH, i.MX8ULP EVK9, Buffalo WXR-1750DHP.

Samtidig har den latinamerikanske Free Software Foundation udviklet en version af det helt frie kernel 6.18 — Linux-libre 6.18-gnu, renset for firmware- og driverkomponenter, der indeholder ikke-frie elementer eller kodeområder, hvis anvendelse er begrænset af producenten. I version 6.18 er koden til rensning af blobs i driverne Nova-Core, Intel XE, TI PRUeth, Lantiq GSWIP, Marvell WiFi-Ex blevet opdateret. Der er også udført navnerensning af blobs i dts-filer (devicetree) for ARM-chips fra Qualcomm, Mediatek og TI ARM64. Indlæsning af blobs i de nye drivere FourSemi fs2104/5s, TI TAS2783 og Qualcomm GENI er blevet neutraliseret.

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster