Linux 6.19

Linux 6.19

Po dvou měsících vývoje Linus Torvalds představil jádrný release Linux 6.19. Mezi nejvýraznější změny patří: podsystem Live Update Orchestrator, podpora PCIe Link Encryption, systémový hovor listns, režim Zero-Copy Receive v io_uring, podpora ARM rozšíření MPAM, klp-build pro generování live patchů, podpora architektury LoongArch32, QoS pro s2idle, optimalizace podsystemu auditu, Intel LASS pro ochranu proti Spectre, podpora hashů SHA-3 a BLAKE2b, mechanismus Confidential VMBus, TX optimalizace v síťovém podsystemu, protokol CAN XL, API pro hardwarové zrychlení HDR výstupu.

V oznámení nové verze Linus sdělil, že příští verzi jádra bude přiděleno číslo 7.0, protože v větvi 6.x se nahromadilo dostatek vydání pro změnu prvního čísla ve verzi (kdy příležitostně bylo vydání 6.0 vytvořeno hned 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í způsobené hromaděním mnoha vydání v sérii. Linus si dělal legraci, že ho pletou velká čísla, na které mu nezbývá prstů na rukou a nohou. Přitom formálně existuje důvod pro významnou změnu čísla verze, neboť počínaje dalším vydáním bude podpora Rust bylo rozhodnuto převedena z experimentálních na základní funkce jádra.

Do nové verze bylo přijato 15657 oprav od 2237 vývojářů, velikost patchu je 52 MB (změny se dotkly 13682 souborů, přidáno 794649 řádků kódu, odstraněno 335498 řádků). V předchozím vydání bylo 15035 oprav od 2217 vývojářů, velikost patchu činila 45 MB. Přibližně 40 % všech předložených změn v 6.19 je spojeno s ovladači zařízení, asi 13 % se týká aktualizace kódu specifického pro hardwarové architektury, 12 % je spojeno se síťovým stackem, 5 % s файловыми системами a 3 % с внутренними подсистемами ядра.

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

  • Diskový subsystém, vstup/výstup a souborové systémy
    • V Btrfs procesy kontroly FS (scrub) a výměny zařízení již neblokují přechod systému do režimu spánku (před usnutím se ukládá stav scrub kontroly; po probuzení se kontrola scrub pokračuje a provoz výměny zařízení začne 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. Zlepšena byla výkonnost práce s zámky při provádění operací souvisejících se zálohováním místa. Byla přidána podpora ioctl operace shutdown, která umožňuje převést FS do stavu, ve kterém se pokouší dokončit již spuštěné operace, ale blokuje všechny nové operace.
    • V souborovém systému Ext4 je zahrnuta podpora bloků, jejichž velikost překračuje velikost stránky paměti (>4KB na systémech x86). Použití velkých bloků umožňuje zvyšuje 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ému času výpočtu kontrolních součtů. V nové verzi také byly přidány optimalizace, které zvyšují propustnost při provádění online defragmentace.
    • V subsystému FUSE byla zlepšena podpora vyrovnávacího čtení při používání velkých folio stránek paměti (velkých svazků). Přes iomap byla implementována možnost sledování částečně aktuálních svazků pro načítání pouze dat, která chybí v bufferu.
    • V VFS byla přidána podpora odvolatelného delegování řízení adresáře (recallable directory delegation), což umožňuje realizovat v NFS předání řízení adresáře ze serveru klientovi, aby NFS klient bez dotazů na NFS server sám sledoval stav adresáře na základě místního cache. Pokud jiný NFS klient provede změny související s tímto adresářem, delegování řízení bude odvoláno prvním klientem.
    • Pro NFS byla přidána podpora čtení v režimu přímého vstupu/výstupu (direct I/O). Implementováno nastavení /sys/kernel/debug/nfsd/io_cache_read a /sys/kernel/debug/nfsd/io_cache_write pro řízení zapnutí kešová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, byly zahrnuty ve výchozím nastavení možnosti připojení acl a prealloc, přidána podpora času do 1. ledna 1970.
    • Pro blokových zařízení a FS zahrnuto ve výchozím nastavení oddělené pro každý CPU kešování objektů „bio“ (Block I/O), které definují aktivní operace vstupu-výstupu.
  • Paměť a systémové služby
    • Do jádra je zahrnuta subsystem Live Update Orchestrator (LUO), který umožňuje plně restartovat a aktualizovat jádro bez zastavení činnosti a aniž by došlo ke ztrátě stavu systému, zařízení a procesů. Subsystem LUO se zakládá na dříve přidaném mechanismu do jádra KHO (Kexec HandOver) a kromě možnosti spouštění nového jádra ze starého bez ztráty stavu systému řeší i takové úkoly, jako je uchování stavu zařízení a operační paměti, stejně jako zajištění kontinuity operací souvisejících s DMA a zpracováním přerušení. Stav je uchován do doby přepnutí na nové jádro a obnovuje se po aktivaci nového jádra bez přerušení kontinuálních operací s zařízeními prováděnými systémem a aplikacemi v uživatelském prostoru.

    • Přidáno systémový výšle listns() pro výpis seznamu existujících v systému prostorů názvů 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í prvků různých velikostí v frontě odesílání (SQE, Submission Queue Entry), obdobně jako v minulém vydání bylo povoleno mísení velikosti obsahu fronty výsledků (CQE, Completion Queue Event). Předtím musely mít všechny prvky 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 prvky ve frontě.

      Do io_uring byla také přidána podpora mechanismu zcrx (Zero-Copy Receive) pro příjem dat bez kopírování mezi jádrem a uživatelským prostorem. Byla přidána podpora dotazů na uspořádání paměti pro fronty SQ (Submission Queue) a CQ (Completion Queue), které umožňují získat informace o velikosti kruhového bufferu potřebného při alokaci paměti ze strany uživatele pomocí příznaků IORING_SETUP_NO_MMAP a IORING_MEM_REGION_TYPE_USER.

    • Pro rychlé trasování zásobníku pomocí nástrojů, jako je perf, byla přidána podpora formátu SFrame s informacemi o rozvinutí zásobníku volání (unwind). SFrame již podporují 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 trasová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é rozvinutí (deferred unwinding) zásobníku volání v uživatelském prostoru.

    • Pro procesorů AMD byl implementován mechanismus substituce dat do cache, který umožňuje zařízením vstupu/výstupu 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 instrukční sady ARMv8-A pro označení každého přístupu do paměti identifikátorem sekce (PARTID, Partition ID) a identifikátorem monitorovací skupiny (PMG, Monitoring Group ID). Vázání na PARTID umožňuje omezit spotřebu zdrojů, jako je šířka pásma paměti nebo velikost cache, aby určitá 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ů za určitých typů zátěže.

    • V případě havarijního ukončení procesu po přijetí signálu může jiný proces, který má pidfd ukončeného procesu, nyní určit číslo signálu, které vedlo k jeho ukončení.

    • Přepracována implementace restartovatelných sekvencí (restartovatelné sekvence), které umožňují aplikacím organizovat pseudo-atomární nepřerušitelné provádění skupiny instrukcí (v případě přerušení jiným vláknem se pokusí sekvenci znovu provést). Nová implementace se vyznačuje vyšší výkonností.

    • Pro programy BPF je realizován instrukce BPF_JMP, BPF_X a BPF_JA pro provádění nepřímých skoků na určitou pozici z tabulky skoků. Přidána koncepce dynamických ukazatelů (dynptr), které umožňují číst data ze strukturovaných souborů. Byla přidána možnost připojování více bajtů s metadaty k síťovým paketům.

    • Moduly v jazyce Python, používané pro zpracování dokumentace k jádru, byly přesunuty do samostatného adresáře tools/lib/python.

    • Byla přidána funkce mempool_alloc_bulk() pro bezpečné alokování prvků z paměťového poolu najednou pro několik objektů.

    • Pokračuje přenos změn z větve Rust-for-Linux, spojené 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 nezpůsobuje zahrnutí Rust mezi povinné závislosti pro sestavení jádra). V nové verzi bylo jádro integrováno knihovnou „syns parserem Rust kódu, který usnadňuje psaní složitých maker. Rozšířeny možnosti knihoven kernel, pin-init a rbtree. Přidána knihovna num s typem Integer pro manipulaci s celými čísly. Do makra module! byla přidána podpora pro celočíselné parametry. Implementována možnost specifikace parametrů při načítání modulů jádra napsaných v Rustu. Byly implementovány abstrakce pro subsystémy I2C a PWM (Pulse Width Modulation).

    • Přidáno makro at_least (například, param[at_least 7], informující o minimální povolené velikosti pole předávaného funkci. Pokud bude do funkce předáno pole s menším počtem prvků, kompilátor vygeneruje varování.

    • Složení bylo zapnuto skript klp-build pro generování modulů jádra, které provádějí změny v běžícím jádře (livepatch), na základě souboru s patchí. Do utility objtool byly provedeny změny potřebné pro vytváření live-patchů.

    • V User-mode Linux (spuštění jádra jako uživatelského procesu) přidána omezená podpora multiprocesorovosti, ale vlákna uvnitř jednoho procesu zatím nemohou být prováděna 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), zmrazení provádění procesů ve uživatelském prostoru, ale ponechání aktivních některých zpracovatelů v jádře.

    • Byla přidána podpora správy tabulek stránkování paměti pro ovladače IOMMU (Input-Output Memory Management Unit), vykonávajících translaci virtuálních adres viditelných hardwarovému zařízení do fyzických adres, s možností filtrovat operace DMA podle virtuálních adres, a také omezovat a izolovat operace vstupu-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), přístup k nimž vyvolá výjimku a havarijní ukončení procesu (SIGSEGV), nyní jsou označovány speciální značkou 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 zonovaných zařízení.

    • V zařízení zram, používaném pro komprimované ukládání oddílu swap v paměti, byla implementována podpora vytěsňování několika struktur „bio“ (Block I/O) v dávkovém režimu (writeback batching).

    • Do souboru byl zahrnut font „Terminus 10×18“, zlepšující čitelnost informací z konzole na obrazovkách notebooků s průměrným rozlišením (1440×900).

    • Významně optimalizovány práce subsystémy auditu — zaznamenává se pokles režijních nákladů na polovinu.

  • Virtualizace a bezpečnost
    • Přidána podpora procesorů Intel pro rozdělení lineárního prostoru adres (LASS, lineární oddělení adresního prostoru), které umožňuje hardwarově oddělit rozsahy adres prostoru uživatele a jádra pro zvýšení bezpečnosti. Adresní prostor je rozdělen podle nejvyššího bitu adresy – polovina adresního prostoru s nastaveným nejvyšším bitem je používána pro jádro, zatímco dolní část je pro prostor uživatele. V rané fázi vykonávání instrukcí (ve stádiu před spekulativním vykonáváním) se provádí ověření oprávněnosti přístupu z prostoru uživatele k adresám s nastaveným nejvyšším bitem a naopak. Takovéto rozdělení umožňuje zablokovat úniky paměti jádra do prostoru uživatele prostřednictvím bočních kanálů i při spekulativním vykonávání instrukcí, což umožňuje používat LASS k ochraně před útoky typu Meltdown a Spectre, aniž by to vedlo k výrazným dodatečným nákladům.
    • Byla přidána možnost zapnutí rozšíření zesílení bezpečnosti sběrnice PCI Express – PCIe Link Encryption a PCIe Device Authentication, které umožňují ověřit autenticitu a zašifrovat komunikační kanál mezi zařízením PCIe a virtuálním strojem, chráněným pomocí mechanizmů Intel TDX (Trusted Domain Extensions) a AMD SEV-SNP (Secure Nested Paging). Realizované technologie neumožňují zachytávat, analyzovat a podstrkovat data do DMA provozu při přístupu k hostitelské systému nebo dalším zařízením.
    • Do vestavěné 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 zejména pro SELinux, byla implementována možnost sledovat vytváření deskriptorů memfd pro aplikaci bezpečnostních politik na s nimi spojené objekty.
    • V 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 ve funkci execveat(), zahrnující kontrolu integrity skriptu před jeho provedení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 spe kulativních útoků.
    • Byla přidána podpora mechanismu Confidential VMBus, používaného v hypervizoru HyperV pro chráněnou interakci bez zásahu hypervizoru mezi hostitelským systémem provozovaný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ý odpovídá za přístup k zařízení zpracovávajícím důvěrná data.
    • Byla přidána možnost předávání informací o havarovaném procesu (pro generaci coredump) 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 blokovat provádění útoků náhrady havarovaného suid procesu jiným procesem, čímž se dosahuje stavu závodu po zahájení zpracování jádrem havarijního ukončení, ale před tím, než handler ve uživatelském prostoru zkontroluje parametry procesu.
  • Síťová subsystém
    • V síťové subsystému byly provedeny optimalizací pro zvýšení efektivity přenosu dat (TX). Odstranění funkce __dev_queue_xmit() ze spin-zámku a použití bezblokové struktury llist umožnilo čtyřikrát zvýšit výkon při velkém zatížení a zdvojnásobit intenzitu odesílání paketů při snížení zátěže na CPU na polovinu.
    • Byla poskytnuta možnost vypnutí pro jednotlivé síťové sokety systémových limitů na využití paměti (v tomto případě budou použity sdílené limity na paměť, které jsou nastaveny pro jednotlivé kontejnery). Pro řízení vypínání limitů byl navržen sysctl net.core.bypass_prot_mem a příznak SK_BPF_BYPASS_PROT_MEM v 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í doby života (TTL) paketu, údaje o příchozích síťových rozhraních pro získání podrobnějších informací při trasování cest pomocí utility traceroute.
    • Byla přidána podpora kontinuálního aktivního pollingu (busy polling) v samostatném jádrovém vláknu za účelem vyjmutí deskriptorů z RX/TX front pro aplikace vyžadující minimální latence.
    • Byla přidána podpora protokolu CAN XL (Controller Area Network eXtended Length), kde byla velikost datového pole zvýšena na 2048 bajtů pro zajištění integrace se sítěmi TCP/IP, implementována možnost tunelování Ethernet rámců a přidána podpora šířkově-impulzní modulace, která umožnila přenos dat rychlostí 20 Mb/s a více.
    • Byla přidána podpora struktury sockaddr_unsized, varianty struktury sockaddr, která používá pole s flexibilními prvky namísto pole pevné velikosti (sa_data[] místo sa_data[14], které v podstatě sloužilo jako odkazy na jiné větší struktury).
    • Byla přidána možnost používat funkce 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) byla přidána API pro využívání hardwarových schopností převodu barev, což umožňuje obejít podobné převody pomocí shaderů nebo provádění kódu na CPU. Pro výstup obsahu na HDR monitoru mohou nyní složité barevné převody vykonávat displejové kontroléry při fázi před a po míchání vrstev (blending), namísto programového kompozitování obsahu do konečného zobrazovacího bufferu. Kromě snížení režijních nákladů a spotřeby energie při organizaci výstupu na HDR může být nabízená funkcionalita použita pro správný převod barev v editorech videa nebo obrázků.
    • Přidáno ovladač ethosu pro NPU Arm Ethos U65 a U85, určené pro hardwarové urychlení 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).
    • Pokračuje práce na drm ovladači (Direct Rendering Manager) Xe pro GPU na bázi architektury Intel Xe, která se používá ve grafikách Intel rodiny Arc a integrované grafiky od procesorů 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 zavedena plná podpora grafik AMD rodiny GCN 1.0 'Southern Island' a 1.1 'Sea Islands', pro které se dříve používal ovladač Radeon. Ovladač AMDGPU byl dotáhnut na paritu schopností s ovladačem Radeon a aktivován pro uvedené GPU jako výchozí. Karty GCN 1.x byly vyráběny od roku 2012 do roku 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é grafiky rodin Radeon Rx 200/Rx 300. Kromě zvýšení výkonu v průměru o 24 %, přechod na AMDGPU umožnil implementaci podpory grafického API Vulkan 1.3 pro tyto GPU. Kromě toho byla do AMDGPU přidána podpora analogových konektorů a Video Coding Engine 1.0, a také byl jako výchozí použit stack DC (Display Core) pro GPU založené na mikroarchitektuře Bonaire (Radeon HD 7790).
    • V ovladači Nouveau byla implementována podpora hardwarového akcelerátoru NVJPG, který je součástí SoC Tegra210.
    • V ovladači Panthor byla přidána podpora GPU Mali-G1 a počáteční podpora čipu MediaTek MT8196.
    • Byla přidána podpora zvukového subsystému čipů Intel Nova Lake S, notebooků HP s HDA CS35L41, a také zvukových rozhraní CIX IPBLOQ HD a Onkyo SE-300PCIE.
    • Pokračována integrace komponent ovladače Nova pro GPU NVIDIA vybavené GSP firmwarem používaným od série NVIDIA GeForce RTX 2000 založené na mikroarchitektuře Turing. Ovladač je napsán v jazyce Rust. V nové verzi byla zahájena práce na RPC a dokončeno implementace nahrávání koprocessoru 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.
    • Přidána podpora SoC a desek založených na architektuře RISC-V: OrangePi R2S, OrangePi RV, Anlogic dr1v90, Tenstorrent Blackhole.

Zároveň latinskoamerická Nadace svobodného softwaru vytvořila varianta zcela svobodného jádra 6.19 — Linux-libre 6.19-gnu, zbaveného prvků firmwarů a ovladačů obsahujících nesvobodné komponenty nebo úseky kódu, jejichž rozsah použití je omezen výrobcem. V vydání 6.19 byl ze zvukového subsystému SDCA odstraněn kód pro nahrávání binárních firmware. Byly aktualizovány skripty 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. Provedeno čištění názvů blobů v dts souborech (devicetree) pro ARM čipy. Čistění ovladače STM C8SECTPFE DVB, který byl odstraněn z jádra, bylo přerušeno.

Zdroj: linux.org.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