Utgivelse av Linux-kjerne 6.12 med støtte for sanntidsmodus

Etter to måneder med utvikling presenterte Linus Torvalds utgivelsen av Linux-kjernen 6.12. Blant de mest bemerkelsesverdige endringene: muligheten til å aktivere sanntidsmodus, sched_ext for å lage CPU-planleggere via eBPF, utdata av en QR-kode i nødssituasjoner, Device Memory TCP-mekanisme, ressursreservasjonsmekanisme SCHED_DEADLINE-server, forbedring av EEVDF-oppgaveplanleggeren, IPE-modul for å sette integritetspolicyer.

Den nye versjonen inkluderer 14607 2167 rettelser fra 37 13087 utviklere, patchstørrelsen er 507913 MB (endringene berørte 234083 15130 filer, 2078 85 linjer med kode ble lagt til, 6.10 41 linjer ble slettet). Den siste utgivelsen hadde 45 6.12 rettelser fra 12 13 utviklere, patchstørrelsen var 6 MB (i 3-kjernen var patchen XNUMX MB stor). 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 6.12:

  • Minne- og systemtjenester
    • Det er mulig å bygge kjernen med PREEMPT_RT-alternativet uten ekstra patcher for sanntidsdrift. Den siste funksjonen som manglet fra kjernen som forhindret at PREEMPT_RT ble aktivert, var støtte for ikke-blokkerende atomutgang via printk-funksjonen, som også er inkludert i kjernen. PREEMPT_RT-støtte er tilgjengelig for x86, x86_64, ARM64 og RISC-V arkitekturer. Inntil nå ble implementeringen av PREEMPT_RT-modusen levert i form av eksterne patcher, på grunnlag av hvilke noen distribusjoner, som RHEL, SUSE og Ubuntu, opprettet separate sanntidsutgaver av produktene deres, etterspurt innen områder som finanssystemer , lyd- og videobehandlingsenheter, og luftfart, medisin, robotikk, telekommunikasjon og industrielle systemer der det er nødvendig å sikre forutsigbare hendelsesbehandlingstider.
    • Mekanismen «sched_ext» (SCX) er lagt til, slik at eBPF kan brukes til å lage CPU-planleggere som dekker praktisk talt alle aspekter av oppgaveplanlegging og CPU-ressursallokering. Slike planleggere kan lastes inn og kjøres dynamisk i Linux-kjernen. virtuell maskin eBPF. Sched_ext-mekanismen forenkler opprettelsen av oppgavespesifikke planleggere, muliggjør eksperimentering med ulike planleggingsteknikker og -strategier, og muliggjør rask opprettelse av fungerende prototyper og utskifting av planleggere i produksjonsinfrastrukturer underveis. Ved å bruke sched_ext kan du for eksempel opprette en planlegger som tar hensyn til detaljene til en bestemt applikasjon og dynamisk endrer planleggingsstrategien avhengig av systemtilstanden og andre faktorer.
    • Sammensetningen inkluderer den resterende delen av oppdateringene som er nødvendige for driften av SCHED_DEADLINE-servermekanismen, som løser problemet med underutnyttelse av CPU-ressurser ved vanlige oppgaver når CPU-en er monopolisert av høyprioriterte (sanntids)oppgaver. For å forhindre CPU-monopolisering brukte kjernen tidligere strupemekanismen i sanntid, som prøvde å reservere 5 % for lavprioriterte oppgaver, og 95 % av tiden ble igjen til sanntidsoppgaver. Denne mekanismen etterlot mye å være ønsket, siden vanlige oppgaver i mange situasjoner ikke fikk nok prosessortid. SCHED_DEADLINE-serveren implementerer en mer effektiv ressursreservasjonsmekanisme.
    • Integreringen av EEVDF (Earliest Eligible Virtual Deadline First) oppgaveplanleggeren er fullført, som erstattet CFS (Completely Fair Scheduler) planleggeren, levert fra kjerne 2.6.23. Når du velger neste prosess for å overføre utførelse, tar den nye planleggeren hensyn til prosesser som ikke har mottatt nok prosessorressurser eller har fått en ufortjent stor mengde prosessortid. I det første tilfellet tvinges overføringen av kontroll til prosessen, og i det andre, tvert imot, blir den utsatt. Den gamle CFS-planleggeren brukte heuristikk og finjustering for å identifisere prosesser som trengte spesiell oppmerksomhet, mens den nye planleggeren sporer dem mer eksplisitt og ikke krever finjustering. EEVDF forventes å redusere forsinkelser i oppgaver som CFS har hatt planleggingsproblemer med.
    • I kjernenødbehandleren - DRM Panic, som bruker DRM (Direct Rendering Manager)-delsystemet for å vise en visuell rapport i stil med "blue screen of death", muligheten til å vise en logo og en QR-kode med en kmsg-rapport på skjermen når en nødsituasjon oppstår er lagt til. Siden bare 2953 byte passer inn i en QR-kode, er DRM_PANIC_SCREEN_QR_CODE_URL-alternativet gitt, der kmsg-rapporten komprimeres ved hjelp av zlib og festes som en parameter til URL-en, som gjør at omtrent 40 byte kan overføres gjennom V7500 QR-koden. Når du bygger pakker med kjernen, kan distribusjoner angi en basis-URL for URL-en, som lar dem navigere til en side for å rapportere et problem. For å velge QR-kodeformat, er DRM_PANIC_SCREEN_QR_VERSION-innstillingen gitt.
    • Lagt til støtte for ARM POE (Permission Overlay Extension), som lar deg angi tilgangsrettigheter til minneområder. Ved å bruke denne utvidelsen, på systemer med ARM64-prosessorer, kan Memory Protection Keys-mekanismen implementeres, som brukes til å begrense tilgangen til minnesider uten å endre minnesidetabellen.
    • For Loongarch-, ARM64-, PowerPC- og s390-arkitekturene har implementeringen av systemkallet getrandom() blitt flyttet, optimalisert ved hjelp av vDSO-mekanismen (virtual dynamic shared object), som gjør det mulig å flytte systemanropsbehandleren fra kjernen til brukerplass og unngå kontekstbytter. Optimalisering lar deg fremskynde genereringen av tilfeldige tall med opptil 15 ganger.
    • Muligheten til å bruke absolutte tidsavbrudd, utløst når en bestemt tid er nådd på systemklokken, er lagt til det io_uring asynkrone inngangs/utgangsundersystemet (tidligere kunne bare relative tidsavbrudd settes, som indikerte varigheten fra begynnelsen av operasjonen ).
    • Lagt til filer for å generere bindinger for libcpupower-biblioteket ved hjelp av SWIG-verktøysettet, som lar deg generere bindinger fra C/C++-kode for ulike programmeringsspråk. Bindinger lar deg lage skript i Python og andre språk, og bruke dem til å utvide funksjonaliteten til libcpupower-biblioteket, som gir en API for å administrere cpufreq og drivere fra brukerplass.
    • Cpuidle-verktøyet viser verdien av inaktiv tilstand "residency", brukt for sanntidssystemer og tar hensyn til minimumstiden som prosessoren må være i inaktiv tilstand for å rettferdiggjøre energikostnadene ved overgang til og ut av denne tilstanden.
    • Lagt til muligheten til å bruke Clang-kompilatoren for å bygge standard C-biblioteket nolibc, som er inkludert i Linux-kjernens kildekode og gir et rammeverk for grunnleggende systemanrop. Når du bygger nolibc i Clang, er link-time optimization (LTO) tillatt.
    • Noen cgroup1-grensesnitt har blitt avviklet, for eksempel TCP-regnskap, soft limit versjon XNUMX og håndtering av minneutmattelse. Støtten for disse funksjonene er fortsatt full for nå, og advarselen er laget for å studere antall brukere som fortsetter å bruke disse funksjonene.
    • Lagt til muligheten til å konfigurere en ringsporingsbuffer for å lagre akkumulerte data etter en omstart, som vil tillate deg å ikke miste akkumulert feilsøkingsinformasjon i tilfelle en kjernekrasj. Dataene lagres i minnet. Aktivering gjøres via kommandolinjeparameteren trace_instance kernel, for eksempel vil innstillingen "trace_instance=boot_map@0x285400000:12M" reservere 12 MB minne på 0x285400000 for "boot_map"-bufferen, som vil være tilgjengelig gjennom filen /sys/kernel /tracing/instances/boot_map.
    • Fortsatt migrering av endringer fra Rust-for-Linux-grenen relatert til bruken av Rust-språket som andrespråk for utvikling av drivere og kjernemoduler (Rust-støtte er ikke aktiv som standard, og fører ikke til inkludering av Rust blant nødvendige monteringsavhengigheter for kjernen). Lagt til "list" og "rbtree" moduler for å jobbe med toveis koblede lister og rød-svarte trær. Mulighetene til modulene 'init', 'sync', 'types' og 'error' er utvidet. Det er mulig å bruke Rust-kode når du bygger en kjerne med beskyttelse mot Spectre-angrep (MITIGATION_{RETHUNK,RETPOLINE,SLS}-alternativer), ved å bruke KASAN-feilsøkingssystemet, kCFI (kernel Control Flow Integrity) og Shadow Call-beskyttelsesmekanismer, samt når du bruker ekstra plugins GCC. Lagt til driver for Applied Micro QT2025 PHY Ethernet-kontroller, skrevet i rust. Det er utarbeidet en egen nettside med dokumentasjon - rust.docs.kernel.org.
    • Xdrgen-verktøyet er lagt til kjernekildekoden for å konvertere XDR-spesifikasjoner (ekstern datarepresentasjon) til XDR-kodings- og dekodingsfunksjoner skrevet ved hjelp av C-stilen tatt i bruk i Linux-kjernen.
    • Kjernen har tatt i bruk en endring for å implementere en pekermaskeringsmekanisme for å redusere antall langsomme kall til barrier_nospec() i 64-biters copy_from_user()-funksjonen, brukt til å kopiere data inn i kjernen fra brukerplass. Bruk av maskering øker hastigheten på "per_thread_ops"-testen, som evaluerer antall operasjoner som kan utføres i én tråd, med 2.6 %.
    • En ny USB-driver er lagt til som lar deg bruke 9pfs-protokollen som en transport for å sende og motta data fra en USB-enhet når du monterer 9p-filsystemet over USB (for eksempel "mount -t 9p -o trans=usbg, aname=/bane/til/ fs /mnt/9"). Et eksempel på bruken av den nye driveren er bruken av NFS i stedet for å organisere oppstarten av rotpartisjonen ved utvikling av innebygde enheter.
  • Diskundersystem, I/O og filsystemer
    • Muligheten til å arbeide med lagringsenheter hvis blokkstørrelse er større enn størrelsen på minnesiden i systemet er lagt til VFS-undersystemet. I filsystemer støttes denne funksjonen for øyeblikket kun i XFS.
    • FUSE-undersystemet, som lar deg lage implementeringer av filsystemer som opererer i brukerområdet, har lagt til støtte for kartlegging av brukeridentifikatorer for monterte filsystemer, brukt til å matche filene til en spesifikk bruker på en montert utenlandsk partisjon med en annen bruker på gjeldende system.
    • En ny fcntl-operasjon, F_CREATED_QUERY, har blitt implementert, og gir et program muligheten til å bestemme om en fil som ble åpnet med O_CREAT-flagget ble opprettet eller om den allerede eksisterte før.
    • Lagt til muligheten til å bruke unike 64-bits monteringspunkt-ID-er til systemkallet name_to_handle_at() for å unngå raseforhold ved parsing av /proc/mountinfo.
    • Størrelsen på "fil"-strukturen i kjernen er redusert fra 232 til 184 byte, noe som reduserer minneforbruket på systemer som aktivt jobber med filer.
    • Montering av filsystemer for å montere punkter innenfor /proc-hierarkiet, slik som /proc/PID/fd, var forbudt, noe som skapte potensielle sikkerhetsproblemer.
    • Pseudo-FS NSFS (NameSpace FS), som brukes til å arbeide med navneområder, gir tilleggsinformasjon om navneområdene til monteringspunkter.
    • EROFS-filsystemet (Extendable Read-Only File System), designet for bruk på skrivebeskyttede partisjoner, støtter nå montering av filsystemer direkte fra diskbilder lagret som filer.
    • Nye ioctl-kommandoer XFS_IOC_START_COMMIT og XFS_IOC_COMMIT_RANGE er lagt til XFS for utveksling av innhold mellom to filer.
    • NFS har lagt til støtte for «LOCALIO»-protokollen, som lar deg finne ut om NFS-klienten og serveren er på samme vert, for å aktivere passende optimaliseringer.
    • I Btrfs-filsystemet er ytelsesoptimaliseringer blitt foreslått, koden har blitt refaktorert, området for omfanget av låsing under leseoperasjoner er redusert, arbeidet har fortsatt med å konvertere minnesider til bruk av sidefolioer, og automatisk minneutgivelse er blitt implementert for btrfs_path-strukturen.
    • I Ext4-filsystemet er feil knyttet til blokkallokering, omfangsadministrasjon, rask commit og journalføring blitt fikset.
  • Virtualisering og sikkerhet
    • Lagt til IPE (Integrity Policy Enforcement) LSM-modulen, utviklet av Microsoft for å utvide det eksisterende obligatoriske tilgangskontrollsystemet. Modulen lar deg definere en generell integritetspolicy for hele systemet, som indikerer hvilke operasjoner som er tillatt og hvordan autentisiteten til komponentene skal verifiseres. For eksempel, ved å bruke IPE, kan du spesifisere hvilke kjørbare filer som er tillatt å kjøre, med tanke på deres samsvar med referanseversjonen ved å bruke kryptografiske hashes levert av dm-verity-systemet.
    • På kjernekompileringsstadiet er det mulig å aktivere tilgjengelige metoder for beskyttelse mot forskjellige Spectre-klassesårbarheter i CPU-en separat. Kconfig tilbyr nye parametere: MITIGATE_MDS (beskyttelse mot sårbarheten for Microarchitectural Data Sampling), MITIGATE_TAA (beskyttelse mot TSX Asynchronous Abort-sårbarheten), MITIGATE_MMIO_STALE_DATA (beskyttelse mot MMIO Stale Data-sårbarheten), MITIGATE_L1TF-sårbarheten (beskyttelse mot L1TF), FIGATE_L1TF (beskyttelse) (beskyttelse mot Retbleed-sårbarheter), MITIGATE_SPECTRE_V2, MITIGATE_SPECTRE_VXNUMX (beskyttelse mot Spectre-sårbarheter), MITIGATE_SRBDS (beskyttelse mot sårbarheten for spesialregisterbufferdatasampling), MITIGATE_SSB (beskyttelse mot sårbarheten for Speculative Store Bypass).
    • Lagt til kommandolinjealternativet proc_mem.force_override og et sett med byggeinnstillinger i Kconfig (PROC_MEM_FORCE_ALWAYS, PROC_MEM_FORCE_PTRACE og PROC_MEM_FORCE_NEVER) for å forhindre minneendringer via /proc/pid/mem.
    • LSM (Linux sikkerhetsmodul) delsystemet har blitt byttet til å bruke statiske anrop, noe som har forbedret sikkerheten og forbedret ytelsen.
    • Det er mulig å bruke standardkjerner for ARM64-arkitekturen i gjestemiljøer som kjører på Android-systemer med en modifisert KVM (beskyttet KVM) hypervisor.
    • Landlock LSM-modulen, som lar deg begrense interaksjonen av en gruppe prosesser med det eksterne miljøet, implementerer "IPC scoping"-konseptet for å selektivt begrense interaksjon med sandkassemiljøer ved hjelp av Unix-sokler og -signaler. Du kan for eksempel forby tilkoblinger som bruker Unix-sockets fra et sandkassemiljø til prosesser som ikke har isolasjon brukt, men tillate tilkoblinger til prosesser i samme omfang.
    • I KVM-hypervisoren er et flagg lagt til CPUID for gjestesystemer som indikerer støtte for AVX10.1-utvidelser.
  • Nettverksundersystem
    • Enhetsminne-TCP-mekanismen er lagt til, slik at bruk av nettverkskontakter kan sende innholdet i minnet til eksterne enheter direkte over nettverket (nullkopimodus) og direkte plassere innholdet av nettverkspakker i enhetens minneområde på mottakersiden. Data som overføres i pakker overføres fra nettverkskortet til minnet til en perifer enhet eller fra enhetsminnet til nettverkskortet direkte, utenom CPU, og pakkehodene havner i vanlige kjernebuffere.
    • Mulighetene til mange Ethernet- og trådløse drivere er utvidet. For eksempel la Intel iwlwifi-driveren til støtte for å flytte RLC/SMPS-operasjoner til fastvaresiden, RealTek rtw89-driveren økte ytelsen og la til støtte for RTL8852BT/8852BE-VT (WiFi 6)-brikker, mikrobrikken Ethernet-driveren la til støtte for IEEE 802.3 bw (100BASE) spesifikasjoner -T1) og IEEE 802.3bp, forbedrede virtuelle Ethernet-implementeringer Microsoft vNIC og IBM veth. Lagt til nye drivere for Realtek RTL9054, RTL9068, RTL9072, RTL9075, RTL9068, RTL9071 og Microchip LAN8650/1 10BASE-T1S MAC-PHY Ethernet-brikker.
    • I MPTCP (MultiPath TCP), en utvidelse av TCP-protokollen for å organisere levering av TCP-pakker samtidig langs flere ruter gjennom forskjellige nettverksgrensesnitt, økes størrelsen på vektene som brukes i ruting fra 8 til 16 biter. Implementert deteksjon av tapt (svarthull) trafikk og suspendering i noen tid av forsøk på å etablere forbindelser med systemer som fører til tap av trafikk.
    • For IPv6 er støtte implementert for "p"-flagget i PIO (Prefix Information Option), brukt i RA-annonser (IPv6 Router Advertisements) for å velge en klientimplementeringsmodell via DHCPv6-PD (DHCPv6 Prefix Delegation, RFC9663) i stedet for å tildele individuelle adresser basert på prefikser ved bruk av SLAAC (Stateless Address Autoconfiguration). IPv6 IOAM6 legger til støtte for en ny tunsrc-innkapslingsmodus for forbedret ytelse.
    • Forbedret ytelse for behandling av IPsec-kontrollpakker.
    • Forbedret ytelse for skylling av store nftables regelsett. nfnetlink_queue har forbedret SCTP-støtte.
    • Ethtool API har lagt til støtte for å binde flere nettverkskort til ett nettverksgrensesnitt.
  • Оборудование
    • I AMDGPU-driveren fortsetter arbeidet med å implementere støtte for AMD RDNA4 (“GFX12”) GPUer. Lagt til muligheten til å tilbakestille individuelle oppgavekøer uten å tilbakestille hele GPUen.
    • Arbeidet fortsatte med Xe drm-driveren (Direct Rendering Manager) for GPUer basert på Intel Xe-arkitekturen, som brukes i Intel Arc-familiens skjermkort og integrert grafikk, og startet med Tiger Lake-prosessorer. Den nye versjonen inkluderer støtte for GPUer basert på mikroarkitekturene Battlemage og Lunar Lake. Støtte for CCS (Color Control Surface) Xe2-modifikatorer har blitt introdusert for å kontrollere parametrene til integrerte og diskrete GPUer.
    • i915-driveren implementerer muligheten til å sende ut informasjon om viftehastigheten via HWMON- eller sysfs-grensesnittet («fan1_input»-attributtet). "i915.modeset"-parameteren er utdatert. Parameteren "i915.nomodeset" skal brukes i stedet for "i0.modeset=915".
    • Lagt til støtte for A615, A306 og A621 GPUer til msm DRM-driveren (Qualcomm Adreno GPU).
    • Nouveau-sjåføren har fått sine indre strukturer omarbeidet og renset.
    • Intel_pstate-driveren, som kontrollerer strømforbruksparametere (P-state) på systemer med Intel-prosessorer, har lagt til støtte for hybridsystemer med asymmetriske (ulike egenskaper) CPUer, samt støtte for strømstyring av prosessorer basert på Granite Rapids og Sierra Forest mikroarkitekturer. Lagt til støtte for Xeon Granite Rapids CPU til intel_idle-driveren. Intel_rapl-driveren gir gjenkjennelse av prosesser i AMD 1Ah-familien og Intel ArrowLake-U-prosessorer.
    • Fortsatt inkludering av endringer for å støtte ARM SoC Snapdragon X Elite, som bruker Qualcomms egen 12-kjerners Oryon CPU og Qualcomm Adreno GPU. Brikken er rettet mot bruk i bærbare og PC-er, og er foran Apple M3- og Intel Core Ultra 155H-brikkene i mange ytelsestester.
    • Lagt til støtte for ARM-kort, SoC-er og enheter: Broadcom bcm2712 (Raspberry Pi 5), Renesas R9A09G057 (RZ/V2H), Qualcomm Snapdragon 414 (MSM8929), Lenovo ThinkPad T14s Gen 6, Lenovo A6000/A6010 Laptop RG 7, Surface 35/A30. , Firefly Core-PX4-JD68, Lunzn Fastrhino R433S, Aspeed Riser, AGX Orin, Rockchip Qnap-TS2, Huashan Pi, Meta Catalina, BeagleY-AI, NanoPi R920S Plus, ExynosAuto v2002, SOPHGO SG5332, LG4, LG815h, G5h, LG35h11 Kul Pi CM93 GenBook, Anbernic RG6XXSP, GameForce Ace, IBM PXNUMX, Kontron i.MXXNUMX OSM-S, NanoPC-TXNUMX
    • Lagt til støtte for Anbernic RG28XX, On Tat Industrial Company KD50G21-40NT-A1, Innolux G070ACE-LH3, Melfas lmfbx101117480, Densitron DMT028VGHMCMI-1D, Microchip AC40T08A, AOU B116OXTAU-skjermer. B02.3XAN116, AOU B06.1XAT116, BOE TV04.1WUM-LL101, BOE NV2WUM-N140, BOE NV41WUM-N133, BOE NV63WHM-A116D, BOE NE4WUM-N140G, CMCNN-N6W-N116, 2BCN-N116-N2-N601-N1-N4G MNB88577LSXNUMX-XNUMX, Starry erXNUMX.
    • Lydundersystemet har lagt til støtte for brikker og kodeker RME Digiface USB, AMD ACP 7.1, Mediatek MT6367, MT8365, Realtek RTL1320, C-Media CM9825. Gamle lyddrivere for Intel ASoC er erklært foreldet, og det anbefales å bruke AVS-drivere i stedet. Mange forbedringer er gjort i SoundWire-driveren.

Kilde: opennet.ru

Legg til en kommentar