Po dvou měsících vývoje Linus Torvalds představil vydání jádra Linux 6.19. Mezi nejvýznamnějšími změnami jsou: subsystém Live Update Orchestrator, podpora šifrování PCIe Link, systémový volání listns, režim Zero-Copy Receive v io_uring, podpora ARM rozšíření MPAM, klp-build pro generování live záplat, podpora architektury LoongArch32, QoS pro s2idle, optimalizace subsystému auditu, Intel LASS pro ochranu proti Spectre, podpora hashů SHA-3 a BLAKE2b, mechanismus Confidential VMBus, TX optimalizace v síťovém subsystému, protokol CAN XL, API pro hardwarovou akceleraci HDR výstupu.
V oznámení nové verze Linus uvedl, že následujícímu vydání jádra bude přiděleno číslo 7.0, protože v řadě 6.x se nashromáždilo dostatečné množství verzí pro změnu prvního čísla v čísle verze (v jeho době bylo vydání 6.0 vytvořeno po 5.19). Změna číslování se provádí z estetických důvodů a je formálním krokem, který odstraňuje nepohodlí z velkého množství verzí v sérii. Linus si zapletl, že ho zmátla velká čísla, na která mu nestačí prsty na rukou a nohách. Přesto formálně existuje důvod pro výraznou změnu čísla verze, protože začínající s dalším vydáním se podpora Rust rozhodla převést z experimentálních na hlavní funkce jádra.
Do nové verze bylo přijato 15657 oprav od 2237 vývojářů, velikost patche činí 52 MB (změny se dotkly 13682 souborů, bylo přidáno 794649 řádků kódu, odstraněno 335498 řádků). V minulém vydání bylo 15035 oprav od 2217 vývojářů, velikost patche činila 45 MB. Přibližně 40 % všech přítomných změn v 6.19 souvisí s ovladači zařízení, přibližně 13 % změn se vztahuje na aktualizaci kódu specifického pro hardwarové architektury, 12 % souvisí s síťovým stackem, 5 % s filesystémy a 3 % s interními subsystémy jádra.
Hlavní novinky v jádře 6.19 (1, 2, 3):
- Diskový subsystém, vstup/výstup a souborové systémy
- Ve systému Btrfs procesy kontroly FS (scrub) a výměny zařízení již nezabrání přechodu systému do spánkového režimu (před usnutím se udržuje stav scrub kontroly; po probuzení se scrub kontrola pokračuje a operace výměny zařízení se spustí znovu). Do implementace RAID56 byla přidána podpora bloků, jejichž velikost přesahuje velikost stránky paměti. Byla provedena příprava na podporu fscrypt. Byla zvýšena výkonnost při práci s zámky při provádění operací souvisejících se rezervací místa. Byla přidána podpora ioctl operace "shutdown", která umožňuje převést FS do stavu, ve kterém se pokusí ukončit prováděné operace, ale zablokují se všechny nové operace.
- Ve souborovém systému Ext4 byla implementována podpora bloků, jejichž velikost přesahuje velikost stránky paměti (>4KB na systémech x86). Použití velkých bloků umožňuje zvýšit výkon vyrovnávacích operací zápisu průměrně o 50%, ale snižuje výkon přímého vstupu/výstupu kvůli zvýšení doby výpočtu kontrolních součtů. V nové verzi byly také přidány optimalizace, které zvýšily propustnost při provádění online defragmentace.
- V subsystému FUSE byla zlepšena podpora vyrovnaného čtení při použití velkých folí paměti (large folios). Skrze iomap byla implementována možnost sledování částečně aktuálních folí pro načítání pouze dat, která v bufferu chybí.
- V VFS byla přidána podpora odvolatelného delegování správy adresáře (recallable directory delegation), které umožňuje implementaci v NFS předávání správy adresáře od serveru klienta, aby NFS klient bez kontaktování NFS serveru sledoval stav adresáře na základě místního cache. Pokud jiný NFS klient provede změny spojené s tímto adresářem, delegování správy bude odvoláno u prvního klienta.
- Pro NFS byla přidána podpora čtení v režimu přímého vstupu/výstupu (direct I/O). Byly implementovány nastavení /sys/kernel/debug/nfsd/io_cache_read a /sys/kernel/debug/nfsd/io_cache_write pro řízení zapnutí cachování a operací přímého vstupu/výstupu. Manipulace s těmito nastaveními umožňuje snížit režijní náklady na straně NFS klienta při provádění velkých operací vstupu/výstupu.
- V NTFS byla implementována podpora ioctl operace shutdown, výchozí možnosti připojení nyní zahrnují 'acl' a 'prealloc', byla přidána podpora času až do 1. ledna 1970.
- Pro bloková zařízení a souborové systémy bylo výchozím nastavením povoleno oddělené cachování objektů 'bio' (Block I/O) pro každý CPU, což určuje aktivní operace vstupu/výstupu.
- Paměť a systémové služby
- Do jádra byla zahrnuta podsystem Live Update Orchestrator (LUO), který umožňuje plnohodnotné restartování a aktualizaci jádra bez zastavení práce a ztráty stavu systému, zařízení a procesů. Podsystem LUO je založen na dříve přidaném mechanismu KHO (Kexec HandOver) a kromě možnosti spuštění nového jádra ze starého bez ztráty stavu systému řeší úkoly jako uchování stavu zařízení a operační paměti a zajištění kontinuity operací spojených s DMA a zpracováním přerušení. Stav se uchovává do přepnutí na nové jádro a obnovuje se po zapnutí nového jádra bez narušení kontinuálních operací s zařízeními prováděnými systémem a aplikacemi v uživatelském prostoru.
- Byl přidán systémový volání listns() pro zobrazování seznamu existujících prostorů názvů v systému bez nutnosti procházet /proc//ns/ pro všechny procesy.
- Do systému asynchronního vstupu/výstupu io_uring byla přidána podpora umístění položek různých velikostí do fronty odeslání (SQE, Submission Queue Entry), analogicky k tomu, jak bylo v minulém vydání povoleno směšování velikosti obsahu fronty výsledků (CQE, Completion Queue Event). Předtím musely mít všechny položky ve frontě stejnou velikost, což vedlo k nadměrnému využívání paměti kvůli nutnosti používat maximální velikost pro všechny položky ve frontě.
V io_uring byla také přidána podpora mechanismu zcrx (Zero-Copy Receive) pro získávání dat bez kopírování mezi jádrem a uživatelským prostorem. Byla přidána podpora dotazů o rozložení paměti pro fronty SQ (Submission Queue) a CQ (Completion Queue), což umožňuje získat informace o velikosti kruhového bufferu, které jsou potřebné při uživatelském přidělování paměti pomocí příznaků IORING_SETUP_NO_MMAP a IORING_MEM_REGION_TYPE_USER.
- Pro rychlé sledování zásobníku pomocí nástrojů, jako je perf, byla přidána podpora formátu SFrame s informacemi o rozbalení zásobníku volání (unwind). SFrame je již podporován v GCC a binutils, nezpůsobuje pokles výkonu a na rozdíl od formátu DWARF obsahuje pouze minimální množství informací potřebných pro sledování zásobníku.
- Do nástroje perf byla přidána podpora jednotného popisu metrik a událostí ve formátu JSON, stejně jako odloženého rozbalení (deferred unwinding) zásobníku volání v uživatelském prostoru.
- Pro procesory AMD byl implementován mechanismus vkládání dat do cache, který umožňuje vstupním/výstupním zařízením přímo vkládat data do L3 cache CPU bez jejich předchozího umístění do RAM.
- Byla přidána podpora MPAM (Memory System Resource Partitioning and Monitoring), rozšíření architektury sady instrukcí ARMv8-A pro označení každého přístupu k paměti identifikátorem sekce (PARTID, Partition ID) a identifikátorem monitorovací skupiny (PMG, Monitoring Group ID). Vázání na PARTID může omezit spotřebu zdrojů, jako je šířka pásma paměti nebo velikost cache, aby jedna skupina úloh nezabírala všechny zdroje. V kontextu monitorování lze kombinaci PMG a PARTID použít pro sledování spotřeby paměťových zdrojů při určitých typech zátěže.
- V případě havarijního ukončení procesu po obdržení signálu nyní může jiný proces, který má pidfd ukončeného procesu, určit číslo signálu, které vedlo k ukončení procesu.
- Byla přepracována implementace restartovatelných sekvencí (restartable sequences), která umožňuje aplikacím organizačně provádět pseudo-atomické nepřerušitelné provádění skupiny instrukcí (v případě přerušení jiným vláknem se provede nová pokus o provedení sekvence). Nová implementace se vyznačuje vyšší výkonem.
- Pro BPF programy byly implementovány instrukce BPF_JMP, BPF_X a BPF_JA pro provádění nepřímých skoků na určitou pozici v tabulce skoků. Byla přidána koncepce dynamických ukazatelů (dynptr), umožňující číst data ze strukturovaných souborů. Byla přidána možnost připojit k síťovým paketům několik bajtů s metadaty.
- Moduly v jazyce Python, používané pro zpracování dokumentace jádra, byly přesunuty do samostatného adresáře tools/lib/python.
- Byla přidána funkce mempool_alloc_bulk() pro bezpečné přidělování prvků z paměťového poolu najednou pro více objektů.
- Pokračoval přenos změn z větve Rust-for-Linux, souvisejících s používáním jazyka Rust jako druhého jazyka pro vývoj ovladačů a modulů jádra (podpora Rustu není ve výchozím nastavení aktivní a nezpůsobuje zahrnutí Rustu mezi povinné závislosti pro sestavení jádra). V nové verzi byl do jádra integrován knihovnu "syn" s parserem Rust kódu, což usnadňuje psaní složitých makros. Byly rozšířeny možnosti knihoven kernel, pin-init a rbtree. Byla přidána knihovna 'num' s typem Integer pro manipulaci s celými čísly. Do makra "module!" byla přidána podpora celočíselných parametrů. Byla implementována možnost specifikace parametrů při načítání jádrových modulů napsaných v Rustu. Byly implementovány abstrakce pro subsystémy I2C a PWM (Pulse Width Modulation).
- Bylo přidáno makro "at_least" (např. "param[at_least 7]"), které informuje o minimálně povolené velikosti pole předaného funkci. Pokud bude funkci předáno pole s menším počtem prvků, kompilátor vydá varování.
- Součástí je skript klp-build pro generování jádrových modulů, které provádějí změny v běžícím jádře (livepatch), na základě souboru s patch. Do nástroje objtool byly provedeny změny potřebné pro vytváření live-patch.
- Ve User-mode Linux (spuštění jádra jako uživatelského procesu) byla přidána omezená podpora pro víceprocesorovost, ale vlákna v jednom procesu dosud nemohou běžet současně. Začalo portování User-mode Linux na knihovnu nolibc.
- Byla přidána podpora architektury LoongArch32 (LA32R, LA32S) vedle LoongArch64.
- Byla přidána možnost nastavení QoS limitů na intenzitu probouzení procesoru v režimu úspory energie s2idle (Suspend-To-Idle), který pozastavuje provádění procesů ve uživatelském prostoru, ale ponechává některé zpracovatele v jádru aktivní.
- Byla přidána podpora správy tabulek stránek paměti pro řadiče IOMMU (Input-Output Memory Management Unit), které provádějí překlad virtuálních adres viditelných hardwarovému zařízení na fyzické adresy, s možností filtrování DMA operací podle virtuálních adres a také omezení a izolace operací vstupu a výstupu.
- V událostech sledování systémových volání byla implementována možnost čtení bufferů z uživatelského prostoru a zahrnutí jejich obsahu (například názvů souborů) do výsledku sledování.
- Strážní stránky paměti (guard page), jejichž přístup způsobuje výjimku a havarijní ukončení procesu (SIGSEGV), jsou nyní označovány zvláštním označením v souboru /proc/PID/smaps.
- Byla přidána možnost správy velkých stránek paměti (transparent huge page) v soukromé paměti zónovaných zařízení.
- V zařízení zram, používaném pro komprimované uchování swapového oddílu v paměti, byla implementována podpora pro vytlačení několika struktur ‚bio‘ (Block I/O) v dávkovém režimu (writeback batching).
- Byl přidán font ‚Terminus 10×18‘, který zlepšuje čitelnost informací z konzole na obrazovkách notebooků s průměrným rozlišením (1440×900).
- Výrazně byla optimalizována práce subsystému auditu - zaznamenává se snížení režijních nákladů o polovinu.
- Virtualizace a bezpečnost
- Byla přidána podpora funkce oddělování lineárního adresního prostoru (LASS, linear address-space separation) poskytované procesory Intel, která umožňuje hardwarové oddělení rozsahů adres uživatelského prostoru a jádra pro zvýšení bezpečnosti. Adresní prostor je oddělen na základě nejvyššího bitu adresy - polovina adresního prostoru s nastaveným nejvyšším bitem se používá pro jádro, zatímco nižší část je určena pro uživatelský prostor. V rané fázi vykonávání instrukcí (před spekulativním vykonáním) se provádí kontrola platnosti přístupu z uživatelského prostoru k adresám s nastaveným nejvyšším bitem a naopak. Toto oddělení umožňuje blokovat úniky paměti jádra do uživatelského prostoru třetími kanály, i když dochází k spekulativnímu vykonávání instrukcí, což umožňuje použít LASS jako ochranu proti útokům typu Meltdown a Spectre bez značných nákladů.
- Byla přidána možnost aktivace rozšíření pro zvýšení bezpečnosti sběrnice PCI Express - PCIe Link Encryption a PCIe Device Authentication, které umožňují ověřovat autenticitu a šifrovat komunikační kanál mezi zařízením PCIe a virtuální stroj chráněným pomocí mechanismů Intel TDX (Trusted Domain Extensions) a AMD SEV-SNP (Secure Nested Paging). Implementované technologie brání odposlouchávání, analýze a podstrkování dat do DMA provozu při přístupu k hostitelskému systému nebo jiným zařízením.
- Do integrované kryptografické knihovny byla přidána podpora algoritmů SHA-3 (SHA3-224, SHA3-256, SHA3-384, SHA3-512) SHAKE128, SHAKE256 a BLAKE2b.
- Pro moduly LSM (Linux Security Modules) a konkrétně pro SELinux byla implementována možnost sledování vytváření popisovačů memfd pro aplikaci bezpečnostních politik na s nimi spojené objekty.
- Do modulu LSM IPE (Integrity Policy Enforcement), který definuje celkovou politiku zajištění integrity pro celé systém, byla přidána podpora příznaku AT_EXECVE_CHECK v funkci execveat(), která zahrnuje kontrolu integrity skriptu před jeho vykonáním interpretem.
- Byly přidány primitiva scoped_user_read_access(), scoped_user_write_access a scoped_user_rw_access() pro omezený přístup k datům v uživatelském prostoru s ochranou před spekulativními útoky.
- Byla přidána podpora mechanismu Confidential VMBus, který se používá v hypervizoru HyperV pro ochranu před vměšováním a zajištění interakce mezi hostitelským systémem běžícím v důvěrném režimu (s šifrováním paměti a izolací registrů na základě technologií AMD SNP a Intel TDX) a paravisorem, který se stará o přístup k zařízením zpracovávajícím důvěrné údaje.
- Byla přidána možnost přenosu informací o nouzově ukončeném procesu (pro generování core dumpu) prostřednictvím mechanismu pidfd. Identifikátor PIDFD je spojen s konkrétním procesem a nemění se, zatímco PID může být přiřazen jinému procesu po ukončení aktuálního procesu, spojeného s tímto PID. Použití pidfd umožňuje zabránit útokům na podvodné nahrazení nouzově ukončeného suid procesu jiným procesem, čímž se dosahuje stavu závodu v době po zahájení zpracování jádrem nouzového ukončení, ale před kontrolou parametru procesu uživatelským zpracovatelem.
- Síťová subsystém
- Do síťového subsystému byly implementovány optimalizace pro zvýšení efektivity přenosu dat (TX). Odstranění funkce __dev_queue_xmit() ze spin-locku a použití struktury llist bez blokování umožnilo čtyřnásobně zvýšit výkon při vysokém zatížení a zdvojnásobit intenzitu odesílání paketů při sníženém zatížení CPU.
- Byla poskytnuta možnost vypnout pro jednotlivé síťové sokety systémové limity na využití paměti (v tomto případě budou použity obecné limity na paměť, stanovené pro jednotlivé kontejnery). Pro správu vypnutí limitů byl navržen sysctl net.core.bypass_prot_mem a příznak SK_BPF_BYPASS_PROT_MEM ve funkci bpf_setsockopt.
- Byla přidána podpora rozšíření RFC 5837, které přidává do ICMP zpráv 'Time Exceeded', vracených při vypršení platnosti doby života (TTL) paketu, údaje o příchozích síťových rozhraních pro zajištění podrobnějších informací při sledování tras pomocí nástroje traceroute.
- Byla přidána podpora kontinuálního aktivního polingování (busy polling) v samostatném jádrovém vlákně za účelem extrakce deskriptorů z RX/TX front pro aplikace vyžadující minimální latenci.
- Byla přidána podpora protokolu CAN XL (Controller Area Network eXtended Length), ve kterém byl velikost datového pole zvýšen na 2048 bajtů pro zajištění integrace se sítěmi TCP/IP, byla realizována možnost tunelování Ethernetových rámců a byla přidána podpora šířkové impulsní modulace, která umožnila přenos dat rychlostmi 20 Mbit/s a vyššími.
- Byla přidána podpora struktury sockaddr_unsized, varianty struktury sockaddr, která používá pole s flexibilními prvky místo pole pevné velikosti (sa_data[] místo sa_data[14], které bylo v podstatě používáno pro odkazy na jiné struktury větší velikosti).
- Byla přidána možnost využití funkcionality getsockname a getpeername prostřednictvím subsystému io_uring.
- Byly přidány sysctl net.ipv4.tcp_rcvbuf_low_rtt a net.ipv4.tcp_comp_sack_rtt_percent pro optimalizaci TCP.
- Byla přidána podpora spojení s propustností 1600 Gbps (1,6T).
- Hardware
- Do subsystému DRM (Direct Rendering Manager) byl přidán API pro využití hardwarových schopností převodu barev, které umožňují obejít provádění podobných převodů prostřednictvím shaderů nebo vykonávání kódu na CPU. Pro výstup obsahu na HDR monitor mohou nyní složité barevné převody provádět displejové řadiče ve fázích před a po míchání vrstev (blending), místo programového kompozitingu obsahu do finálního zobrazení. Kromě snížení režijních nákladů a spotřeby energie při organizaci výstupu v HDR může navržená funkcionalita sloužit pro správnou reprodukci barev v editorech videa nebo obrázků.
- Byl přidán ovladač „ethosu“ pro NPU Arm Ethos U65 a U85, určený pro hardwarové akcelerace provádění AI modelů.
- V ovladači i915 pro GPU Lunar Lake a novější byla přidána podpora hardwarového zvyšování ostrosti obrazu (Sharpening).
- Byla pokračována práce na drm ovladači (Direct Rendering Manager) Xe pro GPU na bázi architektury Intel Xe, která se používá ve grafických kartách Intel rodiny Arc a integrované grafice počínaje procesory Tiger Lake. Byla přidána počáteční podpora architektury Xe3P, která se používá v GPU Crescent Island a rodině procesorů s integrovanou grafikou Nova Lake.
- V ovladači AMDGPU byla implementována plná podpora grafických karet AMD rodiny GCN 1.0 'Southern Island' a 1.1 'Sea Islands', pro které dříve byl používán ovladač Radeon. Ovladač AMDGPU dosáhl paritních schopností s ovladačem Radeon a je pro uvedené GPU aktivován ve výchozím nastavení. Karty GCN 1.x byly vyráběny v letech 2012 až 2019 a zahrnují modely jako Radeon HD 77xx/78xx/79xx/87xx/88xx/89xx, Radeon R9 280, FirePro W4000-W9000, Radeon Sky 700/900, Radeon R9 265/270/370, Radeon R9 290/390, HD 7790/8870 a jiné grafické karty rodin Radeon Rx 200/Rx 300. Kromě zvýšení výkonu v průměru o 24 % umožnil přechod na AMDGPU realizaci podpory grafického API Vulkan 1.3 pro tato GPU. Dále byla v AMDGPU přidána podpora analogových konektorů a Video Coding Engine 1.0 a také byl ve výchozím nastavení nasazen stack DC (Display Core) pro GPU založené na mikroarchitektuře Bonaire (Radeon HD 7700).
- V ovladači Nouveau byla implementována podpora hardwarového akcelerátoru NVJPG, který je přítomen v SoC Tegra210.
- V ovladači Panthor byla přidána podpora GPU Mali-G1 a základní podpora čipu MediaTek MT8196.
- Byla přidána podpora zvukového subsystému čipů Intel Nova Lake S, notebooků HP s HDA CS35L41, stejně jako zvukových rozhraní CIX IPBLOQ HD a Onkyo SE-300PCIE.
- Byla pokračována integrace komponent ovladače Nova pro GPU NVIDIA osazené GSP firmwarem, používaným od série NVIDIA GeForce RTX 2000 na bázi mikroarchitektury Turing. Ovladač je napsán v jazyce Rust. V nové verzi byla zahájena práce na RPC a dokončena implementace načítání spolupracujícího procesoru GSP (GPU System Processor).
- Byla přidána podpora ARM platforem, SoC a zařízení: Bananapi r4 pro, LinkEase EasePi R1, Qualcomm MSM8937 (Snapdragon 430), Renesas R-Car X5H, FriendlyElec NanoPi R76S, TI AM62L, Black Sesame Technologies C1200, Aspeed AST2600, Genio 1200 EVK, grinn geniosbc-510/700, Tanix TX9 Pro, Radxa Dragon Q6A, Tinker Board 3/3S, Aquila AM69, phyBOARD-Segin-i.MX91, i.MX 95 Verdin Evaluation Kit, Toradex SMARC iMX95, VIDIA Jetson Nano 2GB, Renesas rz/g3s, Indiedroid Nova, 24 variant desek Enclustra Mercury.
- Byla přidána podpora smartphonů a tabletů na bázi SoC Mediatek MT6582 (Alcatel yarisxl), Nvidia Tegra124 (Xiaomi Mi Pad) a Qualcomm MSM8939 (ASUS ZenFone 2). Byla přidána podpora notebooků na SoC Qualcomm sdm850, jako je Huawei MateBook E 2019.
- Byla přidána podpora SoC a desek na bázi architektury RISC-V: OrangePi R2S, OrangePi RV, Anlogic dr1v90, Tenstorrent Blackhole.
Zároveň latinskoamerická Nadace pro svobodný software vytvořila variantu zcela svobodného jádra 6.19 — Linux-libre 6.19-gnu, zbaveného prvků firmware a ovladačů obsahujících nesvobodné komponenty nebo úseky kódu, jejichž použití je omezeno výrobcem. V verzi 6.19 byl ze zvukového subsystému SDCA odstraněn kód pro načítání binárních firmware. Byly aktualizovány kódy pro čištění blobů v ovladačích Intel XE, Nova-Core, Qualcomm Iris, Venus a Q6V5, TI PRUeth, Intel iwlwifi, Marvell mwifiex, FourSemi fs210x, Realtek rt1320 a zvukových kodecích TI tas2783. Čistily se názvy blobů v dts-souborech (devicetree) pro ARM čipy. Bylo zastaveno čištění ovladače STM C8SECTPFE DVB, který byl odstraněn z jádra.
Zdroj: opennet.ru
