Linux-kjerneutgivelse 5.1

Etter to måneder med utvikling Linus Torvalds innsendt kjerneutgivelse Linux 5.1. Blant de mest bemerkelsesverdige endringene: et nytt grensesnitt for asynkron I/O io_uring, muligheten til å bruke NVDIMM som RAM, støtte for delt virtuelt minne i Nouveau, støtte for skalerbar overvåking av svært store filsystemer via fanotify, muligheten til å konfigurere Zstd-komprimering nivåer i Btrfs, en ny cpuidle TEO-behandler, implementering av systemanrop for å løse 2038-problemet, muligheten til å starte opp fra enhetstilordningsenheter uten initramfs, SafeSetID LSM-modul, støtte for kombinerte live-patcher.

Den viktigste innovasjoner:

  • Diskundersystem, I/O og filsystemer
    • Implementert et nytt grensesnitt for asynkron I/O - io_uring, som er kjent for sin støtte for I/O-polling og muligheten til å jobbe med eller uten buffering. La oss huske at den tidligere foreslåtte asynkrone I/O-mekanismen "aio" ikke støttet bufret I/O, kun kunne fungere i O_DIRECT-modus (uten å bufre og omgå cachen), hadde problemer med låsing på grunn av venting på metadatatilgjengelighet, og viste store faste kostnader på grunn av kopiering av data i minnet.

      Innenfor API
      io_uring-utviklere prøvde å eliminere manglene ved det gamle aio-grensesnittet. Av produktivitet io_uring er veldig nær SPDK og er betydelig foran libaio når du arbeider med polling aktivert. Det er utarbeidet et bibliotek for bruk av io_uring i sluttapplikasjoner som kjører i brukerrom frigjøring, som gir et rammeverk på høyt nivå over kjernegrensesnittet;

    • I hendelsessporingsmekanismen i FS fanotify() la til støtte for sporing av superblokk- og strukturendringssituasjoner dirent (hendelser med å opprette, slette og flytte kataloger). De presenterte funksjonene hjelper til med å løse skalerbarhetsproblemene som oppstår når man oppretter rekursiv endringssporing i svært store filsystemer ved å bruke inotify-mekanismen (dirente endringer kunne tidligere bare spores gjennom inotify, men
      ytelse under forhold med rekursiv sporing av store nestede kataloger overlot mye å være ønsket). Nå kan slik overvåking effektivt gjøres gjennom fanotify;

    • På Btrfs-filsystemet la til muligheten til å tilpasse komprimeringsnivået for zstd-algoritmen, som kan betraktes som et optimalt kompromiss mellom den raske, men ineffektive lz4 og den langsomme, men gode komprimeringen xz. I analogi med hvordan det tidligere var mulig å sette komprimeringsnivået ved bruk av zlib, er støtte for "-o compress=zstd:level" monteringsalternativet lagt til for zstd. Under testing ga det minste første nivået datakomprimering med 2.658 ganger med en komprimeringshastighet på 438.47 MB/s, dekompresjonshastighet på 910.51 MB/s og minneforbruk på 780 MB, og maksimalt nivå 15 ga 3.126 ganger, men med en komprimering hastighet på 37.30 MB/s. utpakking 878.84 MB/s og minneforbruk 2547 MB;
    • La til muligheten til å starte opp fra et filsystem som ligger på enhetsmapperenheten, uten å bruke initramfs. Fra og med den nåværende kjerneutgivelsen, kan enhetstilordningsenheter brukes direkte under oppstartsprosessen, for eksempel som en partisjon med rotfilsystemet. Partisjonen konfigureres ved å bruke oppstartsparameteren "dm-mod.create". Device-mapper-moduler som er tillatt for lasting inkluderer: "krypt", "forsinkelse", "lineær", "øyeblikksbilde-opprinnelse" og "verity";
    • F2FS_NOCOW_FL-flagget er lagt til F2FS-filsystemet orientert mot Flash-stasjoner, som lar deg deaktivere kopi-på-skriv-modus for en gitt fil;
    • Filsystemet fjernet fra kjernen Exofs, som er en variant av ext2, tilpasset for arbeid med OSD (Object-based Storage Device) objektlagringer. Støtte for SCSI-protokollen for slike objektlagringsenheter er også fjernet;
  • Virtualisering og sikkerhet
    • Lagt til PR_SPEC_DISABLE_NOEXEC-alternativet til prctl() for å kontrollere spekulativ utførelse av instruksjoner for den valgte prosessen. Et nytt alternativ lar deg selektivt deaktivere spekulativ utførelse for prosesser som potensielt kan bli angrepet av et Spectre-angrep. Låsen varer til det første kallet til exec();
    • Implementert LSM-modul SafeSetID, som lar systemtjenester administrere brukere på en sikker måte uten å eskalere privilegier (CAP_SETUID) og uten å få root-privilegier. Privilegier tildeles ved å definere regler i securityfs basert på en hvit liste over gyldige bindinger (i formen "UID1:UID2");
    • Lagt til endringer på lavt nivå som kreves for stabelbasert lasting av sikkerhetsmoduler (LSM). Introduserte "lsm" kjerneoppstartsalternativet for å kontrollere hvilke moduler som lastes og i hvilken rekkefølge;
    • Støtte for filnavneområder er lagt til revisjonsundersystemet;
    • Utvidet mulighetene til GCC plugin structleak, som lar deg blokkere potensielle lekkasjer av minneinnhold Initialisering av eventuelle variabler som brukes i koden gjennom referansetilgang på stabelen er gitt;
  • Nettverksundersystem
    • For stikkontakter implementert nytt alternativ "SO_BINDTOIFINDEX" som ligner på
      "SO_BINDTODEVICE", men tar som argument indeksnummeret til nettverksgrensesnittet i stedet for grensesnittnavnet;

    • Mac80211-stakken har lagt til muligheten til å tilordne flere BSSID-er (MAC-adresser) til én enhet. Som en del av et prosjekt for å optimalisere WiFi-ytelsen, har mac80211-stakken lagt til lufttidsregnskap og muligheten til å fordele sendetid mellom flere stasjoner (når de opererer i tilgangspunktmodus, tildeler mindre sendetid til trege trådløse stasjoner, i stedet for å fordele tiden jevnt mellom alle stasjoner);
    • Lagt til mekanisme "devlink helse", som gir varsler når det oppstår problemer med nettverksgrensesnittet;
  • Minne- og systemtjenester
    • Implementert sikker signallevering som tillater PID-gjenbruk. For eksempel, når du ringer kill tidligere, kan det oppstå en situasjon der mål-PID-en umiddelbart etter sending av et signal kan frigjøres på grunn av prosessavslutning og okkuperes av en annen prosess, og signalet vil ende opp med å bli sendt til en annen prosess. For å eliminere slike situasjoner er det lagt til et nytt systemkall pidfd_send_signal, som bruker filbeskrivelser fra /proc/pid for å sikre stabil prosessbinding. Selv om PID-en gjenbrukes under behandling av systemanrop, vil ikke filbeskrivelsen endres og kan trygt brukes til å sende et signal til prosessen;
    • La til muligheten til å bruke permanente minneenheter (for eksempel vedvarende minne NVDIMM-er) som RAM. Til nå har kjernen støttet slike enheter som lagringsenheter, men nå kan de også brukes som ekstra RAM. Funksjonen er implementert som svar på ønskene til brukere som er villige til å tåle en ytelsesforsinkelse og ønsker å bruke den opprinnelige Linux-kjerneminneadministrasjons-APIen i stedet for å bruke eksisterende minneallokeringssystemer for brukerplass som kjører på toppen av mmap for dax fil;
    • Lagt til en ny CPU-tomgangshåndtering (cpuidle, bestemmer når CPUen kan settes inn i dype strømsparingsmoduser; jo dypere modus, desto større er besparelsene, men også lengre tid tar det å avslutte modusen) - TEO (Timer Events Oriented Governor) ). Til nå har to cpuidle-behandlere blitt foreslått - "meny" og "stige", med forskjellige heuristikk. "Meny"-behandleren har kjente problemer med å ta heuristiske beslutninger, for å eliminere som det ble besluttet å forberede en ny behandler. TEO er posisjonert som et alternativ til "meny"-behandleren, noe som gir høyere ytelse samtidig som det opprettholdes samme nivå av strømforbruk.
      Du kan aktivere den nye behandleren ved å bruke oppstartsparameteren “cpuidle.governor=teo”;

    • Som en del av arbeidet med å eliminere problemer i 2038, forårsaket av et overløp av 32-bits time_t-typen, inkluderer systemanrop som tilbyr 32-biters tidtellere for 64-bits arkitekturer. Som et resultat kan 64-bits time_t-strukturen nå brukes på alle arkitekturer. Lignende endringer er også implementert i nettverksdelsystemet for opsjoner tidsstempel nettverkskontakter;
    • Inn i hot patching-systemet for kjernen (live patching) la til "Atomic Replace"-funksjon for atomisk bruk av en rekke endringer på en enkelt funksjon. Denne funksjonen lar deg distribuere oppsummeringsoppdateringer som dekker flere endringer samtidig, i stedet for prosessen med trinnvis påføring av live-oppdateringer i en strengt definert rekkefølge, noe som er ganske vanskelig å vedlikeholde. Mens tidligere hver påfølgende endring måtte være basert på tilstanden til funksjonen etter den siste endringen, er det nå mulig å propagere flere endringer knyttet til én starttilstand på en gang (dvs. vedlikeholdere kan opprettholde en konsolidert oppdatering i forhold til basiskjernen i stedet for av en kjede av lapper som er avhengige av hverandre );
    • Kunngjort utdatert støtte for det kjørbare filformatet a.out og
      slettet kode for å generere kjernefiler i a.out-format, som er i en forlatt tilstand. A.out-formatet har ikke vært brukt på Linux-systemer på lenge, og generering av a.out-filer har lenge vært ikke støttet av moderne verktøy i standard Linux-konfigurasjoner. I tillegg kan lasteren for a.out-filer implementeres utelukkende i brukerområdet;

    • Muligheten til å identifisere og fjerne ubrukt kode er lagt til BPF-programverifiseringsmekanismen. Kjernen inkluderer også patcher med spinlock-støtte for BPF-undersystemet, og gir ekstra muligheter for å administrere parallell kjøring av BPF-programmer;
  • Оборудование
    • I Nouveau driver la til støtte for heterogen minneadministrasjon, slik at CPU og GPU får tilgang til vanlige synkroniserte minneområder. Det delte virtuelle minnesystemet (SVM, delt virtuelt minne) er implementert på grunnlag av HMM (Heterogen minnestyring) undersystemet, som tillater bruk av enheter med egne minnestyringsenheter (MMU, minnestyringsenhet), som har tilgang til hovedminne. Spesielt ved å bruke HMM kan du organisere et delt adresserom mellom GPU og CPU, der GPUen kan få tilgang til hovedminnet til prosessen. SVM-støtte er foreløpig bare aktivert for Pascal-familiens GPUer, selv om støtte er gitt for Volta og Turing GPUer også. Dessuten i Nouveau la til ny ioctl for å kontrollere migreringen av prosessminneområder til GPU-minne;
    • I Intel DRM-driver for GPU Skylake og senere (gen9+) inkludert Som standard eliminerer fastboot-modus unødvendige modusendringer under oppstart. La til новые enhetsidentifikatorer basert på Coffelake og Ice Lake mikroarkitekturer. For Coffelake chips la til GVT-støtte (GPU-virtualisering). For virtuelle GPUer implementert VFIO EDID-støtte. For LCD-paneler MIPI/DSI la til støtte for ACPI/PMIC-elementer. Implementert nye TV-moduser 1080p30/50/60 TV;
    • Lagt til støtte for Vega10/20 BACO GPU til amdgpu-driveren. Implementert Vega 10/20 strømstyring og Vega 10 kjølerkontrolltabeller. Lagt til nye PCI-enhetsidentifikatorer for Picasso GPUer. La til grensesnitt for å administrere planlagte avhengigheter for å unngå vranglåser;
    • La til DRM/KMS-driver for skjermakseleratorer ARM Komeda (Mali D71);
    • Lagt til støtte for Toppoly TPG110, Sitronix ST7701, PDA 91-00156-A0, LeMaker BL035-RGB-002 3.5 og Kingdisplay kd097d04 skjermpaneler;
    • Lagt til støtte for Rockchip RK3328, Cirrus Logic CS4341 og CS35L36, MediaTek MT6358, Qualcomm WCD9335 og Ingenic JZ4725B lydkodeker, samt Mediatek MT8183 lydplattform;
    • Lagt til støtte for NAND-kontrollere Flash STMicroelectronics FMC2, Amlogic Meson;
    • Lagt til akseleratorstøtte for Habana AI-maskinvaresystemer;
    • Lagt til støtte for NXP ENETC gigabit Ethernet-kontrollere og MediaTek MT7603E (PCIe) og MT76x8 trådløse grensesnitt.

Samtidig la Latin American Free Software Foundation dannet
вариант helt gratis kjerne 5.1 - Linux-fri 5.1-gnu, 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 mt7603- og goya-driverne. Oppdatert blob-rensekode i drivere og undersystemer wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifiex, btmrvl, btmtk og touchscreen_dmi. Blob-rensing i lantiq xrx200-fastvarelasteren har blitt stoppet på grunn av at den er fjernet fra kjernen.

Kilde: opennet.ru

Legg til en kommentar