Release van de Linux-kernel 7.2

Na het ontwikkelen van twee maanden heeft Linus Torvalds de release van de Linux-kernel 7.2 gepresenteerd. Enkele van de meest opvallende veranderingen zijn: de USB4STREAM data streaming mechanisme, prestatie-optimalisaties voor btrfs, xfs en ext4, voortzetting van het verwijderen van code ter ondersteuning van de i486 CPU, de mogelijkheid om geneste scheduler SCHED_EXT te creëren, verlaagd geheugengebruik in de swap-subsysteem, versnelling van ongeadresseerde kanalen, ondersteuning voor Intel MBEC en AMD GMET extensies in KVM, verwijdering van het AppleTalk protocol, en initiële ondersteuning voor HDMI 2.1 FRL in de AMDGPU driver.

Belangrijkste vernieuwingen in de kernel 7.2 (1, 2, 3):

  • Opslagsubsystemen, invoer/uitvoer en bestandssystemen
    • In het iomap mechanisme is de overbodige aanroep van de functie memset voor reeds voltooide iteraties in de functie iomap_iter() verwijderd, wat bij hoge input/output-intensiteit op snelle NVMe-opslag in de tests het aantal input/output-bewerkingen per seconde (IOPS) met 5% heeft verhoogd bij het gebruik van het bestandssysteem ext4 en xfs.
    • In XFS is de ondersteuning voor gezoneerde opslagapparaten (verdeling in zones van blokgroepen of sectoren, waaraan alleen sequentiële toevoegingen van gegevens zijn toegestaan met een volledige update van de gehele blokgroep) als stabiel verklaard.
    • In Btrfs is standaard ondersteuning voor grote pagina's geheugen (large folios) ingeschakeld, waardoor overhead wordt verlaagd en de prestaties tijdens intensieve sequentiële input/output worden verbeterd. Er is experimentele ondersteuning toegevoegd voor enorme pagina's (‘huge folios’) met een grootte tot 2 MB. Een nieuwe ioctl GET_CSUMS is toegevoegd voor het verkrijgen van informatie over checksums in gebruikersruimte, bijvoorbeeld voor de mkfs-tool en optimalisatie van deduplicatie. De prestaties van sequentiële gegevensschrijvingen zijn met 15% verbeterd en directe input/output met 59%.
    • In het ext4 bestandssysteem is de implementatie van het "fast commit" mechanisme aanzienlijk herzien om het optreden van race- en deadlock-situaties te voorkomen. Export van statistieken voor inode-snapshots is toegevoegd via /proc/fs/ext4/*/fc_info. De prestaties van directory hash-berekeningen zijn geoptimaliseerd (voor namen van 255 tekens is het versneld met bijna twee keer, 64 tekens met 27%, en 32 tekens met 11%).
    • In F2FS is ondersteuning voor het teruggeven van fserror-fouten toegevoegd, waarmee problemen met het bestandssysteem vanuit gebruikersruimte kunnen worden gevolgd. De tijd die in de context van interruptverwerking wordt doorgebracht, is verminderd.
    • In Device Mapper (DM) is een nieuwe handler dm-inlinecrypt toegevoegd voor het transparant versleutelen en ontsleutelen van blokapparaten met hardware met inline-encryptie functionaliteit.
    • Er is documentatie aangeboden voor het toevoegen van nieuwe bestandssystemen aan de kernel.
    • In NFS is de standaard blokgrootte verhoogd naar 4 MB op systemen met minimaal 16 GB RAM (voor handmatige wijziging van de blokgrootte kan /proc/fs/nfsd/max_block_size worden gebruikt). Ondersteuning voor directory delegation is toegevoegd, waardoor bepaalde operaties met deze directory gedurende een bepaalde tijd kunnen worden uitgevoerd zonder dat de statuswijziging gecontroleerd hoeft te worden. de server.
    • In de SMB-server is ondersteuning toegevoegd voor bestanden die in gecomprimeerde vorm worden opgeslagen, evenals compressie van gegevens tijdens het verzenden via het netwerk.
    • In de nieuwe implementatie van NTFS (ntfsplus) is ondersteuning toegevoegd voor Windows-symbolische links en is ervoor gezorgd dat verschillende soorten metadata-corruptie correct worden behandeld.
    • De fscache backend voor het cachen van gegevens in het EROFS (Enhanced Read-Only File System) bestandssysteem is verwijderd, die twee jaar geleden als verouderd was verklaard.
    • In het Ceph bestandssysteem is ondersteuning toegevoegd voor handmatige reset van client sessies.
    • In het 9P bestandssysteem zijn optimalisaties aangebracht die de snelheid in scenario's zoals projectbouw hebben verbeterd.
    • In de systeemaanroep file_getattr() zijn vlaggen toegevoegd voor het verkrijgen van informatie over de hoofdlettergevoeligheid in het bestandssysteem. De vlag FS_XFLAG_CASEFOLD geeft aan dat bestandsnamen zonder hoofdlettergevoeligheid worden gecontroleerd, en de vlag FS_XFLAG_CASENONPRESERVING geeft aan dat bij het maken van nieuwe bestandsnamen geen hoofdlettergevoeligheidsinformatie wordt behouden. Deze vlaggen kunnen worden toegepast in NFS-clients die zonder hoofdlettergevoeligheid werken.
    • In de systeemaanroep openat2() is de vlag O_EMPTYPATH toegevoegd, die het doorgeven van een leeg bestands pad mogelijk maakt. In dat geval wordt het pad naar het te openen bestand bepaald op basis van de doorgegeven bestandsdescriptor.
    • In de systeemaanroep openat2() is de vlag OPENAT2_REGULAR toegevoegd, die alleen het openen van gewone bestanden toestaat (bij een poging om een speciaal bestand te openen, bijvoorbeeld een socket, kanaal of apparaat, wordt de fout EFTYPE geretourneerd).
  • Geheugen en systeemdiensten
    • De USB4STREAM-mechanisme is geïmplementeerd voor gegevensoverdracht tussen computers die zijn verbonden via USB4-poorten. Een apparaat \/dev\/tbstreamX is toegevoegd, waarmee je gegevens kunt lezen en schrijven met de standaardfuncties read() en write(), vergelijkbaar met het lezen en schrijven naar bestanden. Bijvoorbeeld, op één host kan informatie worden verzonden met het commando "echo hello > \/dev\/tbstream0", terwijl deze op een andere kan worden gelezen met "cat \/dev\/tbstream0". Het USB4STREAM-mechanisme kan worden gecombineerd met de mogelijkheid om een netwerkverbinding via een USB4-kabel (thunderbolt_net) in te stellen of afzonderlijk worden gebruikt voor gegevensoverdracht tussen applicaties die geen netwerksockets ondersteunen.
    • De tweede serie wijzigingen is geïmplementeerd om de ondersteuning voor i486-processors te beëindigen. Meer dan 13 regels code, gerelateerd aan de emulator voor drijvende-komma-berekeningen voor processors zonder FPU, zijn verwijderd. De ondersteuning voor i486-processors zonder hardwarematige CX8-operaties (vergelijk en wissel 8 bytes) en TSC (de CPU-cyclusteller die in de taakplanner wordt gebruikt) is verwijderd, waarvan de emulatorcode ook is verwijderd.
    • De ondersteuning voor AMD Geode-processors, die worden gebruikt in de OLPC XO-1 computer, is als weeskind (orphaned) verklaard.
    • Ondersteuning is toegevoegd voor de update van de implementatie van het Intel TDX (Trusted Domain Extensions) mechanisme, dat wordt gebruikt voor het versleutelen van het geheugen van gastsystemen. TDX is geïmplementeerd in de vorm van een speciale software runtime-module, die tijdens de opstart door de BIOS vanuit Flash-geheugen naar RAM wordt overgebracht. Mogelijkheden zijn toegevoegd aan de kernel voor het beheren van deze module en voor het vervangen door een nieuwere versie op een draaiend systeem zonder dat een herstart nodig is.
    • Een nieuwe GPU resource distributiescheduler (Fair GPU scheduler) is geïmplementeerd, die wordt gebruikt om de volgorde van uitvoering van GPU-taken, verzonden door processen die GPU's gebruiken, te bepalen. In plaats van de traditionele FIDO-queue voor GPU-verzoeken, maakt de nieuwe scheduler gebruik van mechanismen voor eerlijke toewijzing van middelen, geïnspireerd door de CFS (Completely Fair Scheduler), die een planningssysteem toepast met een wachttijd voor het uitvoeren van de volgende taak. Het meest merkbare effect van de nieuwe scheduler doet zich voor bij het gelijktijdig uitvoeren van interactieve taken die intensief gebruik maken van de GPU. Op het laatste moment voor de release van kernel 7.2 werd de inschakeling van de Fair GPU scheduler teruggedraaid en werd de oude FIFO-scheduler hersteld vanwege de noodzaak om een regressiefout te debuggen die leidde tot prestatieverlies en 100% belasting van de GPU bij het uitvoeren van bepaalde games in Proton.
    • Wijzigingen in de eBPF-subsystemen: De mogelijkheid om één BPF-programma aan meerdere tracepoints te koppelen is toegevoegd. Voor BPF-programma's die aan tracepoints zijn gekoppeld, is toegang tot het geheugen van componenten die in de gebruikersruimte draaien toegevoegd, met een correcte verwerking van toegang tot niet-toegewezen geheugenpagina's (page fault). De systeemaanroep bpf() ondersteunt nu standaardattributen (log_buf, log_size, log_level en log_true_size), wat de uniformiteit van de overdracht van metadata in alle BPF-commando's bevordert, zonder beperking tot de commando's BPF_PROG_LOAD, BPF_BTF_LOAD en BPF_MAP_CREATE. De beperking op het doorgeven van meer dan 5 parameters in BPF-functies is verwijderd. Bovendien is veilige toegang tot gedeeld geheugen bpf_arena mogelijk gemaakt zonder risico op toegang tot niet-toegewezen geheugenpagina's (page fault). Een nieuwe variant van de BPF hash map-structuur is geïmplementeerd die dynamische wijziging van de grootte mogelijk maakt.
    • De output van '/proc/interrupts' met statistieken over onderbrekingen is geoptimaliseerd, de structuren voor het opslaan van onderbrekings tel-waarden zijn gemoderniseerd en er is caching toegevoegd.
    • De generatie van het bestand '/proc/filesystems', dat wordt gebruikt in libselinux, is versneld.
    • In de takenplanner is ondersteuning voor load balancing tussen CPU-kernen geïmplementeerd, rekening houdend met de status van de interne cache van de processor. De planner probeert nu processen te groeperen die gemeenschappelijke bronnen gebruiken, zoals threads van één proces, zodat ze gebruik kunnen maken van dezelfde bovenste cache, wat de efficiëntie van gegevensbenadering verhoogt door de kans te vergroten dat de benodigde gegevens in de cache aanwezig zijn.
    • In het SCHED_EXT-mechanisme, dat BPF mogelijk maakt voor het ontwikkelen van CPU-planners, is de implementatie voortgezet van de mogelijkheid om geneste planners (sub-planners) te creëren, waarmee voor elke cgroup een eigen takenplanner kan worden ingezet.
    • De overdracht van wijzigingen uit de Rust-for-Linux-tak gaat door, 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 de opname van Rust in de verplichte bouwafhankelijkheden van de kernel). De mogelijkheid om Rust in de kernel te gebruiken is geïmplementeerd voor de s390-architectuur. Het pakket 'zerocopy' met snelle geheugenbewerkingsprimitive voor code in 'unsafe'-modus is inbegrepen.
    • De minimale versie van de LLVM-tooling, die nodig is voor het bouwen van de kernel, is verhoogd naar 17.0.1.
    • In de minimalistische C-bibliotheek nolibc, die bij de bronbestanden van de Linux-kernel wordt geleverd en een wrapper biedt voor basis systeemoproepen, is ondersteuning voor de OpenRISC- en 32-bit PA-RISC-architecturen geïmplementeerd.
    • De swap-subsystemen zijn geoptimaliseerd voor betere prestaties en verlaagd geheugenverbruik in het subsystem zelf door overhead te elimineren bij het opslaan van statische metadata en door de omgang met anonieme en gedeelde geheugen bij het gebruik van te boeken. Het verlaagde geheugenverbruik is opmerkelijk, bijvoorbeeld bij het monteren van een swap-partitie van 1 TB is er ongeveer 512 MB minder geheugenverbruik waar te nemen.
    • De efficiëntie van het geheugenuitdrijvingsmechanisme, dat geheugengebieden verwijdert of naar het swap-geheugen verplaatst om geheugen vrij te maken wanneer er een tekort is in het systeem, is verhoogd. Bij bepaalde belastingtypes, zoals het testen van MongoDB met YCSB (Yahoo! Cloud Serving Benchmark), is er een prestatiewinst tot 30% waar te nemen.
    • In het samenstellingsysteem is de opdracht ‘make sbom’ toegevoegd voor het genereren van SBOM-lijsten (Software Bill Of Materials), die de componenten, bibliotheken en afhankelijkheden reflecteren die betrokken zijn bij de huidige kernelbuild, evenals informatie over hun licenties, verkregen uit de SPDX-kopteksten in de codebestanden.
    • In de implementatie van ongebruikte kanalen (pipe) is de werking met blokkeringen geoptimaliseerd (geheugenallocatie-operaties zijn buiten het bereik van de blokkering geplaatst), wat de doorvoer van ongebruikte kanalen met 21-48% verhoogde en de latentie met 17-33% verlaagde.
  • Virtualisatie en beveiliging
    • In het slab-geheugenallocatiemechanisme (slab allocator) is de mogelijkheid toegevoegd om geheugenallocatietokens (Allocation Tokens) te gebruiken, die zijn geïmplementeerd in de Clang 22-compiler. Tokens maken het mogelijk om geheugenallocatie-operaties te markeren met unieke identificaties en garanderen een gescheiden plaatsing van verschillende typen objecten om het misbruik van kwetsbaarheden door buffer-overflows te compliceren (door het scheiden is het niet zo eenvoudig om een buffer-overflow in één type objecten te gebruiken om andere typen objecten te beschadigen).
    • Het AF_ALG-mechanisme, dat is gebruikt in de Copy Fail-kwetsbaarheid voor het modifieren van gegevens in de pagina-cache, is obsoleet verklaard en staat op de lijst voor verwijdering in een van de toekomstige versies. AF_ALG stelt hardwareversnellers in staat voor cryptografische berekeningen in de Crypto API van de kernel, maar wordt in vrij specifieke situaties toegepast. In kernel 7.2 is de ondersteuning voor asynchrone invoer/uitvoer in AF_ALG, oude stuurprogramma's en de zero-copy-mechanisme in de implementatie van skcipher en aead verwijderd. Alleen software-implementaties van cryptografische algoritmen zijn overgebleven, en de ondersteuning voor hardwarecryptoversnellers in de crypto API van de kernel is verwijderd, aangezien AF_ALG de aanvalsvlak aanzienlijk vergroot, maar geen prestatievoordelen biedt in vergelijking met de implementatie van cryptografie in de gebruikersruimte. AF_ALG is gebruikt in de Cryptsetup-toolset, maar de ondersteuning ervan is onlangs verwijderd in uitgave 2.8.7.
    • In het IMA-mechanisme (Integrity Measurement Architecture), dat een externe service in staat stelt de staat van de kernel-subsystemen te verifiëren om hun authentiekheid te waarborgen, is ondersteuning toegevoegd voor het exporteren van interne tabellen met meetresultaten naar de gebruikersruimte met verwijdering uit de kernelbuffers om geheugen te besparen.
    • In de Landlock-module, die niet-privileged programma's de middelen biedt om het gebruik van kernobjecten in Linux (bestandenhiërarchieën, netwerksockets, ioctl, enz.) te beperken, is ondersteuning toegevoegd voor het beheren van de toegang tot UDP-sockets, evenals de mogelijkheid om selectief te voorkomen dat informatie over objectblokkeringen in de logboekuitvoer terechtkomt, om een ongecontroleerde groei van de log te voorkomen door niet-essentiële informatie.
    • De kernel is bevrijd van het gebruik van de functie strncpy(), die een bepaald aantal bytes uit een binnenkomende tekenreeks kopieert. Het gebruik van strncpy() creëerde het risico op fouten door het weglaten van de nul-terminator aan het einde van de reeks of door blanke ruimte met nullen in te vullen. In plaats van strncpy() worden de functies strscpy() en strscpy_pad() aanbevolen voor het kopiëren van nul-terminerende reeksen, evenals strtomem_pad(), memcpy_and_pad() en memcpy() voor het kopiëren van reeksen van bekende vaste grootte. Het werk om de kernel te ontdoen van het gebruik van strncpy() begon in 2020 en vereiste de aanname van 362 wijzigingen van 70 ontwikkelaars.
    • In de hypervisor KVM is ondersteuning toegevoegd voor de Intel MBEC (Mode-Based Execution Control) en AMD GMET (Guest-Mode Execution Trap) extensies, die het mogelijk maken om in de geheugenvertalingen apart de uitvoeringsrechten voor de kernel en de gebruikersruimte in gastsystemen te verwerken. Voorheen lieten de Intel- en AMD-hardwarevirtualisatie-extensies alleen toe om geheugenpagina's als uitvoerbaar te markeren met één bit, met softwarematige scheiding van rechten voor de kernel en de gebruikersruimte op hypervisor-niveau. Het gebruik van MBEC en GMET geeft de mogelijkheid om autorisatiecontroles aan de hypervisorzijde te elimineren en de intensiteit van bronneneisende VMexit-overdrachten van het gastensysteem naar de hypervisor aanzienlijk te verminderen.
  • Netwerk subsysteem
    • De implementatie van de TCP-AO (TCP Authentication Option, RFC 5925) extensie is overgezet naar het gebruik van de nieuwe cryptografische bibliotheek libcrypto, wat het mogelijk maakt om de code te vereenvoudigen en de efficiëntie te verhogen. TCP-AO maakt het mogelijk om TCP-headers te verifiëren met MAC-codes (Message Authentication Code), met gebruik van modernere algoritmen HMAC-SHA-1-96 en AES-128-CMAC-96 in plaats van de eerder beschikbare TCP-MD5-optie op basis van het verouderde MD5-algoritme.
    • Het aantal substreams dat wordt ondersteund voor Multipath TCP (MPTCP) is verhoogd van 8 naar 64.
    • Het werk aan het verminderen van het gebruik van de globale blokkering rtnl_lock in de netwerkstack van de kernel is voortgezet.
    • De implementatie van de AppleTalk-protocolstack is uit de kernel verwijderd, die van 1985 tot de jaren '90 op Apple-computers werd gebruikt en werd vervangen door TCP/IP. Daarnaast zijn componenten van de ATM-datatrasmissietechnologie verwijderd die niet gerelateerd zijn aan PPPoATM, evenals ARCnet-netwerkinterfaces gebaseerd op ISA- en PCMCIA-bussen, Bluetooth-adapters met een PCMCIA-interface, TLS-versnellers van Chelsea, de code voor integratie van TLS met sockmap en de ondersteuning voor frequentiebereiken van 5/10 MHz in de draadloze stack cfg80211/mac80211. Vanwege onoplosbare problemen met blokkeringen en het ontbreken van onderhoud is de specifieke implementatie van TLS-verwerkingsversnelling op basis van TCP Offload Engine verwijderd (de meer gangbare implementatie van TLS offload is behouden). De code voor compatibiliteit met 32-bits x_tables op 64-bits systemen is gedeactiveerd en gepland voor verwijdering.
    • In de pppoe-driver is ondersteuning toegevoegd voor de mechanismen GRO (Generic Receive Offload) en GSO (Generic Segmentation Offload) voor hardwarematige versnelling van het herbouwen en segmenteren van pakketten. Het gebruik van GRO en GSO maakt een aanzienlijke toename van de doorvoersnelheid mogelijk voor inkomend verkeer; bijvoorbeeld op MediaTek MT7621-apparaten is de maximale doorvoersnelheid gestegen van 130 Mbit/s naar 630 Mbit/s.
  • Apparatuur
    • In de AMDGPU-driver is de initiële ondersteuning voor de HDMI 2.1 FRL (Fixed Rate Link) technologie toegevoegd, waardoor ongecomprimeerde video in 4K/120Hz en 8K/60Hz kan worden verzonden. Eerder was het niet mogelijk om HDMI 2.1 te implementeren in open-source drivers vanwege de licentievereisten van het HDMI Forum, maar nu is het AMD gelukt om een dergelijke implementatie overeen te komen.
    • In de i915-driver is ondersteuning toegevoegd voor het instellen van de achtergrondkleur door de displaycontroller. De parameter pin_params.needs_low_address is geïmplementeerd.
    • Het werk aan de drm-driver (Direct Rendering Manager) Xe voor GPU's op basis van de Intel Xe-architectuur, die wordt gebruikt in Intel's Arc-videokaarten en geïntegreerde grafische kaarten, is voortgezet, beginnend met de Tiger Lake-processors. Er is initiële ondersteuning toegevoegd voor het CRI (Crescent Island) platform. Voor dGPU-platformen is de Xe3p systeemcontroller geïmplementeerd.
    • In de Nouveau-driver zijn problemen opgelost met de NVIDIA GA100 GPU.
    • In de v3d-driver is de mogelijkheid toegevoegd om het energieverbruik van de v3D GPU op Raspberry Pi-borden te beheren.
    • De integratie van de Nova drivercomponenten voor NVIDIA GPU's, uitgerust met GSP-firmware, die vanaf de NVIDIA GeForce RTX 2000-serie op basis van de Turing-microarchitectuur wordt gebruikt, is voortgezet. De driver is geschreven in Rust. Ondersteuning voor de NVIDIA GA100 en de Hopper en Blackwell series is toegevoegd.
    • Ondersteuning voor ARM-platforms, SoC's en apparaten is toegevoegd: Apple t8122 (M3), Motorola Edge 30, Nothing Phone 3a, Google Pixel 3a XL, Qualcomm Dragonwing IPQ9650, Huawei Hawi, ZTE zx297520v3, Renesas R-Car M3Le, ASPEED AST27xx, Cortina Gemini, NXP i.MX6/8/9, NXP LX2160A, TI K3 AM62x.

Tegelijkertijd heeft de Latijns-Amerikaanse Free Software Foundation een volledig vrij kernelalternatief 7.2 gevormd — Linux-libre 7.2-gnu, gezuiverd van firmware- en driver-elementen die niet-vrije componenten bevatten of waarvan de gebruiksgebied door de fabrikant is beperkt. In release 7.2 zijn nieuwe drivers rt722-sdca en tac5xx2 schoon gemaakt van blobs. De schoonmaakcode in de drivers amdgpu, nova core, qcom iris, q6v5, iwlwifi, amdxnda, adreno, r8152 en mt792x is bijgewerkt. Er zijn aanpassingen aan de interfaces voor het laden van firmware uitgevoerd. De namen van blobs zijn schoongemaakt in dts-bestanden (devicetree) voor ARM-chips.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster