Po dvou měsících vývoje Linus Torvalds představil vydání jádra Linux 6.8. Mezi nejvýznamnějšími změnami jsou: ovladač Xe pro GPU Intel, režim ochrany blokových zařízení s připojenými FS, mechanismus plánovače úloh Deadline server, automatická optimalizace sloučení identických stránek paměti, první ovladač napsaný v jazyce Rust, systémové volání listmount a statmount, odstranění bpfilter a SLAB, mechanismus guest_memfd v KVM, profilování přístupu k datům.
Do nové verze bylo přijato 15641 oprav od 2018 vývojářů, velikost patche – 44 MB (změny se dotkly 12212 souborů, bylo přidáno 663864 řádků kódu, odstraněno 339094 řádků). V předchozím vydání bylo 18405 oprav od 2066 vývojářů, velikost patche – 72 MB. Přibližně 42 % všech změn uvedených ve verzi 6.8 souvisí s ovladači zařízení, asi 15 % změn se týká aktualizace kódu specifického pro hardwarové architektury, 14 % je spojeno se síťovým stackem, 6 % s файловыми системami a 3 % s interními subsystémy jádra.
V Git-repozitáři s jádrem 6.8 je přítomno 9,996 milionu objektů, což svědčí o tom, že následující jádro 6.9 překročí symbolickou hranici 10 milionů git-objektů. Dřívější změna čísel větví 3.x a 4.x dobře korelovala s počtem git-objektů v repozitáři – jádro 3.0 bylo vydáno, když v repozitáři bylo přibližně 2 miliony objektů, a jádro 4.0 – 4 miliony objektů. V roce 2019 však vydání 5.0 přetrhlo tuto logickou řetěz, protože při jeho formování repozitář obsahoval přibližně 6,5 milionu git-objektů.
Hlavní novinky v jádru 6.8:
- Diskový subsystém, vstup/výstup a souborové systémy
- Byl přidán režim blokování přímého zápisu na bloková zařízení, na kterých jsou připojené souborové systémy (po aktivaci režimu nebude mít uživatel root možnost provádět změny ve FS manipulací na úrovni blokového zařízení). Ve výchozím nastavení je režim vypnutý a vyžaduje specifikaci parametru BLK_DEV_WRITE_MOUNTED při sestavování. Pro oddíly s Btrfs blokáda zatím nefunguje, protože do kódu Btrfs ještě nebyly přijaty potřebné změny.
- Byla přidána systémová volání listmount() a statmount(), která umožňují z uživatelského prostoru získat podrobné informace o připojených souborových systémech.
- V souborovém systému XFS bylo pokračováno v práci na implementaci možnosti využití nástroje fsck pro kontrolu a opravu zjištěných problémů v online režimu, bez potřeby odpojení souborového systému.
- V Ext4 byl pro bloky menší než velikost paměťové stránky zaveden hovor dioread_nolock, který umožňuje zvýšit výkon tím, že se eliminuje zbytečné zamykání. Některé funkce byly převedeny na použití stránek paměti (page folios).
- V Btrfs byla přidána podpora pro montážní příznak „nospace_cache“, který vypíná cache volných bloků. Některé funkce byly převedeny na použití stránek paměti (page folios).
- Ve filesystému EROFS (Extendable Read-Only File System), určeném pro části, které jsou dostupné pouze pro čtení, byla přidána podpora pro kompresi substránek a zlepšena funkčnost v situacích nedostatku paměti.
- Ve filesystému F2FS byla zlepšena podpora zónovaných úložných zařízení (rozdělení do zón skupin bloků nebo sektorů, do kterých je povoleno pouze sekvenční přidávání dat s aktualizací celé skupiny bloků).
- Pro FS SMB byla zavedena možnost vytváření blokových a symbolických souborů zařízení.
- V Bcachefs byla přidána částečná podpora pro kontrolu a obnovu integrity připojených FS.
- V subsystému device-mapper byla ukončena podpora pro zpracovatele MD_LINEAR, MD_MULTIPATH a MD_FAULTY, které byly vyhlášeny za zastaralé v roce 2021.
- Paměť a systémové služby
- Do subsystému Zswap byla přidána aktivovaná možnost vynuceného vyložení do skutečné swapovací oblasti „studených“ paměťových stránek, ke kterým nedošlo k přístupu a které pravděpodobně zůstanou nevyžádané, v případě nedostatku operační paměti. Zswap provádí cachování vytlačovaných stránek ve swapu, uchovává je v operační paměti ve zhuštěné podobě, pokud je to možné, bez souběžného vyhazování do skutečné nekomprimované swapovací oblasti na disku. Změny učiněné v případě nedostatku paměti umožňují zmenšit velikost uloženého v RAM poolu Zswap a uvolnit paměť systému.
- V Zswap byl navržen nový režim, který zcela deaktivuje odložené zápisy (writeback) do skutečné swapovací oblasti, pokud byla pokus o zápis neúspěšná, a nevyhazuje již existující stránky v poolu zswap do swapu.
- Do plánovače úloh byl přidán mechanismus SCHED_DEADLINE server, který řeší problém se ztrátou prostředků CPU běžnými úlohami v podmínkách monopolizace CPU úlohami s vysokou prioritou (realtime). K zamezení monopolizace CPU se v jádře dříve používal mechanismus Realtime throttling, který se snažil rezervovat 5 % pro úlohy s nízkou prioritou a ponechat 95 % času úlohám realtime. Tento mechanismus však zanechával mnoho přání, protože běžné úlohy v mnoha situacích nedostávaly dostatek procesorového času. SCHED_DEADLINE server implementuje efektivnější mechanismus rezervace prostředků.
- Do subsystému DAMON (Data Access MONitor), který umožňuje sledovat přístup procesu k datům v operační paměti (například je možné zjistit, ke kterým oblastem paměti se proces dostal, a které oblasti paměti zůstaly nevyužité), byl přidán mechanismus automatického nastavení agresivity spotřeby paměti na základě stanovených kvót.
- Byla přidána podpora vícerozměrných velkých stránek paměti (mTHP — multi-size Transparent Huge Pages), která umožňuje alokovat paměť v blocích větších než základní stránka, ale menších než tradiční THP stránka.
- Byla přidána podpora velkých foliantů (page folios, sloučené stránky paměti) pro anonymní paměť (nepřipoutanou k FS, například alokovanou prostřednictvím malloc). Tato změna má za cíl zvýšit výkon díky alokaci větších kusů paměti při přístupu k nealokovaným stránkám paměti (page faults). Například použití velkých foliantů umožnilo zkrátit čas přebudování jádra o 5 % (při zkrácení času stráveného na úrovni jádra o 40 %).
- Do konfiguračního souboru jádra byl přidán parametr TRANSPARENT_HUGEPAGE_NEVER, který umožňuje zakázat používání velkých stránek paměti (Transparent Huge Pages).
- Do systémového volání userfaultfd(), které umožňuje vytvářet obslužné rutiny pro přístupy k nealokovaným stránkám paměti (page faults) ve veřejném prostoru, byla přidána operace UFFDIO_MOVE, která umožňuje při balení hromady (heap compaction) přesouvat stránky paměti ve virtuálním adresním prostoru bez provádění operace alokace stránky paměti. V provedených testech použití UFFDIO_MOVE umožnilo snížit čas balení o 40 % ve srovnání s použitím operace UFFDIO_COPY.
- Byl přidán mechanismus „KSM advisor“, který umožňuje automaticky optimalizovat parametry subsystému sloučení identických stránek paměti (KSM — Kernel Samepage Merging).
- Pokračoval přenos změn z větve Rust-for-Linux, týkajících se 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 sestavení jádra). V nové verzi byly zahrnuty změny přidávající Rust-obal nad úrovní abstrakce phylib a používající tento obal ovladač ax88796b_rust, poskytující podporu PHY rozhraní Ethernetového kontroléru Asix AX88772A (100MBit). Podle funkčnosti je ovladač na Rustu zcela ekvivalentní starému ovladači ax88796b napsanému v jazyce C a může být používán se síťovými kartami X-Surf 100, vybavenými čipem AX88796B. Pro architekturu LoongArch byla poskytnuta možnost psaní modulů v jazyce Rust. Došlo ke přechodu na použití verze Rust 1.74.1.
- Byl přidán mechanismus BPF token, který umožňuje selektivně delegovat zpracování jednotlivých funkcí BPF, jako je načítání BPF programu nebo vytváření BPF map, nepř privilegedním procesům ve space uživatele, jejichž důvěryhodnost je potvrzena zvláštním tokenem.
- Byla rozšířena funkčnost verifikátoru BPF programů.
- Do nástroje perf byla přidána podpora profilování dat, která umožňuje sledovat čtení a zápis do datových struktur, například za účelem identifikace nejvíce modifikovaných polí ve strukturách. Na systémech s procesory podporujícími sběr informací o operacích s pamětí (Intel, AMD, ARM) je pro shromažďování statistik nutné použít příkaz „perf mem record“, a pro zobrazení zprávy o přístupech k datovým strukturám — „perf annotate —data-type“.
- Byla provedena optimalizace výkonnosti zpracování systémových volání na architektuře s390 (IBM Z), která vedla v testech k urychlení vstupu do systémového volání přibližně o 11%.
- Byla poskytnuta možnost změny velikosti bufferů sledování, používaných pro ukládání informace o událostech sledování, které jsou předávány do uživatelského prostoru.
- Dříve odstraněný zastaralý mechanismus přidělování paměti SLAB byl v jádru nahrazen pouze mechanismem SLUB. Jako důvod jsou uváděny problémy s údržbou, chyby v kódu a duplicita funkcionality s dokonalejším přidělovatelem SLUB.
- Při sestavování jádra je povolen příznak „-Wmissing-prototypes“, který generuje varování pro volání globálních funkcí, které nemají definici prototypu.
- Pro architekturu RISC-V na systémech s podporou rozšíření SUSP je implementována podpora přechodu do úsporného režimu se zachováním stavu v RAM. Byla poskytnuta možnost používat systémový volání riscv_hwprobe() k získání informací o podporovaných rozšířeních architektury RISC-V.
- Virtualizace a bezpečnost
- Byly přidány nové systémové volání lsm_list_modules(), lsm_get_self_attr() a lsm_set_self_attr() pro výpis seznamu nahraných modulů LSM (Linux Security Modules) a získání/nastavení atributů modulu LSM. Byla přidána nová struktura lsm_ctx pro komunikaci v kontextu LSM mezi uživatelským prostorem a jádrem.
- Podsystem AppArmor byl převeden na použití algoritmu SHA-256 pro ověřování pravidel, místo hashů SHA-1.
- Z jádra byla odstraněna implementace funkce strlcpy(), která byla v létě zahrnuta do C-knihovny Glibc 3.38. Funkce strlcpy je alternativou k funkci strncpy(), která obsahuje ochranu proti přetečení bufferu a vždy přidává zakončovací nulový byte.
- V hypervisoru KVM Byla přidána podpora pod systému guest_memfd (guest-first memory), který poskytuje funkce správy paměti, umožňující realizaci možností a optimalizací, které nelze dosáhnout při použití společného systému správy paměti. Například guest_memfd umožňuje alokovat a odrážet oblast paměti na hostitelský systém, která je nedostupná pro hostitelské prostředí, což může být využito pro zajištění důvěrnosti výpočtů.
- Pro hostitelské systémy běžící pod hypervizorem KVM byla zahrnuta podpora režimu LAM (Linear Address Masking), poskytovaného v procesorech Intel, který umožňuje používat část bitů 64bitových ukazatelů (od 57. po 62. bit) pro ukládání nezávislých na adresování metadat.
- Do hypervisor KVM byla pro systémy na bázi architektury ARM64 přidána podpora 52bitových (LPA2) fyzických adres. Pro systémy s architekturou x86 byla poskytnuta možnost sestavení bez emulace hypercalls Hyper-V, což umožňuje zmenšit velikost jádra.
- Byl přidán ovladač iaa (IAA Compression Accelerator) pro urychlení operací komprese a dekomprese dat metodou DEFLATE, využívající možnosti kryptografických akcelerátorů Intel Analytics Accelerator (IAA).
- Na straně hostitelského prostředí byla realizována podpora mechanismu Intel TDX (Trusted Domain Extensions), který umožňuje při použití hypervisoru KVM vytvářet chráněná hostitelská prostředí, v nichž se používá šifrování paměti. virtuálních strojů.
- V SELinux byl přidán SID identifikátor „init“, který umožňuje odlišit procesy spouštěné v počáteční fázi zavádění, které jsou spuštěny před uplatněním politik SELinux. Bylo vylepšeno rozhraní /sys/fs/selinux pro správu SELinux.
- Síťová subsystém
- Byla provedena nízkoúrovňová reorganizace základních síťových datových struktur, realizovaná pro zvýšení efektivity mezipaměti. Dříve byly pole ve strukturách síťového zásobníku socks, netdev, netns a mibs umístěny podle pořadí přidání, což omezovalo využití procesorové mezipaměti. Přeorganizování umístění proměnných ve strukturách vedlo k výraznému zvýšení rychlosti provozu TCP díky minimalizaci využití řádků v mezipaměti během přenosu dat a optimalizaci přístupu k proměnným. Při zpracování mnoha paralelních TCP spojení může zrychlení dosáhnout 40%.
- Byl odstraněn subsystém bpfilter, který využíval BPF pro filtrování paketů. Bpfilter byl dodáván od vydání 4.18, ale nikdy nebyl uveden do stavu vhodného pro široké použití. V posledních letech se kód bpfilter v jádře nevyvíjel, zatímco vývoj pokračoval firmou Facebook v samostatném repozitáři.
- Hardware
- Byl přidán nový drivery DRM (Direct Rendering Manager) Xe pro GPU založené na architektuře Intel Xe, která se používá v grafických kartách Intel rodiny Arc a integrované grafice od procesorů Tiger Lake. Ovladač Xe je navržen jako základ pro podporu nových čipů, nezávislý na kódu pro starší platformy. Ovladač je postaven na nové architektuře, která více aktivně využívá již existující komponenty subsystému DRM a také standardní komponenty ovladače i915, které nejsou svázány s konkrétními GPU, například kód pro interakci s obrazovkami, model paměti a implementaci execbuf. V Mesa je práce OpenGL a Vulkan nad ovladačem Xe realizována na základě změn provedených v existujících Mesa-ovladačích Iris a ANV.
- V ovladači i915 pokračuje práce na implementaci podpory čipů Intel LunarLake (Xe 2). Byla vylepšena podpora čipů Intel Meteor Lake.
- V ovladači Nouveau byla implementována nastavení pro výchozí použití funkcí firmwaru GSP pro práci s GPU NVIDIA na základě mikroarchitektur Turing a Ampere, kde jsou operace inicializace a správy GPU prováděny samostatným mikrokontrolérem GSP (GPU System Processor). Při zapnutí nastavení bude ovladač pracovat prostřednictvím volání na firmware namísto přímého programování interakce s hardwarem.
- V ovladači AMDGPU byla zavedena podpora ACPI WBRF a VPE DPM, změněna byla obsluha rychlosti linky PCIe, pro synchronizační fronty bylo použito 64bitových pořadových čísel a byla přidána podpora specifických pro AMD mechanismů správy barev, vyřešen byl problém s přechodem do spánkového režimu.
- Byla přidána počáteční implementace ovladače pro GPU Broadcom VideoCore 7.1, používaného na kartách Raspberry Pi 5.
- Byl přidán ovladač pro GPU série PowerVR 6 založeného na mikroarchitektuře Rogue od společnosti Imagination Technologies.
- Byla přidána podpora pro řadiče Thunderbolt/USB4, integrované v čipech založených na mikroarchitektuře Intel Lunar Lake.
- Byly přidány ovladače pro kamery používané v SoC Starfive, GalaxyCore GC2145/GC0308, Chips&Media Wave a THine THP7312.
- Byla přidána podpora herních ovladačů NSO (Nintendo Switch Online) - varianty starých ovladačů od SNES (Super Nintendo), Genesis a N64 (Nintendo 64), upravené pro Nintendo Switch. Byl přidán ovladač pro herní ovladače Adafruit Seesaw. Do ovladače xpad byla přidána podpora ovladačů Lenovo Legion Go.
- Do ovladače dts byla přidána podpora herních zařízení Powkiddy RK2023, Powkiddy X55 a Anbernic RG351V.
- Přidána podpora zvukových systémů používaných v čipech NXP i.MX8m MICFIL, Qualcomm SM8250, AMD ACP5x, Intel Arrow Lake, SM8550, SM8650 a X1E80100.
- Společnost AMD provedla změny týkající se podpory budoucí série procesorů postavené na nové mikroarchitektuře Zen 5.
- Byla přidána podpora ARM64 SoC: Qualcomm SM8650 (Snapdragon 8 Gen 3), Qualcomm X1E80100 (Snapdragon X Elite), Samsung Exynos Auto v920, Google GS101 (Tensor G1), MediaTek MT8188 a Unisoc UMS9620 (Tanggula 7).
- Byla přidána podpora ARM platforem a zařízení: Huashan Pi, Microsoft Lumia, HTC One Mini 2, Motorola MotoG 4G, Huawei Honor 5X/GR5, Anbernic RG351V, Powkiddy RK2023, Powkiddy X55, ComXpress na bázi Marvell CN913x, Chromebook Lenovo, Asus a Acer na bázi Mediatek MT8183, Toradex Verdin AM62, desky na bázi Allwinner H616/H618.
- Podpora procesorů ARM11 ARMv6K SMP byla ukončena.
Zároveň latinskoamerická Nadace svobodného softwaru vytvořila variantu zcela svobodného jádra 6.8 — Linux-libre 6.8-gnu, zbavenou prvků firmwaru a ovladačů obsahujících nesvobodné komponenty nebo úseky kódu, jejichž použití je omezeno výrobcem. V vydání 6.8 byl aktualizován kód čištění blobů v různých ovladačích a subsystémech. Bylo provedené čištění ovladačů Intel qat_420xx, Imagination PowerVR, Intel Xe, Chips&Media Wave5, Intel VSC, Aquantia PHY a Realtek rtw8922a. Vzhledem k odstranění z jádra bylo zastaveno čištění ovladačů atmel, hermes, orinoco_usb, libertas_cs a zd1201. Bylo provedeno čištění názvů blobů v dts souborech (devicetree) pro architektury ARM a Aarch64. Byly odstraněny problémy s čištěním ovladače i915.
Zdroj: opennet.ru
