Udgivelse af Linux-kernen 5.9

Efter to måneders udvikling præsenterede Linus Torvalds den kerneudgivelse Linux 5.9. Bland de mest markante ændringer: begrænsning af import af symboler fra proprietære moduler til GPL-moduler, acceleration af kontekstskift ved hjælp af processorinstruktionen FSGSBASE, støtte til komprimering af kernelbilleder ved hjælp af Zstd, omarbejdning af prioriteringen af tråde i kernen, støtte til PRP-protokollen (Parallel Redundancy Protocol), planlægning baseret på båndbredde i deadline-planlæggeren, præventiv komprimering af hukommelsessider, capability-flag CAP_CHECKPOINT_RESTOR, systemkald close_range(), forbedring af ydelsen i dm-crypt, fjernelse af kode til 32-bit gæstesystemer i Xen PV, en ny hukommelsesstyringsmekanisme kaldet slab, rescue-option i Btrfs, støtte til inline-kryptering i ext4 og F2FS.

Den nye version inkluderer 16074 rettelser fra 2011 udviklere,
patch-størrelsen er 62 MB (ændringerne påvirkede 14548 filer, der blev tilføjet 782155 linjer kode, 314792 linjer blev fjernet). Omkring 45% af alt, der er præsenteret i 5.9
er relateret til enhedsdrivere, cirka 15% ændringer har
relation til opdatering af kode, som er specifik for hardwarearkitekturer, 13%
vedrører netværksstakken, 3% vedrører filsystemer og 3% vedrører interne
kernesubsystemer.

