Vydání jádra Linux 6.17

Po dvou měsících vývoje Linus Torvalds představil vydání jádra Linux 6.17. Mezi nejvýznamnější změny patří: zvýšení výkonu Btrfs, systémové volání file_getattr() a file_setattr(), unifikace jednovláknových a vícevlenkových konfigurací v plánovači úloh, modul DAMON_STAT pro statistiku přístupu k paměti, podpora živých patchů na systémech ARM64, odeslání core dumpů přes socket AF_UNIX, omezení SCHED_EXT prostřednictvím cgroup, zjednodušené nastavení ochrany proti zranitelnostem v CPU, kompilace v Clangu s inicializací proměnných na zásobníku, ochrana proti přepsání /proc, rozšíření subsystému RV (Runtime Verification), omezení socketů AF_UNIX prostřednictvím AppArmor, algoritmus řízení přetížení TCP DualPI2.

Do nové verze bylo přijato 14334 oprav od 2118 vývojářů, velikost patche je 46 MB (změny se dotkly 12841 souborů, přidáno 646654 řádků kódu, odstraněno 398782 řádků). V předchozím vydání bylo 15924 oprav od 2145 vývojářů, velikost patche je 50 MB. Přibližně 43 % všech změn přijatých v 6.17 se týká ovladačů zařízení, asi 12 % změn je spojených s aktualizací kódu specifického pro hardwarové architektury, 14 % souvisí se síťovým stackem, 4 % s filesystémy a 3 % s interními subsystémy jádra.

