Linux-kärnan version 5.3

Efter två månaders utveckling, Linus Torvalds lämnats kärnrelease Linux 5.3. Bland de mest anmärkningsvärda förändringarna: stöd för AMD Navi GPU, Zhaoxi-processorer och Intel Speed ​​​​Select energihanteringsteknik, möjligheten att använda umwait-instruktioner för att vänta utan att använda cykler,
'Utilization clamping'-läge som ökar interaktiviteten för asymmetriska CPU: er, pidfd_open systemanropet, möjligheten att använda IPv4-adresser från 0.0.0.0/8 subnätet, möjligheten till nftables hårdvaruacceleration, HDR-stöd i DRM-subsystemet, integration av ACRN hypervisor.

В meddelande ny utgåva, påminde Linus alla utvecklare om huvudregeln för kärnutveckling - att behålla samma beteende för komponenter i användarutrymmet. Ändringar av kärnan bör inte på något sätt bryta redan körda applikationer eller leda till regressioner på användarnivå. I det här fallet kan en överträdelse av beteende inte bara orsaka en förändring i ABI, borttagning av föråldrad kod eller uppkomsten av fel, utan också den indirekta effekten av användbara förbättringar som fungerar korrekt. Som ett belysande exempel fanns kasseras hjälp optimering i Ext4-kod, vilket minskar antalet enhetsåtkomster genom att inaktivera förläsning av inodtabellen för små I/O-förfrågningar.

Optimeringen ledde till att entropin för slumptalsgeneratorn getrandom() på grund av en minskning av diskaktiviteten började ackumuleras långsammare och i vissa konfigurationer, under vissa omständigheter, kunde frysningar observeras under laddning tills entropipoolen var fylld. Eftersom optimeringen verkligen är användbar, uppstod en diskussion bland utvecklare där det föreslogs att åtgärda problemet genom att inaktivera standardblockeringsläget för getrandom()-anropet och lägga till en valfri flagga för att vänta på entropi, men en sådan förändring skulle påverka kvaliteten på de slumpmässiga talen i det inledande skedet av laddningen.

Den nya versionen innehåller 15794 1974 korrigeringar från XNUMX XNUMX utvecklare,
patchstorlek - 92 MB (ändringar påverkade 13986 filer, 258419 rader kod lades till,
599137 rader borttagna). Cirka 39 % av alla presenterade i 5.3
ändringar är relaterade till drivrutiner, ungefär 12 % av ändringarna är det
attityd till att uppdatera kod som är specifik för hårdvaruarkitekturer, 11 %
relaterat till nätverksstacken, 3 % till filsystem och 3 % till interna
kärnsubsystem.

