Linux-kärnan version 5.7

Efter två månaders utveckling, Linus Torvalds lämnats kärnrelease Linux 5.7. Bland de mest anmärkningsvärda förändringarna: en ny implementering av exFAT-filsystemet, en bareudp-modul för att skapa UDP-tunnlar, skydd baserat på pekarautentisering för ARM64, möjligheten att koppla BPF-program till LSM-hanterare, en ny implementering av Curve25519, en split- låsdetektor, BPF-kompatibilitet med PREEMPT_RT, tar bort gränsen för 80-teckens radstorlek i koden, tar hänsyn till CPU-temperaturindikatorer i uppgiftsschemaläggaren, möjligheten att använda clone() för att skapa processer i en annan cgroup, skydd mot skrivning till minnet med userfaultfd.

Den nya versionen innehåller 15033 1961 korrigeringar från XNUMX XNUMX utvecklare,
patchstorlek - 39 MB (ändringar påverkade 11590 filer, tillagda 570560 rader kod,
297401 rader borttagna). Cirka 41 % av alla presenterade i 5.7
ändringar är relaterade till drivrutiner, ungefär 16 % av ändringarna är det
attityd till att uppdatera kod som är specifik för hårdvaruarkitekturer, 13 %
relaterat till nätverksstacken, 4 % till filsystem och 4 % till interna
kärnsubsystem.

