Linux-kjerneutgivelse 5.3

Etter to måneder med utvikling Linus Torvalds innsendt kjerneutgivelse Linux 5.3. Blant de mest bemerkelsesverdige endringene: støtte for AMD Navi GPUer, Zhaoxi-prosessorer og Intel Speed ​​​​Select strømstyringsteknologi, muligheten til å bruke umwait-instruksjoner for å vente uten å bruke sykluser,
'utilization clamping'-modus som øker interaktiviteten for asymmetriske CPUer, pidfd_open-systemanropet, muligheten til å bruke IPv4-adresser fra 0.0.0.0/8-undernettet, muligheten for nftables maskinvareakselerasjon, HDR-støtte i DRM-subsystemet, integrasjon av ACRN hypervisor.

В kunngjøringer ny utgivelse, minnet Linus alle utviklere om hovedregelen for kjerneutvikling - å opprettholde den samme oppførselen for brukerplasskomponenter. Endringer i kjernen skal ikke på noen måte bryte allerede kjørende applikasjoner eller føre til regresjoner på brukernivå. I dette tilfellet kan et brudd på atferd forårsake ikke bare en endring i ABI, fjerning av utdatert kode eller utseende av feil, men også den indirekte virkningen av nyttige forbedringer som fungerer riktig. Som et illustrerende eksempel var det forkastet nyttig optimalisering i Ext4-kode, som reduserer antall stasjonstilganger ved å deaktivere forhåndslesing av inodetabellen for små I/O-forespørsler.

Optimaliseringen førte til det faktum at på grunn av en reduksjon i diskaktivitet begynte entropi for getrandom() tilfeldig tallgenerator å akkumulere saktere, og i noen konfigurasjoner, under visse omstendigheter, kunne fryser observeres under lasting til entropipoolen var fylt. Siden optimaliseringen er veldig nyttig, oppsto det en diskusjon blant utviklere der det ble foreslått å fikse problemet ved å deaktivere standard blokkeringsmodus for getrandom()-kallet og legge til et valgfritt flagg for å vente på entropi, men en slik endring ville påvirke kvaliteten på de tilfeldige tallene i den innledende fasen av lasting.

Den nye versjonen inkluderer 15794 1974 rettelser fra XNUMX XNUMX utviklere,
oppdateringsstørrelse - 92 MB (endringer påvirket 13986 filer, 258419 linjer med kode ble lagt til,
599137 rader fjernet). Omtrent 39 % av alle presentert i 5.3
endringer er relatert til enhetsdrivere, omtrent 12 % av endringene er det
holdning til oppdatering av kode spesifikk for maskinvarearkitekturer, 11 %
relatert til nettverksstakken, 3 % til filsystemer og 3 % til interne
kjerneundersystemer.

