Na twee maanden ontwikkeling heeft Linus Torvalds de release van de kernel . Onder de meest opvallende wijzigingen zijn onder andere: beperking van het importeren van symbolen uit propriëtaire modules naar GPL-modules, versnelling van context-overgangen met behulp van de FSGSBASE-instructie, ondersteuning voor het comprimeren van de kernelafbeelding met Zstd, herziening van de prioriteitstoewijzing voor threads in de kernel, ondersteuning voor het PRP-protocol (Parallel Redundancy Protocol), bandbreedte-gevoelig plannen in de deadline-scheduler, proactieve pagina-packing in het geheugen, capability-vlag CAP_CHECKPOINT_RESTOR, systeemaanroep close_range(), prestatieverbeteringen voor dm-crypt, verwijdering van de code voor 32-bits gastsystemen Xen PV, een nieuw slab-geheugenbeheersysteem, de «rescue»-optie in Btrfs, en ondersteuning voor inline-encryptie in ext4 en F2FS.
In de nieuwe versie zijn 16074 correcties van 2011 ontwikkelaars verwerkt,
de patchgrootte is 62 MB (de wijzigingen betroffen 14548 bestanden, 782155 regels code toegevoegd en 314792 regels verwijderd). Ongeveer 45% van alle in 5.9
wijzigingen zijn gerelateerd aan apparaatsdrivers, ongeveer 15% van de wijzigingen hebben
te maken met het bijwerken van hardware-architectuur specifieke code, 13%
is gerelateerd aan de netstack, 3% aan bestandssystemen en 3% aan interne
kernsubsystemen.
:
- Geheugen en systeemdiensten
- bescherming tegen het gebruik van GPL-lagen voor het verbinden van propriëtaire drivers met kernelcomponenten die alleen beschikbaar zijn voor GPL-modules. De vlag TAINT_PROPRIETARY_MODULE wordt nu overgenomen in alle modules die symbolen importeren uit modules met deze vlag. Als een GPL-module probeert symbolen te importeren uit een niet-GPL-module, ontvangt deze GPL-module het label TAINT_PROPRIETARY_MODULE en kan deze geen toegang krijgen tot kernelcomponenten die alleen beschikbaar zijn voor GPL-modules, zelfs als de module eerder symbolen heeft geïmporteerd uit de categorie 'gplonly'. Backward blocking (exporteren van alleen EXPORT_SYMBOL_GPL in modules die EXPORT_SYMBOL_GPL hebben geïmporteerd), wat de werking van propriëtaire drivers zou kunnen verstoren, is niet geïmplementeerd (alleen de vlag voor de propriëtaire module wordt overgenomen, maar niet de GPL-binding).
- ondersteuning voor het kcompactd-mechanisme voor op de achtergrond, wat het aantal grote geheugenpagina's dat beschikbaar is voor de kernel vergroot. Voorspellingen geven aan dat achtergrondverpakking met minimale overhead de vertragingen bij het toewijzen van grote geheugenpagina's (huge-page) met 70-80% kan verminderen in vergelijking met het eerder gebruikte mechanisme van on-demand verpakking. Voor het bepalen van de grenzen van externe fragmentatie, die kcompactd zal waarborgen, is de sysctl vm.compaction_proactiveness toegevoegd.
- ondersteuning voor compressie van de kernelimage met behulp van het algoritme (zstd).
- Voor x86-systemen is ondersteuning voor de CPU-instructie , die het mogelijk maakt om de inhoud van de FS/GS-registers vanuit de gebruikersruimte te lezen en te wijzigen. In de kernel wordt FSGSBASE gebruikt om context-switching operaties te versnellen door overbodige MSR-schrijfoperaties voor GSBASE te elimineren, terwijl het in de gebruikersruimte overbodige systeemeisen vermijdt voor het wijzigen van FS/GS.
- de parameter 'allow_writes', die het verbiedt om MSR-registers van de processor vanuit de gebruikersruimte te wijzigen en de toegang tot de inhoud van die registers te beperken tot leesoperaties, omdat de wijziging van MSR problemen kan veroorzaken. Standaard is schrijven nog niet verboden, en wijzigingen in MSR worden gelogd, maar in de toekomst is het de bedoeling om de standaard toegang over te schakelen naar een alleen-lezen modus.
- In de interface voor asynchrone invoer/uitvoer volledige ondersteuning toegevoegd voor asynchrone buffered leesoperaties die geen hulp van kernelthreads vereisen. Ondersteuning voor schrijven wordt in de volgende release verwacht.
- In de deadlinescheduler voor I/O wordt rekening gehouden met bandbreedte, om juiste beslissingen te nemen op asymmetrische systemen, zoals ARM-systemen op basis van architecturen en big.LITTLE, die krachtige en minder krachtige energie-efficiënte CPU-kernen in één chip combineren. Vooral de nieuwe modus voorkomt inconsistenties bij planning wanneer een langzame CPU-kern niet voldoende middelen heeft om een taak binnen de gestelde tijd uit te voeren.
- Het energieverbruiksmodel in de kernel (Energy Model framework) is nu niet alleen gericht op het energieverbruik van de CPU, maar bestrijkt ook randapparatuur.
- de systeemaanroep close_range() geïmplementeerd, waarmee een proces in één keer een geheel bereik van geopende bestandsdescriptors kan sluiten.
- Van de tekstconsole en de fbcon-driver , die de mogelijkheid biedt om tekst programmatisch terug te scrollen (CONFIG_VGACON_SOFT_SCROLLBACK) meer dan de hoeveelheid videogeheugen van de VGA-tekstmodus.
- prioriteringsalgoritme voor threads binnen de kernel. De nieuwe variant zorgt voor een betere consistentie in alle subsystemen van de kernel bij het toekennen van prioriteiten aan real-time taken.
- sysctl toegevoegd voor het beheren van CPU-frequentie-forceringsparameters voor real-time taken (bijvoorbeeld kan het gedrag tijdens de uitvoering van real-time taken on-the-fly worden veranderd voor energiezuinigheid bij gebruik van batterijvoeding of op mobiele systemen).
- Voorbereiding getroffen voor de implementatie van ondersteuning voor de technologie Transparent Huge Pages in de pagina-cache.
- In het fanotify-mechanisme zijn nieuwe vlaggen FAN_REPORT_NAME en FAN_REPORT_DIR_FID geïmplementeerd voor het doorgeven van informatie over de ouderlijke naam en de unieke identificatie FID bij het optreden van gebeurtenissen van het maken, verwijderen of verplaatsen van directory-elementen en niet-voorwaarden met directories.
- Voor cgroups een nieuwe slab-geheugencontroller, die opvalt door het verplaatsen van de accounting van slab van het niveau van geheugenzijdes naar het niveau van kernobjecten, waardoor slab-pagina's gezamenlijk kunnen worden gebruikt in verschillende cgroups, in plaats van aparte slab-caches voor elke cgroup toe te wijzen. De voorgestelde benadering stelt in staat de efficiëntie van slab-gebruik te verhogen, met 30-45% de hoeveelheid geheugen die voor slab wordt gebruikt te verminderen, het totale geheugengebruik door de kernel aanzienlijk te verminderen en de geheugenfragmentatie te verlagen.
- In het geluidssysteem en , in overeenstemming met de aanbevelingen voor het gebruik van inclusieve terminologie in de Linux-kernel, zijn ongepaste termen gereinigd. De code is ontdaan van het gebruik van de woorden “slave”, “master”, “blacklist” en “whitelist.”
- Virtualisatie en beveiliging
- Bij het bouwen van de kernel met de Clang-compiler de mogelijkheid om (CONFIG_INIT_STACK_ALL_ZERO) voor automatische initialisatie met nulwaarde van alle variabelen die op de stack worden opgeslagen, aan te passen (bij het bouwen wordt “-ftrivial-auto-var-init=zero” opgegeven).
- In het seccomp-systeem, bij gebruik van de procescontrolemodus in de gebruikersruimte, substituties in het gecontroleerde proces van bestandsdescriptoren voor volledige emulatie van systeemaanroepen die leiden tot de creatie van bestandsdescriptoren. Deze functionaliteit is gewild in systemen met geïsoleerde containers en de implementatie van sandbox voor Chrome.
- Voor de architecturen xtensa en csky is ondersteuning toegevoegd voor het beperken van systeemaanroepen via het seccomp-systeem. Voor xtensa is bovendien ondersteuning gerealiseerd voor het auditmechanisme.
- nieuwe capability-vlag CAP_CHECKPOINT_RESTORE, die zonder extra privileges toegang biedt tot mogelijkheden gerelateerd aan het bevriezen en herstellen van de toestand van processen.
- In GCC 11 zijn alle benodigde mogelijkheden gerealiseerd voor
de debugtool KCSAN (Kernel Concurrency Sanitizer), bedoeld voor dynamische identificatie van racecondities binnen de kernel. Hierdoor kan KCSAN nu worden gebruikt met kernels die zijn samengesteld in GCC. - Voor AMD Zen en nieuwere CPU-modellen ondersteuning voor de technologie P2PDMA, die DMA mogelijk maakt voor directe gegevensoverdracht tussen het geheugen van twee apparaten die zijn aangesloten op de PCI-bus.
- In dm-crypt is een modus toegevoegd die vertragingen vermindert door cryptografische verwerking van gegevens uit te voeren zonder gebruik te maken van werqueue. Deze modus is ook nodig voor correcte werking met blockapparaten (apparaten met gebieden die sequentieel moeten worden geschreven met de gehele groep blokken). Er is gewerkt aan het verhogen van de doorvoer en het verminderen van vertragingen in dm-crypt.
- De code ter ondersteuning van 32-bits gastsystemen die in paravirtualisatiemodus draaien onder Xen-hypervisor is verwijderd. Gebruikers van dergelijke systemen wordt aangeraden over te stappen op het gebruik van 64-bits kernels in gastomgevingen of in plaats van paravirtualisatie (PV) volledige (HVM) of gecombineerde (PVH) virtualisatiemodi te gebruiken.
- Opslagsubsystemen, invoer/uitvoer en bestandssystemen
- In het bestandssysteem Btrfs de mount-optie 'rescue', die de toegang tot alle andere herstelopties uniform maakt. Ondersteuning voor de opties 'alloc_start' en 'subvolrootid' is verwijderd, terwijl de optie 'inode_cache' als verouderd is verklaard. Prestatieoptimalisatie is doorgevoerd, vooral het uitvoeren van fsync()-operaties is nu veel sneller. de mogelijkheid om alternatieve typen controleparameters te gebruiken, anders dan CRC32c.
- de mogelijkheid om inline-encryptie (Inline Encryption) te gebruiken in de bestandssystemen ext4 en F2FS, waarvoor de montagemoed «inlinecrypt» is bedoeld. De inline-encryptiemodus stelt u in staat de in de controller van de schijf ingebouwde encryptiemechanismen te gebruiken, die transparante encryptie en decryptie van input/output uitvoeren.
- In XFS de flush van inode in een volledig asynchrone modus, die geen processen blokkeert tijdens het uitvoeren van de geheugenopruimingsoperatie. Een oud probleem met quota's is opgelost, waarbij waarschuwingen over het overschrijden van de zachte limiet en beperkingen op het aantal inodes niet correct werden bijgehouden. De implementatie van DAX-ondersteuning is uniform gemaakt voor ext4 en xfs.
- In Ext4 voorspellende laadtijd van bitmaps voor blokdistributie. In combinatie met de beperking van het scannen van niet-geinitialiseerde groepen, heeft deze optimalisatie de montagemtijd voor zeer grote partities aanzienlijk verminderd.
- In F2FS ioctl F2FS_IOC_SEC_TRIM_FILE, waarmee TRIM/discard-opdrachten kunnen worden gebruikt om specifieke gegevens in een bestand fysiek te resetten, bijvoorbeeld om toegangssleutels te verwijderen zonder dat er residuele gegevens op de schijf achterblijven.
In F2FS ook een nieuwe modus voor garbage collection, GC_URGENT_LOW, die agressiever werkt door sommige checks voor inactiviteit (idle) voor de start van de garbage collector uit te schakelen. - In bcache is de bucket_size voor extensies verhoogd van 16 naar 32 bits ter voorbereiding op de mogelijkheid om te worden toegepast voor de cache van gezoneerde apparaten.
- In de SCSI-subsystemen is de mogelijkheid van inline-encryptie op basis van ingebouwde hardware-encryptiemiddelen, geleverd door UFS-controllers, toegevoegd ().
- Een nieuwe kernel commandoregelparameter «debugfs» is toegevoegd waarmee de beschikbaarheid van het gelijknamige pseudo-bestandssysteem kan worden beheerd.
- In de NFSv4.2-client is ondersteuning voor uitgebreide bestandsattributen (xattr) toegevoegd.
- In dm-dust een interface voor het tegelijk weergegeven lijst van alle ontdekte bad blocks op de schijf («dmsetup message dust1 0 listbadblocks»).
- Voor md/raid5 is de parameter /sys/block/md1/md/stripe_size toegevoegd voor het configureren van de grootte van de STRIPE-blok.
- Voor NVMe-opslagapparaten ondersteuning voor opdrachten voor het zoneren van de schijf (ZNS, NVM Express Zoned Namespace), waarmee opslagruimte in zones kan worden verdeeld die groepen blokken vormen voor een meer gedetailleerd beheer van gegevensverplaatsingen op de schijf.
- Netwerk subsysteem
- In Netfilter de mogelijkheid om pakketten af te wijzen voordat ze worden gecontroleerd op routen (de uitdrukking REJECT kan nu niet alleen in de INPUT-, FORWARD- en OUTPUT-ketens worden gebruikt, maar ook in de PREROUTING-fase voor icmp en tcp).
- In nftables de mogelijkheid om gebeurtenissen te auditeren die verband houden met wijziging van configuratie.
- In nftables in de netlink API ondersteuning voor anonieme ketens, die door de kernel dynamisch worden ingesteld. Wanneer een regel die met een anonieme keten is verbonden wordt verwijderd, wordt ook de keten zelf automatisch verwijderd.
- In BPF is ondersteuning toegevoegd voor iterators om elementen van associatieve arrays (map) te doorlopen, filteren en wijzigen zonder gegevens naar de gebruikersruimte te kopiëren. Iterators kunnen worden gebruikt voor TCP- en UDP-sockets, waardoor BPF-programma's lijsten van open sockets kunnen doorlopen en de benodigde informatie eruit kunnen halen.
- Een nieuw type BPF-programma BPF_PROG_TYPE_SK_LOOKUP is toegevoegd, dat wordt uitgevoerd wanneer de kernel op zoek is naar een geschikte luisterende socket voor een binnenkomende verbinding. Met een dergelijk BPF-programma kunnen handlers worden gemaakt die beslissen met welke socket een verbinding moet worden geassocieerd, zonder beperkt te worden door de systeemaanroep bind(). Bijvoorbeeld, het is mogelijk om één socket te koppelen aan een reeks adressen of poorten. Bovendien is ondersteuning voor de flag SO_KEEPALIVE toegevoegd in bpf_setsockopt() en is de mogelijkheid geïmplementeerd om BPF_CGROUP_INET_SOCK_RELEASE-handlers aan te roepen bij het vrijgeven van een socket.
- Ondersteuning voor het protocol (Parallel Redundancy Protocol), dat een transparante overschakeling op een reservekanaal mogelijk maakt bij een storing van enige netwerkelementen op basis van Ethernet.
- In de mac80211 stack ondersteuning voor vierfasen kanaalonderschrijving WPA/WPA2-PSK in toegangspuntmodus.
- De mogelijkheid is toegevoegd om de qdisc (queuing discipline) scheduler standaard te switchen naar het FQ-PIE (Flow Queue PIE) algoritme voor netwerkbeheer, gericht op het verminderen van de negatieve invloed van tussentijdse bufferwerking op grensnetwerkapparatuur (bufferbloat) in netwerken met kabelmodems.
- Nieuwe mogelijkheden zijn toegevoegd aan MPTCP (MultiPath TCP), een uitbreidbaarheid van het TCP-protocol voor het gelijktijdig verzenden van pakketten via meerdere routes over verschillende netwerkintefaces die aan verschillende IP-adressen zijn gekoppeld. Ondersteuning voor syn cookie, DATA_FIN, automatische bufferinstellingen, socketsdiagnose en het gebruik van de vlaggen REUSEADDR, REUSEPORT en V6ONLY in setsockopt zijn toegevoegd.
- Voor virtuele routeringstabellen VRF (Virtual Routing and Forwarding), die het mogelijk maken om meerdere routeringsdomeinen op één systeem te organiseren, is de 'strict'-modus geïmplementeerd. In deze modus kan de virtuele routeringstabel alleen worden geassocieerd met een routeringstabel die niet door andere virtuele tabellen wordt gebruikt.
- In de draadloze driver ath11k ondersteuning voor de 6GHz frequentie en .
- Apparatuur
- De code voor ondersteuning van de UniCore-architectuur, ontwikkeld in het microprocessorcentrum van de Peking Universiteit en opgenomen in de Linux-kernel in 2011, is verwijderd. Deze architectuur wordt sinds 2014 niet meer ondersteund en heeft geen ondersteuning in GCC.
- Ondersteuning is geïmplementeerd voor de RISC-V-architectuur (debugfs-interface voor het analyseren van de dekking van de kernelcode), kmemleak (systeem voor het detecteren van geheugenlekken), stackbescherming, sprongenlabels en tickless-operaties (postbus-onafhankelijke multitasking).
- Voor de PowerPC-architectuur is ondersteuning voor queues voor spinlock geïmplementeerd, waardoor de prestaties in blokkadeconflicten aanzienlijk zijn verbeterd.
- Voor de architecturen ARM en ARM64 is standaard de mechanisme voor het reguleren van de procesfrequentie (cpufreq-governor) geïmplementeerd, die bij het nemen van beslissingen over frequentiewijzigingen direct informatie van de taakplanner gebruikt en onmiddellijk kan communiceren met cpufreq-drivers voor realtime frequentiewijzigingen, wat de parameters van de CPU-prestaties onmiddellijk aanpast aan de huidige belasting.
- In de DRM-driver i915 voor Intel grafische kaarten is ondersteuning toegevoegd voor chips op basis van de microarchitectuur en is begin ondersteuning toegevoegd voor discrete kaarten .
- In de amdgpu-driver is begin ondersteuning toegevoegd voor de AMD GPU (Navy Flounder) en (Sienna Cichlid). Ondersteuning is toegevoegd voor video-codecversnellingsmotoren UVD/VCE voor GPU Southern Islands (Radeon HD 7000).
Eigenschap toegevoegd voor de rotatie van het display met 90, 180 of 270 graden.Het is interessant dat de driver voor AMD GPU de grootste driver in de kernel - het bevat ongeveer 2,71 miljoen regels code, wat ongeveer 10% van de totale grootte van de kernel (27,81 miljoen regels) is. Daarvan zijn 1,79 miljoen regels afkomstig van automatisch gegenereerde headerbestanden met gegevens voor GPU-registers, en de C-code bedraagt 366 duizend regels (ter vergelijking, de Intel i915-driver omvat 209 duizend regels, terwijl Nouveau 149 duizend regels bevat).
- In de Nouveau-stuurprogramma ondersteuning voor frame-voor-frame controle (Cyclic Redundancy Checks) in de display-engines van NVIDIA GPU's. De implementatie is gebaseerd op documentatie die door NVIDIA is verstrekt.
- Drivers toegevoegd voor LCD-panelen: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 en Xingbangda XBD599.
- In het geluidsysteem ALSA is ondersteuning geïmplementeerd voor een nieuw apparaat voor het beheren van de verlichting van de microfoon activatietoetsen en het dempen, evenals de toevoeging van ondersteuning voor nieuwe hardware, inclusief de controller .
- Ondersteuning toegevoegd voor ARM-platforms, -apparaten en -systemen: Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1, ASUS Google Nexus 7, Acer Iconia Tab A500, Qualcomm Snapdragon SDM630 (gebruikt in Sony Xperia 10, 10 Plus, XA2, XA2 Plus en XA2 Ultra), Jetson Xavier NX, Amlogic WeTek Core2, Aspeed EthanolX, vijf nieuwe borden op basis van NXP i.MX6, MikroTik RouterBoard 3011, Xiaomi Libra, Microsoft Lumia 950, Sony Xperia Z5, MStar, Microchip Sparx5, Intel Keem Bay, Amazon Alpine v3, Renesas RZ/G2H.
Tegelijkertijd Latijns-Amerikaanse Stichting voor Vrije Software
optie — , opgeschoond van elementen van firmwares en drivers die niet-vrije componenten of delen van code bevatten, waarvan het toepassingsgebied is beperkt door de fabrikant. In de nieuwe versie is het laden van blobs in drivers voor WiFi rtw8821c en SoC MediaTek mt8183 uitgeschakeld. De code voor het opschonen van blobs in drivers en subsystemen Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) en x86 touchscreen is bijgewerkt.
Bron: opennet.ru
