Linux-kärnan version 5.19

Efter två månaders utveckling presenterade Linus Torvalds releasen av Linux-kärnan 5.19. Bland de mest anmärkningsvärda förändringarna: stöd för LoongArch-processorarkitekturen, integration av "BIG TCP"-patchar, on-demand-läge i fscache, kodborttagning för att stödja a.out-formatet, möjligheten att använda ZSTD för firmware-komprimering, ett gränssnitt för hantera minnesvängning från användarutrymme, öka tillförlitligheten och prestandan hos pseudo-slumptalsgeneratorn, stöd för Intel IFS (In-Field Scan), AMD SEV-SNP (Secure Nested Paging), Intel TDX (Trusted Domain Extensions) och ARM SME-tillägg (Scalable Matrix Extension).

I tillkännagivandet sa Linus att med största sannolikhet kommer nästa kärnutgåva att ha nummer 6.0, eftersom 5.x-grenen har samlat på sig tillräckligt många utgåvor för att ändra det första numret i versionsnumret. Numreringsbytet genomförs av estetiska skäl och är ett formellt steg som lindrar obehag på grund av ackumuleringen av ett stort antal frågor i serien.

Linus nämnde också att han använde en bärbar dator från Apple baserad på ARM64-arkitektur (Apple Silicon) med en Linux-miljö baserad på Asahi Linux-distributionen för att skapa releasen. Det är inte Linus primära arbetsstation, men han använde plattformen för att testa dess lämplighet för kärnarbete och för att säkerställa att han kunde producera kärnutgåvor när han reste med en lätt bärbar dator till hands. Tidigare, för många år sedan, hade Linus erfarenhet av att använda Apples utrustning för utveckling - han använde en gång en PC baserad på ppc970 CPU och en Macbook Air laptop.

