Linux 5.14 kernel udgivelse

Efter to måneders udvikling præsenterede Linus Torvalds udgivelsen af ​​Linux-kernen 5.14. Blandt de mest bemærkelsesværdige ændringer: nye quotactl_fd()- og memfd_secret()-systemkald, fjernelse af ide- og rådrivere, ny I/O-prioritetscontroller til cgroup, SCHED_CORE-opgaveplanlægningstilstand, infrastruktur til oprettelse af verificerede BPF-programindlæsere.

Den nye version indeholder 15883 rettelser fra 2002 udviklere, patchstørrelsen er 69 MB (ændringerne berørte 12580 filer, 861501 linjer kode blev tilføjet, 321654 linjer blev slettet). Omkring 47 % af alle ændringer introduceret i 5.14 er relateret til enhedsdrivere, cirka 14 % af ændringerne er relateret til opdatering af kode, der er specifik for hardwarearkitekturer, 13 % er relateret til netværksstakken, 3 % er relateret til filsystemer og 3 % er relateret til interne kerneundersystemer.

Vigtigste innovationer:

  • Diskundersystem, I/O og filsystemer
    • En ny I/O-prioriteringscontroller er blevet implementeret for cgroups, rq-qos, som kan styre behandlingsprioriteten af ​​anmodninger om at blokere enheder genereret af medlemmer af hver cgroup. Ny prioritetscontrollerunderstøttelse er blevet tilføjet til mq-deadline I/O-planlæggeren.
    • ext4-filsystemet implementerer en ny ioctl-kommando, EXT4_IOC_CHECKPOINT, som tvinger alle afventende transaktioner fra journalen og deres tilknyttede buffere til at blive tømt til disk, og også overskriver det område, der bruges af journalen på lager. Ændringen er udarbejdet som led i et initiativ, der skal forhindre informationslækage fra filsystemer.
    • Ydeevneoptimeringer er blevet foretaget til Btrfs: ved at eliminere unødvendig logning af udvidede attributter under fsync-udførelse, er ydeevnen af ​​intensive operationer med udvidede attributter steget med op til 17%. Når der udføres trimningsoperationer, der ikke påvirker omfanget, er fuld synkronisering desuden deaktiveret, hvilket reducerede driftstiden med 12 %. En indstilling er blevet tilføjet til sysfs for at begrænse I/O-båndbredden ved kontrol af FS. Tilføjet ioctl-opkald for at annullere ændring af størrelse og sletning af enhedshandlinger.
    • I XFS er implementeringen af ​​buffercachen blevet redesignet, som er skiftet til at allokere hukommelsessider i batch-tilstand. Forbedret cacheeffektivitet.
    • F2FS tilføjer en mulighed for at fungere i skrivebeskyttet tilstand og implementerer en komprimeret blokcache-tilstand (compress_cache) for at forbedre tilfældig læseydelse. Understøttelse er blevet implementeret til at komprimere filer, der er knyttet til hukommelsen ved hjælp af mmap()-operationen. For selektivt at deaktivere filkomprimering baseret på en maske, er en ny monteringsmulighed nocompress blevet foreslået.
    • Der er blevet arbejdet i exFAT-driveren for at forbedre kompatibiliteten med noget digitalkameralager.
    • Tilføjet quotactl_fd() systemkaldet, som giver dig mulighed for at administrere kvoter ikke gennem en speciel enhedsfil, men ved at specificere en filbeskrivelse, der er knyttet til det filsystem, som kvoten anvendes på.
    • De gamle drivere til blokenheder med IDE-grænsefladen er blevet fjernet fra kernen; de er længe blevet erstattet af libata-undersystemet.
    • "Rå"-driveren er blevet fjernet fra kernen, hvilket giver ubufferet adgang til at blokere enheder via /dev/raw-grænsefladen. Denne funktionalitet har længe været implementeret i applikationer, der bruger O_DIRECT-flaget.
  • Hukommelse og systemtjenester
    • Opgaveplanlæggeren implementerer en ny planlægningstilstand, SCHED_CORE, som giver dig mulighed for at kontrollere, hvilke processer der kan udføres sammen på den samme CPU-kerne. Hver proces kan tildeles en cookie-id, der definerer omfanget af tillid mellem processer (f.eks. tilhørende den samme bruger eller container). Når kodeudførelsen organiseres, kan planlæggeren sikre, at én CPU-kerne kun deles mellem processer, der er knyttet til den samme ejer, hvilket kan bruges til at blokere nogle Spectre-angreb ved at forhindre, at betroede og ikke-pålidelige opgaver kører på den samme SMT-tråd (Hyper Threading) .
    • For cgroup er der implementeret understøttelse af kill-operationen, som giver dig mulighed for at dræbe alle processer forbundet med gruppen på én gang (send SIGKILL) ved at skrive "1" til den virtuelle fil cgroup.kill.
    • Udvidede muligheder relateret til at reagere på detektering af splitlåse ("splitlåse"), der opstår ved adgang til ikke-justerede data i hukommelsen på grund af det faktum, at dataene krydser to CPU-cache-linjer, når der udføres en atominstruktion. En sådan blokering fører til et betydeligt fald i ydeevnen, så tidligere var det muligt med magt at afslutte den applikation, der forårsagede blokeringen. Den nye udgivelse tilføjer en kerne-kommandolinjeparameter "split_lock_detect=ratelimit:N", som giver dig mulighed for at definere en systemdækkende grænse for hastigheden af ​​låseoperationer pr. sekund, efter at have overskredet hvilken proces, der er blevet kilden til en split lock vil blive tvunget til at stoppe i 20 ms i stedet for at afslutte.
    • cgroup bandwidth controller CFS (CFS bandwidth controller), som bestemmer, hvor meget processortid der kan allokeres til hver cgroup, implementerer muligheden for at definere tidsbegrænsede grænser, hvilket giver mulighed for bedre regulering af latensfølsomme arbejdsbelastninger. For eksempel vil indstilling af cpu.cfs_quota_us til 50000 og cpu.cfs_period_us til 100000 tillade en gruppe processer at spilde 100 ms CPU-tid hver 50 ms.
    • Tilføjet indledende infrastruktur til oprettelse af BPF-programindlæsere, som yderligere vil tillade indlæsning af kun BPF-programmer, der er signeret med en pålidelig digital nøgle.
    • Tilføjet en ny futex-operation FUTEX_LOCK_PI2, som bruger en monoton timer til at beregne en timeout, der tager højde for den tid, systemet bruger i dvaletilstand.
    • Til RISC-V-arkitekturen er understøttelse af store hukommelsessider (Transparent Huge-Pages) og muligheden for at bruge KFENCE-mekanismen til at opdage fejl, når der arbejdes med hukommelse, implementeret.
    • Madvise()-systemkaldet, som giver et middel til at optimere en process hukommelsesstyring, har tilføjet MADV_POPULATE_READ- og MADV_POPULATE_WRITE-flag for at generere en "sidefejl" på alle hukommelsessider, der er kortlagt til læse- eller skriveoperationer, uden at udføre en egentlig læse- eller skrivehandling (prefault). Brugen af ​​flag kan være nyttig til at reducere forsinkelser i programmets udførelse, takket være den proaktive udførelse af "page fault"-handleren for alle ikke-allokerede sider på én gang, uden at vente på den faktiske adgang til dem.
    • Kunit-enhedstestsystemet har tilføjet understøttelse til at køre test i QEMU-miljøet.
    • Nye sporstoffer er blevet tilføjet: "osnoise" for at spore applikationsforsinkelser forårsaget af afbrydelseshåndtering og "timerlat" for at vise detaljerede oplysninger om forsinkelser, når man vågner fra et timersignal.
  • Virtualisering og sikkerhed
    • memfd_secret() systemkaldet er blevet tilføjet for at skabe et privat hukommelsesområde i et isoleret adresserum, kun synligt for ejerprocessen, ikke afspejlet i andre processer og ikke direkte tilgængeligt for kernen.
    • I seccomp-systemets opkaldsfiltreringssystem er det muligt, når blokeringsbehandlere flyttes ind i brugerrummet, at bruge en enkelt atomoperation til at oprette en filbeskrivelse for en isoleret opgave og returnere den, når et systemkald behandles. Den foreslåede operation løser problemet med at afbryde en handler i brugerrummet, når et signal ankommer.
    • Tilføjet en ny mekanisme til styring af ressourcegrænser i bruger-id-navneområdet, som binder individuelle rlimit-tællere til en bruger i "brugernavneområdet". Ændringen løser problemet med brugen af ​​fælles ressourcetællere, når én bruger kører processer i forskellige containere.
    • KVM-hypervisoren til ARM64-systemer har tilføjet muligheden for at bruge MTE-udvidelsen (MemTag, Memory Tagging Extension) i gæstesystemer, som giver dig mulighed for at binde tags til hver hukommelsesallokeringsoperation og organisere kontrol af den korrekte brug af pointere for at blokere udnyttelsen af sårbarheder forårsaget af adgang til allerede frigjorte hukommelsesblokke, overløb af buffer, adgang før initialisering og brug uden for den aktuelle kontekst.
    • Pointer Authentication leveret af ARM64 platformen kan nu konfigureres separat til kerne og brugerrum. Teknologien giver dig mulighed for at bruge specialiserede ARM64-instruktioner til at verificere returadresser ved hjælp af digitale signaturer, der er gemt i de ubrugte øvre bits af selve markøren.
    • Brugertilstand Linux har tilføjet understøttelse af brug af drivere til PCI-enheder med en virtuel PCI-bus, implementeret af PCI-over-virtio-driveren.
    • For x86-systemer, tilføjet understøttelse af virtio-iommu paravirtualiseret enhed, hvilket gør det muligt for IOMMU-anmodninger såsom ATTACH, DETACH, MAP og UNMAP at blive sendt over virtio-transporten uden at emulere hukommelsessidetabeller.
    • For Intel CPU'er, fra Skylake-familien til Coffee Lake, er brugen af ​​Intel TSX (Transactional Synchronization Extensions), som giver værktøjer til at forbedre ydeevnen af ​​multi-threaded-applikationer ved dynamisk at eliminere unødvendige synkroniseringsoperationer, deaktiveret som standard. Udvidelser er deaktiveret på grund af muligheden for Zombieload-angreb, der manipulerer informationslækage via tredjepartskanaler, der opstår under driften af ​​TAA-mekanismen (TSX Asynchronous Abort).
  • Netværks undersystem
    • Integration i kernen af ​​MPTCP (MultiPath TCP), en udvidelse af TCP-protokollen til at organisere driften af ​​en TCP-forbindelse med levering af pakker samtidigt langs flere ruter gennem forskellige netværksgrænseflader forbundet med forskellige IP-adresser. Den nye udgivelse tilføjer en mekanisme til at indstille dine egne trafik-hash-politikker for IPv4 og IPv6 (multipath-hash-politik), hvilket gør det muligt fra brugerens plads at bestemme, hvilke felter i pakker, inklusive indkapslede, der vil blive brugt ved beregning af den hash, der bestemmer valg af vej til pakken.
    • Understøttelse af SOCK_SEQPACKET sockets (ordnet og pålidelig transmission af datagrammer) er blevet tilføjet til virtio virtuelle transport.
    • Mulighederne for SO_REUSEPORT socket-mekanismen er blevet udvidet, hvilket gør det muligt for flere lyttesockets at forbinde til én port på én gang for at modtage forbindelser med fordelingen af ​​indgående anmodninger samtidigt på tværs af alle sockets forbundet via SO_REUSEPORT, hvilket forenkler oprettelsen af ​​multi-threaded serverapplikationer . Den nye version tilføjer værktøjer til at overføre kontrol til en anden socket i tilfælde af fejl ved behandling af en anmodning fra den oprindeligt valgte socket (løser problemet med tab af individuelle forbindelser ved genstart af tjenester).
  • Оборудование
    • Amdgpu-driveren giver understøttelse af den nye AMD Radeon RX 6000-serie af GPU'er, kodenavnet "Beige Goby" (Navi 24) og "Yellow Carp", samt forbedret understøttelse af Aldebaran GPU (gfx90a) og Van Gogh APU. Tilføjet muligheden for at arbejde med flere eDP-paneler samtidigt. For APU Renoir er understøttelse af arbejde med krypterede buffere i videohukommelsen (TMZ, Trusted Memory Zone) blevet implementeret. Tilføjet understøttelse af hot-fluk grafikkort. For Radeon RX 6000 (Navi 2x) GPU'er og ældre AMD GPU'er er ASPM (Active State Power Management) understøttelse aktiveret som standard, hvilket tidligere kun var aktiveret for Navi 1x, Vega og Polaris GPU'er.
    • For AMD-chips er der tilføjet understøttelse af delt virtuel hukommelse (SVM, delt virtuel hukommelse) baseret på HMM-undersystemet (Heterogen hukommelsesstyring), som tillader brugen af ​​enheder med deres egne hukommelsesstyringsenheder (MMU, hukommelsesstyringsenhed), som kan få adgang til hovedhukommelsen. Især ved hjælp af HMM kan du organisere et delt adresserum mellem GPU'en og CPU'en, hvor GPU'en kan få adgang til processens hovedhukommelse.
    • Tilføjet indledende understøttelse af AMD Smart Shift-teknologi, som dynamisk ændrer CPU- og GPU-strømindstillinger på bærbare computere med et AMD-chipsæt og grafikkort for at øge ydeevnen til spil, videoredigering og 3D-gengivelse.
    • i915-driveren til Intel-grafikkort inkluderer understøttelse af Intel Alderlake P-chips.
    • Tilføjet drm/hyperv-driver til virtuel Hyper-V-grafikadapter.
    • Tilføjet understøttelse af Raspberry Pi 400 alt-i-en-computeren.
    • Tilføjet dell-wmi-privacy-driver for at understøtte hardwarekamera- og mikrofonkontakterne, der er inkluderet i Dell bærbare computere.
    • For bærbare Lenovo-computere er der tilføjet et WMI-interface til at ændre BIOS-indstillinger via sysfs /sys/class/firmware-attributes/.
    • Udvidet understøttelse af enheder med USB4-interface.
    • Tilføjet understøttelse af AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 og Texas Instruments TAS2505 lydkort og codecs. Forbedret lydunderstøttelse på bærbare HP- og ASUS-computere. Tilføjede patches for at reducere forsinkelser, før lyden begynder at spille på USB-enheder.

Kilde: opennet.ru

Tilføj en kommentar