Linux-kjerneutgivelse 5.19

Etter to måneder med utvikling presenterte Linus Torvalds utgivelsen av Linux-kjernen 5.19. Blant de mest bemerkelsesverdige endringene: støtte for LoongArch-prosessorarkitekturen, integrasjon av "BIG TCP"-patcher, on-demand-modus i fscache, fjerning av kode for å støtte a.out-formatet, muligheten til å bruke ZSTD for fastvarekomprimering, et grensesnitt for administrere minneutkasting fra brukerplass, øke påliteligheten og ytelsen til pseudo-tilfeldig tallgenerator, støtte for Intel IFS (In-Field Scan), AMD SEV-SNP (Secure Nested Paging), Intel TDX (Trusted Domain Extensions) og ARM SME (Scalable Matrix Extension) utvidelser.

I kunngjøringen sa Linus at mest sannsynlig vil neste kjerneutgivelse bli nummerert 6.0, siden 5.x-grenen har samlet nok utgivelser til å endre det første tallet i versjonsnummeret. Nummerendringen utføres av estetiske årsaker og er et formelt trinn som lindrer ubehag på grunn av akkumulering av et stort antall problemstillinger i serien.

Linus nevnte også at han brukte en bærbar Apple-bærbar basert på ARM64-arkitektur (Apple Silicon) med et Linux-miljø basert på Asahi Linux-distribusjonen for å lage utgivelsen. Det er ikke Linus sin primære arbeidsstasjon, men han brukte plattformen til å teste dens egnethet for kjernearbeid og for å sikre at han kunne produsere kjerneutgivelser mens han reiste med en lett bærbar datamaskin for hånden. Tidligere, for mange år siden, hadde Linus erfaring med å bruke Apple-utstyr til utvikling – han brukte en gang en PC basert på ppc970 CPU og en bærbar Macbook Air.

