Efter tvÄ mÄnaders utveckling presenterade Linus Torvalds utgÄvan av Linux-kÀrnan 5.16. Bland de mest framtrÀdande förÀndringarna finns systemanropet futex_waitv för att öka prestandan för Windows-spel i Wine, felspÄrning i filsystemet via fanotify, konceptet med foliant i minneshanteringssystemet, stöd för processorinstruktioner AMX, möjligheten att reservera minne för nÀtverks-sockets, stöd i netfilter för paketklassificering under "egress", anvÀndning av DAMON-systemet för proaktiv utslagning av oanvÀnda minnesomrÄden, förbÀttrad hantering av överbelastningar vid stora skrivoperationer, samt stöd för multipla hÄrddiskar.
I den nya versionen har 15415 patchar accepterats frÄn 2105 utvecklare, patchstorleken Àr 45 MB (förÀndringarna berör 12023 filer, 685198 rader kod har lagts till och 263867 rader har tagits bort). UngefÀr 44% av alla Àndringar i 5.16 relaterar till enhetsdrivrutiner, cirka 16% av Àndringarna handlar om uppdatering av kod som Àr specifik för hÄrdvaruarkitekturer, 16% rör nÀtverksstacken, 4% handlar om filsystem och 4% om interna kÀrnsystem.
De huvudsakliga nyheterna i kÀrnan 5.16:
- Disksubsystem, in- och utmatning och filsystem
- Fanotify-mekanismen har fÄtt verktyg för att övervaka tillstÄndet hos filsystemet och spÄra uppkomsten av fel. Information om fel överförs med hjÀlp av en ny typ av hÀndelser - FAN_FS_ERROR, som kan fÄngas i anvÀndarutrymmet av övervakningssystem för att snabbt informera administratören eller starta ÄterstÀllningsprocesser. Vid kaskaduppkomsten av en serie fel sÀkerstÀller fanotify att meddelandet om det första felet levereras tillsammans med en totalrÀknare för problem, för att underlÀtta den efterföljande analysen av orsaken till kraschen. Stödet för felspÄrning har för nÀrvarande implementerats endast för filsystemet Ext4.
- FörbÀttrad hantering av skrivbelastningar (write congestion) vid skrivoperationer som uppstÄr nÀr skrivoperationernas volym överskrider lagringens bandbredd och systemet tvingas blockera skrivprocessens förfrÄgningar tills redan skickade förfrÄgningar har genomförts. I den nya versionen har kÀrnans mekanism som anvÀnds för att fÄ information om uppkomsten av skrivbelastning och blockering av uppgifter helt omarbetats, eftersom den gamla implementationen hade problem med hantering av skrivbelastning i samband med utbyte av minnessidor till vÀxlingsutrymme vid brist pÄ minne i systemet.
- I Btrfs har stöd för enhetsszoneringsteknik (Zoned Namespace) implementerats, som anvÀnds i hÄrddiskar eller NVMe SSD:er för att dela lagringsutrymmet i zoner bestÄende av block eller sektorer, dÀr endast sekventiell datainsÀttning Àr tillÄten medan hela blockgrupper uppdateras. Dessutom har smÄ optimeringar av inode-loggning genomförts, vilket har ökat genomströmningen i dbench-testet med 3 % och minskat fördröjningarna med 11 %. Mekanismen för katalogloggning har omarbetats för att öka effektiviteten genom att minska antalet sökningar och lÄsningarna i trÀdet. InsÀttning av element i btree-strukturen i batchlÀge har pÄskyndats (tiden för massinsÀttning av element har minskat med 4 % och borttagningar med 12 %). BegrÀnsat stöd för anvÀndning av komprimering vid skrivning av ofullstÀndiga sidor har lagts till, liksom möjligheten till defragmentering av subpages. Förberedelser har genomförts för att inkludera stöd för den andra versionen av protokollet för kommandot "send".
- I filsystemet XFS har minnesförbrukningen minskats genom anvÀndning av separata slab-cachear för ofta anvÀnda element och genom att minska vissa datakonstruktioner.
- I filsystemet Ext4 har endast fel som har rÀttats och en mer exakt berÀkning av parametrarna för fördröjd initialisering av Inode-tabellen noterats.
- PÄ blockenhetsnivÄ har optimeringar implementerats som avsevÀrt ökar effektiviteten av bindning av operationer till CPU-kÀrnor.
- Inledande stöd för hÄrddiskar med flera oberoende drivningar (multi-actuator) har lagts till, vilket möjliggör samtidig Ätkomst till flera sektorer i olika zoner av den magnetiska plattan.
- En ny ioctl-kommando CDROM_TIMED_MEDIA_CHANGE har lagts till för att identifiera media byten i optiska enheter.
- I filsystemet EROFS (Enhanced Read-Only File System) har stöd för att fungera över flera lagringsenheter lagts till. Olika enheter kan Äterspeglas i ett enda 32-bitars adressutrymme för block. Stöd för komprimering med LZMA-algoritmen har ocksÄ lagts till.
- I F2FS-filsystemet har monteringsalternativ lagts till för att hantera fragmentering av filer nÀr de placeras i lagring (till exempel för att felsöka optimeringar för fragmenterade lagringssystem).
- I CEPH har operationer för att skapa och ta bort kataloger automatiskt aktiverats som standard i asynkront lĂ€ge (för att Ă„tergĂ„ till gammalt beteende bör flaggan â-o wsyncâ anvĂ€ndas vid montering). Det har lagts till mĂ€tningar som spĂ„rar operationer för kopiering av externa objekt.
- I CIFS har monteringsparametern tcpnodelay lagts till, vilket stÀller in tcp_sock_set_nodelay-lÀget för nÀtverksocket, vilket inaktiverar vÀntan pÄ att köerna i TCP-stacken ska fyllas. Stöd för inbÀddade DFS-lÀnkar (Distributed File System) har lagts till vid ommontering.
- Stöd för att slutföra begÀrningar till blockenheter i batchlÀge har lagts till. Testning av förÀndringen visade en ökning av intensiteten för random read-operationer frÄn Optane-enheter frÄn 6,1 till 6,6 miljoner IOPS per kÀrna i CPU.
- Minne och systemtjÀnster
- Ett nytt systemanrop futex_waitv har lagts till, vilket möjliggör att övervaka tillstÄndet hos flera futexar med ett enda systemanrop. Denna funktionalitet liknar den tillgÀngliga i Windows, WaitForMultipleObjects, vars emulering via futex_waitv kan vara anvÀndbar för att öka prestandan hos Windows-spel som körs under Wine eller Proton. Dessutom kan samtidig övervakning av futexar anvÀndas för att optimera prestandan hos inhemska spelförsamlingar för Linux.
- Konceptet med minnessidor (page folios) har realiserats, vilket möjliggör snabbare minneshantering vid typiska belastningar i vissa delsystem av kÀrnan. För nÀrvarande har den grundlÀggande minneshanteringssubsystemet i kÀrnan och implementeringen av sidcache redan överförts till foley, och i framtiden planeras en överföring av filsystem. Dessutom planeras det ocksÄ att stödja fler-sidiga foley i kÀrnan.
Foley liknar sammanslagna minnessidor (compound pages), men har förbÀttrad semantik och en mer begriplig arbetsorganisation. För att hantera systemminnet delas tillgÀngligt RAM-minne upp i minnessidor vars storlek beror pÄ arkitekturen, men pÄ x86-system mÀts de i kilobyte (vanligtvis 4096 byte). Moderna system Àr utrustade med tiotals gigabyte RAM, vilket leder till en mer komplex minneshantering pÄ grund av behovet av att hantera ett stort antal minnessidor. För att minska antalet sidor har konceptet med sammanslagna sidor (compound pages) implementerats i kÀrnan, med strukturer som tÀcker mer Àn en fysisk minnessida. Men API:et för att manipulera med sammanslagna sidor lÀmnade mycket att önska och ledde till ytterligare overhead.
- En handler som beaktar cacheklustring i CPU har lagts till i schemalÀggaren. I vissa processorer, som Kunpeng 920 (ARM) och Intel Jacobsville (x86), kan ett visst antal CPU-kÀrnor, vanligtvis 4, dela L3 eller L2-cache. Att ta hÀnsyn till sÄdana toppologier kan avsevÀrt öka effektiviteten i fördelningen av uppgifter bland CPU-kÀrnor i schemalÀggaren, eftersom flyttning av uppgifter inom ett enda CPU-kluster ökar bandbredden för minnesÄtkomst och minskar konkurrensen i cachen.
- Stöd för AMX-instruktioner (Advanced Matrix Extensions) har lagts till, implementerade i de kommande serverprocessorerna Intel Xeon Scalable, som utvecklas under kodnamnet Sapphire Rapids. AMX erbjuder nya anpassningsbara register TMM "TILE" och instruktioner för att manipulera data i dessa register, som TMUL (Tile matrix MULtiply) för matrisprodukter.
- Flera nya funktioner har implementerats baserat pÄ den DAMON (Data Access MONitor) underavdelning som lades till i föregÄende version, vilket möjliggör övervakning av dataÄtkomst i det operativa minnet i samband med den valda processen som körs i anvÀndarutrymmet. Till exempel ger underavdelningen möjlighet att analysera vilka specifika minnesomrÄden processen har tillgÄtt under hela sin livslÀngd, samt vilka minnesomrÄden som förblev ouppskattade.
- DAMON_RECLAIM för identifiering och utvisning av minnesomrÄden som inte har tillgÄtts. Mekanismen kan anvÀndas för proaktiv mjuk utvisning av minnessidor nÀr man nÀrmar sig brist pÄ ledigt minne.
- DAMOS (Data Access Monitoring-based Operation Schemes) för tillÀmpning av specificerade operationer madvise(), sÄsom frigöring av ytterligare ledigt minne, pÄ minnesomrÄden för vilka en viss Ätkomstfrekvens registreras. InstÀllningarna för DAMOS konfigureras via debugfs.
- Möjlighet att övervaka det fysiska adressutrymmet av minnet (tidigare kunde man endast övervaka virtuella adresser).
- Implementeringen av zstd-komprimeringsalgoritmen har uppdaterats till version 1.4.10, vilket har lett till en betydande ökning av prestanda i olika kÀrnunderavdelningar dÀr komprimering tillÀmpas (till exempel har uppackning av kÀrnbilden accelererats med 35%, medan prestanda för uppackning av komprimerade data i Btrfs och SquashFS har ökat med 15%, och i ZRAM med 30%). Ursprungligen anvÀndes en separat implementation av zstd i kÀrnan, baserad pÄ version 1.3.1, som slÀpptes för mer Àn tre Är sedan och som inte inkluderade mÄnga viktiga optimeringar. Förutom att vi gÄr över till den aktuella versionen förenklar den tillagda patchen Àven synkroniseringen med upstream-grenen av zstd, vilket möjliggör generering av kod för inkludering i kÀrnan direkt frÄn huvudrepo av zstd. I framtiden planeras kod av zstd i kÀrnan att uppdateras i takt med att nya versioner av zstd-biblioteket slÀpps.
- En stor mÀngd förbÀttringar har införts i eBPF-subsystemet. Möjlighet att anropa funktioner frÄn kÀrnmoduler ur BPF-program har lagts till. Funktionen bpf_trace_vprintk() har implementerats, vilket skiljer sig frÄn bpf_trace_printk() och tillÄter att skriva ut fler Àn tre argument pÄ en gÄng. En ny datalagringsstruktur (BPF map) bloom filter har lagts till, vilket möjliggör anvÀndning av en sannolikhetsdatabashanteringsstruktur för att avgöra om ett element finns i en uppsÀttning. En ny attribut BTF_KIND_TAG har lagts till, som kan anvÀndas i BPF-program för att koppla taggar till funktionsparametrar, till exempel för att förenkla felidentifiering i anvÀndarprogram. I libbpf har det blivit möjligt att skapa egna sektioner .rodata.*\/data.*, stöd för spÄrningseventen uprobe och kprobe har implementerats, och ett API för att kopiera alla typer av BTF frÄn ett objekt till ett annat har lagts till. Stödet för AF_XDP har flyttats ut frÄn libbpf till ett separat bibliotek libxdp. För MIPS-arkitekturen har en JIT-kompilator för BPF virtuella maskin implementerats.
- För ARM64-arkitekturen har stöd för ARMv8.6-förlÀngningar för timern implementerats, inklusive de som möjliggör sjÀlvsynergi av systemregister utan att anvÀnda ISB-instruktioner.
- För PA-RISC-arkitekturen har det blivit möjligt att anvÀnda KFENCE-mekanismen för att upptÀcka minnesfel, och stöd för KCSAN-racedetektorer har lagts till.
- Möjlighet till att konfigurera accessrÀttigheter till tracefs pÄ anvÀndar- och gruppnivÄ har tillhandahÄllits, till exempel kan nu Ätkomst till spÄrningsverktyg endast ges till medlemmar i en viss grupp.
- Virtualisering och sÀkerhet
- I io_uring- och device-mapper-subsystemen har stöd för att generera revisionshÀndelser implementerats. I io_uring har tillgÄngshantering genom LSM-moduler lagts till. Möjlighet till revision av systemanropet openat2() har lagts till.
- KÀrnkoden har helt befriats frÄn oavbrutna case-uttryck i switch (utan return eller break efter varje case-block). Vid kompilering av kÀrnan kan nu lÀget "-Wimplicit-fallthrough" tillÀmpas.
- Ăndringar för att skĂ€rpa grĂ€nskontroller vid körning av memcpy()-funktionen har ingĂ„tt.
- I grÀnssnittet för asynkron in-/utdata io_uring har möjligheten att tillÀmpa sÀkerhetspolicys pÄ in-/utdataoperationer, definierade av SELinux och Smack-moduler, implementerats.
- I IMA (Integrity Measurement Architecture) subsystem, which allows an external service to verify the state of the core subsystems to ensure their authenticity, has implemented the ability to apply rules based on the group identifier (GID) to which the file belongs or which the user accessing the file is part of.
- Some advanced stream protection mechanisms of seccomp() against Spectre-class attacks are disabled by default, as they were considered excessive and did not significantly improve security but negatively impacted performance. The use of Retpoline protection has been revised.
- The implementation of the cryptoloop mechanism has been removed, which was replaced by dm-crypt in 2004 and supports the same algorithms if necessary.
- By default, unprivileged access to the eBPF subsystem is prohibited. This change has been made to prevent the use of BPF programs to bypass protection against side-channel attacks. If necessary, the administrator can restore the ability to use eBPF by unprivileged users.
- The ACRN hypervisor, designed for real-time tasks and use in critical systems, has added support for creating/deleting virtual devices and forwarding MMIO devices.
- Support for KPP (Key-agreement Protocol Primitives) definitions has been added to the cryptographic engine, simplifying the logic of driver development for cryptosystems.
- Isolation mode has been implemented for the Hyper-V hypervisor virtuella maskiner, which involves encrypting the contents of memory.
- I hypervisorn KVM support for the RISC-V architecture has been added. The ability to migrate virtual machines running using AMD SEV and SEV-ES extensions within the host environment has been implemented. An API for live migration of guest systems encrypted with AMD SEV (Secure Encrypted Virtualization) has been added.
- For the PowerPC architecture, the STRICT_KERNEL_RWX mode is enabled by default, blocking the use of memory pages that are simultaneously writable and executable.
- Support for memory hotplug on 32-bit x86 systems has been discontinued, which had been non-functional for over a year.
- The liblockdep library has been removed from the kernel and will now be maintained separately from the kernel.
- NĂ€tverkssystemet
- För sockets har en ny möjlighet, SO_RESERVE_MEM, införts, vilket gör att du kan reservera ett visst minnesutrymme för en socket som alltid kommer att vara tillgÀngligt och inte tas bort. AnvÀndningen av den hÀr funktionen gör det möjligt att öka prestandan genom att minska antalet minnesallokeringar och ÄterlÀmnanden i nÀtverksstacken, sÀrskilt under förhÄllanden med brist pÄ minne i systemet.
- Stöd för protokollet för automatisk tunnelerings multicast-trafik (Automatic Multicast Tunneling, RFC 7450) har lagts till, vilket gör det möjligt att leverera multicast-trafik frÄn nÀtverk som stöder multicast till mottagare i nÀtverk utan multicast. Protokollet fungerar genom att kapsla in i UDP-paket.
- Inkapsering av IOAM (In-situ Operations, Administration, and Maintenance) data i transitpaket har förbÀttrats.
- I ethtool netlink API har möjligheten att styra strömförbrukningslÀgen för sÀndare och mottagare lagts till.
- I netfilter-subsystemet har möjligheten att klassificera paket pÄ egress-nivÄ, dvs. nÀr drivrutinen tar emot ett paket frÄn kÀrnans nÀtverksstack, införts. I nftables infördes stöd för motsvarande filter i version 1.0.1. I netfilter har möjligheten att matcha och Àndra interna rubriker och data för UDP och TCP (inner header / payload) som kommer efter transportrubriken, lagts till.
- Nya sysctl-parametrar arp_evict_nocarrier och ndisc_evict_nocarrier har lagts till. NÀr dessa Àr instÀllda kommer ARP-cache och ndisc-tabellen (neighbor discovery) att rensas vid förlust av anslutning (NOCARRIER).
- I mekanismen för hantering av nÀtverksköer fq_codel (Controlled Delay) har lÀgen för lÄg latens, lÄg förlust och skalbar genomströmning (L4S) lagts till.
- Utrustning
- I amdgpu-drivrutinen har inledande stöd för DP 2.0-specifikationen (DisplayPort 2.0) och möjligheten att tunnelera DisplayPort över USB4 införts. För APU Cyan Skillfish (utrustade med GPU Navi 1x) har stöd för displaykontroller lagts till. Utökat stöd för APU Yellow Carp (mobila Ryzen 6000-processorer "Rembrandt").
- I i915-drivrutinen har stödet för Intel Alderlake S-chips stabiliserats och stöd för Intel PXP-teknologin (Protected Xe Path) införts, vilket möjliggör organisering av en hÄrdvaruskyddad grafisk session pÄ system med Intel Xe-chips.
- I nouveau-drivrutinen har arbete genomförts för att ÄtgÀrda buggar och förbÀttra kodens stil.
- Stöd för x86-kompatibla Vortex CPU:er (Vortex86MX) har lagts till. Linux har fungerat pÄ sÄdana processorer tidigare, men tydlig identifiering av dessa CPU:er var nödvÀndig för att inaktivera skydd mot Spectre/Meltdown-attacker, som inte Àr tillÀmpliga pÄ dessa chip.
- Början av stödet för x86-plattformarna Surface Pro 8 och Surface Laptop Studio har lagts till.
- En drivrutin för stöd av ljudchip som anvÀnds i AMD Yellow Carp och Van Gogh APU:er har lagts till, samt stöd för ljudsystem och codec:er Cirrus CS35L41, Maxim MAX98520/MAX98360A, Mediatek MT8195, Nuvoton NAU8821, NVIDIA Tegra210, NXP i.MX8ULP, Qualcomm AudioReach, Realtek ALC5682I-VS, RT5682S, RT9120, Rockchip RV1126 och RK3568.
- En drivrutin för ishtp_eclite har lagts till för att fÄ tillgÄng till de inbyggda Intel PSE-kontrollerna (Programmable Service Engine) via ISHTP-protokollet (Integrated Sensor Hub Transport Protocol), till exempel för att hÀmta information om batteri, temperatur och data relaterad till UCSI (USB Type-C Connector System Software Interface).
- En drivrutin för Nintendo Switch-spelkontroller har lagts till, som stöder Switch Pro- och Joy-Con-enheter. Stöd för Wacom Intuos BT-tabletter (CTL-4100WL/CTL-6100WL) och Apple 2021 Magic Keyboard har lagts till. Stödet för Sony PlayStation DualSense-kontroller har förbÀttrats. Stöd för sidoknappar pÄ Xiaomi Mi-mus har lagts till.
- Drivrutinen RT89 med stöd för trÄdlösa Realtek 802.11ax-chip har lagts till, liksom drivrutiner för Ethernet-adaptrar Asix AX88796C-SPI och switchar Realtek RTL8365MB-VC.
- För Apple M1-chips har drivrutiner för PCI och PASemi i2c lagts till.
- Stöd för ARM SoC, enheter och kort 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 och Xiaomi Mi 5), Sony Yoshino (Sony Xperia XZ1 och 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 har lagts till.
KĂ€lla: opennet.ru
