Linux-kärnan version 5.14

Efter två månaders utveckling presenterade Linus Torvalds releasen av Linux-kärnan 5.14. Bland de mest anmärkningsvärda ändringarna: nya quotactl_fd() och memfd_secret() systemanrop, borttagning av ide- och rådrivrutiner, ny I/O-prioritetskontroller för cgroup, SCHED_CORE uppgiftsschemaläggningsläge, infrastruktur för att skapa verifierade BPF-programladdare.

Den nya versionen innehåller 15883 2002 korrigeringar från 69 12580 utvecklare, patchstorleken är 861501 MB (ändringarna påverkade 321654 47 filer, 5.14 14 rader kod lades till, 13 3 rader raderades). Cirka 3 % av alla ändringar som införs 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:

  • Diskundersystem, I/O och filsystem
    • En ny I/O-prioriteringskontroller har implementerats för cgroups, rq-qos, som kan styra behandlingsprioriteten för förfrågningar om att blockera enheter som genereras av medlemmar i varje cgroup. Nytt stöd för prioritetskontroller har lagts till i mq-deadline I/O-schemaläggaren.
    • Ext4-filsystemet implementerar ett nytt ioctl-kommando, EXT4_IOC_CHECKPOINT, som tvingar alla pågående transaktioner från journalen och deras tillhörande buffertar att tömmas till disken, och även skriver över området som används av journalen i lagring. Förändringen förbereddes som en del av ett initiativ för att förhindra informationsläckor från filsystem.
    • Prestandaoptimeringar har gjorts för Btrfs: genom att eliminera onödig loggning av utökade attribut under fsync-exekvering har prestandan för intensiva operationer med utökade attribut ökat med upp till 17 %. Dessutom, när du utför trimningsoperationer som inte påverkar omfattningen, inaktiveras full synkronisering, vilket minskade drifttiden med 12 %. En inställning har lagts till i sysfs för att begränsa I/O-bandbredden vid kontroll av FS. Lade till ioctl-samtal för att avbryta storleksändring och radering av enhetsoperationer.
    • I XFS har implementeringen av buffertcachen gjorts om, som har gått över till att allokera minnessidor i batchläge. Förbättrad cacheeffektivitet.
    • F2FS lägger till ett alternativ för att arbeta i skrivskyddat läge och implementerar ett komprimerat blockcacheläge (compress_cache) för att förbättra slumpmässig läsprestanda. Stöd har implementerats för att komprimera filer mappade till minnet med hjälp av operationen mmap(). För att selektivt inaktivera filkomprimering baserat på en mask, har ett nytt monteringsalternativ nocompress föreslagits.
    • Arbete har gjorts i exFAT-drivrutinen för att förbättra kompatibiliteten med viss digitalkameralagring.
    • Lade till systemanropet quotactl_fd(), som låter dig hantera kvoter inte genom en speciell enhetsfil, utan genom att ange en filbeskrivning som är associerad med filsystemet för vilket kvoten tillämpas.
    • De gamla drivrutinerna för blockenheter med IDE-gränssnittet har tagits bort från kärnan, de har länge ersatts av undersystemet libata.
    • Den "råa" drivrutinen har tagits bort från kärnan, vilket ger obuffrad åtkomst till blockerade enheter via gränssnittet /dev/raw. Denna funktionalitet har länge implementerats i applikationer som använder flaggan O_DIRECT.
  • Minnes- och systemtjänster
    • Uppgiftsschemaläggaren implementerar ett nytt schemaläggningsläge, SCHED_CORE, som låter dig styra vilka processer som kan köras tillsammans på samma CPU-kärna. Varje process kan tilldelas en cookie-identifierare som definierar omfattningen av förtroende mellan processer (till exempel tillhörande samma användare eller behållare). När du organiserar kodexekvering kan schemaläggaren säkerställa att en CPU-kärna endast delas mellan processer som är associerade med samma ägare, vilket kan användas för att blockera vissa Spectre-attacker genom att förhindra betrodda och opålitliga uppgifter från att köras på samma SMT-tråd (Hyper Threading) .
    • För cgroup har stöd för kill-operationen implementerats, vilket gör att du kan döda alla processer som är associerade med gruppen på en gång (skicka SIGKILL) genom att skriva "1" till den virtuella filen cgroup.kill.
    • 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ådan blockering leder till en betydande prestandaminskning, så tidigare var det möjligt att tvångsavsluta applikationen som orsakade blockeringen. Den nya versionen lägger till en kärnans kommandoradsparameter "split_lock_detect=ratelimit:N", som låter dig definiera en systemomfattande gräns för hastigheten för låsoperationer per sekund, efter att ha överskridit vilken process som har blivit källan till ett delat lås kommer att tvingas stanna i 20 ms istället för att avsluta.
    • Cgroup bandwidth controller CFS (CFS bandwidth controller), som bestämmer hur mycket processortid som kan allokeras till varje cgroup, implementerar möjligheten att definiera tidsbegränsade gränser, vilket möjliggör bättre reglering av latenskänsliga arbetsbelastningar. Om du till exempel ställer in cpu.cfs_quota_us till 50000 och cpu.cfs_period_us till 100000 kommer en grupp processer att slösa bort 100 ms CPU-tid var 50:e ms.
    • Lade till initial infrastruktur för att skapa BPF-programladdare, vilket ytterligare kommer att tillåta laddning av endast BPF-program signerade med en betrodd digital nyckel.
    • Lade till en ny futex-operation FUTEX_LOCK_PI2, som använder en monoton timer för att beräkna en timeout som tar hänsyn till tiden som systemet spenderar i viloläge.
    • För RISC-V-arkitekturen implementeras stöd för stora minnessidor (Transparent Huge-Pages) och möjligheten att använda KFENCE-mekanismen för att upptäcka fel när man arbetar med minne.
    • Madvise()-systemanropet, som tillhandahåller ett sätt att optimera en processs minneshantering, har lagt till flaggorna MADV_POPULATE_READ och MADV_POPULATE_WRITE för att generera ett "sidfel" på alla minnessidor som är mappade för läs- eller skrivoperationer, utan att utföra en faktisk läsning eller skrivning (förval). Användningen av flaggor kan vara användbar för att minska förseningar i körningen av programmet, på grund av den proaktiva exekveringen av "sidfel"-hanteraren för alla oallokerade sidor på en gång, utan att vänta på den faktiska åtkomsten till dem.
    • Kunit enhetstestsystemet har lagt till stöd för att köra tester i QEMU-miljön.
    • Nya spårämnen har lagts till: "osnoise" för att spåra applikationsfördröjningar orsakade av avbrottshantering och "timerlat" för att visa detaljerad information om förseningar när man vaknar från en timersignal.
  • Virtualisering och säkerhet
    • Lade till systemanropet memfd_secret() som låter dig skapa ett privat minnesområde i ett isolerat adressutrymme, endast synligt för ägarprocessen, inte reflekterat i andra processer och inte direkt tillgängligt för kärnan.
    • I seccomp-systemets anropsfiltreringssystem, när man flyttar blockeringshanterare till användarutrymmet, är det möjligt att använda en enda atomoperation för att skapa en filbeskrivning för en isolerad uppgift och returnera den när man bearbetar ett systemanrop. Den föreslagna operationen löser problemet med att avbryta en hanterare i användarutrymmet när en signal anländer.
    • Lade till en ny mekanism för att hantera resursbegränsningar i användar-ID-namnområdet, som binder individuella rlimit-räknare till en användare i "användarnamnområdet". Ändringen löser problemet med användningen av gemensamma resursräknare när en användare kör processer i olika behållare.
    • KVM-hypervisorn för ARM64-system har lagt till möjligheten att använda MTE-tillägget (MemTag, Memory Tagging Extension) i gästsystem, vilket gör att du kan binda taggar till varje minnesallokeringsoperation och organisera kontroll av korrekt användning av pekare för att blockera exploateringen av sårbarheter orsakade av åtkomst till redan frigjorda minnesblock, överfyllda buffert, åtkomster före initiering och användning utanför det aktuella sammanhanget.
    • ARM64-plattformens Pointer Authentication-faciliteter kan nu konfigureras separat för kärna och användarutrymme. 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.
    • Användarläge Linux har lagt till stöd för att använda drivrutiner för PCI-enheter med en virtuell PCI-buss, implementerad av PCI-over-virtio-drivrutinen.
    • För x86-system lades till stöd för den virtio-iommu paravirtualiserade enheten, vilket gör att IOMMU-förfrågningar som ATTACH, DETACH, MAP och UNMAP kan skickas över virtiotransporten utan att emulera minnessidtabeller.
    • För Intel-processorer, från Skylake-familjen till Coffee Lake, är användningen av Intel TSX (Transactional Synchronization Extensions), som tillhandahåller verktyg för att förbättra prestandan för flertrådade applikationer genom att dynamiskt eliminera onödiga synkroniseringsoperationer, inaktiverad som standard. Tillägg är inaktiverade på grund av möjligheten för Zombieload-attacker som manipulerar informationsläckage via tredjepartskanaler som inträffar under driften av TAA-mekanismen (TSX Asynchronous Abort).
  • Nätverksdelsystem
    • Integrering i kärnan av MPTCP (MultiPath TCP), en förlängning av TCP-protokollet för att organisera driften av en TCP-anslutning med leverans av paket samtidigt längs flera rutter genom olika nätverksgränssnitt associerade med olika IP-adresser. Den nya versionen lägger till en mekanism för att ställa in dina egna trafikhash-policyer för IPv4 och IPv6 (multipath-hash-policy), vilket gör det möjligt att från användarutrymme bestämma vilka fält i paket, inklusive inkapslade sådana, som kommer att användas vid beräkning av hashen som bestämmer val av väg för paketet.
    • Stöd för SOCK_SEQPACKET-sockets (ordnad och tillförlitlig överföring av datagram) har lagts till virtio virtuell transport.
    • Möjligheterna hos SO_REUSEPORT-socketmekanismen har utökats, vilket gör det möjligt för flera lyssningsuttag att ansluta till en port samtidigt för att ta emot anslutningar med distributionen av inkommande förfrågningar samtidigt över alla uttag som är anslutna via SO_REUSEPORT, vilket förenklar skapandet av flertrådade serverapplikationer . Den nya versionen lägger till verktyg för att överföra kontroll till en annan socket i händelse av misslyckande vid bearbetning av en begäran av den initialt valda socket (löser problemet med förlust av individuella anslutningar vid omstart av tjänster).
  • Оборудование
    • Amdgpu-drivrutinen ger stöd för den nya AMD Radeon RX 6000-serien av GPU:er, kodnamnet "Beige Goby" (Navi 24) och "Yellow Carp", samt förbättrat stöd för Aldebaran GPU (gfx90a) och Van Gogh APU. Lade till möjligheten att arbeta med flera eDP-paneler samtidigt. För APU Renoir har stöd för att arbeta med krypterade buffertar i videominnet (TMZ, Trusted Memory Zone) implementerats. Tillagt stöd för hot-unplug grafikkort. För Radeon RX 6000 (Navi 2x) GPU:er och äldre AMD GPU:er är ASPM (Active State Power Management)-stöd aktiverat som standard, vilket tidigare endast var aktiverat för Navi 1x, Vega och Polaris GPU:er.
    • För AMD-chips har stöd för delat virtuellt minne (SVM, delat virtuellt minne) lagts till baserat på delsystemet HMM (Heterogeneous Memory Management), som tillåter användning av enheter med egna minneshanteringsenheter (MMU, minneshanteringsenhet), som kan komma åt huvudminnet. I synnerhet, med hjälp av HMM, kan du organisera ett delat adressutrymme mellan GPU:n och CPU:n, där GPU:n kan komma åt processens huvudminne.
    • Lade till initialt stöd för AMD Smart Shift-teknik, som dynamiskt ändrar CPU- och GPU-ströminställningar på bärbara datorer med en AMD-kretsuppsättning och grafikkort för att öka prestanda för spel, videoredigering och 3D-rendering.
    • i915-drivrutinen för Intel-grafikkort inkluderar stöd för Intel Alderlake P-chips.
    • Tillagd drm/hyperv-drivrutin för Hyper-V virtuell grafikadapter.
    • Tillagt stöd för Raspberry Pi 400 allt-i-ett-datorn.
    • Lade till dell-wmi-privacy-drivrutin för att stödja hårdvarukamera- och mikrofonomkopplarna som ingår i Dells bärbara datorer.
    • För bärbara Lenovo-datorer har ett WMI-gränssnitt lagts till för att ändra BIOS-inställningar via sysfs /sys/class/firmware-attributes/.
    • Utökat stöd för enheter med USB4-gränssnitt.
    • Lagt till stöd för AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 och Texas Instruments TAS2505 ljudkort och codecs. Förbättrat ljudstöd på bärbara datorer från HP och ASUS. Lade till patchar för att minska förseningar innan ljudet börjar spelas upp på USB-enheter.

Källa: opennet.ru

Lägg en kommentar