Linux-kjerneutgivelse 5.18

Etter to måneder med utvikling presenterte Linus Torvalds utgivelsen av Linux-kjernen 5.18. Blant de mest bemerkelsesverdige endringene: en større opprydding av foreldet funksjonalitet ble utført, Reiserfs FS ble erklært foreldet, brukerprosesssporingshendelser ble implementert, støtte for mekanismen for blokkering av Intel IBT-utnyttelser ble lagt til, en bufferoverløpsdeteksjonsmodus ble aktivert når ved å bruke memcpy()-funksjonen ble det lagt til en mekanisme for å spore fprobe-funksjonskall, Ytelsen til oppgaveplanleggeren på AMD Zen-CPUer er forbedret, en driver for å administrere Intel CPU-funksjonalitet (SDS) er inkludert, noen patcher er integrert for restrukturering av header-filer, og bruk av C11-standarden er godkjent.

Den nye versjonen inkluderer 16206 2127 rettelser fra 14203 1995 utviklere (i den siste utgivelsen var det 108 14235 rettelser fra 1340982 593836 utviklere), patchstørrelsen er 44 MB (endringene påvirket 5.18 16 filer, 11 3 3 kodelinjer ble lagt til, XNUMX XNUMX linjer ble slettet). Omtrent XNUMX % av alle endringer introdusert i XNUMX er relatert til enhetsdrivere, omtrent XNUMX % av endringene er relatert til oppdateringskode spesifikk for maskinvarearkitekturer, XNUMX % er relatert til nettverksstabelen, XNUMX % er relatert til filsystemer og XNUMX % er relatert til interne kjerneundersystemer.

