Etter to måneder med utvikling presenterte Linus Torvalds utgivelsen av Linux-kjernen 6.18. Blant de mest bemerkelsesverdige endringene er: dm-pcache for diskbuffering i ikke-flyktig minne (PMEM), fjerning av Bcachefs, online-modus for XFS-sjekking, drivere for Binder (Android IPC) og Tyr (GPU Mali) skrevet i Rust, muligheten for å lage USB-drivere i Rust, optimalisering av cache-håndtering i SLUB-minneallokatoren, adressering av navnerom via filbeskrivelser, akselerasjon av swap-operasjoner, verifisering av BPF-programmer ved hjelp av digitale signaturer, virtualisering av Intel CET i KVM, nettverksprotokollen PSP (en hybrid av TLS og IPsec), støtte for IP-utvidelsen AccECN, og optimalisering av UDP-stakken.
Den nye versjonen inneholder 15035 feilrettinger fra 2217 utviklere, patch-størrelsen er 45 MB (endringene omfattet 13142 filer, 601897 linjer med kode ble lagt til, og 355006 linjer ble fjernet). Den forrige utgivelsen hadde 14334 feilrettinger fra 2118 utviklere, og patch-størrelsen var 46 MB. Omtrent 40% av endringene i 6.18 er relatert til enhetsdrivere, omtrent 16% til oppdateringer av kode spesifik til maskinvarearkitekturer, 12% til nettverksstakken, 5% til filsystemene, og 3% til interne subsystemer i kjernen.
De viktigste nyhetene i kjernen 6.18 (1, 2, 3):
- Disk subsystem, I/O og filsystemer
- I Device Mapper er det lagt til en behandler for dm-pcache for bruk av vedvarende minne (CXL-minne adressert via DAX-enhet) som en ekstra høyytelsesbuffer før de tregere tradisjonelle diskene eller flashlagringsenhetene. Dm-pcache sikrer at innholdet i bufferen bevares i tilfelle krasj (crash-safe) ved bruk av ikke-flyktig minne, duplisering av metadata, og verifisering av dataintegritet og metadata ved hjelp av CRC32-kontrollsummer. For øyeblikket støttes kun caching i skrivebak-modi (write-back).
- Koden for filsystemet Bcachefs er fjernet fra kjernen, og vil nå bli distribuert i form av et eksternt modul bygget med DKMS (Dynamic Kernel Module Support). Koden for Bcachefs kan bli gjeninnført i kjernen etter at Kent Overstreet faktisk beviser muligheten for korrekt samarbeid med andre kjernutviklere og evnen til å følge etablerte utviklingsregler.
- I systemkallet pwritev2() er det lagt til et flagg RWF_NOSIGNAL som deaktiverer sending av SIGPIPE-signal ved skriving til bruddete, ikke-navngitte kanaler eller sokler.
- I Procfs er det lagt til en monteringsalternativ 'pidns' for å spesifisere prosess-ID-navnerom (PID namespace). For eksempel: 'mount -t proc -o pidns=/proc/self/ns/pid proc /tmp/proc'.
- I XFS er muligheten for å bruke fsck for å sjekke og fikse identifiserte problemer i online-modus, uten å avmontere filsystemet, erklært stabil og aktivert som standard. Systemkallene file_getattr og file_setattr er lagt til for å endre attributter for spesielle filer (alle inode). I KConfig er opsjonene XFS_SUPPORT_V4 (4. versjon av XFS) og XFS_SUPPORT_ASCII_CI (case-insensitiv modus for ASCII) deaktivert som standard og erklært utdaterte. Utdaterte monteringsalternativer attr2, noattr2, ikeep og noikeep er fjernet.
- I MD RAID er en ny type bitmap implementert — llbitmap (lockless bitmap) som fungerer uten låsing og gir høyere ytelse.
- Informasjonen knyttet til kryptering og verifisering (pekere i_crypt_info og i_verity_info) er fjernet fra den generelle 'inode'-strukturen. Endringen reduserer minneforbruket i filsystemer som ikke støtter kryptering og verifisering.
- Det er lagt til støtte for systemkallet copy_file_range() og direkte kopiering av områder med en 64-bits størrelse (tidligere ble kun 32-bits størrelse støttet) i FUSE-underlaget. Støtte for synkron initialisering under montering (FUSE_DEV_IOC_SYNC_INIT) er også lagt til.
- I filsystemet ext4 er det mulig å bruke 32-bits bruker-IDer (uid) og gruppe-IDer (gid) ved tilgang til reserverte blokker. ioctl-operasjoner for å sette og lese parametere for superblokken i monterte filsystemer er lagt til (tune2fs vil kunne endre parametere i superblokken uten skriveadgang til blokkenheten). Alle utdaterte innstillinger spesifikke for ext3 er helt fjernet.
- I f2fs er det lagt til en monteringsalternativ «lookup_mode» for å velge søkemodus: perf — hashsøk, compat — lineært søk, auto — automatisk valg. Endring av modusen gir mening for konfigurasjoner med kataloger der det ikke tas hensyn til store og små bokstaver. Den nåværende søkemodusen kan finnes via filen «/sys/fs/f2fs//effective_lookup_mode». Det er lagt til mulighet for å reservere inode, tilgjengelig kun for privilegerte brukere.
- I Overlayfs er det lagt til en modus for drift uten hensyn til store og små bokstaver, som aktiveres på FS-nivå (eksponering for enkeltkataloger støttes foreløpig ikke).
- I BTRFS er det forbedret parallelliseringen av operasjoner ved høy leseaktivitet og lav skriveaktivitet, redusert tiden for transaksjonsfiksasjon, og betydelig redusert tiden for synkronisering (fra minutter til sekunder). Det er gitt mulighet til å bruke blokker (bs) som er større enn minnesiden (ps).
- I ksmbd (SMB-server som kjører på kjerne nivå) er det lagt til en parameter for å begrense det maksimale antall forbindelser fra en enkelt. IP-adresser. smbdirect, smbclient og smbserver er oversatt til å bruke standardkjernestrukturer.
- I SQUASHFS er det lagt til mulighet for å bruke i systemkall lseek() alternativene SEEK_DATA og SEEK_HOLE for å søke etter data og hull i sparse filer. I noen tester er det registrert en økning i ytelsen ved kopiering av sparse filer med opptil 150 ganger.
- I EXFAT er det lagt til støtte for ioctl FS_IOC_GETFSLABEL og FS_IOC_SETFSLABEL for å lese og skrive partisjonsmerker. Det er gitt mulighet for å endre monteringsalternativer under remontering. Oppstart av bitmap-er er akselerert.
- I NTFS3 er det lagt til støtte for ioctl FS_IOC_GETFSLABEL og FS_IOC_SETFSLABEL for å lese og sette partisjonsmerker.
- Minne og systemtjenester
- Implementeringen av mekanismen for mellomprosesskommunikasjon Binder, skrevet i Rust, er blitt en del av prosjektet. Binder brukes i Android til å organisere interaksjon mellom prosesser og fjerndeklarasjon av metoder (én Android-prosess kan kalle en metode eller funksjon i en annen Android-prosess, ved å bruke Binder for identifikasjon, kall og overføring av argumenter mellom prosessene). Koden for Binder ble omskrevet i Rust som en del av Googles initiativ for å styrke sikkerheten i Android.
- I SLUB, minneallokatoren for kjernen, er det implementert et valgfritt cache-lag kalt «sheaves», som bruker flere cacher, hver bundet til en egen CPU-kjerne, noe som gjør det mulig for en enkelt kjerne å lokaliserte operasjoner ved tildeling eller frigjøring av minne. En slik cache har forbedret ytelsen ved tildeling og frigjøring av minne i kjernen, ved å eliminere unødvendige synkroniseringsprimitiver som var nødvendige ved involvering av forskjellige CPU-kjerner. I gjennomførte tester var ytelsesforbedringen fra 6,3 % til 31 % avhengig av belastningstypen.
- Muligheten til å opprette filbeskrivelser knyttet til et spesifikt navnerom (namespace) er lagt til. I motsetning til tilgang til navnerom ved hjelp av identifikatorer (/proc//ns/), er filbeskrivelsen festet til en spesifikk instans av navnerommet, noe som utelukker situasjonen der identifikatoren blir gjenutgitt og peker på et annet objekt. I likhet med bruken av pidfds, skjer åpning av filbeskrivelser som refererer til navnerom via funksjonene open_by_handle_at() og name_to_handle_at().
- Mekanismen «Swap Table» er implementert, og den gjør det mulig å forbedre ytelsen til sidetabeller. Hastighetsforbedringen oppnås ved å redusere konkurransen om tilgang til sidebyttecache, effektivisere søk i cachen og redusere fragmenteringen. Backend basert på Swap Table er brukt for caching av sidebytte i stedet for backend XArray, og har i gjennomsnitt økt ytelsen med 5-20 %. I usemem-testene økte gjennomstrømningen med 17-28 %, i tester av flertrådede kjernesammensetninger ble byggetiden redusert med 1,12-3,19 %, og redis-benchmark-testen med BGSAVE viste en økning i antall behandlede forespørslene på 6-7 %.
- Zswap-undermodulen er overført til direkt bruk av minnetildelingssystemet zsmalloc i stedet for zpool-laget, som ikke lenger brukes og nå er fjernet fra kjernen.
- For å styre oppførselen til mikrokodebootloaderen på x86-systemer er det implementert et kommandolinjealternativ «microcode=liste over flagg». I sin nåværende form har det nye alternativet erstattet «microcode.force_minrev» og lar også angi den minimum tillatte versjonen av mikrokoden for oppstart.
- Arbeidet med omorganiseringen av den overdimensjonerte strukturen «page», som brukes til å administrere sidene i minnet, er startet. Typen ‘memdesc_flags_t» er lagt til for felt med universelle flagg som kan brukes etter den forventede fremtidige tildelingen av separate strukturer for slab og foleantene (folio) fra strukturen «page».
- For nios2-arkitekturen, brukt i Altera Nios II-prosessorer (soft-prosessor basert på FPGA), er støtten for systemanropet clone3() implementert.
- I kjernens konfigurasjon (KConfig) er attributtet «transitional» lagt til, som kan brukes til å merke innstillinger som ikke vises i brukergrensesnittene, som «make menuconfig», og som ikke inkluderes i de genererte konfigurasjonsfilene. Hovedformålet med attributtet er å forenkle omdøpingen av alternativer mens man opprettholder bakoverkompatibilitet.
- Den minimale versjonen av Clang-kompilatoren som kjernen kan bygges med, er hevet til LLVM-verktøysett 15. LLVM 14 leveres med Debian 12 og Ubuntu 22.04.
- Overføringen av endringer fra Rust-for-Linux-grenen, relatert til bruken av Rust som et andrespråk for utvikling av drivere og modulære kjernemoduler, er fortsatt pågående (støtte for Rust er ikke aktivert som standard og fører ikke til at Rust blir en obligatorisk byggavhengighet for kjernen). I den nye versjonen er atomiske minneoperasjoner for Rust-kode implementert, strukturen maple tree, muligheten til å opprette DebugFS-filer og funksjoner for manipulering av bitmap. Tilgangen til API for driverutvikling er utvidet. Et komplett sett med abstraksjoner for utvikling av USB-enhetsdrivere er lagt til (eksempel på USB-driver). Verktøyet perf har fått støtte for debug-symboler generert av kompilatoren rustc.
- Virtualisering og sikkerhet
- Støtten for kryptografisk verifisering av lastede BPF-programmer med digitale signaturer har blitt lagt til. Denne muligheten vil senere bli utvidet med verktøy for bestemmelser om lastingen av signerte BPF-programmer og gi privilegieløse brukere muligheten til å bruke verifiserte BPF-programmer.
- I hypervisoren KVM er det implementert støtte for virtualisering av Intel CET (Control-flow Enforcement Technology), som brukes for å beskytte mot utnyttelser som benytter seg av metoder for tilbaketrending av programmering (ROP — Return-Oriented Programming). Essensen av beskyttelsen er at etter at kontrollen er overført til en funksjon, lagres returen med prosessoren ikke bare i den vanlige stakken, men også i en separat skyggestakk som ikke kan endres direkte.
- Muligheten for å bruke mer enn 255 CPU-er i gjestesystemer som kjører under hypervisoren Bhyve på verter med FreeBSD 15 er lagt til.
- Dibs-laget (Direct Internal Buffer Sharing) er lagt til for administrert deling av buffere innen et isolert miljø, som en hypervisor eller en kjerneinstans av Linux.
- Støtte for drift med flere aktive LSM-moduler (Linux Security Module) er lagt til i auditsystemet.
- Virtio-driveren spi-virtio er lagt til for tilgang til SPI-enheter (Serial Peripheral Interface) fra virtual machines.
- I hypervisoren KVM er det lagt til støtte for SEV-SNP CipherText Hiding-modus, som blokkerer lesing av krypteringstekst for minnet til beskyttede gjestesystemer i en ikke-autorisert CPU.
- Driveren qtee for TEE-miljøer (Trusted Execution Environment) fra Qualcomm er lagt til.
- Nettverks subsystem
- Støtte for kryptering av TCP-tilkoblinger, ved bruk av PSP-protokollen (PSP Security Protocol), utviklet av Google for å kryptere trafikk mellom datasentre, er lagt til. PSP sikrer kryptering, kryptografisk integritetskontroll og autentisering av kilden, og implementerer en kombinasjon av hva TLS-protokollen og IPsec tilbyr. PSP bruker kryptering på nivået av individuelle nettverkstilkoblinger, i motsetning til hele kommunikasjonskanaler. PSP bruker separate krypteringsnøkkel til ulike tunnelerte TCP-tilkoblinger for streng isolasjon av trafikk mellom forskjellige applikasjoner og håndterere. For å redusere belastningen på CPU støttes utføring av krypterings- og dekrypteringsoperasjoner på nettverkskort (offload). Protokollen UDP brukes som transport for dataoverføring, hvor innholdet i den originale TCP-pakken sendes.

- Den første støtten for AccECN (Accurate Explicit Congestion Notification) er lagt til, som er en forbedret versjon av ECN-utvidelsen som lar verter merke IP-pakker i tilfelle overbelastning i stedet for å forkaste dem. Dette gir mulighet til å identifisere den tidlige fasen av flaskehalser i kommunikasjonskanaler uten pakkeforringelse. Den originale ECN-utvidelsen har en begrensning som tillater kun ett signal om overbelastning i løpet av en enkelt TCP-overføringssyklus (RTT, Round-Trip Time, sending av forespørsel og mottak av svar). AccECN fjerner denne begrensningen og gir mottakeren mulighet til å sende flere overbelastningsmerker til avsenderen i TCP-pakkens hode. Algoritmene for overbelastningskontroll kan bruke informasjonen for mer presis respons på overbelastninger uten å ty til en brå reduksjon av pakkeutsendelsesintensiteten ved mindre overbelastninger.
- Behandlingen av innkommende pakker i UDP-stakken er optimalisert under DDoS-angrep, som fører til et stort antall pakker inn til en eller flere UDP-sokler. De gjort optimiseringene, som reduserte konkurrerende låser, optimaliserte dataplasseringen i minnet, og involvering av låser som tar hensyn til NUMA-arkitekturer (Non-Uniform Memory Access), har økt ytelsen ved mottak av UDP-pakker med 47% og mer under ekstreme forhold.
- Muligheten for å deaktivere I/O-caching på NFS-serveren er implementert, noe som lar NFS-serveren brukes i systemer med liten mengde minne (for eksempel nedskalert skyomgivelser). Deaktivering av cache kan også være nyttig på belastede NFS-servere for å unngå å kaste data relatert til lokale lagringsenheter ut av cachen på grunn av frigjøring av minne for NFS-cache.
- Den maksimale størrelsen på buffere for innkommende og utgående pakker for nettverksokler (net.core.rmem_max og net.core.wmem_max) er økt fra 2 MB til 4 MB. Den standardstørrelsen er ikke endret (net.core.rmem_default og net.core.wmem_default = 2 MB).
- En driver for nettverksoperasjonsakseleratoren Qualcomm PPE (Packet Processing Engine), som brukes i SoC Qualcomm IPQ9574, er lagt til.
- Støtte for kryptering av TCP-tilkoblinger, ved bruk av PSP-protokollen (PSP Security Protocol), utviklet av Google for å kryptere trafikk mellom datasentre, er lagt til. PSP sikrer kryptering, kryptografisk integritetskontroll og autentisering av kilden, og implementerer en kombinasjon av hva TLS-protokollen og IPsec tilbyr. PSP bruker kryptering på nivået av individuelle nettverkstilkoblinger, i motsetning til hele kommunikasjonskanaler. PSP bruker separate krypteringsnøkkel til ulike tunnelerte TCP-tilkoblinger for streng isolasjon av trafikk mellom forskjellige applikasjoner og håndterere. For å redusere belastningen på CPU støttes utføring av krypterings- og dekrypteringsoperasjoner på nettverkskort (offload). Protokollen UDP brukes som transport for dataoverføring, hvor innholdet i den originale TCP-pakken sendes.
- Utstyr
- Kjernen har fått føreren Tyr, skrevet i Rust, som gjør det mulig å jobbe med GPU ARM Mali, der det brukes teknologi CSF (Command Stream Frontend), som Mali G310, G510 og G710. Føreren er fortsatt ikke klar for permanent bruk av vanlige brukere og betraktes som en eksperimentell prototype for testing av abstraksjoner for utvikling av drivere i Rust.
- Driverne for inndatadevicer med HID (Human Interface Device) grensesnitt har fått støtte for berøringsplater med taktil tilbakemelding og trykksensorer.
- Arbeidet med drm-driveren (Direct Rendering Manager) Xe for GPU basert på Intel Xe-arkitekturen, som brukes i Intel-grafikkort fra Arc-familien og integrert grafikk, startet med Tiger Lake-prosessorene, fortsetter. I den nye versjonen er grensesnittet madvise lagt til, SR-IOV PF (Single Root I/O Virtualization Physical Function) støttes, Intel PSMI-modusen for validering av maskinvare er inkludert, håndtering av overført informasjon om feil fra fastvare er sikret, SLPC strømforbruksprofilen er implementert, og støtte for lasting av hjelpesystemer (for eksempel til kjølerkontrolleren og spenningsregulatoren) under driverkontrollen er lagt til.
- I AMDGPU-driveren er støtte for enheter med APU Cyan Skillfish lagt til, støtten for AMD GCN 1.0 er forbedret, kompatibilitet med verktøyet criu er implementert, og temperaturmetrikker er lagt til i sysfs, samt tillatelser for omfordeling av MMIO-forespørselen fra brukerrommet.
- I i915-driveren er støtten for Wildcat Lake-familien av brikker lagt til, og håndteringen av GPU Jasper Lake, Elkhart Lake, Gen7 og Gen6 er forbedret.
- I Nouveau-driveren brukes NVIDIA GSP-fastvare som standard, og feilhåndteringen er forbedret.
- Integrasjonen av Nova-driverkomponentene for NVIDIA GPU-er utstyrt med GSP-fastvare, brukt fra NVIDIA GeForce RTX 2000-serien basert på Turing-mikroarkitekturen, fortsetter. Driveren er skrevet i Rust. I den nye versjonen er støtten for GSP-fastvare utvidet, implementeringen av makroen "register!" er forbedret, samt støtte for PCI-enhetsklasser og produsentidentifikatorer.
- Rocket-driveren for NPU-akseleratorer, brukt i SoC Rockchip RK3588, er lagt til.
- Kjernens parameter "boot_display" for valg av utgangsenhet for visning av oppstartsprosessen på systemer med flere GPU-er er lagt til.
- I vesadrm-driveren er støtten for 8-bits paletter implementert.
- I msm-driver har støtte for GPU Adreno 663 blitt lagt til, og teknologien for energibesparelse IFPC (Inter Frame Power Collapse) er implementert.
- I panthor-driveren er støtte for GPU Mali-G710, Mali-G510, Mali-G310, Mali-Gx15, Mali-Gx20 og Mali-Gx25 lagt til.
- Støtte for lydsystemer ASoC Qualcomm Glymur og PM4125, Realtek RT1321, Shanghai FourSemi FS2104/5S, Texas Instruments PCM1754 og TAS2783A, qcs615, CS35L56 B2, tas2118, tas2x20, tas5825 er lagt til. Støtte for lyd USB-kortene Tascam US-144mkII og Presonus S1824c er også lagt til.
- Støtte for ARM CPU Cortex-A320/A520AE/A720AE og C1-Nano/Pro/Premium/Ultra er blitt lagt til.
- Støtte for ARM-plattformer, SoC-er og enheter: 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 er blitt lagt til.
Samtidig har det latinamerikanske Free Software Foundation laget en versjon av det helt frie kjernen 6.18 – Linux-libre 6.18-gnu, renset for elementer fra fastvare og drivere som inneholder ikke-frie komponenter eller kodebiter hvis bruk er begrenset av produsenten. I utgivelsen 6.18 er rensingen av blob-koden i Nova-Core-drivere, Intel XE, TI PRUeth, Lantiq GSWIP, Marvell WiFi-Ex oppdatert. Blob-navnene i dts-filer (devicetree) for ARM-brikker fra Qualcomm, Mediatek og TI ARM64 er blitt renset. Lading av blob-er i de nye driverne FourSemi fs2104/5s, TI TAS2783 og Qualcomm GENI er blitt nøytralisert.
Kilde: opennet.ru

