Udgivelse af Linux-kernen 6.11

Efter to måneders udvikling præsenterede Linus Torvalds udgivelsen af Linux-kernen 6.11. Blandt de mest markante ændringer er: understøttelse af atomiske skriveoperationer på blokniveau, understøttelse af bind()- og listen()-operationer i io_uring, en ny mekanisme til låsning af softwareinterruptbehandlere, muligheden for at skrive til spejlede udførelsesfiler i hukommelsen, støtte til at skrive enhedsdrivere til blokenheder på Rust-sprog og optimering af kaldet til getrandom(), samt en ny implementering af AES-GCM.

Den nye version indeholder 15130 rettelser fra 2078 udviklere, patch-størrelsen er 85 MB (ændringerne påvirkede 13282 filer, 985857 kodelinjer blev tilføjet, 268915 linjer blev fjernet). I den tidligere udgave var der 14564 rettelser fra 1989 udviklere, patch-størrelsen var 41 MB (det er to gange mindre end patchen til kerne 6.11). Omtrent 46% af alle ændringerne præsenteret i 6.11 er relateret til enhedsdrivere, cirka 17% af ændringerne vedrører opdatering af hardware-specifik kode, 10% relaterer til netværksstakken, 5% til filsystemer, og 3% til interne delsystemer af kernen.

