Efter to måneders udvikling præsenterede Linus Torvalds udgivelsen af Linux-kernen 5.14. Blandt de mest bemærkelsesværdige ændringer er: nye systemopkald quotactl_fd() og memfd_secret(), fjernelse af ide- og raw-drivere, en ny prioriteringscontroller for input/output til cgroup, opgaveplanlægningsmetoden SCHED_CORE, og infrastrukturen til at skabe bootloadere til validerede BPF-programmer.
Den nye version har modtaget 15.883 rettelser fra 2002 udviklere, patch-størrelsen er 69 MB (ændringerne berørte 12.580 filer, 861.501 linjer kode blev tilføjet, og 321.654 linjer blev fjernet). Omkring 47% af alle ændringerne i 5.14 er relateret til enhedsdrivere, omtrent 14% vedrører opdatering af arkitekturspecifik kode, 13% er relateret til netværksstakken, 3% til filsystemer, og 3% til interne systemer i kernen.
Hovednyhederne:
- DiskSubsystem, input/output og filsystemer
- For cgroup er der blevet implementeret en ny input/output-prioriteringscontroller — rq-qos, som kan styre prioriteten af behandlingen af forespørgsler til blok-enheder, genereret af medlemmerne af hver cgroup. Understøttelse af den nye prioriteringscontroller er blevet tilføjet til input/output-planlæggeren mq-deadline.
- I filsystemet ext4 er der implementeret en ny ioctl-kommando EXT4_IOC_CHECKPOINT, som tvinger udskrivning af alle ventende transaktioner fra loggen og de tilknyttede buffere til disken, samt overskriver det område, der anvendes af loggen i lageret. Ændringen er forberedt som led i initiativet for at forhindre datalækager fra filsystemer.
- I Btrfs er der blevet gennemført optimeringer af ydeevnen: ved at udelade unødvendig logføring af udvidede attributter under fsync-processen er ydeevnen for intensive operationer med udvidede attributter steget med op til 17%. Derudover er udførelsen af fuld synkronisering ved truncationsoperationer, der ikke påvirker extens, blevet deaktiveret, hvilket har reduceret udførelsestiden for operationen med 12%. Der er tilføjet en indstilling i sysfs til at begrænse input/output-båndbredde ved kontrol af FS. ioctl-opkald til annullering af ændringer i størrelse og sletning af enheder er blevet tilføjet.
- I XFS er implementeringen af buffer-cache blevet redesignet, hvilket har medført, at den nu tildeler hukommelsessider i batch-tilstand. Effektiviteten af cachen er blevet forbedret.
- I F2FS er der tilføjet en mulighed for at arbejde i kun læsning-tilstand, og der er implementeret en caching-tilstand for komprimerede blokke (compress_cache) for at forbedre ydeevnen ved tilfældige læseoperationer. Der er tilføjet support for komprimering af filer, der er reflekteret i hukommelsen ved hjælp af mmap()-operationen. En ny monteringsmulighed nocompress er blevet foreslået til selektivt at deaktivere filkomprimering baseret på maske.
- I exFAT-driveren er der gjort forbedringer for kompatibilitet med lagringsenheder fra visse digitale kameraer.
- Der er tilføjet et systemopkald quotactl_fd(), som gør det muligt at administrere kvoter uden at bruge specialenhedsfilen, men gennem angivelse af en filbeskrivelse, der er knyttet til filsystemet, som kvoten anvendes på.
- Gamle drivere til blokenheder med IDE-interface er blevet fjernet fra kernen, idet de er blevet erstattet af libata-subsystemet, som har været standard i lang tid.
- Driveren "raw", der giver ubufferet adgang til blokenheder via interfacet /dev/raw, er fjernet fra kernen. Den nævnte funktionalitet er længe blevet implementeret i applikationer ved hjælp af flaget O_DIRECT.
- Hukommelse og systemtjenester
- I schedulerens design er der implementeret en ny planlægningsmetode SCHED_CORE, der gør det muligt at styre, hvilke processer der kan køre sammen på én CPU-kerne. Hver proces kan tildeles en cookie-identifikator, der definerer tillidsområdet mellem processerne (f.eks. tilhørsforhold til en bruger eller container). Når koden udføres, kan schedulerens design sikre, at én CPU-kerne kun deles mellem processer relateret til én ejer, hvilket kan bruges til at blokere visse Spectre-angreb ved at forhindre, at tillidsfulde og ikke-tillidsfulde opgaver kører i samme SMT-tråd (hyper-threading).
- For cgroups er der implementeret support for kill-operationen, der muliggør, at alle processer knyttet til gruppen straks kan afsluttes (send SIGKILL) ved at skrive "1" i den virtuelle fil cgroup.kill.
- Mulighederne for reaktion på detektion af split lock, som opstår ved adgang til ikke-justerede data i hukommelsen, er blevet udvidet, idet data krydser to cache-linjer i CPU'en under udførelsen af atomære instruktioner. Sådanne låsninger fører til betydelige præstationsfald, så muligheden for tvangsafslutning af den applikation, der forårsagede låsningen, blev tidligere givet. I den nye version er der tilføjet en kernel-command line parameter 'split_lock_detect=ratelimit:N', som gør det muligt at bestemme den generelle systemgrænse for intensiteten af låsningsoperationer pr. sekund, og hvis denne grænse overskrides, vil enhver proces, der er årsag til en split lock, blive tvangsstoppert i 20 ms i stedet for at blive afsluttet.
- I CFS-bandwidth controller'en, der bestemmer hvor meget CPU-tid der kan tildeles hver cgroup, er der muliggjort indstilling af grænser, der er begrænset af en specifik varighed, hvilket bedre regulerer belastninger, der er følsomme over for forsinkelser. For eksempel, hvis cpu.cfs_quota_us sættes til 50000 og cpu.cfs_period_us til 100000, vil en gruppe processer kunne bruge 50 ms CPU-tid hver 100 ms.
- Den indledende infrastruktur til oprettelse af BPF-programlæssere er blevet tilføjet, hvilket i fremtiden vil muliggøre, at kun BPF-programmer signeret med en betroet digital nøgle kan indlæses.
- En ny futex-operation FUTEX_LOCK_PI2 er blevet tilføjet, som anvender en monoton timer til at beregne timeout, der tager højde for den tid systemet har været i hviletilstand.
- Der er implementeret understøttelse af store hukommelsessider (Transparent Huge-Pages) for RISC-V-arkitekturen samt muligheden for at anvende KFENCE-mekanismen til at identificere fejl i hukommelsesoperationer.
- I systemopkaldet madvise() er der tilføjet flagene MADV_POPULATE_READ og MADV_POPULATE_WRITE for at generere "page fault" på alle hukommelsessider, der er reflekteret til læse- eller skriveoperationer, uden at der udføres faktisk læsning eller skrivning (prefault). Anvendelsen af flagene kan være nyttig til at reducere forsinkelser under programudførelse ved proaktivt at udføre "page fault"-behandleren for alle ikke-allokerede sider uden at vente på faktisk adgang til dem.
- I unit-testsystemet kunit er der tilføjet støtte til at køre test i QEMU-miljøet.
- Nye trace-programmer er tilføjet: "osnoise" til at spore forsinkelser i applikationer forårsaget af afbrydelsesbehandling, og "timerlat" til at vise detaljerede oplysninger om forsinkelser under vækningen fra timer-signaler.
- Virtualisering og sikkerhed
- Der er tilføjet et systemopkald memfd_secret(), der gør det muligt at oprette et privat hukommelsesområde i et isoleret adressrum, som kun kan ses af ejerprocessen, ikke reflekteres i andre processer og ikke er direkte tilgængeligt for kernen.
- I filtreringssystemet for systemopkald seccomp, når låsebehandlere bringes i brugerrum, er der givet mulighed for at bruge en atomær operation til at oprette en filbeskrivelse til den isolerede opgave og returnere den ved behandlingen af systemopkaldet. Den foreslåede operation løser problemet med afbrydelse af behandlere i brugerrum ved modtagelse af signal.
- Der er tilføjet en ny mekanisme til at styre ressourcebegrænsning i brugernavnrum, som knytter individuelle rlimit-tællere til brugeren i "user namespace". Ændringen løser problemet med anvendelse af fælles ressource tællere, når en bruger kører processer i forskellige containere.
- I hypervisoren KVM For ARM64-systemer er der tilføjet mulighed for at bruge MTE (MemTag, Memory Tagging Extension) i gæstesystemer, som gør det muligt at knytte tags til hver hukommelsesallokeringsoperation og organisere kontrol af korrekt brug af pegepunkter for at blokere udnyttelse af sårbarheder forårsaget af adgang til allerede frigivne hukommelsesblokke, buffer-overløb, adgang før initialisering og anvendelse uden for den nuværende kontekst.
- ARM64-platformens pointerauthentication-midler kan nu konfigureres separat for kerne- og brugerområde. Teknologien gør det muligt at bruge specialiserede ARM64-instruktioner til at kontrollere returadresser ved hjælp af digitale signaturer, der gemmes i de ubrugte øverste bits af selve pointeren.
- User-mode Linux har fået tilføjet support til brug af drivere til PCI-enheder med en virtuel PCI-bus, implementeret af PCI-over-virtio-driveren.
- For x86-systemer er der tilføjet support til det para-virtualiserede virtio-iommu-enhed, som muliggør sending af IOMMU-anmodninger som ATTACH, DETACH, MAP og UNMAP over virtio-transport uden emulering af hukommelsesside-tabeller.
- For Intel CPU'er, fra Skylake-familien til Coffee Lake, er brugen af Intel TSX (Transactional Synchronization Extensions) som standard deaktiveret. Disse udvidelser giver muligheder for at forbedre ydeevnen af multitrådeede applikationer ved at dynamisk undtage overflødige synkroniseringsoperationer. Udvidelserne er deaktiveret på grund af muligheden for Zombieload-angreb, som manipulerer informationslækager gennem sidekanaler, der opstår ved brugen af den asynkrone afbrydelsesmekanisme (TAA, TSX Asynchronous Abort).
- Netværkssubsystem
- Integrationen i MPTCP (MultiPath TCP) kernen er fortsat, en udvidelse af TCP-protokollen, der muliggør drift af TCP-forbindelsen med pakkelevering samtidig over flere ruter gennem forskellige netværksinterface, der er knyttet til forskellige IP-adresser. Den nye udgave inkluderer en mekanisme til at definere egne trafikhash-politikker for IPv4 og IPv6 (multipath hash policy), som gør det muligt at bestemme fra brugerområdet, hvilke felter i pakker, herunder indkapslede, der vil blive brugt ved beregningen af hashen, som bestemmer ruten for pakken.
- Der er tilføjet support til SOCK_SEQPACKET-sokker (ordnet og pålidelig overførsel af datagrammer) i den virtuelle virtio-transport.
- Funktionerne i SO_REUSEPORT socket-mekanismen er blevet udvidet, hvilket gør det muligt for flere lyttersockets at forbindes til en enkelt port for at modtage forbindelser med samtidig fordeling af indkommende forespørgsler mellem alle tilsluttede sockets via SO_REUSEPORT. Dette letter oprettelsen af multitrådede serverapplikationer. Den nye version inkluderer værktøjer til at overføre kontrollen til en anden socket i tilfælde af en fejl i behandlingen af en forespørgsel fra den oprindeligt valgte socket (løser problemet med tab af enkelte forbindelser ved genstart af tjenester).
- Udstyr
- I amdgpu-driveren er understøttelsen af nye serier af GPU'er fra AMD Radeon RX 6000, udviklet under kode-navnene "Beige Goby" (Navi 24) og "Yellow Carp", blevet implementeret. Derudover er understøttelsen af GPU Aldebaran (gfx90a) og APU Van Gogh forbedret. Muligheden for samtidig brug af flere eDP-paneler er tilføjet. For APU Renoir er der tilføjet support til arbejde med krypterede buffere i videohukommelsen (TMZ, Trusted Memory Zone). Understøttelse af varm afbrydelse af grafikkort (hot-unplug) er også blevet tilføjet. For GPU Radeon RX 6000 (Navi 2x) og ældre AMD GPU'er er understøttelsen af energibesparende mekanisme ASPM (Active State Power Management) nu aktiveret som standard, hvilket tidligere kun var aktivt for GPU Navi 1x, Vega og Polaris.
- Der er tilføjet understøttelse af delt virtuel hukommelse (SVM, shared virtual memory) til AMD-chips baseret på HMM (Heterogeneous memory management) subsystemet, som muliggør brugen af enheder med egne hukommelsesstyringsblokke (MMU, memory management unit), der kan få adgang til hovedhukommelsen. HMM kan også organisere et delt adresserum mellem GPU og CPU, hvor GPU kan få adgang til hovedhukommelsen for processen.
- Indledende understøttelse af AMD Smart Shift-teknologi er blevet tilføjet, som dynamisk ændrer energiforbrug parametre for CPU og GPU på laptops med AMD chipset og grafikkort for at fremme ydeevnen ved spil, videoredigering og 3D-rendering.
- I i915-driveren til Intel grafikkort er understøttelsen af Intel Alderlake P-chips blevet tilføjet.
- Der er tilføjet en drmdrivere til den virtuelle grafiske adapter Hyper-V.
- Understøttelsen af Raspberry Pi 400 all-in-one-computeren er blevet tilføjet.
- Der er tilføjet einen dell-wmi-privacy driver for at understøtte hardwareafbrydere til kamera og mikrofon i Dell-laptops.
- For Lenovo laptops er der tilføjet et WMI-grænseflade til ændring af BIOS-indstillinger via sysfs /sys/class/firmware-attributes/.
- Udvidet support til enheder med USB4-interface.
- Tilføjet support for 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 lydsupport på HP- og ASUS-bærbare computere. Tilføjet patches for at reducere latens før lydafspilning på enheder med USB-interface.
Kilde: opennet.ru