Den nye versjonen inkluderer 16401 2190 rettelser fra 16206 2127 utviklere (i den siste utgivelsen var det 90 13847 rettelser fra 1149456 349177 utviklere), patchstørrelsen er 39 MB (endringene påvirket 5.19 21 filer, 11 4 3 linjer med kode 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.19:

  • Diskundersystem, I/O og filsystemer
    • EROFS-filsystemet (Enhanced Read-Only File System), beregnet for bruk på skrivebeskyttede partisjoner, har blitt konvertert til å bruke fscache-undersystemet, som gir databufring. Endringen forbedret ytelsen til systemer der et stort antall containere lanseres fra et EROFS-basert bilde betydelig.
    • En on-demand lesemodus er lagt til fscache-delsystemet, som brukes til å optimalisere EROFS. Den nye modusen lar deg organisere lesebufring fra FS-bilder som ligger i det lokale systemet. I motsetning til den opprinnelig tilgjengelige driftsmodusen, som er fokusert på hurtigbufring i det lokale filsystemet av data overført gjennom nettverksfilsystemer, delegerer "on-demand"-modusen funksjonene for å hente data og skrive dem til hurtigbufferen til en separat bakgrunnsprosess som kjører i brukerområdet.
    • XFS gir muligheten til å lagre milliarder av utvidede attributter i en i-node. Maksimalt antall omfang for én fil er økt fra 4 milliarder til 247. En modus er implementert for atomisk oppdatering av flere utvidede filattributter samtidig.
    • Btrfs-filsystemet har optimert arbeid med låser, noe som muliggjorde en ytelsesøkning på omtrent 7 % når du skrev direkte i nå-modus. Ytelsen til operasjoner i NOCOW-modus (uten kopi-på-skriv) økes med ca. 3 %. Belastningen på sidebufferen når du kjører "send"-kommandoen er redusert. Minimumsstørrelsen på undersider er redusert fra 64K til 4K (undersider mindre enn kjernesider kan brukes). Det er gjort en overgang fra å bruke et radix-tre til XArrays-algoritmen.
    • En modus er lagt til NFS-serveren for å utvide bevaringen av låsetilstanden satt av en klient som har sluttet å svare på forespørsler. Den nye modusen lar deg utsette låsing i opptil en dag med mindre en annen klient ber om en konkurrerende lås. I normal modus fjernes blokkeringen 90 sekunder etter at klienten slutter å svare.
    • Hendelsessporingsundersystemet i fanotify FS implementerer FAN_MARK_EVICTABLE-flagget, som du kan deaktivere pinning av mål-i-noder i cachen, for eksempel for å ignorere undergrener uten å feste delene deres i cachen.
    • Driveren for FAT32-filsystemet har lagt til støtte for å få informasjon om tidspunktet for filoppretting gjennom statx-systemkallet med implementering av en mer effektiv og funksjonell versjon av stat(), som returnerer utvidet informasjon om filen.
    • Betydelige optimaliseringer er gjort til exFAT-driveren for å tillate samtidig sletting av en gruppe med sektorer når 'dirsync'-modusen er aktiv, i stedet for sekvensiell sektor-for-sektor-tømming. Ved å redusere antall blokkeringsforespørsler etter optimalisering, økte ytelsen til å opprette et stort antall kataloger på SD-kortet med mer enn 73-85 %, avhengig av klyngestørrelsen.
    • Kjernen inkluderer den første korrigerende oppdateringen til ntfs3-driveren. Siden ntfs3 ble inkludert i 5.15-kjernen i oktober i fjor, har ikke driveren blitt oppdatert og kommunikasjonen med utviklerne har gått tapt, men utviklerne har nå gjenopptatt publiseringsendringer. De foreslåtte oppdateringene eliminerte feil som førte til minnelekkasjer og krasj, løste problemer med kjøring av xfstests, ryddet opp i ubrukt kode og fikset skrivefeil.
    • For OverlayFS er muligheten til å kartlegge bruker-IDer for monterte filsystemer implementert, som brukes til å matche filene til en spesifikk bruker på en montert utenlandsk partisjon med en annen bruker på det gjeldende systemet.
  • Minne- og systemtjenester
    • Lagt til innledende støtte for LoongArch-instruksjonssettarkitekturen brukt i Loongson 3 5000-prosessorene, som implementerer den nye RISC ISA, lik MIPS og RISC-V. LoongArch-arkitekturen er tilgjengelig i tre varianter: nedstrippet 32-bit (LA32R), vanlig 32-bit (LA32S) og 64-bit (LA64).
    • Fjernet kode for å støtte det kjørbare filformatet a.out, som ble avviklet i versjon 5.1. A.out-formatet har lenge vært avviklet på Linux-systemer, og generering av a.out-filer støttes ikke av moderne verktøy i standard Linux-konfigurasjoner. Lasteren for a.out-filer kan implementeres utelukkende i brukerområdet.
    • Støtte for x86-spesifikke oppstartsalternativer er avviklet: nosp, nosmap, nosmep, noexec og noclflush).
    • Støtte for den utdaterte CPU h8300-arkitekturen (Renesas H8/300), som lenge har stått uten støtte, har blitt avviklet.
    • Utvidede muligheter knyttet til å svare på deteksjonen av delte låser ("split låser") som oppstår ved tilgang til ujusterte data i minnet på grunn av det faktum at når du utfører en atominstruksjon, krysser dataene to CPU-hurtigbufferlinjer. Slike blokkeringer fører til et betydelig fall i ytelse. Hvis tidligere, som standard, kjernen ville utstede en advarsel med informasjon om prosessen som forårsaket blokkeringen, nå vil den problematiske prosessen bremses ytterligere for å bevare ytelsen til resten av systemet.
    • Lagt til støtte for IFS (In-Field Scan)-mekanismen implementert i Intel-prosessorer, som lar deg kjøre CPU-diagnostiske tester på lavt nivå som kan identifisere problemer som ikke oppdages av standardverktøy basert på feilrettingskoder (ECC) eller paritetsbiter . Testene som utføres er i form av nedlastbar fastvare, designet på samme måte som mikrokodeoppdateringer. Testresultater er tilgjengelige via sysfs.
    • Lagt til muligheten til å bygge inn en bootconfig-fil i kjernen, som gjør det mulig, i tillegg til kommandolinjealternativer, å bestemme parameterne til kjernen gjennom en innstillingsfil. Innebygging utføres ved å bruke monteringsalternativet 'CONFIG_BOOT_CONFIG_EMBED_FILE=»/PATH/TO/BOOTCONFIG/FILE»'. Tidligere ble bootconfig bestemt ved å legge til initrd-bildet. Integrasjon i kjernen gjør at bootconfig kan brukes i konfigurasjoner uten en initrd.
    • Muligheten til å laste ned fastvare komprimert ved hjelp av Zstandard-algoritmen er implementert. Et sett med kontrollfiler /sys/class/firmware/* er lagt til sysfs, slik at du kan starte fastvareinnlasting fra brukerområdet.
    • Det asynkrone I/O-grensesnittet io_uring tilbyr et nytt flagg, IORING_RECVSEND_POLL_FIRST, som, når det er satt, først vil sende en nettverksoperasjon som skal behandles ved hjelp av polling, som kan spare ressurser i situasjoner der behandling av operasjonen med en viss forsinkelse er akseptabel. io_uring la også til støtte for socket()-systemkallet, foreslo nye flagg for å forenkle administrasjonen av filbeskrivelser, la til en "multi-shot"-modus for å akseptere flere tilkoblinger samtidig i accept()-anropet, og la til operasjoner for videresending av NVMe kommandoer direkte til enheten.
    • Xtensa-arkitekturen gir støtte for KCSAN (Kernel Concurrency Sanitizer) feilsøkingsverktøyet, designet for å dynamisk oppdage raseforhold i kjernen. Også lagt til støtte for hvilemodus og koprosessorer.
    • For m68k-arkitekturen (Motorola 68000) er en virtuell maskin (plattformsimulator) basert på Android Goldfish-emulatoren implementert.
    • For AArch64-arkitekturen er støtte for Armv9-A SME (Scalable Matrix Extension)-utvidelser implementert.
    • eBPF-undersystemet tillater lagring av innskrevne pekere i kartstrukturer, og legger også til støtte for dynamiske pekere.
    • En ny proaktiv minnegjenvinningsmekanisme er foreslått som støtter brukerplasskontroll ved å bruke filen memory.reclaim. Å skrive et nummer til den angitte filen vil forsøke å kaste ut det tilsvarende antallet byte fra settet som er knyttet til cgroup.
    • Forbedret nøyaktighet av minnebruk ved komprimering av data i swap-partisjonen ved hjelp av zswap-mekanismen.
    • For RISC-V-arkitekturen er det gitt støtte for å kjøre 32-biters kjørbare filer på 64-bits systemer, en modus legges til for å binde restriktive attributter til minnesider (for eksempel for å deaktivere caching), og funksjonen kexec_file_load() implementeres .
    • Implementeringen av støtte for 32-biters Armv4T- og Armv5-systemer er tilpasset bruk i universelle kjernebygg med flere plattformer som passer for forskjellige ARM-systemer.
  • Virtualisering og sikkerhet
    • EFI-delsystemet implementerer muligheten til å konfidensielt overføre hemmelig informasjon til gjestesystemer uten å avsløre den til vertssystemet. Dataene leveres gjennom security/coco-katalogen i securityfs.
    • Lockdown-beskyttelsesmodus, som begrenser root-brukertilgang til kjernen og blokkerer UEFI Secure Boot-bypass-baner, har eliminert et smutthull som tillot beskyttelsen å omgås ved å manipulere kjernefeilsøkeren.
    • Inkludert er patcher rettet mot å forbedre påliteligheten og ytelsen til pseudo-tilfeldig tallgenerator.
    • Når du bygger med Clang 15, implementeres støtte for mekanismen for randomisering av kjernestrukturer.
    • Landlock-mekanismen, som lar deg begrense interaksjonen mellom en gruppe prosesser og det eksterne miljøet, gir støtte for regler som lar deg kontrollere utførelsen av filnavneoperasjoner.
    • IMA-undersystemet (Integrity Measurement Architecture), designet for å verifisere integriteten til operativsystemkomponenter ved hjelp av digitale signaturer og hashes, har blitt byttet til å bruke fs-verity-modulen for filverifisering.
    • Handlingslogikken ved deaktivering av uprivilegert tilgang til eBPF-delsystemet har blitt endret - tidligere ble alle kommandoer knyttet til bpf()-systemkallet deaktivert, og fra og med versjon 5.19 er tilgang til kommandoer som ikke fører til opprettelse av objekter igjen. . Denne virkemåten krever en privilegert prosess for å laste et BPF-program, men da kan uprivilegerte prosesser samhandle med programmet.
    • Lagt til støtte for AMD SEV-SNP (Secure Nested Paging)-utvidelsen, som gir sikkert arbeid med nestede minnesidetabeller og beskytter mot "undeSERVed" og "SEVerity"-angrep på AMD EPYC-prosessorer, som gjør det mulig å omgå AMD SEV (Secure Encrypted Virtualization). ) beskyttelsesmekanisme.
    • Lagt til støtte for Intel TDX (Trusted Domain Extensions)-mekanismen, som lar deg blokkere tredjepartsforsøk på å få tilgang til det krypterte minnet til virtuelle maskiner.
    • Virtio-blk-driveren, som brukes til å emulere blokkenheter, har lagt til støtte for I/O ved bruk av polling, som ifølge tester har redusert ventetiden med omtrent 10 %.
  • Nettverksundersystem
    • Pakken inkluderer en serie med STORE TCP-patcher som lar deg øke den maksimale pakkestørrelsen til en TCP-pakke til 4 GB for å optimere driften av høyhastighets interne datasenternettverk. En lignende økning i pakkestørrelse med en 16-bits overskriftsfeltstørrelse oppnås gjennom implementering av "jumbo"-pakker, hvor størrelsen i IP-overskriften er satt til 0, og den faktiske størrelsen overføres i en separat 32-biters feltet i en egen vedlagt overskrift. Ved ytelsestesting økte pakkestørrelsen til 185 KB gjennomstrømningen med 50 % og reduserte dataoverføringsforsinkelsen betydelig.
    • 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.
    • Lagt til støtte for å falle tilbake MPTCP (MultiPath TCP)-tilkoblinger for å bruke vanlig TCP, i situasjoner der visse MPTCP-funksjoner ikke kan brukes. MPTCP er en utvidelse av TCP-protokollen for å organisere driften av en TCP-forbindelse med levering av pakker samtidig langs flere ruter gjennom forskjellige nettverksgrensesnitt knyttet til forskjellige IP-adresser. Lagt til API for å kontrollere MPTCP-strømmer fra brukerplass.
  • Оборудование
    • Lagt til over 420 400 linjer med kode relatert til amdgpu-driveren, hvorav ca. 22.5 21 linjer er autogenererte header-filer for ASIC-registerdata i AMD GPU-driveren, og ytterligere 4 21 linjer gir første implementering av støtte for AMD SoC13. Den totale driverstørrelsen for AMD GPUer oversteg 3 millioner linjer med kode. I tillegg til SoC7000 inkluderer AMD-driveren støtte for SMU XNUMX.x (System Management Unit), oppdatert støtte for USB-C og GPUVM, og er forberedt for å støtte neste generasjoner av RDNAXNUMX (RX XNUMX) og CDNA (AMD Instinct) plattformer.
    • i915-driveren (Intel) har utvidede muligheter knyttet til strømstyring. Lagt til identifikatorer for Intel DG2 (Arc Alchemist) GPUer brukt på bærbare datamaskiner, ga innledende støtte for Intel Raptor Lake-P (RPL-P) plattformen, lagt til informasjon om Arctic Sound-M grafikkort), implementert ABI for datamotorer, lagt til for DG2-kort støtter Tile4-formatet; for systemer basert på Haswell-mikroarkitekturen er DisplayPort HDR-støtte implementert.
    • Nouveau-driveren har byttet til å bruke drm_gem_plane_helper_prepare_fb-behandleren; statisk minneallokering har blitt brukt på noen strukturer og variabler. Når det gjelder bruken av kjernemoduler med åpen kildekode av NVIDIA i Nouveau, handler arbeidet så langt om å identifisere og eliminere feil. I fremtiden er den publiserte fastvaren planlagt brukt til å forbedre driverytelsen.
    • Lagt til en driver for NVMe-kontrolleren som brukes i Apple-datamaskiner basert på M1-brikken.

Samtidig dannet Latin American Free Software Foundation en versjon av den helt gratis kjernen 5.19 - Linux-libre 5.19-gnu, renset for elementer av fastvare og drivere som inneholder ikke-frie komponenter eller deler av kode, hvis omfang er begrenset av produsenten. Den nye utgivelsen rydder opp i driverne for pureLiFi X/XL/XC og TI AMx3 Wkup-M3 IPC. Oppdatert blob-rensekode i Silicon Labs WFX, AMD amdgpu, Qualcomm WCNSS Peripheral Image Loader, Realtek Bluetooth, Mellanox Spectrum, Marvell WiFi-Ex, Intel AVS, IFS, pu3-imgu-drivere og undersystemer. Behandling av Qualcomm AArch64 devicetree-filer er implementert. Lagt til støtte for det nye navneskjemaet for Sound Open Firmware-komponenter. Sluttet å rense ATM Ambassador-driveren, som ble fjernet fra kjernen. Håndtering av blob-rensing i HDCP og Mellanox Core er flyttet til separate kconfig-tagger.

Kilde: opennet.ru

Legg til en kommentar