Linux-kjerneutgivelse 5.14

Etter to måneder med utvikling presenterte Linus Torvalds utgivelsen av Linux-kjernen 5.14. Blant de mest bemerkelsesverdige endringene: nye quotactl_fd()- og memfd_secret()-systemanrop, fjerning av ide- og rådrivere, ny I/O-prioritetskontroller for cgroup, SCHED_CORE-oppgaveplanleggingsmodus, infrastruktur for å lage verifiserte BPF-programlastere.

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

Hovedinnovasjoner:

  • Diskundersystem, I/O og filsystemer
    • En ny I/O-prioriteringskontroller er implementert for cgroups, rq-qos, som kan kontrollere behandlingsprioriteten til forespørsler om å blokkere enheter generert av medlemmer av hver cgroup. Ny støtte for prioritetskontroller er lagt til mq-deadline I/O-planleggeren.
    • Ext4-filsystemet implementerer en ny ioctl-kommando, EXT4_IOC_CHECKPOINT, som tvinger alle ventende transaksjoner fra journalen og tilhørende buffere til å bli tømt til disk, og overskriver også området som brukes av journalen i lagring. Endringen ble utarbeidet som en del av et initiativ for å hindre informasjonslekkasjer fra filsystemer.
    • Ytelsesoptimaliseringer er gjort til Btrfs: ved å eliminere unødvendig logging av utvidede attributter under fsync-kjøring, har ytelsen til intensive operasjoner med utvidede attributter økt med opptil 17 %. I tillegg, når du utfører trimoperasjoner som ikke påvirker omfang, er full synkronisering deaktivert, noe som reduserte driftstiden med 12 %. En innstilling er lagt til sysfs for å begrense I/O-båndbredde når du sjekker FS. Lagt til ioctl-anrop for å avbryte endring av størrelse og sletting av enhetsoperasjoner.
    • I XFS har implementeringen av bufferbufferen blitt redesignet, som har blitt byttet til å tildele minnesider i batch-modus. Forbedret cache-effektivitet.
    • F2FS legger til et alternativ for å operere i skrivebeskyttet modus og implementerer en komprimert blokkbuffermodus (compress_cache) for å forbedre tilfeldig leseytelse. Støtte er implementert for å komprimere filer som er kartlagt til minnet ved å bruke mmap()-operasjonen. For å selektivt deaktivere filkomprimering basert på en maske, har et nytt monteringsalternativ nocompress blitt foreslått.
    • Det er gjort arbeid i exFAT-driveren for å forbedre kompatibiliteten med noe digitalkameralagring.
    • La til quotactl_fd() systemkallet, 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; de har lenge blitt erstattet av libata-undersystemet.
    • "Rå"-driveren er fjernet fra kjernen, og gir ubuffret tilgang til blokkering av enheter via /dev/raw-grensesnittet. Denne funksjonaliteten har lenge vært implementert i applikasjoner som bruker O_DIRECT-flagget.
  • Minne- og systemtjenester
    • Oppgaveplanleggeren implementerer en ny planleggingsmodus, SCHED_CORE, som lar deg kontrollere hvilke prosesser som kan kjøres 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 kjøring av kode, kan planleggeren sikre at én CPU-kjerne bare deles mellom prosesser knyttet til samme eier, som kan brukes til å blokkere noen Spectre-angrep ved å forhindre at pålitelige og ikke-klarerte oppgaver kjøres på samme SMT-tråd (Hyper Threading) .
    • For cgroup er støtte for kill-operasjonen implementert, som lar deg drepe alle prosesser knyttet til gruppen på en gang (send SIGKILL) ved å skrive "1" til den virtuelle filen cgroup.kill.
    • Utvidede muligheter knyttet til å svare på deteksjonen av delte låser ("split låser") 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 CPU-hurtigbufferlinjer. Slik blokkering fører til et betydelig fall i ytelse, så tidligere var det mulig å tvinge å avslutte applikasjonen som forårsaket blokkeringen. Den nye utgivelsen legger til en kjernekommandolinjeparameter "split_lock_detect=ratelimit:N", som lar deg definere en systemomfattende grense for hastigheten på låseoperasjoner per sekund, etter å ha overskredet hvilken prosess som har blitt kilden til en delt lås vil 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, implementerer muligheten til å definere tidsbegrensede grenser, som gir bedre regulering av latenssensitive arbeidsbelastninger. Hvis du for eksempel setter cpu.cfs_quota_us til 50000 og cpu.cfs_period_us til 100000, vil en gruppe prosesser kunne kaste bort 100 ms CPU-tid hver 50 ms.
    • Lagt innledende infrastruktur for å lage BPF-programlastere, som videre vil tillate lasting av bare BPF-programmer signert med en klarert digital nøkkel.
    • Lagt til en ny futex-operasjon FUTEX_LOCK_PI2, som bruker en monoton timer for å beregne en timeout som tar hensyn til tiden systemet bruker i hvilemodus.
    • For RISC-V-arkitekturen er støtte for store minnesider (Transparent Huge-Pages) og muligheten til å bruke KFENCE-mekanismen for å oppdage feil ved arbeid med minne implementert.
    • Madvise()-systemkallet, som gir en måte å optimalisere en prosess minnehåndtering, har lagt til MADV_POPULATE_READ- og MADV_POPULATE_WRITE-flaggene for å generere en "sidefeil" på alle minnesider som er tilordnet lese- eller skriveoperasjoner, uten å utføre en faktisk lese- eller skriveoperasjon (prefault). Bruk av flagg kan være nyttig for å redusere forsinkelser i gjennomføringen av programmet, på grunn av proaktiv utførelse av "sidefeil"-behandleren for alle ikke-allokerte sider samtidig, uten å vente på den faktiske tilgangen til dem.
    • Kunit-enhetstestsystemet har lagt til støtte for å kjøre tester i QEMU-miljøet.
    • Nye sporere er lagt til: "osnoise" for å spore applikasjonsforsinkelser forårsaket av avbruddshåndtering, og "timerlat" for å vise detaljert informasjon om forsinkelser når du våkner fra et timersignal.
  • Virtualisering og sikkerhet
    • Systemkallet memfd_secret() er lagt til for å opprette et privat minneområde i et isolert adresserom, kun synlig for eierprosessen, ikke reflektert til andre prosesser, og ikke direkte tilgjengelig for kjernen.
    • I seccomp-systemanropsfiltreringssystemet, når blokkeringsbehandlere flyttes inn i 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 problemet med å avbryte en behandler i brukerrommet når et signal kommer.
    • Lagt til en ny mekanisme for å administrere ressursgrenser 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 én bruker kjører prosesser i ulike containere.
    • KVM-hypervisoren for ARM64-systemer har lagt til muligheten til å bruke MTE-utvidelsen (MemTag, Memory Tagging Extension) i gjestesystemer, som lar deg binde tagger til hver minneallokeringsoperasjon og organisere kontroll av riktig bruk av pekere for å blokkere utnyttelse av sårbarheter forårsaket av tilgang til allerede frigjorte minneblokker, overflyt buffer, tilganger før initialisering og bruk utenfor gjeldende kontekst.
    • ARM64-plattformens pekerautentiseringsfasiliteter kan nå konfigureres separat for kjerne- og brukerplass. Teknologien lar deg bruke spesialiserte ARM64-instruksjoner for å verifisere returadresser ved hjelp av digitale signaturer som er lagret i de ubrukte øvre bitene av selve pekeren.
    • Brukermodus Linux har lagt til støtte for bruk av drivere for PCI-enheter med en virtuell PCI-buss, implementert av PCI-over-virtio-driveren.
    • For x86-systemer, lagt til støtte for den virtio-iommu paravirtualiserte enheten, slik at IOMMU-forespørsler som ATTACH, DETACH, MAP og UNMAP kan sendes over virtio-transporten uten å emulere minnesidetabeller.
    • For Intel CPUer, fra Skylake-familien til Coffee Lake, er bruken av Intel TSX (Transactional Synchronization Extensions), som gir verktøy for å forbedre ytelsen til flertrådede applikasjoner ved å dynamisk eliminere unødvendige synkroniseringsoperasjoner, deaktivert som standard. Utvidelser er deaktivert på grunn av muligheten for Zombieload-angrep som manipulerer informasjonslekkasje via tredjepartskanaler som oppstår under driften av TAA-mekanismen (TSX Asynchronous Abort).
  • Nettverksundersystem
    • Integrering i kjernen av MPTCP (MultiPath TCP), en utvidelse av TCP-protokollen for organisering av driften av en TCP-forbindelse med levering av pakker samtidig langs flere ruter gjennom forskjellige nettverksgrensesnitt knyttet til forskjellige IP-adresser. Den nye utgivelsen legger til en mekanisme for å angi dine egne trafikkhash-policyer for IPv4 og IPv6 (multipath hash policy), noe som gjør det mulig å bestemme fra brukerplass hvilke felt i pakker, inkludert innkapslede, som skal brukes når du beregner hashen som bestemmer valg av bane for pakken.
    • Støtte for SOCK_SEQPACKET sockets (ordnet og pålitelig overføring av datagrammer) er lagt til virtio virtuell transport.
    • Mulighetene til SO_REUSEPORT-socket-mekanismen er utvidet, noe som gjør at flere lyttesokler 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 . Den nye versjonen legger til verktøy for overføring av kontroll til en annen socket i tilfelle feil ved behandling av en forespørsel fra den opprinnelig valgte socket (løser problemet med tap av individuelle tilkoblinger ved omstart av tjenester).
  • Оборудование
    • Amdgpu-driveren gir støtte for den nye AMD Radeon RX 6000-serien med GPUer, kodenavnet "Beige Goby" (Navi 24) og "Yellow Carp", samt forbedret støtte for Aldebaran GPU (gfx90a) og Van Gogh APU. 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 skjermkort. For Radeon RX 6000 (Navi 2x) GPUer og eldre AMD GPUer, er ASPM (Active State Power Management)-støtte aktivert som standard, som tidligere bare var aktivert for Navi 1x, Vega og Polaris GPUer.
    • For AMD-brikker er støtte for delt virtuelt minne (SVM, delt virtuelt minne) lagt til basert på HMM (Heterogen minnestyring) undersystemet, som tillater bruk av enheter med egne minnestyringsenheter (MMU, minnestyringsenhet), som kan få tilgang til hovedminnet. Spesielt ved å bruke HMM kan du organisere et delt adresserom mellom GPU og CPU, der GPUen kan få tilgang til hovedminnet til prosessen.
    • Lagt til innledende støtte for AMD Smart Shift-teknologi, som dynamisk endrer CPU- og GPU-strøminnstillinger på bærbare datamaskiner med et AMD-brikkesett og grafikkort for å øke ytelsen for spill, videoredigering og 3D-gjengivelse.
    • i915-driveren for Intel-grafikkort inkluderer støtte for Intel Alderlake P-brikker.
    • Lagt til drm/hyperv-driver for Hyper-V virtuell grafikkadapter.
    • Lagt til støtte for Raspberry Pi 400 alt-i-ett-datamaskinen.
    • Lagt til dell-wmi-privacy-driver for å støtte maskinvarekameraet og mikrofonbryterne som er inkludert i Dell bærbare datamaskiner.
    • For bærbare Lenovo-maskiner er det lagt til et WMI-grensesnitt for å endre BIOS-innstillinger via sysfs /sys/class/firmware-attributes/.
    • Utvidet støtte for enheter med USB4-grensesnitt.
    • Lagt 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. Lagt til patcher for å redusere forsinkelser før lyden begynner å spille på USB-enheter.

Kilde: opennet.ru

Legg til en kommentar