Den viktigste innovasjoner:

  • Minne- og systemtjenester
    • Fortsatt utvikling av 'pidfd'-funksjonaliteten for å hjelpe til med å håndtere PID-gjenbrukssituasjoner (pidfd er assosiert med en spesifikk prosess og endres ikke, mens en PID kan assosieres med en annen prosess etter at den nåværende prosessen knyttet til den PID-en avsluttes). Det ble tidligere lagt til kjernen
      pidfd_send_signal()-systemkallet og CLONE_PIDFD-flagget i clone()-kallet for å få en pidfd for bruk i idfd_send_signal(). Bruk av clone() med CLONE_PIDFD-flagget kan forårsake problemer med tjenesteadministratorer eller Android-plattformens ut-av-minnet krafttermineringssystem. I dette tilfellet brukes et kall til fork() eller clone() uten CLONE_PIDFD for å starte.

      Kernel 5.3 introduserte systemkallet pidfd_open(), som lar deg få en kontrollerbar pidfd for en vilkårlig eksisterende prosess som ikke ble opprettet ved å kalle clone() med CLONE_PIDFD-flagget. Lagt også til støtte for pidfd-polling ved bruk av poll() og epoll(), som lar prosessledere spore avslutningen av vilkårlige prosesser uten frykt for en rasetilstand hvis en PID blir tildelt en ny prosess. Mekanismen for å varsle om at en prosess knyttet til pidfd er avsluttet er den samme som å varsle om at den underordnede prosessen er avsluttet;

    • Støtte for lastfestemekanismen er lagt til oppgaveplanleggeren (Utnyttelsesklemming), slik at du kan følge minimums- eller maksimumsfrekvensområdene, avhengig av oppgavene som er aktive på CPU. Den presenterte mekanismen fremskynder oppgaver som direkte påvirker kvaliteten på brukeropplevelsen ved å kjøre disse oppgavene i det minste på den nedre enden av den "forespurte" frekvensen. Lavprioriterte oppgaver som ikke påvirker brukerens arbeid, lanseres ved å bruke den øvre grensen for "tillatt" frekvens. Grenser settes via attributtene sched_uclamp_util_min og sched_uclamp_util_max i systemkallet sched_setattr().
    • Lagt til støtte for energiledelsesteknologi Intel Speed ​​​​Select, tilgjengelig på utvalgte servere med Intel Xeon-prosessorer. Denne teknologien lar deg angi ytelses- og partisjonsgjennomstrømningsinnstillinger for forskjellige CPU-kjerner, som lar deg prioritere ytelse for oppgaver utført på visse kjerner, og ofre ytelsen på andre kjerner;
    • Prosesser i brukerrommet gitt muligheten til å vente en kort stund uten å bruke loops ved å bruke umwait-instruksjonen. Denne instruksjonen, sammen med umonitor- og tpause-instruksjonene, vil bli tilbudt i Intels kommende "Tremont"-brikker, og vil tillate implementering av forsinkelser som er energieffektive og ikke påvirker ytelsen til andre tråder ved bruk av Hyper Threading;
    • For RISC-V-arkitekturen er det lagt til støtte for store minnesider;
    • kprobes-sporingsmekanismen har lagt til muligheten til å dereferere kjernepekere til brukerplass, som kan brukes for eksempel til å evaluere innholdet i strukturer som sendes til systemanrop. Muligheten til å installere sjekker på oppstartsstadiet er også lagt til.
    • Lagt til PREEMPT_RT-alternativet til konfigurasjonsfilen for sanntidsdrift. Selve koden for å støtte sanntidsmodus er ennå ikke lagt til kjernen, men utseendet til alternativet er et godt tegn på at det langsiktige episke integrering Realtime-Preempt-oppdateringer nærmer seg ferdigstillelse;
    • Lagt til clone3()-systemkallet med implementering av en mer utvidbar versjon av clone()-grensesnittet, som gjør det mulig å spesifisere et større antall flagg;
    • Lagt til bpf_send_signal()-behandler, slik at BPF-programmer kan sende signaler til vilkårlige prosesser;
    • For perf-hendelser i KVM-hypervisormiljøet er det lagt til en ny hendelsesfiltreringsmekanisme, som lar administratoren bestemme hvilke typer hendelser som er tillatt eller ikke tillatt for overvåking på gjestesystemsiden;
    • Muligheten til å behandle programmer med løkker er lagt til eBPF-applikasjonsverifiseringsmekanismen hvis utførelsen av løkken er begrenset og ikke kan føre til overskridelse av grensen for maksimalt antall instruksjoner;
  • Diskundersystem, I/O og filsystemer
    • XFS-filsystemet støtter nå flertråds inodebypass (for eksempel når du sjekker kvoter). Nye ioctls BULKSTAT og INUMBERS er lagt til, og gir tilgang til funksjonene som dukket opp i den femte utgaven av FS-formatet, for eksempel inodens fødselstid og muligheten til å angi BULKSTAT- og INUMBERS-parametrene for hver AG-gruppe (tildelingsgrupper);
    • I Ext4 støtte lagt til tomrom i kataloger (ikke-koblede blokker).
      Behandling gitt flagg "i" (uforanderlig) for åpne filer (skriving er forbudt i en situasjon hvis flagget ble satt på et tidspunkt da filen allerede var åpen);
    • Btrfs gir en definisjon av en rask implementering av crc32c på alle arkitekturer;
    • I CIFS er koden for smbdirect-støtte fjernet som eksperimentell utvikling. SMB3 la til muligheten til å bruke kryptografiske algoritmer i GCM-modus. Lagt til et nytt monteringsalternativ for å trekke ut modusparametere fra ACE-oppføringer (Access Control Entry). Optimalisert ytelsen til open()-kallet;
    • Lagt til et alternativ til F2FS for å begrense søppelsamleren når den kjøres i sjekkpunkt=deaktiver modus. Lagt til ioctl for å fjerne blokkområder fra F2FS, noe som muliggjør justeringer av partisjonsstørrelse underveis. Lagt til muligheten til å plassere en byttefil i F2FS for å gi direkte I/O. Lagt til støtte for å feste en fil og tildele blokker for lignende filer for alle brukere;
    • Lagt til støtte for asynkrone operasjoner sendmsg() og recvmsg() til grensesnittet for asynkron input/output io_uring;
    • Støtte for komprimering ved bruk av zstd-algoritmen og muligheten til å bekrefte signerte FS-bilder er lagt til UBIFS-filsystemet;
    • Ceph FS støtter nå SELinux sikkerhetsetiketter for filer;
    • For NFSv4 er et nytt monteringsalternativ “nconnect=” implementert, som bestemmer antall tilkoblinger som er opprettet med serveren. Trafikken mellom disse forbindelsene vil fordeles ved hjelp av lastbalansering. I tillegg oppretter NFSv4-serveren nå en katalog /proc/fs/nfsd/clients med informasjon om gjeldende klienter, inkludert informasjon om filene de har åpnet;
  • Virtualisering og sikkerhet
    • Kjernen inkluderer en hypervisor for innebygde enheter ACRN, som er skrevet med tanke på beredskap for sanntidsoppgaver og egnethet for bruk i oppdragskritiske systemer. ACRN gir minimal overhead, garanterer lav ventetid og tilstrekkelig respons når du samhandler med utstyr. Støtter virtualisering av CPU-ressurser, I/O, nettverksundersystem, grafikk og lydoperasjoner. ACRN kan brukes til å kjøre flere isolerte virtuelle maskiner i elektroniske kontrollenheter, dashbord, bilinformasjonssystemer, forbruker-IoT-enheter og annen innebygd teknologi;
    • I brukermodus Linux la til Tidsreisemodus, som lar deg senke eller øke tiden i et virtuelt UML-miljø for å gjøre det enklere å feilsøke tidsrelatert kode. I tillegg er det lagt til en parameter
      time-travel-start, som lar systemklokken starte fra et spesifisert øyeblikk i epokeformat;
    • Nye kjernekommandolinjealternativer "init_on_alloc" og "init_on_free" er lagt til, når spesifisert, er nullstilling av tildelte og frigjorte minneområder aktivert (fyller med nuller for malloc og gratis), noe som gir økt sikkerhet på grunn av ekstra initialiseringskostnader;
    • Ny driver lagt til virtio-iommu med implementering av en paravirtualisert enhet som lar deg sende IOMMU-forespørsler som ATTACH, DETACH, MAP og UNMAP over virtiotransporten uten å emulere minnesidetabeller;
    • Ny driver lagt til virtio-pmem, som representerer tilgang til lagringsenheter som er tilordnet fysisk adresserom, for eksempel NVDIMM-er;
    • Implementert muligheten til å knytte kryptografiske nøkler til en bruker- eller nettverksnavneområde (nøkler blir utilgjengelige utenfor det valgte navneområdet), samt beskytte nøkler ved hjelp av ACL-er;
    • Til kryptoundersystemet la til støtte for en veldig rask ikke-kryptografisk hashing-algoritme xxhash, hvis hastighet avhenger av minneytelse;
  • Nettverksundersystem
    • Aktivert behandling av IPv4-adresser i området 0.0.0.0/8, som tidligere ikke var tilgjengelig for bruk. Introduksjon av dette undernettet vil tillate distribuere ytterligere 16 millioner IPv4-adresser;
    • I Netfilter for nftables la til støtte for maskinvareakselerasjonsmekanismer for pakkefiltrering ved bruk av ekstra drivere Flow Block API. Hele regeltabeller med alle kjeder kan plasseres på siden av nettverkskort. Aktivering gjøres ved å binde NFT_TABLE_F_HW-flagget til tabellen. Støtter enkle Layer 3 og Layer 4 protokollmetadata, aksepter/avvis handlinger, tilordninger etter IP og sender/mottaker nettverksporter og protokolltype;
    • La til innebygd støtte for tilkoblingssporing for nettverksbroer, som ikke krever bruk av emuleringslaget br_netfilter;
    • I nf_tables la til støtte for SYNPROXY-modulen, som replikerer lignende funksjonalitet fra iptables, og muligheten til å sjekke inn regler for individuelle alternativer i IPv4-headeren er også implementert;
    • Lagt til muligheten til å knytte BPF-programmer til setsockopt()- og getsockopt()-systemkallene, som for eksempel lar deg knytte dine egne tilgangsbehandlere til disse samtalene. I tillegg er det lagt til et nytt call point (hook), som du kan organisere en samtale til BPF-programmet med én gang for hvert RTT-intervall (tur-retur-tid, pingtid);
    • For IPv4 og IPv6 la til ny nexthop-rutingsdatalagringsmekanisme rettet mot å øke skalerbarheten til rutingtabeller. Tester viste at ved bruk av det nye systemet ble et sett med 743 tusen ruter lastet inn i kjernen på bare 4.3 sekunder;
    • For Bluetooth implementert funksjonalitet som kreves for å støtte LE-ping;
  • Оборудование
    • La til støtte for selskapets x86-kompatible prosessorer Zhaoxin, utviklet som et resultat av et felles prosjekt mellom VIA Technologies og Shanghai kommune. ZX CPU-familien er bygget på x86-64 Isaiah-arkitekturen, og fortsetter utviklingen av teknologi VIA Centaur;
    • DRM (Direct Rendering Manager)-delsystemet, samt amdgpu- og i915-grafikkdriverne, har lagt til støtte for å analysere, behandle og sende HDR-metadata (high dynamic range) via HDMI-porten, noe som tillater bruk av HDR-paneler og skjermer som kan vise ekstra lysstyrkeområder;
    • Amdgpu-driveren har lagt til startstøtte for AMD NAVI GPU (RX5700), som inkluderer basisdriveren, skjerminteraksjonskoden (DCN2), GFX og databehandlingsstøtte (GFX10),
      SDMA 5 (System DMA0), strømstyring og multimediekodere/dekodere (VCN2). amdgpu forbedrer også støtten for kort basert på Vega12 og Vega20 GPUer, for hvilke ekstra minne- og strømstyringsmuligheter er lagt til;
    • Lagt til støtte for kort basert på VegaM GPUer til amdkfd-driveren (for diskrete GPUer, som Fiji, Tonga, Polaris);
    • I DRM-driveren for Intel-skjermkort for Icelake-brikker implementert ny multi-segment gammakorreksjonsmodus. Lagt til muligheten til å sende ut via DisplayPort i YCbCr4:2:0-formatet. Ny firmware lagt til GuC for SKL, BXT, KBL, GLK og ICL. Muligheten til å slå av skjermstrømmen i asynkron modus er implementert. La til støtte for å lagre og gjenopprette gjengivelseskonteksten for Ironlake (gen5) og gen4 (Broadwater - Cantiga) brikker, som lar deg gjenopprette GPU-tilstanden fra brukerplass når du flytter fra en batchoperasjon til en annen;
    • Nouveau-driveren gir gjenkjenning av NVIDIA Turing TU116-brikkesettet;
    • Mulighetene til DRM/KMS-driveren for ARM Komeda-skjermakseleratorer (Mali D71) er utvidet, støtte for skalering, splitt/flett lag, rotasjon, utsatt skriving, AFBC, SMMU og fargekodingsformatene Y0L2, P010, YUV420_8/10BIT har blitt lagt til;
    • MSM-driveren legger til støtte for A540 GPU Adreno-serien som brukes i Qualcomm-prosessorer, samt støtte for MSM8998 DSI-kontrolleren for Snapdragon 835;
    • Lagt til drivere for 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;
    • La til driver for å aktivere dekodingsakselerasjonsverktøy
      videoer tilgjengelig i Amlogic Meson SoC;
    • I v3d-driveren (for Broadcom Video Core V GPU brukt i Raspberry Pi) dukket opp støtte utsendelse av dataskyggere;
    • La til driver for SPI-tastaturer og styreflater brukt i moderne modeller av Apple MacBook og MacBookPro bærbare datamaskiner;
    • La til ekstra beskyttelse for ioctl-anrop knyttet til diskettdriveren, og selve driveren er merket som ikke vedlikeholdt
      ("foreldreløs"), noe som innebærer avslutning av testingen. Driveren er fortsatt lagret i kjernen, men riktig drift er ikke garantert. Driveren anses som utdatert, siden det er vanskelig å finne arbeidsutstyr for å teste den - alle nåværende eksterne stasjoner bruker som regel USB-grensesnittet.
    • La til cpufreq-driver for Raspberry Pi-kort, som lar deg dynamisk kontrollere endringer i prosessorfrekvens;
    • Lagt til støtte for nye ARM SoC Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSPer + MMA) og Amlogic G12B (4x Cortex-A73-2x Cortex + 53 AXNUMX ), 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 la Latin American Free Software Foundation dannet
вариант helt gratis kjerne 5.3 - Linux-fri 5.3-gnu, fjernet for fastvare- og driverelementer som inneholder ikke-frie komponenter eller kodeseksjoner, hvis omfang er begrenset av produsenten. I den nye utgivelsen er blob-lasting deaktivert i driverne for qcom, hdcp drm, allegro-dvt og meson-vdec.
Oppdatert blob-rensekode i drivere og undersystemer amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, lyddriver for skylake, samt i mikrokodedokumentasjonen.

Kilde: opennet.ru

Legg til en kommentar