Linux -kärna 5.14

Linux -kärna 5.14

Efter två månaders utveckling, Linus Torvalds lämnats kärnrelease Linux 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.

Den huvudsakliga innovationer:

  • diskundersystem, input/output och filsystem:
    • för cgroup genomförs ny I/O-prioritetskontroller - rq-qos, som kan styra prioriteten för bearbetningsförfrågningar för 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;
    • på filsystemet ext4 genomförs nytt ioctl-kommando EXT4_IOC_CHECKPOINT, som tvingar alla pågående transaktioner från loggen och tillhörande buffertar till disk, och även skriver över området som används av inloggningslagringen. Förändringen förbereddes som en del av ett initiativ för att förhindra informationsläckor från filsystem;
    • i Btrfs gjord Prestandaoptimeringar: Genom att eliminera onödig loggning av utökade attribut under körning av fsync ökade prestandan för intensiva operationer med utökade attribut 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 omarbetad implementering av en buffertcache, som överförs till allokering av minnessidor i batchläge. Förbättrad cacheeffektivitet;
    • F2FS lade till ett alternativ för att arbeta i skrivskyddat läge och implementerade 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 med mask, har ett nytt monteringsalternativ nocompress föreslagits;
    • arbete har gjorts i exFAT-drivrutinen för att förbättra kompatibiliteten med lagringen av vissa digitalkameror;
    • lagt till systemanrop 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;
    • Gamla drivrutiner för blockenheter med IDE-gränssnittet har tagits bort från kärnan, de har länge ersatts av undersystemet libata. Stödet för gamla enheter har behållits fullt ut, ändringarna gäller endast möjligheten att använda gamla drivrutiner, då dessa enheter hette /dev/hd*, och inte /dev/sd*;
    • 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;
  • minne och systemtjänster:
    • ett nytt schemaläggningsläge har implementerats i uppgiftsschemaläggaren 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 pålitliga och opålitliga uppgifter från att köras på samma SMT-tråd (Hyper Threading) ;
    • för cgroup-mekanismen 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 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 blev källan till ett delat lås. 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, har förmågan att definiera gränser begränsade av en given åtgärdstid, vilket möjliggör bättre reglering av latenskänsliga belastningar. 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;
    • Lagt till initial infrastruktur för att skapa BPF-programladdare, vilket ytterligare kommer att tillåta nedladdning av endast BPF-program signerade med en pålitlig digital nyckel;
    • lade till en ny futex-operation FUTEX_LOCK_PI2, som använder en monoton timer för att beräkna timeout, som tar hänsyn till tiden som systemet spenderar i viloläge;
    • för RISC-V-arkitekturen, stöd för stora minnessidor (Transparent Huge-Pages) och möjligheten att använda KFENCE att identifiera fel när du arbetar med minne;
    • i systemanropet madvise(), som ger ett sätt att optimera processminneshantering, Lagt till MADV_POPULATE_READ- och MADV_POPULATE_WRITE-flaggor för att generera ett "sidfel" på alla minnessidor 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 exekveringen av programmet, tack vare den proaktiva exekveringen av "page fault"-hanteraren för alla oallokerade sidor på en gång, utan att vänta på den faktiska åtkomsten till dem;
    • i ett enhetstestningssystem kunit Lagt till stöd för att köra tester i QEMU-miljön;
    • nya spårämnen tillagda: "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:
    • Lagt till systemanrop 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 låshanterare flyttas till användarutrymmet, är det möjligt att använda en atomär operation för att skapa en filbeskrivning för en isolerad uppgift och returnera den när ett systemanrop bearbetas. Den föreslagna operationen löser problemet med avbrott av hanteraren i användarutrymmet när en signal anländer;
    • Lagt till ny mekanism att hantera resursbegränsning i användar-ID-namnutrymmet, vilket binder individuella rlimit-räknare till en användare i "användarnamnutrymmet". Ä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 utnyttjande av sårbarheter orsakade av åtkomst av redan frigjorda minnesblock, överfyllda buffertar, åtkomster före initiering och användning utanför det aktuella sammanhanget;
    • Pekarautentisering som tillhandahålls av ARM64-plattformen 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;
    • i användarläge Linux Lagt till stöd för användning av drivrutiner för PCI-enheter med en virtuell PCI-buss, implementerad av PCI-over-virtio-drivrutinen;
    • för x86-system, lagt till stöd för den virtio-iommu paravirtualiserade enheten, som låter dig skicka IOMMU-förfrågningar, såsom ATTACH, DETACH, MAP och UNMAP, ö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 risken för attacker zombieladdningmanipulera läckaget av information genom tredje parts kanaler som inträffar under driften av mekanismen för asynkront avbrott av operationer (TAA, TSX Asynchronous Abort);
  • nätverksdelsystem:
    • fortsatt integration i kärnan av MPTCP (MultiPath TCP), 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. I det nya numret Lagt 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 från användarutrymmet att avgöra vilka fält i paket, inklusive inkapslade sådana, som kommer att användas vid beräkning av hashen som bestämmer valet av sökväg för paketet;
    • socket-stöd har lagts till den virtuella transportvirtio SOCK_SEQPACKET (ordnad och tillförlitlig överföring av datagram);
    • 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 . I den nya versionen Lagt till medel för att överföra kontrollen 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);
  • Utrustning:
    • i amdgpu-drivrutinen genomförs 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 videominne (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 stöd för strömsparmekanismen ASPM (Active State Power Management) aktiverat som standard, vilket tidigare endast var aktiverat för Navi 1x, Vega och Polaris GPU;
    • 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. Med hjälp av HMM kan du organisera ett delat adressutrymme mellan GPU och CPU, där GPU:n kan komma åt processens huvudminne;
    • lagt till initialt teknikstöd AMD Smart Shift, som dynamiskt ändrar strömförbrukningsparametrarna för CPU och GPU på bärbara datorer med ett chipset och ett AMD-grafikkort för att öka prestanda vid spel, videoredigering och 3D-rendering;
    • i i915-drivrutinen för Intel-grafikkort ingår stöd för Intel Alderlake P-chips;
    • tillagd drm/hyperv-drivrutin för den virtuella Hyper-V-grafikadaptern;
    • Lagt till simpledrm grafikdrivrutin som använder EFI-GOP- eller VESA-rambuffert som tillhandahålls av UEFI-firmware eller BIOS för utmatning. Det huvudsakliga syftet med drivrutinen är att tillhandahålla grafiska utdatafunktioner under de inledande stadierna av uppstart, innan en fullständig DRM-drivrutin kan användas. Drivrutinen kan också användas som en tillfällig lösning för utrustning som ännu inte har inbyggda DRM-drivrutiner;
    • Lagt till allt-i-ett datorstöd Hallon Pi 400;
    • Lade till dell-wmi-privacy-drivrutin för att stödja kamera- och mikrofonhårdvaruomkopplarna som ingår i Dells bärbara datorer;
    • för Lenovo bärbara datorer Lagt till WMI-gränssnitt för att ändra BIOS-parametrar via sysfs /sys/class/firmware-attributes/;
    • expanderat stöd för enheter med USB4-gränssnitt;
    • Lagt till stöd för ljudkort och codecs AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 och Texas Instruments TAS2505. Förbättrat ljudstöd på bärbara datorer från HP och ASUS. Lagt till patchar för att minska förseningar innan ljudet börjar spelas på enheter med USB-gränssnitt.

Källa – opennet.ru.

Källa: linux.org.ru