Két hónap fejlesztés után Linus Torvalds bemutatta a Linux 6.14 kernelszám kiadását. A legszembetűnőbb változások között van az NT-szinkronizáló szoftver, a Btrfs RAID1 olvasási műveleteinek kiegyensúlyozásának beállítása, a reflink támogatása XFS-ben real-time módban, a nem gyorsítótárazott pufferezetten végzett bemenet/kimenet lehetősége, a GPU memória korlátozására szolgáló dmem csoport, az io_uring használata a FUSE-ben, az attribútumok delegálása NFS alatt, az atomikus írások támogatása a Device mapperben, a szimbolikus linkek gyorsítása, a szkriptek futtatásának lehetőségének kezelése, a Qualcomm Snapdragon 8 Elite chipek támogatása és az AMD NPU-hoz készült illesztőprogram.
Az új verzió 12115 javítást tartalmaz 1984 fejlesztőtől, a patch mérete 39 MB (a módosítások 10170 fájlt érintettek, 531586 sor kódot adtak hozzá, 235999 sort töröltek). A korábbi kiadásban 14172 javítást dolgoztak el 2086 fejlesztőtől, a patch mérete 46 MB volt. A 6.14-es verzióban bemutatott változások körülbelül 41%-a az eszközillesztőkkel kapcsolatos, körülbelül 13%-a a hardverarchitektúrákhoz speciális kód frissítésével, 14%-a a hálózati veremmel, 7%-a a fájlrendszerekkel, 4%-a pedig a kernel belső alrendszereivel kapcsolatos.
A 6.14-es kernel fő újdonságai:
- Lemezszubszisztéma, bemenet/kipontozás és fájlrendszerek
- A Btrfs fájlrendszer új olvasási műveletek kiegyensúlyozásának módszereit vezették be a RAID1 tömbbe tartozó tárolók között. Az eddig használt tömegelosztás mellett, amely a folyamatok azonosítói (pid) alapján működött, az új verzió három új kiegyensúlyozási módot kínál: „rotation” (a terhelés egyenletes elosztása az összes tároló között, alapértelmezett), „latency” (a késleltetések figyelembevételével, hasznos lehet meghibásodások vagy instabil működés esetén), és a devid (kézi vezérlés). A kiegyensúlyozási mód megváltoztatásához hozzáadták a „/sys/fs/btrfs//read_policy” interfészt. A Btrfs másik változása — az ioctl FS_IOC_READ_VERITY_METADATA megvalósítása.
- Új nem gyorsítótárazott bemeneti/kimeneti üzemmód került bevezetésre, ahol az adatok azonnal eltávolításra kerülnek az oldal gyorsítótárából, miután a hozzáférési vagy írási műveletek befejeződtek. Ez a változtatás hasznos lehet rendkívül gyors tárolóeszközök használata esetén, ahol a memória gyorsítótárazása felesleges. Ilyen eszközök esetén az új üzemmód lehetővé teszi a memória túlzott felhasználásának elkerülését az oldal gyorsítótára által, anélkül, hogy bonyolult közvetlen bemeneti/kimeneti API-ra (Direct I/O) lenne szükség.
- A fsnotify, a fájlrendszer változásainak nyomon követésére szolgáló mechanizmus, új FS_PRE_ACCESS eseményt kapott, amely a fájl tartalmához történő hozzáférés előtt generálódik. Az eseményt szinkron módban dolgozzák fel, azaz a kernel elküldi az eseményt és várja a válasz megérkezését. Ha a válasz megérkezik, a művelet végrehajtásra kerül, ha pedig hiba lép fel, a rendszerhívás hibakódot ad vissza a felhasználói térbe. Az FS_PRE_ACCESS segítségével a felhasználói térben működő folyamat például lehetővé teheti a fájl feltöltését, amint az adatok elérhetők a lassú tárolóban.
- A FUSE alrendszerhez, amely lehetővé teszi fájlrendszerek megvalósítását a felhasználói térben, hozzáadták a kernel és a felhasználói térbeli kezelő közötti adatmegosztás támogatását az io_uring bemeneti/kimeneti mechanizmus használatával. Ez a változtatás javítja a FUSE teljesítményét azáltal, hogy csökkenti a váltások számát a kernel és a felhasználói tér között.
- Az XFS fájlrendszerhez hozzákerült a visszamenőleges mappálás (rmap, reverse-mapping) használatának lehetősége a kiszámítható késleltetésekkel működő üzemmód ("realtime device") esetén. A visszamenőleges mappálás lehetővé teszi, hogy meghatározzuk, hogy egy adott tárolóegység melyik fájl tárolására szolgál. Az rmap segítségével az XFS realtime üzemmódja megvalósítja a reflink művelet támogatását, amely lehetővé teszi a fájlok másolatainak létrehozását a fájl metainformációinak klónozásával és már meglévő adatokra mutató hivatkozás létrehozásával anélkül, hogy tényleges másolásra lenne szükség.
- A VFS-ben megvalósították a szimbolikus linkek méretének gyorsítótárazását, amely 1,5%-kal felgyorsította a readlink művelet végrehajtását (az ext4 fájlrendszer\/initrd.img fájljával végzett teszt során). A gyorsítótárazás engedélyezve van az ext4 és tmpfs fájlrendszerekben.
- Az NFSv4.2 implementációjába belekerült a fájlattribútumok delegálásának támogatása, amely lehetővé teszi a fájlok, például a módosítási idő (mtime) kezelését az NFS-kliens oldalán, anélkül hogy a változtatásokat vissza kellene írni a szerverre. Az NFS-ben szintén javult a 'LOCALIO' protokoll támogatása, amely meghatározza, hogy az NFS-kliens és -szerver ugyanazon a gazdagépen található-e, lehetővé téve a megfelelő optimalizálások alkalmazását, például a közvetlen I/O (Direct I/O) használatát a kliens számára.
- Javult a NETFS, CIFS és AFS (Andrew File System) fájlrendszerek olvasási teljesítménye.
- A Squashfs-be bevezettek egy közvetlen betöltési módot a blokkok számára a lapkészletbe (SQUASHFS_FILE_DIRECT), amely lehetővé teszi, hogy ne legyen szükség külön read_page gyorsítótárra. Ez a változás csökkentette a Squashfs működésekor szükséges memória mennyiségét.
- A statx() rendszerhívásba bevezetésre került a STATX_DIO_READ_ALIGN zászló, amely meghatározza az olvasási műveletekhez szükséges igazítást a fájlokból.
- A Bcachefs fájlrendszerben frissítették és stabilizálták a lemezstruktúrák formátumát. Bármely további formátumbeli változtatást opcionálisnak tekintenek, és ezek opcionális kiegészítések formájában fognak megvalósulni. Jelentősen javult a fájlrendszer integritásellenőrzésének sebessége. Ezen felül, a Bcachefs javított a csak olvasásra való üzemmódban; megszüntették azokat a problémákat, amelyek a memória szabadítása utáni hozzáféréshez vezettek; megoldották a fsck-ben fellépő reflink mutatókkal kapcsolatos problémákat; javították a tranzakciók újraindításának kezelését.
- Visszaállították az md-linear modult, amely blokkeszközök összekapcsolására szolgál. Ezt a modult korábban elavultnak nyilvánították és eltávolították a 6.8-as kernelfelversionálásból, de kiderült, hogy nagy szükség van rá, ezért most visszaállították.
- Az F2FS és SQUASHFS fájlrendszerek átálltak a memóriaoldal fóliák (page folios) használatára.
- Az OCFS2 és DLMFS fájlrendszerek új partíciómontálási API-ra váltottak.
- A null_blk meghajtóban bevezették a 'rotational' attribútumot, amely a configfs-en keresztül állítható be, és lehetővé teszi egy forgólemezekre alapozott eszközzel való munkavégzés szimulálását a kernel funkcióinak tesztelésének megkönnyítése érdekében.
- A Device mapper rendszerben, valamint a dm-mirror, dm-io, dm-table, dm-linear, dm-stripe és dm-raid1 modulokban bevezették az atomikus írás támogatását.
- Memória és rendszerszolgáltatások
- Befejeződött az ntsync meghajtó kernelbe történő integrációja, amely a szimbolikus eszközt "/dev/ntsync" és a Windows NT kernelben használt szinkronizálási primitíveket valósítja meg. Az ilyen primitívek kernel szintű megvalósítása jelentősen növeli a Wine segítségével futó Windows-játékok teljesítményét. A teljesítménynövekedés a felhasználói térben történő RPC alkalmazásával járó költségek megszüntetéséből adódik. A külön kernel meghajtó létrehozása a Linux számára a NT szinkronizálási API helyes megvalósításának nehézségeivel magyarázható, amely már meglévő primitívek felett működik.
- Új DMEM cgroup vezérlőt adtak hozzá az eszközök memóriaterületeinek elkülönített nyilvántartásához, mint például a GPU. A DMEM lehetővé teszi, hogy külön cgroup-okat hozhassunk létre a GPU-val dolgozó különböző feladatok számára, így ezek egymásra gyakorolt hatása nélkül futhatnak. Az új képesség megoldja a GPU műveletek kényszerített leállításának problémáját, amikor a rendelkezésre álló memória kimerül, köszönhetően a GPU által reflektált memória és a CPU által használt memória elkülönített cgroup-ba történő nyilvántartásának.
- Optimalizálások történtek a TLB (Translation Lookaside Buffer) kiürítési műveletének skálázhatóságában, amely a virtuális címek fizikai címekké való átalakításának gyorsítására szolgál. Az újonnan hozzáadott optimalizálások lényege a kontextus váltás során bizonyos adatstruktúrák késleltetett frissítése, ami fokozza a teljesítményt egyes tesztelési scenáriók során.
- Javították az MGLRU (Multi-Generational LRU) mechanizmus teljesítményét, amely a memóriába írt oldalak használatának és eltávolításának meghatározására szolgál.
- Folyatódik 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 az illesztőprogramok és kernel modulok fejlesztése során (a Rust támogatása alapértelmezés szerint nincs aktiválva, és nem vezet arra, hogy a Rust kötelező build függőségek közé kerüljön a kernelben). Lehetővé tették a "derive(CoercePointee)" makró használatát a kernel kódjában, amely lehetővé teszi az intelligens mutatók használatát trait-objektumokkal. A kernelben Rust-borítók kerültek bevezetésre a PCI, platformok, Open Firmware, szimbolikus eszközök és néhány bemeneti/kimeneti funkció számára. Greg Kroah-Hartman, aki a Linux stabil ágának támogatásáért felelős, az aktuális állapotot "majdnem készen a valódi Rust illesztőprogram írására" jellemezte.
- A build folyamatokban új kódot javasoltak, amely a betöltött modulok debug szimbólum verzióinak generálásához szükséges, és mostantól a DWARF formátumú debug bejegyzésekből meríti az információt, nem pedig közvetlenül a forráskódot elemzi. A változtatás lehetővé teszi a Rust nyelven írt modulok debug szimbólumainak verziózását. A régi megvalósítás is fennmaradt a kernelben, a generátor kiválasztása a build opciók szintjén történik.
- A PowerPC architektúra számára megvalósították a lustaságból történő feladateltávolítás (PREEMPT_LAZY, lazy preemption) támogatását, amely a valós idejű feladatok (RR/FIFO/DEADLINE) teljes eltávolítási módjának felel meg, de késlelteti a normál feladatok (SCHED_NORMAL) eltávolítását a tick határáig.
- A teljesítményprofilozó "perf" alrendszerhez hozzáadták az AMD processzorok energiafogyasztási számlálóinak támogatását. Lehetővé tették a működést olyan rendszereken, amelyek legfeljebb 2048 CPU magot tartalmaznak.
- Lehetővé tették a pid_max sysctl paraméter használatát a folyamatazonosító-namespace-eken (ID namespace). A pid_max paraméter a folyamatazonosítók (PID) maximális értékének korlátozására szolgál, és most felhasználható a megadott namespace-ben futó folyamatok maximális számának korlátozására. A paraméter feldolgozása hierarchikusan történik, azaz a külső namespace-ek korlátozásai kiterjednek a beágyazott namespace-ekre.
- A rendszerhívás execveat indításához használt fájlrendszerben /proc mostantól az indított fájl nevét fogja megjeleníteni, nem a fájledescriptor számát.
- A kernel forráskódjába (a samples/vfs könyvtárba) bekerült a mountinfo eszköz, amely bemutatja a statmount() és listmount() rendszerhívások használatát.
- A BPF alrendszerben új bpf_local_irq_save() és bpf_local_irq_restore() függvények kerültek bevezetésre, amelyek ideiglenesen letiltják a megszakításokat a helyi CPU-n. Ezek a függvények használhatók olyan struktúrák megvalósítására, amelyeket nem függesztenek fel megszakítások.
- A madvise() rendszerhívásban, a MADV_DONTNEED és MADV_FREE flag-ek használatakor biztosított a memóriaoldaltáblák felszabadítása a felszabadított címterjedelemhez kapcsolódóan, mivel bizonyos helyzetekben a üres memóriaoldalak jelentős mennyiségű memóriát foglalhatnak el.
- Az OpenRISC architektúrához megvalósították a folytonosan indítható szekvenciák (rseq, restartable sequences) támogatását, amelyek gyors atomikus műveletek végrehajtására szolgálnak, és ha egy másik szál megszakítja őket, akkor törlik és újrapróbálkoznak a végrehajtással.
- A kód átszervezése megtörtént a CRC32 és CRC-T10DIF algoritmusok megvalósításával, amely már nem keresztezi a crypto alrendszert, és közvetlenül a könyvtári interfészen keresztül hívják meg. A változtatás lehetővé tette a kód egyszerűsítését és hatékonyságának növelését.
- Az io_uring aszinkron bemeneti/kimeneti rendszerbe új interfész került bevezetésre, amely lehetővé teszi további integritási metainformációk átadását a be- és kimeneti műveletek végrehajtása során.
- Virtualizáció és biztonság
- Az execveat rendszerhíváshoz hozzáadott AT_EXECVE_CHECK zászló lehetővé teszi, hogy ellenőrizzük egy fájl végrehajthatóságát anélkül, hogy ténylegesen elindítanánk, figyelembe véve a biztonsági politikákat, az hozzáférési jogokat és az aktív LSM modulokat. Az AT_EXECVE_CHECK-zal való használatra javasolt securebit zászlók a SECBIT_EXEC_RESTRICT_FILE és a SECBIT_EXEC_DENY_INTERACTIVE, amelyek korlátozhatják a végrehajtást a parancsfájlokkal az értelmezhető programozási nyelvekben. A SECBIT_EXEC_RESTRICT_FILE zászló előírja a linkernek és az értelmezőknek, hogy használják az AT_EXECVE_CHECK opciót a végrehajthatóság ellenőrzésére, míg a SECBIT_EXEC_DENY_INTERACTIVE megakadályozza az interaktív parancsok kezelését. A változtatás fő gondolata a biztonsági politikák alkalmazásának lehetősége a hagyományos végrehajtható fájlokon kívül szöveges parancsfájlokra is, amelyeket értelmezők indításával lehet betölteni (tehát a végrehajtás tilalma nemcsak a "./script.sh" indítása esetén, hanem "sh script.sh" végrehajtásakor is érvényesíthető).
- X86 rendszereken bevezették a védett időszámlálók támogatását a vendég rendszerek számára, amelyek nem engedik meg a vendég rendszer óráinek módosítását a gazda környezetből. Ez a képesség az AMD SEV (Secure Encrypted Virtualization) mechanizmusra épül, amelyet a virtualizációs rendszerek védelmére használnak. virtuális gépekhez az hypervisor vagy a gazda rendszer adminisztrátorának beavatkozásával szemben.
- A SELinux kötelező hozzáférés-ellenőrzési rendszerébe beépítették az xperm-szabályok támogatását, amelyek lehetővé teszik a SELinux politikák összekapcsolását bizonyos ioctl() hívásokkal vagy netlink üzenetekkel.
- A kernel modulok digitális aláírásának ellenőrzésére alapértelmezés szerint a SHA1 helyett a SHA512 algoritmus használatos.
- A VirtualBox vendég rendszerekhez készült illesztőprogramokhoz hozzáadta az ARM64 architektúra támogatását.
- A hipervizorban KVM folytatódik a Trusted Domain Extensions (TDX) Intel mechanizmusának aktiválása a vendég rendszerek memória titkosításához.
- A virtio_blk-hoz hozzáadták a hibajavítási mód támogatását.
- Hálózati alrendszer
- Az RxRPC protokoll megvalósításában lehetőség nyílt nagy UDP keretek használatára a sávszélesség növelése érdekében.
- A TCP-hez hozzáadták a RACK-TLP algoritmus támogatását a csomagok elvesztésének meghatározásához.
- Új sysctl tcp_tw_reuse_delay paraméter került bevezetésre, amely a névterekhez (network namespace) kötődik, és lehetővé teszi, hogy meghatározzuk a késleltetést, mielőtt a rendszer ismételten használhatja a TCP socket lezárása után a hálózati port számát.
- Lehetőség nyílt pontos időszolgáltató (PTP) választására a PHY és MAC szinteken történő időbélyegek generálásához.
- IPsec esetén megvalósult az IP-csomagok kapszulázásához tartozó aggregáló és töredező mechanizmus — IP-TFS/AGGFRAG (IP Traffic Flow Security/Aggregation and Fragmentation Mode for Encapsulating Security Payload).
- A hálózati socket rendszerhez hozzáadódott a prioritási információ (SO_PRIORITY) továbbításának támogatása irányító üzenetek (cmsg — control messages) formájában. A hálózati socketekhez hozzáadódott az SO_RCVPRIORITY opció, amely lehetővé teszi a recvmsg() függvényben a socket prioritási információjának továbbítását.
- Hardver
- Új amdxdna drivert vezettek be az AMD CPU-ba integrált NPU (Neural Processing Unit) gyorsítókhoz az XDNA architektúra alapján, amelyeket a gépi tanulással kapcsolatos műveletek gyorsítására terveztek. Az XDNA architektúrával rendelkező NPU az AMD Ryzen 7040 és 8040 sorozatú processzoraiban, az AMD Alveo V70 gyorsítóiban és az AMD Versal SoC-ban érhető el.
- Az i915 drivert frissítették az új GPU-k azonosítóival, megvalósították az HDMI inicializálási hibák kezelését, valamint növelték a GPU motorok visszaállításának megbízhatóságát Haswell és régebbi rendszereken.
- Folyamatban van a drm (Direct Rendering Manager) Xe driverének fejlesztése Intel Xe architektúrájú GPU-khoz, amelyeket az Intel Arc család grafikus kártyáiban és az integrált grafikákban használnak a Tiger Lake processzoroktól kezdődően.
- A Nouveau driverhez hozzáadódott a GSP-RM log bufferjeinek debugfs-en keresztüli továbbításának lehetősége.
- Az AMDGPU driverében megvalósították a DRM panic mechanizmus támogatását, amely egyfajta „kék képernyő halál” megjelenítését jelenti a hibák esetén. Folyamatban van a jövőbeli Radeon RX 9000 grafikus kártyák sorozatának támogatásának előkészítése, amely az RDNA4 architektúrára épül. Frissítették a DCN 3.5, GG 9.5, IH 4.4, PSP 13.x, SMU 13.x, VCN 5.x, JPEG 5.x, GC 12.x, DC FAMS, RAS és ISP támogatását.
- A msm DRM driverhez (Qualcomm Adreno GPU) hozzáadódott a Qualcomm SM6150 (QCS615) platform támogatása.
- A panfrost DRM driverhez hozzáadódott a MediaTek MT8188 SoC támogatása Mali-G57 GPU-val.
- A vc4 DRM driverhez hozzáadódott a Broadcom BCM2712 (Raspberry Pi 5) SoC támogatása.
- A vfio nvgrace-gpu driverhez hozzáadódott a NVIDIA Grace Blackwell 200 chipek támogatása.
- Az Intel THC (Touch Host Controller) vezérlőkhöz készült illesztőprogram beépített, amely a hordozható számítógépek érintőképernyőivel és touchpadjeivel való interakcióhoz szükséges. Támogatást kapott a PCI interfésszel rendelkező Wacom eszközökhez. A QH Electronics játékkontrollerekkel való kompatibilitás is hozzá lett adva.
- Hozzáadtuk az ARM alapú platformok, SoC-k és eszközök támogatását: Qualcomm Snapdragon 8 Elite (SM8750), Qualcomm Snapdragon AR2 (SAR2130P), Qualcomm IQ6/IQ8, Snapdragon 425 (MSM8917), Samsung Exynos 9810, Blaize BLZP1600, Microchip SAMA7D65, Renesas R-Car V4H ES3.0, Renesas RZ/G3E. Hozzáadtuk a RISC-V architektúrára épülő SpacemiT K1 SoC támogatását.
- Az ALSA hangrendszerben a MIDI 2.0 számára a rawmidi és sequencer API-k kibővítésre kerültek. Az API a hangkártya szorosra vonatkozó tömörítési műveletek kiszervezésére ASRC (Asynchronous Sample Rate Conversion) támogatással bővült.
- Hozzáadtuk az Allwinner suinv F1C100s, Awinc AW88083, Realtek ALC5682I-VE, TAS2781, Focusrite Scarlett 4th Gen 16i16, 18i16 és 18i20 eszközök hangrendszereinek támogatását. Továbbá a SteelSeries Arctis 9 vezeték nélküli fülhallgatók támogatása is bevezetésre került.
Forrás: opennet.ru
