Po dvou měsících vývoje Linus Torvalds představil vydání jádra Linux 6.14. Mezi nejvýraznějšími změnami: ovladač ntsync s primitivy synchronizace Windows NT, nastavení vyvážení operací čtení v Btrfs RAID1, podpora reflink v XFS v reálném čase, možnost neukládajícího bufferovaného vstupu/výstupu, dmem cgroup pro omezení paměti GPU, využití io_uring v FUSE, delegování atributů v NFS, podpora atomického zápisu v Device mapper, zrychlení symbolických odkazů, správa možnosti provádění skriptů, podpora čipů Qualcomm Snapdragon 8 Elite, ovladač pro NPU AMD.
Do nové verze bylo přijato 12115 oprav od 1984 vývojářů, velikost patche – 39 MB (změny se dotkly 10170 souborů, přidáno 531586 řádků kódu, odstraněno 235999 řádků). V minulém vydání bylo 14172 oprav od 2086 vývojářů, velikost patche – 46 MB. Přibližně 41 % všech změn v 6.14 se týká ovladačů zařízení, přibližně 13 % změn se vztahuje k aktualizaci kódu specifického pro hardwarové architektury, 14 % souvisí se síťovým stackem, 7 % s souborovými systémy a 4 % s vnitřními subsystémy jádra.
- Diskový subsystém, vstup/výstup a souborové systémy
- V souborovém systému Btrfs se objevila podpora nových metod vyvážení operací čtení mezi disky, které tvoří pole RAID1. Kromě dříve fungujícího rozdělení zátěže na základě identifikátorů procesů (pid) byly v nové verzi navrženy tři nové režimy vyvážení: „rotation“ (rovnoměrné rozdělení zátěže mezi všechny disky, režim zapnutý jako výchozí); „latency“ (rozložení se zohledněním latencí, může být užitečné při poruchách nebo nestabilním chování disků); devid (ruční správa). Pro změnu režimu vyvážení přidán rozhraní /sys/fs/btrfs/<UUID>/read_policy. Mezi dalšími změnami v Btrfs – implementace ioctl FS_IOC_READ_VERITY_METADATA.
- Přidáno režim neukládajícího bufferovaného vstupu/výstupu, při kterém jsou data okamžitě odstraněna z stránkového cache po dokončení operací jejich čtení nebo zápisu. Změna může být užitečná při použití velmi rychlých úložných zařízení, jejichž operace je nepotřebné ukládat do paměti. Pro tato zařízení nový režim umožňuje vyloučit nadměrné využívání paměti stránkovým cache bez nutnosti použití složitého API pro přímý vstup/výstup (Direct I/O).
- V fsnotify, mechanismu sledování změn v FS, bylo přidáno Nová událost FS_PRE_ACCESS, generovaná ve fázi před přístupem k obsahu souboru. Událost se zpracovává synchronně, t. j. jádro odesílá událost a čeká na přijetí odpovědi. Pokud byla odpověď přijata, operace se provede, a pokud došlo k chybě, systémový volání vrací do prostoru uživatele kód chyby. Pomocí FS_PRE_ACCESS může proces v prostoru uživatele například zorganizovat vyplnění souboru dle připravenosti dat v pomalém úložišti.
- Do subsystému FUSE, který umožňuje vytváření implementací souborových systémů v prostoru uživatele, byla přidána podpora výměna dat mezi jádrem a zpracovatelem v prostoru uživatele pomocí mechanismu vstupu/výstupu io_uring. Tato změna zvyšuje výkon FUSE snížením přepínání kontextu mezi jádrem a prostorem uživatele.
- Do souborového systému XFS byla přidána možnost podpora zpětného mapování (rmap, reverse-mapping) v režimu práce s předvídatelnými zpožděními ("realtime device"). Zpětné mapování umožňuje určit, pro který soubor je použita určitá bloková adresa v úložném zařízení. Pomocí rmap v XFS pro realtime režim byla implementována podpora operace reflink, která umožňuje vytváření kopií souborů clonováním metadat souboru a vytvářením odkazu na již existující data bez jejich skutečného kopírování.
- Ve VFS bylo realizováno bylo zavedené cachování velikosti symbolických odkazů, které umožnilo zrychlit výkon operace readlink o 1,5 % (v testu s /initrd.img v ext4). Cachování bylo zapnuto v FS ext4 a tmpfs.
- Do implementace NFSv4.2 byla přidána podpora delegování atributů souborů, které umožňuje spravovat takové atributy souborů, jako je čas změny (mtime), na straně NFS klienta, aniž by bylo nutné vracet změny na server. V NFS byla také zlepšena podpora protokolu “LOCALIO”, který umožňuje určit, zda jsou klient a server NFS na stejném hostiteli, aby mohly být použity příslušné optimalizace, jako je použití přímého vstupu/výstupu (Direct I/O) klientem.
- Byla zvýšena výkon operací čtení v souborových systémech NETFS, CIFS a AFS (Andrew File System).
- V Squashfs bylo zapnuto režim přímého načítání bloků do stránkového cache (SQUASHFS_FILE_DIRECT), umožňující obejít se bez zvláštního cache read_page. Změna umožnila zmenšit velikost paměti spotřebovávané při práci se Squashfs.
- V systémovém volání statx() realizováno příznak STATX_DIO_READ_ALIGN, pro určení požadovaného zarovnání pro operace čtení ze souboru.
- V souborovém systému Bcachefs aktualizováno a stabilizováno formát diskových struktur. Jakékoli další změny formátu budou zařazeny mezi volitelné a budou realizovány ve formě volitelných doplňků. Výrazně byla zvýšena rychlost kontroly integrity FS. Kromě toho došlo v Bcachefs k vylepšení provozu v režimu pouze pro čtení; byly odstraněny problémy vedoucí k přístupu k paměti po jejím uvolnění (use after free); byly vyřešeny problémy s reflink ukazateli ve fsck; byla opravena obsluha restartu transakce.
- Vrácen modul md-linear, určený pro spojování blokových zařízení. Tento modul byl dříve označen jako zastaralý a odstraněn z jádra 6.8, ale ukázalo se, že je žádán, a proto byl nyní obnoven.
- Soubory systému F2FS a SQUASHFS byly převedeny na použití folio stránek paměti (page folios).
- V ovladači null_blk byl implementován atribut „rotational“, nastavitelný pomocí configfs a umožňující simulovat práci s zařízením na bázi rotačních disků pro usnadnění testování funkcí jádra.
- V systému Device mapper a v modulech dm-mirror, dm-io, dm-table, dm-linear, dm-stripe a dm-raid1 byla implementována podpora atomárního zápisu.
- Paměť a systémové služby
- Byla dokončena integrace do jádra ovladače ntsync, implementující symbolické zařízení /dev/ntsync a sadu primitiv pro synchronizaci používaných v jádře Windows NT. Implementace těchto primitiv na úrovni jádra výrazně zvyšuje výkon Windows her spouštěných pomocí Wine. Zvýšení výkonu je dosaženo díky odstranění režijních nákladů spojených s použitím RPC v uživatelském prostoru. Vytvoření samostatného ovladače pro jádro Linux je vysvětleno problematičností správné implementace API synchronizace NT nad existujícími primitivy v jádře.
- Přidán nový kontroler cgroup DMEM pro oddělené sledování oblastí paměti zařízení, jako je GPU. DMEM umožňuje vytvářet samostatné cgroup pro různé úkoly pracující s GPU, aby mohly probíhat nezávisle na sobě. Nová funkce řeší problém s nuceným ukončováním operací s GPU při vyčerpání dostupné paměti díky sledování zrcadlené paměti GPU a paměti CPU, kterou používají ovladače, v samostatných cgroup.
- Byly provedeny optimalizace pro škálování operace vyprázdnění (flush) TLB (Translation Lookaside Buffer), která se používá pro urychlení převodu virtuálních adres na fyzické. Přidané optimalizace se zaměřují na zpožděnou aktualizaci některých datových struktur během přepínání kontextu, což zvyšuje výkon při některých testech.
- Byla zvýšena výkon mechanismu MGLRU (Multi-Generational LRU), který se používá k určení, které stránky paměti jsou použity a které lze vyřadit do swapu.
- Pokračuje přenos změn z větve Rust-for-Linux, spojených s použitím jazyka Rust jako druhého jazyka pro vývoj ovladačů a modulů jádra (podpora Rust není ve výchozím nastavení aktivní a nevede k zařazení Rust mezi povinné závislosti kompilace jádra). Byla poskytnuta možnost použít v kódu jádra makro „derive(CoercePointee)“, které umožňuje používat inteligentní ukazatele s trait-objekty. V rámci jádra byly zahrnuty Rust-wrapper pro PCI, platformy, Open Firmware, symbolických zařízení a některé funkce vstupu/výstupu. Greg Kroah-Hartman, odpovědný za podporu stabilní větve jádra Linux, charakterizoval současný stav jako „téměř připravenost k napsání skutečného ovladače na Rustu“.
- Ve scénářích kompilace byla navržena nový kód pro generování verzí ladicích symbolů pro načítané moduly, který nyní používá informace z ladicích záznamů ve formátu DWARF, namísto přímého analýzy zdrojového kódu. Tato změna umožňuje aplikaci verzionování ladicích symbolů pro moduly napsané v jazyce Rust. Starší implementace zůstává v jádře, přičemž výběr generátoru se provádí na úrovni kompilace.
- Pro architekturu PowerPC byla implementována podpora režimu lenivého vyřazení úloh (PREEMPT_LAZY, lazy preemption), který odpovídá režimu úplného vyřazení („full preemption“) pro realtime úlohy (RR/FIFO/DEADLINE), ale zpožďuje vyřazení běžných úloh (SCHED_NORMAL) do hranice tikání.
- V podsystemu profilování výkonnosti perf byla přidána podpora počítadel energetické spotřeby procesorů AMD. Byla přidána možnost práce na systémech, které mají až 2048 CPU jader.
- Byla poskytnuta možnost použití parametrů sysctl pid_max s prostorami jmen identifikátorů procesů (ID namespace). Parametr pid_max je určen k omezení maximální hodnoty identifikátorů procesů (PID) a nyní může být použit k omezení maximálního počtu procesů spuštěných ve specifickém jménu. Zpracování parametru probíhá hierarchicky, tj. omezení ve vnějších prostorách jmen se vztahují na vnořené prostory jmen.
- Při použití pro spuštění procesu systémového volání execveat v souborovém systému /proc nyní bude zobrazováno jméno spuštěného souboru, nikoli číslo souborového deskriptoru.
- Do zdrojového kódu jádra (ve složce samples) byla přidána utilita mountinfo, která demonstruje použití systémových volání statmount() a listmount().
- V podsystemu BPF navrženy nové funkce bpf_local_irq_save() a bpf_local_irq_restore() pro dočasné vypnutí přerušení na lokálním CPU. Funkce mohou být použity k implementaci struktur, jejichž zpracování není přerušováno přerušením.
- Ve systémovém volání madvise() při použití příznaků MADV_DONTNEED a MADV_FREE bylo zabezpečeno uvolnění tabulek stránek paměti, které jsou spojeny s uvolněným adresním rozsahem, protože v některých situacích mohou prázdné stránky paměti zabírat poměrně hodně paměti.
- Pro architekturu OpenRISC byla implementována podpora mechanizmu restartovatelných sekvencí (rseq, restartable sequences), určeného k rychlému atomárnímu provádění operací, které se v případě přerušení jiným vláknem ruší a provádí se opakovaný pokus o provedení.
- Byla provedena reorganizace kódu s implementací algoritmů CRC32 a CRC-T10DIF, které se již nepřekrývá s podsystemem crypto a je voláno přímo z knihovního rozhraní. Změna umožnila zjednodušit kód a zvýšit jeho efektivitu.
- Systém asynchronního I/O io_uring přidán rozhraní pro přenos dodatečných metadat o integritě při provádění operací čtení a zápisu.
- Virtualizace a bezpečnost
- Do systémového volání execveat přidán příznak AT_EXECVE_CHECK, který umožňuje provedení kontroly přípustnosti spuštění souboru bez jeho reálného spuštění, avšak s ohledem na bezpečnostní politiky, oprávnění a aktivní moduly LSM. Pro použití v kombinaci s AT_EXECVE_CHECK byly navrženy bezpečnostní příznaky SECBIT_EXEC_RESTRICT_FILE a SECBIT_EXEC_DENY_INTERACTIVE, které lze využít k omezení spouštění souborů se skripty v interpretovaných programovacích jazycích. Příznak SECBIT_EXEC_RESTRICT_FILE předepisuje kompilátorům a interpretům používat možnost AT_EXECVE_CHECK pro kontrolu přípustnosti spuštění, zatímco příznak SECBIT_EXEC_DENY_INTERACTIVE zakazuje zpracování interaktivních příkazů. Hlavní myšlenkou změny je možnost aplikace bezpečnostních politik nejen na tradiční spustitelné soubory, ale také na textové soubory se skripty, které lze načíst spuštěním interpretu (tj. zákaz spuštění může být realizován nejen při spuštění „./script.sh“, ale také při vykonávání ve formě „sh script.sh“).
- V systémech x86 je implementována podpora zabezpečených časových čítačů pro hostované systémy, která neumožňuje měnit systémové hodiny hostovaného systému z hostitelského prostředí. Možnost je realizována na základě mechanismu AMD SEV (Secure Encrypted Virtualization), používaného v virtualizačních systémech k ochraně virtuálních strojů před zásahem hypervizora nebo administrátora hostitelského systému.
- Do systému mandatorního řízení přístupu SELinux byla přidána podpora xperm-pravidel, která umožňují přiřazení politik SELinux k určitému volání ioctl() nebo zprávám netlink.
- Pro ověřování modulů jádra digitálním podpisem je místo SHA1 ve výchozím nastavení je využit algoritmus SHA512.
- V ovladačích pro hostované systémy VirtualBox je zahrnuta je podpora architektury ARM64.
- V hypervizoru KVM pokračuje práce se využívá mechanismus Intel TDX (Trusted Domain Extensions) pro šifrování paměti hostovaných systémů.
- V virtio_blk byla přidána je podpora režimu obnovy chyb.
- Síťová subsystém
- V implementaci protokolu RxRPC se objevila je možnost využití velkých rámců UDP pro zvýšení propustnosti.
- Pro TCP byla přidána podpora algoritmu RACK-TLP pro určení ztráty paketů.
- Přidáno nový parametr sysctl tcp_tw_reuse_delay, který funguje v rámci jmenného prostoru (network namespace) a umožňuje určit zpoždění, které je vloženo předtím, než systém může znovu použít číslo síťového portu po uzavření TCP-socketu.
- Byla přidána možnost výběru poskytovatele přesného času (PTP) pro generování časových značek na úrovních PHY a MAC.
- Pro IPsec byla implementována podpora mechanismu agregace a fragmentace enkapsulovaných IP paketů – IP-TFS/AGGFRAG (IP Traffic Flow Security/Aggregation and Fragmentation Mode for Encapsulating Security Payload).
- Do systému síťových socketů byla přidána podpora přenos informací o prioritě (SO_PRIORITY) ve formě řídicích zpráv (cmsg — control messages). Pro síťové sockety byla přidána možnost SO_RCVPRIORITY, zahrnující ve funkcích recvmsg() přenos informací o prioritě socketu.
- Hardware
- Přidáno poháněčem amdxdna pro integrované v CPU AMD akcelerátory NPU (Neural Processing Unit) na základě architektury XDNA, určené pro zrychlení operací souvisejících s strojovým učením. NPU na základě architektury XDNA je dodáván v sériích 7040 a 8040 procesorů AMD Ryzen, akcelerátory AMD Alveo V70 a SoC AMD Versal.
- V ovladači i915 byly přidány byly implementovány identifikátory nových GPU, zpracován handler pro chyby inicializace HDMI, zlepšena spolehlivost resetování GPU jader na systémech Haswell a starších.
- Pokračuje práce na drm-ovladači (Direct Rendering Manager) Xe pro GPU na základě architektury Intel Xe, která se používá ve grafických kartách Intel rodiny Arc a integrované grafice, počínaje procesory Tiger Lake.
- V ovladači Nouveau byla přidána možnost přenosu bufferů s logy GSP-RM přes debugfs.
- V ovladači AMDGPU byla implementována podpora mechanismu DRM panic, zobrazující podobu „modré obrazovky smrti“ při chybách. Pokračuje se v přípravě na podporu budoucí série grafických karet Radeon RX 9000 na základě architektury RDNA4. Byla aktualizována podpora 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 a ISP.
- V DRM-ovladači msm (GPU Qualcomm Adreno) byla přidána podpora platformy Qualcomm SM6150 (QCS615).
- V DRM-ovladači panfrost byla přidána podpora SoC MediaTek MT8188 s GPU Mali-G57.
- V DRM-ovladači vc4 byla přidána podpora SoC Broadcom BCM2712 (Raspberry Pi 5).
- V ovladači vfio nvgrace-gpu byla přidána podpora čipů NVIDIA Grace Blackwell 200.
- Složení bylo zapnuto ovladač pro kontroléry Intel THC (Touch Host Controller), používaný pro interakci se dotykovými obrazovkami a touchpady na některých noteboocích. Byla přidána podpora zařízení Wacom s rozhraním PCI. Byla přidána podpora herních ovladačů QH Electronics.
- Byla přidána podpora ARM platformy, SoC a zařízení: 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. Přidána podpora SoC SpacemiT K1 na bázi architektury RISC-V.
- V zvukové subsystému ALSA pro MIDI 2.0 rozšířeny API rawmidi a sequencer. V API pro přesun operací komprese na stranu zvukové karty byla přidána podpora ASRC (Asynchronous Sample Rate Conversion).
- Přidána podpora zvukových systémů zařízení Allwinner suinv F1C100s, Awinc AW88083, Realtek ALC5682I-VE, TAS2781, Focusrite Scarlett 4th Gen 16i16, 18i16 a 18i20. Byla přidána podpora bezdrátových sluchátek SteelSeries Arctis 9.
Zdroj: linux.org.ru