Den nya versionen innehåller 16401 2190 korrigeringar från 16206 2127 utvecklare (i den senaste versionen fanns det 90 13847 korrigeringar från 1149456 349177 utvecklare), patchstorleken är 39 MB (ändringarna påverkade 5.19 21 filer, 11 4 3 rader kod lades till, XNUMX XNUMX rader togs bort). 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.19:

  • Diskundersystem, I/O och filsystem
    • Filsystemet EROFS (Enhanced Read-Only File System), avsett för användning på skrivskyddade partitioner, har konverterats för att använda fscache-undersystemet, som tillhandahåller datacachning. Förändringen förbättrade avsevärt prestandan för system där ett stort antal containrar lanseras från en EROFS-baserad bild.
    • Ett läsläge på begäran har lagts till fscache-delsystemet, som används för att optimera EROFS. Det nya läget låter dig organisera läscachelagring från FS-bilder som finns i det lokala systemet. I motsats till det initialt tillgängliga driftsättet, som är fokuserat på cachelagring i det lokala filsystemet av data som överförs via nätverksfilsystem, delegerar "on-demand"-läget funktionerna att hämta data och skriva det till cachen till en separat bakgrundsprocess som körs i användarutrymmet.
    • XFS ger möjlighet att lagra miljarder utökade attribut i en i-nod. Det maximala antalet omfattningar för en fil har ökats från 4 miljarder till 247. Ett läge har implementerats för atomär uppdatering av flera utökade filattribut samtidigt.
    • Btrfs-filsystemet har optimerat arbete med lås, vilket möjliggjorde en prestandaökning på cirka 7 % när du skriver direkt i nuläge. Prestanda för operationer i NOCOW-läge (utan kopiera-på-skriva) ökas med cirka 3 %. Belastningen på sidcachen när du kör kommandot "skicka" har minskat. Minimistorleken på undersidor har minskats från 64K till 4K (undersidor som är mindre än kärnsidorna kan användas). En övergång har gjorts från att använda ett radixträd till XArrays-algoritmen.
    • Ett läge har lagts till på NFS-servern för att utöka bevarandet av låstillståndet som ställts in av en klient som har slutat svara på förfrågningar. Det nya läget låter dig fördröja låsningen i upp till en dag om inte en annan klient begär ett konkurrerande lås. I normalt läge rensas blockeringen 90 sekunder efter att klienten slutat svara.
    • Händelsespårningsundersystemet i fanotify FS implementerar flaggan FAN_MARK_EVICTABLE, med vilken du kan inaktivera pinning av mål-i-noder i cachen, till exempel för att ignorera undergrenar utan att fästa deras delar i cachen.
    • Drivrutinen för filsystemet FAT32 har lagt till stöd för att få information om tidpunkten för filskapandet genom statx-systemanropet med implementering av en mer effektiv och funktionell version av stat(), som returnerar utökad information om filen.
    • Betydande optimeringar har gjorts av exFAT-drivrutinen för att möjliggöra samtidig rensning av en grupp av sektorer när "dirsync"-läget är aktivt, istället för sekventiell rensning av sektor för sektor. Genom att minska antalet blockförfrågningar efter optimering ökade prestandan för att skapa ett stort antal kataloger på SD-kortet med mer än 73-85%, beroende på klusterstorleken.
    • Kärnan inkluderar den första korrigerande uppdateringen av ntfs3-drivrutinen. Sedan ntfs3 ingick i 5.15-kärnan i oktober förra året har drivrutinen inte uppdaterats och kommunikationen med utvecklarna har tappats, men utvecklarna har nu återupptagit publiceringsändringar. De föreslagna patcharna eliminerade fel som ledde till minnesläckor och kraschar, löste problem med xfstests exekvering, rensade bort oanvänd kod och fixade stavfel.
    • För OverlayFS har möjligheten att mappa användar-ID:n för monterade filsystem implementerats, vilket används för att matcha filerna för en specifik användare på en monterad främmande partition med en annan användare på det aktuella systemet.
  • Minnes- och systemtjänster
    • Lade till initialt stöd för LoongArch-instruktionsuppsättningsarkitekturen som används i Loongson 3 5000-processorerna, som implementerar den nya RISC ISA, liknande MIPS och RISC-V. LoongArch-arkitekturen finns i tre varianter: avskalad 32-bitars (LA32R), vanlig 32-bitars (LA32S) och 64-bitars (LA64).
    • Koden togs bort för att stödja det körbara filformatet a.out, vilket föråldrades i version 5.1. A.out-formatet har länge föråldrats på Linux-system, och generering av a.out-filer stöds inte av moderna verktyg i standard Linux-konfigurationer. Laddaren för a.out-filer kan implementeras helt och hållet i användarutrymmet.
    • Stöd för x86-specifika startalternativ har upphört: nosp, nosmap, nosmep, noexec och noclflush).
    • Stödet för den föråldrade CPU h8300-arkitekturen (Renesas H8/300), som länge har lämnats utan stöd, har upphört.
    • Utökade möjligheter relaterade till att svara på detektering av delade lås (“split lås”) som uppstår vid åtkomst av ojusterade data i minnet på grund av det faktum att när en atominstruktion körs, korsar data två CPU-cache-linjer. Sådana blockeringar leder till en betydande nedgång i prestanda. Om kärnan tidigare, som standard, skulle utfärda en varning med information om processen som orsakade blockeringen, kommer nu den problematiska processen att saktas ner ytterligare för att bevara prestandan för resten av systemet.
    • Tillagt stöd för IFS-mekanismen (In-Field Scan) implementerad i Intel-processorer, som låter dig köra lågnivå-CPU-diagnostiska tester som kan identifiera problem som inte upptäcks av standardverktyg baserat på felkorrigeringskoder (ECC) eller paritetsbitar . Testerna som utförs är i form av nedladdningsbar firmware, utformad på samma sätt som mikrokoduppdateringar. Testresultat är tillgängliga via sysfs.
    • Lade till möjligheten att bädda in en bootconfig-fil i kärnan, vilket gör det möjligt, förutom kommandoradsalternativ, att bestämma parametrarna för kärnan genom en inställningsfil. Inbäddning utförs med hjälp av monteringsalternativet 'CONFIG_BOOT_CONFIG_EMBED_FILE="/PATH/TO/BOOTCONFIG/FILE"'. Tidigare bestämdes bootconfig genom att bifoga till initrd-bilden. Integrering i kärnan gör att bootconfig kan användas i konfigurationer utan initrd.
    • Möjligheten att ladda ner firmware komprimerad med Zstandard-algoritmen har implementerats. En uppsättning kontrollfiler /sys/class/firmware/* har lagts till i sysfs, så att du kan initiera laddning av firmware från användarutrymmet.
    • Det asynkrona I/O-gränssnittet io_uring erbjuder en ny flagga, IORING_RECVSEND_POLL_FIRST, som, när den är inställd, först skickar en nätverksoperation som ska bearbetas med polling, vilket kan spara resurser i situationer där bearbetning av operationen med viss fördröjning är acceptabel. io_uring lade också till stöd för socket()-systemanropet, föreslog nya flaggor för att förenkla hanteringen av filbeskrivningar, lade till ett "multi-shot"-läge för att acceptera flera anslutningar samtidigt i accept()-anropet och lade till operationer för vidarebefordran av NVMe kommandon direkt till enheten.
    • Xtensa-arkitekturen ger stöd för felsökningsverktyget KCSAN (Kernel Concurrency Sanitizer), designat för att dynamiskt upptäcka rasförhållanden inom kärnan. Har även lagt till stöd för viloläge och samprocessorer.
    • För m68k-arkitekturen (Motorola 68000) har en virtuell maskin (plattformsimulator) baserad på Android Goldfish-emulatorn implementerats.
    • För AArch64-arkitekturen har stöd för Armv9-A SME-tillägg (Scalable Matrix Extension) implementerats.
    • eBPF-undersystemet tillåter lagring av maskinskrivna pekare i kartstrukturer och lägger även till stöd för dynamiska pekare.
    • En ny proaktiv minnesåtervinningsmekanism föreslås som stöder kontroll av användarutrymme med hjälp av filen memory.reclaim. Att skriva ett nummer till den angivna filen kommer att försöka avhysa motsvarande antal byte från den uppsättning som är associerad med cgroup.
    • Förbättrad noggrannhet av minnesanvändning vid komprimering av data i swap-partitionen med hjälp av zswap-mekanismen.
    • För RISC-V-arkitekturen tillhandahålls stöd för att köra 32-bitars körbara filer på 64-bitarssystem, ett läge läggs till för att binda restriktiva attribut till minnessidor (till exempel för att inaktivera caching) och funktionen kexec_file_load() implementeras .
    • Implementeringen av stöd för 32-bitars Armv4T- och Armv5-system är anpassade för användning i universella kärnbyggen för flera plattformar lämpliga för olika ARM-system.
  • Virtualisering och säkerhet
    • EFI-delsystemet implementerar förmågan att konfidentiellt överföra hemlig information till gästsystem utan att avslöja den för värdsystemet. Uppgifterna tillhandahålls via security/coco-katalogen i securityfs.
    • Lockdown-skyddsläge, som begränsar root-användarens åtkomst till kärnan och blockerar UEFI Secure Boot-bypass-vägar, har eliminerat ett kryphål som gjorde det möjligt att kringgå skyddet genom att manipulera kärnfelsökaren.
    • Inkluderat är patchar som syftar till att förbättra tillförlitligheten och prestandan hos pseudo-slumptalsgeneratorn.
    • När man bygger med Clang 15, implementeras stöd för mekanismen för randomisering av kärnstrukturer.
    • Landlock-mekanismen, som låter dig begränsa interaktionen av en grupp processer med den externa miljön, ger stöd för regler som låter dig kontrollera utförandet av filbyteoperationer.
    • IMA-undersystemet (Integrity Measurement Architecture), utformat för att verifiera integriteten hos operativsystemkomponenter med hjälp av digitala signaturer och hash, har bytts till att använda fs-verity-modulen för filverifiering.
    • Åtgärdslogiken vid inaktivering av oprivilegierad åtkomst till eBPF-delsystemet har ändrats - tidigare inaktiverades alla kommandon associerade med bpf()-systemanropet, och från och med version 5.19 lämnas åtkomst till kommandon som inte leder till skapandet av objekt. . Detta beteende kräver en privilegierad process för att ladda ett BPF-program, men då kan oprivilegierade processer interagera med programmet.
    • Tillagt stöd för AMD SEV-SNP (Secure Nested Paging)-tillägget, som ger säkert arbete med kapslade minnessidtabeller och skyddar mot "underservade" och "SEVerity"-attacker på AMD EPYC-processorer, vilket gör det möjligt att kringgå AMD SEV (Secure Encrypted Virtualization). ) skyddsmekanism.
    • Tillagt stöd för Intel TDX (Trusted Domain Extensions)-mekanismen, som låter dig blockera tredje parts försök att komma åt virtuella maskiners krypterade minne.
    • Virtio-blk-drivrutinen, som används för att emulera blockenheter, har lagt till stöd för I/O med polling, vilket enligt tester har minskat latensen med cirka 10 %.
  • Nätverksdelsystem
    • Paketet innehåller en serie STORA TCP-patchar som låter dig öka den maximala paketstorleken för ett TCP-paket till 4 GB för att optimera driften av höghastighetsinterna datacenternätverk. En liknande ökning av paketstorlek med en 16-bitars huvudfältstorlek uppnås genom implementering av "jumbo"-paket, vars storlek i IP-huvudet är inställd på 0, och den faktiska storleken överförs i en separat 32-bitars fältet i en separat bifogad rubrik. Vid prestandatestning ökade genomströmningen med 185 % genom att ställa in paketstorleken till 50 KB och avsevärt minskad dataöverföringsfördröjning.
    • 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.
    • Lagt till stöd för att falla tillbaka MPTCP (MultiPath TCP)-anslutningar för att använda vanlig TCP, i situationer där vissa MPTCP-funktioner inte kan användas. MPTCP är en förlängning av TCP-protokollet för att organisera driften av en TCP-förbindelse med leverans av paket samtidigt längs flera rutter genom olika nätverksgränssnitt associerade med olika IP-adresser. Lade till API för att styra MPTCP-strömmar från användarutrymme.
  • Оборудование
    • Lade till över 420 400 rader kod relaterad till amdgpu-drivrutinen, varav cirka 22.5 21 rader är autogenererade header-filer för ASIC-registerdata i AMD GPU-drivrutinen, och ytterligare 4 21 rader ger initial implementering av stöd för AMD SoC13. Den totala drivrutinsstorleken för AMD GPU:er översteg 3 miljoner rader kod. Förutom SoC7000 inkluderar AMD-drivrutinen stöd för SMU XNUMX.x (System Management Unit), uppdaterat stöd för USB-C och GPUVM, och är förberedd för att stödja nästa generationer av RDNAXNUMX (RX XNUMX) och CDNA (AMD Instinct) plattformar.
    • i915-drivrutinen (Intel) har utökade funktioner relaterade till energihantering. Lade till identifierare för Intel DG2 (Arc Alchemist) GPU:er som används på bärbara datorer, gav initialt stöd för Intel Raptor Lake-P (RPL-P) plattformen, lade till information om Arctic Sound-M grafikkort), implementerade ABI för beräkningsmotorer, tillagd för DG2-kort stöder Tile4-formatet; för system baserade på Haswell-mikroarkitekturen är DisplayPort HDR-stöd implementerat.
    • Nouveau-drivrutinen har gått över till att använda drm_gem_plane_helper_prepare_fb-hanteraren; statisk minnesallokering har tillämpats på vissa strukturer och variabler. När det gäller användningen av kärnmoduler med öppen källkod av NVIDIA i Nouveau, handlar arbetet hittills om att identifiera och eliminera fel. I framtiden är den publicerade firmware planerad att användas för att förbättra drivrutinsprestandan.
    • Lade till en drivrutin för NVMe-kontrollern som används i Apple-datorer baserad på M1-chippet.

Samtidigt bildade Latin American Free Software Foundation en version av den helt fria kärnan 5.19 - Linux-libre 5.19-gnu, rensat från element av firmware och drivrutiner som innehåller icke-fria komponenter eller kodavsnitt, vars omfattning är begränsat av tillverkaren. Den nya versionen rensar upp drivrutinerna för pureLiFi X/XL/XC och TI AMx3 Wkup-M3 IPC. Uppdaterad blob-rensningskod i Silicon Labs WFX, AMD amdgpu, Qualcomm WCNSS Peripheral Image Loader, Realtek Bluetooth, Mellanox Spectrum, Marvell WiFi-Ex, Intel AVS, IFS, pu3-imgu-drivrutiner och undersystem. Bearbetning av Qualcomm AArch64 devicetree-filer har implementerats. Lagt till stöd för det nya namnschemat för Sound Open Firmware-komponenter. Slutade rengöra ATM Ambassador-drivrutinen, som togs bort från kärnan. Hantering av blob-rensning i HDCP och Mellanox Core har flyttats till separata kconfig-taggar.

Källa: opennet.ru

Lägg en kommentar