Etter to måneder med utvikling presenterte Linus Torvalds utgivelsen av Linux-kjerne 6.11. Noen av de mest merkbare endringene inkluderer: støtte for atomære skriveoperasjoner på blokkivå, støtte for bind() og listen() i io_uring, en ny mekanisme for låsing av programbehandlere for avbrudd, mulighet for å skrive til speilvendte i minne kjørbare filer, støtte for å skrive enhetsdrivere på språk som Rust og optimalisering av getrandom()-anropet, samt en ny implementering av AES-GCM.
Den nye versjonen inneholder 15130 rettelser fra 2078 utviklere, og størrelsen på oppdateringen er 85 MB (endringene berørte 13282 filer, 985857 linjer kode ble lagt til og 268915 linjer ble fjernet). I forrige utgave var det 14564 rettelser fra 1989 utviklere, og oppdateringsstørrelsen var 41 MB (to ganger mindre enn oppdateringen for kjerne 6.11). Omtrent 46% av alle endringene i 6.11 er relatert til enhetsdrivere, rundt 17% av endringene gjelder oppdatering av kode spesifik til maskinvarearkitektur, 10% er relatert til nettverksstakken, 5% til filsystemer og 3% til interne kjernesystemer.
De viktigste nyhetene i kjerne 6.11:
- Disk subsystem, I/O og filsystemer
- Støtte for atomære skriveoperasjoner på blokkivå er implementert, der hele det angitte settet av blokker enten skrives til lagringsmediet eller ingen av blokkene skrives, noe som beskytter mot situasjoner der kun deler av blokkene blir skrevet etter en maskinvarefeil, mens annen informasjon forblir uendret. For å aktivere atomært skrivemodus, er flagget RWF_ATOMIC lagt til systemanropet pwritev(). Informasjon om støtte for atomær skriving (atomic_write_unit_min, atomic_write_unit_max og atomic_write_segments_max) relatert til spesifikke filer kan hentes ved hjelp av funksjonen statx().
- Støtte for skriving til kjørbare filer knyttet til kjørende prosesser er gitt. Tidligere, som i andre Unix-liknende systemer, ga kjernen en feil når man prøvde å skrive til en kjørbar fil for en aktiv prosess. Denne restriksjonen er nå fjernet, da den ikke har praktisk betydning.
- Muligheten for å utvikle enhetsdrivere på språk som Rust er implementert. Som eksempel er driveren rnull lagt til i kjernen, som fungerer som en analog til driveren null_blk, skrevet på språk som Rust.
- I filsystemet Btrfs er der i monteringsmuligheden "rescue=" implementeret støtte til de nye tilstande "ignoremetacsums" og "ignoresuperflags", som kan bruges til at flytte visse kontroller ud i brugerrummet ved genopretning af FS efter et nedbrud. Implementeringen af den dynamiske blokgruppe tilbageførsel er blevet omarbejdet for at undgå situationer med mangel på ledig plads under forhold med ufuldstændig udfyldning af FS.
- I filsystemet ntfs3 er der implementeret støtte til attributterne "compressed" og "immutable", som definerer komprimerede og uforanderlige filer.
- I FS F2FS og Ext4 er behandlingen af filnavne uden hensyn til symbolernes store/små bogstaver (casefold) forenklet ved opbevaring af navne i form af qstr-strenge uden unødige registreringsomformninger.
- I FS Ext4 er implementeringen af funktionen jbd2_transaction_committed optimeret for at forbedre ydeevnen på meget hurtige lagringsmedier (i tests er der registreret en stigning i behandlede operationer per sekund, som når op på 20%).
- I systemopkaldet statx() er det muligt at overføre en NULL-peger i stedet for en tom streng med filstien, hvis flaget AT_EMPTY_PATH er sat.
- I systemopkaldet open_by_handle_at() er adgangskontrollerne til filen lempet, hvis der ikke er tilladelserne CAP_DAC_READ_SEARCH for at søge i det indledende navnerum. Tidligere forhindrede behovet for at have tilladelserne CAP_DAC_READ_SEARCH til det indledende navnerum anvendelsen af systemopkaldet open_by_handle_at() i containere.
- Mulighederne for systemopkaldene listmount() og statmount() er blevet udvidet. I listmount() er flaget LISTMOUNT_REVERSE blevet tilføjet for at vise indholdet af monteringspunktets tabel i omvendt rækkefølge (de nyeste poster øverst). I statmount() er der implementeret visning af de muligheder, der blev sat ved montering af FS. I begge systemopkald er arbejdet tilladt, selv når der ikke er adgang til det indledende navnerum (når der kun er adgang til det lokale eller eksterne navnerum).
- I FS Bcachefs er der implementeret støtte til automatisk, gennemsigtig genopretning af problematiske data ved brug af fejlkorrigeringskoder - hvis der opstår en inddata-/uddatafejl ved læsning, eller der beregnes en uoverensstemmelse i kontrolsummen, bliver den problematiske datablok automatisk overskrevet, hvis der er redundans til dens genopretning.
- Minne og systemtjenester
- Det er blitt implementert oppdateringer som introduserer en ny mekanisme for å blokkere programbehandlere for avbrudd (BH, bottom-half), som sikrer at brukte datastrukturer låses, men samtidig ikke blokkerer parallell utførelse av kode som ikke er relatert til dem. Det bemerkes at endringen har redusert forsinkelsene for kjerner som kjører i sanntid, og dessuten har økt ytelsen til vanlige kjerner (for eksempel observeres det en ytelsesforbedring på 14,5 % i nettverksunder-systemet for visse belastninger).
- Det er lagt til støtte for operasjoner i io_uring under-systemet for å implementere funksjonene bind() og listen(), som brukes til å opprette tilknyttede nettverks-sokler.
- En ny samling av ioctl-operasjoner er lagt til pseudofilsystemet NSFS (NameSpace FS), som brukes for å jobbe med navnerom. De nye ioctl-ene tillater konvertering mellom prosess-ID-er og trådgrupper i forskjellige prosess-ID-rom (PID namespace). Lignende ioctl-er, som lar pidfd-ID-er bestemme filbeskrivelser av prosesser i separate navnerom, er også lagt til i pseudofilsystemet pidfd.
- Det er lagt til støtte for en ny iterator i BPF-programmer for å jobbe med bitmasker, som kan brukes til for eksempel å iterere over individuelle biter i minneområder som cpumask. En mekanisme for å sende varsler til prosesser i brukerrom om frakobling (detach/unregister) av objektet struct_ops er også lagt til. Utvalget av typer som kan brukes i matriser er utvidet (for eksempel kan man erklære matriser som har elementer med typene kptr, bpf_rb_root og bpf_list_head). En mer pålitelig mekanisme for Split BTF (BPF Type Format), som brukes for å sjekke typer i BPF-pseudokode, er blitt foreslått.
- Det er lagt til et under-system som gjør det mulig å organisere strømtilførselen til enheter i en spesifisert rekkefølge, når én enhet må aktiveres før en annen (for eksempel ved aktivering av trådløse brikker på Qualcomm-plattformer).
- Modulen «Sloppy logic analyzer» er lagt til, som gjør det mulig å lage enkle logiske signalanalysatorer som bruker GPIO og kjører på en egen CPU-kjerne.
- Støtte for runtime-konstanter er lagt til, som kan brukes i stedet for variabler som initieres én gang. For eksempel kan runtime-konstanter anvendes i stedet for variabler som lagrer pekere og størrelse for dentry-cache. Disse variablene settes under oppstart og endres aldri. Ideen er å sette inn verdiene av slike variabler direkte i instruksjoner i koden, uten kostnadene knyttet til manipulering med pekere.
- Overføringen av endringer fra Rust-for-Linux-grenen fortsetter, knyttet til bruken av Rust som et andre språk for utvikling av drivere og kjernemoduler (støtte for Rust er ikke aktivert som standard, og fører ikke til at Rust blir en obligatorisk avhengighet for kjernen). Støtte for Rust 1.80 er lagt til (minimale støttede versjon er fortsatt Rust 1.78). I tillegg til tidligere nevnte verktøy for utvikling av blokkdrivere, er det i den nye versjonen lagt til abstraksjoner for lasting av fastvare, tilgang til brukerrom (uaccess) og arbeid med strukturen «page».
- For x86-64-systemer er det implementert en ny systemanrop uretprobe(), som optimaliserer arbeidet med tracing-mekanismen uretprobe, som gjør det mulig å spore verdier returnert av funksjoner i brukerrom-applikasjoner.
- Kjernens kommandolinjeparametere har fått nye tillegg: «reserve_mem» for å reservere et navngitt minneområde under oppstart, og «ramoops.mem_name» for bruk i pstore-minneområdet opprettet via reserve_mem.
- I minnekontrolleren basert på cgroup er parameteren «swappiness» lagt til i filen memory.reclaim, som definerer innstillingene for minnedrenering, og gjør det mulig å endre balansen mellom å drepe anonyme minnesider til sidebytte og frigjøring av minnesider opptatt av filcache.
- En ioctl-grensesnitt PROCMAP_QUERY er lagt til for mer effektivt å søke etter virtuelle minneområder (Virtual Memory Area) i /proc/PID/maps.
- I systemanropet mmap() er flagget MAP_DROPPABLE lagt til for å be om minne som aldri vil bli droppet til sidebytte, men kan fjernes hvis det er mangel på minne.
- For ARM64-arkitektur er støtte for varm tilkobling (overgang til online/offline-modus) for fysiske og virtuelle CPU-er på systemer med ACPI implementert.
- For the RISC-V architecture, support for hot-plugging memory has been provided, and support for the GCC plugin STACKLEAK has been added (which initializes all stack variables to prevent information leakage from the kernel through uninitialized variables that may contain remnants of previously saved stack data).
- The mechanism for fake EFI memory mapping at boot time has been removed. This mechanism was not used in practice and interfered with developments in the area of confidential execution. virtual machines.
- Support for the PowerPC 40x platform has been discontinued.
- The requirements for the GNU Make version have been increased — at least a GNU Make release published in 2013 is required to build the kernel.
- Virtualisering og sikkerhet
- Patches have been integrated that significantly (up to 15 times) accelerate random number generation through the getrandom() system call. The optimization is based on the use of the vDSO (virtual dynamic shared object) mechanism, which allows moving the system call handler from the kernel to user space and avoiding context switches. The loading of the system call implementation into the address space of the process is done directly by the kernel.
- A new implementation of the AES-GCM encryption algorithm has been added for x86-64 systems, supporting the use of vector instructions VAES, VPCLMULQDQ, and AVX512/AVX10 to accelerate computations. In tests conducted, performance gains of up to 156% were achieved after switching to the new implementation. The assembly implementation of AES-GCM has been completely rewritten with considerations for correctness, performance, size, and comprehensive code documentation.
- The ability to run the kernel as a guest system in virtualized environments using AMD SEV-SNP (Secure Nested Paging) processor extensions, aimed at ensuring secure handling of nested page tables, has been implemented. For additional resource access isolation from virtual machines, the SVSM (Linux Secure VM Service Module) can be used. In the hypervisor. KVM initial support for running guest systems secured with AMD SEV-SNP has been added.
- A separate bucket slab allocator has been added, which can be enabled through the CONFIG_SLAB_BUCKETS parameter and provides protection against attacks using the "heap spraying" technique.
- I hypervisor KVM har blitt lagt til en ioctl-kall som tillater proaktiv tildeling av minne til gjestesystemet før det faktisk starter.
- Nettverks subsystem
- Det er lagt til en sysctl-parameter net.tcp_rto_min_us, som gjør det mulig å konfigurere den minimale retransmisjonstiden (retransmission timeout) for TCP-sokker.
- Verktøyet ethtool har fått muligheten for finjustering av konfigurasjonen av avbruddsbehandlere for nettverksgrensesnitt som bruker Net DIM-grensesnittet.
- Utstyr
- I AMDGPU-driveren er det lagt til støtte for GPU AMD RDNA4 («GFX12»). Støtte for teknologiene DCN 4.0.x, GC 12.0, GMC 12.0, SDMA 7.0, MES12 og MMHUB 4.1 er også inkludert.
- Arbeidet med drm-driveren (Direct Rendering Manager) Xe for GPU basert på Intel Xe-arkitekturen, som brukes i Intel Arc-grafikkort og integrert grafikk fra Tiger Lake-prosessorene, har fortsatt. Støtten for GPU-er basert på mikroarkitekturene Battlemage, Arrow Lake og Lunar Lake er forbedret.
- I DRM-subsystemet (Direct Rendering Manager) er EDID (Extended Display Identification Data) -behandleren som brukes av skjermen, skrevet om.
- I i915-driveren er støtte for GPU Battlemage Xe2 lagt til, og CMRR-modus (Content Match Refresh Rate) er nå aktivert som standard.
- I DRM-driveren msm (GPU Qualcomm Adreno) er det lagt til støtte for plattformen SM7150 og GPU X185 og a505.
- Støtte for skjermpanelene 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 er blitt lagt til.
- I lydsystemet er støtte for brikker og kodeker fra 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 lagt til.
- Den siste pakken med endringer har blitt implementert for å støtte ARM SoC Snapdragon X Elite, som har en 12-kjerne CPU Qualcomm Oryon og GPU Qualcomm Adreno. Brikken er rettet mot bruk i bærbare datamaskiner og PC-er, og overgår mange ytelsestester sammenlignet med Apple M3 og Intel Core Ultra 155H. Endringene som er lagt til i kjernen 6.11, er relatert til støtte for GPU Adreno X1-85 og energiforvaltning. Støtte for bærbare datamaskiner som ASUS Vivobook S15 og Lenovo Yoga Slim7x er annonsert med SoC Snapdragon X Elite.
Samtidig har den latinamerikanske Stiftelsen for fri programvare utviklet en variant av det helt frie kjernen 6.11 — Linux-libre 6.10-gnu, renset for elementer fra fastvare og drivere som inneholder ikke-frie komponenter eller kodeområder hvis bruk er begrenset av produsenten. I utgivelsen 6.11 er koden for rensing av blobber i driverne mdgpu, adreno, vgxy61, atomisp, btnxpuart, prueth og tas2781 oppdatert. Det er også utført rensing av nye drivere amdgpu isp, tn40, rtl8192du, cs40l50, rt1320 og pcie-rcar-gen4. Rensingen av blobnavn i dts-filer (devicetree) for Aarch64-arkitekturen er også gjort. En versjon av primitives for lasting av fastvare er lagt til, som ikke gir varsler og forespørsel (nowait-nowarn). Kode for å identifisere primitives for lasting av fastvare i Rust-koden er også lagt til.
Kilde: opennet.ru
