Vydání jádra Linux 6.16

Po dvou měsících vývoje představil Linus Torvalds vydání jádra Linux 6.16. Mezi nejvýznamnějšími změnami jsou: ovladač pro zrychlení OpenVPN, mechanismus Kexec HandOver, výchozí aktivace pětivrstvých tabulek stránkování paměti pro x86, odstranění protokolu DCCP, blokový ovladač zloop, možnost odesílání core dumpů přes UNIX socket, podpora atomického zápisu v XFS, offload zpracování zvuku pro USB zařízení, optimalizace v Ext4, virtuální ovladač TPM (Trusted Platform Module), kompletní implementace Device Memory TCP, podpora nepojmenovaných kanálů v io_uring, příprava na integraci DRM ovladače Asahi, mechanismus „usermode queue“ v ovladači AMDGPU, podpora Intel TDE (Trusted Domain Extensions) a Intel APE (Advanced Performance Extensions).

Do nové verze bylo přijato 15924 oprav od 2145 vývojářů, velikost patche je 50 MB (změny se dotkly 13793 souborů, bylo přidáno 655451 řádků kódu, odstraněno 316441 řádků). V minulém vydání bylo 15945 oprav od 2154 vývojářů, velikost patche byla 59 MB. Přibližně 45 % všech změn v 6.16 se týká ovladačů zařízení, přibližně 16 % změn se vztahuje na aktualizaci kódu specifického pro hardwarové architektury, 13 % se týká síťového zásobníku, 4 % – souborových systémů a 3 % vnitřních subsystémů jádra.

