Na twee maanden ontwikkeling heeft Linus Torvalds de release van de Linux-kern 6.9 aangekondigd. Enkele van de meest opvallende wijzigingen zijn: de dm-vdo-module voor deduplicatie en compressie van blokapparaten, de modus voor directe toegang tot bestanden in FUSE, de ondersteuning voor het maken van pidfd voor afzonderlijke threads, het BPF-tokenmechanisme, de ondersteuning van Rust op ARM64-systemen, de classificatie van de Ext2-bestandssysteem als verouderd, de verwijdering van de oude NTFS-driver en de ondersteuning voor het Intel FRED-mechanisme.
In de nieuwe versie zijn er 15680 correcties door 2106 ontwikkelaars aangebracht; de patchgrootte bedraagt 54 MB (de wijzigingen betroffen 11825 bestanden, 687954 regels code zijn toegevoegd en 225344 regels zijn verwijderd). In de vorige uitgave waren er 15641 correcties door 2018 ontwikkelaars en had de patch een grootte van 44 MB. Ongeveer 42% van alle wijzigingen in 6.9 heeft betrekking op apparaatsdrivers, ongeveer 17% van de wijzigingen betreft de update van hardware-architectuur-specifieke code, 13% heeft betrekking op de netwerkstack, 7% op bestandssystemen en 4% op interne subsysteem van de kernel.
Belangrijkste vernieuwingen in de kernel 6.9:
- Opslagsubsystemen, invoer/uitvoer en bestandssystemen
- In de Device Mapper (DM) is een nieuwe handler dm-vdo (virtual data optimizer) toegevoegd, die het mogelijk maakt om op basis van bestaande blokapparaten een virtueel blokapparaat te creëren met functies zoals deduplicatie van herhalende gegevens, gegevenscompressie, uitsluiting van lege blokken en de uitbreiding van de grootte van het blokapparaat naarmate de behoefte zich voordoet (thin provisioning). Deze mogelijkheden worden op niveau van het blokapparaat gerealiseerd en zijn niet afhankelijk van het gebruikte bestandssysteem (bijvoorbeeld, met dm-vdo kunnen herhalende gegevens automatisch worden samengevoegd en informatie gecomprimeerd worden opgeslagen voor elk FS). Het gebruik van dm-vdo wordt ondersteund voor fysieke opslag tot 256TB en het creëren van logische volumes tot 4PB. Voor het beheren van vdo-partities wordt aangeraden om lvm te gebruiken. De VDO-technologie is ontwikkeld door Permabit en is open source geworden na de overname door Red Hat in 2017.
- In het FUSE-systeem, dat wordt gebruikt voor de implementatie van bestandssystemen in de gebruikersruimte, is een eerste implementatie van de ‘passthrough’-modus toegevoegd, waarmee gegevens van bestanden rechtstreeks op kernniveau kunnen worden verkregen, zonder het proces in de gebruikersruimte te doorlopen. Dit kan de prestaties in bepaalde situaties aanzienlijk verbeteren. Bijvoorbeeld, FUSE-implementaties van bestandssystemen die alleen-lezen modus werken en de toegang tot bestanden scheiden, kunnen de inhoud van bestanden uit het oorspronkelijke bestandssysteem leveren zonder deze naar het FUSE-proces te verzenden.
- De driver met de implementatie van het Ext2-bestandssysteem is opgenomen in de categorie verouderd (deprecated). Als reden wordt genoemd dat de driver alleen 32-bits tijdstempels ondersteunt in inodes, die zullen overlopen op 19 januari 2038. In plaats van de ext2-driver wordt de ext4-driver aanbevolen, die met het Ext2-bestandssysteem werkt en volledig compatibel is, maar die ook tijdstempels kan gebruiken in ext2-partities die niet onderhevig zijn aan het 2038-probleem, mits het bestandssysteem is gemaakt met inodes groter dan 255 bytes (in de ext2-driver werden 32-bits tijdstempels onafhankelijk van de grootte van de inode gebruikt).
- De oude NTFS-besturingsdriver is verwijderd, en met de release 5.15 is de nieuwe NTFS3-driver geïntroduceerd. Het is ondoelmatig gebleken om twee drivers met de implementatie van NTFS in de kernel te leveren, gezien het feit dat de oude driver al jaren niet is bijgewerkt, in erbarmelijke staat verkeert en alleen in leesmodus kan functioneren.
- In de bestandssystemen zonefs en hugetlbfs is ondersteuning toegevoegd voor het mappen van gebruikers-id's van aangekoppelde bestandssystemen, gebruikt om bestanden van een bepaalde gebruiker op een aangekoppeld vreemde partitie te koppelen aan een andere gebruiker in het huidige systeem.
- Voor NFSv4 wordt het voor beheerders mogelijk gemaakt om de open- en vergrendelstatussen van bestanden te wissen.
- Voor het Ext4-bestandssysteem worden alleen foutcorrecties en updates van de kunit-tests gemeld.
- In Btrfs is de vertaling van functies naar het gebruik van pagina-folios voortgezet.
- In het XFS-bestandssysteem is de ontwikkeling van de mogelijkheid om de fsck-tool te gebruiken voor de controle en correctie van ontdekte problemen in online modus, zonder het bestandssysteem te demonteren, voortgezet.
- In de systeemaanroep pwritev2() is een vlag RWF_NOAPPEND toegevoegd, waarmee een offset voor schrijven kan worden opgegeven, zelfs als het bestand is geopend in de modus alleen toevoegen aan het einde van het bestand.
- Nieuwe ioctl-opdrachten zijn toegevoegd: FS_IOC_GETUUID - retourneert de UUID-identificator van het opgegeven bestandssysteem, en FS_IOC_GETFSSYSFSPATH - bepaalt de locatie in /sys/fs van het opgegeven gemonteerde FS.
- De bestandssystemen efs, qnx4 en coda zijn overgezet naar het nieuwe API voor het monteren van partities.
- De implementatie van bestandsbewerkingen die worden uitgevoerd in een case-insensitive modus is verbeterd. De prestaties zijn verhoogd door eerst case-sensitive vergelijkingen uit te voeren en terug te vallen op case-insensitive zoekopdrachten. Problemen bij het monteren van overlayfs bovenop mappen met een case-insensitive modus zijn opgelost.
- Geheugen en systeemdiensten
- Ondersteuning voor het Intel FRED (Flexible Return and Event Delivery) mechanisme is geïmplementeerd, dat is ontwikkeld om de efficiëntie en betrouwbaarheid van de levering van informatie over laag-niveau gebeurtenissen te verbeteren, in vergelijking met de huidige IDT (Interrupt Descriptor Table) mechanisme. Verbetering van de prestaties en vermindering van vertragingen worden gegarandeerd door gebeurtenissen terug te geven met de processorinstructie IRET in plaats van gebeurtenissen via de IDT-tabel te verzenden. De betrouwbaarheid wordt verhoogd door de aparte verwerking van de gebeurtenisontvangst in de context van de kernel en de context van de gebruiker, bescherming tegen geneste NMI-uitvoeringen en het opslaan van alle CPU-registers die met de uitzondering zijn gerelateerd in een uitgebreid stackframe.
- De mogelijkheid is toegevoegd om de toegang tot gegevens van afzonderlijke CPU-kernen te optimaliseren door in de kernelcode genoteerde adresruimten (Named Address Spaces) te gebruiken, geïmplementeerd in GCC in de vorm van een GNU C-uitbreiding.
- In de functie pidfd_open() is de vlag PIDFD_THREAD toegevoegd, waarmee een pidfd voor afzonderlijke threads kan worden gemaakt, en niet alleen pidfd kan worden gebruikt in de context van de leider van de threadgroep. Er is ook een implementatie van een pseudo-FS voorgesteld voor toegang tot pidfd via het virtuele bestandssysteem. In tegenstelling tot procesidentificatie met behulp van pid, wordt de pidfd-identificator gekoppeld aan een specifiek proces en verandert deze niet, terwijl de PID na het beëindigen van het huidige proces aan een ander proces kan worden toegewezen.
- In het BPF-systeem is een BPF-tokenmechanisme toegevoegd, waarmee programmeurs selectief toegang tot bevoegde BPF-bewerkingen kunnen delegeren aan programma's. Hierdoor kan bijvoorbeeld een niet-bevoegd programma toegang krijgen tot specifieke BPF-subsystemen zonder volledige CAP_BPF-rechten te verlenen.
- Er is een nieuw type gedeeld geheugen bpf_arena aan het BPF-systeem toegevoegd, dat het gebied definieert dat beschikbaar is voor gedeeld gebruik door BPF-programma's en processen in de gebruikersruimte. Een nieuwe instructie, may_goto, is toegevoegd om de werking van lussen te organiseren die door de verifier kunnen worden onderbroken. Tevens is de mogelijkheid toegevoegd om willekeurige TCP SYN-cookies te genereren uit BPF-programma's en BPF-handlers te maken ter bestrijding van SYN-floods.
- De migratie van wijzigingen uit de Rust-for-Linux-tak is voortgezet, met betrekking tot het gebruik van de programmeertaal Rust als tweede taal voor de ontwikkeling van stuurprogramma's en kernelmodules (ondersteuning voor Rust is standaard niet geactiveerd en leidt niet tot het opnemen van Rust in de verplichte buildafhankelijkheden voor de kernel). Ondersteuning voor het gebruik van de programmeertaal Rust is toegevoegd voor 64-bits ARM-processors. Er is overgestapt op de release van Rust 1.76. De macro 'container_of!' is toegevoegd. In plaats van de onbetrouwbare functionaliteit 'ptr_metadata' is de stabiele methode 'byte_sub' gebruikt. Een module 'time' is toegevoegd met de functie voor tijdconversie 'msecs_to_jiffies()'.
- De mogelijkheid om bestanden af te korten (ftruncate_file) is toegevoegd aan het io_uring-systeem.
- Er is een nieuw type werqueue WQ_BH (workqueue Bottom Halves) toegevoegd voor asynchrone uitvoering van code in de context van software-interrupties, gericht op vervanging van verouderde tasklets.
- Er is een aanzienlijke herziening van het timersysteem uitgevoerd, waarbij de logica voor het selecteren van de actieve CPU-kern voor het uitvoeren van de geactiveerde timer is verbeterd, zodat niet-actieve kernen niet uit de slaapstand worden gehaald.
- De mogelijkheid om het energieverbruikmodel van de kern (EM, Energy Model) tijdens werking bij te werken, is gerealiseerd. Dit kan bijvoorbeeld worden gebruikt om de invloed van de bedrijfstemperatuur op de energie-efficiëntie van de CPU in rekening te brengen. De prestaties van de functie em_cpu_energy() zijn significant verbeterd, die nu in tests op een stationaire systeem 1.43 keer sneller wordt uitgevoerd, en in de test op het bord RockPi 4B zelfs 1.69 keer sneller.
- Ondersteuning voor het draaien van systemen op basis van de ARM64-architectuur in LPA2-modus met een 52-bits virtuele adresruimte is toegevoegd.
- Voor ARM64-systemen is ondersteuning voor continue PTE (Page Table Entry)-records geïmplementeerd, waardoor de prestaties worden verbeterd door de efficiëntie van het gebruik van de TLB (Translation Lookaside Buffer) te verhogen.
- Patches zijn aangenomen om de prestaties van het geheugensysteem te verbeteren door het aantal concurrerende blokkades in vmalloc() te verminderen.
- Voor de LoongArch-architectuur is een mechanisme voor live patching op de kernel geïmplementeerd, waarmee het mogelijk is om correcties aan de kernel toe te passen zonder opnieuw op te starten.
- Voor RISC-V-systemen is ondersteuning voor de systeemoproep membarrier() geïmplementeerd, die geheugenbarrières instelt voor actieve threads in het systeem.
- De eisen voor de versie van LLVM/Clang die kan worden gebruikt voor het bouwen van de kernel zijn verhoogd. Voor de bouw is nu minimaal LLVM 13.0.1 vereist (voorheen was de bouw in LLVM 11+ ondersteund).
- In het mechanisme 'User trace events', dat het mogelijk maakt om traceergebeurtenissen uit gebruikersprocessen te creëren voor het volgen van activiteit in de gebruikersruimte, is ondersteuning voor het exporteren van gebeurtenisinformatie in verschillende indelingen toegevoegd (USER_EVENT_REG_MULTI_FORMAT).
- In het mechanisme voor functieaanroep-tracering is de mogelijkheid toegevoegd om de status van binnenkomende functie-argumenten bij het traceren van de uitgang van de functie te volgen. De waarden van de return-operator kunnen nu worden gekoppeld aan de argumenten die bij de aanroep van de functie zijn gebruikt.
- De perf-tool heeft ondersteuning gekregen voor de 'cluster' uitvoermodus (‘perf stat -a —per-cluster’) voor het samenvoegen van statistieken over gedeelde bronnen. De mogelijkheid is geïmplementeerd om de libcapstone-bibliotheek te gebruiken voor het disassembleren van processorinstructies (‘perf script -F disasm’). Geheugenoptimalisaties zijn doorgevoerd tijdens het uitvoeren van de perf report- en perf annotate-opdrachten.
- Virtualisatie en beveiliging
- Bescherming tegen de kwetsbaarheid RFDS (Register File Data Sampling) in Intel Atom-processors is toegevoegd, waardoor het mogelijk is om restinformatie uit de registerbestanden (RF, Register File) van de processor te extraheren. Deze bestanden worden gebruikt voor de gezamenlijke opslag van registerinhoud voor alle taken op dezelfde CPU-core. Om de kwetsbaarheid te blokkeren, is een firmware-update vereist en moet de instructie VERW worden gebruikt om de inhoud van microarchitecturale buffers te wissen op het moment van terugkeer van de kernel naar de gebruikersruimte. Om de bescherming bij het opstarten van de kernel in te schakelen, kan de vlag 'reg_file_data_sampling=on' worden opgegeven. Informatie over de kwetsbaarheid en de nodige microcode voor bescherming kan worden beoordeeld in het bestand '/sys/devices/system/cpu/vulnerabilities/reg_file_data_sampling'.
- Basisbescherming voor gastsystemen is toegevoegd met behulp van de AMD SEV-SNP (Secure Nested Paging) extensie. Dit biedt een veilige werking met geneste paginatabellen in het geheugen en beschermt tegen de aanvallen 'undeSErVed' en 'SEVerity' op AMD EPYC-processors, die de beschermingsmechanismen van AMD SEV (Secure Encrypted Virtualization) kunnen omzeilen. KVM De noodzakelijke wijzigingen voor het gebruik van SNP zijn gepland voor toevoeging in de 6.10-tak.
- Modules met de implementatie van IMA (Integrity Measurement Architecture) en EVM (Extended Verification Module) zijn overgezet naar het LSM (Linux Security Modules) framework. Dit heeft, zonder verlies van functionaliteit, de code aanzienlijk vereenvoudigd, dubbele functionaliteit samengevoegd en gebruik gemaakt van de beschikbare standaardmogelijkheden via LSM. De IMA-module is bedoeld voor het controleren van de integriteit van de componenten van het besturingssysteem op basis van digitale handtekeningen en hashes. De EVM-module maakt het mogelijk om uitgebreide bestandsattributen (xattrs) te beschermen tegen aanvallen die gericht zijn op het verstoren van hun integriteit (EVM voorkomt offline-aanvallen waarbij een aanvaller metadata kan wijzigen, bijvoorbeeld door op te starten vanaf zijn eigen opslag).
- De systeemoproepen lsm_list_modules(), lsm_get_self_attr() en lsm_set_self_attr() zijn herzien voor betere compatibiliteit met 32-bits omgevingen. Deze zijn bedoeld voor het opvragen van de lijst van geladen LSM-modules (Linux Security Modules) en voor het verkrijgen/wijzigen van LSM-module-attributen. Deze wijziging verstoort de achterwaartse compatibiliteit, maar aangezien de nieuwe systeemoproepen zijn toegevoegd in de vorige kernelrelease en voorlopig niet in applicaties worden gebruikt, vond Linus Torvalds dat de wijziging acceptabel was.
- Er is geprobeerd om het gebruik van het UBSAN-mechanisme (Undefined Behavior Sanitizer) te herstarten. Het probleem is dat compilers integer-overflows van teken- en ongetekende typen verschillend behandelen. Teken-overflows en pointer-overflows vallen onder de categorie van ongedefinieerd gedrag, terwijl ongetekende overflows naar modulus 2n worden afgeknipt, waarbij alleen de laagste bits van het resultaat behouden blijven ("wrap-around") en niet onder ongedefinieerd gedrag vallen. Om situaties met ongedefinieerd gedrag te vermijden, wordt de kernel gecompileerd met de optie "-fno-strict-overflow", wat leidt tot het gebruik van "wrap-around" voor alle integer-overflows. GCC en Clang kunnen sommige problemen niet goed diagnosticeren bij gebruik van de vlag "-fno-strict-overflow", en de inschakeling van UBSAN is gericht op samenwerking met compiler-ontwikkelaars om vals positieven te elimineren en integer-overflows op te sporen op plaatsen waar geen expliciete controles zijn.
Voor het controleren van mogelijke overflows in de kernel worden constructies zoals "var + offset PAGE_SHIFT) < pgoff){..}"), die zijn gebaseerd op compileren met de vlag "-fno-strict-overflow" en niet de gehele code dekken waarin potentieel een overflow kan optreden. Het probleem is dat het gebruik van UBSAN dergelijke controles leidde tot een groot aantal vals alarmen, waardoor UBSAN in 2021 moest worden uitgeschakeld. In de vernieuwde implementatie is voorgesteld om speciale annotaties __signed_wrap en __unsigned_wrap te gebruiken, evenals kant-en-klare macro's met controles zoals add_would_overflow(a, b) en add_wrap(a, b), die het gebruik van integer-overflows door ontwikkelaars scheiden van het optreden van toevallige overflows die kunnen leiden tot kwetsbaarheden. Het voorstel voor een grotere herschrijving van de kernel met de invoering van extra type-definities is door Linus Torvalds afgewezen.
- Netwerk subsysteem
- In de netwerksubsystemen is gewerkt aan het verminderen van de concurrentie voor lock-containment ("lock contention", de poging om een lock te verkrijgen die door een andere thread wordt vastgehouden). Het gebruik van RTNL-locks is verminderd.
- De mogelijkheid om actieve socketpolling (busy polling) in te schakelen in de context van individuele epoll-aanroepen is toegevoegd. De grootte van de pool en de budgetparameters kunnen apart van de standaard systeemparameters worden ingesteld.
- De net_hotdata-structuur is geïmplementeerd om de efficiëntie van de caching van de meest gebruikte netwerkconfiguratievariabelen te verbeteren.
- In MPTCP is ondersteuning toegevoegd voor het instellen van de TCP_NOTSENT_LOWAT-optie voor sockets, waarmee de grootte van de verzendbuffer kan worden beperkt. In de MCTP-socket API is ondersteuning toegevoegd voor netwerknummers ('network ID'), zodat meerdere niet-overlappende MCTP-netwerken op één host kunnen worden gebruikt.
- In IPSec is ondersteuning toegevoegd voor de omleiding van ICMP-berichten met foutinformatie (RFC 4301).
- Het proces voor het scannen van routes met een verlopen tijd is versneld.
- De werking van XDP is versneld door het vermijden van de toewijzing van grote geheugensegmenten.
- De mogelijkheid om metadata aan netconsole-berichten toe te voegen, is toegevoegd.
- In Netfilter is het toegestaan om tabeldefinities uit de gebruikersruimte te definiëren, die aan de achtergrondbeheerprocessen zijn gekoppeld en niet automatisch worden verwijderd na de beëindiging van de gebruikersapplicatie.
- In nftables is het toevoegen van elementen aan sets met samengevoegde bereiken versneld.
- Apparatuur
- In de i915-driver is voortgegaan met de implementatie van ondersteuning voor Intel LunarLake (Xe 2) chips. Nieuwe PCI-identificatienummers voor apparaten op basis van Intel Arrow Lake en Alder Lake N zijn toegevoegd. Voor Displayport is ondersteuning voor tunneling (DP tunneling) en bandbreedteallocatie (bandwidth allocation) toegevoegd. Voor alle platforms is de fastboot-modus ingeschakeld. Ondersteuning voor debug-uitvoer is toegevoegd, gekoppeld aan afzonderlijke apparaten.
- In de AMDGPU-driver zijn voorbereidingen getroffen voor de implementatie van de ondersteuning van de GPU AMD RDNA3.5 en RDNA4. Ondersteuning is toegevoegd voor ATHUB 4.1, LSDMA 7.0, JPEG DPG, IH 7.0, HDP 7.0, VCN 5.0, SMU 13.0.6, NBIO 7.11, SDMA 6.1, MMHUB 3.3, DCN 3.5.1, NBIF 6.3.1, VPE 6.1.1 en het RAS ACA-framework. Een freesync_video-parameter is aan de kernelmodule toegevoegd om experimentele ondersteuning voor de optimalisatie van de schakeling van videomodi met behulp van FreeSync-technologie in te schakelen.
- In de Nouveau-driver is de schermbedieningscode omgezet naar het gebruik van de kmemdup()-functie.
- De werkzaamheden aan de drm-driver (Direct Rendering Manager) Xe voor GPU's op basis van de Intel Xe-architectuur, die worden gebruikt in Intel Arc grafische kaarten en geïntegreerde graphics, zijn voortgezet vanaf de Tiger Lake-processors.
- DRM-driver toegevoegd voor Mediatek MT8188 VDOSYS1-chips.
- Instellingen met betrekking tot videopodsysteem zijn verplaatst naar de sectie CONFIG_VIDEO.
- Ondersteuning toegevoegd voor ARM64 SoC: Mediatek MT7981B (Filogic 820), MT7988A (Filogic 880), NXP i.MX8DXP, Renesas R8A779G2 (R-Car V4H ES2.0), R8A779H0 (R-Car V4M), TI J722S.
- Ondersteuning toegevoegd voor ARM-platforms en -apparaten: Android-telefoons op basis van de Tegra30-chip, Chromebook-modellen op basis van Mediatek MT8186, NAS, tablets en gameconsoles op basis van Rockchips RK35xx, White Hawk-borden op basis van Renesas SoC, borden op basis van Qualcomm SM8550 (Snapdragon 8 Gen 2), Apalis Evaluation Board, Sielaff i.MX6 Solo Board, Samsung Galaxy Tab 4 10.1 LTE.
- De code voor de geluidsinfrastructuur ALSA is gerefactoreerd. Ondersteuning toegevoegd voor geluidssystemen Microchip SAM9x7, NXP i.MX95 en Qualcomm WCD939x. In de SoundWire-driver is ondersteuning voor ASoC met AMD ACP 6.3 geluidsspecial processors toegevoegd, en voor Intel-systemen is een DSPless-modus gerealiseerd. Extra geluidscodecs Cirrus HD zijn ondersteund. In de virtio-driver is het beheer van geluidsapparaten verbeterd.
- Ondersteuning toegevoegd voor Ethernet-controllers Marvell Octeon PCI Endpoint NIC VF en Intel E825-C 100G.
Tegelijkertijd heeft de Latijns-Amerikaanse Vrije Software Stichting een volledig vrij kernel 6.9 - Linux-libre 6.9-gnu gepresenteerd, dat is gereinigd van firmware- en driver-elementen die niet-vrije componenten of code bevatten waarvan het gebruik is beperkt door de fabrikant. In de release 6.9 is de code voor het schoonmaken van blobs in de drivers amdgpu, ath12k, adreno, btusb en r8169 bijgewerkt. De nieuwe driver ptp_fc3 is opgeschoond. Namen van blobs zijn schoongemaakt in dts-bestanden (devicetree) voor de Aarch64-architectuur. Problemen met het schoonmaken van de i915-driver die leidden tot bevriezing tijdens de initialisatie zijn opgelost. Wijzigingen zijn aangebracht met betrekking tot de verwerking van blobs die worden geleverd als hex dumps.
Bron: opennet.ru