Vigtige nyheder:

  • Hukommelse og systemtjenester
    • Forstærket beskyttelse mod brug af GPL-lag til at binde proprietære drivere med kernekomponenter, der kun eksporteres for moduler under GPL-licensen. Flaget TAINT_PROPRIETARY_MODULE arves nu af alle moduler, der importerer symboler fra moduler med dette flag. Hvis et GPL-modul forsøger at importere symboler fra et ikke-GPL-modul, vil dette GPL-modul arve mærket TAINT_PROPRIETARY_MODULE og ikke kunne tilgå kernekomponenter, der kun er tilgængelige for GPL-moduler, selvom modulet tidligere har importeret symboler fra kategorien 'gplonly'. Den omvendte blokering (kun eksport af EXPORT_SYMBOL_GPL i moduler, der har importeret EXPORT_SYMBOL_GPL), som kunne have forstyrret funktionaliteten af proprietære drivere, er ikke implementeret (kun det proprietære modulflag arves, men ikke GPL-binding).
    • Tilføjet støtte til mekanismen kcompactd for præventiv komprimering af hukommelsessider i baggrunden, hvilket muliggør en stigning i antallet af store hukommelsessider tilgængelige for kernen. Ifølge en foreløbig vurdering tillader baggrundspakning med minimale overheadomkostninger at reducere forsinkelserne ved allokering af store hukommelsessider (huge-page) med 70-80 gange sammenlignet med den tidligere anvendte pakningsmekanisme, der blev aktiveret efter behov (on-demand). For at definere grænserne for ekstern fragmentering, som kcompactd vil sikre, er sysctl vm.compaction_proactiveness blevet tilføjet.
    • Tilføjet understøttelse af komprimering af kernelbillede ved hjælp af algoritmen Zstandard (zstd).
    • For x86-systemer er der implementeret støtte til processorens instruktion FSGSBASE, der muliggør læsning og ændring af indholdet af FS/GS registre fra brugerplads. I kernen bruges FSGSBASE til at fremskynde kontekstskiftoperationer ved at undgå unødvendige MSR skriveoperationer for GSBASE, og i brugerplads muliggør det at undgå unødvendige systemopkald for at ændre FS/GS.
    • Tilføjet parameteren 'allow_writes', som tillader at forhindre ændringer af CPU MSR registre fra brugerplads og begrænse adgangen til indholdet af disse registre ved læseoperationer, da ændring af MSR kan føre til problemer. Som standard er skrivning ikke forbudt, men ændringer af MSR afspejles i loggen, men i fremtiden planlægges det at ændre standardadgang til kun at være læseadgang.
    • I grænsefladen for asynkron input/output io_uring der er tilføjet fuld støtte til asynkrone bufferlæsninger, der ikke kræver aktivering af kerne-tråde. Støtte til skrivning forventes i næste udgave.
    • I deadline input/output scheduler er implementeret planlægning med hensyntagen til båndbredde, som gør det muligt for tage korrekte beslutninger på asymmetrisk hardware, såsom ARM-baserede systemer, DynamIQ og big.LITTLE, der kombinerer kraftige og mindre effektive energibesparende CPU-kerner i en enkelt chip. Især tillader den nye tilstand at undgå uoverensstemmelser i planlægning, når en langsom CPU-kerne ikke har de nødvendige ressourcer til at udføre opgaven til eftertid.
    • Energimodellen i kernen (Energy Model framework) nu beskriver dækker ikke kun CPU'ens energiforbrug, men også perifere enheder.
    • systemopkaldet close_range() er implementeret, hvilket gør det muligt for processen at lukke et helt interval af åbne filbeskrivere på én gang.
    • Fra implementeringen af tekstkonsollen og fbcon-driveren kode er fjernet, der giver mulighed for programmatisk tekstscrolling bagud (CONFIG_VGACON_SOFT_SCROLLBACK) mere end mængden af videominne i VGA-teksttilstand.
    • Omarbejdet algoritme til prioritering af tråde inden for kernen. Den nye variant sikrer bedre konsistens i alle dele af kernen ved tildeling af prioriteter til realtidsopgaver.
    • Tilføjet sysctl sched_uclamp_util_min_rt_default til styring af parametre for tvang af CPU-frekvenser for realtidsopgaver (for eksempel kan man dynamisk ændre adfærden ved udførelse af realtidsopgaver for at spare energi efter at have skiftet til batteristrøm eller på mobile systemer).
    • Der er gjort forberedelser til implementering af støtte til teknologien Transparent Huge Pages i sidcached.
    • I fanotify-mekanismen er der implementeret nye flag FAN_REPORT_NAME og FAN_REPORT_DIR_FID til at videregive oplysninger om det overordnede navn og den unikke identifikator FID ved indtræden af begivenheder for oprettelse, sletning eller flytning af katalogelementer og ikke katalogrelaterede objekter.
    • For cgroups implementeret er der en ny slab-hukommelseskontroller (slab memory controller), som bemærkes for at flytte regnskabet for slab fra side-niveau til kerneniveau, hvilket giver mulighed for fælles brug af slab-sider i forskellige cgroups, i stedet for at tildele separate slab-cacher til hver cgroup. Den foreslåede tilgang muliggør en mere effektiv brug af slab, reducerer størrelsen af den beskrevne slab-hukommelse med 30-45%, mindsker det samlede hukommelsesforbrug i kernen og reducerer hukommelsesfragmentering.
    • I lydsystemet ALSA og USB-stakken, er der, i overensstemmelse med de nyligt vedtagne anbefalingerne for brug af inkluderende terminologi i Linux-kernen, blevet renset for politisk ukorrekte termer. Koden er blevet befriet for brugen af ordene «slave», «master», «blacklist» og «whitelist».
  • Virtualisering og sikkerhed
    • Ved kompilering af kernen med Clang-kompilatoren er der kommet muligheden for at konfigurere (CONFIG_INIT_STACK_ALL_ZERO) automatisk initialisering med nul for alle variabler, der opbevares på stakken (ved kompilering angives “-ftrivial-auto-var-init=zero”).
    • I seccomp-subsystemet, når man bruger proceskontroltilstand i brugerområdet, tilføjet mulighed substitutioner i den overvågede proces for filbeskrivelser for en fuld emulering af systemopkald, der fører til oprettelse af filbeskrivelser. Denne funktionalitet er efterspurgt i isolerede container systemer og implementeringen af sandbox for Chrome.
    • For xtensa- og csky-arkitekturer er der tilføjet støtte til begrænsning af systemopkald ved hjælp af seccomp-subsystemet. For xtensa er der desuden implementeret støtte til revisionsmekanismen.
    • Tilføjet den nye capability-flag CAP_CHECKPOINT_RESTORE, som giver mulighed for at få adgang til funktioner relateret til frysering og genopretning af processtatus uden at overføre yderligere privilegier.
    • Alle funktioner nødvendige for, er blevet implementeret i GCC 11
      debugging værktøjet KCSAN (Kernel Concurrency Sanitizer), der er designet til dynamisk at opdage race-tilstande inde i kernen. Dermed kan KCSAN nu bruges med kerner bygget i GCC.
    • For AMD Zen og nyere CPU-modeller tilføjet støtte til P2PDMA-teknologi, der muliggør brug af DMA til direkte dataoverførsel mellem hukommelsen i to enheder tilsluttet PCI-bussen.
    • I dm-crypt er der tilføjet en tilstand, der reducerer ventetider ved at udføre kryptografisk databehandling uden at bruge arbejdsqueue. Denne tilstand er også nødvendig for korrekt funktion med zonede blok-enheder (enheder med områder, der skal skrives sekventielt med en opdatering af hele blokgruppen). Der er blevet arbejdet på at øge båndbredden og reducere ventetiderne i dm-crypt.
    • Koden til støtte for 32-bit gæstesystemer, der kører i para-virtualiseringsmodus under Xen-hypervisoren, er blevet fjernet. Brugere af sådanne systemer bør overgå til at bruge 64-bit kerner i gæstemiljøer eller bruge HVM eller PVH-tilstande til at starte miljøer i stedet for para-virtualisering (PV).
  • DiskSubsystem, input/output og filsystemer
    • I Btrfs-filsystemet er implementeret mount-optionen "rescue", der ensretter adgangen til alle andre muligheder for genopretning. Støtte til "alloc_start" og "subvolrootid" er blevet fjernet, og optionen "inode_cache" er blevet erklæret som forældet. Der er foretaget ydeevneoptimeringer, især er udførelsen af fsync()-operationer betydeligt hurtigere. Tilføjet muligheden for at bruge alternative typer checksums, der adskiller sig fra CRC32c.
    • Tilføjet muligheden for at bruge inline-kryptering (Inline Encryption) i filsystemerne ext4 og F2FS, hvilket kan aktiveres ved hjælp af monteringsmuligheden «inlinecrypt». Inline-krypteringsmodus giver mulighed for at anvende de indbyggede krypteringsmekanismer i controlleren, der udfører transparent kryptering og dekryptering af ind- og uddata.
    • I XFS sikret rydning af inode (flush) i en helt asynkron tilstand, der ikke blokerer processerne under udførelsen af hukommelseshåndteringsoperationen. Et gammelt problem med kvoter er blevet løst, hvor advarsler om overskridelse af den bløde grænse og begrænsninger på antallet af inoder blev forkert sporet. Implementeringen af DAX-support er blevet ensartet for både ext4 og xfs.
    • In Ext4 er implementeret forudindlæsnings af bitmap over blokdistribution. I kombination med begrænsningen om at scanne uinitialiserede grupper har optimeringen reduceret monterings-tiden for meget store partitioner.
    • I F2FS tilføjet ioctl F2FS_IOC_SEC_TRIM_FILE, der muliggør brugen af TRIM/discard-kommandoer til fysisk at nulstille de angivne data i filen, for eksempel til at slette adgangsnøgler uden at efterlade resterende data på lagermediet.
      I F2FS er der også tilføjet en ny affaldssamlingsmodus GC_URGENT_LOW, der arbejder mere aggressivt ved at udelukke visse kontroller for at være i idle-tilstand før affaldssamleren startes.
    • I bcache er størrelsen på bucket_size for ekstenter øget fra 16 til 32 bit som led i forberedelserne til at muliggøre anvendelse til caching af zonerede enheder.
    • I SCSI-subsystemet er muligheden for at bruge inline-kryptering baseret på indbyggede hardwarekrypteringsmidler, der leveres af UFS-controllere tilføjet (Universal Flash Storage).
    • En ny parameter for kernelens kommandolinje «debugfs» er blevet tilføjet, hvilket gør det muligt at styre tilgængeligheden af det tilsvarende pseudo-FS.
    • I NFSv4.2-klienten er der tilføjet support for udvidede filattributter (xattr).
    • I dm-dust tilføjet en grænseflade til at vise en liste over alle identificerede dårlige blokke på disken («dmsetup message dust1 0 listbadblocks»).
    • For md/raid5 er parameteren /sys/block/md1/md/stripe_size tilføjet for at konfigurere størrelsen af STRIPE-blokken.
    • For NVMe lagringsenheder tilføjet støtte til kommandoer for zonering af lagermediet (ZNS, NVM Express Zoned Namespace), der muliggør opdeling af lagerpladsen i zoner, der udgør grupper af blokke, for mere præcist at styre dataenes placering på lagermediet.
  • Netværkssubsystem
    • I Netfilter tilføjet mulighed for at afvise pakker i fasen før routingkontrol (udtryk REJECT kan nu anvendes ikke kun i kæderne INPUT, FORWARD og OUTPUT, men også i PREROUTING-fasen for icmp og tcp).
    • I nftables tilføjet mulighed for revision af hændelser relateret til ændring af konfiguration.
    • I nftables i netlink API tilføjet støtte til anonyme kæder, hvis navn tildeles dynamisk af kernen. Når et regel tilknyttet en anonym kæde slettes, slettes kæden automatisk.
    • I BPF er der tilføjet støtte til iteratorer til at gennemgå, filtrere og ændre elementer i associative arrays (map) uden at kopiere data til brugerområdet. Iteratorer kan bruges til TCP- og UDP-sockets, hvilket gør det muligt for BPF-programmer at gennemgå lister over åbne sockets og udtrække de nødvendige oplysninger fra dem.
    • En ny type BPF-programmer BPF_PROG_TYPE_SK_LOOKUP er tilføjet, som køres når kernen leder efter den relevante lyttersocket til en indkommende forbindelse. Ved hjælp af et sådant BPF-program kan der oprettes håndterere, der træffer beslutninger om, hvilken socket der skal associeres med forbindelsen, uden at være begrænset af systemopkaldet bind(). For eksempel kan der oprettes en binding af en socket til et interval af adresser eller porte. Desuden er der tilføjet støtte til flaget SO_KEEPALIVE i bpf_setsockopt() og mulighed for at indstille håndterere BPF_CGROUP_INET_SOCK_RELEASE, der kaldes ved frigivelse af soklen.
    • Støtte til protokollen PRP (Parallel Redundancy Protocol), som muliggør en transparent skift til en reservekanal i tilfælde af fejl i netværkets komponenter baseret på Ethernet.
    • I mac80211-stakken tilføjet støtte til firetrins kanalforhandling WPA/WPA2-PSK i adgangspunktmode.
    • Der er tilføjet muligheden for at skifte qdisc-scheduler (queuing discipline) til at bruge som standard FQ-PIE (Flow Queue PIE) netværkskøkontrolalgoritmen, der sigter mod at reducere den negative indflydelse af mellemliggende pakketbuffering på grænse-netværksudstyr (bufferbloat) i netværk med kabelmodemer.
    • Nye muligheder er tilføjet i MPTCP (MultiPath TCP), udvidelser af TCP-protokollen for at organisere arbejdet med TCP-forbindelsen ved samtidig levering af pakker gennem flere ruter via forskellige netværksgrænseflader knyttet til forskellige IP-adresser. Støtte til syn cookie, DATA_FIN, automatisk justering af buffere, diagnostik af sockets og brug af flags REUSEADDR, REUSEPORT og V6ONLY i setsockopt er blevet tilføjet.
    • For virtuelle routingtabel VRF (Virtual Routing and Forwarding), der gør det muligt at organisere arbejdet med flere routedomæner på en enkelt system, er der implementeret en 'strict'-tilstand. I denne tilstand kan den virtuelle tabel kun være tilknyttet en routingtabel, der ikke bruges i andre virtuelle tabeller.
    • I den trådløse driver ath11k tilføjet er support for 6GHz-frekvensen og spektral scanning.
  • Udstyr
    • Koden for support af UniCore-arkitekturen, udviklet ved mikroprocessorcentret på Peking Universitet og inkluderet i Linux-kernen i 2011, er blevet fjernet. Denne arkitektur har været uden vedligeholdelse siden 2014 og har ikke støtte i GCC.
    • For RISC-V-arkitekturen er der implementeret support for kcov (debugfs-interface til analyse af kernelens kodeoverdækning), kmemleak (system til opdagelse af hukommelseslækager), beskyttelse af stakken, overførselsmærker og tickless-operationer (signal-uafhængig multitasking).
    • For PowerPC-arkitekturen er der implementeret support for køer til spinlock, hvilket har betydeligt øget ydeevnen i situationer med låsekonflikter.
    • For ARM- og ARM64-arkitekturerne er cpufreq governor-mekanismen som standard aktiveret, som i sin beslutning om ændring af frekvensen direkte bruger information fra opgavestyreren og straks kan kontakte cpufreq-drivere for hurtigt at justere frekvensen, hvilket straks tilpasser CPU'ens arbejdsvilkår til den aktuelle belastning. schedutil I DRM-driveren i915 for Intel-grafikkort er support for chips baseret på mikroarkitekturen
    • Rocket Lake og der er tilføjet grundlæggende støtte til diskrete kort Intel Xe DG1 I amdgpu-driveren er der tilføjet grundlæggende støtte til AMD GPU.
    • Navi 21 (Navy Flounder) og Navi 22 (Sienna Cichlid). Support for UVD/VCE video kodnings- og dekodningsaccelerationsmotorer for GPU Southern Islands (Radeon HD 7000) er blevet tilføjet. Der er tilføjet en egenskab til at rotere visningen 90, 180 eller 270 grader.
      Det er interessant, at driveren til AMD GPU

      Det er interessant, at driveren til AMD GPU Baggrunden indeholder tekstur af siden og illustrationer, og dens opløsning er lavere end maskens. Baggrunden gemmes tabsløst for opfattelse med en opløsning på 100 dpi. den største driver i kernen — den har omkring 2,71 millioner linjer kode, hvilket svarer til cirka 10% af den samlede kernes størrelse (27,81 millioner linjer). Heraf kommer 1,79 millioner linjer fra automatisk genererede header-filer med oplysninger til GPU-registrene, mens C-koden udgør 366.000 linjer (til sammenligning indeholder Intel i915-driveren 209.000 linjer, mens Nouveau har 149.000).

    • I Nouveau-driveren tilføjet understøttelse af ramme-for-ramme integritetskontrol ved hjælp af CRC (Cyclic Redundancy Checks) i NVIDIA GPU-visningsmotorer. Implementeringen er baseret på den dokumentation, som NVIDIA har leveret.
    • Der er tilføjet drivere til LCD-paneler: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 og Xingbangda XBD599.
    • I ALSA-lydsystemet er der implementeret støtte til (en tilstand med konstant strømforsyning til eksterne HDMI-enheder for at eliminere forsinkelse ved opstart af afspilning) og et nyt apparat en ny enhed til styring af baggrundsbelysningen for mikrofonaktiverings- og lydløsningstasterne, samt tilføjet support til ny hardware, herunder controller Loongson 7A1000.
    • Understøttelse af ARM-platformer, enheder og platforme er blevet tilføjet: Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1, ASUS Google Nexus 7, Acer Iconia Tab A500, Qualcomm Snapdragon SDM630 (som anvendes i Sony Xperia 10, 10 Plus, XA2, XA2 Plus og XA2 Ultra), Jetson Xavier NX, Amlogic WeTek Core2, Aspeed EthanolX, fem nye boards baseret på NXP i.MX6, MikroTik RouterBoard 3011, Xiaomi Libra, Microsoft Lumia 950, Sony Xperia Z5, MStar, Microchip Sparx5, Intel Keem Bay, Amazon Alpine v3, Renesas RZ/G2H.

Samtidig oprettede den Latinamerikanske Free Software Foundation skabte
variant et helt frit kernel 5.9 — Linux-libre 5.9-gnu, renset for firmware og drivere, der indeholder ikke-frie komponenter eller kodeområder, hvis anvendelse er begrænset af producenten. I den nye version er indlæsning af blobs i driverne til WiFi rtw8821c og SoC MediaTek mt8183 deaktiveret. Koden til rensning af blobs i driverne og subsystemerne Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) og x86 touchscreen er opdateret.

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster