Linux -kjerne 5.14

Linux -kjerne 5.14

Etter to måneder med utvikling Linus Torvalds innsendt kjerneutgivelse Linux 5.14. Viktige endringer inkluderer nye quotactl_fd()- og memfd_secret()-systemanrop, fjerning av ide- og rådrivere, ny cgroup I/O-prioritetskontroller, SCHED_CORE-oppgaveplanleggingsmodus, infrastruktur for å lage lastere for verifiserte BPF-programmer.

Den nye versjonen mottok 15883 rettelser fra 2002-utviklere, oppdateringsstørrelsen er 69 MB (endringene berørte 12580 filer, 861501 linjer med kode ble lagt til, 321654 linjer ble slettet). Omtrent 47 % av alle endringer introdusert i 5.14 er relatert til enhetsdrivere, omtrent 14 % av endringene er relatert til oppdateringskode spesifikk for maskinvarearkitekturer, 13 % er relatert til nettverksstabelen, 3 % til filsystemer og 3 % til interne kjerneundersystemer.

Den viktigste innovasjoner:

  • diskundersystem, I/O og filsystemer:
    • for gruppe implementert En ny I/O-prioriteringskontroller, rq-qos, kan kontrollere behandlingsprioriteten til forespørsler om å blokkere enheter generert av medlemmer av hver cgroup. Støtte for en ny prioritetskontroller er lagt til mq-deadline I/O-planleggeren;
    • på ext4 filsystem implementert ny ioctl-kommando EXT4_IOC_CHECKPOINT, som tvinger alle ventende transaksjoner fra loggen og tilhørende buffere til å bli tømt til disk, og overskriver også området som brukes av innloggingslagringen. Endringen ble utarbeidet som en del av satsingen for å hindre informasjonslekkasjer fra filsystemer;
    • i btrfs introdusert ytelsesoptimaliseringer: ved å eliminere unødvendig utvidet attributtlogging under fsync-kjøring, økte ytelsen til intensive operasjoner med utvidede attributter med opptil 17 %. I tillegg, når du utfører avkortingsoperasjoner som ikke påvirker omfang, er full synkronisering deaktivert, noe som reduserte operasjonstiden med 12 %. En innstilling er lagt til sysfs for å begrense I/O-båndbredden når du sjekker FS. Lagt til ioctl-anrop for å avbryte enhetsstørrelse og slette operasjoner;
    • i XFS revidert implementering av en bufferbuffer, som er oversatt til tildeling av minnesider i batch-modus. Forbedret cache-effektivitet;
    • F2FS la til et alternativ for å jobbe i skrivebeskyttet modus og implementerte en komprimert blokkbuffermodus (compress_cache) for å forbedre tilfeldig leseytelse. Implementert støtte for å komprimere filer som er kartlagt til minnet ved å bruke mmap()-operasjonen. For å selektivt deaktivere filkomprimering med maske, har et nytt monteringsalternativ, nocompress, blitt foreslått;
    • arbeid har blitt gjort i exFAT-driveren for å forbedre kompatibiliteten med lagring av enkelte digitale kameraer;
    • lagt til systemanrop quotactl_fd(), som lar deg administrere kvoter ikke gjennom en spesiell enhetsfil, men ved å spesifisere en filbeskrivelse knyttet til filsystemet som kvoten brukes for;
    • de gamle driverne for blokkenheter med IDE-grensesnittet er fjernet fra kjernen, som ble erstattet av libata-undersystemet for lenge siden. Støtte for gamle enheter er bevart i sin helhet, endringene gjelder kun muligheten for å bruke gamle drivere, ved bruk som ble stasjonene kalt /dev/hd*, og ikke /dev/sd*;
    • Fjernet "rå"-driveren fra kjernen, som gir ubuffret tilgang til å blokkere enheter via /dev/raw-grensesnittet. Denne funksjonaliteten har lenge vært implementert i applikasjoner som bruker flagget O_DIRECT;
  • minne og systemtjenester:
    • oppgaveplanleggeren har en ny planleggingsmodus SCHED_CORE, som lar deg kontrollere hvilke prosesser som kan kjøre sammen på samme CPU-kjerne. Hver prosess kan tildeles en informasjonskapselidentifikator som definerer omfanget av tillit mellom prosesser (for eksempel som tilhører samme bruker eller beholder). Når du organiserer kodekjøring, kan planleggeren sørge for at den samme CPU-kjernen bare deles mellom prosesser knyttet til samme eier, som kan brukes til å blokkere noen angrep av Spectre-klassen ved å forhindre at både pålitelige og upålitelige oppgaver utføres på samme SMT (Hyper Threading) tråd;
    • for cgroup-mekanismen er støtte for kill-operasjonen implementert, som lar deg umiddelbart drepe alle prosessene knyttet til gruppen (send SIGKILL) ved å skrive "1" til den virtuelle cgroup.kill-filen;
    • egenskapene knyttet til responsen på deteksjonen av delte låser ("split lås"), som oppstår ved tilgang til ujusterte data i minnet på grunn av det faktum at når du utfører en atominstruksjon, krysser dataene to linjer i CPU-cachen, har blitt utvidet. Slike låser fører til et betydelig fall i ytelsen, så tidligere var det ofte mulig å tvinge applikasjonen til å avslutte applikasjonen som forårsaket låsen. Den nye utgivelsen legger til en kjernekommandolinjeparameter "split_lock_detect=ratelimit:N" som lar deg sette en systemomfattende grense for intensiteten av låseoperasjoner per sekund, etter å ha overskredet hvilken prosess som ble kilden til en delt lås. bli tvunget til å stoppe i 20 ms i stedet for å avslutte;
    • cgroup båndbreddekontrolleren CFS (CFS bandwidth controller), som bestemmer hvor mye prosessortid som kan tildeles hver cgroup, har muligheten til å definere grenser begrenset av en gitt handlingsvarighet, noe som tillater bedre regulering av arbeidsbelastninger som er følsomme for forsinkelser. Hvis du for eksempel setter cpu.cfs_quota_us til 50000 og cpu.cfs_period_us til 100000, vil prosessgruppen kunne kaste bort 100 ms CPU-tid hver 50 ms;
    • la til en innledende infrastruktur for å lage BPF-programlastere, som senere vil tillate å laste bare BPF-programmer signert med en pålitelig digital nøkkel;
    • lagt til en ny futex-operasjon FUTEX_LOCK_PI2, som bruker en monoton tidtaker for å beregne tidsavbruddet, som tar hensyn til tiden systemet bruker i hvilemodus;
    • for RISC-V-arkitekturen, støtte for store minnesider (Transparent Huge-Pages) og muligheten for å bruke mekanismen KFENCE for å oppdage feil når du arbeider med minne;
    • inn i madvise()-systemkallet, som gir et middel til å optimalisere prosessminneadministrasjonen, la til flagg MADV_POPULATE_READ og MADV_POPULATE_WRITE for å generere en "sidefeil" i alle sider av minnet som er tilordnet for lese- eller skriveoperasjoner uten å faktisk utføre en lesing eller skriving (prefault). Bruk av flagg kan være nyttig for å redusere forsinkelser i løpet av programmet, på grunn av proaktiv utførelse av "sidefeil"-behandleren på en gang for alle ikke-allokerte sider, uten å vente på den faktiske tilgangen til dem;
    • i enhetstestingssystem kunit la til støtte for å kjøre tester i QEMU-miljøet;
    • lagt til nye sporstoffer: "osnoise' for å overvåke programforsinkelser forårsaket av avbrudd, og 'timerlat' for å vise detaljert informasjon om forsinkelser på tidtakeroppvåkning;
  • virtualisering og sikkerhet:
    • la til systemanrop memfd_secret(), som lar deg opprette et privat minneområde i et isolert adresseområde, kun synlig for eierprosessen, ikke reflektert til andre prosesser og ikke direkte tilgjengelig for kjernen;
    • i seccomp systemanropsfiltreringssystemet, når du flytter låsehåndterere til brukerområdet, er det mulig å bruke en enkelt atomoperasjon for å lage en filbeskrivelse for en isolert oppgave og returnere den når du behandler et systemanrop. Den foreslåtte operasjonen løser problem med en avbruddsbehandler i brukerrommet når et signal kommer;
    • la til ny mekanisme å administrere ressursgrensen i bruker-ID-navneområdet, som binder individuelle rlimit-tellere til en bruker i "brukernavneområdet". Endringen løser problemet med bruk av felles ressurstellere når samme bruker starter prosesser i ulike containere;
    • muligheten til å bruke MTE-utvidelsen (MemTag, Memory Tagging Extension) i gjestesystemer er lagt til KVM-hypervisoren for ARM64-systemer, som lar deg binde tagger til hver minneallokeringsoperasjon og sørge for å kontrollere riktigheten av å bruke pekere for å blokkere utnyttelse av sårbarheter forårsaket av tilgang til allerede frigjorte minneblokker, overflyt buffer, anrop før initialisering og bruk utenfor gjeldende kontekst;
    • ARM64-plattformlevert pekerautentisering kan nå konfigureres separat for kjerne- og brukerplass. Teknologien tillater bruk av spesialiserte ARM64-instruksjoner for å verifisere returadresser ved hjelp av digitale signaturer som er lagret i de ubrukte øvre bitene av selve pekeren;
    • i brukermodus Linux la til støtte for bruk av drivere for PCI-enheter med en virtuell PCI-buss implementert av PCI-over-virtio-driveren;
    • for x86-systemer har støtte for den paravirtualiserte virtio-iommu-enheten blitt lagt til, slik at IOMMU-forespørsler som ATTACH, DETACH, MAP og UNMAP kan sendes over virtiotransporten uten å emulere sidetabeller;
    • for Intel CPUer, fra Skylake-familien og slutter med Coffee Lake, er bruken av Intel TSX (Transactional Synchronization Extensions)-utvidelser deaktivert som standard, som gir verktøy for å forbedre ytelsen til flertrådede applikasjoner ved å dynamisk eliminere unødvendige synkroniseringsoperasjoner. Utvidelser er deaktivert på grunn av muligheten for angrep Zombielastmanipulere lekkasje av informasjon gjennom tredjepartskanaler som oppstår under driften av mekanismen for asynkron avbrudd av operasjoner (TAA, TSX Asynchronous Abort);
  • nettverksundersystem:
    • fortsatt integrering i kjernen av MPTCP (MultiPath TCP), en utvidelse av TCP-protokollen for å organisere driften av en TCP-forbindelse med levering av pakker samtidig langs flere ruter gjennom forskjellige nettverksgrensesnitt bundet til forskjellige IP-adresser. I den nye utgivelsen la til en mekanisme for å sette dine egne trafikkhashingpolicyer for IPv4 og IPv6 (multipath hash policy), som gjør det mulig å bestemme fra brukerplassen hvilke av feltene i pakkene, inkludert innkapslede, som skal brukes ved beregning av hashen som bestemmer valg av bane for pakken;
    • socket-støtte lagt til virtio virtuell transport SOCK_SEQPACKET (ordnet og pålitelig overføring av datagrammer);
    • mulighetene til SO_REUSEPORT-socket-mekanismen har blitt utvidet, noe som gjør at flere lyttekontakter kan kobles til én port samtidig for å motta tilkoblinger med distribusjon av innkommende forespørsler samtidig på tvers av alle sockets koblet via SO_REUSEPORT, noe som forenkler opprettelsen av flertrådede serverapplikasjoner . I den nye versjonen la til midler for å overføre kontroll til en annen stikkontakt i tilfelle feil under behandling av en forespørsel fra den opprinnelig valgte kontakten (løser problemet med tap av individuelle tilkoblinger når tjenester startes på nytt);
  • utstyr:
    • i amdgpu-driveren implementert støtte for den nye AMD Radeon RX 6000 GPU-serien med kodenavnet "Beige Goby" (Navi 24) og "Yellow Carp", samt forbedret støtte for Aldebaran (gfx90a) GPUer og Van Gogh APUer. Lagt til muligheten til å jobbe med flere eDP-paneler samtidig. For APU Renoir er støtte for arbeid med krypterte buffere i videominne (TMZ, Trusted Memory Zone) implementert. Lagt til støtte for hot-plug for grafikkort. For Radeon RX 6000 (Navi 2x) GPUer og eldre AMD GPUer er støtte for strømsparingsmekanismen ASPM (Active State Power Management) aktivert som standard, som tidligere bare var aktivert for Navi 1x, Vega og Polaris GPUer;
    • for AMD-brikker lagt til støtte for delt virtuelt minne (SVM, delt virtuelt minne) basert på HMM (Heterogen minnestyring) undersystemet, som tillater bruk av enheter med egne minnestyringsenheter (MMU, minnestyringsenhet), som har tilgang til hovedminnet. Spesielt, ved hjelp av HMM, kan du organisere et delt adresserom mellom GPU og CPU, der GPU kan få tilgang til hovedminnet til prosessen;
    • lagt til innledende teknologistøtte AMD Smart Shift, som dynamisk endrer CPU- og GPU-strøminnstillinger på bærbare datamaskiner med et AMD-brikkesett og grafikkort for å øke ytelsen innen spilling, videoredigering og 3D-gjengivelse;
    • i i915-driveren for Intel-skjermkort inkludert støtte for Intel Alderlake P-brikker;
    • lagt til drm/hyperv-driver for Hyper-V virtuell grafikkadapter;
    • la til simpledrm-grafikkdriver som bruker EFI-GOP- eller VESA-rammebufferen levert av UEFI-fastvaren eller BIOS for utdata. Hovedformålet med driveren er å gi grafisk utdata under de første oppstartsfasene, før en full DRM-driver kan brukes. Driveren kan også brukes som en midlertidig løsning for maskinvare som ennå ikke har innebygde DRM-drivere;
    • la til monoblokk datamaskinstøtte Raspberry Pi 400;
    • Lagt til dell-wmi-privacy-driver for å støtte Dell-leverte maskinvarekamera og mikrofonbrytere.
    • for bærbare Lenovo-maskiner la til WMI-grensesnitt for å endre BIOS-innstillinger via sysfs /sys/class/firmware-attributes/;
    • utvidet støtte for enheter med USB4-grensesnitt;
    • la til støtte for AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 og Texas Instruments TAS2505 lydkort og kodeker. Forbedret lydstøtte på bærbare datamaskiner fra HP og ASUS. La til patcher for å redusere forsinkelser før lydavspilling starter på enheter med USB-grensesnitt.

Kilde - opennet.ru.

Kilde: linux.org.ru