Etter to måneder med utvikling Linus Torvalds kjerneutgivelse . 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.
В 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 nyttig 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.
:
- 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 , 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 (), 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 , 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 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 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;
- 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
- 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 tomrom i kataloger (ikke-koblede blokker).
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 , 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 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 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 , 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 støtte for en veldig rask ikke-kryptografisk hashing-algoritme , 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 distribuere ytterligere 16 millioner IPv4-adresser;
- I Netfilter for nftables støtte for maskinvareakselerasjonsmekanismer for pakkefiltrering ved bruk av ekstra drivere . 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;
- innebygd støtte for tilkoblingssporing for nettverksbroer, som ikke krever bruk av emuleringslaget br_netfilter;
- I nf_tables 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 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 funksjonalitet som kreves for å støtte LE-ping;
- Оборудование
- støtte for selskapets x86-kompatible prosessorer , 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 ;
- 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 ny multi-segment gammakorreksjonsmodus. Lagt til muligheten til å sende ut via DisplayPort i YCbCr4:2:0-formatet. Ny firmware lagt til for SKL, BXT, KBL, GLK og ICL. Muligheten til å slå av skjermstrømmen i asynkron modus er implementert. 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; - 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 utsendelse av dataskyggere;
- driver for SPI-tastaturer og styreflater brukt i moderne modeller av Apple MacBook og MacBookPro bærbare datamaskiner;
- 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. - 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:
- ,
- 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
вариант - , 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
