Linux 5.15 kernel udgivelse

Efter to måneders udvikling præsenterede Linus Torvalds udgivelsen af ​​Linux-kernen 5.15. Bemærkelsesværdige ændringer omfatter: ny NTFS-driver med skriveunderstøttelse, ksmbd-modul med SMB-serverimplementering, DAMON-undersystem til overvågning af hukommelsesadgang, realtidslåseprimitiver, fs-verity-understøttelse i Btrfs, process_mrelease-systemopkald til sultesvarsystemers hukommelse, fjerncertificeringsmodul dm-ima.

Den nye version indeholder 13499 rettelser fra 1888 udviklere, patchstørrelsen er 42 MB (ændringerne berørte 10895 filer, 632522 linjer kode blev tilføjet, 299966 linjer blev slettet). Omkring 45 % af alle ændringer, der er introduceret i 5.15, er relateret til enhedsdrivere, ca. 14 % af ændringerne er relateret til opdatering af kode, der er specifik for hardwarearkitekturer, 14 % er relateret til netværksstakken, 6 % er relateret til filsystemer og 3 % er relateret til interne kerneundersystemer.

Vigtigste innovationer:

  • Diskundersystem, I/O og filsystemer
    • Kernen har vedtaget en ny implementering af NTFS-filsystemet, åbnet af Paragon Software. Den nye driver kan arbejde i skrivetilstand og understøtter alle funktionerne i den nuværende version af NTFS 3.1, herunder udvidede filattributter, adgangslister (ACL'er), datakomprimeringstilstand, effektivt arbejde med tomme pladser i filer (spare) og genafspilning af ændringer fra loggen for at genoprette integriteten efter fejl.
    • Btrfs-filsystemet understøtter fs-verity-mekanismen, som bruges til transparent at kontrollere integriteten og ægtheden af ​​individuelle filer ved hjælp af kryptografiske hashes eller nøgler, der er knyttet til filerne, gemt i metadataområdet. Tidligere var fs-verity kun tilgængelig for Ext4 og F2fs filsystemer.

      Btrfs tilføjer også understøttelse af kortlægning af bruger-id'er for monterede filsystemer (tidligere understøttet for FAT, ext4 og XFS filsystemer). Denne funktion giver dig mulighed for at sammenligne filer fra en specifik bruger på en monteret fremmed partition med en anden bruger på det aktuelle system.

      Andre ændringer til Btrfs omfatter: hurtigere tilføjelse af nøgler til biblioteksindekset for at forbedre ydeevnen til filoprettelse; evnen til at arbejde raid0 med én enhed og raid10 med to (for eksempel under processen med at omkonfigurere arrayet); mulighed "rescue=ibadroots" for at ignorere et ukorrekt omfangstræ; acceleration af "send"-operationen; reduktion af låsekonflikter under omdøbningsoperationer; muligheden for at bruge 4K-sektorer på systemer med en 64K-hukommelsessidestørrelse.

    • I XFS er muligheden for at bruge datoer efter 2038 i filsystemet blevet stabiliseret. Implementeret en mekanisme til forsinket inode-deaktivering og understøttelse af forsinket installation og fjernelse af filattributter. For at eliminere problemer er muligheden for at deaktivere diskkvoter for allerede monterede partitioner blevet fjernet (du kan med magt deaktivere kvoter, men den beregning, der er forbundet med dem, vil fortsætte, så genmontering er påkrævet for at deaktivere dem helt).
    • I EXT4 er der blevet arbejdet på at øge ydelsen af ​​at skrive delalloc-buffere og behandle forældreløse filer, der fortsat eksisterer på grund af, at de forbliver åbne, men ikke er knyttet til en mappe. Behandling af kasseringsoperationer er blevet flyttet ud af jbd2 kthread-tråden for at undgå blokering af operationer med metadata.
    • F2FS tilføjede muligheden "discard_unit=blok|segment|sektion" for at binde kasseringsoperationer (markering af frigjorte blokke, der muligvis ikke længere fysisk lagres) til justeringen i forhold til en blok, sektor, segment eller sektion. Tilføjet support til sporing af ændringer i I/O-latens.
    • EROFS-filsystemet (Extendable Read-Only File System) tilføjer direkte I/O-understøttelse for filer, der er gemt uden komprimering, samt fiemap-understøttelse.
    • OverlayFS implementerer korrekt håndtering af "uforanderlige", "tilføj kun", "synkronisering" og "noatime" mount-flag.
    • NFS har forbedret håndtering af situationer, hvor NFS-serveren holder op med at svare på anmodninger. Tilføjet muligheden for at montere fra en server, der allerede er i brug, men tilgængelig via en anden netværksadresse.
    • Forberedelserne til omskrivning af FSCACHE-undersystemet er begyndt.
    • Tilføjet understøttelse af EFI-partitioner med ikke-standardplacering af GPT-tabeller.
    • Fanotify-mekanismen implementerer et nyt flag, FAN_REPORT_PIDFD, som får pidfd til at blive inkluderet i de returnerede metadata. Pidfd hjælper med at håndtere PID-genbrugssituationer for mere præcist at identificere processer, der får adgang til overvågede filer (en pidfd er knyttet til en specifik proces og ændres ikke, mens en PID kan associeres med en anden proces, efter at den aktuelle proces, der er forbundet med den pågældende PID, afsluttes).
    • Tilføjet muligheden for at tilføje monteringspunkter til eksisterende delte grupper til move_mount() systemkaldet, som løser problemer med at gemme og gendanne procestilstand i CRIU, når der er flere monteringspladser delt i isolerede containere.
    • Tilføjet beskyttelse mod skjulte raceforhold, der potentielt kan forårsage filkorruption, når der udføres cache-læsninger, mens tomrum i en fil behandles.
    • Understøttelse af obligatorisk (obligatorisk) fillåsning, implementeret gennem blokering af systemkald, der fører til en filændring, er afbrudt. På grund af mulige løbsforhold blev disse låse betragtet som upålidelige og blev forældet for mange år siden.
    • LightNVM-undersystemet er blevet fjernet, hvilket tillod direkte adgang til SSD-drevet, uden om emuleringslaget. LightNVM mistede sin betydning efter fremkomsten af ​​NVMe-standarder, der sørger for zoneinddeling (ZNS, Zoned Namespace).
  • Hukommelse og systemtjenester
    • DAMON (Data Access MONitor) undersystemet er blevet implementeret, hvilket giver dig mulighed for at overvåge aktivitet relateret til adgang til data i RAM i forhold til en udvalgt proces, der kører i brugerrummet. Undersystemet giver dig mulighed for at analysere, hvilke hukommelsesområder processen fik adgang til under hele driften, og hvilke hukommelsesområder der forblev uopkrævet. DAMON har lav CPU-belastning, lavt hukommelsesforbrug, høj nøjagtighed og forudsigelig konstant overhead, uafhængig af størrelse. Undersystemet kan bruges både af kernen til at optimere hukommelseshåndtering og af hjælpeprogrammer i brugerrummet til at forstå, hvad en proces præcis gør og optimere hukommelsesbrug, for eksempel ved at frigøre overskydende hukommelse til systemet.
    • Process_mrelease-systemkaldet er blevet implementeret for at fremskynde processen med at frigive hukommelsen for en proces, der fuldender dens eksekvering. Under normale omstændigheder er ressourcefrigivelse og procesafslutning ikke øjeblikkelig og kan blive forsinket af forskellige årsager, hvilket forstyrrer brugerpladshukommelses tidlige responssystemer såsom oomd (leveret af systemd) og lmkd (brugt af Android). Ved at kalde process_mrelease kan sådanne systemer mere forudsigeligt udløse genvinding af hukommelse fra tvungne processer.
    • Fra PREEMPT_RT-kernegrenen, som udvikler understøttelse af realtidsdrift, er varianter af primitiver til organisering af låse mutex, ww_mutex, rw_semaphore, spinlock og rwlock, baseret på RT-Mutex-undersystemet, blevet overført. Ændringer er blevet tilføjet til SLUB-pladeallokator for at forbedre driften i PREEMPT_RT-tilstand og reducere indvirkningen på afbrydelser.
    • Understøttelse af SCHED_IDLE opgaveplanlægningsattributten er blevet tilføjet til cgroup, hvilket giver dig mulighed for at give denne attribut til alle processer i en gruppe, der er inkluderet i en specifik cgroup. De der. disse processer vil kun køre, når der ikke er andre opgaver, der venter på at blive udført på systemet. I modsætning til at indstille SCHED_IDLE-attributten til hver proces individuelt, når SCHED_IDLE bindes til en cgroup, tages den relative vægt af opgaver inden for gruppen i betragtning, når du vælger en opgave, der skal udføres.
    • Mekanismen til at tage højde for hukommelsesforbrug i cgroup er blevet udvidet med muligheden for at spore yderligere kernedatastrukturer, inklusive dem, der er oprettet til polling, signalbehandling og navneområder.
    • Tilføjet understøttelse af asymmetrisk planlægning af opgavebinding til processorkerner på arkitekturer, hvor nogle CPU'er tillader udførelse af 32-bit opgaver, og nogle kun fungerer i 64-bit tilstand (for eksempel ARM). Den nye tilstand giver dig mulighed for kun at overveje CPU'er, der understøtter 32-bit opgaver, når du planlægger 32-bit opgaver.
    • Den io_uring asynkrone I/O-grænseflade understøtter nu åbning af filer direkte i indekstabellen med faste filer uden brug af en fildeskriptor, hvilket gør det muligt at fremskynde nogle typer operationer betydeligt, men går imod den traditionelle Unix-proces med at bruge fildeskriptorer for at åbne filer.

      io_uring for BIO (Block I/O Layer)-undersystemet implementerer en ny genbrugsmekanisme ("BIO recycling"), som reducerer overhead i processen med at administrere intern hukommelse og øger antallet af behandlede I/O-operationer pr. sekund med ca. 10 % . io_uring tilføjer også understøttelse af systemkaldene mkdirat(), symlinkat() og linkat().

    • For BPF-programmer er muligheden for at anmode om og behandle timerhændelser blevet implementeret. En iterator til UNIX sockets er blevet tilføjet, og muligheden for at få og indstille socket muligheder for setsockopt er blevet implementeret. BTF dumper understøtter nu indtastede data.
    • På NUMA-systemer med forskellige typer hukommelse, der adskiller sig i ydeevne, overføres smidte hukommelsessider, når ledig plads er opbrugt, fra dynamisk hukommelse (DRAM) til langsommere permanent hukommelse (Persistent Memory) i stedet for at slette disse sider. Tests har vist, at sådanne taktikker normalt forbedrer ydeevnen på sådanne systemer. NUMA giver også mulighed for at allokere hukommelsessider til en proces fra et udvalgt sæt NUMA noder.
    • For ARC-arkitekturen er understøttelse af tre- og fire-niveau hukommelsessidetabeller blevet implementeret, hvilket yderligere vil muliggøre understøttelse af 64-bit ARC-processorer.
    • For s390-arkitekturen er muligheden for at bruge KFENCE-mekanismen til at opdage fejl, når der arbejdes med hukommelse blevet implementeret, og understøttelse af KCSAN-racetilstandsdetektoren er blevet tilføjet.
    • Tilføjet understøttelse for indeksering af listen over meddelelser, der er output via printk(), hvilket giver dig mulighed for at hente alle sådanne meddelelser på én gang og spore ændringer i brugerrummet.
    • mmap() har fjernet understøttelse af indstillingen VM_DENYWRITE, og kernekoden er blevet fjernet fra at bruge MAP_DENYWRITE-tilstanden, hvilket har reduceret antallet af situationer, der fører til blokering af skrivninger til en fil med ETXTBSY-fejlen.
    • En ny type kontroller, "Hændelsesonder", er blevet tilføjet til sporingsundersystemet, som kan knyttes til eksisterende sporingshændelser og definerer dit eget outputformat.
    • Når du bygger kernen ved hjælp af Clang-kompileren, bruges standardsamleren fra LLVM-projektet nu.
    • Som en del af et projekt for at befri kernen for kode, der fører til, at advarsler udsendes af compileren, blev der udført et eksperiment med "-Werror"-tilstanden aktiveret som standard, hvor compiler-advarsler behandles som fejl. Som forberedelse til 5.15-udgivelsen begyndte Linus kun at acceptere ændringer, der ikke resulterede i advarsler ved bygning af kernen og aktiverede bygning med "-Werror", men accepterede derefter, at en sådan beslutning var for tidlig og forsinket, hvilket aktiverer "-Werror" som standard . Inkluderingen af ​​"-Werror"-flaget under montering styres ved hjælp af parameteren WERROR, som er sat til COMPILE_TEST som standard, dvs. Indtil videre er det kun aktiveret til testbuilds.
  • Virtualisering og sikkerhed
    • En ny dm-ima-handler er blevet tilføjet til Device Mapper (DM) med implementeringen af ​​en fjerncertificeringsmekanisme baseret på IMA (Integrity Measurement Architecture) undersystemet, som gør det muligt for en ekstern tjeneste at verificere tilstanden af ​​kerneundersystemer for at sikre deres ægthed . I praksis giver dm-ima dig mulighed for at oprette storages ved hjælp af Device Mapper, der er knyttet til eksterne cloud-systemer, hvor gyldigheden af ​​den lancerede DM-målkonfiguration kontrolleres ved hjælp af IMA.
    • prctl() implementerer en ny indstilling PR_SPEC_L1D_FLUSH, som, når den er aktiveret, får kernen til at tømme indholdet af første niveaus (L1D) cache, hver gang der sker en kontekstskift. Denne tilstand tillader, selektivt for de vigtigste processer, at implementere yderligere beskyttelse mod brugen af ​​sidekanalangreb udført for at bestemme data, der har sat sig i cachen som følge af sårbarheder forårsaget af spekulativ udførelse af instruktioner i CPU'en. Omkostningerne ved at aktivere PR_SPEC_L1D_FLUSH (ikke aktiveret som standard) er en betydelig ydeevnestraf.
    • Det er muligt at bygge kernen med tilføjelsen af ​​"-fzero-call-used-regs=used-gpr" flaget til GCC, som sikrer, at alle registre nulstilles, før kontrollen returneres fra funktionen. Denne mulighed giver dig mulighed for at beskytte mod informationslækage fra funktioner og reducere antallet af blokke, der egner sig til at bygge ROP (Return-Oriented Programming)-gadgets i udnyttelser med 20 %.
    • Muligheden for at bygge kerner til ARM64-arkitekturen i form af klienter til Hyper-V hypervisoren er blevet implementeret.
    • En ny driverudviklingsramme "VDUSE" foreslås, som gør det muligt at implementere virtuelle blokenheder i brugerrummet og bruge Virtio som en transport for adgang fra gæstesystemer.
    • Tilføjet Virtio-driver til I2C-bussen, hvilket gør det muligt at emulere I2C-controllere i paravirtualiseringstilstand ved hjælp af separate backends.
    • Tilføjet Virtio-driver gpio-virtio for at give gæster adgang til GPIO-linjer leveret af værtssystemet.
    • Tilføjet muligheden for at begrænse adgangen til hukommelsessider for enhedsdrivere med DMA-understøttelse på systemer uden en I/O MMU (memory-management unit).
    • KVM-hypervisoren har mulighed for at vise statistik i form af lineære og logaritmiske histogrammer.
  • Netværks undersystem
    • ksmbd-modulet er blevet tilføjet til kernen med implementeringen af ​​en filserver, der bruger SMB3-protokollen. Modulet supplerer SMB-klientimplementeringen, der tidligere var tilgængelig i kernen, og i modsætning til SMB-serveren, der kører i brugerrum, er det mere effektivt med hensyn til ydeevne, hukommelsesforbrug og integration med avancerede kernefunktioner. Ksmbd udråbes som en højtydende, indlejret klar Samba-udvidelse, der integreres med Samba-værktøjer og -biblioteker efter behov. ksmbd's muligheder inkluderer forbedret understøttelse af distribueret fil-caching-teknologi (SMB-leasing) på lokale systemer, hvilket kan reducere trafikken betydeligt. I fremtiden planlægger de at tilføje understøttelse af RDMA ("smbdirect") og protokoludvidelser relateret til at øge pålideligheden af ​​kryptering og verifikation ved hjælp af digitale signaturer.
    • CIFS-klienten understøtter ikke længere NTLM og de svagere DES-baserede godkendelsesalgoritmer, der bruges i SMB1-protokollen.
    • Multicast-understøttelse er implementeret i implementeringen af ​​netværksbroer til vlans.
    • Bonding-driveren, der bruges til at aggregere netværksgrænseflader, har tilføjet understøttelse af XDP (eXpress Data Path) undersystemet, som giver dig mulighed for at manipulere netværkspakker på stadiet, før de behandles af Linux-kernenetværksstakken.
    • Den trådløse mac80211-stack understøtter 6GHZ STA (Special Temporary Authorization) i LPI-, SP- og VLP-tilstande, samt muligheden for at indstille individuel TWT (Target Wake Time) i adgangspunkttilstand.
    • Tilføjet understøttelse af MCTP (Management Component Transport Protocol), der bruges til interaktion mellem administrationscontrollere og tilknyttede enheder (værtsprocessorer, perifere enheder osv.).
    • 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 understøttelse af adresser i fullmesh-tilstand.
    • Håndtere til netværksstrømme indkapslet i SRv6-protokollen (Segment Routing IPv6) er blevet tilføjet til netfilter.
    • Tilføjet sockmap-understøttelse til Unix-streaming-sockets.
  • Оборудование
    • Amdgpu-driveren understøtter Cyan Skillfish APU'er (udstyret med Navi 1x GPU'er). Yellow Carp APU understøtter nu video-codecs. Forbedret Aldebaran GPU-understøttelse. Tilføjet nye kortidentifikatorer baseret på GPU Navi 24 "Beige Goby" og RDNA2. Der foreslås en forbedret implementering af virtuelle skærme (VKMS). Support til overvågning af temperaturen på AMD Zen 3-chips er blevet implementeret.
    • Amdkfd-driveren (til diskrete GPU'er, såsom Polaris) implementerer en delt virtuel hukommelseshåndtering (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.
    • i915-driveren til Intel-videokort udvider brugen af ​​TTM-videohukommelseshåndteringen og inkluderer muligheden for at styre strømforbruget baseret på GuC (Graphics Micro Controller). Forberedelserne er begyndt til implementering af understøttelse af Intel ARC Alchemist-grafikkortet og Intel Xe-HP GPU.
    • Nouveau-driveren implementerer baggrundslysstyring til eDP-paneler ved hjælp af DPCD (DisplayPort Configuration Data).
    • Tilføjet understøttelse af Adreno 7c Gen 3 og Adreno 680 GPU'er til msm-driveren.
    • IOMMU-driveren er implementeret til Apple M1-chippen.
    • Tilføjet lyddriver til systemer baseret på AMD Van Gogh APU'er.
    • Realtek R8188EU-driveren er blevet tilføjet til staging-grenen, som erstattede den gamle version af driveren (rtl8188eu) til Realtek RTL8188EU 802.11 b/g/n trådløse chips.
    • ocp_pt-driveren er inkluderet til PCIe-kortet udviklet af Meta (Facebook) med implementering af et miniature atomur og en GNSS-modtager, som kan bruges til at organisere driften af ​​separate eksakte tidssynkroniseringsservere.
    • Tilføjet understøttelse af Sony Xperia 10II (Snapdragon 665), Xiaomi Redmi 2 (Snapdragon MSM8916), Samsung Galaxy S3 (Snapdragon MSM8226), Samsung Gavini/Codina/Kyle smartphones.
    • Tilføjet understøttelse af ARM SoС og NVIDIA Jetson TX2 NX Developer Kit, Sancloud BBE Lite, PicoITX, DRC02, SolidRun SolidSense, SKOV i.MX6, Nitrogen8, Traverse Ten64, GW7902, Microchip SAMA7, ualcomm Snapdragon SDM636C, HSM8150C/HSM3C. boards -2G/M3e-2G, Marvell CN913x, ASpeed ​​​​AST2600 (Facebook Cloudripper, Elbert og Fuji serverkort), 4KOpen STiH418-b2264.
    • Tilføjet understøttelse af Gopher 2b LCD-paneler, EDT ETM0350G0DH6/ETMV570G2DHU, LOGIC Technologies LTTD800480070-L6WH-RT, Multi-Innotechnology MI1010AIT-1CP1, Innolux EJ030NA 3.0, Innolux EJ9341NA 3300, Innolux EJ33NA 20, Innolux EJ7430NA 2401. XNUMXXCXNUMX XNUMX, Samsung DBXNUMX, WideChips WSXNUMX .
    • Tilføjet LiteETH-driver med understøttelse af Ethernet-controllere, der bruges i LiteX-software SoC'er (til FPGA'er).
    • En lavlatensindstilling er blevet tilføjet til usb-lyddriveren for at kontrollere inkluderingen af ​​driften i tilstanden minimum latency. Også tilføjet quirk_flags mulighed for at videregive enhedsspecifikke indstillinger.

Samtidig dannede Latin American Free Software Foundation en version af den helt gratis kerne 5.15 - Linux-libre 5.15-gnu, renset for elementer af firmware og drivere indeholdende ikke-frie komponenter eller kodesektioner, hvis omfang er begrænset af producenten. Den nye udgivelse implementerer output af en meddelelse til loggen om færdiggørelse af rengøring. Problemer med at generere pakker ved hjælp af mkspec er blevet rettet, understøttelse af snap-pakker er blevet forbedret. Fjernede nogle advarsler, der blev vist under behandling af firmware.h-header-filen. Tillad output af nogle typer advarsler ("format-ekstra-args", kommentarer, ubrugte funktioner og variabler), når du byggede i "-fejl"-tilstand. Tilføjet gehc-achc driver rengøring. Opdateret blob-rensningskode i drivere og undersystemer adreno, btusb, btintel, brcmfmac, aarch64 qcom. Rengøring af drivere prism54 (fjernet) og rtl8188eu (erstattet af r8188eu) er blevet standset.

Kilde: opennet.ru

Tilføj en kommentar