Linux-kärnan version 5.18

Efter två månaders utveckling presenterade Linus Torvalds releasen av Linux-kärnan 5.18. Bland de mest anmärkningsvärda förändringarna: en stor sanering av föråldrad funktionalitet genomfördes, Reiserfs FS förklarades föråldrad, spårningshändelser för användarprocesser implementerades, stöd för mekanismen för att blockera Intel IBT-exploater lades till, ett läge för detektering av buffertspill aktiverades när med funktionen memcpy() lades en mekanism för att spåra fprobe-funktionsanrop till, prestandan för uppgiftsschemaläggaren på AMD Zen-processorer har förbättrats, en drivrutin för att hantera Intel CPU-funktionalitet (SDS) har inkluderats, några patchar har integrerats för omstrukturering av header-filer, och användningen av C11-standarden har godkänts.

Den nya versionen innehåller 16206 2127 korrigeringar från 14203 1995 utvecklare (i den senaste versionen fanns det 108 14235 korrigeringar från 1340982 593836 utvecklare), patchstorleken är 44 MB (ändringarna påverkade 5.18 16 filer, 11 3 3 rader kod lades till, XNUMX XNUMX rader raderades). Cirka XNUMX % av alla ändringar som introduceras i XNUMX är relaterade till drivrutiner, cirka XNUMX % av ändringarna är relaterade till uppdateringskod som är specifik för hårdvaruarkitekturer, XNUMX % är relaterade till nätverksstacken, XNUMX % är relaterade till filsystem och XNUMX % är relaterade till interna kärndelsystem.

Huvudsakliga innovationer i kärnan 5.18:

  • Diskundersystem, I/O och filsystem
    • Btrfs-filsystemet har lagt till stöd för vidarebefordran av komprimerad data vid sändning och mottagning. Tidigare, när man använde skicka/ta emot, dekomprimerade den sändande sidan data som lagrats i komprimerad form, och den mottagande sidan komprimerade om den innan den skrevs. I 5.18-kärnan fick användarutrymmesapplikationer som använder skicka/ta emot samtal möjligheten att överföra komprimerad data utan ompaketering. Funktionaliteten implementeras tack vare de nya ioctl-operationerna BTRFS_IOC_ENCODED_READ och BTRFS_IOC_ENCODED_WRITE, som låter dig läsa och skriva information direkt i omfattning.

      Dessutom förbättrar Btrfs fsync-prestanda. Lade till möjligheten att deduplicera och utföra reflink (klona filmetadata genom att skapa en länk till befintlig data utan att faktiskt kopiera den) för hela lagringen, inte begränsat till monteringspunkter.

    • I Direct I/O-läge är det möjligt att komma åt krypterade filer när fscrypt använder inline-kryptering, där kryptering och dekrypteringsoperationer utförs av enhetskontrollern snarare än kärnan. Med vanlig kärnkryptering är åtkomst till krypterade filer med Direct I/O fortfarande omöjlig, eftersom filer nås förbi buffringsmekanismen i kärnan.
    • NFS-servern har som standard stöd för NFSv3-protokollet, vilket nu inte kräver separat aktivering och är tillgängligt när NFS är aktiverat generellt. NFSv3 anses vara den huvudsakliga och alltid stödda versionen av NFS, och stödet för NFSv2 kan komma att upphöra i framtiden. Effektiviteten för att läsa kataloginnehåll har förbättrats avsevärt.
    • ReiserFS-filsystemet har fasats ut och förväntas tas bort 2025. Att fasa ut ReiserFS kommer att minska ansträngningen som krävs för att underhålla filsystemomfattande förändringar relaterade till stöd för det nya API:et för montering, iomap och tomes.
    • För filsystemet F2FS har möjligheten att mappa användar-ID:n för monterade filsystem implementerats, vilket används för att jämföra filerna för en specifik användare på en monterad främmande partition med en annan användare på det aktuella systemet.
    • Koden för att beräkna statistik i Device-mapper-hanterare har omarbetats, vilket avsevärt har förbättrat noggrannheten i redovisningen i hanterare som dm-crypt.
    • NVMe-enheter stöder nu 64-bitars kontrollsummor för integritetskontroll.
    • För exfat-filsystemet har ett nytt monteringsalternativ "keep_last_dots" föreslagits, vilket inaktiverar borttagning av punkter i slutet av filnamnet (i Windows tas prickar i slutet av filnamnet bort som standard).
    • EXT4 förbättrar prestandan för fast_commit-läget och ökar skalbarheten. Monteringsalternativet "mb_optimize_scan", som gör det möjligt att öka prestandan under förhållanden med stora filsystemfragmentering, är anpassat för att arbeta med filer med omfattningar.
    • Stöd för skrivströmmar i delsystemet som stöder blockenheter har upphört. Den här funktionen föreslogs för SSD-enheter, men var inte utbredd och det finns för närvarande inga enheter i bruk som stöder detta läge och det är osannolikt att de kommer att dyka upp i framtiden.
  • Minnes- och systemtjänster
    • Integreringen av en uppsättning patchar har börjat, vilket gör det möjligt att avsevärt minska tiden för återuppbyggnad av kärnan genom att omstrukturera hierarkin av rubrikfiler och minska antalet korsberoenden. Kernel 5.18 innehåller patchar som optimerar strukturen för uppgiftsschemaläggarens rubrikfiler (kärna/schema). Jämfört med den tidigare versionen minskade CPU-tidsförbrukningen vid montering av kärna/sched/-kod med 61 % och den faktiska tiden minskade med 3.9 % (från 2.95 till 2.84 sek).
    • Kärnkoden är tillåten att använda C11-standarden, publicerad 2011. Tidigare behövde kod som lades till kärnan överensstämma med ANSI C (C89)-specifikationen, som bildades redan 1989. I 5.18 kärnbyggnadsskript ersattes alternativet '—std=gnu89' med '—std=gnu11 -Wno-shift-negative-value'. Möjligheten att använda C17-standarden övervägdes, men i det här fallet skulle det vara nödvändigt att öka den minsta stödda versionen av GCC, medan inkluderingen av C11-stöd passar in i de nuvarande kraven för GCC-versionen (5.1).
    • Förbättrad prestanda för uppgiftsschemaläggning på AMD-processorer med Zen-mikroarkitektur, som tillhandahåller multipla Last Level Cache (LLC) för varje nod med lokala minneskanaler. Den nya versionen eliminerar LLC-obalansen mellan NUMA-noder, vilket ledde till en betydande ökning av prestanda för vissa typer av arbetsbelastning.
    • Verktyg för att spåra applikationer i användarutrymmet har utökats. Den nya kärnversionen lägger till möjligheten för användarprocesser att skapa användarhändelser och skriva data till spårningsbufferten, som kan ses genom standardverktyg för kärnspårning som ftrace och perf. Spårningshändelser för användarutrymme är isolerade från kärnspårningshändelser. Händelsestatus kan ses via filen /sys/kernel/debug/tracing/user_events_status, och händelseregistrering och dataregistrering via filen /sys/kernel/debug/tracing/user_events_data.
    • Lade till en mekanism för att övervaka (probe) funktionsanrop - fprobe. fprobe API är baserat på ftrace, men begränsas endast av möjligheten att koppla återuppringningshanterare till funktionsingångspunkter och funktionsutgångspunkter. Till skillnad från kprobes och kretprobes tillåter den nya mekanismen dig att använda en hanterare för flera funktioner samtidigt.
    • Stödet för äldre ARM-processorer (ARMv4 och ARMv5) som inte är utrustade med en minneshanteringsenhet (MMU) har upphört. Stöd för ARMv7-M-system utan MMU bibehålls.
    • Stödet för den RISC-liknande NDS32-arkitekturen som används i Andes Technologies-processorer har upphört. Koden togs bort på grund av bristande underhåll och bristande efterfrågan på NDS32-stöd i Linux-huvudkärnan (återstående användare använder specialiserade kärnbyggen från hårdvarutillverkare).
    • Som standard är att bygga kärnan med stöd för det körbara filformatet a.out inaktiverat för alfa- och m68k-arkitekturerna, som fortsätter att använda detta format. Det är troligt att stödet för det äldre a.out-formatet kommer att tas bort helt från kärnan snart. Planer på att ta bort a.out-formatet har diskuterats sedan 2019.
    • PA-RISC-arkitekturen ger minimalt stöd för vDSO-mekanismen (virtual dynamic shared objects), som ger en begränsad uppsättning systemanrop tillgängliga i användarutrymmet utan kontextbyte. vDSO-stöd gjorde det möjligt att implementera möjligheten att köra med en icke-körbar stack.
    • Tillagt stöd för Intel HFI (Hardware Feedback Interface)-mekanismen, som gör att hårdvaran kan överföra information till kärnan om aktuell prestanda och energieffektivitet för varje CPU.
    • Lade till en drivrutin för Intel SDSi-mekanismen (Software-Defined Silicon), som låter dig kontrollera införandet av ytterligare funktioner i processorn (till exempel specialiserade instruktioner och extra cacheminne). Tanken är att chips kan levereras till ett lägre pris med avancerade funktioner låsta, som sedan kan "köpas" och ytterligare funktioner aktiveras utan hårdvarubyte av chipet.
    • Amd_hsmp-drivrutinen har lagts till för att stödja AMD HSMP-gränssnittet (Host System Management Port), som ger tillgång till processorhanteringsfunktioner genom en uppsättning specialregister som har dykt upp i AMD EPYC-serverprocessorer från och med Fam19h-generationen. Genom HSMP kan du till exempel få data om strömförbrukning och temperatur, ställa in frekvensgränser, aktivera olika prestandaförbättringslägen och hantera minnesparametrar.
    • Det asynkrona I/O-gränssnittet io_uring implementerar alternativet IORING_SETUP_SUBMIT_ALL för att registrera en uppsättning filbeskrivningar i en ringbuffert, och operationen IORING_OP_MSG_RING för att skicka en signal från en ringbuffert till en annan ringbuffert.
    • DAMOS-mekanismen (Data Access Monitoring-Based Operation Schemes), som gör att minne kan frigöras med hänsyn till frekvensen av minnesåtkomst, har utökade möjligheter för att övervaka minnesoperationer från användarutrymmet.
    • En tredje serie patchar har integrerats med implementeringen av konceptet sidfolios, som liknar sammansatta sidor, men har förbättrad semantik och en tydligare organisation av arbetet. Genom att använda tomes kan du snabba upp minneshanteringen i vissa kärndelsystem. I de föreslagna patcharna översattes funktioner för internminneshantering till folios, inklusive varianter av get_user_pages()-funktionen. Tillhandahöll stöd för att skapa stora volymer i läs-ahead-kod.
    • Monteringssystemet stöder nu miljövariabler USERCFLAGS och USERLDFLAGS, med vilka du kan skicka ytterligare flaggor till kompilatorn och länken.
    • I eBPF-undersystemet ger BTF-mekanismen (BPF Type Format), som tillhandahåller typkontrollinformation i BPF-pseudokod, möjligheten att lägga till kommentarer till variabler som hänvisar till minnesområden i användarutrymmet. Anteckningar hjälper BPF-kodverifieringssystemet att bättre identifiera och verifiera minnesåtkomster.
    • En ny minnesallokeringshanterare för lagring av laddade BPF-program har föreslagits, som möjliggör mer effektiv användning av minnet i situationer där ett stort antal BPF-program laddas.
    • MADV_DONTNEED_LOCKED-flaggan har lagts till madvise()-systemanropet, som tillhandahåller verktyg för att optimera processminneshantering, som kompletterar den befintliga MADV_DONTNEED-flaggan, genom vilken kärnan kan informeras i förväg om den förestående utgivningen av ett minnesblock, d.v.s. att detta block inte längre behövs och kan användas av kärnan. Till skillnad från MADV_DONTNEED är användningen av MADV_DONTNEED_LOCKED-flaggan tillåten för minnessidor som är fästa i RAM, som, när madvise anropas, vräknas utan att ändra deras pinnade status och, i händelse av en efterföljande åtkomst till blockering och generering av en "sida fel”, returneras med bindningen bevarad. Dessutom har en ändring lagts till för att tillåta MADV_DONTNEED-flaggan att användas med stora minnessidor i HugeTLB.
  • Virtualisering och säkerhet
    • För x86-arkitekturen har stöd lagts till för Intel IBT (Indirect Branch Tracking) kommandoflödesskyddsmekanism, som förhindrar användningen av utnyttjande konstruktionstekniker som använder returorienterade programmeringstekniker (ROP, Return-Oriented Programming), där exploateringen bildas i form av en kedja av anrop som redan finns i minnet av delar av maskininstruktioner som slutar med en kontrollreturinstruktion (som regel är dessa funktioners slut). Kärnan i den implementerade skyddsmetoden är att blockera indirekta övergångar till kroppen av en funktion genom att lägga till en speciell ENDBR-instruktion i början av funktionen och tillåta exekvering av en indirekt övergång endast i fallet med en övergång till denna instruktion (en indirekt anrop genom JMP och CALL måste alltid falla på ENDBR-instruktionen, som placeras i början av funktionerna).
    • Aktiverade mer strikt kontroll av buffertgränser i funktionerna memcpy(), memmove() och memset(), utförda vid kompilering när CONFIG_FORTIFY_SOURCE-läget är aktiverat. Den tillagda förändringen går ut på att kontrollera om delar av strukturer vars storlek är känd går utanför gränserna. Det noteras att den implementerade funktionen skulle tillåta blockering av alla memcpy()-relaterade kärnbuffertspill som identifierats under åtminstone de senaste tre åren.
    • Lade till den andra delen av koden för den uppdaterade implementeringen av RDRAND pseudoslumptalsgeneratorn, som är ansvarig för driften av enheterna /dev/random och /dev/urandom. Den nya implementeringen är känd för att förena driften av /dev/random och /dev/urandom, lägga till skydd mot uppkomsten av dubbletter i strömmen av slumpmässiga siffror vid start av virtuella maskiner, och byta till att använda BLAKE2s hashfunktion istället för SHA1 för entropiblandningsoperationer. Ändringen förbättrade säkerheten för pseudo-slumptalsgeneratorn genom att eliminera den problematiska SHA1-algoritmen och eliminera överskrivningen av RNG-initieringsvektorn. Eftersom BLAKE2s algoritm är överlägsen SHA1 i prestanda, hade dess användning också en positiv effekt på prestandan.
    • För ARM64-arkitekturen har stöd lagts till för en ny pekareautentiseringsalgoritm - "QARMA3", som är snabbare än QARMA-algoritmen samtidigt som den bibehåller rätt säkerhetsnivå. Tekniken låter dig använda specialiserade ARM64-instruktioner för att verifiera returadresser med hjälp av digitala signaturer som lagras i de oanvända övre bitarna av själva pekaren.
    • För ARM64-arkitekturen har stöd implementerats för montering med inkludering i GCC 12 av ett skyddsläge mot överskrivning av returadressen från en funktion i händelse av ett buffertspill på stacken. Kärnan i skyddet är att spara returadressen i en separat "skuggstack" efter att ha överfört kontrollen till en funktion och hämtat denna adress innan funktionen avslutas.
    • Lade till en ny nyckelring - "maskin", som innehåller systemägarnycklarna (MOK, Machine Owner Keys), som stöds i shim bootloader. Dessa nycklar kan användas för att digitalt signera kärnkomponenter som laddas efter uppstart (till exempel kärnmoduler).
    • Borttaget stöd för asymmetriska privata nycklar för TPM, som erbjöds i en äldre version av TPM, hade kända säkerhetsproblem och användes inte allmänt i praktiken.
    • Tillagt skydd av data med typen size_t från heltalsspill. Koden inkluderar hanterarna size_mul(), size_add() och size_sub(), som gör att du säkert kan multiplicera, addera och subtrahera storlekar med typen size_t.
    • När kärnan byggs är flaggorna "-Warray-bounds" och "-Wzero-length-bounds" aktiverade, som visar varningar när indexet går över arraygränsen och när nolllängdsmatriser används.
    • Virtio-krypteringsenheten har lagt till stöd för kryptering med RSA-algoritmen.
  • Nätverksdelsystem
    • Vid implementeringen av nätverksbryggor har stöd för portbindningsläge (låst läge) lagts till, där användaren endast kan skicka trafik genom porten från en auktoriserad MAC-adress. Möjligheten att använda flera strukturer för att utvärdera tillståndet för STP-protokollet (Spanning Tree Protocol) har också lagts till. Tidigare kunde VLAN endast mappas direkt till STP (1:1), med varje VLAN hanterad oberoende. Den nya versionen lägger till parametern mst_enable, när den är aktiverad kontrolleras tillståndet för VLAN av MST-modulen (Multiple Spanning Trees) och bindningen av VLAN kan motsvara M:N-modellen.
    • Arbetet fortsatte med att integrera verktyg i nätverksstacken för att spåra orsakerna till att paket släpptes (orsakskoder). Orsakskoden skickas när minnet som är associerat med paketet frigörs och tillåter situationer som att paketet kasseras på grund av rubrikfel, rp_filter-spoofingdetektering, ogiltig kontrollsumma, slut på minne, utlösta IPSec XFRM-regler, ogiltigt sekvensnummer TCP, etc.
    • Det är möjligt att överföra nätverkspaket från BPF-program som startats från användarutrymmet i BPF_PROG_RUN-läget, där BPF-program körs i kärnan, men returnerar resultatet till användarutrymmet. Paket sänds med hjälp av XDP (eXpress Data Path) subsystem. Livepaketbearbetningsläge stöds, där XDP-processorn kan omdirigera nätverkspaket i farten till nätverksstacken eller till andra enheter. Det är också möjligt att skapa mjukvarugeneratorer för extern trafik eller ersätta nätverksramar i nätverksstacken.
    • För BPF-program kopplade till nätverks-cgroups har hjälpfunktioner föreslagits för att explicit ställa in returvärdet för systemanrop, vilket gör det möjligt att förmedla mer fullständig information om orsakerna till blockeringen av ett systemanrop.
    • XDP-undersystemet (eXpress Data Path) har lagt till stöd för fragmenterade paket placerade i flera buffertar, vilket gör att du kan bearbeta Jumbo-ramar i XDP och använda TSO/GRO (TCP Segmentation Offload/Generic Receive Offload) för XDP_REDIRECT.
    • Processen att ta bort nätverksnamnområden har påskyndats avsevärt, vilket efterfrågades på vissa stora system med stor trafikvolym.
  • Оборудование
    • Amdgpu-drivrutinen inkluderar som standard FreeSync adaptiv synkroniseringsteknik, som låter dig justera uppdateringshastigheten för information på skärmen, vilket säkerställer jämna och tårfria bilder medan du spelar spel och tittar på videor. Aldebaran GPU-stöd har meddelats som stabilt.
    • Drivrutinen i915 lägger till stöd för Intel Alderlake N-chips och Intel DG2-G12 diskreta grafikkort (Arc Alchemist).
    • Nouveau-drivrutinen ger stöd för högre bithastigheter för DP/eDP-gränssnitt och stöd för lttprs (Link-Training Tunable PHY Repeaters) kabelförlängare.
    • I undersystemet drm (Direct Rendering Manager) i drivrutiner armada, exynos, gma500, hyperv, imx, ingenic, mcde, mediatek, msm, omap, rcar-du, rockchip, sprd, sti, tegra, tilcdc, xen och vc4 parameterstöd har lagts till nomodeset, som låter dig inaktivera byte av videolägen på kärnnivån och användningen av verktyg för hårdvaruåtergivningsacceleration, vilket bara lämnar funktionalitet relaterad till systemets rambuffert.
    • Lagt till stöd för ARM SoС Qualcomm Snapdragon 625/632 (används i LG Nexus 5X och Fairphone FP3-smarttelefoner), Samsung Exynos 850, Samsung Exynos 7885 (används i Samsung Galaxy A8), Airoha (Mediatek/EcoNet) EN7523, Mediatek PMT6582 surfplatta 5008G), Microchip Lan3, Renesas RZ/G966LC, RZ/V2L, Tesla FSD, TI K2/AM3 och i.MXRTxxxx.
    • Tillagt stöd för ARM-enheter och kort från Broadcom (Raspberry Pi Zero 2 W), Qualcomm (Google Herobrine R1 Chromebook, SHIFT6mq, Samsung Galaxy Book2), Rockchip (Pine64 PineNote, Bananapi-R2-Pro, STM32 Emtrion emSBS, Samsung Galaxy Tab S , Prestigio PMT5008 3G-surfplatta), Allwinner (A20-Marsboard), Amlogic (Amediatek X96-AIR, CYX A95XF3-AIR, Haochuangy H96-Max, Amlogic AQ222 och OSMC Vero 4K+), Aspeed (Quanta S6Q, ASRVE8), Marveled 3 / Armada (Ctera C200 V1 och V2 NAS), Mstar (DongShanPiOne, Miyoo Mini), NXP i.MX (Protonic PRT8MM, emCON-MX8M Mini, Toradex Verdin, Gateworks GW7903).
    • Tillagt stöd för ljudsystem och codecs AMD PDM, Atmel PDMC, Awinic AW8738, i.MX TLV320AIC31xx, Intel CS35L41, ESSX8336, Mediatek MT8181, nVidia Tegra234, Qualcomm SC7280, Renesas R2Ms.V. Instrument, Texas R585Z. Lade till initial implementering av ljuddrivrutin för Intel AVS DSP-chip. Uppdaterade drivrutinsstödet för Intel ADL och Tegra234, och gjorde ändringar för att förbättra ljudstödet på Dell, HP, Lenovo, ASUS, Samsung och Clevo-enheter.

    Samtidigt bildade Latin American Free Software Foundation en version av den helt fria kärnan 5.18 - Linux-libre 5.18-gnu, rensat från element av firmware och drivrutiner som innehåller icke-fria komponenter eller kodsektioner, vars omfattning är begränsad av tillverkaren. Den nya versionen rengör drivrutiner för MIPI DBI-paneler, VPU Amphion, WiFi MediaTek MT7986 WMAC, Mediatek MT7921U (USB) och Realtek 8852a/8852c, Intel AVS och Texas Instruments TAS5805M ljudchips. DTS-filer rensades också för olika Qualcomm SoCs med processorer baserade på AArch64-arkitekturen. Uppdaterad blob-rensningskod i drivrutiner och delsystem av AMD GPU, MediaTek MT7915, Silicon Labs WF200+ WiFi, Mellanox Spectru Ethernet, Realtek rtw8852c, Qualcomm Q6V5, Wolfson ADSP, MediaTek HCI UART.

Källa: opennet.ru

Lägg en kommentar