Den huvudsakliga innovationer:

  • Diskundersystem, I/O och filsystem
    • Lade till ny exFAT-drivrutinimplementering, baserad baserat på den nuvarande "sdfat" (2.x) kodbasen utvecklad av Samsung för sina Android-smarttelefoner. Drivrutinen som tidigare lagts till kärnan baserades på äldre Samsung-kod (version 1.2.9) och låg cirka 10 % efter den nya drivrutinen i prestanda. Låt oss komma ihåg att det blev möjligt att lägga till exFAT-stöd till kärnan efter Microsoft опубликовала offentliga specifikationer och gjorde exFAT-patent tillgängliga för royaltyfri användning på Linux.
    • Btrfs implementerar ett nytt ioctl()-kommando - BTRFS_IOC_SNAP_DESTROY_V2, som låter dig ta bort ett underavsnitt med dess identifierare. Fullständigt stöd för kloning av inline-omfattningar tillhandahålls. Antalet avbokningspunkter för omfördelningsoperationer har utökats, vilket har minskat långa väntetider när kommandot "saldoavbryt" utförs. Bestämningen av bakåtlänkar till omfattning har påskyndats (till exempel har testskriptets exekveringstid minskat från en timme till flera minuter). Lade till möjligheten att bifoga filomfattningar till varje inod i ett träd. Blockeringsschemat som används vid skrivning till underpartitioner och när NOCOW utesluts har omdesignats. Förbättrad effektivitet av fsync-exekvering för intervall.
    • XFS har förbättrat metadatakontroll och fsck för aktiva partitioner. Ett bibliotek har föreslagits för att bygga om btree-strukturer, som i framtiden kommer att användas för att omarbeta xfs_repair och implementera möjligheten till återställning utan att avmontera partitionen.
    • Experimentellt stöd för att placera en swap-partition i SMB3-lagringar har lagts till i CIFS. Implementerade POSIX-tillägg till readdir, definierade i SMB3.1.1-specifikationen. Förbättrad skrivprestanda för 64KB sidor när cache=strikt läge är aktiverat och protokollversion 2.1+ används.
    • FS EXT4 har överförts från bmap och iopoll till att använda iomap.
    • F2FS ger valfritt stöd för datakomprimering med hjälp av zstd-algoritmen. Som standard används LZ4-algoritmen för komprimering. Lade till stöd för kommandot "chattr -c commit". Visning av monteringstid tillhandahålls. Lade till ioctl F2FS_IOC_GET_COMPRESS_BLOCKS för att få information om antalet komprimerade block. Lade till komprimeringsdatautgång via statx.
    • Ceph-filsystemet har lagt till möjligheten att lokalt utföra filskapande och raderingsoperationer (avlänka) utan att vänta på ett svar från servern (fungerar i asynkront läge). Ändringen kan till exempel förbättra prestandan avsevärt när du kör verktyget rsync.
    • Möjligheten att använda virtiofs som ett filsystem på toppnivå har lagts till i OVERLAYFS.
    • Omskriven väggenomgångskod i VFS, symbolisk länkanalyskod har omarbetats och monteringspunktsövergång har förenats.
    • I scsi-undersystemet till oprivilegierade användare tillåtet exekvering av ZBC-kommandon.
    • I dm_writecache genomförs möjligheten att gradvis rensa cachen baserat på parametern max_age, som anger den maximala livslängden för ett block.
    • I dm_integrity Lagt till stöd för "kassera"-operationen.
    • I null_blk Lagt till stöd för felersättning för att simulera fel under testning.
    • Lagt till möjlighet att skicka udev-meddelanden om blockeringsenhetsstorleksändringar.
  • Nätverksdelsystem
    • Nätfilter ingår förändringar, vilket avsevärt påskyndar behandlingen av stora matchningslistor (nftables-set), som kräver kontroll av en kombination av undernät, nätverksportar, protokoll och MAC-adresser.
      Optimeringar gjord till modulen nft_set_pipapo (PIle PAcket POlicies), som löser problemet med att matcha innehållet i ett paket med godtyckliga fälttillståndsintervall som används i filtreringsregler, såsom IP- och nätverksportintervall (nft_set_rbtree och nft_set_hash manipulerar intervallmatchning och direkt reflektion av värden ). Versionen av pipapo vektoriserad med 256-bitars AVX2-instruktioner på ett system med en AMD Epyc 7402-processor visade en prestandaökning på 420 % vid analys av 30 tusen poster inklusive portprotokollkombinationer. Ökningen när man jämför en kombination av ett subnät och ett portnummer vid analys av 1000 poster var 87 % för IPv4 och 128 % för IPv6.

    • tillsatt bareudp-modul, som låter dig kapsla in olika L3-protokoll, såsom MPLS, IP och NSH, i en UDP-tunnel.
    • Integrationen av MPTCP (MultiPath TCP) komponenter, 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 kopplade till olika IP-adresser, har fortsatt.
    • Lagt till stöd för hårdvaruaccelerationsmekanismer för inkapsling av Ethernet-ramar i 802.11 (Wi-Fi).
    • När en enhet flyttas från ett nätverksnamnområde till ett annat justeras åtkomsträttigheterna och ägandet av motsvarande filer i sysfs.
    • Lade till möjligheten att använda SO_BINDTODEVICE-flaggan för icke-rootanvändare.
    • Den tredje delen av patchar har accepterats, och konverterar ethtool-verktygslådan från ioctl() till att använda netlink-gränssnittet. Det nya gränssnittet gör det enklare att lägga till tillägg, förbättrar felhanteringen, tillåter att meddelanden skickas när tillståndet ändras, förenklar interaktionen mellan kärnan och användarutrymmet och minskar antalet namngivna listor som behöver synkroniseras.
    • Lade till möjligheten att använda speciella hårdvaruacceleratorer för att utföra anslutningsspårningsoperationer.
    • I nätfilter Lagt till en krok för att ansluta klassificerare av utgående paket (egress), som kompletterade den tidigare nuvarande kroken för inkommande paket (ingress).
  • Virtualisering och säkerhet
    • Lade till hårdvaruimplementering av pekarautentisering (Pekarautentisering), som använder specialiserade ARM64 CPU-instruktioner för att skydda mot attacker med returorienterad programmering (ROP)-tekniker, där angriparen inte försöker placera sin kod i minnet, utan arbetar på delar av maskininstruktioner som redan finns tillgängliga i laddade bibliotek, slutar med en kontrollreturinstruktion. Säkerhet handlar om att använda digitala signaturer för att verifiera returadresser på kärnnivå. Signaturen lagras i de oanvända toppbitarna på själva pekaren. Till skillnad från programvaruimplementeringar utförs skapandet och verifieringen av digitala signaturer med hjälp av speciella CPU-instruktioner.
    • Lagt till förmågan att skydda ett minnesområde från att skriva med hjälp av systemanropet userfaultfd(), utformat för att hantera sidfel (åtkomst till icke-allokerade minnessidor) i användarutrymmet. Tanken är att använda userfaultfd() både för att upptäcka åtkomstöverträdelser till sidor markerade som skrivskyddade och för att anropa en hanterare som kan svara på sådana skrivförsök (till exempel för att hantera ändringar under skapandet av levande ögonblicksbilder av pågående processer, tillstånd fånga när du dumpar minnesdumpar till disk, implementerar delat minne, spårar ändringar i minnet). Funktionalitet likvärdig använder mprotect() i kombination med SIGSEGV-signalhanteraren, men det fungerar märkbart snabbare.
    • SELinux har utfasat parametern "checkreqprot", som låter dig inaktivera minnesskyddskontroller vid bearbetning av regler (som tillåter användning av körbara minnesområden, oavsett reglerna som anges i reglerna). Kernfs symboliska länkar tillåts ärva sammanhanget för sina överordnade kataloger.
    • Strukturen ingår modul KRSI, som låter dig koppla BPF-program till alla LSM-krokar i kärnan. Förändringen gör att du kan skapa LSM-moduler (Linux Security Module) i form av BPF-program för att lösa revisionsproblem och obligatorisk åtkomstkontroll.
    • Utförd Optimerar prestandan för /dev/random genom att batcha CRNG-värden istället för att anropa RNG-instruktioner individuellt. Förbättrad prestanda för getrandom och /dev/random på ARM64-system som ger RNG-instruktioner.
    • Implementering av en elliptisk kurva Curve25519 ersatt för alternativet från biblioteket HACL, för vilka given matematiskt bevis på formell tillförlitlighetsverifiering.
    • tillsatt mekanism för att informera om lediga minnessidor. Med denna mekanism kan gästsystem överföra information om sidor som inte längre används till värdsystemet, och värden kan ta tillbaka siddata.
    • I vfio/pci Lagt till stöd för SR-IOV (Single-Root I/O Virtualization).
  • Minnes- och systemtjänster
    • Från 80 till 100 tecken ökade begränsning av den maximala radlängden i källtexterna. Samtidigt rekommenderas utvecklare fortfarande att hålla sig inom 80 tecken per rad, men detta är inte längre en hård gräns. Dessutom kommer överskridandet av gränsen för radstorleken att resultera i en byggvarning endast om checkpatch körs med alternativet '--strict'. Förändringen kommer att göra det möjligt att inte distrahera utvecklare av manipulation med mellanslag och känna dig mer fri när du justerar kod, samt kommer att förhindra överdriven linjebrytning, störande kodförståelse och sökning.
    • Lagt till stöd för EFI blandat startläge, som låter dig ladda en 64-bitars kärna från 32-bitars firmware som körs på en 64-bitars CPU utan att använda en specialiserad starthanterare.
    • Ingår system för att identifiera och felsöka delade lås (“delat lås"), vilket inträffar 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ådan blockering resulterar i en betydande prestandaträff (1000 cykler långsammare än en atomoperation på data som hamnar i en cache-rad). Beroende på startparametern "split_lock_detect" kan kärnan upptäcka sådana lås i farten och utfärda varningar eller skicka en SIGBUS-signal till applikationen som orsakar låsningen.
    • Uppgiftsschemaläggaren ger spårning av temperatursensorer (Termiskt tryck) och implementeras med hänsyn till överhettning vid placering av uppgifter. Med hjälp av den tillhandahållna statistiken kan den termiska regulatorn justera den maximala CPU-frekvensen när den är överhettad, och uppgiftsschemaläggaren tar nu hänsyn till minskningen av datorkraft på grund av en sådan minskning av frekvensen när den schemalägger uppgifter att köras (tidigare svarade schemaläggaren på ändringar i frekvens med en viss fördröjning, under en tid fatta beslut baserade på uppblåsta antaganden om tillgängliga beräkningsresurser).
    • Uppgiftsschemaläggaren inkluderar oföränderliga indikatorer belastningsspårning, så att du kan uppskatta belastningen korrekt, oavsett den aktuella CPU-driftsfrekvensen. Förändringen gör att du kan förutsäga beteendet hos uppgifter mer exakt under förhållanden med dynamiska förändringar i spänning och CPU-frekvens. Till exempel kommer en uppgift som förbrukade 1/3 av CPU-resurserna vid 1000 MHz att förbruka 2/3 av resurserna när frekvensen sjunker till 500 MHz, vilket tidigare skapade ett falskt antagande att den kördes med full kapacitet (dvs. uppgifter dök upp större till schemaläggaren endast genom att minska frekvensen, vilket ledde till att felaktiga beslut fattades i schedutil cpufreq-guvernören).
    • Intel P-state-drivrutinen, som är ansvarig för att välja prestandalägen, har bytts till användning schemalägga.
    • Möjligheten att använda BPF-undersystemet när kärnan körs i realtid (PREEMPT_RT) har implementerats. Tidigare, när PREEMPT_RT var aktiverat, krävdes BPF att vara inaktiverat.
    • En ny typ av BPF-program har lagts till - BPF_MODIFY_RETURN, som kan kopplas till en funktion i kärnan och ändra värdet som returneras av denna funktion.
    • Lagt till möjlighet Att använda clone3()-systemanropet för att skapa en process i en cgroup som skiljer sig från den överordnade cgroupen, vilket gör att den överordnade processen kan tillämpa begränsningar och aktivera redovisning direkt efter att en ny process eller tråd skapats. Till exempel kan en tjänsteansvarig direkt allokera nya tjänster till separata cgroups, och nya processer, när de placeras i "frysta" cgroups, stoppas omedelbart.
    • i Kbuild Lagt till stöd för miljövariabeln "LLVM=1" för att byta till Clang/LLVM-verktygslådan när kärnan byggs. Kraven för binutils-versionen har höjts (2.23).
    • En sektion /sys/kernel/debug/kunit/ har lagts till i debugfs med resultaten av kunit-tester.
    • Lade till kärnstartparameter pm_debug_messages (analogt med /sys/power/pm_debug_messages), som möjliggör utmatning av felsökningsinformation om driften av energihanteringssystemet (användbart vid felsökning av problem med viloläge och vänteläge).
    • Till det asynkrona I/O-gränssnittet io_uring stöd lagt till splitsa() и val av atombuffert.
    • Förbättrad cgroup profilering med hjälp av perf toolkit. Tidigare kunde perf bara profilera uppgifter i en specifik cgroup och kunde inte ta reda på vilken cgroup det aktuella urvalet tillhör. perf hämtar nu cgroup-information för varje prov, så att du kan profilera mer än en cgroup och tillämpa sortering efter
      c-grupp i rapporter.

    • cgroupfs, en pseudo-FS för att hantera cgroups, har lagt till stöd för utökade attribut (xattrs), med vilka du till exempel kan lämna ytterligare information för hanterare i användarutrymmet.
    • I cgroup minneskontroller Lagt tilloch stöd för rekursivt skydd av värdet "memory.low", som reglerar den minsta mängden RAM-minne som ges till gruppmedlemmarna. När du monterar en cgroup-hierarki med alternativet "memory_recursiveprot" kommer värdet på "memory.low" som är inställt för de lägre noderna att automatiskt distribueras till alla undernoder.
    • tillsatt Uacce (Unified/User-space-access-intended Accelerator Framework) ramverk för att dela virtuella adresser (SVA, Shared Virtual Addressing) mellan CPU och kringutrustning, vilket tillåter hårdvaruacceleratorer att komma åt datastrukturer i huvudprocessorn.
  • Hårdvaruarkitekturer
    • För ARM-arkitekturen är möjligheten att hot-fetch minne implementerad.
    • För RISC-V-arkitekturen har stöd för hot plugging och borttagning av processorer (CPU hotplug) lagts till. För 32-bitars RISC-V är eBPF JIT implementerat.
    • Möjligheten att använda 32-bitars ARM-system för att köra KVM-gästmiljöer har tagits bort.
    • Tog bort "dummy" NUMA-implementeringen för s390-arkitekturen, för vilken inga användningsfall hittades för att uppnå prestandaförbättringar.
    • För ARM64, lagt till stöd för tillägget AMU (Activity Monitors Unit), som definieras i ARMv8.4 och tillhandahåller prestandaräknare som används för att beräkna korrigeringsfaktorer för frekvensskalning i aktivitetsschemaläggaren.
  • Оборудование
    • Lagt till stöd för vDPA-enheter som använder en datautbyteskanal som överensstämmer med virtio-specifikationerna. vDPA-enheter kan vara antingen fysiskt ansluten utrustning eller mjukvaruemulerade virtuella enheter.
    • I GPIO-delsystemet dök ett nytt ioctl()-kommando för att övervaka ändringar, vilket gör att du kan informera processen om förändringar i tillståndet för valfri GPIO-linje. Som ett exempel på att använda det nya kommandot erbjöd gpio-watch-verktyget.
    • I i915 DRM-drivrutinen för Intel grafikkort ingår standardstöd för Tigerlake ("Gen12") chips och lagt till initialt stöd för OLED-bakgrundsbelysningskontroll. Förbättrat stöd för Ice Lake, Elkhart Lake, Baytrail och Haswell chips.
    • I amdgpu-drivrutinen Lagt till möjlighet att ladda fast programvara i USBC-chippet för ASIC. Förbättrat stöd för AMD Ryzen 4000 "Renoir"-chips. Det finns nu stöd för att styra OLED-paneler. Tillhandahåller visning av firmware-status i debugfs.
    • Möjligheten att använda OpenGL 4 i gästsystem har lagts till i vmwgfx DRM-drivrutinen för VMware-virtualiseringssystem (tidigare stöddes OpenGL 3.3).
    • Lade till ny DRM-drivrutinstids för TI Keystone-plattformens displaysystem.
    • Tillagda drivrutiner för LCD-paneler: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101CT, 01.
    • Till energihanteringssystemet Lagt till stöd för den Atom-baserade Intel Jasper Lake (JSL)-plattformen.
    • Tillagt stöd för Pinebook Pro laptop baserad på Rockchip RK3399, Pine64 PineTab surfplatta och smartphone pinephone baserad på Allwinner A64.
    • Tillagt stöd för nya ljudkodekar och chips:
      Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc.

    • Tillagt stöd för ARM-kort och plattformar Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron “sl28”, 11 i.MX6 TechNexion Pico-kortalternativ, tre nya Toradex Colibri-alternativ, Samsung S7710 Galaxy Xcover 2 baserat på ST -Ericsson u8500, DH Electronics DHCOM SoM och PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.

Källa: opennet.ru

Lägg en kommentar