Nøkkelinnovasjoner i kjerne 5.18:

  • Diskundersystem, I/O og filsystemer
    • Btrfs-filsystemet har lagt til støtte for videresending av komprimerte data når du utfører sende- og mottaksoperasjoner. Tidligere, når du brukte send/motta, dekomprimerte avsendersiden dataene som var lagret i komprimert form, og mottakersiden komprimerte dem på nytt før de skrev dem. I 5.18-kjernen ble brukerromsapplikasjoner som bruker send/motta-anrop, gitt muligheten til å overføre komprimerte data uten ompakking. Funksjonaliteten er implementert takket være de nye ioctl-operasjonene BTRFS_IOC_ENCODED_READ og BTRFS_IOC_ENCODED_WRITE, som lar deg lese og skrive informasjon direkte i utstrekninger.

      I tillegg forbedrer Btrfs fsync-ytelsen. Lagt til muligheten til å deduplisere og utføre reflink (kloning av filmetadata ved å opprette en lenke til eksisterende data uten å faktisk kopiere den) for hele lagringen, ikke begrenset til monteringspunkter.

    • I Direct I/O-modus er det mulig å få tilgang til krypterte filer når fscrypt bruker inline-kryptering, der krypterings- og dekrypteringsoperasjoner utføres av stasjonskontrolleren i stedet for kjernen. Med vanlig kjernekryptering er tilgang til krypterte filer ved hjelp av Direct I/O fortsatt umulig, siden filer åpnes utenom buffermekanismen i kjernen.
    • NFS-serveren inkluderer støtte for NFSv3-protokollen som standard, som nå ikke krever separat aktivering og er tilgjengelig når NFS er aktivert generelt. NFSv3 anses å være den viktigste og alltid støttede versjonen av NFS, og støtte for NFSv2 kan bli avviklet i fremtiden. Effektiviteten til å lese kataloginnhold har blitt betydelig forbedret.
    • ReiserFS-filsystemet er avviklet og forventes å bli fjernet i 2025. Å avvikle ReiserFS vil redusere innsatsen som kreves for å opprettholde filsystemomfattende endringer relatert til støtte for det nye API-et for montering, iomap og tomes.
    • For F2FS-filsystemet er muligheten til å kartlegge bruker-IDer for monterte filsystemer implementert, som brukes til å sammenligne filene til en spesifikk bruker på en montert utenlandsk partisjon med en annen bruker på gjeldende system.
    • Koden for beregning av statistikk i Device-mapper-behandlere har blitt omarbeidet, noe som har forbedret nøyaktigheten av regnskap i behandlere som dm-crypt betraktelig.
    • NVMe-enheter støtter nå 64-biters sjekksummer for integritetskontroll.
    • For exfat-filsystemet er det foreslått et nytt monteringsalternativ "keep_last_dots", som deaktiverer fjerning av prikker på slutten av filnavnet (i Windows fjernes prikker på slutten av filnavnet som standard).
    • EXT4 forbedrer ytelsen til fast_commit-modus og øker skalerbarheten. Monteringsalternativet "mb_optimize_scan", som gjør det mulig å øke ytelsen under forhold med store filsystemfragmentering, er tilpasset for arbeid med filer med utstrekninger.
    • Støtte for skrivestrømmer i delsystemet som støtter blokkenheter er avviklet. Denne funksjonen ble foreslått for SSD-er, men var ikke utbredt, og det er for øyeblikket ingen enheter i bruk som støtter denne modusen, og det er usannsynlig at de vil dukke opp i fremtiden.
  • Minne- og systemtjenester
    • Integreringen av et sett med oppdateringer har begynt, noe som gjør det mulig å redusere tiden for gjenoppbygging av kjernen betydelig ved å restrukturere hierarkiet av overskriftsfiler og redusere antall kryssavhengigheter. Kernel 5.18 inkluderer oppdateringer som optimerer strukturen til oppgaveplanleggerens overskriftsfiler (kjerne/planlegging). Sammenlignet med forrige utgivelse ble CPU-tidsforbruket ved montering av kjerne/planlagt/-kode redusert med 61 %, og faktisk tid redusert med 3.9 % (fra 2.95 til 2.84 sek).
    • Kjernekode er tillatt å bruke C11-standarden, publisert i 2011. Tidligere måtte kode lagt til kjernen samsvare med ANSI C (C89)-spesifikasjonen, dannet tilbake i 1989. I 5.18-kjernebyggeskriptene er '—std=gnu89'-alternativet erstattet med '—std=gnu11 -Wno-shift-negative-value'. Muligheten for å bruke C17-standarden ble vurdert, men i dette tilfellet ville det være nødvendig å øke minimumsstøttet versjon av GCC, mens inkluderingen av C11-støtte passer inn i gjeldende krav for GCC-versjonen (5.1).
    • Forbedret oppgaveplanleggingsytelse på AMD-prosessorer med Zen-mikroarkitektur, som gir flere Last Level Cache (LLC) for hver node med lokale minnekanaler. Den nye versjonen eliminerer LLC-ubalansen mellom NUMA-noder, noe som førte til en betydelig økning i ytelse for noen typer arbeidsbelastning.
    • Verktøy for å spore applikasjoner i brukerområdet har blitt utvidet. Den nye kjerneversjonen legger til muligheten for brukerprosesser for å lage brukerhendelser og skrive data til sporingsbufferen, som kan sees gjennom standard kjernesporingsverktøy som ftrace og perf. Brukerplasssporingshendelser er isolert fra kjernesporingshendelser. Hendelsesstatus kan sees gjennom filen /sys/kernel/debug/tracing/user_events_status, og hendelsesregistrering og dataregistrering gjennom filen /sys/kernel/debug/tracing/user_events_data.
    • Lagt til en mekanisme for sporing (probe) funksjonskall - fprobe. fprobe API er basert på ftrace, men begrenses kun av muligheten til å knytte tilbakeringingsbehandlere til funksjonsinngangspunkter og funksjonsutgangspunkter. I motsetning til kprobes og kretprobes, lar den nye mekanismen deg bruke én behandler for flere funksjoner samtidig.
    • Støtte for eldre ARM-prosessorer (ARMv4 og ARMv5) som ikke er utstyrt med en minnestyringsenhet (MMU) er avviklet. Støtte for ARMv7-M-systemer uten MMU beholdes.
    • Støtte for den RISC-lignende NDS32-arkitekturen som brukes i Andes Technologies-prosessorer, er avviklet. Koden ble fjernet på grunn av manglende vedlikehold og mangel på etterspørsel etter NDS32-støtte i hoved Linux-kjernen (gjenværende brukere bruker spesialiserte kjernebygg fra maskinvareprodusenter).
    • Som standard er bygging av kjernen med støtte for det kjørbare filformatet a.out deaktivert for alfa- og m68k-arkitekturene, som fortsetter å bruke dette formatet. Det er sannsynlig at støtte for det eldre a.out-formatet vil bli fullstendig fjernet fra kjernen snart. Planer om å fjerne a.out-formatet har vært diskutert siden 2019.
    • PA-RISC-arkitekturen gir minimal støtte for vDSO-mekanismen (virtuelle dynamiske delte objekter), som gir et begrenset sett med systemanrop tilgjengelig i brukerområdet uten kontekstbytte. vDSO-støtte gjorde det mulig å implementere muligheten til å kjøre med en ikke-kjørbar stack.
    • Lagt til støtte for Intel HFI (Hardware Feedback Interface)-mekanismen, som lar maskinvaren overføre informasjon til kjernen om gjeldende ytelse og energieffektivitet til hver CPU.
    • Lagt til en driver for Intel SDSi (Software-Defined Silicon)-mekanismen, som lar deg kontrollere inkluderingen av tilleggsfunksjoner i prosessoren (for eksempel spesialiserte instruksjoner og ekstra cache-minne). Tanken er at brikker kan leveres til en lavere pris med avanserte funksjoner låst, som deretter kan "kjøpes" og ekstra funksjoner aktiveres uten maskinvareutskifting av brikken.
    • Amd_hsmp-driveren er lagt til for å støtte AMD HSMP-grensesnittet (Host System Management Port), som gir tilgang til prosessoradministrasjonsfunksjoner gjennom et sett med spesielle registre som har dukket opp i AMD EPYC-serverprosessorer fra og med Fam19h-generasjonen. Gjennom HSMP kan du for eksempel få data om strømforbruk og temperatur, angi frekvensgrenser, aktivere ulike ytelsesforbedringsmoduser og administrere minneparametere.
    • Det io_uring asynkrone I/O-grensesnittet implementerer IORING_SETUP_SUBMIT_ALL-alternativet for å registrere et sett med filbeskrivelser i en ringbuffer, og IORING_OP_MSG_RING-operasjonen for å sende et signal fra en ringebuffer til en annen ringebuffer.
    • DAMOS-mekanismen (Data Access Monitoring-Based Operation Schemes), som gjør at minne kan frigjøres under hensyntagen til frekvensen av minnetilgang, har utvidede muligheter for å overvåke minneoperasjoner fra brukerplass.
    • En tredje serie med patcher er integrert med implementeringen av konseptet sidefolioer, som ligner sammensatte sider, men har forbedret semantikk og en klarere organisering av arbeidet. Ved å bruke tomes kan du øke hastigheten på minneadministrasjonen i noen kjerneundersystemer. I de foreslåtte oppdateringene ble funksjoner for intern minneadministrasjon oversatt til folioer, inkludert varianter av get_user_pages()-funksjonen. Gir støtte for å lage store volumer i forhåndslesingskode.
    • Monteringssystemet støtter nå miljøvariabler USERCFLAGS og USERLDFLAGS, som du kan sende flere flagg til kompilatoren og linkeren med.
    • I eBPF-undersystemet gir BTF (BPF Type Format)-mekanismen, som gir typesjekkinformasjon i BPF-pseudokode, muligheten til å legge til merknader til variabler som refererer til minneområder i brukerområdet. Merknader hjelper BPF-kodeverifiseringssystemet bedre å identifisere og verifisere minnetilganger.
    • En ny minneallokeringsbehandler for lagring av innlastede BPF-programmer er foreslått, som tillater mer effektiv bruk av minnet i situasjoner der et stort antall BPF-programmer er lastet.
    • MADV_DONTNEED_LOCKED-flagget er lagt til madvise()-systemkallet, som gir verktøy for å optimalisere prosessminneadministrasjon, som utfyller det eksisterende MADV_DONTNEED-flagget, gjennom hvilket kjernen kan informeres på forhånd om den forestående utgivelsen av en minneblokk, dvs. at denne blokken ikke lenger er nødvendig og kan brukes av kjernen. I motsetning til MADV_DONTNEED, er bruken av MADV_DONTNEED_LOCKED-flagget tillatt for minnesider som er festet i RAM, som, når madvise kalles opp, blir kastet ut uten å endre deres festede status og, i tilfelle en påfølgende tilgang til blokkering og generering av en "side" feil», returneres med bindingen bevart. I tillegg er det lagt til en endring for å tillate MADV_DONTNEED-flagget å brukes med store minnesider i HugeTLB.
  • Virtualisering og sikkerhet
    • For x86-arkitekturen er det lagt til støtte for Intel IBT (Indirect Branch Tracking) kommandoflytbeskyttelsesmekanisme, som forhindrer bruk av utnyttelseskonstruksjonsteknikker ved bruk av returorienterte programmeringsteknikker (ROP, Return-Oriented Programming), der utnyttelsen er dannet i form av en kjede av anrop som allerede eksisterer i minnet av deler av maskininstruksjoner som slutter med en kontrollreturinstruksjon (som regel er dette funksjonssluttene). Essensen av den implementerte beskyttelsesmetoden er å blokkere indirekte overganger til kroppen til en funksjon ved å legge til en spesiell ENDBR-instruksjon i begynnelsen av funksjonen og tillate utførelse av en indirekte overgang kun i tilfelle en overgang til denne instruksjonen (en indirekte kall gjennom JMP og CALL må alltid falle på ENDBR-instruksjonen, som er plassert helt i begynnelsen av funksjonene).
    • Aktiverte mer streng kontroll av buffergrenser i funksjonene memcpy(), memmove() og memset(), utført på kompileringstidspunktet når CONFIG_FORTIFY_SOURCE-modus er aktivert. Den ekstra endringen koker ned til å sjekke om elementer av strukturer hvis størrelse er kjent går utover grensene. Det bemerkes at den implementerte funksjonen ville tillate blokkering av alle memcpy()-relaterte kjernebufferoverløp identifisert i minst de siste tre årene.
    • La til den andre delen av koden for den oppdaterte implementeringen av RDRAND pseudo-tilfeldig tallgenerator, som er ansvarlig for driften av /dev/random og /dev/urandom enhetene. Den nye implementeringen er kjent for å forene driften av /dev/random og /dev/urandom, legge til beskyttelse mot utseendet av duplikater i strømmen av tilfeldige tall når du starter virtuelle maskiner, og bytte til å bruke BLAKE2s hash-funksjon i stedet for SHA1 for entropiblandingsoperasjoner. Endringen forbedret sikkerheten til pseudo-tilfeldig tallgenerator ved å eliminere den problematiske SHA1-algoritmen og eliminere overskrivingen av RNG-initialiseringsvektoren. Siden BLAKE2s-algoritmen er overlegen SHA1 i ytelse, hadde bruken også en positiv effekt på ytelsen.
    • For ARM64-arkitekturen er det lagt til støtte for en ny pekerautentiseringsalgoritme - "QARMA3", som er raskere enn QARMA-algoritmen samtidig som den opprettholder riktig sikkerhetsnivå. Teknologien lar deg bruke spesialiserte ARM64-instruksjoner for å verifisere returadresser ved hjelp av digitale signaturer som er lagret i de ubrukte øvre bitene av selve pekeren.
    • For ARM64-arkitekturen er det implementert støtte for montering med inkludering i GCC 12 av en beskyttelsesmodus mot overskriving av returadressen fra en funksjon i tilfelle bufferoverflyt på stabelen. Essensen av beskyttelsen er å lagre returadressen i en egen "skygge"-stabel etter å ha overført kontroll til en funksjon og hentet denne adressen før du går ut av funksjonen.
    • Lagt til en ny nøkkelring - "maskin", som inneholder systemeiernøklene (MOK, Machine Owner Keys), støttet i shim bootloader. Disse nøklene kan brukes til digital signering av kjernekomponenter som er lastet inn etter oppstart (for eksempel kjernemoduler).
    • Fjernet støtte for asymmetriske private nøkler for TPM-er, som ble tilbudt i en eldre versjon av TPM, hadde kjente sikkerhetsproblemer, og ble ikke tatt i bruk i praksis.
    • Lagt til beskyttelse av data med typen size_t fra heltallsoverløp. Koden inkluderer behandlere size_mul(), size_add() og size_sub(), som lar deg trygt multiplisere, addere og subtrahere størrelser med typen size_t.
    • Når du bygger kjernen, er "-Warray-bounds" og "-Wzero-length-bounds"-flaggene aktivert, som viser advarsler når indeksen går utover array-grensen og når null-length-arrays brukes.
    • Virtio-krypto-enheten har lagt til støtte for kryptering ved hjelp av RSA-algoritmen.
  • Nettverksundersystem
    • I implementeringen av nettverksbroer er det lagt til støtte for portbindingsmodus (låst modus), der brukeren kan sende trafikk gjennom porten kun fra en autorisert MAC-adresse. Muligheten til å bruke flere strukturer for å evaluere tilstanden til STP-protokollen (Spanning Tree Protocol) er også lagt til. Tidligere kunne VLAN bare kartlegges direkte til STP (1:1), med hvert VLAN administrert uavhengig. Den nye versjonen legger til parameteren mst_enable, når den er aktivert, kontrolleres tilstanden til VLAN-er av MST-modulen (Multiple Spanning Trees) og bindingen av VLAN-er kan tilsvare M:N-modellen.
    • Arbeidet fortsatte med å integrere verktøy i nettverksstakken for å spore årsakene til å droppe pakker (årsakskoder). Årsakskoden sendes når minnet knyttet til pakken frigjøres og tillater situasjoner som forkasting av pakke på grunn av overskriftsfeil, rp_filter-forfalskning, ugyldig kontrollsum, tom for minne, utløste IPSec XFRM-regler, ugyldig sekvensnummer TCP, etc.
    • Det er mulig å overføre nettverkspakker fra BPF-programmer lansert fra brukerplass i BPF_PROG_RUN-modus, der BPF-programmer kjøres i kjernen, men returnere resultatet til brukerområdet. Pakker overføres ved hjelp av XDP (eXpress Data Path) delsystemet. Live-pakkebehandlingsmodus støttes, der XDP-prosessoren kan omdirigere nettverkspakker på farten til nettverksstabelen eller til andre enheter. Det er også mulig å lage programvaregeneratorer for ekstern trafikk eller erstatte nettverksrammer i nettverksstakken.
    • For BPF-programmer knyttet til nettverks-cgroups, har hjelpefunksjoner blitt foreslått for å eksplisitt angi returverdien for systemanrop, noe som gjør det mulig å formidle mer fullstendig informasjon om årsakene til blokkeringen av et systemanrop.
    • XDP (eXpress Data Path)-undersystemet har lagt til støtte for fragmenterte pakker plassert i flere buffere, som lar deg behandle Jumbo-rammer i XDP og bruke TSO/GRO (TCP Segmentation Offload/Generic Receive Offload) for XDP_REDIRECT.
    • Prosessen med å slette nettverksnavneområder har blitt betydelig fremskyndet, noe som var etterspurt på noen store systemer med et stort trafikkvolum.
  • Оборудование
    • Amdgpu-driveren inkluderer som standard FreeSync adaptiv synkroniseringsteknologi, som lar deg justere oppdateringsfrekvensen for informasjon på skjermen, og sikrer jevne og rivefrie bilder mens du spiller spill og ser på videoer. Aldebaran GPU-støtte har blitt annonsert som stabil.
    • i915-driveren legger til støtte for Intel Alderlake N-brikker og Intel DG2-G12 diskrete grafikkort (Arc Alchemist).
    • Nouveau-driveren gir støtte for høyere bithastigheter for DP/eDP-grensesnitt og støtte for lttprs (Link-Training Tunable PHY Repeaters) kabelforlengere.
    • I drm (Direct Rendering Manager) undersystemet i drivere armada, exynos, gma500, hyperv, imx, ingenic, mcde, mediatek, msm, omap, rcar-du, rockchip, sprd, sti, tegra, tilcdc, xen og vc4 parameterstøtte har blitt lagt til nomodeset, som lar deg deaktivere bytte av videomodus på kjernenivå og bruk av akselerasjonsverktøy for maskinvaregjengivelse, slik at det kun er funksjonalitet relatert til systemframebufferen.
    • Lagt til støtte for ARM SoС Qualcomm Snapdragon 625/632 (brukt i LG Nexus 5X og Fairphone FP3-smarttelefoner), Samsung Exynos 850, Samsung Exynos 7885 (brukt i Samsung Galaxy A8), Airoha (Mediatek/EcoNet) EN7523, Mediatek PMT6582Mt5008 nettbrett 3G), Microchip Lan966, Renesas RZ/G2LC, RZ/V2L, Tesla FSD, TI K3/AM62 og i.MXRTxxxx.
    • Lagt til støtte for ARM-enheter og -kort fra Broadcom (Raspberry Pi Zero 2 W), Qualcomm (Google Herobrine R1 Chromebook, SHIFT6mq, Samsung Galaxy Book2), Rockchip (Pine64 PineNote, Bananapi-R2-Pro, STM32 Emtrion emSBS, Samsung Galaxy Tab S , Prestigio PMT5008 3G-nettbrett), Allwinner (A20-Marsboard), Amlogic (Amediatek X96-AIR, CYX A95XF3-AIR, Haochuangy H96-Max, Amlogic AQ222 og OSMC Vero 4K+), Aspeed (Quanta S6Q, ASRVE8), MarvelED3, MBU / Armada (Ctera C200 V1 og V2 NAS), Mstar (DongShanPiOne, Miyoo Mini), NXP i.MX (Protonic PRT8MM, emCON-MX8M Mini, Toradex Verdin, Gateworks GW7903).
    • Lagt til støtte for lydsystemer og kodeker AMD PDM, Atmel PDMC, Awinic AW8738, i.MX TLV320AIC31xx, Intel CS35L41, ESSX8336, Mediatek MT8181, nVidia Tegra234, Qualcomm SC7280, T2L585, Renesas R234Ms. Lagt til første implementering av lyddriver for Intel AVS DSP-brikke. Oppdaterte driverstøtte for Intel ADL og TegraXNUMX, og gjorde endringer for å forbedre lydstøtte på Dell, HP, Lenovo, ASUS, Samsung og Clevo-enheter.

    Samtidig dannet Latin American Free Software Foundation en versjon av den helt gratis kjernen 5.18 - Linux-libre 5.18-gnu, renset for elementer av fastvare og drivere som inneholder ikke-frie komponenter eller kodeseksjoner, hvis omfang er begrenset av produsenten. Den nye utgivelsen renser drivere for MIPI DBI-paneler, VPU Amphion, WiFi MediaTek MT7986 WMAC, Mediatek MT7921U (USB) og Realtek 8852a/8852c, Intel AVS og Texas Instruments TAS5805M lydbrikker. DTS-filer ble også renset for forskjellige Qualcomm SoC-er med prosessorer basert på AArch64-arkitekturen. Oppdatert blob-rensekode i drivere og undersystemer til AMD GPU, MediaTek MT7915, Silicon Labs WF200+ WiFi, Mellanox Spectru Ethernet, Realtek rtw8852c, Qualcomm Q6V5, Wolfson ADSP, MediaTek HCI UART.

Kilde: opennet.ru

Legg til en kommentar