Linux 5.3 kernel udgivelse

Efter to måneders udvikling, Linus Torvalds indsendt kerneudgivelse Linux 5.3. Blandt de mest bemærkelsesværdige ændringer: understøttelse af AMD Navi GPU'er, Zhaoxi-processorer og Intel Speed ​​​​Select strømstyringsteknologi, muligheden for at bruge umwait-instruktioner til at vente uden at bruge cyklusser,
'Utilization clamping'-tilstanden øger interaktiviteten for asymmetriske CPU'er, pidfd_open-systemkaldet, muligheden for at bruge IPv4-adresser fra 0.0.0.0/8-undernettet, muligheden for nftables hardwareacceleration, HDR-understøttelse i DRM-undersystemet, integration af ACRN'et hypervisor.

В bekendtgørelse ny udgivelse mindede Linus alle udviklere om hovedreglen for kerneudvikling - at opretholde den samme adfærd for brugerrumskomponenter. Ændringer i kernen bør på ingen måde bryde allerede kørende applikationer eller føre til regression på brugerniveau. I dette tilfælde kan en adfærdsovertrædelse forårsage ikke kun en ændring i ABI, fjernelse af forældet kode eller udseendet af fejl, men også den indirekte virkning af nyttige forbedringer, der fungerer korrekt. Som et illustrativt eksempel var der kasseret nyttig optimering i Ext4-kode, som reducerer antallet af drevadgange ved at deaktivere forudlæsning af inodetabellen for små I/O-anmodninger.

Optimeringen førte til det faktum, at entropi for tilfældig talgeneratoren getrandom() på grund af et fald i diskaktivitet begyndte at akkumulere langsommere, og i nogle konfigurationer kunne der under visse omstændigheder observeres frysninger under indlæsning, indtil entropipuljen var fyldt op. Da optimeringen virkelig er nyttig, opstod der en diskussion blandt udviklere, hvor det blev foreslået at løse problemet ved at deaktivere standardblokeringstilstanden for getrandom()-kaldet og tilføje et valgfrit flag for at vente på entropi, men en sådan ændring ville påvirke kvaliteten af ​​de tilfældige tal i den indledende fase af indlæsningen.

Den nye version indeholder 15794 rettelser fra 1974 udviklere,
patchstørrelse - 92 MB (ændringer påvirkede 13986 filer, tilføjet 258419 linjer kode,
599137 rækker fjernet). Omkring 39 % af alle præsenteret i 5.3
ændringer er relateret til enhedsdrivere, ca. 12 % af ændringerne er
holdning til opdatering af kode specifik for hardwarearkitekturer, 11 %
relateret til netværksstakken, 3% til filsystemer og 3% til interne
kerne undersystemer.

