Két hónapos fejlesztés után Linus Torvalds bemutatta a Linux 7.2 kernel kiadását. A legfigyelemreméltóbb változások között szerepel az USB4STREAM adathordozási mechanizmus, a btrfs, xfs és ext4 teljesítményoptimalizálásai, a kód eltávolítása az i486 CPU támogatásához, a SCHED_EXT beágyazott ütemező létrehozásának lehetősége, a swap alrendszer memóriafogyasztásának csökkentése, a név nélküli csatornák gyorsítása, az Intel MBEC és AMD GMET kiterjesztések támogatása a KVM-ben, az AppleTalk protokoll eltávolítása, valamint az HDMI 2.1 FRL kezdeti támogatása az AMDGPU meghajtóban.
A 7.2-es kernel főbb újdonságai (1, 2, 3):
- Lemezszubszisztéma, bemenet/kipontozás és fájlrendszerek
- Az iomap mechanizmusban eltávolították a felesleges memset függvényhívást az már befejezett iterációkhoz az iomap_iter() függvényben, ami nagy IoT intenzitásnál gyors NVMe tárolók esetén 5%-kal növelte az IOPS-t (input/output műveletek másodpercenként) az ext4 és xfs fájlrendszerek használata során.
- Az XFS-ben stabil támogatást hirdettek meg a zónázott tárolóeszközök számára (a blokkok csoportjainak vagy szektorainak zónákra bontása, amelyek csak soros adatok hozzáadását engedélyezik, a blokkcsoport teljes frissítésével).
- A Btrfs-ben alapértelmezetten engedélyezve van a nagy memóriablokkok (large folios) támogatása, amely csökkenti a költségeket és javítja a teljesítményt intenzív soros I/O során. Hozzáadták a hatalmas memóriablokkok (huge folios) kísérleti támogatását, amelyek mérete akár 2 MB is lehet. Új ioctl GET_CSUMS került bevezetésre a checksum információk megszerzésére felhasználói térben, például a mkfs segédprogramhoz és a deduplikálás optimalizálásához. A soros adatírás teljesítménye 15%-kal, a közvetlen I/O teljesítménye pedig 59%-kal nőtt.
- Az Ext4 fájlrendszerben jelentősen át lett dolgozva a „gyors commit” mechanizmus megvalósítása a versenyhelyzetek és a kölcsönös blokkolások kiküszöbölése érdekében. Statisztikák exportálása inode snapshotokról került bevezetésre a /proc/fs/ext4/*/fc_info alatt. Az 255 karakter hosszúságú neveknél a hash-értékek kiszámításának teljesítménye majdnem megduplázódott, 64 karakter esetén 27%-kal, 32 karakter esetén pedig 11%-kal optimalizálták.
- Az F2FS-ben hozzáadták az fserror hibakódok támogatását, amelyek lehetővé teszik a felhasználói térből a fájlrendszeri problémák nyomon követését. Csökkentették az időt, amelyet az megszakítások feldolgozása során töltöttek.
- A Device Mapper (DM) új dm-inlinecrypt kezelőt kapott a blokkeszközök átlátszó titkosításának és visszafejtésének megvalósításához inline-titkosítással rendelkező hardvereszközök használatával.
- Javasolt dokumentáció új fájlrendszerek kernelbe való integrálásához.
- Az NFS alapértelmezett blokkmérete 4 MB-ra nőtt olyan rendszereken, amelyek legalább 16 GB RAM-mal rendelkeznek (a blokk méretének kézi módosításához a /proc/fs/nfsd/max_block_size fájl használható). Bevezetésre került a könyvtárkezelés delegálásának támogatása az ügyfél részére, amely lehetővé teszi, hogy a műveleteket egy ideig ezen a könyvtáron végezzék el anélkül, hogy ellenőriznék az állapotváltozást. szerveren.
- Az SMB szerverhez hozzáadódott a tömörített formában tárolt fájlok támogatása, valamint az adatok tömörítése a hálózaton történő átvitel során.
- Az új NTFS (ntfsplus) megvalósításban bevezetésre került a Windows szimbolikus linkek támogatása, és biztosított a metaadatok különböző típusainak hibás feldolgozása.
- Eltávolításra került az EROFS (Enhanced Read-Only File System) fájlrendszer adatait gyorsítótárazó fscache backend, amelyet két évvel ezelőtt elavultnak nyilvánítottak.
- A Ceph fájlrendszerhez hozzáadódott a kliens munkamenetek manuális visszaállításának támogatása.
- A 9P fájlrendszerbe optimalizálásokat vezettek be, amelyek felgyorsították a működést olyan forgatókönyvekben, mint a projektek összeállítása.
- A file_getattr() rendszerhíváshoz hozzáadtak jelzőket, amelyek lehetővé teszik a karakterérzékeny fájlrendszerrel kapcsolatos információk megszerzését. Az FS_XFLAG_CASEFOLD jelző azt jelzi, hogy a fájlnevek ellenőrzése nem érzékeny a karakterek kis- és nagybetűire, míg az FS_XFLAG_CASENONPRESERVING jelző arról tanúskodik, hogy új fájlnevek létrehozásakor nem tartják fenn a karakterek kis- és nagybetűs információit. Ezek a jelzők NFS-ügyfelekben alkalmazhatók, amelyek nem érzékenyek a karakterek kis- és nagybetűire.
- Az openat2() rendszerhíváshoz hozzátették az O_EMPTYPATH jelzőt, amely lehetővé teszi egy üres fájlútvonal átvitelét. Ebben az esetben a megnyitandó fájl útvonala a megadott fájl leíró alapján határozható meg.
- Az openat2() rendszerhíváshoz hozzátették az OPENAT2_REGULAR jelzőt, amely lehetővé teszi, hogy csak normál fájlokat nyissanak meg (ha valamely speciális fájlt, például socketet, csatornát vagy eszközt próbálnak megnyitni, EFTYPE hiba fog visszatérni).
- Memória és rendszerszolgáltatások
- Megvalósult az USB4STREAM mechanizmus, amely lehetővé teszi az adatok streamelését számítógépek között, USB4 portokon keresztül csatlakoztatott kábeleken. Hozzá lett adva a /dev/tbstreamX eszköz, amely segítségével adatokat lehet olvasni és írni a read() és write() beépített funkciókkal, hasonlóan a fájlokhoz. Például egy hoston az "echo hello > /dev/tbstream0" paranccsal információt küldhetünk, míg a másikon a "cat /dev/tbstream0" paranccsal olvashatjuk. Az USB4STREAM mechanizmus kombinálható USB4 (thunderbolt_net) kábeles hálózati kapcsolat telepítési lehetőségével, vagy külön is használható, ha az alkalmazások között adatátvitelre van szükség, amelyek nem támogatják a hálózati socketeket.
- Bekapcsolták a második sorozat módosításait az i486 processzorok támogatásának leállítására. Több mint 13 kódsort távolítottak el, amelyek a lebegőpontos számítások emulálásával voltak kapcsolatosak FPU nélküli processzorok számára. Eltávolították az i486 processzorok támogatását, amelyek nem rendelkeznek CX8 (összehasonlítás és csere 8 byte-on) és TSC (CPU ciklus számláló, amelyet a feladatütemező használ) hardveres műveletekkel, mivel ezek emuláló kódját is eltávolították.
- Kihirdették az AMD Geode processzorok támogatásának elhagyását (orphaned), amelyeket az OLPC XO-1 számítógépben használnak.
- Hozzá lett adva az Intel TDX (Trusted Domain Extensions) mechanizmus frissített megvalósításának támogatása, amelyet a vendég rendszerek memória titkosítására használnak. A TDX egy speciális programozási runtime modul formájában valósul meg, amelyet a BIOS az indítási folyamat során a Flash memóriából a RAM-ba helyez. A kernelbe olyan funkciók kerültek, amelyek lehetővé teszik ennek a modulnak a kezelését és annak újabb verzióra történő cseréjét a működő rendszeren anélkül, hogy újraindításra lenne szükség.
- Megvalósult az új GPU-erőforrás-elosztási ütemező (Fair GPU scheduler), amelyet a GPU-n végzett munkák végrehajtási sorrendjének meghatározására használnak, amelyeket a GPU-t használó folyamatok küldenek. A hagyományos FIDO GPU-irányú kéréskezelés helyett az új ütemező igazságos erőforrás-elosztási mechanizmusokat alkalmaz, amelyek a CFS (Completely Fair Scheduler) feladatütemezőre építenek, amely a következő folyamat végrehajtásához időtartamra vonatkozó ütemezési tervet használ. Az új ütemező használatának legszembetűnőbb hatását a párhuzamosan végrehajtott interaktív feladatoknál figyeljük meg, amelyek aktívan dolgoznak a GPU-val. A 7.2-es kernel kiadása előtt az Fair GPU scheduler engedélyezése le lett tiltva, és a régi FIFO-ütemezőre tértünk vissza a teljesítménycsökkenést és a GPU 100%-os terhelését okozó regresszió hibája miatt, amely bizonyos játékok Proton alatt történő indításakor lépett fel.
- Változások az eBPF alrendszerben: lehetőség nyílt egy BPF-program több nyomkövetési ponthoz (tracepoint) való csatolására. A nyomkövetési pontokhoz kötött BPF-programokhoz hozzáférést biztosítottak a felhasználói térben működő összetevők memóriájához a nem allokált memóriapage-ekkel (page fault) történő megkerülés helyes kezelésével. A bpf() rendszerhíváshoz hozzáadták a típus-specifikus attribútumok támogatását (log_buf, log_size, log_level és log_true_size), amely egységesítette a metainformációk átadását minden BPF parancs esetében, nem korlátozva a BPF_PROG_LOAD, BPF_BTF_LOAD és BPF_MAP_CREATE parancsokra. Eltávolították a BPF függvényben átadható paraméterek számának korlátozását, így több mint 5 paraméter is átadható. Biztonságos hozzáférést biztosítottak a megosztott bpf_arena memóriához anélkül, hogy aggodalomra adna okot a nem allokált memóriapage-ek (page fault) elérésével. Megvalósították a BPF hash map új változatát, amely lehetővé teszi a méret dinamikus megváltoztatását.
- Optimalizálták a „/proc/interrupts” kimenetének kidolgozását az megszakítási statisztikákkal, valamint modernizálták a megszakítási számlálók tárolására szolgáló struktúrákat és hozzáadták a gyorsítást.
- Felgyorsították a „/proc/filesystems” fájl generálását, amelyet a libselinux használ.
- A feladatütemezőben megvalósították a CPU magok közötti terheléselosztás támogatását, figyelembe véve a processzor belső gyorsítótárának állapotát. A tervező most arra törekszik, hogy csoportosítsa azokat a folyamatokat, amelyek közös erőforrásokat használnak, például egy folyamat szálait, hogy azok a legfelső szintű gyorsítótár kontextusában használhassák őket, ami növeli az adatokhoz való hozzáférés hatékonyságát azáltal, hogy fokozza az esélyét annak, hogy a szükséges adatok a gyorsítótárban találhatók.
- A SCHED_EXT mechanizmusban, amely lehetővé teszi a BPF használatát CPU ütemezők létrehozására, folytatták a lehetőség megvalósítását a beágyazott ütemezők (sub-scheduler) létrehozásához, amellyel minden csoport számára saját feladatütemezőt lehet használni.
- Folyamatban van a Rust-for-Linux ágból való változtatások átvitele, amelyek a Rust nyelv második nyelvként történő használatát célozzák illesztőprogramok és a kernel modulok fejlesztésében (a Rust támogatása alapértelmezés szerint nincs aktiválva, és nem teszi kötelezővé a Rust-ot a kernel építési függőségeiben). A Rust kernelben való használatát az s390 architektúrára implementálták. A csomag tartalmazza a „zerocopy” csomagot, amely gyors memóriaeléréseket biztosít a „unsafe” módban lévő kód számára.
- A kernel összeállításához szükséges minimális LLVM eszközkészlet verzióját 17.0.1-re emelték.
- A minimalista C könyvtár, a nolibc, amely a Linux kernel forráskódjával együtt jár, és alapvető rendszerhívások fölötti kötést biztosít, támogatja az OpenRISC és 32-bites PA-RISC architektúrákat.
- A swap alrendszerben olyan optimalizációkat hajtottak végre, amelyek javítják a teljesítményt és csökkentik a memóriafelhasználást az alrendszerben azáltal, hogy csökkentik a statikus metadaták tárolásának költségeit, és egységesítik az anoním és megosztott memória kezelését a folyamatos használat során. A memóriafelhasználás csökkenése jelentős, például egy 1 TB-os swap partíció csatolásakor körülbelül 512 MB-os csökkenés tapasztalható.
- Növelték a memória kilövelési mechanizmus hatékonyságát, amely eltávolítja vagy áthelyezi a memória területeket a swap részbe a memória felszabadítása érdekében, ha a rendszerben hiány van. Bizonyos terhelések esetén, például a MongoDB YCSB-vel (Yahoo! Cloud Serving Benchmark) történő tesztelése során, akár 30%-os teljesítménynövekedés is megfigyelhető.
- A "make sbom" command has been added to the build system to generate SBOM (Software Bill Of Materials) lists, reflecting the components, libraries, and dependencies used in the current kernel build, as well as information about their licenses obtained from SPDX headers in the code files.
- In the implementation of unnamed pipes, optimizations have been made for operations with locks (memory allocation has been moved out of the lock context), which increases the throughput of unnamed pipes by 21-48% and reduces latency by 17-33%.
- Virtualizáció és biztonság
- The slab allocator has added the ability to use memory allocation tokens, implemented in Clang 22. These tokens allow for marking memory allocation operations with unique identifiers and organizing separate placement of different types of objects, complicating the exploitation of vulnerabilities caused by buffer overflows (with separation, buffer overflows in one type of object are not as easily used to corrupt other types of objects).
- The AF_ALG mechanism, exploited in the Copy Fail vulnerability to modify data in the page cache, has been declared deprecated and is slated for removal in a future release. AF_ALG allows for enabling hardware accelerators for cryptographic computations in the kernel's Crypto API but is used in very specific situations. In kernel 7.2, AF_ALG has removed support for asynchronous I/O, old drivers, and the zero-copy mechanism in the skcipher and aead implementation. Only software implementations of cryptographic algorithms remain, and support for hardware crypto accelerators in the kernel's Crypto API has been removed, as AF_ALG significantly increases the attack surface without offering performance gains compared to cryptography implementation in user space. AF_ALG was used in the Cryptsetup toolkit, but its support was removed in the recent release 2.8.7.
- The IMA (Integrity Measurement Architecture) mechanism, which allows an external service to verify the state of the kernel subsystem to ensure its authenticity, has added support for exporting internal tables with measurement results to user space, removing them from the kernel buffers to save memory.
- A Landlock modul, amely lehetővé teszi a nem privilégizált programok számára, hogy korlátozzák a Linux kernel objektumainak használatát (fájlhierarchiák, hálózati socketek, ioctl stb.), támogatást kapott az UDP socketek hozzáférés-vezérléséhez, valamint lehetőséget kapott az objektumok blokkolásáról szóló információk naplózásának szelektív letiltására, hogy elkerüljük a naplózat felesleges információkkal való túlterhelését.
- A kernel eltávolította a strncpy() függvényt, amely meghatározott számú bájtot másolt a bemeneti sztringből. A strncpy() használata hibákhoz vezetett a null karakter kihagyása vagy a nullákkal való kiegészítés miatt. A strncpy() helyett ajánlott a strscpy() és strscpy_pad() függvények használata, amelyek nullával végződő sztringek másolására szolgálnak, valamint a strtomem_pad(), memcpy_and_pad() és memcpy() a fix méretű sztringek másolásához. A kernel strncpy()-tól való mentesítése 2020-ban kezdődött, és 70 fejlesztőtől 362 módosítás elfogadását igényelte.
- A hypervisorban KVM Hozzáadva az Intel MBEC (Mode-Based Execution Control) és az AMD GMET (Guest-Mode Execution Trap) kiterjesztések támogatása, amelyek lehetővé teszik a memória-transzlációs táblákban a kód végrehajtási jogainak elkülönített kezelését a kernel és a felhasználói tér számára a vendégrendszerekben. Korábban az Intel és AMD hardver virtualizálási kiterjesztések lehetővé tették, hogy a memóriaoldalakat egyetlen bit segítségével végrehajthatónak jelöljék meg, programozott jogmegosztással a kernel és a felhasználói tér között a hypervisor szintjén. Az MBEC és GMET használata lehetővé teszi a jogok ellenőrzésének eltávolítását a hypervisor oldalán, és jelentősen csökkenti a vendégrendszerről a hypervisorhoz való vezérlés átvitelének erőforrás-igényét a VMexit során.
- Hálózati alrendszer
- A TCP-AO (TCP Authentication Option, RFC 5925) kiterjesztés végrehajtása átállt az új libcrypto kriptográfiai könyvtár használatára, ami leegyszerűsítette a kódot és javította a teljesítményt. A TCP-AO lehetővé teszi a TCP fejlécek MAC-kódok (Message Authentication Code) általi hitelesítését, modern HMAC-SHA-1-96 és AES-128-CMAC-96 algoritmusok alkalmazásával, a korábban elérhető MD5 alapú TCP-MD5 lehetőség helyett.
- A Multipath TCP (MPTCP) kapcsolatokhoz támogatott szubfolyamatok száma 8-ról 64-re nőtt.
- Folytatódik a kernel hálózati veremében a globális rtnl_lock zár használatának csökkentésén való munka.
- Az AppleTalk protokollverem megvalósítása eltávolításra került a kernelből, amelyet az Apple számítógépei használtak 1985-től, és amelyet az 1990-es években a TCP/IP váltott fel. Ezen kívül eltávolították az ATM adatátviteli technológia nem PPPoATM-hoz kapcsolódó komponenseit, valamint az ISA és PCMCIA busz alapú ARCnet hálózati interfészeket, a PCMCIA interfésszel rendelkező Bluetooth adaptereket, a Chelsea TLS gyorsítókat, a TLS sockmap integrációs kódját, és a 5/10 MHz frekvenciasávok támogatását a cfg80211/mac80211 vezeték nélküli veremben. A TCP Offload Engine alapú TLS feldolgozás gyorsítására vonatkozó specifikus megvalósítást a felmerülő megoldhatatlan problémák és a hiányzó kísérő dokumentáció miatt eltávolították (a szélesebb körben használt TLS offload megvalósítást megtartották). A 32 bites x_tables 64 bites rendszereken való kompatibilitása letiltásra került és eltávolításra tervezett.
- A pppoe illesztőprogramhoz hozzáadódott a GRO (Generic Receive Offload) és a GSO (Generic Segmentation Offload) mechanizmusok támogatása a csomagok újraegyesítésének és szegmentálásának hardveres gyorsításához. A GRO és a GSO használata jelentősen növelheti a bejövő forgalom átbocsátóképességét, például a MediaTek MT7621 eszközök esetében, ahol az átkonfiguráló rendszerrel a maximális átbocsátóképesség 130 Mbit/s-ről 630 Mbit/s-ra nőtt.
- Hardver
- Az AMDGPU illesztőprogramban megjelent a HDMI 2.1 FRL (Fixed Rate Link) technológia kezdeti támogatása, amely lehetővé teszi a tömörítetlen 4K/120Hz és 8K/60Hz minőségű videók továbbítását. Korábban a HDMI 2.1 támogatás megvalósítása nyílt illesztőprogramokban licencelési követelmények miatt hosszú időn keresztül nem volt lehetséges, de most az AMD-nak sikerült egy ilyen megvalósítást egyeztetnie.
- Az i915 illesztőprogramba bekerült a háttérszín kijelző vezérlő általi beállításának támogatása. Megvalósult a pin_params.needs_low_address paraméter.
- Folytatódott a drm (Direct Rendering Manager) Xe illesztőprogram fejlesztése az Intel Xe architektúrára épülő GPU-khoz, amelyeket az Intel Arc család és a Tiger Lake processzoroktól kezdődően integrált grafikában használnak. Kezdeti támogatás került bevezetésre a CRI (Crescent Island) platformhoz. Az Xe3p dGPU platformokhoz rendszervezérlő került bevezetésre.
- A Nouveau illesztőprogramban megoldották a NVIDIA GA100 GPU-val kapcsolatos problémákat.
- A v3d illesztőprogramban megjelent a Raspberry Pi alaplapokon található v3D GPU energiafogyasztásának kezelésének lehetősége.
- Folytatódott a Nova driver komponenseinek integrálása az NVIDIA GPU-khoz, amelyek GSP firmware-t használnak, kezdve az NVIDIA GeForce RTX 2000 sorozattal, amely a Turing mikroarchitektúrán alapul. A drivert Rust nyelven írták. Támogatás került hozzáadásra az NVIDIA GA100 és a Hopper valamint Blackwell sorozatokhoz.
- Támogatás került hozzáadásra az ARM platformok, SoC-k és eszközök számára: Apple t8122 (M3), Motorola Edge 30, Nothing Phone 3a, Google Pixel 3a XL, Qualcomm Dragonwing IPQ9650, Huawei Hawi, ZTE zx297520v3, Renesas R-Car M3Le, ASPEED AST27xx, Cortina Gemini, NXP i.MX6/8/9, NXP LX2160A, TI K3 AM62x.
Eközben a Latin-amerikai Szabad Szoftver Alapítvány létrehozta a teljesen szabad 7.2-es Linux-libre kernel verziót, amelyet megtisztítottak a gyártó által korlátozott nem szabad komponensektől vagy kód részletektől. A 7.2-es kiadásnál új rt722-sdca és tac5xx2 driverek blobjait tisztították meg. A driverek, mint az amdgpu, nova core, qcom iris, q6v5, iwlwifi, amdxnda, adreno, r8152 és mt792x tisztítási kódját frissítették. A firmware betöltésére vonatkozó interfészeket is módosították. Tisztították a blobok neveit az ARM chipekhez készült dts fájlokban (devicetree).
Forrás: opennet.ru
