Na twee maanden ontwikkeling heeft Linus Torvalds de release van de Linux-kernel 5.16 aangekondigd. Onder de meest opmerkelijke wijzigingen: de systeemaanroep futex_waitv voor een betere prestatie van Windows-games in Wine, foutopsporing in het bestandssysteem via fanotify, het concept van foliant in het geheugensysteem, ondersteuning voor processorinstructies AMX, de mogelijkheid om geheugen voor netwerk sockets te reserveren, ondersteuning in netfilter voor het classificeren van pakketten in de fase van 'egress', het gebruik van de DAMON-subsysteem voor proactieve vervanging van ongebruikte geheugengebieden, verbeterde verwerking van overbelastingen bij een groot aantal schrijfbewerking en ondersteuning voor multi-drive harde schijven.
In de nieuwe versie zijn 15415 correcties opgenomen van 2105 ontwikkelaars, de patchgrootte is 45 MB (de wijzigingen betroffen 12023 bestanden, 685198 regels code zijn toegevoegd, 263867 regels zijn verwijderd). Ongeveer 44% van alle wijzigingen die in 5.16 zijn aangebracht, heeft betrekking op apparaatdrivers, ongeveer 16% van de wijzigingen heeft betrekking op de update van hardware-architectuur specifieke code, 16% heeft betrekking op de netwerkstack, 4% op bestandssystemen en 4% op interne subsystemen van de kernel.
De belangrijkste vernieuwingen in kernel 5.16:
- Opslagsubsystemen, invoer/uitvoer en bestandssystemen
- In het fanotify-mechanisme zijn middelen toegevoegd voor het monitoren van de status van het bestandssysteem en het volgen van het optreden van fouten. Informatie over fouten wordt verzonden via een nieuw type gebeurtenis — FAN_FS_ERROR, die opgevangen kan worden in uitvoerende gebruikersruimte monitoringsystemen voor het snel informeren van de beheerder of het starten van herstelprocessen. Bij een cascade van fouten zorgt fanotify voor de levering van een bericht over de eerste fout samen met een totale tel van de problemen, om de volgende analyse van de oorzaak van de storing te vereenvoudigen. Ondersteuning voor foutopsporing is momenteel alleen geïmplementeerd voor het Ext4-bestandssysteem.
- De verwerking van schrijfcongestie tijdens schrijfbewerkingen is verbeterd, wat zich voordoet wanneer het aantal schrijfbewerkingen de bandbreedte van de schijf overschrijdt en het systeem gedwongen is om schrijfprocessen te blokkeren totdat de voltooiing van de reeds ingediende aanvragen is afgerond. In de nieuwe versie is het kernmechanisme volledig herzien dat wordt gebruikt voor het verkrijgen van informatie over het ontstaan van congestie en het blokkeren van taken, aangezien de oude implementatie problemen vertoonde bij het koppelen van de verwerking van schrijfcongestie met het verwisselen van geheugenpagina's in de swapruimte bij een gebrek aan geheugen in het systeem.
- In Btrfs is ondersteuning toegevoegd voor de technologie voor het zoneren van apparaten (Zoned Namespace), toegepast in harde schijven of NVMe SSD's voor het splitsen van opslagruimte in zones die groepen blokken of sectoren vormen, waar alleen sequentieel gegevens aan kunnen worden toegevoegd met volledige updates van de gehele groep blokken. Daarnaast zijn er enkele kleine optimalisaties doorgevoerd in het logging van inode, waardoor de bandbreedte in de dbench-test met 3% is verhoogd en de latentie met 11% is verlaagd. Het loggingmechanisme voor mappen is herzien, waarbij het aantal zoekoperaties en vergrendelingen in de boom is verminderd om de efficiëntie te verhogen. De invoeging van elementen in de btree-structuur in batchmodus is versneld (de tijd voor massale invoeging van elementen is met 4% verlaagd, en voor verwijderingen met 12%). Beperkte ondersteuning voor het gebruik van compressie bij het schrijven van incomplete pagina's is toegevoegd, evenals de mogelijkheid voor defragmentatie van subpagina's. Voorbereidingen zijn getroffen om ondersteuning voor de tweede versie van het protocol voor het "send"-commando in te schakelen.
- In het XFS-bestandssysteem is het geheugenverbruik verminderd door gebruik te maken van aparte slab-caches voor vaak gebruikte elementen en door sommige gegevensstructuren te verkleinen.
- In het Ext4-bestandssysteem zijn alleen fouten gecorrigeerd en zijn de parameters voor uitgestelde initialisatie van de Inode-tabel nauwkeuriger berekend.
- Op het niveau van blokapparaten zijn er optimalisaties doorgevoerd die de efficiëntie van de toewijzing van operaties aan CPU-kernen aanzienlijk verbeteren.
- Basissteun voor harde schijven met meerdere onafhankelijke aandrijvingen (multi-actuator) is toegevoegd, waardoor het mogelijk is om gelijktijdig toegang te krijgen tot meerdere sectoren in verschillende zones van de magnetische schijf.
- Een nieuwe ioctl-opdracht CDROM_TIMED_MEDIA_CHANGE is toegevoegd om evenementen van mediawijzigingen in de optische schijfstation te detecteren.
- In het EROFS-bestandssysteem (Enhanced Read-Only File System) is de mogelijkheid toegevoegd om bovenop meerdere opslagapparaten te werken. Verschillende apparaten kunnen worden weergegeven in één 32-bits adresruimte voor blokken. Daarnaast is er ondersteuning voor compressie met behulp van het LZMA-algoritme toegevoegd.
- In het F2FS-bestandssysteem zijn er opties voor het monteren toegevoegd om de fragmentatie van bestanden tijdens de opslag te beheren (bijvoorbeeld voor het debuggen van optimalisaties voor fragmentaties-opsystemen).
- In CEPH zijn standaard de creatie- en verwijderingsoperaties voor mappen in de asynchrone modus ingeschakeld (om het oude gedrag te herstellen, moet bij het monteren de vlag ‘-o wsync’ worden gebruikt). Er zijn ook metrics toegevoegd die de operaties voor het kopiëren van externe objecten volgen.
- In CIFS is de montagparameter tcpnodelay toegevoegd, waarmee de tcp_sock_set_nodelay-modus voor de netwerk-socket wordt ingeschakeld, zodat de wachttijd voor het vullen van de buffer in de TCP-stack wordt uitgeschakeld. Ondersteuning voor geneste DFS-links (Distributed File System) is ook toegevoegd bij het opnieuw monteren.
- Ondersteuning voor het beëindigen van aanvragen aan het blokapparaat in batchmodus is toegevoegd. Testen van deze wijziging toonde een toename van de intensiteit van willekeurige leesoperaties van Optane-opslag van 6,1 naar 6,6 miljoen IOPS op één CPU-kern.
- Geheugen en systeemdiensten
- Een nieuwe systeemaanroep futex_waitv is toegevoegd, waarmee de status van verschillende futexen kan worden gevolgd met één systeemaanroep. Deze functie lijkt op de functionaliteit WaitForMultipleObjects die beschikbaar is in Windows, waarvan de emulatie via futex_waitv nuttig kan zijn voor het verbeteren van de prestaties van Windows-spellen die worden uitgevoerd onder Wine of Proton. Bovendien kan het gelijktijdig wachten op futexen ook worden gebruikt om de prestaties van native Linux-spellen te optimaliseren.
- Het concept van geheugen pagina-folio's (page folios) is geïmplementeerd, waarvan het gebruik in sommige subsystemen van de kernel het geheugenbeheer bij typische workloads zal versnellen. Momenteel is de belangrijkste geheugensubsystemen in de kernel al overgezet naar folio's, evenals de implementatie van de paginacache, en in de toekomst is er een omzetten van besturingssystemen gepland. In de toekomst is het ook gepland om de ondersteuning voor multipagina folio's aan de kernel toe te voegen.
Folio's lijken op samengestelde geheugenpagina's (compound pages), maar onderscheiden zich door verbeterde semantiek en een duidelijkere organisatie van het werk. Voor het beheren van systeemgeheugen wordt beschikbare RAM verdeeld in geheugenpagina's, waarvan de grootte afhankelijk is van de architectuur, maar op x86-systemen wordt deze doorgaans in kilobytes gemeten (meestal 4096 bytes). Moderne systemen zijn uitgerust met tientallen gigabytes RAM, wat het geheugenbeheer bemoeilijkt vanwege de noodzaak om een enorme hoeveelheid geheugenpagina's te verwerken. Om het aantal pagina's te verminderen, is in de kernel eerder het concept van samengestelde pagina's (compound pages) geïmplementeerd met structuren die meer dan één fysieke geheugenpagina beslaan. Maar de API voor het manipuleren van samengestelde pagina's liet veel te wensen over en leidde tot extra overhead.
- Er is een handler toegevoegd aan de taakplanner die rekening houdt met de clustering van cache in de CPU. In sommige processoren, zoals Kunpeng 920 (ARM) en Intel Jacobsville (x86), kan een bepaald aantal CPU-kernen, meestal 4, L3 of L2 cache combineren. Het rekening houden met dergelijke topologieën kan de efficiëntie van de taakverdeling over CPU-kernen in de taakplanner significant verbeteren, aangezien het verplaatsen van taken binnen één CPU-cluster de geheugenbandbreedte verhoogt en de concurrentie in de cache vermindert.
- Ondersteuning voor AMX-instructies (Advanced Matrix Extensions) is toegevoegd, die werden geïmplementeerd in de opkomende serverprocessors van Intel Xeon Scalable, ontwikkeld onder de codenaam Sapphire Rapids. AMX biedt nieuwe configureerbare registers TMM 'TILE' en instructies voor het manipuleren van gegevens in deze registers, zoals TMUL (Tile matrix MULtiply) voor het vermenigvuldigen van matrices.
- Er zijn verschillende nieuwe mogelijkheden geïmplementeerd, gebaseerd op het in de vorige release toegevoegde sub-systeem DAMON (Data Access MONitor), dat het mogelijk maakt om de toegang tot gegevens in het geheugen te volgen, in relatie tot het geselecteerde proces dat draait in de gebruikersruimte. Het sub-systeem stelt bijvoorbeeld in staat om te analyseren naar welke specifieke geheugengebieden het proces tijdens zijn gehele werking heeft verwezen, en welke geheugengebieden onaangeroerd zijn gebleven.
- DAMON_RECLAIM voor het identificeren en uitsluiten van geheugengebieden die niet zijn aangesproken. Dit mechanisme kan worden gebruikt voor proactieve zachte uitsluiting van geheugenspagina's in gevallen van een dreigende uitputting van vrij geheugen.
- DAMOS (Data Access Monitoring-gebaseerde Operationele Schema's) voor het toepassen van opgegeven operaties madvise(), zoals het vrijgeven van extra vrije geheugen, op de geheugengebieden van het proces waarvoor een bepaalde toegangfrequentie tot het geheugen wordt vastgelegd. De configuratie van de parameters van DAMOS wordt uitgevoerd via debugfs.
- De mogelijkheid om het fysieke adresseringsruimte van geheugen te monitoren (voorheen kon alleen de virtuele adressen worden gevolgd).
- De implementatie van het compressie-algoritme zstd is bijgewerkt naar versie 1.4.10, wat heeft geleid tot een aanzienlijke prestatieverbetering in verschillende subsystems van de kernel waarin compressie wordt toegepast (bijvoorbeeld is het uitpakken van de kernelimage met 35% versneld, de prestaties van het uitpakken van gecomprimeerde gegevens in Btrfs en SquashFS zijn met 15% verhoogd, en in ZRAM met 30%). Oorspronkelijk werd in de kernel een afzonderlijke implementatie van zstd gebruikt, gebaseerd op versie 1.3.1, uitgebracht meer dan drie jaar geleden en die vele belangrijke optimalisaties niet bevatte. Naast de overstap naar de actuele versie vereenvoudigt de toegevoegde patch ook de synchronisatie met de upstream-tak van zstd, waardoor het mogelijk is om code te genereren voor opname in de kernel rechtstreeks uit de hoofdrepository van zstd. In de toekomst is het de bedoeling om de zstd-code in de kernel bij te werken naarmate er nieuwe versies van de zstd-bibliotheek beschikbaar komen.
- Er is een grote hoeveelheid verbeteringen aangebracht in het eBPF-systeem. De mogelijkheid is toegevoegd om functies van kernelmodules aan te roepen vanuit BPF-programma's. De functie bpf_trace_vprintk() is geïmplementeerd, die in tegenstelling tot bpf_trace_printk() in staat is om meer dan drie argumenten tegelijk af te drukken. Een nieuwe datastructuur (BPF map) bloom filter is toegevoegd, die de gebruik van een kansstructuur mogelijk maakt om de aanwezigheid van een element in een set te bepalen. Een nieuw attribuut BTF_KIND_TAG is toegevoegd, dat kan worden gebruikt in BPF-programma's om tags aan functieparameters te koppelen, bijvoorbeeld om het opsporen van fouten in gebruikersprogramma's te vergemakkelijken. In libbpf is het nu toegestaan om eigen secties .rodata.* / .data.* te creëren, en er is ondersteuning voor trace-gebeurtenissen uprobe en kprobe geïmplementeerd, plus een API voor het kopiëren van alle typen BTF van het ene object naar het andere. Ondersteuning voor AF_XDP is uit libbpf gehaald en in een aparte bibliotheek libxdp geplaatst. Voor de MIPS-architectuur is een JIT-compiler voor de BPF-virtuele machine geïmplementeerd.
- Voor de ARM64-architectuur is ondersteuning voor ARMv8.6-extensies voor timers geïmplementeerd, waaronder de mogelijkheid om zelf-synchronisatie van de weergave van systeemregisters zonder gebruik van ISB-instructies te waarborgen.
- Voor de PA-RISC-architectuur is de mogelijkheid geïmplementeerd om het KFENCE-mechanisme te gebruiken voor het opsporen van geheugenfouten, en is er ondersteuning toegevoegd voor de KCSAN-race condition detector.
- Er is de mogelijkheid geboden om toegangsrechten tot tracefs op het niveau van individuele gebruikers en groepen in te stellen, bijvoorbeeld, het is nu mogelijk om toegang tot traceermiddelen alleen toe te staan aan leden van een bepaalde groep.
- Virtualisatie en beveiliging
- In de io_uring- en device-mapper-subsystemen is ondersteuning voor het genereren van auditgebeurtenissen geïmplementeerd. In io_uring is de mogelijkheid voor toegangsscontrole via LSM-modules toegevoegd. Ook is er een audit-functie voor de systeemaanroep openat2() toegevoegd.
- De kernelcode is volledig ontdaan van ononderbroken case-uitspraken in switch (zonder return of break na elk case-blok). Bij het bouwen van de kernel kan nu de modus '-Wimplicit-fallthrough' worden toegepast.
- Wijzigingen zijn ingeschakeld om de grenscontroles tijdens het uitvoeren van de functie memcpy() te verscherpen.
- In de interface voor asynchrone invoer/uitvoer io_uring is de mogelijkheid geïmplementeerd om beveiligingsbeleid die door SELinux- en Smack-modules zijn gedefinieerd toe te passen op invoer/uitvoeroperaties.
- In het IMA (Integrity Measurement Architecture) subsysteem, dat een externe service in staat stelt de status van de kernel subsystemen te verifiëren om hun authenticiteit te waarborgen, is de mogelijkheid geïmplementeerd om regels op basis van de groepsidentifier (GID) toe te passen waartoe het bestand behoort of waarin de gebruiker die toegang heeft tot het bestand zich bevindt.
- Bepaalde geavanceerde beveiligingsmechanismen van seccomp() tegen Spectre-aanvallen zijn standaard uitgeschakeld, omdat ze als overbodig werden beschouwd en de beveiliging niet significant verhoogden, maar de prestaties negatief beïnvloedden. Het gebruik van Retpoline-beveiliging is heroverwogen.
- De implementatie van het cryptoloop-mechanisme is verwijderd, dat in 2004 werd vervangen door dm-crypt en indien nodig dezelfde algoritmes ondersteunt.
- Standaard is onbevoegde toegang tot het eBPF-subsysteem verboden. Deze wijziging is aangebracht om het gebruik van BPF-programma's voor het omzeilen van bescherming tegen zijaanvallen te voorkomen. Indien nodig kan de beheerder onbevoegd gebruik van eBPF door gebruikers herstellen.
- In de ACRN-hypervisor, ontworpen voor real-time taken en gebruik in kritieke systemen, is ondersteuning toegevoegd voor het creëren/verwijderen van virtuele apparaten en het doorgeven van MMIO-apparaten.
- In de cryptomotor is ondersteuning toegevoegd voor KPP-definities (Key-agreement Protocol Primitives), die de logica voor het ontwikkelen van stuurprogramma's voor cryptografische systemen vereenvoudigen.
- Voor de Hyper-V-hypervisor is ondersteuning gerealiseerd voor een isolatiemodus virtuele machines, wat inhoudt dat de inhoud van het geheugen wordt versleuteld.
- In de hypervisor KVM ondersteuning voor de RISC-V-architectuur is toegevoegd. De mogelijkheid voor migratie binnen de hostomgeving van virtuele machines, uitgevoerd met behulp van AMD SEV en SEV-ES-extensies, is gerealiseerd. Een API voor live-migratie van gastsystemen, versleuteld met behulp van AMD SEV (Secure Encrypted Virtualization), is toegevoegd.
- Voor de PowerPC-architectuur is de STRICT_KERNEL_RWX-modus standaard ingeschakeld, die het gebruik van geheugenspagina's blokkeert die tegelijkertijd voor schrijven en uitvoering toegankelijk zijn.
- Op 32-bit x86-systemen is de ondersteuning voor geheugenhotplug beëindigd, dat meer dan een jaar niet operationeel was.
- De liblockdep-bibliotheek is uit de kernel geëlimineerd en zal nu apart van de kernel worden onderhouden.
- Netwerk subsysteem
- Voor sockets is een nieuwe optie SO_RESERVE_MEM geïmplementeerd, waarmee een bepaalde hoeveelheid geheugen kan worden gereserveerd voor een socket, die altijd beschikbaar blijft voor de socket en niet wordt ingenomen. Het gebruik van deze optie zorgt voor prestatieverbetering door het aantal geheugenallocaties en -teruggaven in de netwerkstack te verminderen, vooral bij een tekort aan geheugen in het systeem.
- Ondersteuning voor het automatische multicast tunnelingprotocol (Automatic Multicast Tunneling, RFC 7450) is toegevoegd, waarmee multicast-verkeer uit netwerken die multicast ondersteunen, kan worden afgeleverd aan ontvangers in netwerken zonder multicast. Het protocol werkt door encapsulatie in UDP-pakketten.
- De encapsulatie van IOAM-gegevens (In-situ Operations, Administration, and Maintenance) in transitpakketten is verbeterd.
- In de ethtool netlink API is de mogelijkheid toegevoegd om de energiemodes van transceivers te beheren.
- In de netfilter-subsysteem is de mogelijkheid geïmplementeerd om pakketten te classificeren op het egress-niveau, dat wil zeggen op het moment dat de driver een pakket van de kernel netwerkstack ontvangt. In nftables is ondersteuning voor de bijbehorende filters toegevoegd in versie 1.0.1. In netfilter is de mogelijkheid toegevoegd om interne headers en gegevens voor UDP en TCP (inner header / payload) na de transportheader te matchen en te wijzigen.
- Nieuwe sysctl-parameters arp_evict_nocarrier en ndisc_evict_nocarrier zijn toegevoegd, waarmee de ARP-cache en de ndisc-tabel (neighbor discovery) worden gewist in geval van een verbroken verbinding (NOCARRIER).
- In het netwerkqueue-beheermechanisme fq_codel (Controlled Delay) zijn de modi Low Latency, Low Loss en Scalable Throughput (L4S) toegevoegd.
- Apparatuur
- In de amdgpu-driver is initiële ondersteuning voor de DP 2.0-specificatie (DisplayPort 2.0) en de mogelijkheid om DisplayPort via USB4 te tunnelen geïmplementeerd. Voor de APU Cyan Skillfish (uitgerust met een GPU Navi 1x) is ondersteuning voor displaycontrollers toegevoegd. Ondersteuning voor APU Yellow Carp (mobiele Ryzen 6000-processoren 'Rembrandt') is uitgebreid.
- In de i915-driver is de ondersteuning voor Intel Alderlake S-chips gestabiliseerd en is ondersteuning voor de Intel PXP-technologie (Protected Xe Path) geïmplementeerd, die de werking van een hardwarematig beveiligde grafische sessie op systemen met Intel Xe-chips mogelijk maakt.
- In de nouveau-driver zijn fouten opgelost en is de stijl van de code verbetert.
- Ondersteuning voor x86-compatibele CPU Vortex (Vortex86MX) is toegevoegd. Linux werkte eerder al op dergelijke processoren, maar een duidelijke identificatie van deze CPU's was nodig om de bescherming tegen Spectre/Meltdown-aanvallen uit te schakelen, die niet van toepassing zijn op de genoemde chips.
- Initiële ondersteuning voor x86-platforms Surface Pro 8 en Surface Laptop Studio is toegevoegd.
- Een stuurprogramma is toegevoegd voor de ondersteuning van de audioprocessoren gebruikt in APU AMD Yellow Carp, Van Gogh, en er is ook ondersteuning toegevoegd voor audiosystemen en codecs zoals Cirrus CS35L41, Maxim MAX98520/MAX98360A, Mediatek MT8195, Nuvoton NAU8821, NVIDIA Tegra210, NXP i.MX8ULP, Qualcomm AudioReach, Realtek ALC5682I-VS, RT5682S, RT9120, Rockchip RV1126 en RK3568.
- Een stuurprogramma is toegevoegd voor ishtp_eclite voor toegang tot de ingebouwde controllers van Intel PSE (Programmable Service Engine) via het ISHTP-protocol (Integratd Sensor Hub Transport Protocol), bijvoorbeeld voor het verkrijgen van gegevens over de batterij, temperatuur en informatie gerelateerd aan UCSI (USB Type-C Connector System Software Interface).
- Een stuurprogramma is toegevoegd voor de Nintendo Switch-gamecontrollers, dat ondersteuning biedt voor Switch Pro- en Joy-Con-apparaten. Ondersteuning voor Wacom Intuos BT-tablets (CTL-4100WL/CTL-6100WL) en het Apple 2021 Magic Keyboard is toegevoegd. De ondersteuning voor Sony PlayStation DualSense-controllers is verbeterd. Ondersteuning voor de zijknoppen van de Xiaomi Mi-muis is ook toegevoegd.
- Stuurprogramma RT89 is toegevoegd met ondersteuning voor Realtek 802.11ax draadloze chips, evenals stuurprogramma's voor Ethernet-adapters Asix AX88796C-SPI en switches Realtek RTL8365MB-VC.
- Voor de Apple M1-chips zijn stuurprogramma's voor PCI en PASemi i2c toegevoegd.
- Ondersteuning voor ARM SoC, apparaten en boards zoals Raspberry Pi Compute Module 4, Fairphone 4, Snapdragon 690, LG G Watch R, Sony Xperia 10 III, Samsung Galaxy S4 Mini Value Edition, Xiaomi MSM8996 (Mi 5, Mi Note 2, Mi 5s, Mi Mix, Mi 5s Plus en Xiaomi Mi 5), Sony Yoshino (Sony Xperia XZ1 en Sony Xperia XZ Premium), F(x)tec Pro1 QX1000, Microchip LAN966, CalAmp LMU5000, Exegin Q5xR5, sama7g5, Samsung ExynosAutov9, Rockchip RK3566, RK3399 ROCK Pi 4A+, RK3399 ROCK Pi 4B+, Firefly ROC-RK3328-PC, Firefly ROC-RK3399-PC-PLUS, ASUS Chromebook Tablet CT100, Pine64 Quartz64-A, Netgear GS110EMX, Globalscale MOCHAbin 7040, NXP S32G2, Renesas R8A779M*, Xilinx Kria, Radxa Zero, JetHub D1/H1, Netronix E70K02 is toegevoegd.
Bron: opennet.ru
