Etter to måneder med utvikling av Linus Torvalds har presentert utgjeving av kjernen Linux 5.14. Blant de mest bemerkelsesverdige endringene er: nye systemanrop quotactl_fd() og memfd_secret(), fjerning av ide- og raw-drivere, ny prioritetskontroller for I/O for cgroup, oppgaveplanleggingsmodus SCHED_CORE, infrastruktur for å lage oppstartslaster med verifiserte BPF-programmer.
I den nye versjonen er det gjort 15883 feilrettinger fra 2002 utviklere, størrelsen på patchen er 69 MB (endringene berørte 12580 filer, 861501 linjer med kode ble lagt til, 321654 linjer ble fjernet). Rundt 47% av endringene i 5.14 er relatert til enhetsdrivere, omtrent 14% av endringene er knyttet til oppdateringer av maskinvare-spesifikk kode, 13% er relatert til nettverksstakken, 3% til filsystemer og 3% til interne systemer i kjernen.
- diskunderdel, I/O og filssystemer:
- for cgroup implementert en ny prioritetskontroller for I/O — rq-qos, som kan styre behandlingsprioriteten for forespørslene til blokkenheter, generert av deltakerne i hver cgroup. Støtte for den nye prioritetskontrolleren er lagt til I/O-scheduler mq-deadline;
- i filsystemet ext4 er implementert en ny ioctl-kommando EXT4_IOC_CHECKPOINT, som tvinger alle ventende transaksjoner fra loggen og tilknyttede buffere til å bli skrevet til disk, samt overskriver området som brukes av loggen i lagringsenheten. Endringen ble forberedt som en del av en initiativ for å forhindre informasjonslekkasjer fra filsystemer;
- i Btrfs tilført ytelsesforbedringer: ved å utelukke unødvendig logging av utvidede attributter under kjøring av fsync, har ytelsen av intensive operasjoner med utvidede attributter økt med opptil 17%. I tillegg, under avkortingsoperasjoner som ikke berører extents, er full synkronisering blitt deaktivert, noe som reduserte utførelsestiden for operasjonen med 12%. En innstilling er lagt til i sysfs for å begrense I/O-båndbredden under FS-sjekking. ioctl-anrop er lagt til for å kansellere resize og enhetsfjerning operasjoner;
- i XFS omarbeidelsen av buffer-cacheimplementasjonen, som nå er overført til sideallokering i batchmodus. Effektiviteten av cachen er forbedret;
- I F2FS har blitt lagt til en funksjon for å jobbe i bare lese-modus, og det er implementert en kompresjonsbuffer-modus (compress_cache) for å øke ytelsen ved tilfeldig lesing. Støtte for komprimering av filer som avspeiles i minnet ved hjelp av mmap()-operasjonen er implementert. Det er også foreslått et nytt monteringsalternativ nocompress for selektiv avkobling av filkomprimering basert på masker;
- I exFAT-driveren er det gjort forbedringer for å øke kompatibiliteten med lagringsenheter fra enkelte digitale kameraer;
- et systemkall er lagt til, quotactl_fd(),, som gjør det mulig å administrere kvoter ikke via spesialenhetsfilen, men ved å spesifisere en filbeskrivelse knyttet til filsystemet som kvoten gjelder for;
- Gamle drivere for blokk-enheter med IDE-grensesnitt er fjernet fra kjernen, som lenge har blitt erstattet av libata subsystemet. Støtte for gamle enheter er fortsatt bevart i sin helhet; endringene gjelder kun muligheten til å bruke de gamle driverne, hvor lagringsenheter ble navngitt /dev/hd* i stedet for /dev/sd*;
- Driveren «raw», som gir ubuffer tilgang til blokk-enheter via grensesnittet /dev/raw, er fjernet fra kjernen. Den nevnte funksjonaliteten har lenge blitt implementert i applikasjoner ved hjelp av O_DIRECT flagget;
- Minne og systemtjenester:
- I oppgaveplanleggeren er det implementert en ny planleggingsmodus, SCHED_CORE,, som gjør det mulig å kontrollere hvilke prosesser som kan kjøres samtidig på et enkelt CPU-kjerne. Hver prosess kan tildeles en cookie-ID som bestemmer tillitsområdet mellom prosessene (for eksempel tilknytning til en bruker eller container). Når kodekjøring organiseres, kan planleggeren sikre deling av én CPU-kjerne bare for prosesser knyttet til én eier, noe som kan brukes til å blokkere visse angrep av Spectre-klasse ved å forhindre kjøring i én tråd med SMT (Hyper Threading) av pålitelige og upålitelige oppgaver;
- For cgroup-mekanismen er det implementert støtte for kill-operasjonen, som lar deg avslutte alle prosessene knyttet til gruppen på en gang (sende SIGKILL) ved å skrive «1» til den virtuelle filen cgroup.kill;
- Utvidede muligheter for respons på oppdagelse av oppdelte låser («split lock»), som oppstår ved tilgang til ujusterte data i minnet grunnet at ved utføring av atomær instruksjon krysser data to CPU-cachelinjer. Slike låser fører til betydelig ytelsestap, derfor ble det tidligere gitt mulighet for tvungen avslutning av programmet som forårsaket låsen. Den nye utgaven inkluderer en kommandolinjeparameter for kjernen «split_lock_detect=ratelimit:N», som tillater angivelse av systemomfattende grense for intensiteten av låseoperasjoner per sekund, etter overskridelse av dette blir enhver prosess som har forårsaket en delt lås, i stedet for å bli avsluttet, tvunget stoppet i 20 ms;
- I cgroup-kontrolleren for båndbegrensning CFS (CFS-båndbreddekontroller), som definerer hvor mye prosessor tid som kan tildeles hver cgroup, er det nå mulighet for å sette begrensninger med tidsbegrenset virkning, noe som gjør det lettere å regulere last som er sensitiv for forsinkelser. For eksempel, ved å sette cpu.cfs_quota_us til 50000 og cpu.cfs_period_us til 100000, vil en gruppe prosesser hvert 100 ms bruke 50 ms CPU-tid;
- er det lagt til Den initiale infrastrukturen for å lage BPF-program lader, som vil tillate lasting av kun BPF-programmer signert med en pålitelig digital nøkkel;
- Det er lagt til en ny futex-operasjon FUTEX_LOCK_PI2, som bruker en monoton timer for å beregne tidsavbrudd, som tar hensyn til tiden systemet har vært i hvilemodus;
- For RISC-V-arkitekturen er det implementert støtte for store minnesider (Transparent Huge-Pages) og muligheten til å anvende mekanismen KFENCE for å oppdage feil ved minnebruk;
- til systemanropet madvise(), som gir midler for optimalisering av prosessens minnehåndtering, er det lagt til flaggene MADV_POPULATE_READ og MADV_POPULATE_WRITE for å generere «page fault» på alle minnesider som reflekteres for lese- eller skriveoperasjoner, uten å utføre faktisk lesing eller skriving (prefault). Bruken av flaggene kan være nyttig for å redusere forsinkelser i programkjøringen ved å forutse utførelsen av «page fault»-behandleren for alle ikke-allokerte sider, uten å vente på faktisk tilgang til dem;
- i systemet for unit-testing kunit er det lagt til støtte for å kjøre tester i QEMU-miljøet;
- nye sporingsverktøy lagt til: «osnoise» for å spore forsinkelser i applikasjoner forårsaket av behandling av avbrudd, og «timerlat» for å gi detaljert informasjon om forsinkelser ved oppvåkning som følge av tidsur-signal;
- virtualisering og sikkerhet:
- er lagt til systemkall memfd_secret(), som gjør det mulig å opprette et privat minneområde i et isolert adresseområde, synlig bare for eierprosessen, ikke reflektert i andre prosesser og direkte utilgjengelig for kjernen;
- i systemet for filtrering av systemkall, seccomp, er det blitt mulig å bruke én atomisk operasjon for å opprette en filbeskrivelse for den isolerte oppgaven og returnere den ved behandling av systemkallet. Den foreslåtte operasjonen løser problemet med avbruddsbehandling i brukerrommet når signalet ankommer;
- er lagt til ny mekanisme for å håndtere ressursbegrensninger i brukernavnsrommet, som knytter separate rlimit-tellere til brukeren i «user namespace». Endringen løser problemet med anvendelse av felles ressurstellere når en bruker kjører prosesser i forskjellige containere;
- i KVM-hypervisoren for ARM64-systemer er det lagt til støtte for å bruke MTE- (MemTag, Memory Tagging Extension) utvidelser i gjestesystemer, som gjør det mulig å knytte etiketter til hver minnetildeling og organisere verifisering av korrekt bruk av pekere for å blokkere utnyttelse av sårbarheter forårsaket av tilgang til allerede frigjort minne, bufferoverløp, tilganger før initialisering og bruk utenfor gjeldende kontekst;
- de verktøyene for pekerautentisering (Pointer Authentication) som tilbys av ARM64-plattformen kan nå konfigureres separat for kjernen og brukerområdet. Teknologien tillater bruk av spesialiserte ARM64-instruksjoner for å sjekke returadresser ved hjelp av digitale signaturer, som lagres i de ubrukte øverste bitene av selve pekeren;
- i User-mode Linux er det lagt til støtte for bruk av drivere for PCI-enheter med en virtuell PCI-buss, implementert av PCI-over-virtio-driveren;
- for x86 systems, support has been added for the paravirtualized device virtio-iommu, allowing IOMMU requests such as ATTACH, DETACH, MAP, and UNMAP to be sent over the virtio transport without emulation of memory page tables;
- for Intel CPUs, starting from the Skylake family and ending with Coffee Lake, the use of Intel TSX (Transactional Synchronization Extensions) is disabled by default, which provides means to improve the performance of multithreaded applications by dynamically eliminating unnecessary synchronization operations. The extensions are disabled due to the potential for attacks Zombieload, manipulating data leakage through side channels that occur when working with the asynchronous interruption operations mechanism (TAA, TSX Asynchronous Abort);
- network subsystem:
- integration with MPTCP (MultiPath TCP) has continued in the kernel, an extension of the TCP protocol for organizing TCP connections that deliver packets simultaneously across multiple routes through different network interfaces bound to different IP addresses. In this new release, er lagt til a mechanism for setting custom traffic hash policies for IPv4 and IPv6 (multipath hash policy), allowing user space to define which fields in packets, including encapsulated ones, will be used when computing the hash that determines the path choice for a packet;
- support for sockets has been added to the virtio transport SOCK_SEQPACKET (ordered and reliable transmission of datagrams);
- the capabilities of the SO_REUSEPORT sockets mechanism have been expanded, allowing multiple listening sockets to connect to a single port to receive connections with the distribution of incoming requests simultaneously across all sockets connected through SO_REUSEPORT, simplifying the creation of multithreaded server applications. In this new version, er det lagt til means for transferring control to another socket in case of failure when processing a request from the originally selected socket (solves the issue of losing individual connections when restarting services);
- hardware:
- in the amdgpu driver er implementert støtte for de nye GPU-seriene AMD Radeon RX 6000, utviklet under kodenavnene «Beige Goby» (Navi 24) og «Yellow Carp», samt forbedret støtte for GPU Aldebaran (gfx90a) og APU Van Gogh. Muligheten for samtidig drift med flere eDP-paneler er lagt til. For APU Renoir er det implementert støtte for arbeid med krypterte buffere i videominne (TMZ, Trusted Memory Zone). Støtte for hot-plugging av grafikkort er lagt til. For GPU Radeon RX 6000 (Navi 2x) og eldre AMD GPUer er ASPM (Active State Power Management) aktivert som standard, en funksjon som tidligere kun var aktivert for GPU Navi 1x, Vega og Polaris;
- for AMD-brikker er støtte for delt virtuell minne (SVM, shared virtual memory) lagt til basert på HMM-subsystemet (Heterogeneous memory management), som gjør at enheter med egne minnekontrollere (MMU, memory management unit) kan få tilgang til hovedminnet. Ved hjelp av HMM kan det også organiseres et delt adresseområde mellom GPU og CPU, der GPU kan få tilgang til hovedminnet til prosessen;
- det er lagt til innledende støtte for teknologien AMD Smart Shift, som dynamisk endrer strømningsparametrene til CPU og GPU i bærbare datamaskiner med AMD-brikke og grafikkort for å presse ytelsen under spilling, videoredigering og 3D-rendering;
- i i915-driveren for Intel-grafikkort er inkludert støtte for Intel Alder Lake P-brikker;
- Hyper-V for virtuell grafikkadapter; er lagt til drm/hyperv-driveren;
- er lagt til grafikkdriveren simpledrm, som bruker EFI-GOP- eller VESA-framebuffer levert av UEFI-firmware eller BIOS for grafisk utdata. Hovedformålet med driveren er å gi grafisk output i de tidlige stadiene av oppstart, før det blir mulig å bruke en fullverdig DRM-driver. Driveren kan også brukes som en midlertidig løsning for maskinvare som ennå ikke har egne DRM-drivere;
- er det lagt til støtte for alt-i-ett-PC-en Raspberry Pi 400;
- dell-wmi-privacy-driver er lagt til for støtte av maskinvarebrytere for kamera og mikrofon levert i Dell bærbare datamaskiner;
- for Lenovo bærbare datamaskiner er lagt til WMI-grensesnitt for å endre BIOS-innstillinger via sysfs /sys/class/firmware-attributes/;
- utvidet støtte for enheter med USB4-grensesnitt;
- er det lagt til støtte for lydkort og kodeker som AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 og Texas Instruments TAS2505. Forbedret lydstøtte på HP- og ASUS-bærbare datamaskiner. Lagt til patcher for å redusere forsinkelsen før avspilling av lyd på enheter med USB-grensesnitt.
Kilde – opennet.ru.
Kilde: linux.org.ru
