Na twee maanden ontwikkeling heeft Linus Torvalds gepresenteerd de release van de kernel Linux 7.0. Onder de meest opvallende veranderingen: regels voor het gebruik van AI-assistenten, de integratie van Rust in de belangrijkste functies van de kernel, verbeterde swap-prestaties, standaard inschakelen van de PREEMPT_LAZY-modus, ondersteuning voor filters voor io_uring-operaties, een nieuwe FS Nullfs, fserror-infrastructuur, monitoringtools voor XFS, ondersteuning voor remapping in Btrfs, standaard inschakelen van NFS-versie 4.1, integratie van de post-kwantum cryptografie-algoritme ML-DSA, activatie van AccECN in de netwerksubsystemen, en initiële ondersteuning voor WiFi 8.
Nummer 7.0 is toegewezen omdat er in de 6.x-tak voldoende releases zijn verzameld om het eerste cijfer van het versienummer te veranderen (ten tijde van de release 6.0 werd deze direct na 5.19 gevormd). De wijziging van de nummering gebeurt om esthetische redenen en is een formele stap, die de ongemakken door het samenvoegen van een groot aantal releases in de serie wegnneemt.
De nieuwe versie bevat 15624 correcties van 2477 ontwikkelaars, de patchgrootte is 56 MB (de wijzigingen hebben betrekking tot 18053 bestanden, 704060 regels code zijn toegevoegd, 278132 regels zijn verwijderd). In de vorige release waren er 15657 correcties van 2237 ontwikkelaars, met een patchgrootte van 52 MB. Ongeveer 51% van alle veranderingen in 7.0 heeft betrekking op stuurprogramma's, ongeveer 11% van de wijzigingen betreft de update van hardware-specifieke code, 14% heeft betrekking op de netwerkinfrastructuur, 5% op bestandssystemen en 3% op interne subsysteem van de kernel.
Belangrijkste innovaties in de kernel 7.0 (kernelnewbies.org, lwn.net, OpenNET):
- Opslagsubsystemen, invoer/uitvoer en bestandssystemen
- De fserror-infrastructuur is geïmplementeerd en is toegevoegd API voor het verkrijgen van informatie over invoer-/uitvoerfouten en metadata-corruptie bij het werken met bestanden. De voorgestelde infrastructuur verenigt in bestandssystemen de overdracht van foutmeldingen naar de gebruikersruimte via het fsnotify-mechanisme.
- In XFS zijn toegevoegd Nieuwe mogelijkheden voor het monitoren van de toestand van het bestandssysteem vanuit de gebruikersruimte. De ioctl-operatie XFS_IOC_HEALTH_MONITOR is voorgesteld, die een bestandsdescriptor retourneert waarlangs informatie over storingen, gerelateerd aan metadata-corruptie of I/O-fouten, kan worden verkregen. Daarnaast kan de status van het bestandssysteem, zoals ontkoppeling en afsluiting, worden gevolgd. Er is ook een service op de achtergrond voorgesteld, beheerd via systemd, genaamd xfs_healer, die gebeurtenissen over de status van het bestandssysteem vanuit de gebruikersruimte verwerkt en indien nodig automatisch wordt gestart. herstelprocedures.
- De Btrfs-bestandssysteem heeft experimentele ondersteuning toegevoegd voor de 'remap tree' structuur (remap tree), die in de toekomst kan worden gebruikt als een tussenlaag bij I/O-bewerkingen. Het idee achter deze toegevoegde functie is dat na het verplaatsen van gegevens op de schijf, in plaats van het bijwerken van alle gerelateerde data-structuren, de oude en nieuwe datadressen worden bewaard in de aanvullende 'remap tree' structuur, waarna bij toegang tot gegevens de adressen worden vervangen. Deze nieuwe benadering wordt gepresenteerd als betrouwbaarder en flexibeler, en vereenvoudigt ook de verdere uitbreiding van de functionaliteit van Btrfs.
- In Btrfs geïmplementeerd ondersteuning voor directe invoer/uitvoer in situaties waarin de blokgrootte groter is dan de paginagrootte in het systeem.
- In het pakket is ingeschakeld een nieuw bestandssysteem Nullfs, dat kan worden gebruikt als een stopcontact voor het root-bestandssysteem. Het Nullfs-bestandssysteem is altijd leeg, bevat geen gegevens en ondersteunt geen wijzigingen. Het doel van Nullfs is om te dienen als het startbestandssysteem om het opstartproces van het systeem te vereenvoudigen; bovenop Nullfs kunnen vervolgens andere bestandssystemen worden gemonteerd en wordt de systeemaanroep pivot_root() gebruikt om het root-bestandssysteem te wisselen in plaats van de inhoud van initramfs te wissen en het bijbehorende root-bestandssysteem te gebruiken.
- Geïmplementeerd de update van informatie over de tijd van bestandwijzigingen in niet-blokkerende modus. Eerder gaf de aanroep file_update_time_flags() met de IOCB_NOWAIT-vlag een foutmelding -EAGAIN, wat het moeilijk maakte om directe schrijfoperaties in niet-blokkerende modus uit te voeren.
- In bestandssystemen is ondersteuning opgenomen als afzonderlijke inschakelopties vertaald ondersteuning voor notificatie-locks (lease). Standaard wordt een dergelijk mechanisme nu niet geactiveerd vanwege problemen met FS, die oorspronkelijk niet zijn ontworpen voor gebruik. Bijvoorbeeld, FS 9p en cephfs ondersteunen het niet.
- In het EROFS (Extendable Read-Only File System), dat is bedoeld voor gebruik op partities die alleen-lezen zijn, wordt standaard het LZMA-algoritme voor compressie ingezet. Optioneel zijn de algoritmen DEFLATE en Zstandard beschikbaar, die niet langer als experimenteel worden aangeduid. Er is samenwerking gerealiseerd voor pagina-cache (page-cache) vermeldingen voor identieke bestanden in aparte EROFS FS.
- Verwijderd de laptop_mode, die energie bespaart door schrijfoperaties naar de harde schijf uit te stellen en te combineren om de tijd dat de schijf in de slaapstand is te verlengen en het aantal ontwaken te verminderen. De modus is verouderd, aangezien in moderne mobiele apparaten harde schijven zijn vervangen door solid-state drives.
- Het F2FS bestandssysteem is overgeschakeld naar het gebruik van grote folio's van geheugen (large folios).
- Het werk aan de ntfs3 driver is hersteld, in ontwikkeling door Paragon Software. Ondersteuning voor bestandsoperaties op basis van iomap is toegevoegd, net zoals opties llseek SEEK_DATA/SEEK_HOLE, en een delalloc modus voor uitgestelde toewijzing van blokken. Ondertussen, in de ontwikkelaarsmailinglijst van de kernel is in februari goedgekeurd, de opname in een van de toekomstige versies van de kernel van een nieuwe implementatie van NTFS — ntfsplus , ontwikkeld ter vervanging van ntfs3. Standaard bij het bouwende versie van het NFS-protocol 4.1 (CONFIG_NFS_V4_1).
- Zorg voor is ingeschakeld de blokkeer van export via NFS van gespecialiseerde pseudo-FS zoals pidfs en nsfs. In NFSD is er een experimentele mogelijkheid voor het gebruik van POSIX ACL en ondersteuning voor dynamische verandering van de thread-pool op basis van de belasting. geïmplementeerd Officiële regels zijn goedgekeurd toegevoegd voor het gebruik van AI-assistenten
- Geheugen en systeemdiensten
-
en opname in de kernel van automatisch gegenereerde inhoud. en opname in de kernel van automatisch gegenereerde inhoud. Bij het verzenden van de gegenereerde code moet deze worden gemarkeerd door de gebruikte AI-assistent aan te geven via de tag Assisted-by. AI-assistenten is het verboden om de tag Signed-off-by toe te voegen – de persoon die de patch heeft verzonden, wordt beschouwd als de auteur en is verantwoordelijk voor de verzonden wijziging en garandeert de kwaliteit ervan. Ontwikkelaars moeten handmatige review doen van de via AI verkregen code en de overeenstemming met de licentievereisten controleren.
-
Ondersteuning voor Rust vertaald van experimenteel naar de belangrijkste mogelijkheden van de kernel.
-
Voltooid integratie in de kernel van het mechanisme "Swap Table", waardoor de prestaties van swapping worden verbeterd. De versnelling wordt bereikt door de concurrentie voor toegang tot de swap-cache te verminderen, efficiënter zoeken in de cache en het verminderen van fragmentatie. De backend op basis van Swap Table wordt gebruikt voor caching van swapping in plaats van de XArray backend en heeft in de redis-benchmark test met BGSAVE het aantal verwerkte verzoeken met 22% verhoogd.
-
Ondersteuning toegevoegd voor de nieuwe extensie die in Clang 22 is verschenen, Thread Safety Analysis, waarmee potentiële race-omstandigheden en fouten veroorzaakt door onjuist ingestelde locks tijdens de compilatiefase kunnen worden opgespoord. De extensie biedt een reeks attributen, zoals GUARDED_BY(...), REQUIRES(...), RELEASE(...) en ACQUIRE(...), waarmee beschermde functies kunnen worden gemarkeerd en de toepassing van locks kan worden gescheiden (de context kan worden gedefinieerd). Tijdens de compilatie wordt de correctheid van de toepassing van synchronisatie-primitieven, zoals mutexen, gecontroleerd op basis van de activiteit of inactiviteit van de bijbehorende context.
-
In de systeemaanroep open_tree is toegevoegd de vlag OPEN_TREE_NAMESPACE voor het vereenvoudigen van de configuratie van geïsoleerde containers en het versnellen van het opstarten van containers op systemen met een groot aantal mount points. Net als OPEN_TREE_CLONE kopieert de nieuwe vlag alleen de gespecificeerde boom van mount points, maar in plaats van een lokale bestandsdescriptor retourneert het een bestandsdescriptor in de nieuwe namespace van mount points, waarin de gekopieerde boom boven de kopie van het echte root FS wordt gemonteerd. De vlag OPEN_TREE_NAMESPACE is vereist om de gescheiden uitvoering van de unshare(CLONE_NEWNS) en pivot_root() bewerkingen, toegepast bij het maken van containers, te vermijden.
-
In de systeemaanroep rseq is toegevoegd mechanisme voor tijdsplitsing (time slice) dat extra CPU-tijd biedt voor het ononderbroken uitvoeren van kritieke secties. Het idee is om te voorkomen dat de taakplanner een kritieke sectie met een ingestelde vergrendeling onderbreekt, wat leidt tot het overdragen van de controle aan andere threads die de bron gebruiken, terwijl de vergrendeling blijft ingesteld. Het verlengen van de tijdsplitsing gebeurt zonder extra overhead, maar zonder de strikte garanties die worden geboden bij volledige prioriteitsregeling.
-
Voor arm64-, loongarch-, powerpc-, riscv-, s390- en x86-architecturen is het taakverdringingsmode (preemption) standaard in de planner. gewijzigd van PREEMPT_NONE naar PREEMPT_LAZY. Het aantal mogelijke modi is verminderd van vier naar twee – PREEMPT_FULL en PREEMPT_LAZY (de modi PREEMPT_NONE en PREEMPT_VOLUNTARY zijn alleen behouden voor architecturen die PREEMPT_FULL en PREEMPT_LAZY niet ondersteunen). De PREEMPT_LAZY-modus past het volledige verdringingsmodel (PREEMPT_FULL) toe voor realtime-taken (RR/FIFO/DEADLINE), maar houdt de verdringing van normale taken (SCHED_NORMAL) uit tot het tik-grens. De gemaakte vertraging leidt tot een vermindering van de gevallen van verdringing van vergrendelingshouders, wat de prestaties dichter bij configuraties brengt die een model van vrijwillige verdringing gebruiken (voluntary preemption), d.w.z. PREEMPT_LAZY maakt volledige verdringing mogelijk voor realtime-taken, maar minimaliseert de prestatieafname voor normale taken.
De inschakeling van PREEMPT_LAZY leidde leidde tot een ernstige regressie, met een halvering van de prestaties van PostgreSQL op ARM64-systemen. Om de prestatieafname op te lossen, moeten PostgreSQL-ontwikkelaars is voorgesteld de optie PR_RSEQ_SLICE_EXTENSION inschakelen om de kans op verdringing van de vergrendelingshouder te verminderen.
-
Voortgezet de wijzigingen uit de tak Rust-for-Linux, gerelateerd aan het gebruik van de programmeertaal Rust als tweede taal voor de ontwikkeling van stuurprogramma's en kernelmodules (ondersteuning voor Rust is standaard niet ingeschakeld en leidt niet tot het opnemen van Rust in de verplichte buildafhankelijkheden van de kernel). Dankzij de eerder geïntegreerde bibliotheeksyn (crates.io), die het schrijven van complexe macro's vereenvoudigt, is de omvang van de Rust-code in de kernel verminderd door het vereenvoudigen van de definities van bestaande procedurele macro's. De mogelijkheden van de bibliotheken kernel, macros en pin-init zijn uitgebreid.
-
In het systeem voor asynchrone invoer/uitvoer io_uring toegevoegd optie voor het gebruik van niet-circulaire wachtrijen (non-circular submission queue), efficiënter gecached in situaties waarin de uitvoering van een verzoek eerder eindigt dan de terugkeer uit de systeemaanroep.
-
In de eBPF-subsysteem binnen het BTF-mechanisme (BPF Type Format), dat informatie biedt voor typevalidatie in BPF-pseudocode, voor het zoeken naar debug-informatie. wordt gebruikgemaakt van binaire zoekopdracht, wat de efficiëntie van de BPF-programma's verhoogde. In eBPF. toegevoegd ondersteuning voor impliciete argumenten bij aanroepen. kfunc (kernel functies die beschikbaar zijn voor gebruik in BPF-programma's), gedefinieerd met de vlag KF_IMPLICIT_ARGS.
-
Verwijderd code ter ondersteuning van de initiële RAM-schijf (initrd) gebaseerd op linuxrc, dat al lange tijd als verouderd geldt. De resterende implementaties van initrd worden in 2027 verwijderd. In plaats van initrd moet initramfs worden gebruikt (het verschil is dat initrd de initiële opstartomgeving in een schijfimage plaatst, terwijl initramfs deze in een bestandssysteem plaatst).
-
In het blokapparaat zram, dat wordt gebruikt voor gecomprimeerde opslag van de swap-partitie in het geheugen, is gewijzigd de logica voor het omgaan met gecomprimeerde geheugenspagina's bij optioneel verplaatsen van gegevens naar permanente opslag in geval van vul van het beschikbare RAM. Voorheen werden geheugenspagina's gedecomprimeerd voordat ze op het fysieke opslagmedium werden geschreven, en nu worden ze opgeslagen zoals ze zijn in gecomprimeerde vorm, wat de belasting op de CPU vermindert en energie bespaart bij het gebruik op batterijen.
-
In de tool timerlat, bedoeld om latencies te meten bij de werking van de taakplanner, toegevoegd optie —bpf-action om BPF-programma's te starten wanneer een ingestelde drempel wordt overschreden.
-
In het ftrace-tracingsysteem is een bitmasker-lijstconfiguratie toegevoegd voor de weergave van bitmaskers in een leesbaar formaat (in de vorm van een bitlijst, in plaats van een hexadecimaal getal). In tracefs zijn er mogelijkheden voor auditing toegevoegd. filters en triggers. Toegevoegd de perf sched stats-groep om gegevens over de werking van de taakplanner te verzamelen en weer te geven.
-
Toegevoegd bouwopties LOGO_LINUX_MONO_FILE, LOGO_LINUX_VGA16_FILE en LOGO_LINUX_CLUT224_FILE voor het definiëren van het afbeeldingsbestand van het logo dat wordt weergegeven bij het opstarten van de kernel in plaats van het standaardlogo met de pinguïn Tux.
-
- Virtualisatie en beveiliging
- In het systeem voor asynchrone invoer/uitvoer io_uring. geïmplementeerd de mogelijkheid om BPF-programma's met filters aan te hechten die controleren wat specifieke SQE (Submission Queue Entry) operaties mogen doen (vergelijkbaar met systeemaanroepen in io_uring). De toegevoegde mogelijkheid is een analogie van filters voor systeemaanroepen. Filters kunnen aan specifieke taken worden gekoppeld en ze worden geërfd bij het creëren van andere processen na een fork()-aanroep. Bij actieve filters kunnen toevoegingen slechts aanvullende beperkingen opleggen, maar bestaande filters niet uitschakelen. De geïmplementeerde mogelijkheid stelt in staat om methoden de omzeiling van filters voor systeemaanroepen in sandbox-omgevingen te blokkeren, gebaseerd op het uitvoeren van soortgelijke operaties, die worden aangeboden in io_uring.
- In SELinux toegevoegd de mogelijkheid om toegang tot BPF-tokens te beheren, die niet-geprivilegieerde processen in staat stellen om bepaalde geprivilegieerde bewerkingen met BPF uit te voeren, zoals het laden van BPF-programma's in de kernel en het creëren van map-structuren.
- Toegevoegd ondersteuning voor het algoritme voor digitale handtekeningen ML-DSA (CRYSTALS-Dilithium), gebaseerd op netwerktheorie en bestand tegen brute force-aanvallen op kwantumcomputers. Verstrekt de mogelijkheid om ML-DSA te gebruiken voor de authenticatie van kernelmodules.
- Verwijderd de mogelijkheid om handtekeninggenererende schema's met het SHA-1-algoritme te gebruiken voor het ondertekenen van kernelmodules (ondersteuning voor het laden van ondertekende modules is behouden).
- In het auditrecord NETFILTER_PKT zijn toegevoegd de velden sport en dport voor inspectie van netwerkpoortnummers, en niet alleen IP-adressen.
- Voor systemen met de RISC-V-architectuur geïmplementeerd ondersteuning voor de uitbreidingen Zicfiss en Zicfilp, die hardwarematige mogelijkheden bieden voor het toepassen van CFI (Control Flow Integrity) bescherming, die het normaal verloop van instructies (control flow) onderbreekt als gevolg van explosieven die de opgeslagen functiepointers in het geheugen manipuleren.
- In de KVM-hypervisor geïmplementeerd de mogelijkheid om informatie over de ondersteuning door de processor voor de ERAPS-uitbreiding (Enhanced Return Address Predictor Security) door te geven aan gastsystemen, waarmee sommige CPU-statusreset-operaties bij het teruggeven van controle aan de host door het gastensysteem kunnen worden overgeslagen. Bovendien, toegevoegd ondersteuning voor het toewijzen van hardware aan gastsystemen voor prestatiemonitoring (PMU, Performance Monitoring Unit), wat de nauwkeurigheid van profilering verbetert vergeleken met het gebruik van emuleerbare PMU.
- In de stuurprogramma voor de Hyper-V hypervisor toegevoegd ondersteuning voor de debugfs-interface voor het bekijken van statistieken over de werking van de hypervisor.
- Netwerk subsysteem
- Standaard ingeschakeld is de AccECN-extensie (Accurate Explicit Congestion Notification), die een geavanceerde variant van de ECN (wikipedia.org), implementeert, waardoor hosts in geval van congestie IP-pakketten kunnen markeren in plaats van deze te verwerpen, wat de mogelijkheid biedt om de beginfase van congestie in communicatielijnen te bepalen zonder pakketverlies. De oorspronkelijke ECN-extensie heeft een beperking waarbij slechts één congestiesignaal kan worden verzonden binnen één TCP-verzend-ontvangcyclus (RTT, Round-Trip Time, verzenden van aanvraag en ontvangen van antwoord). AccECN verwijdert deze beperking en stelt de ontvanger in staat om de verzender meer dan één congestiemelding in de TCP-pakketkop door te geven. Congestiebeheeralgoritmen kunnen de ontvangen informatie gebruiken om nauwkeuriger te reageren op congestie en niet abrupt de pakketverzendintensiteit te verlagen bij het optreden van een geringe congestie.
- In de implementatie van het netwerkqueuebeheeralgoritme Cake toegevoegd de mogelijkheid om meerdere queues te verwerken voor de belastingverdeling over meerdere CPU-kernen. Het CAKE-algoritme wordt toegepast om de negatieve invloed van tussen-buffering van pakketten op randapparatuur in netwerken te verminderen en is gericht op het bereiken van de maximaal mogelijke doorvoercapaciteit en het minimaliseren van latentie, zelfs op langzame communicatielijnen.
- In de sockets VSOCK, die worden gebruikt voor interactie met virtuele machines, toegevoegd ondersteuning voor netwerksamenlevingen (network namespace).
- Toegevoegd de initiële implementatie van de toekomstige standaard WiFi 8 (802.11bn, Ultra High Reliability WiFi).
- Toegevoegd optimalisaties die het mogelijk hebben gemaakt om de verwerking van binnenkomende UDP-pakketten met 12% te verbeteren tijdens stress-testen in een 100-gigabit netwerk.
- Apparatuur
- In de AMDGPU-driver geïmplementeerd ondersteuning voor IP-blokken, gebruikt in nieuwe AMD GPU's, zoals SMUIO 15.x, PSP 15.x, IH 6.1.1/7.1, MMHUB 3.4/4.2, GC 11.5.4/12.1, SDMA 6.1.4/7.1/7.11.4 en JPEG 5.3.
- In de Nouveau-driver is het frequentiebeheer in Tegra 186+ systemen verbeterd.
- In de i915-driver toegevoegd de initiële ondersteuning voor de display IP-blok Xe3p_LPD, gebruikt in Intel Nova Lake-P-processoren.
- Voortgezet Werk aan de drm-driver (Direct Rendering Manager) Xe voor GPU's op basis van de Intel Xe-architectuur, die wordt gebruikt in Intel-graphicskaarten van de Arc-familie en geïntegreerde graphics, beginnend bij de Tiger Lake-processors. Modus toegevoegd Multi Queue. Toegevoegd componenten die nodig zijn voor het diagnosticeren van GPU-bevriezingen in Mesa. Toegevoegd ondersteuning voor het MERT-mechanisme voor geheugenbeheer van de GPU.
- Voortgezet integratie van Nova-drivercomponenten voor NVIDIA-GPU's, uitgerust met GSP-firmware, gebruikt vanaf de NVIDIA GeForce RTX 2000-serie op basis van de Turing-microarchitectuur. De driver is geschreven in Rust. In de nieuwe versie zijn voorbereidingen getroffen voor de implementatie van ondersteuning voor GPU's op basis van de Turing-microarchitectuur en zijn verschillende interne wijzigingen aangebracht.
- Toegevoegd ondersteuning voor controllers en randapparatuur met een multi-channel SPI (Serial Peripheral Interface) die het mogelijk maakt gegevens in meerdere parallelle stromen te verzenden.
- Toegevoegd driver voor gecombineerde Type-C-connectoren die worden gebruikt op apparaten met Apple Silicon-chips en die interfaces USB3, DP-AltMode en Thunderbolt/USB4 combineren.
- Ondersteuning toegevoegd voor de audiomicrochips Tegra238, Minisforum V3 SE, iBasso DC04U, Intel Nova Lake, Nova Lake S en Focusrite Forte.
- Ondersteuning toegevoegd voor ARM-platforms, SoC en apparaten: Arduino UnoQ, OrangePi 6 Plus, OrangePi CM5, Anbernic RG-DS, Realtek Kent, Qualcomm Kaanapali, Mediatek Ezurio, Facebook Anacapa, Microchip LAN9668, Khadas VIM1S, QNAP TS133, i.MX952, i.MX93, i.MX94, VHIP4 EvalBoard, TQ-Systems MBLS1028A, Agilex5, Radxa CM3J, Glymur,
- Ondersteuning toegevoegd voor smartphones en tablets: Fairphone Gen 6 (SoC Qualcomm Milos/Snapdragon 7s Gen 3), Pixel 3/3 XL, Microsoft Surface Pro 11.
Tegelijkertijd Latijns-Amerikaanse Stichting voor Vrije Software gecreëerd optie volledig vrije kernel 7.0 – Linux-libre 7.0-gnu, gereinigd van elementen van firmware en drivers die niet-vrije componenten of codefragmenten bevatten waarvan het toepassingsgebied beperkt is door de fabrikant. In versie 7.0 is de driver iwlwifi van blobs ontdaan. De schoonmaakcode in de drivers amdgpu, adreno, TI PRUeth, air_en8811h, ath12k, TI VPE, rtw8852b, rt1320, rt5575 SPI, tas2783, Intel catpt is bijgewerkt. Namen van blobs zijn gereinigd in dts-bestanden (devicetree) voor ARM-chips.
Bron: linux.org.ru
