Linux -kerne 5.14

Linux -kerne 5.14

Efter to måneders udvikling, Linus Torvalds indsendt kerneudgivelse Linux 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.

The main innovationer:

  • diskundersystem, input/output og filsystemer:
    • for cgroup implementeret ny I/O-prioritetscontroller - rq-qos, som kan styre behandlingsprioriteten for anmodninger om at blokere enheder, der genereres af medlemmer af hver cgroup. Ny prioritetscontrollerunderstøttelse er blevet tilføjet til mq-deadline I/O-planlæggeren;
    • på ext4 filsystem implementeret ny ioctl-kommando EXT4_IOC_CHECKPOINT, som tvinger alle afventende transaktioner fra loggen og tilhørende buffere til disk, og også overskriver det område, der bruges af log-in-lageret. Ændringen blev udarbejdet som led i et initiativ for at forhindre informationslækage fra filsystemer;
    • i Btrfs lavet Ydeevneoptimeringer: Ved at eliminere unødvendig logning af udvidede attributter under fsync-udførelse, steg ydeevnen af ​​intensive operationer med udvidede attributter 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 omarbejdet implementering af en buffercache, som overføres til allokering af hukommelsessider i batch-tilstand. Forbedret cacheeffektivitet;
    • F2FS tilføjede en mulighed for at arbejde i skrivebeskyttet tilstand og implementerede en komprimeret blokcachetilstand (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 med maske, er en ny monteringsmulighed nocompress blevet foreslået;
    • Der er blevet arbejdet i exFAT-driveren for at forbedre kompatibiliteten med lagringen af ​​nogle digitale kameraer;
    • tilføjet systemkald quotactl_fd(), som giver dig mulighed for at administrere kvoter ikke gennem en speciel enhedsfil, men ved at angive en filbeskrivelse, der er knyttet til det filsystem, som kvoten anvendes på;
    • Gamle drivere til blokenheder med IDE-grænsefladen er blevet fjernet fra kernen; de er længe blevet erstattet af libata-undersystemet. Understøttelse af gamle enheder er blevet bibeholdt fuldt ud, ændringerne vedrører kun muligheden for at bruge gamle drivere, hvor drevene blev kaldt /dev/hd*, og ikke /dev/sd*;
    • "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:
    • en ny planlægningstilstand er blevet implementeret i opgaveplanlæggeren SCHED_CORE, som giver dig mulighed for at kontrollere, hvilke processer der kan køre 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 forbundet med den samme ejer, hvilket kan bruges til at blokere nogle Spectre-angreb ved at forhindre troværdige og utroværdige opgaver i at køre på den samme SMT (Hyper Threading)-tråd ;
    • for cgroup-mekanismen 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 kapaciteter relateret til at reagere på detektering af split locks ("split locks"), der opstår ved adgang til ikke-justerede data i hukommelsen på grund af det faktum, at når en atominstruktion udføres, krydser dataene to CPU-cache-linjer. 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 kernekommandolinjeparameteren "split_lock_detect=ratelimit:N", som giver dig mulighed for at definere en systemdækkende grænse for hastigheden af ​​låseoperationer pr. sekund, hvorefter enhver proces, der blev kilden til en delt lås, vil tvinges 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, har evnen til at definere grænser begrænset af en given handlingsvarighed, hvilket tillader bedre regulering af latensfølsomme belastninger. 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 at skabe BPF-programindlæsere, som yderligere vil tillade download 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 timeout, som tager højde for den tid, systemet bruger i dvaletilstand;
    • til RISC-V-arkitekturen, understøttelse af store hukommelsessider (Transparent Huge-Pages) og muligheden for at bruge KHEGN at identificere fejl, når du arbejder med hukommelse;
    • ind i madvise() systemkaldet, som giver et middel til at optimere proceshukommelsesstyring, 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æsning eller skrivning (forudsætning). 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;
    • i et enhedstestsystem kunit tilføjet støtte til at køre test i QEMU-miljøet;
    • nye sporstoffer tilføjet: "osstøj" 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:
    • tilføjet systemopkald memfd_secret(), som giver dig mulighed for at oprette 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 låsehandlere flyttes ind i brugerrummet, at bruge én 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 afbrydelse af handleren i brugerrummet, når et signal ankommer;
    • tilføjet ny mekanisme at administrere ressourcebegrænsning 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 buffere, 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;
    • i brugertilstand Linux tilføjet understøttelse af brugen af ​​drivere til PCI-enheder med en virtuel PCI-bus, implementeret af PCI-over-virtio-driveren;
    • til x86-systemer, tilføjet understøttelse af virtio-iommu paravirtualiseret enhed, som giver dig mulighed for at sende IOMMU-anmodninger, såsom ATTACH, DETACH, MAP og UNMAP, 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 angreb Zombieloadmanipulering af lækage af information gennem tredjepartskanaler, der opstår under driften af ​​mekanismen til asynkron afbrydelse af operationer (TAA, TSX Asynchronous Abort);
  • netværksundersystem:
    • fortsat 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. I det nye nummer tilføjet en mekanisme til at indstille dine egne trafik-hash-politikker for IPv4 og IPv6 (multipath hash policy), hvilket gør det muligt fra brugerrummet at bestemme, hvilke felter i pakker, inklusive indkapslede, der vil blive brugt ved beregning af den hash, der bestemmer valget af stien for pakken;
    • socket-understøttelse er blevet tilføjet til den virtuelle transportvirtio SOCK_SEQPACKET (ordnet og pålidelig transmission af datagrammer);
    • 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 . I den nye version tilføjet midler 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);
  • udstyr:
    • i amdgpu-driveren implementeret 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 understøttelse af strømsparemekanismen ASPM (Active State Power Management) aktiveret som standard, som 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 brug af enheder med deres egne hukommelsesstyringsenheder (MMU, hukommelsesstyringsenhed), som kan få adgang til hovedhukommelsen. Herunder at bruge 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 teknologistøtte AMD Smart Shift, som dynamisk ændrer strømforbrugsparametrene for CPU'en og GPU'en på bærbare computere med et chipset og et AMD-grafikkort for at øge ydeevnen ved spil, videoredigering og 3D-gengivelse;
    • i i915-driveren til Intel-skærmkort inkluderet understøttelse af Intel Alderlake P-chips;
    • tilføjet drm/hyperv-driver til den virtuelle Hyper-V-grafikadapter;
    • tilføjet simpledrm-grafikdriver, der bruger EFI-GOP- eller VESA-rammebufferen leveret af UEFI-firmwaren eller BIOS til output. Hovedformålet med driveren er at give grafiske outputfunktioner under de indledende stadier af opstart, før en fuld DRM-driver kan bruges. Driveren kan også bruges som en midlertidig løsning til udstyr, der endnu ikke har indbyggede DRM-drivere;
    • tilføjet alt-i-en computersupport Raspberry Pi 400;
    • Tilføjet dell-wmi-privacy-driver for at understøtte kamera- og mikrofonhardware-switche, der er inkluderet i Dell bærbare computere;
    • til Lenovo bærbare computere tilføjet WMI-interface til ændring af BIOS-parametre via sysfs /sys/class/firmware-attributes/;
    • udvidet understøttelse af enheder med USB4-interface;
    • tilføjet understøttelse af lydkort og codecs AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 og Texas Instruments TAS2505. Forbedret lydunderstøttelse på bærbare HP- og ASUS-computere. Tilføjet patches for at reducere forsinkelser, før lyden begynder at afspille på enheder med et USB-interface.

Kilde – opennet.ru.

Kilde: linux.org.ru