The main innovationer:

  • Hukommelse og systemtjenester
    • Fortsat udvikling af 'pidfd'-funktionaliteten for at hjælpe med at håndtere PID-genbrugssituationer (pidfd er forbundet med en specifik proces og ændres ikke, mens en PID kan associeres med en anden proces, efter at den aktuelle proces, der er knyttet til det PID, afsluttes). Det blev tidligere tilføjet til kernen
      pidfd_send_signal()-systemkaldet og CLONE_PIDFD-flaget i clone()-kaldet for at opnå en pidfd til brug i idfd_send_signal(). Brug af clone() med flaget CLONE_PIDFD kan forårsage problemer med serviceadministratorer eller Android-platformens hukommelsesbaserede termineringssystem. I dette tilfælde bruges et kald til fork() eller clone() uden CLONE_PIDFD til at starte.

      Kernel 5.3 introducerede systemkaldet pidfd_open(), som giver dig mulighed for at få en kontrollerbar pidfd for en vilkårlig eksisterende proces, der ikke blev oprettet ved at kalde clone() med flaget CLONE_PIDFD. Også tilføjet understøttelse af pidfd polling ved hjælp af poll() og epoll(), som gør det muligt for procesledere at spore afslutningen af ​​vilkårlige processer uden frygt for en racetilstand, hvis en PID tildeles en ny proces. Mekanismen til at underrette om, at en proces forbundet med pidfd er afsluttet, er den samme som at underrette om, at dens underordnede proces er afsluttet;

    • Understøttelse af belastningsfastgørelsesmekanismen er blevet tilføjet til opgaveplanlæggeren (Udnyttelsesopspænding), så du kan overholde minimums- eller maksimumfrekvensområderne, afhængigt af de opgaver, der er aktive på CPU'en. Den præsenterede mekanisme fremskynder opgaver, der direkte påvirker kvaliteten af ​​brugeroplevelsen ved at køre disse opgaver i det mindste i den nedre ende af den "anmodede" frekvens. Lavprioriterede opgaver, der ikke påvirker brugerens arbejde, lanceres ved at bruge den øvre grænse for den "tilladte" frekvens. Grænser sættes via attributterne sched_uclamp_util_min og sched_uclamp_util_max i sched_setattr() systemkaldet.
    • Tilføjet støtte til energistyringsteknologi Intel Speed ​​​​Select, tilgængelig på udvalgte servere med Intel Xeon-processorer. Denne teknologi giver dig mulighed for at indstille ydeevne og partitionsgennemløbsindstillinger for forskellige CPU-kerner, hvilket giver dig mulighed for at prioritere ydeevne for opgaver udført på bestemte kerner, hvilket ofrer ydeevnen på andre kerner;
    • Processer i brugerrummet givet evnen til at vente i kort tid uden at bruge loops ved hjælp af umwait-instruktionen. Denne instruktion vil sammen med umonitor- og tpause-instruktionerne blive tilbudt i Intels kommende "Tremont"-chips og vil tillade implementering af forsinkelser, der er energieffektive og ikke påvirker ydeevnen af ​​andre tråde, når du bruger Hyper Threading;
    • Til RISC-V-arkitekturen er der tilføjet understøttelse af store hukommelsessider;
    • kprobes-sporingsmekanismen har tilføjet muligheden for at dereferere kernepointere til brugerplads, som for eksempel kan bruges til at evaluere indholdet af strukturer, der sendes til systemkald. Muligheden for at installere checks på opstartsstadiet er også blevet tilføjet.
    • Tilføjet PREEMPT_RT-mulighed til konfigurationsfilen til drift i realtid. Selve koden til at understøtte realtidstilstand er endnu ikke blevet tilføjet til kernen, men udseendet af muligheden er et godt tegn på, at den langsigtede episke integration Realtime-Preempt-patches er ved at være færdige;
    • Tilføjede clone3()-systemkaldet med implementeringen af ​​en mere udvidelsesbar version af clone()-grænsefladen, som gør det muligt at specificere et større antal flag;
    • Tilføjet bpf_send_signal() handler, der tillader BPF-programmer at sende signaler til vilkårlige processer;
    • For perf-hændelser i KVM-hypervisor-miljøet er der tilføjet en ny hændelsesfiltreringsmekanisme, som gør det muligt for administratoren at bestemme de typer hændelser, der er tilladt eller ikke tilladt for overvågning på gæstesystemsiden;
    • Muligheden for at behandle programmer med loops er blevet tilføjet til eBPF-applikationsverifikationsmekanismen, hvis udførelsen af ​​loopet er begrænset og ikke kan føre til overskridelse af grænsen for det maksimale antal instruktioner;
  • Diskundersystem, I/O og filsystemer
    • XFS-filsystemet understøtter nu multi-threaded inode bypass (for eksempel ved kontrol af kvoter). Nye ioctls BULKSTAT og INUMBERS er blevet tilføjet, hvilket giver adgang til de funktioner, der dukkede op i den femte udgave af FS-formatet, såsom inodens fødselstidspunkt og muligheden for at indstille BULKSTAT- og INUMBERS-parametrene for hver AG-gruppe (Allokeringsgrupper);
    • I Ext4 understøttelse tilføjet tomrum i mapper (ulinkede blokke).
      Behandling forudsat flag "i" (uforanderlig) for åbne filer (skrivning er forbudt i en situation, hvis flaget blev sat på et tidspunkt, hvor filen allerede var åben);

    • Btrfs giver en definition af en hurtig implementering af crc32c på alle arkitekturer;
    • I CIFS er koden for smbdirect-support blevet fjernet som eksperimentel udvikling. SMB3 tilføjede muligheden for at bruge kryptografiske algoritmer i GCM-tilstand. Tilføjet en ny monteringsmulighed for at udtrække tilstandsparametre fra ACE-indgange (Access Control Entry). Optimeret ydeevnen af ​​open()-kaldet;
    • Tilføjet en mulighed til F2FS for at begrænse skraldeopsamleren, når den kører i kontrolpunkt=deaktiver tilstand. Tilføjet ioctl for at fjerne blokområder fra F2FS, hvilket giver mulighed for on-the-fly partitionsstørrelsesjusteringer. Tilføjet muligheden for at placere en swap-fil i F2FS for at give direkte I/O. Tilføjet understøttelse for fastgørelse af en fil og tildeling af blokke til lignende filer for alle brugere;
    • Tilføjet understøttelse af asynkrone operationer sendmsg() og recvmsg() til grænsefladen for asynkron input/output io_uring;
    • Understøttelse af komprimering ved hjælp af zstd-algoritmen og evnen til at verificere signerede FS-billeder er blevet tilføjet til UBIFS-filsystemet;
    • Ceph FS understøtter nu SELinux sikkerhedsetiketter til filer;
    • For NFSv4 er en ny monteringsmulighed “nconnect=” blevet implementeret, som bestemmer antallet af forbindelser etableret med serveren. Trafikken mellem disse forbindelser vil blive fordelt ved hjælp af lastbalancering. Derudover opretter NFSv4-serveren nu en mappe /proc/fs/nfsd/clients med information om aktuelle klienter, inklusive information om de filer, de har åbnet;
  • Virtualisering og sikkerhed
    • Kernen inkluderer en hypervisor til indlejrede enheder ACRN, som er skrevet med henblik på parathed til realtidsopgaver og egnethed til brug i missionskritiske systemer. ACRN giver minimal overhead, garanterer lav latenstid og tilstrækkelig reaktionsevne ved interaktion med udstyr. Understøtter virtualisering af CPU-ressourcer, I/O, netværksundersystem, grafik og lydoperationer. ACRN kan bruges til at køre flere isolerede virtuelle maskiner i elektroniske kontrolenheder, dashboards, automotive informationssystemer, forbruger IoT-enheder og anden indlejret teknologi;
    • I brugertilstand Linux tilføjet Tidsrejsetilstand, som giver dig mulighed for at bremse eller fremskynde tiden i et virtuelt UML-miljø for at gøre det nemmere at fejlfinde tidsrelateret kode. Derudover er der tilføjet en parameter
      time-travel-start, som gør det muligt for systemuret at starte fra et bestemt tidspunkt i epokeformat;

    • Nye kommandolinjeindstillinger for kerne "init_on_alloc" og "init_on_free" er blevet tilføjet, når det er angivet, er nulstilling af allokerede og frigjorte hukommelsesområder aktiveret (udfyldning med nuller for malloc og free), hvilket giver mulighed for øget sikkerhed på grund af yderligere initialiseringsomkostninger;
    • Ny driver tilføjet virtio-iommu med implementeringen af ​​en paravirtualiseret enhed, der giver dig mulighed for at sende IOMMU-anmodninger såsom ATTACH, DETACH, MAP og UNMAP over virtio-transporten uden at emulere hukommelsessidetabeller;
    • Ny driver tilføjet virtio-pmem, der repræsenterer adgang til lagerenheder, der er knyttet til fysisk adresserum, såsom NVDIMM'er;
    • Implementeret muligheden for at vedhæfte kryptografiske nøgler til et bruger- eller netværksnavneområde (nøgler bliver utilgængelige uden for det valgte navneområde), samt beskytte nøgler ved hjælp af ACL'er;
    • Til krypto-undersystemet tilføjet understøttelse af en meget hurtig ikke-kryptografisk hashing-algoritme xxhash, hvis hastighed afhænger af hukommelsens ydeevne;
  • Netværks undersystem
    • Aktiverede behandling af IPv4-adresser i området 0.0.0.0/8, som tidligere ikke var tilgængelig til brug. Introduktion af dette undernet vil tillade distribuere yderligere 16 millioner IPv4-adresser;
    • I Netfilter til nftables tilføjet understøttelse af hardwareaccelerationsmekanismer til pakkefiltrering ved brug af tilføjede drivere Flow Block API. Hele regeltabeller med alle kæder kan placeres på siden af ​​netværksadaptere. Aktivering udføres ved at binde NFT_TABLE_F_HW flaget til tabellen. Understøtter simple Layer 3 og Layer 4 protokol metadata, accept/afvis handlinger, kortlægninger efter IP og sender/modtager netværksporte og protokoltype;
    • Tilføjet indbygget forbindelsessporingsunderstøttelse til netværksbroer, hvilket ikke kræver brug af br_netfilter-emuleringslaget;
    • I nf_tables tilføjet understøttelse af SYNPROXY-modulet, som replikerer lignende funktionalitet fra iptables, og muligheden for at tjekke regler for individuelle muligheder i IPv4-headeren er også implementeret;
    • Tilføjet muligheden for at vedhæfte BPF-programmer til setsockopt()- og getsockopt()-systemkaldene, hvilket f.eks. giver dig mulighed for at vedhæfte dine egne adgangsbehandlere til disse opkald. Derudover er der tilføjet et nyt opkaldspunkt (hook), hvormed du kan organisere et opkald til BPF-programmet én gang for hvert RTT-interval (tur-retur-tid, ping-tid);
    • Til IPv4 og IPv6 tilføjet ny nexthop routing-datalagringsmekanisme, der sigter mod at øge skalerbarheden af ​​routingtabeller. Tests viste, at ved brug af det nye system blev et sæt på 743 tusind ruter indlæst i kernen på kun 4.3 sekunder;
    • Til Bluetooth implementeret funktionalitet, der kræves for at understøtte LE-ping;
  • Оборудование
    • Tilføjet understøttelse af virksomhedens x86-kompatible processorer Zhaoxin, udviklet som et resultat af et fælles projekt mellem VIA Technologies og Shanghai Kommune. ZX CPU-familien er bygget på x86-64 Isaiah-arkitekturen og fortsætter udviklingen af ​​teknologi VIA Centaur;
    • DRM-undersystemet (Direct Rendering Manager) samt amdgpu- og i915-grafikdriverne har tilføjet understøttelse af parsing, behandling og afsendelse af HDR-metadata (high dynamic range) via HDMI-porten, hvilket muliggør brugen af ​​HDR-paneler og skærme, der er i stand til at visning af yderligere lysstyrkeområder;
    • Amdgpu-driveren har tilføjet indledende understøttelse af AMD NAVI GPU (RX5700), som inkluderer basisdriveren, skærminteraktionskoden (DCN2), GFX og computerunderstøttelse (GFX10),
      SDMA 5 (System DMA0), strømstyring og multimediekodere/dekodere (VCN2). amdgpu forbedrer også understøttelse af kort baseret på Vega12 og Vega20 GPU'er, hvortil der er tilføjet yderligere hukommelse og strømstyringsfunktioner;

    • Tilføjet understøttelse af kort baseret på VegaM GPU'er til amdkfd-driveren (til diskrete GPU'er, såsom Fiji, Tonga, Polaris);
    • I DRM-driveren til Intel-skærmkort til Icelake-chips implementeret ny multi-segment gamma korrektionstilstand. Tilføjet muligheden for at output via DisplayPort i YCbCr4:2:0-formatet. Ny firmware tilføjet GuC for SKL, BXT, KBL, GLK og ICL. Muligheden for at slukke for skærmens strøm i asynkron tilstand er blevet implementeret. Tilføjet understøttelse af lagring og gendannelse af gengivelseskonteksten for Ironlake (gen5) og gen4 (Broadwater - Cantiga) chips, som giver dig mulighed for at gendanne GPU-tilstanden fra brugerpladsen, når du flytter fra en batch-operation til en anden;
    • Nouveau-driveren giver detektering af NVIDIA Turing TU116-chipsættet;
    • Mulighederne for DRM/KMS-driveren til ARM Komeda-skærmacceleratorer (Mali D71) er blevet udvidet, understøttelse af skalering, opdeling/flet lag, rotation, udskudt skrivning, AFBC, SMMU og farvekodningsformaterne Y0L2, P010, YUV420_8/10BIT har blevet tilføjet;
    • MSM-driveren tilføjer understøttelse af A540 GPU Adreno-serien, der bruges i Qualcomm-processorer, samt understøttelse af MSM8998 DSI-controlleren til Snapdragon 835;
    • Tilføjede drivere til LCD-paneler Samsung S6E63M0, Armadeus ST0700, EDT ETM0430G0DH6, OSD101T2045-53TS,
      Evervision VGG804821, FriendlyELEC HD702E, KOE tx14d24vm1bpa, TFC S9700RTWV43TR-01B, EDT ET035012DM6 og VXT VL050-8048NT-C01;

    • Tilføjet driver til at aktivere afkodningsaccelerationsværktøjer
      videoer tilgængelige i Amlogic Meson SoC;

    • I v3d-driveren (til Broadcom Video Core V GPU'en brugt i Raspberry Pi) dukkede op støtte afsendelse af computerskyggere;
    • Tilføjet driver til SPI-tastaturer og pegefelter, der bruges i moderne modeller af Apple MacBook og MacBookPro bærbare computere;
    • Tilføjet yderligere beskyttelse for ioctl-opkald forbundet med diskettedriveren, og selve driveren er markeret som ikke-vedligeholdt
      ("forældreløse"), hvilket indebærer afslutning af testningen. Driveren er stadig gemt i kernen, men dens korrekte drift er ikke garanteret. Driveren betragtes som forældet, da det er svært at finde arbejdsudstyr til at teste det - alle nuværende eksterne drev bruger som regel USB-grænsefladen.

    • Tilføjet cpufreq-driver til Raspberry Pi-kort, som giver dig mulighed for dynamisk at kontrollere ændringer i processorfrekvens;
    • Tilføjet understøttelse af ny ARM SoC Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSP'er + MMA) og Amlogic G12B (4x Cortex-A73 + 2x A53 ), samt tavler:
      • Purisme 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.

Samtidig Latin American Free Software Foundation dannet
вариант helt gratis kerne 5.3Linux-fri 5.3-gnu, renset for firmware- og driverelementer, der indeholder ikke-frie komponenter eller kodesektioner, hvis omfang er begrænset af producenten. I den nye udgivelse er blob-indlæsning deaktiveret i driverne til qcom, hdcp drm, allegro-dvt og meson-vdec.
Opdateret blob-rensningskode i drivere og undersystemer amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, lyddriver til skylake, samt i mikrokodedokumentationen.

Kilde: opennet.ru

Tilføj en kommentar