Két hónapos fejlesztés után Linus Torvalds bemutatta a Linux 6.11 kernel kiadását. A legszembetűnőbb változások közé tartozik: az atomikus írásműveletek támogatása blokkszinten, a bind() és listen() műveletek támogatása az io_uring-ban, új mechanizmus a szoftveres megszakításkezelők blokkolására, lehetőség végrehajtható fájlok virtuális memóriába történő írására, a blokkeszköz-illesztőprogramok Rust nyelvű írásának támogatása, valamint a getrandom() hívásának optimalizálása és egy új AES-GCM megvalósítás.
Az új verzióba 15130 javítást fogadtak el 2078 fejlesztőtől, a javítócsomag mérete 85 MB (a változások 13282 fájlt érintettek, 985857 kódsort adtak hozzá, 268915 sort távolítottak el). Az előző kiadásban 14564 javítást fogadtak el 1989 fejlesztőtől, a javítócsomag mérete 41 MB (két és félszer kevesebb, mint a 6.11-es kernel patch). Az 6.11-es változások körülbelül 46%-a az eszközillesztőkhez kapcsolódik, körülbelül 17% a hardverarchitektúrákhoz specifikus kód frissítésével foglalkozik, 10% a hálózati stackkel, 5% a fájlrendszerekkel, 3% pedig a kernel belső alrendszereivel kapcsolatos.
A 6.11-es kernel fő újdonságai:
- Lemezszubszisztéma, bemenet/kipontozás és fájlrendszerek
- Az atomikus írásműveletek támogatása blokkszinten valósult meg, amely lehetővé teszi, hogy a tárolóra teljesen csoportosítsunk írási blokkokat, vagy egyiket se, így megvédve az olyan helyzetektől, amikor a hardverhibát követően csak néhány blokk íródik, míg más blokkokban régi információk maradnak. Az atomikus írásmód aktiválásához az pwritev() rendszerhíváshoz RWF_ATOMIC zászlót adtak hozzá. Az atomikus írás támogatásáról (atomic_write_unit_min, atomic_write_unit_max és atomic_write_segments_max) egyes fájlokkal kapcsolatban a statx() funkcióval kaphatunk tájékoztatást.
- Lehetőséget biztosítottak futó folyamatokhoz kapcsolódó végrehajtható fájlok írására. Korábban, akárcsak más Unix-szerű rendszerekben, a kernel hibát adott vissza, ha egy futó folyamat végrehajtható fájljába próbáltak írni. Ezt a korlátozást eltávolították, mivel nincs gyakorlati értelme.
- Megvalósították a blokkeszköz-illesztőprogramok Rust nyelvű fejlesztésének lehetőségét. Példaként a kernelhez hozzáadták az rnull illesztőprogramot, amely a Rust nyelven írt null_blk illesztőprogram megfelelője.
- A Btrfs fájlrendszerben a "rescue=" csatolmányban új "ignoremetacsums" és "ignoresuperflags" módok támogatása valósult meg, amelyek segítségével egyes ellenőrzések felhasználói térbe helyezhetők a fájlrendszer helyreállítása során hiba esetén. A blokkcsoportok dinamikus visszaállításának megvalósítása átalakításra került, hogy megszüntesse a szabad tér hiányának lehetőségét a fájlrendszer hiányos kitöltésekor.
- Az ntfs3 fájlrendszerben támogatást kapnak a "compressed" és "immutable" attribútumok, amelyek a tömörített és változatlan fájlokat határozzák meg.
- Az F2FS és Ext4 fájlrendszerben a fájlnevek kis- és nagybetűk figyelmen kívül hagyásának kezelése (casefold) egyszerűsödött azáltal, hogy a neveket qstr-string formában tárolják, felesleges kis- és nagybetűs átalakítások nélkül.
- Az Ext4 fájlrendszerben a jbd2_transaction_committed funkció megvalósítása optimalizálva lett a teljesítmény növelése érdekében nagyon gyors tárolókon (a tesztekben akár 20%-kal is nőtt a másodpercenkénti feldolgozott műveletek száma).
- A statx() rendszerhívásnál engedélyezett a NULL pointer átadása a fájlút üres karakterlánca helyett, ha az AT_EMPTY_PATH zászló be van állítva.
- Az open_by_handle_at() rendszerhívásnál enyhítették a fájlhoz való hozzáférési jogok ellenőrzését, ha hiányzik a CAP_DAC_READ_SEARCH engedély az alapértelmezett névterek kereséséhez. Korábban a CAP_DAC_READ_SEARCH jogosultságok megléte az alapértelmezett névtérhez megakadályozta az open_by_handle_at() rendszerhívás használatát konténerekben.
- A listmount() és statmount() rendszerhívások bővültek. A listmount()-ban bevezetésre került a LISTMOUNT_REVERSE zászló, amely lehetővé teszi a csatolási pontok táblázatának tartalmának fordított sorrendben történő megjelenítését (a legújabb bejegyzések az elején). A statmount() természeténél fogva a fájlrendszer csatolásakor beállított opciók kimenetét valósította meg. Mindkét rendszerhívás lehetővé teszi a működést az alapértelmezett névtérhez való hozzáférés hiányában (amikor csak a helyi vagy külső névtérhez van hozzáférés).
- A Bcachefs fájlrendszerben megvalósították a problémás adatok automatikus, átlátható helyreállításának támogatását hibaellenőrző kódok használatával - ha olvasás közben bemeneti/kimeneti hiba lép fel vagy a checksum eltérés kerül megállapításra, a problémás adatblokk automatikusan újraírásra kerül, amennyiben redundancia áll rendelkezésre annak helyreállításához.
- Memória és rendszerszolgáltatások
- A csomagban új blokkolási mechanizmus megvalósítását tartalmazó javítások kerültek bevezetésre, amely a megszakítók szoftveres kezelőit (BH, bottom-half) blokkolja, biztosítva a használt adatstruktúrák védelmét, ugyanakkor nem okoz blokkolást a párhuzamosan végrehajtott, velük nem összefüggő kódok esetén. Megjegyzendő, hogy a módosítás nemcsak a valós idejű üzemmódban működő magok késleltetését csökkentette, hanem a hagyományos magok teljesítményét is növelte (például bizonyos terhelések esetén a hálózati alrendszer teljesítménye 14,5%-kal javult).
- Az io_uring aszinkron bemeneti/kimeneti alrendszerhez hozzáadódott a bind() és listen() funkciók megvalósításához szükséges műveletek támogatása, amelyeket a kapcsolódási hálózati socketek létrehozására használnak.
- Hozzáadásra került egy ioctl műveletkészlet a NSFS (NameSpace FS) álkönyvtárhoz, amely a névtérrel dolgozik. Az új ioctl lehetővé teszi a folyamatok és szálcsoportok azonosítóinak átalakítását különböző folyamatazonosítók (PID namespace) között. Hasonló ioctl-ek, amelyek lehetővé teszik a pidfd azonosítókon alapuló folyamatfájl-leírók meghatározását különböző névterekben, szintén hozzáadásra kerültek a pidfd álkönyvtárhoz.
- A BPF programok számára új iterátor támogatása került bevezetésre, amely bitmaszkokkal dolgozhat, például a memóriaterületek egyes biteinek bejárására, mint például a cpumask. Bevezetésre került egy mechanizmus, amely értesítéseket küld a felhasználói térben működő folyamatoknak a struct_ops objektum leválasztásáról (detach/unregister). Kiterjesztették a tömbökben használható típusok spektrumát (például most már deklarálhatók olyan tömbök, amelyek kptr, bpf_rb_root és bpf_list_head típusú elemeket tartalmaznak). Javasoltak egy megbízhatóbb mechanizmust a Split BTF (BPF Type Format) számára, amely a BPF pszeudokód típusainak ellenőrzésére használható.
- Hozzáadásra került egy alrendszer, amely lehetővé teszi az eszközök áramellátásának meghatározott sorrendben történő biztosítását, arra az esetre, ha egy eszközt korábban kell aktiválni, mint egy másikat (például a Qualcomm platformokon található vezeték nélküli chippek aktiválásakor).
- Hozzáadásra került a „Sloppy logic analyzer” modul, amely lehetővé teszi egyszerű logikai jelelemzők létrehozását, amelyek GPIO-t használnak és egy külön CPU magon működnek.
- Hozzáadtuk a futási konstansok támogatását, amelyek használhatók az egyszeri inicializálású változók helyett. Például a futási konstansok alkalmazhatók a dentry gyorsítótárazáshoz szükséges mutató és méret tárolására szolgáló változók helyett. Ezek a változók a betöltéskor kerülnek beállításra, és soha nem változnak. Az ötlet az, hogy az ilyen változók értékeit közvetlenül a kódban lévő utasításokba illesszük, kizárva a mutatókkal járó költségeket.
- Folyamatban van a Rust-for-Linux ágból származó változtatások átvitele, amelyek a Rust nyelv második nyelvként való használatára vonatkoznak a vezérlők és a kernel modulok fejlesztésében (a Rust támogatás alapértelmezés szerint nem aktív, és nem eredményezte, hogy a Rust a kernel kötelező build függőségei közé kerüljön). Hozzáadtuk a Rust 1.80 kiadásának támogatását (a minimális verzió továbbra is a Rust 1.78). Az új verzióban a már említett blokk eszköz драйverek fejlesztéséhez szükséges eszközök mellett új absztrakciók kerültek bevezetésre a firmware-ek betöltéséhez, a felhasználói térhez (uaccess) való hozzáféréshez és a "page" struktúrával való munkavégzéshez.
- x86-64 rendszerekhez egy új rendszerhívást valósítottunk meg, a uretprobe() optimalizálja az uretprobe nyomkövetési mechanizmus teljesítményét, amely lehetővé teszi a visszatérési értékek követését a felhasználói tér alkalmazásaiban.
- A kernel parancssori paraméterei közé kerültek az "reserve_mem" a névvel ellátott memória tartomány fenntartásához az indítás során, és a "ramoops.mem_name", amely a pstore memóriához használható, amit a reserve_mem-en keresztül hoztak létre.
- A cgroup alapú memória vezérlőjéhez az memory.reclaim fájlhoz, amely a memória elhelyezési beállításokat határozza meg, hozzáadtuk a "swappiness" paramétert, amely lehetővé teszi a memória anoním lapjainak swap-re küldése és a fájl gyorsítótárhoz rendelt memória lapok felszabadítása közötti egyensúly megváltoztatását.
- Hozzáadtuk a PROCMAP_QUERY ioctl interfészt a virtuális memória területek (Virtual Memory Area) hatékonyabb keresése érdekében a /proc/PID/maps-ban.
- A mmap() rendszerhíváshoz hozzáadtunk egy MAP_DROPPABLE jelzőt, amely segítségével olyan memóriát kérünk, amely soha nem kerül a swap-ra, és memóriahiány esetén törölhető.
- ARM64 architektúrához támogatást valósítottunk meg az online/offline módokba való forró csatlakozáshoz (a fizikai és virtuális CPU-k ACPI rendszereken történő átvitele).
- A RISC-V architektúra támogatja a memória forró csatlakoztatását, valamint hozzáadta a GCC STACKLEAK plugint (amely inicializálja az összes, a veremben tárolt változót az információszivárgás megakadályozására a kernelen keresztül, olyan nem inicializált változók révén, amelyek korábban a veremben tárolt adatok maradványait tartalmazhatják).
- Eltávolították az EFI álmemória térkép (fake EFI memory map) mechanizmust a rendszerindítás során. Ez a mechanizmus gyakorlatilag nem volt használva, és akadályozta a bizalmas végrehajtás fejlesztését. virtuális gépekhez.
- Megszűnt a PowerPC 40x platform támogatása.
- Növekedtek a GNU Make verzióra vonatkozó követelmények - a kernel összeállításához minimum a 2013-ban kiadott GNU Make verzió szükséges.
- Virtualizáció és biztonság
- Beintegrálták azokat a javításokat, amelyek jelentősen (akár 15-ször) felgyorsítják a véletlenszámok előállítását a getrandom() rendszerhíváson keresztül. Az optimalizálás a vDSO (virtual dynamic shared object) mechanizmus használatán alapul, amely lehetővé teszi a rendszerhívás kezelőjének áthelyezését a kernelből a felhasználói térbe, így elkerülve a kontextusváltásokat. A rendszerhívás implementációját közvetlenül a kernel tölti be a folyamat címterébe.
- x86-64 rendszerekhez új AES-GCM titkosítási algoritmus implementációt vezettek be, amely támogatja a VAES, VPCLMULQDQ és AVX512/AVX10 vektori utasítások használatát a számítási teljesítmény növelésére. A végzett tesztekben a teljesítménynövekedés eléri a 156%-ot az új implementációra való áttérést követően. Az AES-GCM assembler implementációt teljesen átírták a helyesség, teljesítmény, méret és átfogó kódokumentáció figyelembevételével.
- Megvalósult a kernel indításának lehetősége vendégrendszerként virtualizált környezetekben, amelyek használják az AMD SEV-SNP (Secure Nested Paging) processzor kiterjesztést, amely a memória beágyazott oldal táblázatok biztonságos kezelését szolgálja. További erőforrás-hozzáférési izoláció érdekében az SVSM (Linux Secure VM Service Module) modul használható a virtuális gépekből. KVM Az AMD SEV-SNP védett vendégrendszerek indításának kezdeti támogatása került bevezetésre a hipervizorba.
- Hozzáadott egy különálló bucket slab allokátort, amelyet a CONFIG_SLAB_BUCKETS paraméterrel lehet engedélyezni, és amely védelmet biztosít a heap spraying technikák használatával szemben.
- A KVM hypervisor added an ioctl call for proactive memory allocation for the guest system before it actually starts.
- Hálózati alrendszer
- A sysctl parameter net.tcp_rto_min_us has been added, which allows you to configure the minimum retransmission timeout for TCP sockets.
- The ethtool utility has been enhanced with fine-tuning capabilities for interrupt handler configurations for network interfaces using the Net DIM interface.
- Hardver
- The AMDGPU driver has introduced initial support for AMD RDNA4 GPUs ("GFX12"). Support for DCN 4.0.x, GC 12.0, GMC 12.0, SDMA 7.0, MES12, and MMHUB 4.1 technologies has been added.
- Work on the Xe DRM driver (Direct Rendering Manager) for GPUs based on the Intel Xe architecture, used in Intel Arc graphics cards and integrated graphics starting with Tiger Lake processors, has continued. Support for GPUs based on the Battlemage, Arrow Lake, and Lunar Lake microarchitectures has been improved.
- In the DRM (Direct Rendering Manager) subsystem, the EDID (Extended Display Identification Data) parameters processing handler exposed by the monitor has been rewritten.
- The i915 driver has added support for Battlemage Xe2 GPUs and the CMRR (Content Match Refresh Rate) mode is enabled by default.
- The msm DRM driver (Qualcomm Adreno GPU) has added support for the SM7150 platform and GPUs X185 and a505.
- Support has been added for the following screen panels: 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.
- In the audio subsystem, support has been added for the chips and 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, and Texas Instruments PCM5242.
- The final batch of changes supporting the ARM SoC Snapdragon X Elite, which uses its own 12-core Qualcomm Oryon CPU and Qualcomm Adreno GPU, has been introduced. The chip is aimed at use in laptops and PCs and outperforms Apple M3 and Intel Core Ultra 155H chips in many performance tests. The changes added in kernel 6.11 are related to supporting Adreno X1-85 GPU and power management. Support for ASUS Vivobook S15 and Lenovo Yoga Slim7x laptops based on the Snapdragon X Elite SoC has been announced.
Egy időben a latin-amerikai Szabad Szoftver Alapítvány kiadott egy teljesen szabad 6.11-es Linux-libre 6.10-gnu magot, amely mentes a gyártó által korlátozott szabad összetevőket vagy kódblokk területeket tartalmazó firmware-elemektől és meghajtóktól. A 6.11-es verzióban frissítették a blobok tisztításának kódját az mdgpu, adreno, vgxy61, atomisp, btnxpuart, prueth és tas2781 meghajtókban. Tisztították az új amdgpu isp, tn40, rtl8192du, cs40l50, rt1320 és pcie-rcar-gen4 meghajtók kódját is. A dts-fájlokban (devicetree) az Aarch64 architektúrához tartozó blobnevek tisztítása is megtörtént. Hozzáadtak egy figyelmeztetéseket és kérdéseket nem generáló (nowait-nowarn) primitív verziót a firmware-ek betöltéséhez. Kódot adtak hozzá a firmware-ek betöltéséhez szükséges primitívok meghatározásához Rust nyelven írt kódban.
Forrás: opennet.ru