Hlavní novinky v jádru 6.16:

  • Diskový subsystém, vstup/výstup a souborové systémy
    • Byl přidán ovladač zloop pro vytváření zónovaných blokových loopback zařízení, která se připojují v loop režimu. Ovladač emuluje práci běžných blokových zařízení, používajíc několik souborů z existujícího souborového systému (po jednom souboru pro ukládání každé zóny). Tato funkce může být užitečná pro testování souborových systémů, zpracovatelů device mapper a aplikací, aby se zjistilo, zda podporují zónovaná zařízení používající rozdělení na zóny skupin bloků nebo sektorů, do kterých je povoleno pouze sekvenční přidávání dat s aktualizací celé skupiny bloků.
    • V souborovém systému XFS byla implementována podpora atomického zápisu velkých objemů dat — několik bloků nyní může být zapisováno v atomickém režimu (buď budou všechny bloky úspěšně zapsány, nebo žádný blok nebude zapsán).
    • Ve souborovém systému Ext4 byla zvýšena výkonnost mechanismu „fast commit“. Byla přidána podpora velkých stránek paměti (large folios) pro běžné soubory, což v provedených testech zlepšilo výkon o 37 % při intenzivním sekvenčním vstupu/výstupu. Byla přidána podpora atomových zápisových operací pokrývajících několik bloků.
    • V ovladači pro souborový systém ext2 byla vyhlášena zastaralou podpora mechanismu DAX, který poskytuje přímý přístup k FS mimo stránkovou cache. Odebrání DAX z ovladače ext2 je plánováno na konec roku. Jako důvod se uvádí, že ovladač ext2 je považován za stabilní referenční implementaci, ve které není přípustné používat specifické vlastnosti, které se nedostaly do širokého užívání.
    • Souborové systémy OrangeFS, UFS, BFS a OMFS byly převedeny na používání nového API pro montování oddílů.
    • Do sysctl byla přidána nastavení vfs_cache_pressure_denom pro řízení počtu záznamů v cache „dentry“ (interní reprezentace prvků adresářů) v podmínkách nedostatku paměti v systému. Čím vyšší je nastavená hodnota, tím více může být záznamů vyřazeno z cache (méně záznamů zůstane v cache) při nedostatku paměti.
    • Ve FS Bcachefs byla přidána možnost „rebalance_on_ac_only“, která zakazuje provádění operací rebalance a pozadí komprese, když systém běží na akumulátor. Byly zrychleny operace mazání snapshotů a zařízení. Snížena spotřeba paměti při montování v režimu pouze pro čtení. Byla přidána schopnost spouštět některé operace obnovení po selhání na pozadí, aniž by se zastavila práce se FS.
    • Podsystemu správy energie bylo povoleno samo provádět zamrznutí souborových systémů a proměnných EFI pro režimy čekání a spánku (pokud jsou FS již zamrzlé zpracovatelem ve veřejném prostoru, opakované zamrznutí se neprovádí).
    • Byla přidána možnost urychlení práce EROFS pomocí vestavěného v procesorech Intel akcelerátoru QAT (QuickAssist Technology), který nabízí prostředky pro urychlení výpočtů souvisejících se kompresí a šifrováním.
    • V NFS byl maximální velikost dávky dat pro operace čtení a zápisu zvýšen z 1 na 4 MB (výchozí hodnota je nastavena na 1 MB, protože ne všichni klienti podporují větší velikost).
    • Nepř privilegedním uživatelům, kteří mají práva CAP_SYS_ADMIN v odděleném prostoru jmen identifikátorů uživatelů (user namespace), ale nemají rozšířená práva v kořenovém prostoru jmen, byla poskytnuta možnost využít mechanismus fanotify pro sledování změn v souborových systémech.
    • Pro souborové systémy využívající subsystém FUSE byla zavedena funkčnost pro hromadné vymazání všech mezipaměťovaných záznamů o adresářích (dentries). Do subsystému FUSE byla přidána podpora pro velké stránky paměti.
    • Ve FS OverlayFS byla implementována podpora pro vytváření vrstev s daty v neprivilegovaných domech jmen, pro které se používá kontrola integrity na základě modulu dm-verity. Tato možnost umožňuje kombinaci důvěryhodných vrstev s metadaty s nedůvěryhodnými vrstvami s daty, které se zpracovávají v neprivilegovaných domech jmen.
  • Paměť a systémové služby
    • Byl přidán mechanismus KHO (Kexec HandOver) pro spuštění nového jádra ze starého bez ztráty stavu systému. Před předáním řízení nové verzi jádra může být stav klíčových subsystémů jádra pomocí KHO serializován do oblasti paměti, která nebude dotčena dalšími operacemi. Nové jádro, které převezme řízení, obnovuje serializovaný stav zpět. Na základě KHO se vyvíjí subsystém Live Update Orchestrator (LUO), který umožňuje restartovat jádro bez zastavení provozu zařízení.
    • Byl přidán parametr sestavování jádra CONFIG_X86_NATIVE, který umožňuje použít při kompilaci možnost „-march=native“ pro optimalizaci s ohledem na možnosti procesoru na aktuálním systému.
    • Byla přidána podpora rozšíření architektury sady příkazů Intel APX (Advanced Performance Extension), která poskytuje 16 dalších obecných registrů (kromě 16 stávajících), což umožňuje v kódu použít méně operací čtení a zápisu do paměti pro zvýšení výkonu a snížení spotřeby energie.
    • Byl přidán režim automatického ladění politiky rozdělování paměti v NUMA systémech, při kterém se všechny váhy uzlů přepočítávají při obdržení nových informací o propustnosti během zavádění nebo při horkém připojení paměti.
    • Implementace futexů nyní zahrnuje podporu lokální hash tabulky procesů (lokální futex_hash_bucket), která se na rozdíl od dříve podporované sdílené hash tabulky pro všechny procesy stává lokální pro jednotlivý proces a je společně využívána všemi vlákny tohoto procesu. Lokální hash tabulky se používají pouze pro futex operaci PROCESS_PRIVATE. Kromě toho byla v nové verzi přidána podpora pro možnosti FUTEX2_NUMA a FUTEX2_MPOL, které umožňují ovlivnit umístění futexů v paměti, aby se přiblížily procesům, které je používají.
    • Pro systémy x86_64 byla zavedena trvalá podpora pětiúrovňových tabulek stránek paměti (parametr CONFIG_X86_5LEVEL, který řídil zapnutí pětiúrovňových tabulek, byl odstraněn).
    • V ovladači intel_pstate, který řídí parametry spotřeby energie (P-state) na systémech s procesory Intel, byla přidána podpora pro plánovač úloh zohledňující spotřebu energie (EAS — Energy Aware Scheduling) na hybridních procesorech, které kombinují vysoce výkonná a energeticky efektivní jádra CPU, jako je Intel Lunar Lake.
    • Do sysfs byly přidány rozhraní: "/sys/devices/system/cpu/cpuN/cpu_capacity" pro získání informací o možnostech různých CPU na hybridních procesorech a "/sys/devices/system/cpu/cpuidle/intel_c1_demotion" pro řízení možnosti udržování CPU v produktivnějším stavu, i když jádro se snaží převést CPU do nižšího stavu spotřeby energie (například jádro může požádat o přechod do stavu spotřeby energie C6, ale firmware při vysoké intenzitě probouzení CPU může nechat CPU v stavu C1).
    • Pro architekturu ARM64 byla zavedena podpora režimu lenivého odstranění úloh (PREEMPT_LAZY, lazy preemption), který odpovídá režimu plného odstranění („full preemption“) pro realtime úlohy (RR/FIFO/DEADLINE), ale zpožďuje odstranění běžných úloh (SCHED_NORMAL) až na hranici tikání.
    • Pro architekturu ARM64 byla přidána podpora využití rozšíření SME (Scalable Matrix Extension), aktivovaná parametrem CONFIG_ARM64_SME.
    • Pokračoval přenos změn z větve Rust-for-Linux, které se týkají používání jazyka Rust jako druhého jazyka pro vývoj ovladačů a modulů jádra (podpora Rustu není ve výchozím nastavení aktivní a nevede k zahrnutí Rustu mezi povinné závislosti pro kompilaci jádra). Pro moduly napsané v Rustu byla poskytnuta možnost využívat configfs. Byly přidány abstrakce potřebné pro vývoj grafických ovladačů. Rozšířily se možnosti modulů alloc, time, str, list, workqueue a page. Byla přidána podpora makra „assert!“ v testech založených na KUnit. Byl přidán soubor abstrakcí pro správu frekvence CPU a využití API souvisejícího se správou spotřeby energie. Byla přidána podpora datové struktury ‘xarray’.
    • Pro architekturu RISC-V byla přenesena implementace systémového volání getrandom(), optimalizovaného pomocí mechanismu vDSO (virtuální dynamický sdílený objekt), který umožňuje přenést zpracovatele systémového volání z jádra do uživatelského prostoru a vyhnout se tak přepínání kontextu. V provedených testech optimalizace urychlila získávání náhodných čísel 17krát. Pro RISC-V byla také implementována podpora vektorových rozšíření Zicbop, Zabha a Svinval, které se používají v procesorech SiFive.
    • Pro architekturu LoongArch byl limit na počet CPU v systému zvýšen ze 256 na 2048. Byla přidána podpora plánovače úloh SCHED_MC (Multi-core).
    • Byla přidána možnost používání Unix-socketů pro přenos souborových deskriptorů. Pro deaktivaci této možnosti mohou aplikace v setsockopt() použít příznak SO_PASSRIGHTS.
    • Byla poskytnuta možnost mapování kruhového bufferu, který se používá pro sledování činnosti jádra, do paměti uživatelského prostoru.
    • Zpracovatelé crash-dumpu, používaní k vytváření zpráv o problémech po havarijním ukončení činnosti jádra, nyní mohou využívat klíče LUKS, které použilo selhávající jádro, k ukládání crash-dumpů do šifrovaných FS.
    • Do systému asynchronního vstupu/výstupu io_uring byla přidána operace IORING_OP_PIPE pro vytváření neinicializovaných kanálů, která je obdobná systémovému volání pipe2, s výjimkou podpory pevných souborových deskriptorů.
    • Byla přidána možnost příkazového řádku jádra „rt_group_sched“ pro řízení zapnutí plánovače vykonávání skupin realtime-úloh (SCHED_RR). Možnost je obdobná nastavení RT_GROUP_SCHED v Kconfig.
    • Pro zařízení založená na sběrnici CXL (Compute Express Link), která se používá k organizaci vysokorychlostní komunikace CPU s paměťovými zařízeními, byla implementována podpora rozšíření RAS (Reliability, Availability, Serviceability), což umožňuje realizaci různých schémat detekce a korekce chyb. CXL umožňuje připojovat nové oblasti paměti, které poskytují externí paměťová zařízení, a používat je jako další zdroje fyzického adresního prostoru pro rozšíření systémové paměti (DDR) nebo trvalé paměti (PMEM).
    • Minimální verze GCC potřebná pro sestavení jádra byla pro všechny architektury zvýšena na větev GCC 8. Pro sestavení je nyní také vyžadována alespoň verze balíčku binutils 2.30.
    • Byl odstraněn systémový call uselib(), který byl již dlouho prohlášen za zastaralý, a místo něj se pro sdílený přístup programů k sdíleným knihovnám používá mmap().
  • Virtualizace a bezpečnost
    • Byla přidána počáteční podpora pro použití mechanismu Intel TDX (Trusted Domain Extensions) k ochraně hostitelských systémů běžících pod hypervizorem KVM před zásahy a analýzou ze strany správce hostitelského systému a fyzickými útoky na hardware. Ochrana je zajištěna šifrováním paměti. virtuálních strojů.
    • Byl přidán virtuální ovladač TPM (Trusted Platform Module), který umožňuje virtuálním strojům interagovat s TPM zařízeními (Trusted Platform Module), emulovanými modulem SVSM (Secure VM Service Module).
    • Byla obnovena možnost použití pluginu GCC randstruct, který randomizuje rozložení datových struktur během kompilace, aby se ztížilo využití zranitelností.
    • Byla přidána možnost použití technologie IMA (Integrity Measurement Architecture) pro ověřování integrity při spuštění nových jader pomocí systémového volání kexec.
    • Byla provedena práce na snížení vlivu na výkon používání SELinux. Pro zrychlení provozu byl přidán cache s výsledky kontrol přístupu k adresářům. Do pravidel genfscon byla přidána možnost použití masek.
    • V kódu pro interakci s EFI byla poskytnuta možnost vložení sekce SBAT (UEFI Secure Boot Advanced Targeting) s metadaty o odvolaných verzích zaváděcích komponentů.
    • V načítaných modulech byl proveden převedení sekce „.static_call_sites“ do režimu pouze pro čtení po dokončení inicializace.
    • Pro 64bitové systémy ARM byla v hypervizoru KVM implementována podpora vnořené virtualizace (výchozí nastavení je vypnuto).
    • V hypervizoru KVM byla vyhlášena stabilní podpora architektury RISC-V.
  • Síťová subsystém
    • Byl přijat ovladač ovpn, který výrazně zrychluje výkon OpenVPN díky přesunu operací šifrování, zpracování paketů a správy kanálu na úroveň jádra Linuxu. Ovladač umožňuje zbavit se režijních nákladů spojených se změnou kontextu, optimalizuje výkon díky přímému přístupu k interním API jádra a vylučuje pomalý přenos dat mezi jádrem a uživatelským prostorem (šifrování, dešifrování a směrování jsou prováděny modulem bez odesílání provozu do obsluhy v uživatelském prostoru).
    • Do mechanismu Device Memory TCP byla přidána podpora odesílání dat z paměti zařízení (TX path). Dříve byla pro usnadnění integrace Device Memory TCP do jádra funkcionalita omezena pouze na příjem dat (RX path). Device Memory TCP umožňuje použití síťových soketů pro přímé odesílání obsahu paměti periferního zařízení po síti (mód zero-copy) a také přímé umístění obsahu síťových paketů do paměti zařízení na straně příjemce. Přenášená data v paketech jsou přenášena od síťové karty do paměti periferního zařízení (DMABUF), například do grafické paměti GPU, nebo přímo z paměti zařízení do síťové karty, mimo CPU, zatímco hlavičky paketů se dostanou do obvyklých vyrovnávacích pamětí jádra.
    • Byla zavedena možnost odesílání obsahu core dumpů přes soket AF_UNIX, což umožňuje vytvářet v uživatelském prostoru bezpečnější zpracovatele core dumpů, které nejsou vázány na volání jádrem privilegovaných procesů.
    • Podpora síťového protokolu DCCP (Datagram Congestion Control Protocol) byla odstraněna, protože se neujal a pět let zůstává v jádře bez údržby. Odstranění DCCP z jádra odstraní překážky, které brání přepracování struktury dat inet_connection_sock pro zvýšení efektivity práce stohu TCP. Podpora modulů netfilter pro filtrování paketů DCCP byla zachována.
    • Pro zjednodušení zpracování chyb při používání socketů může jádro nyní předávat pidfd pro již ukončené procesy (pidfd je spojen s konkrétními procesy a na rozdíl od pid se znovu nepřiřazuje).
    • Pomocí BPF je nyní možné vytvářet ovladače pro správu front paketů v síťovém stacku (qdiscs) pro ovlivnění pořadí zpracování síťových paketů.
    • V síťovém souborovém systému AFS je nasazena GSSAPI (Generic Security Services API) pro správu šifrování spojení s servery YFS a OpenAFS.
    • Byl proveden výrazný balíček optimalizací. Byla přepracována organizace zámků pro tabulky směrování IPv6 (některé operace s trasami nyní probíhají až 3krát rychleji). Bylo zrychleno programové počítání kontrolních součtů crc32c. Rychlost motoru GRO pro tunelovaný UDP provoz byla zvýšena o 10%. Byla vylepšena automatická konfigurace přijímacího bufferu pro TCP a zvýšeny výchozí limity (v testech se propustnost pro jednotlivé toky přes 200 Gb/s zvýšila o 60%).
    • Do Netfilteru byla přidána možnost používat masky v názvech síťových zařízení používaných v netdev a flowtable. Do infrastruktury nft trace byla integrována informace o sledování spojení (conntrack). Bylo zrychleno extrahování tabulek sledování spojení (conntrack) přes procfs.
  • Hardware
    • Byla přidána podpora externího zpracování zvukových toků na straně zvukových zařízení s rozhraním USB (USB audio offload). Tato změna umožňuje výrazně snížit spotřebu energie přenosných zařízení tím, že pokračuje zpracování zvukového toku, zatímco zbytek systému je v režimu spánku. Dříve byly v jádrech pro platformu Android poskytovány specifické implementace offload zpracování zvuku pro USB zařízení, a nyní je v hlavním jádře k dispozici univerzální implementace, kterou mohou používat jakékoli projekty.
    • Pokračuje integrace komponentů ovladače Nova pro GPU NVIDIA, vybavené GSP firmwarem, používaným od série NVIDIA GeForce RTX 2000 postavené na mikroarchitektuře Turing. Ovladač je napsán v jazyce Rust. Kromě komponenty nova-core, která implementuje základní úroveň abstrakcí nad programovými rozhraními firmware GSP, byla ve verzi 6.16 zahrnuta počáteční implementace DRM ovladače nova-drm (Direct Rendering Manager) pro interakci s GPU z uživatelského prostoru.
    • Zahájen proces propagace do jádra DRM ovladače Asahi pro GPU Apple AGX, používané v čipech Apple Silicon. Ovladač je napsán v jazyce Rust. V této fázi byly do jádra zahrnuty pouze hlavičkové soubory s UAPI z ovladače Asahi, potřebné pro Mesa, a hlavní kód ovladače Asahi bude integrován později.
    • Do ovladače Nouveau byla přidána podpora GPU NVIDIA rodiny Hopper a Blackwell.
    • Pokračuje práce na drm ovladači (Direct Rendering Manager) Xe pro GPU na bázi architektury Intel Xe, která se používá v grafických kartách Intel rodiny Arc a integrované grafice, počínaje procesory Tiger Lake. Byla přidána možnost používat různé soubory firmwaru pro různá GPU rodiny Intel.
    • V ovladači AMDGPU byla implementována podpora mechanismu „usermode queue“, umožňujícího vytvářet vlastní fronty úloh v uživatelském prostoru a posílat je přímo do GPU bez oslovení plánovače v jádře. Podpora „usermode queue“ byla zapnuta pro GPU Navi 4X a GFX 12.
    • Byla přidána podpora zvukových systémů Intel WCL (Whiskey Lake), AMD ACP 7.x (Audio Co-Processor), Cirrus Logic CS35L63 a CS48L32, Everest Semiconductor ES8375 a ES8389, Pioneer DJM-V10, Longsoon-1 AC’97, NVIDIA Tegra264, Richtek ALC203, RT9123 a Rockchip SAI, stejně jako nových platforem Intel AVS.
    • Byla přidána podpora ARM platforem, SoC a zařízení: Samsung Exynos7870, Qualcomm Snapdragon X1P42100, Qualcomm MSM8926, RK3562, NXP i.MX94, Renesas RZ/V2N, Amlogic S6/S7/S7D, WonderMedia wm8950, Amlogic s805y, Allwinner A523, Toradex Verdin AM62P, ROCK 5B+, Nitrogen8M Plus, Retronix R-Car V4H Sparrow Hawk, MT8186 Ponyta Chromebook, VIA APC Rock/Paper, Renesas rz/t2h, ASUS Transformer Pad LTE TF300TL, LG Nexus 4, Google Pixel 4a, Raspberry Pi 2.
    • Byl odstraněn ovladač pro video capture karty na čipech STA2X11.

Současně latinskoamerická Nadace svobodného softwaru představila variantu zcela svobodného jádra 6.16 — Linux-libre 6.16-gnu, očištěného od prvků firmwaru a ovladačů, které obsahují nesvobodné komponenty nebo kódy, jejichž použití je omezeno výrobcem. V vydání 6.16 byla neutralizována načítání blobů v nových ovladačích Intel qat 6xxx crypto, ST vd55g1 sensor, ath12k AHB wifi, Aeonsemi AS21xxx a MediaTek 25Gb Ethernet. Bylo provedeno čištění názvů blobů v dts-souborech (devicetree) pro ARM čipy Qualcomm a MediaTek. Bylo aktualizováno kód čištění blobů v ovladačích Nova Core, Nouveau, Realtek r8169 Ethernet, Qualcomm Iris, Venus, Mediatek mt7996 wifi, Qualcomm ath11k a ath12k wifi, Texas Instruments tas2781 a Renesas R-Car gen4 PCIe.

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