Etter to måneder med utvikling av Linus Torvalds utgjeving av kjernen . Blant de mest bemerkelsesverdige endringene er støtte for AMD Navi GPU-er, Zhaoxi-prosessorer og Intel Speed Select strømhåndteringsteknologi, muligheten for å bruke umwait-instruksjoner for å vente uten å bruke sløyfer,
en interaktivitet økende modus ‘utilization clamping’ for asymmetrisk CPU, systemanropet pidfd_open, muligheten for å bruke IPv4-adresser fra subnett 0.0.0.0/8, muligheten for maskinvareakselerasjon av nftables, støtte for HDR i DRM-underdelene, og integrasjon av hypervisor ACRN.
I Den nye utgivelsen fra Linus minnet alle utviklere om hovedregelen for kjernedesign — opprettholdelse av uforanderlighet av oppførselen for brukerromkomponentene. Endringer i kjernen skal på ingen måte forstyrre allerede fungerende applikasjoner og føre til regresjoner på brukernivå. Både endring av ABI, fjerning av foreldet kode eller introduksjon av feil, samt indirekte innflytelse fra korrekt fungerende forbedringer kan resultere i endret oppførsel. Som et tydelig eksempel ble en nyttig i Ext4-koden, som reduserte antall henvendelser til lagringsenheten ved å deaktivere forhåndslesing av inode-tabellen ved små I/O-forespørsler.
Optimaliseringen førte til at på grunn av redusert diskaktivitet, ble entropi for tilfeldighetsgeneratoren getrandom() akkumulert langsommere, og under visse omstendigheter i spesifikke konfigurasjoner kunne man oppleve henginger under oppstart frem til entropibassenget ble fylt. Siden optimaliseringen faktisk er nyttig, oppsto det en diskusjon blant utviklerne der man foreslo å løse problemet ved å deaktivere standardblokkeringsmodus for getrandom()-anropet med et tillegg av valgfritt flagg for å vente på entropi, men en slik endring vil påvirke kvaliteten på tilfeldige tall i oppstartsfasen.
Den nye utgaven inkluderer 15794 rettelser fra 1974 utviklere,
patchstørrelsen er 92 MB (endringene berørte 13986 filer, 258419 linjer med kode ble lagt til,
599137 linjer ble fjernet). Omtrent 39% av alle endringene i 5.3
er relatert til enhetsdrivere, omtrent 12% av endringene har
relasjon til oppdatering av kode spesifikk for maskinvarearkitekturer, 11%
er knyttet til nettverksstakken, 3 % – filsystemene og 3 % til interne
kjerneundersystemer.
:
- Minne og systemtjenester
- Utviklingen av funksjonaliteten ‘pidfd’ har fortsatt, og hjelper til med å håndtere situasjoner med gjenbruken av PID (pidfd er knyttet til en spesifikk prosess og endres ikke, mens PID kan bli knyttet til en annen prosess etter at den gjeldende prosessen knyttet til denne PID er fullført). Tidligere ble det allerede lagt til i kjernen
systemanropet pidfd_send_signal() og flagget CLONE_PIDFD i anropet clone(), som gjør det mulig å få pidfd for bruk i idfd_send_signal(). Når du bruker anropet clone() med flagget CLONE_PIDFD, kan det oppstå problemer med tjenesteforvaltere eller systemet for tvungen avslutning av prosesser ved minnemangel på Android-plattformen. I dette tilfellet brukes anropet fork() eller clone() uten CLONE_PIDFD for å starte.I kjerneversjon 5.3 er systemanropet , som gjør det mulig å få et sjekket pidfd for en vilkårlig eksisterende prosess som ikke ble opprettet ved hjelp av anropet clone() med flagget CLONE_PIDFD. Det er også lagt til støtte for polling av pidfd med poll() og epoll(), som gjør det mulig for prosessforvaltere å overvåke avslutninger av vilkårlige prosesser uten å bekymre seg for race conditions ved tildeling av PID til en ny prosess. Varslingsmekanismen for avslutning av prosesser knyttet til pidfd er lik den som brukes for å informere om avslutningen av egne barneprosesser;
- Støtte for mekanismen for lastesammenbindingsmekanismen er lagt til i oppgaveplanleggeren (), som gjør det mulig å opprettholde minimums- eller maksimumsintervall av frekvenser, avhengig av aktive oppgaver på CPU. Den presenterte mekanismen akselererer oppgaver som direkte påvirker brukeropplevelsen, ved å kjøre disse oppgavene i det minste på laveste grensen av den 'forespurte' frekvensen. Lavprioriterte oppgaver, som ikke påvirker brukerens arbeid, kjøres med øvre grense av den 'tillatte' frekvensen. Grensene settes gjennom attributtene sched_uclamp_util_min og sched_uclamp_util_max i systemanropet sched_setattr().
- Støtte for energiforvaltningsmetodikken , tilgjengelig på noen servere med Intel Xeon-prosessorer. Den angitte teknologien gjør det mulig å konfigurere ytelse og båndbredde for forskjellige kjerner på CPU-en, noe som gjør det mulig å prioritere ytelsen for oppgaver som kjøres på bestemte kjerner, på bekostning av ytelsen på andre kjerner;
- Prosesser i brukermiljøet muligheten for å vente i kort tid uten å bruke løkker ved hjelp av instruksjonen umwait. Denne instruksjonen, sammen med instruksjonene umonitor og tpause, vil bli tilgjengelig i de kommende chipene fra Intel 'Tremont', og vil muliggjøre forsinkelser som er energieffektive og ikke påvirker ytelsen til andre tråder når de bruker Hyper Threading;
- For RISC-V-arkitekturen er støtte for store minnesider (huge pages) lagt til;
- I kprobes-tracesystemet er muligheten for å dereferere kjerner peker i brukermiljøet lagt til, noe som kan brukes for eksempel til å evaluere innholdet i strukturer som sendes til systemkall. Muligheten til å sette opp sjekker ved oppstart er også lagt til.
- Konfigurasjonsfilen har fått alternativet PREEMPT_RT for drift i sanntidsmodus. Selve koden for å støtte sanntidsmodus er foreløpig ikke lagt til kjernen, men fremkomsten av alternativet er et godt tegn på at den mangeårige sagaen med Realtime-Preempt-patchene nærmer seg en avslutning;
- Det er lagt til et systemkall clone3() med en mer utvidbar versjon av grensesnittet clone(), som tillater spesifisering av et større antall flagg;
- Det er lagt til en bpf_send_signal()-behandler som gjør det mulig for BPF-programmer å sende signaler til valgfri prosesser;
- For perf-hendelser i KVM-hypervisor-miljøet er en ny mekanisme for filtrering av hendelser lagt til, som lar administratoren definere hvilke typer hendelser som er tillatt eller ikke tillatt for overvåking på gjestesystemets side;
- I verifikasjonsmekanismen for eBPF-applikasjoner er det lagt til mulighet for å håndtere programmer med løkker, hvis utførelsen av løkken er begrenset og ikke kan føre til overskridelse av grensen for maksimalt antall instruksjoner;
- Utviklingen av funksjonaliteten ‘pidfd’ har fortsatt, og hjelper til med å håndtere situasjoner med gjenbruken av PID (pidfd er knyttet til en spesifikk prosess og endres ikke, mens PID kan bli knyttet til en annen prosess etter at den gjeldende prosessen knyttet til denne PID er fullført). Tidligere ble det allerede lagt til i kjernen
- Disk subsystem, I/O og filsystemer
- For the XFS file system, multithreaded inode traversal (for example, during quota checks) has been implemented. New ioctl BULKSTAT and INUMBERS have been added, providing access to features introduced in the fifth edition of the FS format, such as the inode birth time and the ability to set BULKSTAT and INUMBERS parameters for each AG (Allocation Groups);
- I Ext4 gaps in directories (unallocated blocks).
the 'i' (immutable) flag for open files has been ensured (preventing write operations if the flag was set when the file was already open); - In Btrfs, quick implementation of crc32c has been enabled across all architectures;
- In CIFS, the experimental development status for smbdirect code has been removed. In SMB3, the ability to use cryptographic algorithms in GCM mode has been added. A new mounting option has been introduced for extracting mode parameters from ACE (Access Control Entry) records. Performance of the open() call has been optimized;
- In F2FS, an option for limiting the garbage collector when operating in checkpoint=disable mode has been added. An ioctl has been added for deleting ranges of blocks from F2FS, allowing on-the-fly adjustment of partition size. The possibility to place a swap file in F2FS with direct I/O support has been introduced. Support for file pinning and block allocation for similar files has been added for all users;
- Support for asynchronous operations sendmsg() and recvmsg() has been added to the io_uring asynchronous I/O interface;
- Support for compression using the zstd algorithm and the ability to verify signed FS images have been added to the UBIFS file system;
- In the Ceph FS, support for SELinux security labels for files has been added;
- A new mounting option 'nconnect=' for NFSv4 has been implemented, defining the number of connections established with the server. Traffic between these connections will be distributed using load balancing. Additionally, the NFSv4 server now creates a directory /proc/fs/nfsd/clients with information about current clients, including details about the files they have opened;
- Virtualisering og sikkerhet
- A hypervisor for embedded devices has been included in the kernel , som er skrevet med henblikket på at være klar til at udføre realtidsopgaver og egnet til brug i kritiske systemer. ACRN sikrer minimalt overhead, garanterer lav latenstid og tilstrækkelig reaktivitet ved interaktion med hardware. Virtualisering af CPU-ressourcer, input/output, netværksunderstøttelse samt grafik- og lydoperationer understøttes. ACRN kan anvendes til at køre flere isolerede virtuelle maskiner i elektroniske kontrolenheder, instrumentbrætter, bilinformation systemer, forbruger IoT-enheder og anden indlejret teknik;
- I User-mode Linux tidsrejsen tilstand, som gør det muligt at bremse eller accelerere tiden i UML-virtualiseringsmiljøet for at lette afprøvning af tidsrelateret kode. Der er også tilføjet parameteren
time-travel-start, som muliggør opstart af systemuret fra et angivet tidspunkt i epoch-format; - Nye kommandolinjeindstillinger til kernen 'init_on_alloc' og 'init_on_free' er tilføjet, hvilket, når de angives, aktiverer nulstilling af tildelte og frigivne hukommelsesområder (fyldning med nuller ved malloc og free), hvilket forstærker sikkerheden med ekstra overhead til initialisering;
- En ny driver er tilføjet med implementering af et para-virtualiseret device, der muliggør sending af IOMMU-forespørgsler som ATTACH, DETACH, MAP og UNMAP over virtio transport uden at emulere hukommelsessider;
- En ny driver er tilføjet , der giver adgang til lagringsenheder, der er kortlagt til det fysiske adresserum, som NVDIMM;
- Der er implementeret en mulighed for at knytte kryptografiske nøgler til et bruger- eller netværksnavn rum (nøglerne bliver utilgængelige uden for det valgte navn rum), samt beskyttelse af nøglerne vha. ACL;
- I kryptosystemet hurtig understøttelse af en ikke-kryptografisk hash-algoritme , hvis hastighed er begrænset af hukommelsens præstation;
- Nettverks subsystem
- Behandling af IPv4-adresser inden for intervallet 0.0.0.0/8, som tidligere ikke var tilgængeligt til brug, er blevet sikret. Indførelsen af dette subnet vil fordele yderligere 16 millioner IPv4-adresser;
- I Netfilter for nftables understøtter mekanismer til hardwareaccelereret filtrering af pakker gennem anvendelsen af det tilføjede i driverne Regler kan lagres i nettverksadaptere, og hele tabeller kan overføres med alle kjeder. Aktivering skjer gjennom tilknytning av flagget NFT_TABLE_F_HW til tabellen. Enkelte metadata fra nivå 3 og 4 protokoller støttes, som handlingene godta/avvise, matcher etter IP og nettverksporter for sender/mottaker samt protokolltype;
- innebygd støtte for tilkoblingssporing for nettverksbroer, som ikke krever bruk av et emulerende lag som br_netfilter;
- I nf_tables støtte for SYNPROXY-modulen, som gjentar lignende funksjoner fra iptables, samt muligheten for valgkontroller i reglene etter spesifikke alternativer i IPv4-headeren;
- Muligheten for å feste BPF-programmer til systemanropene setsockopt() og getsockopt() er lagt til, noe som for eksempel muliggjør feste av egne tilgangshåndterere til disse anropene. I tillegg er et nytt hook-punkt lagt til, som gjør det mulig å organisere anrop av BPF-programmet én gang per RTT (round-trip-time, pingtid);
- For IPv4 og IPv6 en ny mekanisme for lagring av ruteopplysninger, rettet mot å øke skalerbarheten til rutetabeller. Testene viste at med det nye systemet, ble en liste på 743 000 ruter lastet inn i kjernen på bare 4,3 sekunder;
- For Bluetooth funksjonaliteten som er nødvendig for å støtte LE ping;
- Utstyr
- støtte for x86-kompatible prosessorer fra , utviklet som et resultat av et felles prosjekt mellom VIA Technologies og byen Shanghai. CPU-familien ZX er basert på x86-64 Isaiah-arkitekturen, som fortsetter utviklingen av teknologiene fra ;
- I DRM (Direct Rendering Manager) subsystemet, samt i grafikkdriverne amdgpu og i915, er det lagt til støtte for parsing, behandling og sending av metadata HDR (High Dynamic Range) gjennom HDMI-porten, som muliggjør bruk av HDR-paneler og skjermer som kan vise utvidede lysstyrkeområder;
- I amdgpu-driveren er den første støtten for AMD NAVI GPU (RX5700) lagt til, som inkluderer grunnleggende driver, kode for interaksjon med skjermer (DCN2), støtte for GFX og beregning (GFX10),
SDMA 5 (System DMA0), strømstyringsverktøy og multimedia-kodere/dekodere (VCN2). I amdgpu er også støtten for kort basert på GPUene Vega12 og Vega20 forbedret, hvor det er lagt til ekstra muligheter for minne- og strømhåndtering; - I amdkfd-driver (for discrete GPUs such as Fiji, Tonga, Polaris) has added support for VegaM-based GPU cards;
- In the Intel graphics driver for Icelake chips, a new multi-segment gamma correction mode has been introduced. Added the ability to output via DisplayPort in YCbCr4:2:0 format. New firmware has been added. for SKL, BXT, KBL, GLK, and ICL. The ability to disable screen power in asynchronous mode has been implemented. support for saving and restoring the rendering context for Ironlake (gen5) and gen4 (Broadwater — Cantiga) chips, allowing the GPU state to be restored from user space when switching between different batch operations;
- The Nouveau driver provides identification for NVIDIA Turing TU116 chipset;
- The DRM/KMS driver capabilities for ARM Komeda (Mali D71) graphics accelerators have been expanded, with added support for scaling, layer splitting/merging, rotation, delayed writing, AFBC, SMMU, and color encoding formats Y0L2, P010, YUV420_8/10BIT;
- In the MSM driver, support for the Adreno A540 GPU series used in Qualcomm processors has been added, as well as support for the DSI controller MSM8998 for Snapdragon 835;
- Drivers for Samsung S6E63M0 LCD panels, Armadeus ST0700, EDT ETM0430G0DH6, OSD101T2045-53TS,
Evervision VGG804821, FriendlyELEC HD702E, KOE tx14d24vm1bpa, TFC S9700RTWV43TR-01B, EDT ET035012DM6, and VXT VL050-8048NT-C01 have been added; - driver to leverage decoding acceleration
for video available in SoC Amlogic Meson; - The v3d driver (for the Broadcom Video Core V GPU used in Raspberry Pi) has introduced computational shader dispatching;
- driver for SPI keyboards and trackpads used in modern Apple MacBook and MacBook Pro models;
- additional protection for ioctl calls related to the floppy driver, and the driver itself is marked as orphaned
("orphaned"), which implies that its testing has been discontinued. The driver is still retained in the kernel, but its proper functioning is not guaranteed. The driver is considered deprecated, as it is difficult to find working hardware for its testing — all current external drives generally use the USB interface. - cpufreq driver for Raspberry Pi boards, allowing dynamic control of CPU frequency changes;
- Support has been added for new ARM SoCs Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSPs + MMA), and Amlogic G12B (4x Cortex-A73 + 2x Cortex-A53), as well as for boards:
- ,
- 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.
At the same time, the Latin American Free Software Foundation
variant — , renset for elementer fra fastvare og drivere som inneholder ikke-frie komponenter eller kode biter hvis bruksområde er begrenset av produsenten. I den nye utgaven er lasting av blobs i qcom-drivere, hdcp drm, allegro-dvt og meson-vdec deaktivert.
Oppdatert kode for rensing av blobs i drivere og undersystemer som amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, lyddriver for skylake, samt i dokumentasjonen for mikrokoden.
Kilde: opennet.ru
