Na twee maanden ontwikkeling heeft Linus Torvalds de release van de Linux-kernel 6.7 gepresenteerd. Onder de meest opmerkelijke wijzigingen bevinden zich: integratie van het bestandssysteem Bcachefs, het stopzetten van ondersteuning voor de Itanium-architectuur, de mogelijkheid voor Nouveau om samen te werken met GSP-R-firmware, ondersteuning voor TLS-encryptie in NVMe-TCP, de mogelijkheid om uitzonderingen in BPF te gebruiken, ondersteuning voor futex in io_uring, optimalisatie van de prestaties van de scheduler fq (Fair Queuing), ondersteuning voor de TCP-AO (TCP Authentication Option) extensie en de mogelijkheid om netwerkverbindingen te beperken in het Landlock-beveiligingsmechanisme. Daarnaast is toegangsbeheer voor user namespaces en io_uring toegevoegd via AppArmor.
In de nieuwe versie zijn 18405 correcties opgenomen van 2066 ontwikkelaars, de patchgrootte bedraagt 72 MB (wijzigingen betreft 13467 bestanden, 906147 regels code toegevoegd, 341048 regels verwijderd). In de vorige release waren er 15291 correcties van 2058 ontwikkelaars, de patchgrootte was 39 MB. Ongeveer 45% van alle wijzigingen in 6.7 heeft betrekking op apparaataanstuurdrivers, ongeveer 14% van de wijzigingen betreft de update van architectuur-specifieke code, 13% is gerelateerd aan de netwerkstack, 5% aan bestandssystemen en 3% aan interne subsysteemfunctionaliteiten van de kernel.
Belangrijkste vernieuwingen in de kernel 6.7:
- Opslagsubsystemen, invoer/uitvoer en bestandssystemen
- De kernel bevat de code van het bestandssysteem Bcachefs, waarin geprobeerd is om een niveau van prestaties, betrouwbaarheid en schaalbaarheid te bereiken dat kenmerkend is voor XFS, gecombineerd met elementen van uitgebreide functionaliteit aanwezig in Btrfs en ZFS. Bcachefs ondersteunt onder andere functies zoals het samenvoegen van meerdere apparaten in één partitie, gelaagd opslagbeheer (de onderlaag met vaak gebruikte gegevens op snelle SSD's en de bovenlaag met minder gevraagde gegevens van harde schijven), replicatie (RAID 1/10), caching, transparante gegevenscompressie (modi LZ4, gzip en ZSTD), status-instanties (snapshots), integriteitsverificatie via checksums, de mogelijkheid om foutcorrectiecodes van Reed-Solomon (RAID 5/6) op te slaan, en gegevensopslag in versleutelde vorm (gebruikmakend van ChaCha20 en Poly1305). Wat betreft prestaties overtreft Bcachefs Btrfs en andere COW-gebaseerde bestandssystemen, en vertoont het een snelheid die dicht bij Ext4 en XFS ligt.
- In het Btrfs-bestandssysteem is een vereenvoudigde quota-modus geïntroduceerd, waardoor een hogere prestaties kan worden behaald door alleen de extents in de subdirectory te volgen waar ze zijn aangemaakt, wat de berekeningen aanzienlijk vereenvoudigt en de prestaties verhoogt, maar geen rekening houdt met extents die gezamenlijk in meerdere subdirectory's worden gebruikt.
- In Btrfs is een nieuwe datastructuur genaamd 'stripe tree' toegevoegd, geschikt voor logische mapping van extents in situaties waarin de fysieke mapping niet overeenkomt op verschillende apparaten. Deze structuur is momenteel geïmplementeerd in RAID0- en RAID1-implementaties voor geblokkeerde apparaten. In de toekomst is het plan om deze structuur ook te gebruiken in hogere RAID-niveaus, wat enkele bestaande problemen in de huidige implementatie zal oplossen.
- In het Ceph-bestandssysteem is ondersteuning geïmplementeerd voor het mapping van gebruikers-ID's van aangekoppelde bestandssystemen, toegepast voor het koppelen van bestanden van een specifieke gebruiker op een aangekoppeld extern volume met een andere gebruiker in het huidige systeem.
- In efivarfs is de mogelijkheid toegevoegd om uid en gid op te geven tijdens het koppelen, zodat processen zonder root-rechten UEFI-variabelen kunnen wijzigen.
- In exFAT zijn ioctl-oproepen toegevoegd voor het lezen en wijzigen van FS-attributen. Er is ondersteuning toegevoegd voor mappen met een nulgrootte.
- In F2FS is de mogelijkheid geïmplementeerd om blokken van 16K te gebruiken.
- Het automount-mechanisme autofs is overgeschakeld naar het gebruik van de nieuwe API voor het koppelen van partities.
- In OverlayFS zijn de koppelingopties 'lowerdir+' en 'datadir+' aangeboden. Ondersteuning voor geneste koppeling van OverlayFS met xattrs is toegevoegd.
- In XFS is een optimalisatie van de CPU-belasting uitgevoerd in de real-time bloktoewijzingscode. Gelijktijdige uitvoering van leesbewerkingen en FICLONE-operaties is mogelijk gemaakt.
- De EXT2-code is overgeschakeld naar het gebruik van geheugenpagina's (page folios).
- Geheugen en systeemdiensten
- De ondersteuning van de ia64-architectuur, gebruikt in Intel Itanium-processoren, is stopgezet, waarvan de verkoop in 2021 volledig is beëindigd. Itanium-processoren werden in 2001 door Intel geïntroduceerd, maar de ia64-architectuur kon de concurrentie met AMD64 niet aan, vooral vanwege de hogere prestaties van AMD64 en een soepelere overgang van 32-bits x86-processoren. Uiteindelijk verschoof de focus van Intel naar x86-64-processoren, terwijl Itanium achterbleef. servers HP Integrity, waarvan de orderverwerking drie jaar geleden is stopgezet. De code ter ondersteuning van ia64 is uit de kernel verwijderd, hoofdzakelijk vanwege het langdurige gebrek aan ondersteuning voor dit platform. Linus Torvalds heeft echter zijn bereidheid uitgesproken om ondersteuning voor ia64 in de kernel terug te brengen, maar alleen als er iemand bereid is om deze ondersteuning buiten de hoofdkernel gedurende ten minste een jaar kwalitatief te leveren.
- Een nieuwe parameter voor de kernel-opdrachtregel, "ia32_emulation", is toegevoegd, waarmee de ondersteuning voor 32-bits emulatie in kernels die zijn gebouwd voor de x86-64-architectuur tijdens het opstarten kan worden in- of uitgeschakeld. Praktisch gezien stelt deze nieuwe parameter gebruikers in staat om een kernel te bouwen die compatibiliteit met 32-bits applicaties biedt, maar standaard deze modus uitschakelt om de aanvalsoppervlakte van de kernel te verkleinen, aangezien de API voor compatibiliteit minder getest is dan de hoofdinterfaces van de kernel.
- De overdracht van wijzigingen uit de Rust-for-Linux-tak is voortgezet, gerelateerd aan het gebruik van de programmeertaal Rust als tweede taal voor de ontwikkeling van stuurprogramma's en modules van de kernel (de ondersteuning voor Rust is standaard inactief en maakt Rust niet tot een verplicht bouwafhankelijkheid van de kernel). In de nieuwe versie is overgestapt op Rust 1.73 en is een set bindings aangeboden voor het werken met werkqueues.
- De mogelijkheid is geboden om het binfmt_misc-mechanisme te gebruiken voor de ondersteuning van nieuwe uitvoerbare bestandsformaten (bijvoorbeeld voor het uitvoeren van gecompileerde applicaties in Java of Python) binnen aparte niet-privilege namespaces.
- In de cgroup-controller cpuset, die het gebruik van CPU-kernen bij de uitvoering van een taak beheert, is een scheiding gemaakt in lokale en externe partitionering (remote partition), die verschilt in of de bovenliggende cgroup een geldige rootsectie is of niet. In cpuset zijn ook nieuwe instellingen toegevoegd: "cpuset.cpus.exclusive" en "cpuset.cpus.exclusive.effective" voor exclusieve toewijzing aan CPU.
- In het BPF-subsyteem is ondersteuning voor uitzonderingen geïmplementeerd, die worden behandeld als een nooduitgang uit het BPF-programma met de mogelijkheid voor veilige afwikkeling van de stack. Bovendien is het gebruik van kptr-pointers in BPF-programma's toegestaan in de context van CPU-toewijzing.
- De io_uring-substructuur heeft ondersteuning toegevoegd voor operaties met futexes en zijn nieuwe operaties geïmplementeerd: IORING_OP_WAITID (de asynchrone versie van waitid), SOCKET_URING_OP_GETSOCKOPT (variant van getsockopt) en SOCKET_URING_OP_SETSOCKOPT (variant van setsockopt) en IORING_OP_READ_MULTISHOT (meervoudige leesbewerkingen die doorgaan zolang er gegevens zijn of de buffer niet vol is).
- Een implementatie van lichte, enkelvoudige FIFO-queues is toegevoegd, die alleen een spin-lock vereisen voor het verwijderen uit de queue in de context van een proces en zonder spin-lock uitkomen voor atomair toevoegen aan de queue in elke context.
- Er is een ringbuffer "objpool" toegevoegd met een schaalbare implementatie van een hoogperformante queue voor toewijzing en terugkeer van objecten.
- Een eerste versie van wijzigingen voor de implementatie van de nieuwe API futex2 is toegevoegd, die hogere prestaties biedt op NUMA-systemen, ondersteuning biedt voor afmetingen die verschillen van 32 bit en kan worden gebruikt in plaats van de gemultiplexte systeemaanroep futex().
- Voor de architecturen ARM32 en S390x is ondersteuning toegevoegd voor de huidige set (cpuv4) van BPF-instructies.
- Voor de architectuur RISC-V is de mogelijkheid geïmplementeerd om de in Clang 17 beschikbare Shadow-Call Stack-controle modus te gebruiken, ontworpen ter bescherming tegen het overschrijven van het terugkeeradres vanuit een functie in het geval van een buffer overflow op de stack. De bescherming houdt in dat het terugkeeradres wordt opgeslagen in een aparte 'schaduw' stack na het doorgeven van de controle aan de functie en dit adres wordt opgehaald vóór het verlaten van de functie.
- In het mechanisme voor het samenvoegen van identieke geheugenpagina's (KSM: Kernel Samepage Merging) is een nieuwe slimme modus voor het scannen van geheugenpagina's toegevoegd, die mislukt gescande pagina's bijhoudt en de intensiteit van hun herhaalscanning vermindert. Voor het inschakelen van de nieuwe modus is een instelling toegevoegd aan /sys/kernel/mm/ksm/smart_scan.
- Een nieuwe ioctl-opdracht PAGEMAP_SCAN is toegevoegd, die in combinatie met userfaultfd() de mogelijkheid biedt om schrijfacties in een specifiek geheugenbereik te bepalen. Deze nieuwe functie kan bijvoorbeeld worden gebruikt in systemen voor het opslaan en herstellen van de status van processen met CRIU of in game anti-cheat systemen.
- In het build-systeem is bij het gebruik van de Clang-compiler standaard de bouw van voorbeeldtoepassingen van het perf-subsystem dat in de vorm van BPF-programma's is geschreven, ingeschakeld.
- De oude videobuf-laag, die meer dan 10 jaar geleden werd gebruikt voor het beheren van framebuffer's in de mediasubsystemen en vervangen door een nieuwe implementatie videobuf2, is verwijderd.
- Virtualisatie en beveiliging
- In het fscrypt-subsystem is de mogelijkheid toegevoegd om gegevens in blokken te versleutelen die kleiner zijn dan de blokgrootte van het bestandssysteem. Dit kan nodig zijn om hardwarematige versleutelingsmechanismen te gebruiken die alleen kleine blokken ondersteunen (bijvoorbeeld UFS-controllers die alleen zijn ontworpen voor een blokgrootte van 4096 kunnen worden gebruikt met een FS met een blokgrootte van 16K).
- In het iommufd-subsysteem, dat het beheer van input/output geheugenpagina's van de IOMMU (I/O Memory-Management Unit) via bestandsdescriptors vanuit de gebruikersruimte mogelijk maakt, is het volgen van nog niet gewiste gegevens (dirty) voor DMA-operaties toegevoegd, wat nodig is om geheugen met niet gewiste gegevens te identificeren bij het migreren van processen.
- In het Landlock-mechanisme, dat de interactie van een groep processen met de externe omgeving beperkt, is ondersteuning toegevoegd voor het definiëren van toegangregels voor TCP-sockets. Bijvoorbeeld, er kan een regel worden gemaakt die alleen toegang toestaat via netwerkpoort 443 voor het tot stand brengen van HTTPS-verbindingen.
- In het AppArmor-subsysteem is de mogelijkheid toegevoegd om de toegang tot het io_uring-mechanisme en de creatie van gebruikersnamespace-IDs (user namespaces) te beheren, waardoor selectieve toegang tot deze mogelijkheden alleen voor bepaalde processen mogelijk is.
- Een certificerings-API is toegevoegd virtuele machines voor het bevestigen van de integriteit van hun laadprocessen.
- Op LoongArch-systemen is virtualisatie ondersteund met behulp van de hypervisor KVM.
- Bij het gebruik van de hypervisor KVM op RISC-V-systemen is ondersteuning toegevoegd voor de Smstateen-extensie, die voorkomt dat de virtuele machine toegang heeft tot de registers van de CPU die niet expliciet worden ondersteund door de hypervisor. Ook is ondersteuning toegevoegd voor het gebruik van de Zicond-extensie in gastsystemen, waarmee bepaalde voorwaardelijke gehele getaloperaties kunnen worden uitgevoerd.
- In gastsystemen die draaien onder KVM op basis van de x86-architectuur is het toegestaan om tot 4096 virtuele CPU's te gebruiken.
- Netwerk subsysteem
- In de NVMe-TCP-driver (NVMe over TCP), die toegang biedt tot NVMe-opslag via het netwerk (NVM Express over Fabrics) met behulp van het TCP-protocol, is ondersteuning toegevoegd voor versleuteling van de datatransmissiekanaal met behulp van TLS (KTLS wordt gebruikt en de achtergrondservice in de gebruikersruimte tlshd voor het tot stand brengen van de verbinding).
- De prestatieoptimalisatie van de fq (Fair Queuing) pakketplanner heeft de doorvoersnelheid met 5% verhoogd bij zware belasting in de tcp_rr (TCP Request/Response) test en met 13% bij een onbegrensde stroom van UDP-pakketten.
- In het TCP-protocol is een optionele mogelijkheid toegevoegd voor het gebruik van tijdstempels (TCP TS) met microseconden-nauwkeurigheid (RFC 7323), wat het mogelijk maakt om latenties nauwkeuriger te beoordelen en geavanceerdere congestiebeheermodules te creëren. Voor inschakeling kan de opdracht «ip route add 10/8 … features tcp_usec_ts» worden gebruikt.
- In de TCP-stack is ondersteuning toegevoegd voor de TCP-AO (TCP Authentication Option, RFC 5925) extensie, die de mogelijkheid biedt om TCP-headers te verifiëren met MAC-codes (Message Authentication Code) met behulp van modernere algoritmen HMAC-SHA1 en CMAC-AES-128 in plaats van de eerder beschikbare TCP-MD5-optie op basis van het verouderde MD5-algoritme.
- Een nieuw type virtuele netwerkapparaten 'netkit' is toegevoegd, waarvan de logica voor gegevensoverdracht wordt gedefinieerd met behulp van een BPF-programma.
- In KSMBD, een kernel-gebaseerde implementatie van een SMB-server, is ondersteuning toegevoegd voor het converteren van bestandsnamen die samenstellende karakters bevatten.
- In NFS is de implementatie van streams met RPC-diensten verbeterd. Ondersteuning voor schrijfgedelegeerdheid is toegevoegd (voor NFSv4.1+). In NFSD is ondersteuning toegevoegd voor de netlink-handler rpc_status. De ondersteuning voor NFSv4.x-clients is verbeterd bij her-exporteren naar knfsd.
- Apparatuur
- De Nouveau-kernelmodule heeft initiële ondersteuning toegevoegd voor GSP-RM-firmware, die wordt gebruikt in GPU's van NVIDIA RTX 20+ voor het verplaatsen van initiatie- en GPU-beheersoperaties naar een aparte microcontroller GSP (GPU System Processor). De ondersteuning van GSP-RM stelt de Nouveau-driver in staat om via firmware-aanroepen te werken in plaats van directe hardware-interactie, wat het aanzienlijk eenvoudiger maakt om nieuwe NVIDIA GPU's te ondersteunen door gebruik te maken van reeds bestaande aanroepen voor initiatie en energiebeheer.
- De AMDGPU-driver heeft ondersteuning geïmplementeerd voor GC 11.5, NBIO 7.11, SMU 14, SMU 13.0 OD, DCN 3.5, VPE 6.1 en DML2. De ondersteuning voor naadloze opstart (zonder knipperen bij het schakelen van videomodi) is verbeterd.
- De i915-driver heeft ondersteuning geïmplementeerd voor Intel Meteor Lake-chips en een initiële implementatie van Intel LunarLake (Xe 2) toegevoegd.
- Ondersteuning voor asymmetrische overdrachtkanalen, zoals toegevoegd in de USB4 v2-specificaties (120/40G), is toegevoegd.
- Ondersteuning voor ARM SoC's is toegevoegd: Qualcomm Snapdragon 720G (gebruikt in Xiaomi-smartphones), AMD Pensando Elba, Renesas, R8A779F4 (R-Car S4-8), USRobotics USR8200 (gebruikt in routers en NAS).
- Ondersteuning voor de Fairphone 5 smartphone en ARM-boards zoals Orange Pi 5, QuartzPro64, Turing RK1, Variscite MX6, BigTreeTech CB1, Freescale LX2162, Google Spherion, Google Hayato, Genio 1200 EVK, RK3566 Powkiddy RGB30 is toegevoegd.
- Ondersteuning voor RISC-V-boards Milk-V Pioneer en Milk-V Duo is toegevoegd.
- Ondersteuning voor geluidsinterfaces van laptops van HUAWEI, geleverd met AMD CPU, is toegevoegd. Ondersteuning voor extra luidsprekers, geïnstalleerd op Dell Oasis 13/14/16-laptops, is toegevoegd. Ondersteuning voor ingebouwde luidsprekers van ASUS K6500ZC is toegevoegd. Ondersteuning voor de geluidsdempingsindicator op HP 255 G8 en G10-laptops is toegevoegd. Ondersteuning voor geluiddrivers acp6.3 is toegevoegd. Ondersteuning voor professionele opnameinterfaces Focusrite Clarett+ 2Pre en 4Pre is toegevoegd.
Tegelijkertijd heeft de Latijns-Amerikaanse Free Software Foundation een volledig vrij 6.7-kernel variant ontwikkeld - Linux-libre 6.7-gnu, ontdaan van firmware- en stuurprogramma-elementen die niet-vrije componenten of code bevatten waarvan het gebruik door de fabrikant is beperkt. In de release 6.7 is de code voor het schoonmaken van blobs in verschillende stuurprogramma's en subsysteem verbeterd, zoals in de stuurprogramma's amdgpu, nouveau, adreno, mwifiex, mt7988, ath11k, avs en btqca. De code voor het schoonmaken van de stuurprogramma's localtalk en rtl8192u is verwijderd omdat ze uit de kernel zijn gehaald. Overbodige schoonmaakcomponenten van de stuurprogramma's xhci-pci, rtl8xxxu en rtw8822b, eerder per ongeluk toegevoegd, zijn verwijderd. De namen van blobs in dts-bestanden voor de Aarch64-architectuur zijn opgeschoond. Blobs in de nieuwe stuurprogramma's mt7925, tps6598x, aw87390 en aw88399 zijn verwijderd.
Bron: opennet.ru
