Po dvou měsících vývoje vydal Linus Torvalds jádro. Linux 6.17. Mezi nejvýznamnější změny patří: vylepšený výkon Btrfs, systémová volání file_getattr() a file_setattr(), sjednocení konfigurací pro jeden a více procesorů v plánovači úloh, modul DAMON_STAT se statistikami přístupu k paměti, podpora Live patchů na systémech ARM64, odesílání výpisů jádra přes socket AF_UNIX, omezení SCHED_EXT přes cgroup, zjednodušená konfigurace ochrany před zranitelnostmi CPU, vestavění Clang s inicializací proměnných na zásobníku, ochrana proti spoofingu /proc, rozšíření subsystému RV (Runtime Verification), omezení socketů AF_UNIX přes AppArmor, algoritmus řízení přetížení TCP DualPI2.
Nová verze obsahuje 14 334 oprav od 2 118 vývojářů s velikostí opravy 46 MB (změny ovlivnily 12 841 souborů, přidaly 646 654 řádků kódu a odstranily 398 782 řádků). Předchozí verze obsahovala 15 924 oprav od 2 145 vývojářů s velikostí opravy 50 MB. Přibližně 43 % všech změn ve verzi 6.17 se týká ovladačů zařízení, přibližně 12 % změn se týká aktualizací kódu specifického pro hardwarové architektury, 14 % se týká síťového zásobníku, 4 % se týká souborových systémů a 3 % se týká interních subsystémů jádra.
Hlavní nové funkce v jádře 6.17 (1, 2, 3):
- Diskový subsystém, I/O a souborové systémy
- Btrfs nyní obsahuje experimentální podporu pro velká folia, což snižuje režijní náklady a zlepšuje výkon určitých operací. Bylo implementováno ukládání požadavků na bitmapy s alokací volného místa do mezipaměti, což zvyšuje výkon při vytváření prázdných souborů o 20 %. V systémech používajících kompresi dat byl vylepšen výkon předběžného čtení. Klíče ve struktuře XArray jsou nyní hustěji zabaleny, což zvyšuje kompaktnost úložiště uzlů stromu extentů a snižuje počet koncových uzlů o 50–70 %. Pro defragmentované extenty byla k dispozici další nastavení komprese.
- Souborový systém ext4 nyní podporuje bufferované I/O operace s příznakem RWF_DONTCACHE, který způsobí, že data budou z mezipaměti stránek odstraněna ihned po dokončení operace.
- Souborový systém EROFS nyní podporuje kompresi metadat.
- NFS server nyní může delegovat operace zápisu na klienty, kteří otevírají soubory v režimu pouze pro zápis.
- Do systémového volání fallocate() byl přidán příznak FALLOC_FL_WRITE_ZEROES. Tento příznak umožňuje vyplnění nulou zadaného rozsahu v souboru pomocí příkazu WRITE_ZERO, který je podporován některými SSD disky a provádí vyplnění nulou bez I/O operací. Tato možnost je v současné době k dispozici pouze na souborových systémech ext4.
- Přidána systémová volání file_getattr() a file_setattr() pro manipulaci s atributy inode daného souboru.
- Ovladač „pktcdvd“ pro práci s optickými médii v dávkovém režimu, který byl v roce 2016 označen jako zastaralý, byl odstraněn.
- Bcachefs FS v jádře Linux Bcachefs byl přesunut do režimu externí údržby, což znamená, že změny v Bcachefs již nebudou přijímány do hlavního jádra, zatímco souborový systém zůstane v kódové základně jádra. Vývoj Bcachefs bude probíhat mimo kódovou základnu jádra, dokud Kent Overstreet neprokáže svou schopnost správně komunikovat s ostatními vývojáři jádra a dodržovat zavedené vývojové pokyny.
- Paměťové a systémové služby
- Z plánovače úloh byla odstraněna podpora pro konfigurace s jedním procesorem. Na systémech s jedním procesorem by se nyní měla používat jádra vytvořená pro systémy s více procesory (SMP). Kód pro systémy s jedním a více procesory byl sjednocen a byly odstraněny zbytečné závislosti na parametru jádra CONFIG_SMP.
- Byl přidán modul jádra DAMON_STAT (Data Access Monitoring Results Stat). Umožňuje monitorovat přístup k paměti RAM pomocí subsystému DAMON (Data Access MONitor). Modul poskytuje statistiky o neaktivitě (memory_idle_ms_percentiles) a odhadované šířce pásma paměti (estimated_memory_bandwidth).
- Na systémech s architekturou ARM64 byla implementována podpora pro živé záplaty, které umožňují aplikovat opravy na jádro. Linux za chodu, bez restartu nebo zastavení systému.
- V minimalistické knihovně jazyka C nolibc, dodávané se zdrojovým kódem jádra Linux a poskytuje obal kolem základních systémových volání, podporující architektury SuperH, x32, MIPS n32 a MIPS n34.
- Možnost odesílání obsahu výpisu jádra přes socket AF_UNIX byla rozšířena, což umožňuje vytváření bezpečnějších obslužných rutin výpisu jádra v uživatelském prostoru, které se nespoléhají na volání privilegovaných procesů jádrem. Nová verze přidává protokol pro vytváření servery, schopný spravovat zpracování výpisů jádra na úrovni úlohy. Například výpisy jádra mohou být u některých procesů ignorovány, zatímco u jiných mohou být předávány přes socket. Byl vyvinut samostatný prototyp serveru pro správu výpisů jádra.
- Přidána volba příkazového řádku jádra „crashkernel=size,cma“ pro rezervaci paměťového prostoru pomocí CMA (Contiguous Memory Allocator) pro ukládání výpisů chyb jádra.
- Mechanismus pidfd byl rozšířen tak, aby umožňoval použití identifikátorů specifických pro proces, které na rozdíl od pid nelze znovu přiřadit. Byla přidána možnost vázat rozšířené atributy na pidfd z uživatelského prostoru. Nyní je možné otevírat deskriptory souborů pro pidfd pomocí funkce open_by_handle_at() bez vazby na souborový systém. Interní informace vytvořené jádrem pomocí pidfd jsou nyní vázány na proces, nikoli na pidfd, a jsou zachovány mezi opětovnými otevřeními stejného procesu.
- Do subsystému BPF byla přidána funkce bpf_cgroup_read_xattr() pro čtení rozšířených atributů souborů. Programy BPF nyní podporují standardní operace s řetězci, jako jsou bpf_strcmp, bpf_strnchr, bpf_strchrnul, bpf_strlen a bpf_strspn, které fungují v režimu pouze pro čtení. Standardní proudy stdout a stderr lze nyní použít k interakci s komponentami uživatelského prostoru. U systémů založených na architektuře LoongArch nyní BPF podporuje dynamickou modifikaci kódu, mechanismus BPF trampoline (který snižuje režii volání mezi jádrem a programy BPF) a spouštění programů, které používají struct_ops k vytváření obslužných rutin funkcí jádra prostřednictvím BPF.
- Systém měření času nyní podporuje pomocné hodiny, které nejsou připojeny k běžným systémovým hodinám a fungují ve vlastním rytmu (dříve všechny hodiny fungovaly ve stejném rytmu a lišily se pouze svým posunem).
- Byla přidána počáteční podpora pro Proxy Execution, která zmírňuje problémy s inverzí priorit. Proxy Execution umožňuje úloze čekající na uvolnění zámku přenést kontext provádění na úlohu, která zámek drží, a tím urychlit uvolnění tohoto zámku.
- Pokračování migrace změn z verze Rust for branchLinux, související s použitím Rustu jako druhého jazyka pro vývoj ovladačů a modulů jádra (podpora Rustu není ve výchozím nastavení aktivní a nevede k tomu, že by Rust byl zahrnut mezi požadované závislosti pro sestavení jádra). Byly přidány abstrakce pro správu regulátorů napětí a proudu, vlastností firmwaru, I/O zdrojů a I/O paměti. Bylo implementováno makro „warn_on!()“. Pro ukazatele uživatelského prostoru byl přidán typ UserPtr. Funkčnost modulů workqueue, uaccess, dma, time a list byla rozšířena. Modul „bits“ byl přidán s funkcemi „bit“ a „genmask“.
- Kód pro výpočet kontrolních součtů CRC byl přepracován a byla přidána nová volání pro generování hashů SHA-1 a SHA-2. Byly přidány optimalizace specifické pro hardware. Výkon funkce crc32c() byl vylepšen na nových procesorech x86_64, které podporují rozšíření VPCLMULQDQ (Vector Carry-Less Multiplication of Quadwords).
- Pro systémy S390 byla implementována podpora pro výměnu a migraci velkých paměťových stránek (transparentní obrovské stránky).
- Přidána možnost konfigurovat agresivitu uvolňování paměťových stránek (proactive-reclaim) pro konkrétní uzly NUMA, když je paměť nedostatečná. To umožňuje vybrat uzly NUMA, pro které bude použito agresivnější uvolňování paměti. Například: „echo „512M swappiness=10“ > /sys/devices/system/node/node1/reclaim.“
- Mechanismus SCHED_EXT, který umožňuje použití BPF k vytváření plánovačů CPU, nyní zahrnuje možnost správy propustnosti pomocí cgroups. Například parametr cpu.max lze použít k omezení zatížení CPU.
- Automatické připojení virtuálního souborového systému tracefs do adresáře /sys/kernel/debug/tracing bylo zastaralé; místo toho by měl být použit adresář /sys/kernel/tracing.
- Virtualizace a bezpečnost
- Přidána možnost povolit ochrana před zranitelnostmi CPU výběrem blokovatelných útočných vektorů Místo specifikace konkrétních zranitelností v nastavení se metody blokování vybírají v závislosti na typu narušení izolace: mezi uživatelem a jádrem (uživatel-jádro), mezi uživatelem a jiným uživatelem (uživatel-uživatel), mezi hostovaným systémem a hostitelským prostředím (host-host), mezi různými hostovanými systémy (host-host) a mezi různými vlákny (cross-thread). Navrhovaný přístup umožňuje aktivovat ochranu pouze proti těm třídám zranitelností, které uživatele skutečně znepokojují. Například vlastníci cloudového prostředí mohou povolit režimy host-host a host-host, které aktivují metody ochrany proti následujícím zranitelnostem: BHI, GD, L1TF, MDS, MMIO, Retbleed, RFDS, Spectre_v2, SRBDS, SRSO a TAA.
- Přidána podpora pro sestavování pomocí kompilátoru Clang s využitím režimu sledování hloubky zásobníku, který inicializuje všechny proměnné uložené na zásobníku. Tato inicializace zabraňuje úniku informací o jádře prostřednictvím neinicializovaných proměnných, které mohou obsahovat zbytky dříve uložených dat na zásobníku. Dříve byla podobná funkce podporována pomocí pluginu STACKLEAK GCC.
- Přidána ochrana proti útočníkům, kteří falešně napodobují souborový systém /proc připojením v režimu „bind“. Číslo kořenového inodu /proc je nyní pevné (PROCFS_ROOT_INO) a lze jej ověřit procesem v uživatelském prostoru.
- Subsystém RV (Runtime Verification), určený k ověřování správného provozu vysoce spolehlivých systémů, byl aktualizován o monitorovací komponentu rtapp (Real-time application monitor) pro sledování běžných problémů v aplikacích pracujících v reálném čase a také o komponenty rp, sssw a opid pro testování plánovače úloh. Byla implementována možnost vytvářet monitorovací komponenty, které k určení modelu chování používají lineární časovou logiku namísto deterministického automatu. Ověřování se provádí za běhu připojením obslužných rutin k sledovacím bodům, které porovnávají skutečný průběh provádění s předdefinovaným referenčním modelem definujícím očekávané chování systému.
- Systém AppArmor byl aktualizován a nyní podporuje řízení přístupu pro sockety AF_UNIX.
- Hypervizor KVM na systémech ARM implementuje podporu pro řadič přerušení GICv5.
- Přidáno nastavení CONFIG_KVM_IOAPIC pro zakázání podpory emulace APIC, PIC a PIT v KVM.
- Přidána ochrana proti zranitelnosti VMSCAPE.
- Přidán příkaz ioctl FS_IOC_GETLBMD_CAP pro získání informací z uživatelského prostoru o aplikaci nástrojů pro ochranu integrity na soubor.
- Rozhraní /sys/fs/selinux/user bylo zastaralé; přístup k němu nyní způsobuje pětisekundové zpoždění a vypíše varování v protokolu.
- Síťový subsystém
- Implementace technologie PSE (Power Sourcing Equipment), která se používá k napájení zařízení, jako jsou IP kamery a bezdrátové přístupové body, přes Ethernet, byla vylepšena o podporu konfigurovatelných strategií rozpočtování spotřeby (celkový dostupný výkon). Tyto strategie umožňují upřednostnit, které porty by měly být vypnuty, aby se zabránilo přetížení.
- Implementace MCTP (Management Component Transport Protocol) nyní podporuje směrování přes bránu. Například následující pravidla směrují pakety do koncového bodu s ID 10 přes zařízení mctpi2c0 s použitím adresy 0x1d, která je přímo přiřazena koncovému bodu s ID 9. mctp route add 9 via mctpi2c0 mctp neigh add 9 dev mctpi2c0 lladdr 0x1d mctp route add 10 gw 9
- Pro UNIXové sockety (AF_UNIX) je implementována volba SO_INC a pro adresní rodinu VSOCK je implementována volba SIOCINQ. Tyto volby jsou podobné volbě TCP_INQ pro TCP a umožňují získat informace o počtu bajtů dostupných pro čtení na socketu prostřednictvím řídicí zprávy.
- TCP nyní striktně vynucuje inzerovanou velikost přijímacího okna, která určuje množství dat, které je možné odeslat před přijetím potvrzení (ACK) z druhé strany. Dříve jádro nadále zpracovávalo data přicházející i za hranicí inzerovaného přijímacího okna, ale nyní s tím přestane.
- MPTCP (Multipath TCP) nyní podporuje socketovou možnost TCP_MAXSEG pro omezení maximální velikosti odesílaných segmentů. MPTCP je rozšíření protokolu TCP pro současné doručování paketů po více trasách přes různá síťová rozhraní vázaná na různé IP adresy.
- Přidána podpora pro algoritmus řízení přetížení TCP DualPI2 (RFC 9332), který umožňuje použití škálovatelných regulátorů přetížení pro provoz s vysokými požadavky na kvalitu služeb (jako je TCP-Prague a DCTCP), aniž by to způsobovalo snížení výkonu u klasického provozu zpracovávaného regulátory přetížení, jako jsou Reno a Cubic.
- Přidán příkaz sysctl „force_forwarding“, který lze použít k povolení přesměrování provozu na vybraných síťových rozhraních IPv6.
- Podpora algoritmu pro detekci ztráty paketů Selective Acknowledgment (SACK) popsaného v RFC 6675 byla odstraněna. Tento algoritmus byl v roce 2018 zastaralý. Pro detekci ztráty paketů TCP se doporučuje používat algoritmus RACK-TLP.
- Оборудование
- Pokračovaly práce na ovladači Xe DRM (Direct Rendering Manager) pro GPU založené na architektuře Intel Xe, která se používá v grafických kartách řady Intel Arc a integrovaných grafických kartách, počínaje procesory Tiger Lake. Nová verze standardně umožňuje podporu čipů založených na mikroarchitektuře Panthor Lake a přidává podporu pro mikroarchitekturu WildCat Lake.
- Ovladač AMDGPU pro grafické karty GFX9.x nyní podporuje mechanismus Cleaner Shader, který čistí paměť grafické karty před jejím opětovným použitím, aby se zabránilo únikům dat zbylým z jiného procesu. Byla vylepšena podpora pohotovostního režimu. Byla přidána možnost přepnutí do pohotovostního režimu v prostředích AMD SR-IOV. Bylo vylepšeno ovládání podsvícení.
- Ovladač i915 nyní podporuje mechanismus drm_panic, který při pádu systému zobrazí chybovou zprávu podobnou „modré obrazovce smrti“. Byla přidána podpora pro řadič displeje používaný v rodině čipů Wildcat Lake.
- Integrace komponent ovladače Nova pro grafické karty NVIDIA vybavené firmwarem GSP, používaným od řady NVIDIA GeForce RTX 2000 založené na mikroarchitektuře Turing, pokračuje. Ovladač je napsán v jazyce Rust. Nová verze přidává abstrakční vrstvu pro DMA, implementuje parser VBIOS, přidává kód pro konfiguraci framebufferu a poskytuje podporu pro zrychlené načítání v režimu Falcon.
- Ovladač grafické karty Adreno byl aktualizován a nyní podporuje grafické karty Qualcomm Adreno x1-45 a x1-85.
- Ovladač msm nyní podporuje mapování grafické karty Adreno SM8750 a grafické paměti (VM_BIND).
- Ovladač Panfrost byl aktualizován pro podporu grafických karet Mali používaných v SoC Mediatek mt8370.
- Ovladač lima byl aktualizován pro podporu grafických karet používaných v SoC Rockchip RK3528.
- Přidán ovladač mtd (Memory Technology Devices) pro přístup k paměti NVM integrované v grafických procesorech Intel.
- Přidána podpora pro následující zvukové systémy: ASoC IMX WM8524, AMD ACP7.2, SoundWire ACP 7.1, Fairphone 4 a 5, Qualcomm QCS8275, Framework Laptop 13 (AMD Ryzen AI 300), CS35L41 HDA (používaný v noteboocích ASUS), Richtek RTQ9124, TI TAS5753, HP EliteBook x360 830 G6, EliteBook 830 G6, LG 16Z90R-A, HP 15-fc000. Kód HD zvuku byl reorganizován.
- Přidána podpora pro desky ARM, SoC a zařízení: NVIDIA Tegra264, Marvell PXA1908 (první 64bitový čip od Marvellu pro chytré telefony), CIX P1, Axiado AX3000, Sophgo SG2000 (kombinuje jádra ARM a RISC-V), Mediatek mt6572, exynos2200 (používaný v Samsung Galaxy S22), Renesas R-Car V4M-7, TI am62d2 a Sophgo sg2042, notebooky založené na Mediatek mt8186 a Qualcomm Snapdragon X1, chytré telefony a tablety založené na SoC mt6572, tegra30 a msm8976.
Zároveň Latinskoamerická nadace pro svobodný software vytvořila verzi zcela svobodného jádra 6.17 - Linux-libre 6.17-gnu, očištěno od prvků firmwaru a ovladačů obsahujících nesvobodné komponenty nebo sekce kódu s omezeným rozsahem. Verze 6.17 obsahuje aktualizovaný kód pro čištění blobů v ovladačích amdgpu, prueth, iwlwifi, btusb, pci mhi host, adreno a6xx, nova-core a Intel AVS. Názvy blobů v souborech devicetree (.dts) pro čipy ARM a Intel IPU7 byly vyčištěny. Načítání blobů bylo v nových ovladačích pci hda zakázáno. Čištění blobů bylo ukončeno v ovladači QLogic infiniband, který byl z jádra odstraněn.
Zdroj: opennet.ru