De vigtigste nyheder i kernen 6.11:

  • DiskSubsystem, input/output og filsystemer
    • Understøttelse af atomiske skriveoperationer på blokniveau er implementeret, hvor enten hele det angivne sæt af blokke skrives til lageret, eller ingen blokke skrives, hvilket beskytter mod situationer, hvor kun en del af blokkene skrives efter et hardwarefejl, mens den anden del forbliver med gamle oplysninger. For at aktivere den atomiske skrive-tilstand er der tilføjet en flag RWF_ATOMIC til systemopkaldet pwritev(). Oplysninger om understøttelse af atomar skrivning (atomic_write_unit_min, atomic_write_unit_max og atomic_write_segments_max) i relation til individuelle filer kan hentes ved hjælp af funktionen statx().
    • Understøttelse af skrivning til udførelsesfiler, der er relateret til kørende processer, er givet. Tidligere, som med andre Unix-lignende systemer, viste kernen en fejl ved forsøg på at skrive til en udførelsesfil for en aktiv proces. Denne begrænsning er blevet fjernet, da den manglede praktisk mening.
    • Muligheden for at udvikle enhedsdrivere til blokenheder på Rust-sprog er implementeret. Som eksempel er driveren rnull, der fungerer som en analog til driveren null_blk, skrevet på Rust-sproget, tilføjet til kernen.
    • I filersystemet Btrfs er der i monteringsmulighederne "rescue=" tilføjet støtte til de nye indstillinger "ignoremetacsums" og "ignoresuperflags", som kan bruges til at overføre nogle kontroller til brugerrummet ved genopretning af FS efter en fejl. Implementeringen af operationen for dynamisk tilbageførsel af blokgrupper er ombygget for at undgå situationer med mangel på fri plads under betingelser med ufuldstændig udfyldning af FS.
    • I filersystemet ntfs3 er der tilføjet støtte til attributterne "compressed" og "immutable", som definerer komprimerede og uforanderlige filer.
    • I FS F2FS og Ext4 er håndteringen af filnavne uden hensyn til symbolernes store og små bogstaver (casefold) forenklet ved at gemme navnene i form af qstr-strenge uden unødvendige store/små omdannelser.
    • I FS Ext4 er implementeringen af funktionen jbd2_transaction_committed optimeret for at forbedre ydeevnen på meget hurtige medier (test har vist en stigning i behandlede operationer pr. sekund på op til 20%).
    • I systemopkaldet statx() er det nu tilladt at sende en NULL-pegepind i stedet for en tom streng med filstien, når flaget AT_EMPTY_PATH er sat.
    • I systemopkaldet open_by_handle_at() er adgangsretterne til filen blevet lettet, når der ikke er beføjelserne CAP_DAC_READ_SEARCH til at søge i det indledende navnerum. Tidligere gjorde kravet om beføjelserne CAP_DAC_READ_SEARCH til det indledende navnerum det umuligt at bruge systemopkaldet open_by_handle_at() i containere.
    • Mulighederne for systemopkaldene listmount() og statmount() er blevet udvidet. I listmount() er flaget LISTMOUNT_REVERSE tilføjet for at vise indholdet af monteringspunkttabellen i omvendt rækkefølge (de nyeste poster øverst). I statmount() er der implementeret visning af de indstillinger, der blev sat ved montering af FS. I begge systemopkald er det tilladt at arbejde uden adgang til det indledende navnerum (når der kun er adgang til det lokale eller eksterne navnerum).
    • I FS Bcachefs er der tilføjet støtte til automatisk gennemsigtig genopretning af problematiske data ved hjælp af fejlkorrigeringskoder — hvis der opstår en input/output-fejl under læsning, eller der er beregnet en checksum-fejl, genskrives den problematiske datablock automatisk, hvis der er redundans til at genoprette den.
  • Hukommelse og systemtjenester
    • Der er blevet vedtaget patches med implementeringen af en ny mekanisme til bloksprogrammering af interrupt handler (BH, bottom-half), som sikrer blokering af anvendte datakonstruktioner, uden at det blokkerer parallel udførelse af urelateret kode. Det bemærkes, at ændringen ikke kun har reduceret forsinkelser for kerner, der kører i realtid, men også har forbedret ydeevnen for almindelige kerner (for eksempel, i visse belastningsformer observeres en performanceforbedring af netværkssystemet på 14,5%).
    • Der er tilføjet understøttelse af operationer i io_uring under det asynkrone I/O subsystem til implementering af funktionerne bind() og listen(), som bruges til at oprette modtagersocket-forbindelser.
    • Der er blevet tilføjet et sæt ioctl-operationer for den pseudo-filsystem NSFS (NameSpace FS), der anvendes til arbejde med navneområder. De nye ioctl muliggør konvertering af proces- og trådgruppeidentifikatorer mellem forskellige procesidentifikationsområder (PID namespace). Lignende ioctl, der muliggør at bestemme fildeskriptorer for processer i separate navneområder baseret på pidfd-identifikatorer, er også blevet tilføjet til pseudo-filsystemet pidfd.
    • Der er tilføjet understøttelse af en ny iterator til BPF-programmer, som arbejder med bitmasker og kan bruges, for eksempel til at iterere over individuelle bits i hukommelsesområder som cpumask. Der er tilføjet en mekanisme til at sende meddelelser om frakobling (detach/unregister) af struct_ops-objekter til processer i brugerrummet. Omfanget af typer, der kan bruges i arrays, er udvidet (for eksempel kan der deklareres arrays med elementer af typerne kptr, bpf_rb_root og bpf_list_head). Der er foreslået en mere pålidelig mekanisme, Split BTF (BPF Type Format), der bruges til typekontrol i BPF-pseudokode.
    • Der er tilføjet et subsystem, der muliggør strømforsyning til enheder i en bestemt rækkefølge, i tilfælde af at enheden skal aktiveres før en anden (for eksempel ved aktivering af trådløse chips på Qualcomm-platforme).
    • Der er tilføjet modulet 'Sloppy logic analyzer', som gør det muligt at oprette simple logiske signalanalyseværktøjer, der bruger GPIO og kører på en separat CPU-kerne.
    • Der er tilføjet support for runtime-konstanter, der kan bruges i stedet for variabler, der kun initialiseres én gang. For eksempel kan runtime-konstanter anvendes i stedet for variabler, der gemmer en peger og størrelse for dentry-cache. Disse variabler indstilles under opstart og ændres aldrig derefter. Ideen er at indsætte værdierne fra sådanne variabler direkte i instruktionerne i koden, hvilket eliminerer omkostningerne ved at manipulere med pekere.
    • Ændringer fra Rust-for-Linux-grenen vedrørende brugen af Rust som det andet sprog til udvikling af drivere og kernelmoduler fortsætter. Rust-support er ikke aktiveret som standard og gør ikke Rust til en obligatorisk byggeafhængighed for kernen. Support for Rust-version 1.80 er tilføjet (men Rust 1.78 forbliver den mindste understøttede version). Udover de tidligere nævnte værktøjer til udvikling af blokenhedsdrevere er der tilføjet abstraktioner til indlæsning af firmware, adgang til brugerrum (uaccess) og arbejde med 'page'-strukturer i den nye version.
    • Der er implementeret et nyt systemopkald uretprobe() for x86-64-systemer, som optimerer funktionen af uretprobe-sporingsmekanismen, der muliggør overvågning af returnerede værdier fra funktioner i brugerrum-programmer.
    • Der er tilføjet kernelkommando-linjeparametre: "reserve_mem" til at reservere et navngivet hukommelsesområde under opstart og "ramoops.mem_name" til brug i pstore-hukommelsesområdet, der er oprettet via reserve_mem.
    • Til cgroup-baseret hukommelseskontrol er der tilføjet parameteren "swappiness" til filen memory.reclaim, som bestemmer indstillingerne for hukommelsesudvisning, hvilket muliggør ændring af balancen mellem udkastning af anonyme hukommelsessider til swap og frigivelse af hukommelsessider, der er optaget af filcache.
    • Der er tilføjet en ioctl-grænseflade PROCMAP_QUERY for mere effektivt at søge efter virtuelle hukommelsesområder (Virtual Memory Area) i /proc/PID/maps.
    • Der er tilføjet et flag MAP_DROPPABLE til systemopkaldet mmap() for at anmode om hukommelse, der aldrig vil blive udvekslet til swap, men som kan fjernes i tilfælde af hukommelsesmangel.
    • Support til hot-plugging (overgang til online/offline-tilstande) for fysiske og virtuelle CPU'er på systemer med ACPI er implementeret for ARM64-arkitekturen.
    • RISC-V-arkitekturen understøtter nu hot-plugging af hukommelse og har fået tilføjet understøttelse af GCC-pluginet STACKLEAK (som initialiserer alle variabler gemt på stakken for at forhindre lækage af oplysninger fra kernen via uinitialiserede variabler, der kan indeholde rester af tidligere gemte data på stakken).
    • Den falske EFI-hukommelseskortlæggemekanisme (fake EFI memory map) er fjernet under opstart. Denne mekanisme blev ikke brugt i praksis og hindrede udviklingen inden for fortroligt udførelse. virtual machines.
    • Understøttelsen af PowerPC 40x-platformen er stoppet.
    • Kravene til versionen af GNU Make er blevet hævet — der kræves mindst en udgivelse af GNU Make, der blev offentliggjort i 2013, for at kompilere kernen.
  • Virtualisering og sikkerhed
    • Patchene, der markant (op til 15 gange) accelererer genereringen af tilfældige tal via systemopkaldet getrandom(), er blevet integreret. Optimeringen er baseret på brugen af vDSO-mekanismen (virtual dynamic shared object), som muliggør flytning af systemopkalderens behandler fra kernen til brugerens rum og undgår konteksskift. Implementeringen af systemopkaldet indlæses direkte i procesens adresseområde af kernen.
    • For x86-64-systemer er der inkluderet en ny implementering af AES-GCM-krypteringsalgoritmen, der understøtter brugen af vektoriserede instruktioner som VAES, VPCLMULQDQ og AVX512/AVX10 for at fremskynde beregningerne. Testresultater viser en præstationsforøgelse på op til 156% efter overgangen til den nye implementering. Den assemblerede implementering af AES-GCM er fuldstændigt genindskrevet med hensyn til korrekthed, ydeevne, størrelse og omfattende dokumentation af koden.
    • Muligheden for at køre kernen som et gæstesystem i virtualiserede miljøer, der bruger AMD SEV-SNP (Secure Nested Paging) processorudvidelsen, er blevet implementeret. Denne er designet til at sikre sikker håndtering af indlejrede hukommelsestabeller. For yderligere isolation af adgang til ressourcer fra virtuelle maskiner kan SVSM-modulet (Linux Secure VM Service Module) anvendes. I hypervisoren KVM er der tilføjet indledende support til at starte gæstesystemer, der er beskyttet ved hjælp af AMD SEV-SNP.
    • En separat bucket slab allocator er blevet tilføjet, som kan aktiveres via parameteren CONFIG_SLAB_BUCKETS, og som beskytter mod angreb ved hjælp af 'heap spraying'-teknikker.
    • I hypervisor KVM er der tilføjet en ioctl-anrop til proaktiv tildeling af hukommelse til gæstesystemet før dets faktiske opstart.
  • Netværkssubsystem
    • Der er tilføjet en sysctl-parameter net.tcp_rto_min_us, som gør det muligt at konfigurere den minimale retransmission timeout for TCP-sokler.
    • Der er tilføjet mulighed for finjustering af afbryderhåndteringskonfigurationen til netværksinterface i værktøjet ethtool, som bruger Net DIM-interfacet.
  • Udstyr
    • I AMDGPU-driveren er der tilføjet grundlæggende support for GPU AMD RDNA4 ('GFX12'). Der er tilføjet support for teknologierne DCN 4.0.x, GC 12.0, GMC 12.0, SDMA 7.0, MES12 og MMHUB 4.1.
    • Arbejdet med drm-driveren (Direct Rendering Manager) Xe til GPU'er baseret på Intel Xe-arkitekturen, der anvendes i Intel Arc-grafikkort og integreret grafik, startet med Tiger Lake-processorer, er fortsat. Støtten til GPU'er baseret på mikroarkitekturerne Battlemage, Arrow Lake og Lunar Lake er blevet forbedret.
    • I DRM-subsystemet (Direct Rendering Manager) er EDID (Extended Display Identification Data) parameterbehandleren, der tilbys af skærmen, blevet omskrevet.
    • I i915-driveren er der tilføjet support for GPU Battlemage Xe2, og CMRR (Content Match Refresh Rate) tilstand er som standard aktiveret.
    • I DRM-driveren msm (GPU Qualcomm Adreno) er der tilføjet support for platformen SM7150 og GPU X185 og a505.
    • Der er tilføjet support for skærmpaneler Lincoln Tech Sol LCD185-101CT, Microtips Technology 13-101HIEBCAF0-C, Microtips Technology MF-103HIEB0GA0, BOE nv110wum-l60, IVO t109nw41, WL-355608-A8, PrimeView PM070WL4, Lincoln Technologies LCD197, Ortustech COM35H3P70ULC, AUO G104STN01, K&d kd101ne3-40ti.
    • Den lydsubsystem har fået support til chip og codecs Intel Panther Lake, Asahi Kasei AK4619, Cirrus Logic CS530x, Everest Semiconductors ES8311, NXP i.MX95, LPC32xx, Qualcomm LPASS v2.5, WCD937x, Realtek RT1318, RT1320 og Texas Instruments PCM5242.
    • Den sidste gruppe af ændringer, der giver support til ARM SoC Snapdragon X Elite, som bruger en proprietær 12-core CPU Qualcomm Oryon og GPU Qualcomm Adreno, er blevet inkluderet. Chippen er målrettet mod brug i bærbare og pc'er og overgår i mange benchmarks chippene Apple M3 og Intel Core Ultra 155H. De tilføjede ændringer til kerne 6.11 vedrører support til GPU Adreno X1-85 og energistyring. Bærbare enheder baseret på SoC Snapdragon X Elite, der er annonceret, inkluderer ASUS Vivobook S15 og Lenovo Yoga Slim7x.

Samtidig har den latinamerikanske Free Software Foundation skabt en version af den helt frie kerne 6.11 — Linux-libre 6.10-gnu, renset for firmware- og driverkomponenter, der indeholder ikke-frie elementer eller kodeområder, som er begrænset af producenten. I version 6.11 er der opdateret rensningskoden for blobs i mdgpu, adreno, vgxy61, atomisp, btnxpuart, prueth og tas2781-drivere. Rensning af nye drivere amdgpu isp, tn40, rtl8192du, cs40l50, rt1320 og pcie-rcar-gen4 er udført. Navne på blobs i dts-filer (devicetree) til Aarch64-arkitekturen er blevet renset. Der er tilføjet en variant af primitive til firmwareindlæsning, der ikke giver advarsler og forespørgsler (nowait-nowarn). Koden til at identificere primitive til firmwareindlæsning er tilføjet i Rust-koden.

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