Etter to måneders utvikling presenterte Linus Torvalds utgivelsen av Linux-kjernen 6.7. Blant de mest bemerkelsesverdige endringene er: integrering av filsystemet Bcachefs, avvikling av støtten for Itanium-arkitekturen, muliggjøring av Nouvea med GSP-R-firmware, støtte for TLS-kryptering i NVMe-TCP, mulighet for bruk av unntak i BPF, støtte for futex i io_uring, ytelsesoptimalisering av planleggeren fq (Fair Queuing), støtte for TCP-AO (TCP Authentication Option) -utvidelse, og mulighet for å begrense nettverksforbindelser i sikkerhetsmekanismen Landlock. I tillegg er det lagt til tilgangskontroll til user namespace og io_uring via AppArmor.
Den nye versjonen inneholder 18405 rettelser fra 2066 utviklere, størrelsen på patchen er 72 MB (endringer berørte 13467 filer, 906147 linjer med kode ble lagt til, og 341048 linjer ble fjernet). I forrige utgave var det 15291 rettelser fra 2058 utviklere, og størrelsen på patchen var 39 MB. Omtrent 45% av alle endringene i 6.7 er relatert til enhetsdrivere, cirka 14% gjelder oppdatering av arkitekturspesifikk kode, 13% er relatert til nettverksstakken, 5% til filsystemer, og 3% til interne kjernesystemer.
Hovednyhetene i kjernen 6.7:
- Disk subsystem, I/O og filsystemer
- Koden for filsystemet Bcachefs er inkludert i kjernen, hvor det er gjort et forsøk på å oppnå nivåer av ytelse, pålitelighet og skalerbarhet som er karakteristiske for XFS, kombinert med elementer av utvidet funksjonalitet som er tilgjengelig i Btrfs og ZFS. For eksempel støtter Bcachefs funksjoner som inkludering av flere enheter i et partisjon, lagdelte oppsett av lagringsmedier (med et lavt lag av ofte brukte data basert på raske SSD-er, og et øvre lag med mindre etterspurte data fra harddisker), replikasjon (RAID 1/10), hurtigbufring, transparent datakomprimering (moduser LZ4, gzip og ZSTD), tilstandsøkser (snapshots), integritetsverifisering via sjekksummer, mulighet for lagring av Reed-Solomon feilkorrigeringskoder (RAID 5/6), og lagring av data i kryptert format (benytter ChaCha20 og Poly1305). Når det gjelder ytelse, overgår Bcachefs Btrfs og andre filsystemer basert på Copy-on-Write-mekanismen, og viser ytelse nær Ext4 og XFS.
- I filsystemet Btrfs er det lagt til en forenklet kvote-modus som gir høyere ytelse ved å spore extentene kun i den underkatalogen de er opprettet, noe som forenkler beregningene betydelig og forbedrer ytelsen, men ikke tillater å ta hensyn til extents som deles mellom flere underkataloger.
- I Btrfs er det lagt til en ny datastruktur kalt «stripe tree», som er egnet for logisk mappet av extents i situasjoner der fysisk mappet ikke stemmer overens på tvers av enheter. Strukturen er foreløpig aktivert i implementasjoner av RAID0 og RAID1 for zonerte blokk enheter. I fremtiden planlegges denne strukturen brukt i RAID av høyere nivå, noe som vil løse flere eksisterende problemer i den nåværende implementeringen.
- I filsystemet Ceph er det implementert støtte for mappingen av brukeridentifikatorer for monterte filsystemer, brukt for å knytte filer fra en bestemt bruker på et montert fremmed partisjon til en annen bruker i det nåværende systemet.
- I efivarfs er muligheten for å spesifisere uid og gid ved montering lagt til for å gi mulighet for å endre UEFI-variabler av prosesser som kjører uten root-rettigheter.
- I exFAT er det lagt til ioctl-kall for å lese og endre filsystemattributter. Behandling av kataloger med null størrelse er lagt til.
- I F2FS er muligheten for å bruke blokker med størrelse 16K implementert.
- Autofunksjonsmekanismen autofs er overført til bruk av det nye API-et for montering av partisjoner.
- I OverlayFS er det foreslått monteringsalternativer «lowerdir+» og «datadir+». Støtte for nestet montering av OverlayFS med xattrs er lagt til.
- I XFS er CPU-belastningen optimalisert i koden for blokkfordeling i sanntid. Det er mulig å utføre leseoperasjoner og FICLONE samtidig.
- Koden til EXT2 er overført til bruk av side-folioer for minne.
- Minne og systemtjenester
- Støtten for ia64-arkitekturen, som brukes i Intel Itanium-prosessorer, er blitt avsluttet, ettersom salgene av disse ble helt stoppet i 2021. Itanium-prosessorene ble introdusert av Intel i 2001, men ia64-arkitekturen klarte ikke å konkurrere med AMD64, hovedsakelig på grunn av AMD64s høyere ytelse og en jevnere overgang fra 32-bits x86-prosessorer. Som et resultat har Intels interesser skiftet mot x86-64-prosessorene, og Itanium er blitt servere HP Integrity, som sluttet å ta inn bestillinger for tre år siden. Støttende kode for ia64 er fjernet fra kjernen, for det meste på grunn av langvarig mangel på vedlikehold for denne plattformen. Linus Torvalds har imidlertid uttrykt vilje til å gjenoppta støtten for ia64 i kjernen, men bare hvis noen viser seg villig til å vedlikeholde denne plattformen utenfor den viktigste kjernen i minst ett år.
- En ny kommandolinjeparameter «ia32_emulation» har blitt lagt til kjernen, som gjør det mulig å aktivere og deaktivere støtten for 32-bits emulering under oppstarten i kjerner bygget for x86-64-arkitekturen. Praktisk sett lar den nye parameteren deg bygge en kjerner med støtte for kompatibilitet med 32-bits applikasjoner, men er som standard deaktivert for å redusere angrepsvinkelen mot kjernen, ettersom API-en for å sikre kompatibilitet er mindre testet enn hovedgrensesnittene i kjernen.
- Endringene fra Rust-for-Linux-grenen som er relatert til bruk av Rust-språket som det andre språket for utvikling av drivere og moduler i kjernen, fortsetter. Støtten for Rust er ikke aktivert som standard og fører ikke til at Rust blir inkludert blant nødvendige byggavhengigheter til kjernen. I den nye versjonen er det blitt overført til å bruke Rust 1.73-utgivelsen og et sett med bindinger for arbeid med arbeidskøer (workqueues) er blitt foreslått.
- Det er blitt gitt mulighet for å bruke binfmt_misc-mekanismen for å legge til støtte for nye format for kjørbare filer (for eksempel for å kjøre kompilert programvare i Java eller Python) innenfor separate uprivilegerte navnerom (namespace).
- I cgroup-kontrolleren cpuset, som gjør det mulig å administrere bruken av CPU-kjerner under kjøring av oppgaver, er det mulig å dele opp i lokalt og eksternt partisjonering, som skiller seg ut etter om foreldrecgroupen er en gyldig rotnode eller ei. Det er også lagt til nye innstillinger i cpuset: «cpuset.cpus.exclusive» og «cpuset.cpus.excluisve.effective» for eksklusiv binding til CPU.
- I BPF-subsystemet er det implementert støtte for unntak, som behandles som umiddelbar utgang fra BPF-programmet med mulighet for trygg tilbakevikling av stakkrammer. I tillegg er bruk av kptr-pekerne i BPF-programmer forbundet med CPU tillatt.
- Det er lagt til støtte for operasjoner med futexer i io_uring-subsystemet, og det er implementert nye operasjoner: IORING_OP_WAITID (den asynkrone versjonen av waitid), SOCKET_URING_OP_GETSOCKOPT (varianten av getsockopt) og SOCKET_URING_OP_SETSOCKOPT (varianten av setsockopt) samt IORING_OP_READ_MULTISHOT (flere leseoperasjoner som ikke stopper så lenge det er data eller bufferet er fullt).
- Det er implementert lettvekts enketkoblede FIFO-køer, som bare krever spin-låsing for å fjerne fra køen i prosessens kontekst og som ikke krever spin-låsing for atomisk tillegg til køen i enhver kontekst.
- En ringbuffer kjent som «objpool» er lagt til med en skalerbar implementering av en høyytelseskø for allokering og retur av objekter.
- Det er lagt til en tidlig del av endringene for å implementere det nye API-futex2, som har høyere ytelse på NUMA-systemer, støtter størrelser ulik 32 bit, og kan brukes i stedet for den multiplexerte systemkallet futex().
- Støtte for den aktuelle instruksjonssettet (cpuv4) BPF er lagt til for ARM32- og S390x-arkitekturene.
- For RISC-V-arkitekturen er det implementert muligheten for å bruke den tilgjengelige Shadow-Call Stack-kontrollmodus i Clang 17, som er designet for å beskytte mot overskriving av returadressen fra en funksjon ved bufferoverløp i stakken. Hensikten med beskyttelsen er å lagre returadressen i en egen «skygge»-stakk etter overføring av kontroll til funksjonen, og hente denne adressen før man forlater funksjonen.
- En mekanisme for sammensmelting av identiske sidene i minnet (KSM: Kernel Samepage Merging) har fått en ny smart skanningsmodus som sporer mislykkede skanninger av sider og reduserer intensiteten av ny skanning. For å aktivere den nye modusen er det lagt til en innstilling i /sys/kernel/mm/ksm/smart_scan.
- Det er lagt til en ny ioctl-kommando PAGEMAP_SCAN, som ved bruk sammen med userfaultfd(), gjør det mulig å fastslå når det skrives til et bestemt minneområde. Denne nye funksjonen kan for eksempel brukes i systemer for å lagre og gjenopprette tilstanden til prosesser med CRIU eller i høyspiller anti-oppgavessystemer.
- I byggesystemet er eksempelprogrammer skrevet som BPF-programmer for perf-subsystemet som standard aktivert ved bruk av Clang-kompilatoren.
- Den gamle videobuf-laget, som ble brukt til å styre rammebuffere i mediesubsystemet og for mer enn 10 år siden erstattet av en ny implementering (videobuf2), er fjernet.
- Virtualisering og sikkerhet
- Det er lagt til muligheten for å kryptere data i blokker i fscrypt-subsystemet, med størrelse mindre enn blokkstørrelsen i filsystemet. Dette kan være nødvendig for å aktivere maskinvarekrypteringsmekanismer som bare støtter små blokker (for eksempel kontrollere UFS som kun kan bruke blokker på 4096, vil kunne brukes med et filsystem med blokkstørrelse 16K).
- I 'iommufd'-subsystemet, som tillater administrasjon av IOMMU (I/O Memory-Management Unit) sidetabeller via filbeskrivelser fra brukerrens, er det lagt til sporing av data som ennå ikke er tømt fra hurtigbufferen (dirty) for DMA-operasjoner, noe som er nødvendig for å identifisere minne med urensede data under prosessmigrasjon.
- I Landlock-mekanismen, som gjør det mulig å begrense interaksjonen til en gruppe prosesser med det eksterne miljøet, er det lagt til støtte for å definere tilgangsregler for TCP-sokler. For eksempel kan det opprettes en regel som kun tillater tilgang til nettverksport 443 for opprettelse av HTTPS-tilkoblinger.
- I AppArmor-subsystemet er det lagt til muligheter for å administrere tilgang til io_uring-mekanismen og opprette brukernavnsrom, noe som tillater selektiv tilgang til disse mulighetene for bestemte prosesser.
- API for attestasjon er lagt til virtual machines for å bekrefte integriteten av prosessene deres under oppstart.
- LoongArch-systemene har støtte for virtualisering ved bruk av KVM-hypervisor.
- Ved bruk av KVM-hypervisor på RISC-V-systemer er det lagt til støtte for Smstateen-utvidelsen, som blokkerer tilgang fra den virtuelle maskinen til CPU-registere som ikke støttes av hypervisoren. Støtte er også lagt til for bruk av Zicond-utvidelsen i gjestesystemene, som muliggjør enkelte betingede heltallsoperasjoner.
- I gjestesystemer som kjører under KVM basert på x86-arkitektur, er bruken av opptil 4096 virtuelle CPU-er tillatt.
- Nettverks subsystem
- I NVMe-TCP-driveren (NVMe over TCP), som gjør det mulig å få tilgang til NVMe-lagringsenheter over nettverket (NVM Express over Fabrics) med TCP-protokollen, er støtte for kryptering av datakanalen med TLS lagt til (bruken av KTLS og en bakgrunnsprosess i brukermodus tlshd for å forhandle om forbindelsen).
- Ytelsen til pakkescheduler fq (Fair Queuing) har blitt optimalisert, noe som har økt båndbredden med 5% under høy belastning i tcp_rr-testen (TCP Request/Response) og med 13% under ubegrenset UDP-pakkestrøm.
- I TCP-protokollen er det lagt til en valgfri funksjon for bruk av tidsstempler (TCP TS) med mikrosekundpresisjon (RFC 7323), som gir mulighet for mer presis vurdering av forsinkelser og oppretting av mer avanserte overbelastningskontrollmoduler. For å aktivere kan man bruke kommandoen «ip route add 10/8 … features tcp_usec_ts».
- I TCP-stakken er det lagt til støtte for TCP-AO-utvidelsen (TCP Authentication Option, RFC 5925), som gir mulighet for verifisering av TCP-hoder via MAC-koder (Message Authentication Code), ved bruk av mer moderne algoritmer HMAC-SHA1 og CMAC-AES-128 i stedet for den tidligere tilgjengelige TCP-MD5-alternativet basert på det utdaterte MD5-algoritmen.
- En ny type virtuelle nettverksenheter «netkit» er lagt til, der logikken for datatransport bestemmes ved hjelp av BPF-programmer.
- I KSMBD, som er en kjernerealisering av SMB-serveren, er det lagt til støtte for konvertering av filnavn som inneholder surrogate pairs av sammensatte tegn.
- I NFS er implementasjonen av strømmer med RPC-tjenester forbedret. Støtte for skrivedelegasjon har blitt lagt til (for NFSv4.1+). I NFSD er støtte for netlink-behandler rpc_status lagt til. Klientstøtten for NFSv4.x har blitt forbedret ved re-eksportering til knfsd.
- Utstyr
- Den Nouveau-kjernen er nå innført med grunnleggende støtte for GSP-RM-firmware, som brukes i NVIDIA RTX 20+ GPU-er for å håndtere initialiserings- og kontrolloperasjoner over til en separat GSP (GPU System Processor) mikrocontroller. Støtten for GSP-RM gjør at Nouveau-driveren kan fungere gjennom forespørsel til firmwaren, i stedet for direkte programmering av maskinvareinteraksjoner, noe som betydelig forenkler tillegget av støtte for nye NVIDIA GPU-er ved bruk av eksisterende kall for initialisering og energikontroll.
- I AMDGPU-driveren er støtte for GC 11.5, NBIO 7.11, SMU 14, SMU 13.0 OD, DCN 3.5, VPE 6.1 og DML2 implementert. Støtten for sømløs oppstart (uten blinking ved skjermmodusveksling) er forbedret.
- I i915-driveren er støtte for Intel Meteor Lake-brikker implementert, samt en grunnleggende implementering av Intel LunarLake (Xe 2).
- Støtten for asymmetrisk dataoverføring er lagt til i spesifikasjonen for USB4 v2 (120/40G).
- Støtten for ARM SoC-er er lagt til: Qualcomm Snapdragon 720G (brukes i Xiaomi-smarttelefoner), AMD Pensando Elba, Renesas, R8A779F4 (R-Car S4-8), USRobotics USR8200 (brukes i rutere og NAS).
- Støtten for Fairphone 5-smarttelefonen og ARM-plattformer som Orange Pi 5, QuartzPro64, Turing RK1, Variscite MX6, BigTreeTech CB1, Freescale LX2162, Google Spherion, Google Hayato, Genio 1200 EVK, RK3566 Powkiddy RGB30 er lagt til.
- Støtten for RISC-V plattformene Milk-V Pioneer og Milk-V Duo er lagt til.
- Støtten for lydgrensesnitt på HUAWEI-laptoppene som leveres med AMD CPU er lagt til. Det er lagt til støtte for ekstra høyttalere som installeres på Dell Oasis 13/14/16-laptoppene. Støtten for de innebygde høyttalerne ASUS K6500ZC er også lagt til. Støtten for stumindikator på HP 255 G8 og G10-laptoppene er innført. Støtten for lyddriverne acp6.3 er lagt til. Støtten for profesjonelle opptaksgrensesnitt fra Focusrite Clarett+ 2Pre og 4Pre er også lagt til.
Samtidig har den latinamerikanske Stiftelsen for fri programvare utviklet en helt fri kjernevariant 6.7 — Linux-libre 6.7-gnu, renset for elementer fra programvare og drivere som inneholder ikke-frie komponenter eller kodebiter hvis bruksområde er begrenset av produsenten. I utgave 6.7 er kode for rengjøring av blober oppdatert i ulike drivere og delsystemer, for eksempel i driverne amdgpu, nouveau, adreno, mwifiex, mt7988, ath11k, avs og btqca. Koden for rengjøring av driverne localtalk og rtl8192u er fjernet på grunn av deres eksklusjon fra kjernen. Unødvendige komponenter for rengjøring av driverne xhci-pci, rtl8xxxu og rtw8822b, som tidligere ble lagt til ved en feil, er fjernet. Navnene på blobene i dts-filer for arkitekturen Aarch64 er blitt renset. Blobene i de nye driverne mt7925, tps6598x, aw87390 og aw88399 er fjernet.
Kilde: opennet.ru