Den huvudsakliga innovationer:

  • Minnes- och systemtjänster
    • Fortsatt utveckling av 'pidfd'-funktionen för att hjälpa till att hantera PID-återanvändningssituationer (pidfd är associerad med en specifik process och ändras inte, medan en PID kan associeras med en annan process efter att den aktuella processen som är associerad med den PID avslutas). Det har tidigare lagts till i kärnan
      systemanropet pidfd_send_signal() och CLONE_PIDFD-flaggan i clone()-anropet för att erhålla en pidfd för användning i idfd_send_signal(). Att använda clone() med CLONE_PIDFD-flaggan kan orsaka problem med tjänstehanterare eller Android-plattformens out-of-memory force-termineringssystem. I det här fallet används ett anrop till fork() eller clone() utan CLONE_PIDFD för att starta.

      Kernel 5.3 introducerade systemanropet pidfd_open(), som låter dig få en kontrollbar pidfd för en godtycklig existerande process som inte skapades genom att anropa clone() med flaggan CLONE_PIDFD. Lade också till stöd för pidfd-polling med poll() och epoll(), vilket gör att processhanterare kan spåra avslutningen av godtyckliga processer utan rädsla för ett rastillstånd om en PID tilldelas en ny process. Mekanismen för att meddela när en process associerad med pidfd har avslutats liknar att meddela när dess underordnade process har avslutats;

    • Stöd för lastnålningsmekanismen har lagts till i uppgiftsschemaläggaren (Utnyttjande klämning), så att du kan följa de lägsta eller högsta frekvensområdena, beroende på de uppgifter som är aktiva på CPU:n. Den presenterade mekanismen påskyndar uppgifter som direkt påverkar kvaliteten på användarupplevelsen genom att köra dessa uppgifter åtminstone i den nedre delen av den "begärda" frekvensen. Lågprioriterade uppgifter som inte påverkar användarens arbete startas med den övre gränsen för den "tillåtna" frekvensen. Gränser sätts via attributen sched_uclamp_util_min och sched_uclamp_util_max i systemanropet sched_setattr().
    • Tillagt stöd för energiledningsteknik Intel Speed ​​​​Select, tillgänglig på utvalda servrar med Intel Xeon-processorer. Den här tekniken låter dig ställa in prestanda och partitionsgenomströmningsinställningar för olika CPU-kärnor, vilket gör att du kan prioritera prestanda för uppgifter som utförs på vissa kärnor, vilket offra prestanda på andra kärnor;
    • Processer i användarutrymme beviljas möjligheten att vänta en kort stund utan att använda loopar med hjälp av umwait-instruktionen. Den här instruktionen, tillsammans med umonitor- och tpause-instruktionerna, kommer att erbjudas i Intels kommande "Tremont"-chips, och kommer att möjliggöra implementering av fördröjningar som är energieffektiva och inte påverkar prestandan för andra trådar när du använder Hyper Threading;
    • För RISC-V-arkitekturen har stöd för stora minnessidor lagts till;
    • Spårningsmekanismen kprobes har lagt till möjligheten att avreferera kärnpekare till användarutrymmet, vilket till exempel kan användas för att utvärdera innehållet i strukturer som skickas till systemanrop. Möjligheten att installera kontroller vid uppstart har också lagts till.
    • Lade till PREEMPT_RT-alternativet till konfigurationsfilen för realtidsdrift. Själva koden för att stödja realtidsläge har ännu inte lagts till kärnan, men utseendet på alternativet är ett gott tecken på att det långsiktiga episka integration Realtime-Preempt-patchar närmar sig slutförandet;
    • Lade till clone3()-systemanropet med implementeringen av en mer utbyggbar version av clone()-gränssnittet, vilket gör det möjligt att specificera ett större antal flaggor;
    • Lade till bpf_send_signal()-hanterare, vilket tillåter BPF-program att skicka signaler till godtyckliga processer;
    • För perf-händelser i KVM-hypervisormiljön har en ny händelsefiltreringsmekanism lagts till, vilket gör att administratören kan bestämma vilka typer av händelser som är tillåtna eller inte tillåtna för övervakning på gästsystemsidan;
    • Möjligheten att bearbeta program med loopar har lagts till i eBPF-applikationsverifieringsmekanismen om exekveringen av loopen är begränsad och inte kan leda till att gränsen för det maximala antalet instruktioner överskrids;
  • Diskundersystem, I/O och filsystem
    • XFS-filsystemet stöder nu flertrådad inodbypass (till exempel vid kontroll av kvoter). Nya ioctls BULKSTAT och INUMBERS har lagts till, vilket ger tillgång till funktionerna som dök upp i den femte utgåvan av FS-formatet, såsom inodens födelsetid och möjligheten att ställa in parametrarna BULKSTAT och INUMBERS för varje AG-grupp (Allokeringsgrupper);
    • I Ext4 stöd lagt till tomrum i kataloger (olänkade block).
      Bearbetning tillhandahålls flagga "i" (oföränderlig) för öppna filer (skrivande är förbjudet i en situation om flaggan sattes vid en tidpunkt då filen redan var öppen);

    • Btrfs ger en definition av en snabb implementering av crc32c på alla arkitekturer;
    • I CIFS har koden för smbdirect-stöd tagits bort som experimentell utveckling. SMB3 lade till möjligheten att använda kryptografiska algoritmer i GCM-läge. Lade till ett nytt monteringsalternativ för att extrahera lägesparametrar från ACE-poster (Access Control Entry). Optimerade prestandan för open()-anropet;
    • Lade till ett alternativ till F2FS för att begränsa sopsamlaren när den körs i checkpoint=disable-läge. Lade till ioctl för att ta bort blockintervall från F2FS, vilket möjliggör on-the-fly partitionsstorleksjusteringar. Lade till möjligheten att placera en växlingsfil i F2FS för att ge direkt I/O. Lade till stöd för att fästa en fil och allokera block för liknande filer för alla användare;
    • Lade till stöd för asynkrona operationer sendmsg() och recvmsg() till gränssnittet för asynkron input/output io_uring;
    • Stöd för komprimering med zstd-algoritmen och möjligheten att verifiera signerade FS-bilder har lagts till UBIFS-filsystemet;
    • Ceph FS stöder nu SELinux säkerhetsetiketter för filer;
    • För NFSv4 har ett nytt monteringsalternativ “nconnect=” implementerats, som bestämmer antalet anslutningar som upprättas med servern. Trafiken mellan dessa förbindelser kommer att fördelas med hjälp av lastbalansering. Dessutom skapar NFSv4-servern nu en katalog /proc/fs/nfsd/clients med information om nuvarande klienter, inklusive information om filerna de har öppnat;
  • Virtualisering och säkerhet
    • Kärnan inkluderar en hypervisor för inbäddade enheter ACRN, som är skriven med tanke på beredskap för realtidsuppgifter och lämplighet för användning i verksamhetskritiska system. ACRN ger minimal overhead, garanterar låg latens och adekvat respons vid interaktion med utrustning. Stöder virtualisering av CPU-resurser, I/O, nätverksundersystem, grafik och ljudoperationer. ACRN kan användas för att köra flera isolerade virtuella maskiner i elektroniska styrenheter, instrumentbrädor, fordonsinformationssystem, konsument-IoT-enheter och annan inbyggd teknologi;
    • I användarläge Linux Lagt till Tidsreseläge, som låter dig sakta ner eller snabba upp tiden i en virtuell UML-miljö för att göra det lättare att felsöka tidsrelaterad kod. Dessutom har en parameter lagts till
      time-travel-start, som gör att systemklockan kan starta från ett angivet ögonblick i epokformat;

    • Nya kommandoradsalternativ för kärnan "init_on_alloc" och "init_on_free" har lagts till, när specificerat är nollställning av allokerade och frigjorda minnesområden aktiverad (fylls med nollor för malloc och free), vilket möjliggör ökad säkerhet på grund av ytterligare initialiseringskostnader;
    • Ny drivrutin har lagts till virtio-iommu med implementeringen av en paravirtualiserad enhet som låter dig skicka IOMMU-förfrågningar som ATTACH, DETACH, MAP och UNMAP över virtiotransporten utan att emulera minnessidetabeller;
    • Ny drivrutin har lagts till virtio-pmem, representerar åtkomst till lagringsenheter mappade till fysiskt adressutrymme, såsom NVDIMM;
    • Implementerat möjligheten att bifoga kryptografiska nycklar till en användar- eller nätverksnamnområde (nycklar blir otillgängliga utanför det valda namnområdet), samt skydda nycklar med hjälp av ACL;
    • Till kryptosubsystemet Lagt till stöd för en mycket snabb icke-kryptografisk hashalgoritm xxhash, vars hastighet beror på minnesprestanda;
  • Nätverksdelsystem
    • Aktiverade bearbetning av IPv4-adresser i intervallet 0.0.0.0/8, som tidigare inte var tillgängligt för användning. Introduktion av detta subnät Kommer tillåta distribuera ytterligare 16 miljoner IPv4-adresser;
    • I Netfilter för nftables Lagt till stöd för hårdvaruaccelerationsmekanismer för paketfiltrering genom användning av tillagda drivrutiner Flow Block API. Hela regeltabeller med alla kedjor kan placeras på sidan av nätverksadaptrar. Aktivering görs genom att binda NFT_TABLE_F_HW-flaggan till tabellen. Stöder enkla Layer 3 och Layer 4 protokollmetadata, acceptera/avvisa åtgärder, mappningar av IP och avsändare/mottagare nätverksportar och protokolltyp;
    • Lagt till inbyggt stöd för anslutningsspårning för nätverksbryggor, vilket inte kräver användning av emuleringsskiktet br_netfilter;
    • I nf_tables Lagt till stöd för SYNPROXY-modulen, som replikerar liknande funktionalitet från iptables, och möjligheten att checka in regler för individuella alternativ i IPv4-huvudet är också implementerat;
    • Lade till möjligheten att koppla BPF-program till systemanropen setsockopt() och getsockopt(), vilket till exempel låter dig koppla dina egna åtkomsthanterare till dessa anrop. Dessutom har en ny anropspunkt (hook) lagts till, med vilken du kan organisera ett anrop till BPF-programmet en gång för varje RTT-intervall (tur-retur-tid, pingtid);
    • För IPv4 och IPv6 Lagt till ny mekanism för lagring av routingdata från Nexthop som syftar till att öka skalbarheten hos routingtabeller. Tester visade att när det nya systemet användes, laddades en uppsättning av 743 tusen rutter in i kärnan på bara 4.3 sekunder;
    • För Bluetooth genomförs funktionalitet som krävs för att stödja LE-ping;
  • Оборудование
    • Lagt till stöd för företagets x86-kompatibla processorer Zhaoxin, utvecklat som ett resultat av ett gemensamt projekt mellan VIA Technologies och Shanghais kommun. ZX CPU-familjen är byggd på x86-64 Isaiah-arkitekturen och fortsätter utvecklingen av teknik VIA Centaur;
    • DRM-undersystemet (Direct Rendering Manager) samt amdgpu- och i915-grafikdrivrutinerna har lagt till stöd för att analysera, bearbeta och skicka HDR-metadata (högt dynamiskt omfång) via HDMI-porten, vilket möjliggör användning av HDR-paneler och skärmar som kan visa ytterligare ljusstyrkaintervall;
    • Amdgpu-drivrutinen har lagt till initialt stöd för AMD NAVI GPU (RX5700), som inkluderar basdrivrutinen, skärminteraktionskoden (DCN2), GFX och datorstöd (GFX10),
      SDMA 5 (System DMA0), strömhantering och multimediakodare/avkodare (VCN2). amdgpu förbättrar också stödet för kort baserade på Vega12 och Vega20 GPU:er, för vilka ytterligare minnes- och energihanteringsmöjligheter har lagts till;

    • Lade till stöd för kort baserade på VegaM GPU:er till amdkfd-drivrutinen (för diskreta GPU:er, som Fiji, Tonga, Polaris);
    • I DRM-drivrutinen för Intel-grafikkort för Icelake-chips genomförs nytt multi-segment gammakorrigeringsläge. Lade till möjligheten att mata ut via DisplayPort i formatet YCbCr4:2:0. Ny firmware tillagd GuC för SKL, BXT, KBL, GLK och ICL. Möjligheten att stänga av skärmens ström i asynkront läge har implementerats. Lagt till stöd för att spara och återställa renderingskontexten för Ironlake (gen5) och gen4 (Broadwater - Cantiga) chips, vilket gör att du kan återställa GPU-tillståndet från användarutrymmet när du flyttar från en batchoperation till en annan;
    • Nouveau-drivrutinen ger detektering av NVIDIA Turing TU116-kretsuppsättningen;
    • Möjligheterna hos DRM/KMS-drivrutinen för ARM Komeda-skärmacceleratorer (Mali D71) har utökats, stöd för skalning, dela/sammanfoga lager, rotation, uppskjuten skrivning, AFBC, SMMU och färgkodningsformaten Y0L2, P010, YUV420_8/10BIT har har lagts till;
    • MSM-drivrutinen lägger till stöd för A540 GPU Adreno-serien som används i Qualcomm-processorer, samt stöd för MSM8998 DSI-kontrollern för Snapdragon 835;
    • Tillagda drivrutiner för LCD-paneler Samsung S6E63M0, Armadeus ST0700, EDT ETM0430G0DH6, OSD101T2045-53TS,
      Evervision VGG804821, FriendlyELEC HD702E, KOE tx14d24vm1bpa, TFC S9700RTWV43TR-01B, EDT ET035012DM6 och VXT VL050-8048NT-C01;

    • tillsatt drivrutin för att aktivera avkodningsaccelerationsverktyg
      videor tillgängliga i Amlogic Meson SoC;

    • I v3d-drivrutinen (för Broadcom Video Core V GPU som används i Raspberry Pi) dök upp stöd sändning av beräkningsskuggare;
    • tillsatt drivrutin för SPI-tangentbord och styrplattor som används i moderna modeller av Apple MacBook och MacBookPro bärbara datorer;
    • Lagt till ytterligare skydd för ioctl-anrop associerade med diskettdrivrutinen, och själva drivrutinen är markerad som ej underhållen
      ("föräldralös"), vilket innebär att testet avslutas. Drivrutinen är fortfarande lagrad i kärnan, men dess korrekta funktion kan inte garanteras. Drivrutinen anses vara föråldrad, eftersom det är svårt att hitta arbetsutrustning för att testa den - alla nuvarande externa enheter använder som regel USB-gränssnittet.

    • tillsatt cpufreq-drivrutin för Raspberry Pi-kort, som låter dig dynamiskt styra förändringar i processorfrekvens;
    • Lade till stöd för nya ARM SoC Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSPs + MMA) och Amlogic G12B (4x Cortex-A73 + 2x A53 ), samt brädor:
      • Purism Librem5,
      • Aspeed BMC,
      • Microsoft Olympus BMC,
      • Kontron SMARC,
      • Novtech Meerkat96 (i.MX7),
      • ST Micro Avenger96,
      • Google Cheza (Qualcomm SDM845),
      • Qualcomm Dragonboard 845c (Qualcomm SDM845),
      • Hugsun X99 TV Box (Rockchip RK3399),
      • Khadas Edge/Edge-V/Captain (Rockchip RK3399),
      • HiHope RZ/G2M,
      • NXP LS1021A-TSN.

Samtidigt latinamerikanska Free Software Foundation bildas
вариант helt gratis kärna 5.3 - Linux-fri 5.3-gnu, rensad från firmware och drivrutinselement som innehåller icke-fria komponenter eller kodsektioner, vars omfattning är begränsad av tillverkaren. I den nya utgåvan är blob-laddning avaktiverad i drivrutinerna för qcom, hdcp drm, allegro-dvt och meson-vdec.
Uppdaterad blob-rensningskod i drivrutiner och delsystem amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, ljuddrivrutin för skylake, samt i mikrokoddokumentationen.

Källa: opennet.ru

Lägg en kommentar