Hlavní novinky v jádře 6.17 (1, 2, 3):

  • Diskový subsystém, vstup/výstup a souborové systémy
    • V Btrfs byla přidána experimentální podpora velkých folií stránek paměti (large folios), které umožňují snížit režii a zvýšit výkon řady operací. Bylo implementováno cachování požadavků na bitmapy rozdělení volného místa, díky čemuž se výkon vytváření prázdných souborů zvýšil o 20 %. Zlepšena byla práce s předběžným čtením v systémech, které používají kompresi dat. Bylo zajištěno těsnější umístění klíčů ve struktuře XArray, což zvýšilo kompaktnost ukládání uzlů stromu extentů a umožnilo snížit počet koncových uzlů o 50-70 %. Poskytly se další možnosti nastavení používání komprese v defragmentovaných extenzích.
    • Ve FS ext4 byla přidána podpora vyrovnávacího vstupu/výstupu s příznakem RWF_DONTCACHE, při kterém jsou data okamžitě po dokončení operace odstraněna ze stránkového cache.
    • Ve FS EROFS byla implementována podpora komprese metadat.
    • NFS server nyní může delegovat operace zápisu klientům, 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, který umožňuje vyplnit nula u specifikovaného rozsahu v souboru pomocí příkazu WRITE_ZERO podporovaného některými SSD disky, jehož provedení nevyžaduje operace vstupu/výstupu. Tato volba je zatím dostupná pouze v souborovém systému ext4.
    • Byly přidány systémové volání file_getattr() a file_setattr() pro manipulaci s atributy inode daného souboru.
    • Byl odstraněn ovladač „pktcdvd“ pro práci s optickými médii v paketovém režimu, který byl označen za zastaralý v roce 2016.
    • Souborový systém Bcachefs v jádře Linuxu byl převeden do režimu externí údržby, což znamená, že změny pro Bcachefs nebudou přijímány do hlavní části jádra, přičemž tento FS zůstává 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 možnost korektní spolupráce s ostatními vývojáři jádra a schopnost dodržovat ustálená pravidla vývoje.
  • Paměť a systémové služby
    • Ze schématu plánovače úloh byla odstraněna podpora pro jednomyslové konfigurace. Na systémech s jedním procesorem by nyní měly být používány jádra zkompilovaná pro vícemonitorové systémy (SMP). Kód pro jednomyslové a vícemonitorové systémy byl unifikován a zbaven zbytečných vazeb na parametr jádra CONFIG_SMP.
    • Byl přidán modul jádra DAMON_STAT (Statistiky výsledků sledování přístupu k datům), který umožňuje monitorovat přístup k operační paměti pomocí subsystému DAMON (Data Access MONitor). Modul poskytuje statistiky o neaktivitě (memory_idle_ms_percentiles) a odhadované propustnosti paměti (estimated_memory_bandwidth).
    • Na systémech s architekturou ARM64 byla implementována podpora Live-patchů, které umožňují aplikovat opravy na jádro Linuxu za běhu, bez restartu a zastavení systému.
    • V minimalistické C knihovně nolibc, dodávané se zdrojovými kódy jádra Linuxu a poskytující obal nad základními systémovými voláními, byla implementována podpora architektur SuperH, x32, MIPS n32 a MIPS n34.
    • Byla rozšířena možnost posílání obsahu core dumpů přes socket AF_UNIX, což umožňuje vytvářet v prostoru uživatele bezpečnější zpracovatele core dumpů, které nejsou závislé na volání jádrem privilegovaných procesů. V nové verzi byl přidán protokol pro jejich vytváření. servery, schopných spravovat zpracování core dumpů na úrovni jednotlivých úloh. Například pro některé procesy je možné ignorovat core dumpy, zatímco pro jiné je předávat přes socket. Byla připravena samostatná prototypová serverová aplikace pro správu core dumpů.
    • Byla přidána volba příkazového řádku jádra „crashkernel=size,cma“ pro rezervaci paměti prostřednictvím CMA (Contiguous Memory Allocator) na uložení crash dumpu jádra.
    • Byly rozšířeny možnosti mechanismu pidfd, umožňujícího používat identifikátory spojené se specifickými procesy, které nejsou znovu přidělovány oproti pid. Byla přidána možnost přiřazení rozšířených atributů z uživatelského prostoru k pidfd. Otevření deskriptorů souborů pro pidfd je nyní povoleno pomocí funkce open_by_handle_at() bez vazby na souborový systém. Interní informace vytvořené jádrem spolu s pidfd jsou nyní přiřazeny k procesu, nikoli k pidfd, a zachovávají se mezi opakovaným otevřením stejného procesu.
    • Do subsystému BPF byla přidána funkce bpf_cgroup_read_xattr() pro čtení rozšířených atributů souborů. Byla poskytnuta možnost použití standardních řetězcových operací v BPF programech, jako například bpf_strcmp, bpf_strnchr, bpf_strchrnul, bpf_strlen a bpf_strspn, které pracují v režimu pouze pro čtení. Byla přidána možnost využití standardních proudů stdout a stderr pro interakci s komponentami v uživatelském prostoru. Pro systémy založené na architektuře LoongArch byla v BPF implementována funkce dynamické modifikace kódu, mechanismus „BPF trampoline“ (snižuje režijní náklady na přenos volání mezi jádrem a BPF programy) a spouštění programů, které používají struct_ops pro vytváření zpracovatelů funkcí jádra prostřednictvím BPF.
    • V systému sledování času byla implementována podpora pro pomocné hodiny (auxiliary), které nejsou spojeny s běžnými systémovými hodinami a běží podle vlastního rytmu (dříve všechny hodiny běžely stejným rytmem a lišily se pouze posunem).
    • Byla přidána počáteční podpora proxy provádění (Proxy Execution) ke zmírnění problémů s inverzí priorit. Proxy provádění umožňuje úloze, která čeká na uvolnění zámku, předat svůj kontext provádění úloze, která zámek drží, aby urychlila uvolnění tohoto zámku.
    • Pokračuje přenos změn z větve Rust-for-Linux, které se týkají použití jazyka Rust jako druhého jazyka pro vývoj ovladačů a modulů jádra (podpora Rust není ve výchozím nastavení aktivována a nevede k zahrnutí Rust mezi povinné závislosti pro kompilaci jádra). Byly přidány abstrakce pro správu regulátorů napětí a proudu, vlastností firmwaru, zdrojů vstupu/výstupu a paměti vstupu/výstupu. Implementován makro „warn_on!()“. Přidán typ UserPtr pro ukazatele v uživatelském prostoru. Rozšířena funkcionalita modulů workqueue, uaccess, dma, time a list. Přidán modul 'bits' s funkcemi 'bit' a 'genmask'.
    • Přepracován kód pro výpočet kontrolních součtů CRC a přidány nové volání pro generaci hashů SHA-1 a SHA-2. Přidány optimalizace specifické pro hardwarové architektury. Výkon funkce crc32c() byl zvýšen na nových CPU x86_64, které podporují rozšíření VPCLMULQDQ (Vector Carry-Less Multiplication of Quadwords).
    • Pro systémy S390 byla implementována podpora vyhození do swapovací oblasti a migrace velkých stránek paměti (transparent huge page).
    • Byla přidána možnost nastavení agresivity uvolňování stránek paměti (proactive-reclaim) při jejím nedostatku vázaném na jednotlivé uzly NUMA, což umožňuje vyčlenění uzlů NUMA, pro které bude použito aktivnější uvolnění paměti. Například, „echo „512M swappiness=10″ > /sys/devices/system/node/node1/reclaim“.
    • Do mechanismu SCHED_EXT, který umožňuje používat BPF pro vytváření plánovačů CPU, byla přidána možnost řízení propustnosti prostřednictvím cgroup. Například lze použít parametr cpu.max pro omezení zátěže na CPU.
    • Bylo oznámeno zastarání automatického montování virtuálního FS tracefs do adresáře /sys/kernel/debug/tracing, místo toho by mělo být použito /sys/kernel/tracing.
  • Virtualizace a bezpečnost
    • Byla přidána možnost zapnutí ochrany proti zranitelnostem v CPU prostřednictvím výběru blokovaných vektorů útoku Místo specifikace konkrétních zranitelností v nastavení. Metody blokace se vybírají v závislosti na typu porušení izolace: mezi uživatelským a jádrovým prostorem (user-kernel), mezi uživatelem a jiným uživatelem (user-user), mezi hostitelským systémem a hostovaným prostředím (guest-host), mezi různými hostitelskými systémy (guest-guest) a mezi různými vlákny (cross-thread). Navržený přístup umožňuje aktivovat ochranu pouze proti těm třídám zranitelností, které skutečně zajímají uživatele. Například vlastníci cloudového prostředí mohou aktivovat režimy guest-host a guest-guest, čímž se aktivují metody ochrany proti zranitelnostem BHI, GD, L1TF, MDS, MMIO, Retbleed, RFDS, Spectre_v2, SRBDS, SRSO a TAA.
    • Byla přidána podpora pro kompilátor Clang včetně režimu sledování hloubky zásobníku, při kterém se provádí inicializace všech proměnných uložených na zásobníku. Inicializace se provádí za účelem prevence úniku informací z jádra prostřednictvím neinicializovaných proměnných, které mohou obsahovat zbytky dříve uložených dat na zásobníku. Předtím byla podobná funkce podporována při použití GCC pluginu STACKLEAK.
    • Byla přidána ochrana proti podvodům útočníků se souborovým systémem /proc prostřednictvím připojení v režimu "bind". Inode-číslo kořene /proc je nyní fixní (PROCFS_ROOT_INO) a může být ověřeno procesem v uživatelském prostoru.
    • Do subsystému RV (Runtime Verification), určenému k ověřování správnosti fungování vysoce spolehlivých systémů, byla přidána komponenta monitorování rtapp (Real-time application monitor) pro sledování typických problémů v aplikacích pracujících v reálném čase, jakož i komponenty rp, sssw a opid pro testování plánovače úloh. Byla implementována možnost vytváření monitorovacích komponent, které pro určení modelu chování používají lineární časovou logiku místo deterministického automatu. Ověření se provádí za běhu prostřednictvím připojení zpracovatelů k trasovacím bodům, které porovnávají skutečný průběh provádění s předem definovaným referenčním modelem určujícím očekávané chování systému.
    • Do systému AppArmor byla přidána podpora pro správu přístupu k socketům AF_UNIX.
    • Ve hypervisoru KVM na systémech ARM byla implementována podpora řadiče přerušení GICv5.
    • Byla přidána konfigurace CONFIG_KVM_IOAPIC, která umožňuje zakázat podporu emulace APIC, PIC a PIT v KVM.
    • Byla přidána ochrana proti zranitelnosti VMSCAPE.
    • Byla přidána ioctl-příkaz FS_IOC_GETLBMD_CAP pro získání informací o využití ochrany integrity souboru z uživatelského prostoru.
    • Byl označen jako zastaralý rozhraní /sys/fs/selinux/user, při jehož použití nyní dojde k pětisekundovému zpoždění a do logu se zapíše varování.
  • Síťová subsystém
    • Byla přidána podpora konfigurovatelných strategií hodnocení rozpočtu napájení do implementace technologie PSE (Power Sourcing Equipment), používané pro napájení zařízení, jako jsou IP kamery a bezdrátové přístupové body, které určují, které porty je třeba nejdříve vypnout, aby se předešlo přetížení.
    • Byla přidána podpora směrování paketů k externím uzlům prostřednictvím meziuzlů (gateway-routing) do implementace protokolu MCTP (Management Component Transport Protocol). Například následující pravidla umožňují směrovat pakety k uzlu s ID 10 (Endpoint ID 10) přes zařízení mctpi2c0 s adresou 0x1d, přímo připojené k uzlu s ID 9. mctp route add 9 via mctpi2c0 mctp neigh add 9 dev mctpi2c0 lladdr 0x1d mctp route add 10 gw 9
    • Pro UNIX sokety (AF_UNIX) byla implementována volba SO_INC a pro rodinu adres VSOCK volba SIOCINQ. Implementované volby jsou podobné volbě TCP_INQ pro TCP a umožňují získat informace o počtu bajtů dostupných pro čtení v soketu prostřednictvím řídící zprávy.
    • Pro TCP bylo zapnuto přísné dodržování deklarované velikosti okna příjmu, které určuje velikost dat povolených k odeslání před obdržením ACK potvrzení od druhé strany. Dříve jádro pokračovalo v zpracovávání dat přicházejících nad deklarované okno příjmu, ale nyní to přestane dělat.
    • V MPTCP (Multipath TCP) byla přidána možnost použití volby soketu TCP_MAXSEG pro omezení maximální velikosti odesílaných segmentů. MPTCP představuje rozšíření protokolu TCP pro zajištění doručování paketů současně přes několik cest prostřednictvím různých síťových rozhraní připojených k různým IP adresám.
    • Byla přidána podpora algoritmu řízení přetížení TCP DualPI2 (RFC 9332), který umožňuje používat škálovatelné přetěžovací kontroléry pro provoz s vysokými požadavky na kvalitu služeb (např. TCP-Prague a DCTCP), aniž by docházelo ke snížení výkonu klasického provozu, pro který jsou používány takové přetěžovací kontroléry jako Reno a Cubic.
    • Byl přidán sysctl „force_forwarding“, který umožňuje aktivaci přesměrování provozu na vybraných síťových rozhraních s IPv6.
    • Byla odstraněna podpora algoritmu pro detekci ztráty paketů SACK (Selective Acknowledgment), popsaného v RFC 6675. Tento algoritmus byl vyhlášen za zastaralý v roce 2018. Pro detekci ztráty TCP paketů se doporučuje používat algoritmus RACK-TLP.
  • Hardware
    • Pokračuje práce na drm ovladači (Direct Rendering Manager) Xe pro GPU na bázi architektury Intel Xe, která je používána ve grafikách Intel rodiny Arc a integrované grafice, začínající s procesory Tiger Lake. V nové verzi byla nastavena podpora čipů na bázi mikroarchitektury Panthor Lake a byla přidána podpora mikroarchitektury WildCat Lake.
    • V ovladači AMDGPU pro GPU GFX9.x byla implementována podpora mechanismu Cleaner Shader, který zajišťuje vyčištění paměti GPU před jejím opětovným použitím, aby se zabránilo úniku dat z předchozího procesu. Byla vylepšena podpora režimu čekání. Byla přidána možnost přechodu do spánkového režimu v prostředích s AMD SR-IOV. Bylo vylepšeno řízení podsvícení.
    • V ovladači i915 byla implementována podpora mechanismu drm_panic, který zobrazuje při haváriích podobu „modré obrazovky smrti“. Byla přidána podpora displejového kontroléru používaného v čipech rodiny Wildcat Lake.
    • Pokračuje integrace komponent ovladače Nova pro GPU NVIDIA, vybavené GSP firmvairy používanými od série NVIDIA GeForce RTX 2000 na bázi mikroarchitektury Turing. Ovladač je napsán v jazyce Rust. V nové verzi byla přidána úroveň abstrakce pro práci s DMA, implementován parser VBIOS, přidán kód pro konfiguraci framebufferu a zajištěna podpora urychleného načítání v režimu Falcon.
    • V ovladači adreno byla přidána podpora GPU Qualcomm Adreno x1-45 a x1-85.
    • V ovladači msm byla přidána podpora GPU Adreno SM8750 a mapování videopaměti (VM_BIND).
    • V ovladači panfrost byla přidána podpora GPU Mali, používaných v SoC Mediatek mt8370.
    • Do ovladače lima byla přidána podpora GPU používaných v SoC Rockchip RK3528.
    • Byl přidán ovladač mtd (Memory Technology Devices) pro přístup k NVM paměti integrované v GPU Intel.
    • Byla přidána podpora zvukových systémů ASoC IMX WM8524, AMD ACP7.2, SoundWire ACP 7.1, Fairphone 4 & 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. Byla provedena reorganizace kódu HD-audio.
    • Byla přidána podpora ARM platforem, SoC a zařízení: NVIDIA Tegra264, Marvell PXA1908 (první 64bitový čip od Marvellu pro smartphony), CIX P1, Axiado AX3000, Sophgo SG2000 (kombinující 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 na bázi Mediatek mt8186 a Qualcomm Snapdragon X1, smartphony a tablety na bázi SoC mt6572, tegra30 a msm8976.

Zároveň latinskoamerický Fond svobodného softwaru vytvořil variantu plně svobodného jádra 6.17 - Linux-libre 6.17-gnu, zbaveného prvků firmwaru a ovladačů obsahujících nesvobodné komponenty nebo části kódu, jejichž použití je omezeno výrobcem. V vydání 6.17 byl aktualizován kód pro čištění blobů v ovladačích amdgpu, prueth, iwlwifi, btusb, pci mhi host, adreno a6xx, nova-core a Intel AVS. Bylo provedeno čištění názvů blobů v dts souborech (devicetree) pro ARM čipy a Intel IPU7. Byla neutralizována načítání blobů v nových ovladačích pci hda. Bylo zastaveno čištění blobů v ovladači QLogic infiniband, který byl odstraněn z jádra.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster