Po dvou měsících vývoje vydal Linus Torvalds jádro. Linux 6.19. Mezi nejvýznamnější změny patří: subsystém Live Update Orchestrator, podpora šifrování PCIe Link Encryption, systémové volání listns, režim Zero-Copy Receive v io_uring, podpora rozšíření ARM MPAM, klp-build pro generování živých záplat, podpora architektury LoongArch32, QoS pro s2idle, optimalizace subsystému auditu, Intel LASS pro ochranu Spectre, podpora hashů SHA-3 a BLAKE2b, mechanismus Confidential VMBus, optimalizace TX v síťovém subsystému, protokol CAN XL, API pro hardwarovou akceleraci HDR výstupu.
V oznámení nové verze Linus oznámil, že další vydání jádra bude označeno číslem 7.0, protože větev 6.x nashromáždila dostatek vydání, aby bylo nutné změnit první číslici čísla verze (verze 6.0 následovala po verzi 5.19). Změna číslování je provedena z estetických důvodů a je formálním krokem ke zmírnění nepohodlí způsobeného nahromaděním velkého počtu vydání v sérii. Linus žertoval, že ho velká čísla mate, protože na ně nemá ani prsty na rukou, ani na nohou. Formálně však existuje důvod pro významnou změnu čísla verze, protože od dalšího vydání byla podpora Rustu přesunuta z experimentálních funkcí do základních funkcí jádra.
Nová verze obsahuje 15 657 oprav od 2 237 vývojářů s velikostí opravy 52 MB (změny ovlivnily 13 682 souborů, přidaly 794 649 řádků kódu a odstranily 335 498 řádků). Předchozí verze obsahovala 15 035 oprav od 2 217 vývojářů s velikostí opravy 45 MB. Asi 40 % všech změn ve verzi 6.19 se týká ovladačů zařízení, přibližně 13 % změn se týká aktualizací kódu specifického pro hardwarové architektury, 12 % se týká síťového zásobníku, 5 % souborových systémů a 3 % interních subsystémů jádra.
Hlavní nové funkce v jádře 6.19 (1, 2, 3):
- Diskový subsystém, I/O a souborové systémy
- V Btrfs již procesy souborového systému (scrub) a nahrazování zařízení neblokují systém v přechodu do režimu spánku (stav scrubu se uloží před usínáním; po probuzení z režimu spánku scrub pokračuje a operace nahrazování zařízení se restartuje). Implementace RAID56 nyní podporuje bloky větší než velikost stránky paměti. Byly provedeny přípravy na podporu fscrypt. Byl vylepšen výkon se zámky během operací rezervace prostoru. Byla přidána podpora pro operaci ioctl „shutdown“, která umožňuje souborovému systému přejít do stavu, ve kterém se pokouší dokončit existující operace, ale blokuje všechny nové operace.
- Souborový systém Ext4 implementuje podporu pro bloky větší než velikost stránky paměti (>4KB na systémech x86). Použití velkých bloků zlepšuje výkon operací zápisu s vyrovnávací pamětí v průměru o 50 %, ale snižuje výkon přímého I/O v důsledku prodloužené doby výpočtu kontrolního součtu. Nová verze také obsahuje optimalizace, které zvyšují propustnost během online defragmentace.
- Subsystém FUSE má vylepšenou podporu pro čtení z vyrovnávací paměti při použití velkých folií. Pomocí funkce iomap nyní sleduje částečně platná folia a načítá pouze data, která nejsou ve vyrovnávací paměti.
- VFS přidal podporu pro odvolatelné delegace adresářů, která umožňuje přenos řízení adresářů z jednoho serveru na druhý v NFS. server Klient NFS může nezávisle monitorovat stav adresáře pomocí své lokální mezipaměti, bez přístupu k serveru NFS. Pokud jiný klient NFS provede v tomto adresáři změny, delegování řízení bude prvnímu klientovi odebráno.
- Pro NFS byla přidána podpora pro čtení v režimu přímého I/O. Pro řízení zahrnutí ukládání do mezipaměti a operací přímého I/O byla implementována nastavení /sys/kernel/debug/nfsd/io_cache_read a /sys/kernel/debug/nfsd/io_cache_write. Manipulace s těmito nastaveními může snížit režii na straně klienta NFS při provádění rozsáhlých I/O operací.
- NTFS nyní podporuje operaci vypnutí pomocí ioctl, ve výchozím nastavení povoluje možnosti připojení „acl“ a „prealloc“ a přidává podporu pro časová razítka až do 1. ledna 1970.
- Pro bloková zařízení a FS je ve výchozím nastavení pro každý procesor povoleno samostatné ukládání do mezipaměti objektů „bio“ (Block I/O), které definují aktivní vstupně/výstupní operace.
- Paměťové a systémové služby
- Jádro obsahuje subsystém Live Update Orchestrator (LUO), který umožňuje úplný restart a aktualizaci jádra bez přerušení provozu nebo ztráty stavu systému, zařízení a procesů. Subsystém LUO staví na dříve přidaném mechanismu KHO (Kexec HandOver) a kromě toho, že umožňuje spuštění nového jádra ze starého bez ztráty stavu systému, řeší problémy, jako je zachování stavu zařízení a RAM a zajištění kontinuity operací souvisejících s DMA a zpracováním přerušení. Stav je zachován před přepnutím na nové jádro a je obnoven po aktivaci nového jádra, aniž by došlo k narušení nepřetržitých operací zařízení prováděných systémem a uživatelskými aplikacemi.
- Přidáno systémové volání listns() pro výpis existujících jmenných prostorů v systému bez nutnosti iterovat v /proc/. /ns/ pro všechny procesy.
- Asynchronní I/O systém io_uring nyní podporuje umisťování prvků různých velikostí do položky fronty odesílání (SQE), podobně jako předchozí verze umožňovala míchání velikostí obsahu fronty výsledků (CQE). Dříve musely mít všechny prvky ve frontě stejnou velikost, což vedlo k nadměrné spotřebě paměti kvůli nutnosti použít maximální velikost pro všechny prvky ve frontě.
io_uring také přidává podporu pro mechanismus zcrx (Zero-Copy Receive) pro příjem dat bez jejich kopírování mezi jádrem a uživatelským prostorem. Byla přidána podpora pro dotazy na rozložení paměti pro fronty SQ (Submission Queue) a CQ (Completion Queue), což umožňuje získat informace o velikosti kruhové vyrovnávací paměti potřebné pro uživatelem definovanou alokaci paměti pomocí příznaků IORING_SETUP_NO_MMAP a IORING_MEM_REGION_TYPE_USER.
- Pro umožnění rychlého trasování zásobníku pomocí nástrojů, jako je perf, byla přidána podpora pro formát SFrame s informacemi o odpojení zásobníku volání. SFrame je již podporován GCC a binutils, neovlivňuje výkon a na rozdíl od formátu DWARF obsahuje pouze minimální sadu informací nezbytných pro trasování zásobníku.
- Nástroj perf nyní podporuje sjednocené popisy metrik a událostí JSON a také odložené vrácení zásobníku volání v uživatelském prostoru.
- Procesory AMD mají mechanismus nahrazování mezipaměti, který umožňuje I/O zařízením přímo nahrazovat data do mezipaměti L3 procesoru, aniž by je bylo nutné nejprve umístit do RAM.
- Přidána podpora pro MPAM (Memory System Resource Partitioning and Monitoring), rozšíření architektury instrukční sady ARMv8-A, které označuje každý přístup k paměti ID oddílu (PARTID) a ID monitorovací skupiny (PMG). Pomocí PARTID můžete omezit spotřebu zdrojů, jako je šířka pásma paměti nebo velikost mezipaměti, a zabránit tak, aby jedna skupina úloh spotřebovávala všechny zdroje. V kontextu monitorování lze kombinaci PMG a PARTID použít ke sledování spotřeby paměti při specifických úlohách.
- Pokud proces po přijetí signálu abnormálně ukončí svou činnost, jiný proces, který má pidfd ukončeného procesu, nyní může určit číslo signálu, které způsobilo ukončení procesu.
- Implementace restartovatelných sekvencí byla přepracována a umožňuje aplikacím organizovat pseudoatomické, nepřerušitelné provádění skupiny instrukcí (pokud je přerušeno jiným vláknem, provede se opětovný pokus o provedení sekvence). Nová implementace je více vysoký výkon.
- Pro programy BPF byly implementovány instrukce BPF_JMP, BPF_X a BPF_JA pro provádění nepřímých skoků na určitou pozici z tabulky skoků. Byl přidán koncept dynamických ukazatelů (dynptr), které umožňují čtení dat ze strukturovaných souborů. Byla přidána možnost připojit více bajtů metadat k síťovým paketům.
- Moduly Pythonu používané ke zpracování dokumentace jádra byly přesunuty do samostatného adresáře tools/lib/python.
- Přidána funkce mempool_alloc_bulk() pro bezpečné alokování prvků z paměťového poolu pro více objektů najednou.
- Pokračování migrace změn z verze Rust for branchLinuxSouvisí s používáním Rustu jako druhého jazyka pro vývoj ovladačů a modulů jádra (podpora Rustu není ve výchozím nastavení povolena a nezahrnuje Rust jako povinnou závislost pro sestavení jádra). Nová verze obsahuje vestavěnou knihovnu „syn“ s analyzátorem kódu Rust, což zjednodušuje psaní složitých maker. Možnosti knihoven kernel, pin-init a rbtree byly rozšířeny. Byla přidána knihovna „num“ s vlastností Integer pro manipulaci s celými čísly. Makro „module!“ nyní podporuje celočíselné parametry. Byla implementována možnost zadávat parametry 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ř. „param[at_least 7]“), které hlásí minimální povolenou velikost pole předaného funkci. Pokud je funkci předáno pole s menším počtem prvků, kompilátor vydá varování.
- Balíček obsahuje skript klp-build pro generování modulů jádra, které upravují běžící jádro (livepatch) na základě souboru s opravou. Nástroj objtool byl aktualizován, aby podporoval generování živých oprav.
- V uživatelském režimu Linux (spuštění jádra jako uživatelského procesu) byla přidána omezená podpora multiprocessingu, ale vlákna v rámci jednoho procesu zatím nemohou běžet současně. Začalo portování uživatelského režimu. Linux do knihovny nolibc.
- Kromě LoongArch64 byla přidána podpora pro architekturu LoongArch32 (LA32R, LA32S).
- Přidána možnost nastavení limitů QoS pro intenzitu probuzení procesoru v úsporném režimu s2idle (Suspend-To-Idle), který zmrazí provádění procesů v uživatelském prostoru, ale ponechá některé obslužné rutiny v jádře aktivní.
- Přidána podpora pro správu tabulky stránek paměti pro řadiče IOMMU (Input-Output Memory Management Unit), které převádějí virtuální adresy viděné hardwarovým zařízením na fyzické adresy, s možností filtrování operací DMA podle virtuálních adres a také omezování a izolování I/O operací.
- Události trasování systémových volání nyní podporují čtení vyrovnávacích pamětí z uživatelského prostoru a zahrnutí jejich obsahu (např. názvů souborů) do výstupu trasování.
- Ochranné stránky, které při přístupu způsobí výjimku a pád procesu (SIGSEGV), jsou nyní v souboru /proc/PID/smaps označeny speciálním štítkem.
- Přidána možnost správy velkých paměťových stránek (transparentní obrovské stránky) v privátní paměti zónovaných zařízení.
- Zařízení zram, používané pro komprimované ukládání odkládacího oddílu do paměti, implementuje podporu pro vyřazení několika struktur „bio“ (blokový I/O) v dávkovém režimu (dávkování zpětného zápisu).
- Sada obsahuje písmo Terminus 10×18, které zlepšuje čitelnost informací z konzole na obrazovkách notebooků se středním rozlišením (1440×900).
- Auditní subsystém byl výrazně optimalizován, režijní náklady se snížily na polovinu.
- Virtualizace a bezpečnost
- Přidána podpora pro lineární oddělení adresního prostoru (LASS) procesorů Intel, které umožňuje hardwarové oddělení adresních rozsahů uživatelského prostoru a prostoru jádra pro zvýšení zabezpečení. Adresní prostor je rozdělen podle nejvyššího bitu adresy: polovina adresního prostoru s nastaveným nejvyšším bitem je používána jádrem, zatímco dolní polovina je používána uživatelským prostorem. Na začátku provádění instrukcí (před spekulativním prováděním) se provádí kontrola, zda jsou povoleny přístupy z uživatelského prostoru k adresám s nastaveným nejvyšším bitem a naopak. Toto oddělení zabraňuje únikům paměti jádra do uživatelského prostoru z postranních kanálů, a to i během spekulativního provádění, což umožňuje použití LASS k ochraně před útoky Meltdown a Spectre bez významných režijních nákladů.
- Přidána možnost povolit vylepšení zabezpečení sběrnice PCI Express – PCIe Link Encryption a PCIe Device Authentication – pro ověřování a šifrování komunikačního kanálu mezi zařízením PCIe a virtuálním počítačem chráněným technologiemi Intel TDX (Trusted Domain Extensions) a AMD SEV-SNP (Secure Nested Paging). Tyto technologie zabraňují zachycení, analýze a vkládání dat do provozu DMA při přístupu k hostitelskému systému nebo jiným zařízením.
- Do vestavěné kryptografické knihovny byla přidána podpora pro algoritmy SHA-3 (SHA3-224, SHA3-256, SHA3-384, SHA3-512), SHAKE128, SHAKE256 a BLAKE2b.
- Pro moduly LSM (Linux Bezpečnostní moduly) a zejména pro SELinux, byla implementována možnost sledovat vytváření deskriptorů memfd pro použití bezpečnostních politik na objekty, které jsou s nimi spojeny.
- Modul LSM IPE (Integrity Policy Enforcement), který definuje celkovou politiku integrity pro celý systém, nyní podporuje příznak AT_EXECVE_CHECK ve funkci execveat(), který umožňuje kontrolu integrity skriptu před jeho spuštěním interpretem.
- 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 a zároveň ochranu před spekulativními útoky.
- Přidána podpora pro mechanismus Confidential VMBus používaný v hypervisoru HyperV pro zabezpečenou komunikaci mezi hostovaným systémem běžícím v důvěrném režimu (se šifrováním paměti a izolací registrů založenou na technologiích AMD SNP a Intel TDX) a paravisorem zodpovědným za přístup k zařízením zpracovávajícím důvěrná data.
- Byla přidána možnost přenosu informací o havarovaném procesu (pro generování coredumpu) pomocí mechanismu pidfd. Identifikátor PIDfd je přiřazen ke konkrétnímu procesu a nemění se, zatímco PID lze přiřadit jinému procesu po ukončení aktuálního procesu přidruženého k tomuto PID. Použití pidfd zabraňuje útokům, které zahrnují falešné zapojení havarovaného procesu SUID do jiného procesu, a to vytvořením konfliktu závodu poté, co jádro začne zpracovávat havárii, ale předtím, než obslužná rutina v uživatelském prostoru ověří parametry procesu.
- Síťový subsystém
- V síťovém subsystému byly provedeny optimalizace pro zlepšení efektivity přenosu dat (TX). Odstranění spinlocku z funkce __dev_queue_xmit() a použití struktury llist bez uzamčení zvýšilo propustnost při velkém zatížení na čtyřnásobek a zdvojnásobilo rychlost přenosu paketů a zároveň snížilo zatížení CPU na polovinu.
- Nyní je k dispozici možnost zakázat limity systémové paměti pro jednotlivé síťové sockety (v tomto případě budou použity celkové limity paměti nastavené pro jednotlivé kontejnery). Pro kontrolu, zda jsou tyto limity zakázány, slouží sysctl net.core.bypass_prot_mem a příznak SK_BPF_BYPASS_PROT_MEM ve funkci bpf_setsockopt.
- Přidána podpora pro rozšíření RFC 5837, které přidává informace o příchozích síťových rozhraních do zpráv ICMP „Time Exceeded“ vrácených po vypršení doby platnosti (TTL) paketu, aby poskytovalo podrobnější informace při trasování tras pomocí utility traceroute.
- Přidána podpora pro nepřetržité dotazování v samostatném vlákně jádra pro extrakci deskriptorů z front RX/TX pro aplikace, které vyžadují minimální latenci.
- Přidána podpora pro protokol CAN XL (Controller Area Network eXtended Length), ve kterém byla velikost datového pole zvětšena na 2048 bajtů pro zajištění integrace se sítěmi. TCP/IP, byla implementována možnost tunelování ethernetových rámců a přidána podpora pulzně šířkové modulace, což umožnilo přenos dat rychlostí 20 Mbps a vyšší.
- Přidána podpora pro strukturu sockaddr_unsized, což je varianta struktury sockaddr, která používá pole s flexibilními prvky místo pole s pevnou velikostí (sa_data[] místo sa_data[14], které se v podstatě používalo k odkazování na jiné, větší struktury).
- Přidána možnost používat funkce getsockname a getpeername prostřednictvím subsystému io_uring.
- Přidány sysctls net.ipv4.tcp_rcvbuf_low_rtt a net.ipv4.tcp_comp_sack_rtt_percent pro optimalizaci TCP.
- Přidána podpora pro spojení s propustností 1600 Gb/s (1.6T).
- Оборудование
- Do subsystému DRM (Direct Rendering Manager) bylo přidáno API pro využití hardwarových možností transformace barev, čímž se eliminuje potřeba shaderů nebo spouštění kódu na bázi CPU. U výstupu HDR obsahu může nyní řadič displeje provádět komplexní transformace barev před a po prolnutí, namísto softwarového skládání obsahu do finální vyrovnávací paměti displeje. Kromě snížení režijních nákladů a spotřeby energie při organizaci HDR výstupu lze tuto funkci využít k zajištění přesného vykreslení barev ve video nebo obrazových editorech.
- Pro NPU Arm Ethos U65 a U85 byl přidán ovladač „ethosu“, určený pro hardwarovou akceleraci modelů umělé inteligence.
- Ovladač i915 pro Lunar Lake a novější grafické karty přidává podporu pro hardwarově asistované ostření.
- Pokračovaly práce na ovladači Xe DRM (Direct Rendering Manager) pro grafické karty 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. Byla přidána počáteční podpora pro architekturu Xe3P, používanou v grafických kartách Crescent Island a v řadě procesorů Nova Lake s integrovanou grafikou.
- Ovladač AMDGPU nyní plně podporuje grafické karty řady AMD GCN 1.0 „Southern Island“ a 1.1 „Sea Islands“, které dříve využívaly ovladač Radeon. Ovladač AMDGPU byl srovnatelný s ovladačem Radeon a je pro tyto grafické karty ve výchozím nastavení povolen. Karty GCN 1.x byly vydává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 další grafické karty řady Radeon Rx 200/Rx 300. Kromě zvýšení výkonu v průměru o 24 % umožnil přechod na grafické karty AMD těmto grafickým kartám podporu grafického API Vulkan 1.3. AMDGPU navíc přidává podporu pro analogové konektory a Video Coding Engine 1.0 a ve výchozím nastavení umožňuje stack DC (Display Core) pro grafické karty založené na mikroarchitektuře Bonaire (Radeon HD 7700).
- Ovladač Nouveau implementuje podporu pro hardwarový akcelerátor NVJPG, který je součástí SoC Tegra210.
- Ovladač Panthor přidává podporu pro grafický procesor Mali-G1 a počáteční podporu pro čip MediaTek MT8196.
- Přidána podpora pro audio subsystém čipů Intel Nova Lake S, notebooků HP s HDA CS35L41 a také pro audio rozhraní CIX IPBLOQ HD a Onkyo SE-300PCIE.
- 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. V této nové verzi byly zahájeny práce na RPC a byla dokončena implementace načítání koprocesoru GSP (GPU System Processor).
- Přidána podpora pro ARM desky, 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, A2, C1200 EV, Gen 06 C1200 EV 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 deska, deska Reroid Nano 2rz4 Enclustra Merkur.
- Přidána podpora pro chytré telefony a tablety založené na SoC Mediatek MT6582 (Alcatel YarisXL), Nvidia Tegra124 (Xiaomi Mi Pad) a Qualcomm MSM8939 (ASUS ZenFone 2). Přidána podpora pro notebooky založené na SoC Qualcomm SDM850, jako například Huawei MateBook E 2019.
- Přidána podpora pro SoC a desky založené na architektuře RISC-V: OrangePi R2S, OrangePi RV, Anlogic dr1v90, Tenstorrent Blackhole.
Zároveň Latinskoamerická nadace pro svobodný software vytvořila verzi zcela svobodného jádra 6.19 - Linux-libre 6.19-gnu, očištěno od prvků firmwaru a ovladačů obsahujících nesvobodné komponenty nebo sekce kódu s omezeným rozsahem. Ve verzi 6.19 byl ze zvukového subsystému SDCA odstraněn kód pro načítání binárního firmwaru. V ovladačích pro zvukové kodeky Intel XE, Nova-Core, Qualcomm Iris, Venus a Q6V5, TI PRUeth, Intel iwlwifi, Marvell mwifiex, FourSemi fs210x, Realtek rt1320 a TI tas2783 byl aktualizován kód pro čištění blobů. Byly vyčištěny názvy blobů v souborech dts (devicetree) pro čipy ARM. Čištění ovladače STM C8SECTPFE DVB, který byl z jádra odstraněn, bylo ukončeno.
Zdroj: opennet.ru
