Na twee maanden ontwikkeling heeft Linus Torvalds de release van Linux-kernel 6.15 gepresenteerd. Onder de meest opvallende wijzigingen bevinden zich: een auditmechanisme in Landlock, de mogelijkheid om geheugenmapping vast te zetten, het fwctl-subsyteem, de Nova-driver voor NVIDIA GPU, de implementatie van een hostsysteem voor de Hyper-V hypervisor, ondersteuning voor gezoneerde opslagapparaten in XFS, optimalisatie van het netwerksubsyteem, scrub-check in Bcachefs, en de mogelijkheid om controle uit te oefenen over operaties via io_uring.
In de nieuwe versie zijn 15.945 correcties opgenomen van 2.154 ontwikkelaars, de patchgrootte bedraagt 59 MB (de wijzigingen betroffen 13.596 bestanden, 739.608 regels code werden toegevoegd en 312.168 regels verwijderd). In de vorige release waren er 12.115 correcties van 1.984 ontwikkelaars, met een patchgrootte van 39 MB. Ongeveer 41% van alle in 6.15 aangebrachte wijzigingen heeft betrekking op apparaatdrivers, ongeveer 16% van de wijzigingen is gerelateerd aan het upgraden van hardware-specifieke code, 13% heeft te maken met de netwerkstack, 5% met bestandssystemen en 4% met interne subsysteem van de kernel.
Belangrijkste vernieuwingen in kernel 6.15:
- Opslagsubsystemen, invoer/uitvoer en bestandssystemen
- In het fanotify-mechanisme is de mogelijkheid toegevoegd om gebeurtenissen van het mounten en unmounten te volgen.
- In XFS is ondersteuning voor gezoneerde opslagapparaten toegevoegd (verdeelt groepen blokken of sectoren in zones waar alleen sequentieel toevoegen van gegevens is toegestaan, met een update van de hele groep blokken). Een rwf_dontcache-vlag is toegevoegd om caching bij schrijven uit te schakelen. De mogelijkheid is gerealiseerd voor atomair schrijven van meerdere datablokken tegelijk.
- In Btrfs is de mogelijkheid geïmplementeerd om negatieve compressieniveaus van zstd op te geven bij het mounten (van -15 tot -1, bijvoorbeeld 'compress=zstd:-5'), wat zorgt voor hogere snelheid ten koste van lagere compressie-efficiëntie. Het cachen van bestandsroutes is verbeterd (in de uitgevoerde test versneld de 'send'-operatie met 30%). Ondersteuning voor blokken van 2 KB is toegevoegd.
- In EXT4 is de prestaties verbeterd bij het afspelen van logboeken met een zeer groot aantal ingetrokken records (een belasting die kenmerkend is voor partitities onder het Lustre FS). Een lineaire doorzoeking van 'dentry'-records (interne voorstelling van mapitems) is gerealiseerd, die problemen oplost met toegang tot bepaalde bestanden in een case-insensitieve modus. De montage-optie 'errors=remount-ro' functioneert nu correct. De robuustheid is verhoogd bij de verwerking van beschadigde bestandssystemen.
- In F2FS, an ioctl has been implemented to obtain information about the priority of I/O operations for a specified file. Work has been done to transition to the use of page folios.
- In Bcachefs, a 'scrub' mode has been added, which checks the integrity of reading all data and metadata from the filesystem. In case of errors, a recovery procedure is initiated. Bcachefs also added support for working with filesystems whose block size is larger than the page size. The disk structure format of Bcachefs has been stabilized (further changes to the format will be implemented as optional additions).
- In EROFS, support for 48-bit block addressing has been added.
- In the FUSE subsystem, the sysctl default_request_timeout and max_request_timeout have been implemented to set timeouts for request execution, allowing monitoring of FUSE components operating in user space. The maximum file name length in FUSE has been increased to 1024 characters.
- The statmount() system call now allows obtaining information about the mapping of user IDs of mounted filesystems, which is used to match files of a specific user on a mounted foreign partition to another user in the current system.
- The ability to create a mount point with a different user ID mapping than that of the original mounted partition has been released.
- Changes have been made to the API for managing mounts, simplifying the assembly of complex hierarchies of filesystems without disclosing specific parts of the filesystems that need to remain hidden.
- Support for hardware-based encryption key management devices has been added to the subsystem for working with block devices.
- In the SMB filesystem, the is_network_name_deleted option has been implemented and the smb_server_kerberos5 mode has been enabled by default.
- For OverlayFS, a new mount option 'override_creds' has been added, where the calling user's credentials will be used for access to the lower storage layers, rather than the user who performed the mount. This change, for example, allows requiring a user with CAP_SYS_ADMIN privileges when mounting OverlayFS, but using the filesystem with credentials that do not have this privilege.
- In exFAT zijn de bestandverwijderingsoperaties versneld. In plaats van afzonderlijke 'discard'-verzoeken voor elke vrijgegeven cluster van het te verwijderen bestand, bundelt de stuurprogramma nu de verzoeken. In een uitgevoerde test is de verwijdertijd van een bestand van 80 GB verminderd van 286 seconden naar 1,6 seconden.
- Alle pseudo-FS, evenals het EXT2 FS, zijn overgezet naar het nieuwe API voor het monteren van partities.
- De code ter ondersteuning van de bestandssystemen SYSV (SystemV/386, Xenix en Coherent) is verwijderd, aangezien dit vanaf 2023 als niet-ondersteund (orphaned) is gemarkeerd.
- Geheugen en systeemdiensten
- De minimale vereiste versie van GCC voor het bouwen van de kernel is verhoogd naar 8.1, en Clang naar 15.0.0.
- Een nieuwe subsystem 'fwctl' (Firmware Control) is toegevoegd, die een API biedt voor veilig beheer van firmware en het uitvoeren van handlers aan de firmwarezijde vanuit de gebruikersruimte. Drivers voor CXL (Compute Express Link) apparaten, Mellanox ConnectX (mlx5) Ethernet-adapters en AMD/Pensando servicekaarten zijn op basis van fwctl voorbereid.
- De mogelijkheden van het pidfd-mechanisme zijn uitgebreid, waarmee identificatoren kunnen worden gebruikt die aan specifieke processen zijn verbonden en, in tegenstelling tot pid, niet opnieuw kunnen worden toegewezen. Het biedt de mogelijkheid om statusinformatie over de beëindiging van een proces, geïdentificeerd via pidfd, te extraheren nadat het ouderproces bevestiging heeft ontvangen van de beëindiging van het kindproces (reaped) en zijn bronnen zijn vrijgegeven. Aan systeemaanroepen is een PIDFD_SELF-vlag toegevoegd, waarmee een proces naar zichzelf kan verwijzen.
- Voor de RISC-V-architectuur is ondersteuning geïmplementeerd voor de extensies BFloat16, Zaamo (atomaire geheugenbewerkingen), Zalrsc (Load-Reserved/Store-conditional) en ZBKB (bitbewerkingen voor encryptie).
- Bij het traceren is de mogelijkheid toegevoegd om de argumenten van aangeroepen functies op te slaan en deze weer te geven in de traceerlogs.
- In het asynchrone in-/uitvoersysteem io_uring is ondersteuning toegevoegd voor het lezen van gebeurtenisinformatie van epoll. Het gebruik van io_uring voor het afhandelen van epoll-gebeurtenissen vermindert het aantal contextwisselingen en maakt het mogelijk om meerdere epoll-gebeurtenissen tegelijk af te handelen.
- In het eBPF-systeem is de verificatie van programma's met lussen verbeterd. Nieuwe instructies 'timed_may_goto', 'load-acquire' en 'store-release' zijn toegevoegd. Er is de mogelijkheid geïntroduceerd om uitgebreide bestandsattributen vanuit BPF-programma's te wijzigen. De functie try_alloc_pages() is toegevoegd, waarmee geheugen kan worden toegewezen met een hoge waarschijnlijkheid van mislukking (bij het uitvoeren van BPF-programma's in beperkte contexten).
Een nieuwe locking-primitief is geïmplementeerd — rqspinlock (Resilient Queued Spin Lock), dat tijdens uitvoering situaties detecteert die leiden tot deadlocks. Dit nieuwe primitief maakt het mogelijk om BPF-programma's te laden waarvoor de verificator geen garantie heeft gegeven voor correcte werking met locks.
- De betrouwbaarheid van het toewijzen van grote geheugens (huge-page) is aanzienlijk verhoogd.
- De berekening van CRC64-controlesommen is aanzienlijk versneld op x86-systemen. Onder andere zijn nieuwe vectorinstructies uit de AVX-512-set gebruikt voor versnelling. In sommige situaties is de prestatie 100 keer verhoogd.
- De overdracht van wijzigingen uit de Rust-for-Linux-tak met betrekking tot het gebruik van de Rust-taal als tweede taal voor de ontwikkeling van stuurprogramma's en kernelmodules wordt voortgezet (ondersteuning voor Rust is standaard niet ingeschakeld en leidt niet tot opname van Rust in de verplicht te bouwen afhankelijkheden voor de kernel). De mogelijkheid is geboden om de macro '#[kunit_tests()]' in de kernelcode te gebruiken voor het uitvoeren van unit-tests. Ondersteuning voor de ARMv7-architectuur is toegevoegd. De dma- en hrtimer-modules met Rust-bindingen voor DMA zijn geïmplementeerd (toegevoegd door Linus buiten de omhuizing van de maintainer die daarna aftrad) en voor hoge precisie timers. De modules 'list', 'str', 'sync', 'error' en 'alloc' zijn uitgebreid. Ondersteuning voor de nieuwe syntaxis '&raw' (raw_ref_op) is toegevoegd.
- In het perf-systeem is de mogelijkheid tot het profilereren van vertragingen gerealiseerd, gebruikmakend van informatie van de taakplanner.
- Een nieuwe kernelcommandoregelparameter 'traceoff_after_boot' is toegevoegd, die traceerinformatie uitschakelt nadat de kernel is opgestart en het init-proces is gestart. Deze parameter kan worden gebruikt bij het diagnosticeren van opstartproblemen, waarmee wordt gegarandeerd dat de tijdens het opstarten verzamelde traceergegevens niet worden overschreven.
- Ondersteuning voor 32-bits x86-systemen met meer dan 8 CPU's en 4 GB RAM is beëindigd. Dergelijke hardware wordt al lange tijd niet meer geproduceerd, en systemen die deze bronnen vereisen zijn overgezet naar 64-bits CPU's.
- Er zijn wijzigingen aangebracht in de implementatie van POSIX-timers, waardoor de CRIU (Checkpoint/Restore in Userspace)-tool ondersteuning heeft voor het opslaan en herstellen van timer-id's.
- Virtualisatie en beveiliging
- De mogelijkheid is toegevoegd om Linux te gebruiken als de rootomgeving (Dom0, root partition) voor de Hyper-V-hypervisor (Microsoft Hypervisor). De hostomgeving is verantwoordelijk voor het beheer van de hypervisor, het opstarten van gastsystemen, het toewijzen van middelen en het waarborgen van interactie virtuele machines met de hardware. Het beheer van de Hyper-V-hypervisor in Linux vindt plaats via het apparaat /dev/mshv.
- In de Landlock-module, die niet-privilegeerde programma's middelen biedt om het gebruik van Linux-kernelobjecten (bestanden hiërarchieën, netwerksockets, ioctl, enz.) te beperken, is een auditmechanisme toegevoegd. De audit maakt het mogelijk om de redenen voor toegang blokkades bij gebruik van Landlock gedetailleerd te evalueren, en geeft inzicht in wanneer en welke operaties zijn geblokkeerd, waarom een blokkade heeft plaatsgevonden en welke regel is geactiveerd.
- De mogelijkheid is toegevoegd om in LSM-modules (Linux Security Modules) handlers te implementeren die de toegang tot het systeem voor asynchrone invoer/uitvoer io_uring controleren en het gebruik van io_uring voor het omzeilen van toegangslimieten tot systeemaanroepen blokkeren. Een dergelijke handler is geïmplementeerd in de LSM-module SELinux.
- In SELinux is de mogelijkheid geïmplementeerd om beleidsregels toe te passen op alle soorten gegevens die door de kernel worden geladen, inclusief firmware-images, beveiligingsbeleid en certificaten.
- Een vergrendelingsmodus (seal) is toegevoegd voor bepaalde geheugenmapping-operaties die door de kernel worden uitgevoerd in de adresruimte van een proces. De vergrendeling zet de mapping in een alleen-lezen modus en voorkomt wijzigingen in het geval van exploitatie van een kwetsbaarheid. De actie geldt voor de mappings vDSO, vsyscall, vvar, sigpage en uprobes. De standaardmodus is uitgeschakeld, omdat deze de werking van sommige toepassingen kan verstoren. Voor activatie is de compilatie-instelling CONFIG_MSEAL_SYSTEM_MAPPINGS toegevoegd.
- Netwerk subsysteem
- Het werk is voortgezet om de netwerkstack te ontdoen van de wereldwijde vergrendeling RTNL (rtnl_lock) en deze om te zetten in vergrendelingen die aan afzonderlijke netwerknamenruimtes zijn gebonden.
- De initiële mogelijkheid voor het verkrijgen van netwerks pakketten via io_uring is toegevoegd, waarbij de inhoud direct in het geheugen van de gebruiker wordt gekopieerd zonder tussenbuffering (zero-copy). In de uitgevoerde tests maakte de wijziging het mogelijk om te voldoen aan de verwerking van verkeer via een 200-gigabit kanaal, met gebruik van één CPU-core.
- De sysctl tcp_rto_max_ms en de TCP-socket optie TCP_RTO_MAX_MS zijn geïmplementeerd, waarmee het maximale tijdsinterval tussen pogingen tot het opnieuw verzenden van pakketten kan worden ingesteld.
- In BPF is een reeks callback-aanroepen toegevoegd om informatie over de tijd uit verschillende delen van de netstack te verkrijgen, wat kan worden gebruikt voor het diagnosticeren van netwerkvertragingen.
- Er zijn prestatie-optimalisaties voor netwerken toegevoegd:
- De optimalisatie GRO (Generic Receive Offload), die meerdere kleine pakketten samenvoegt tot één groot pakket, is nu actief wanneer de verwerking van een pakket naar een andere CPU wordt omgeschakeld (voor belastingverdeling) bij gebruik van de XDP-subsystem (eXpress Data Path), waardoor pakketten op het niveau van de netwerkkdriver kunnen worden verwerkt voordat ze naar de netstack worden verzonden. De prestatieverbetering voor de verwerking van TCP-stromen door het toepassen van deze optimalisatie kan oplopen tot het dubbele.
- Onder zware belasting is de prestaties van de connect() functie verdubbeld door de spin-lock te vervangen door het synchronisatie-mechanisme RCU (Read-Copy-Update) bij het zoeken naar records met informatie over de partijen van de verbinding (bron en doel en poorten). Daarnaast is de hashing geoptimaliseerd, wat nog eens 229% prestatieverbetering heeft opgeleverd. IP-adressen De implementatie van MPTCP (Multipath TCP), een uitbreiding van het TCP-protocol voor het gelijktijdig afleveren van pakketten via meerdere routes door verschillende netwerkinterfaces die aan verschillende IP-adressen zijn gebonden, is versneld. MPTCP in mode met één stroom is met 29% versneld.
- In netfilter is de uitvoering van routingszoekopdrachten in FIB (Forwarding Information Base) gestopt als er een socket aanwezig is. Dankzij deze optimalisatie is de prestaties met 20% gestegen.
- De UDP-prestaties onder flood-omstandigheden zijn met 10% verhoogd door overbodige bewerkingen met de structuur sk_tsflags bij het ontvangen van pakketten uit te sluiten.
- Er is een driver toegevoegd met de implementatie van het protocol MCTP-over-USB.
- Een driver met de implementatie van het MCTP-over-USB protocol is toegevoegd.
- Apparatuur
- De kernel bevat de initiële implementatie van de Nova-driver voor NVIDIA GPU's met GSP-firmware, die wordt gebruikt vanaf de NVIDIA GeForce RTX 2000-serie op basis van de Turing-microarchitectuur. De driver is geschreven in de programmeertaal Rust. In de eerste fase is alleen het skeleton van nova-core toegevoegd, bestaande uit ongeveer 400 regels code en implementeert het een basisniveau van abstracties boven de software-interfaces van de GSP-firmware. In de volgende fase is het de bedoeling om de DRM-driver nova-drm (Direct Rendering Manager) aan de kernel toe te voegen voor interactie met de GPU vanuit de gebruikersruimte, evenals de VFIO-driver met een vGPU-manager die het gebruik van virtuele NVIDIA GPU's in virtualisatiesystemen mogelijk maakt.
- De ontwikkeling van de drm-driver (Direct Rendering Manager) Xe voor GPU's op basis van de Intel Xe-architectuur is voortgezet, die wordt gebruikt in Intel grafische kaarten uit de Arc-familie en geïntegreerde graphics, te beginnen met de Tiger Lake-processors. Ondersteuning voor SVM (Shared Virtual Memory), een onderdeel van het DRM-framework dat de gedeelde geheugen beheert dat door CPU's en GPU's wordt gebruikt, is toegevoegd.
- Nieuwe GPU-identificaties zijn toegevoegd aan de i915-driver.
- In de Nouveau-driver is de GSP RPC herwerkt en is de drm_slave_encoder-interface geïntegreerd.
- De AMDGPU-driver heeft ondersteuning geïmplementeerd voor de DCN36-architectuur (Display Core Next). Er is de mogelijkheid toegevoegd om eigen helderheidscurven in te stellen die worden gebruikt voor de helderheidscorrectie van het display.
- Ondersteuning voor de Qualcomm Adreno 623 GPU is toegevoegd aan de adreno-driver.
- Ondersteuning voor Apple Touch Bar aanraakpanelen is toegevoegd.
- Ondersteuning voor de tweede versie van de eUSB2-extensie (eUSB2V2 - Embedded USB2 Version 2.0) is toegevoegd, waarmee de voedingsspanning kan worden verlaagd (tot 1,2 volt) en de prestaties van USB 2.0 kunnen worden verhoogd. De gegevensoverdrachtsnelheid in eUSB2V2 kan oplopen tot 4,8 Gbit per seconde, wat 10 keer sneller is dan de gebruikelijke 480 Mbit per seconde, die typisch zijn voor USB 2.0. eUSB2V2 stelt laptopfabrikanten in staat om hun apparaten uit te rusten met camera's van hogere resolutie, terwijl ze nog steeds de Embedded USB2-bus voor hun aansluiting gebruiken.
- Ondersteuning voor Intel Killer E5000 (RTL8126) ethernetadapters is toegevoegd.
- Ondersteuning voor de Visionox RM692E5, Rockchip w552793dba-v10, kingdisplay-kd110n11-51ie en starry-2082109qfh040022-50e displaypanelen is toegevoegd.
- Er is een driver toegevoegd voor de Samsung Galaxy Book laptops.
- Ondersteuning voor de Presonus Studio 1824c en Jabra Evolve 65 audiosystemen is toegevoegd. Ondersteuning voor AMD ACP 7.x, AWINC WM88166, Everest ES8388, Intel AVS PEAKVOL en GAIN DSP-modules is toegevoegd. De audiokwaliteit op ASUS, HP en Lenovo laptops is verbeterd.
- Ondersteuning voor ARM-platformen, SoC's en apparaten is toegevoegd: Arm Morello, AMD (Xilinx) Versal NET, Google Pixel Pro 6, NetCube Kumquat, MYIR Remi Pi, Huawei Matebook E Go, Milk-V Jupiter ST STM32MP2, Mediatek MT8370, Apple T2, Skov (i.MX8MP), EVK (i.MX95), Rockchip RK35xx, Allwinner A523, 11 Toradex-borden op basis van i.MX6.
Ondertussen heeft de Latijns-Amerikaanse Free Software Foundation een volledig vrije kernel 6.15 - Linux-libre 6.15-gnu gepubliceerd, vrijgemaakt van firmware- en stuurprogrammabestandselementen die niet-vrije componenten of code bevatten, waarvan het gebruik door de fabrikant is beperkt. In release 6.15 is de blob-lading in de stuurprogramma's nova, Qualcomm iris v4l2, Airoha NPU, Tehuti Networks TN40xx 10G ethernet, Realtek 8814A wifi, Apple Silicon SoC touchscreen, Renesas UFS en aw88166 audio geneutraliseerd. De opruiming van de Spider 1Gb ethernet-stuurprogramma is stopgezet, dat is verwijderd uit de kernel. Links naar geblokkeerde binaire bestanden zijn verwijderd. De lading van blobs uit Rust-code is geblokkeerd.
Bron: opennet.ru
