Vydání jádra Linux 7.2

Po dvou měsících vývoje Linus Torvalds představil vydání jádra Linux 7.2. Mezi nejvýraznějšími změnami je mechanizmus USB4STREAM, optimalizace výkonu btrfs, xfs a ext4, pokračování v odstraňování kódu pro podporu CPU i486, možnost vytváření vnořených plánovačů SCHED_EXT, snížena spotřeba paměti v subsystému swapu, zrychleny anonymní kanály, podpora rozšíření Intel MBEC a AMD GMET v KVM a odstranění protokolu AppleTalk, počáteční podpora HDMI 2.1 FRL v ovladači AMDGPU.

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

  • Diskový subsystém, vstup/výstup a souborové systémy
    • V mechanizmu iomap byl odstraněn zbytečný volání funkce memset pro již dokončené iterace ve funkci iomap_iter(), což při vysoké intenzitě I/O na rychlých NVMe úložištích zvýšilo v provedených testech počet operací I/O za sekundu (IOPS) o 5 % při použití souborových systémů ext4 a xfs.
    • V XFS byla stabilní podpora zónovaných úložných zařízení vyhlášena jako stabilní (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 Btrfs byla ve výchozím nastavení zahrnuta podpora velkých svazků paměti (large folios), což snižuje režijní náklady a zvyšuje výkon při intenzivním sekvenčním I/O. Přidána experimentální podpora obrovských svazků („huge folios“) o velikosti až 2 MB. Přidán nový ioctl GET_CSUMS pro získání informací o kontrolních součtech v uživatelském prostoru, například pro utilitu mkfs a optimalizaci deduplikace. Zlepšen výkon sekvenčního zápisu dat o 15 % a přímého I/O o 59 %.
    • Ve FS Ext4 byla významně přepracována implementace mechanismu „fast commit“, aby se vyloučilo vzniku konkurenčních a vzájemných zámků. Přidán export statistik o snapshotech inode přes /proc/fs/ext4/*/fc_info. Optimalizován výkon výpočtu hashů adresářů (pro názvy o délce 255 znaků akcelerace téměř dvojnásobná, 64 znaků 27 %, 32 znaků — 11 %).
    • V F2FS byla přidána podpora vracení chyb fserror, která umožňuje sledovat problémy se souborovým systémem z uživatelského prostoru. Zkrácena doba strávená v kontextu zpracování přerušení.
    • Do Device Mapper (DM) byl přidán nový zpracovatel dm-inlinecrypt pro transparentní šifrování a dešifrování blokových zařízení pomocí hardwarových zařízení s funkcí inline šifrování.
    • Byla navržena dokumentace pro přidání nových souborových systémů do jádra.
    • V NFS byl výchozí blokový velikost zvýšen na 4 MB na systémech se alespoň 16 GB RAM (pro ruční úpravu velikosti bloku lze použít /proc/fs/nfsd/max_block_size). Byla přidána podpora delegace kontroly adresářů klientovi, což umožňuje po určitou dobu provádět operace s daným adresářem bez kontroly změny stavu na serveru.
    • Do SMB serveru byla přidána podpora pro soubory uložené ve zkomprimované podobě a také pro kompresi dat při jejich přenosu po síti.
    • V nové implementaci NTFS (ntfsplus) byla přidána podpora pro symbolické odkazy Windows a zajištěna správná zpracování mnoha typů poškození metadat.
    • Byl odstraněn backend fscache pro caching dat FS EROFS (Enhanced Read-Only File System), který byl před dvěma lety prohlášen za zastaralý.
    • Ve FS Ceph byla přidána podpora pro manuální reset klientských sezení.
    • Do souborového systému 9P byly provedeny optimalizace, které zrychlily provoz v takových scénářích, jakými jsou sestavování projektů.
    • Do systémového volání file_getattr() byly přidány flagy pro získání informací o rozlišování velikosti písmen v souborovém systému. Flag FS_XFLAG_CASEFOLD znamená, že kontrola názvů souborů se provádí bez ohledu na velikost písmen, a flag FS_XFLAG_CASENONPRESERVING značí, že při vytváření nových názvů souborů není uchovávána informace o velikosti písmen. Tyto flagy mohou být použity v NFS klientech, které neberou v úvahu velikost písmen.
    • Do systémového volání openat2() byl přidán flag O_EMPTYPATH, který umožňuje předání prázdné cestě k souboru. V tomto případě je cesta k otevíranému souboru určena na základě předaného popisovače souboru.
    • Do systémového volání openat2() byl přidán flag OPENAT2_REGULAR, což umožňuje otevření pouze běžných souborů (při pokusu o otevření speciálního souboru, například socketu, kanálu nebo zařízení, bude vrácena chyba EFTYPE).
  • Paměť a systémové služby
    • Byl implementován mechanismus USB4STREAM pro streamování dat mezi počítači připojenými kabelem přes porty USB4. Bylo přidáno zařízení /dev/tbstreamX, pomocí kterého lze číst a zapisovat data za použití standardních funkcí read() a write() analogicky k čtení a zápisu do souborů. Například na jednom hostiteli lze odeslat informace příkazem "echo hello > /dev/tbstream0", a na druhém je přečíst příkazem "cat /dev/tbstream0". Mechanismus USB4STREAM může být kombinován s možností nastavení síťového připojení kabelem USB4 (thunderbolt_net) nebo se může používat samostatně v případě potřeby přenosu dat mezi aplikacemi, které nepodporují síťové sokety.
    • Byla zahrnuta druhá série změn pro ukončení podpory procesorů i486. Bylo odstraněno více než 13 řádků kódu souvisejících s emulací jednotky pro výpočty s plovoucí desetinnou čárkou pro procesory bez FPU. Byla odstraněna podpora procesorů i486 bez hardwarových operací CX8 (porovnej a vyměň 8 bajtů) a TSC (počítadlo cyklů CPU, používané v plánovači úloh), kód pro jejich emulaci byl odstraněn.
    • Byla vyhlášena opuštěná (orphaned) podpora procesorů AMD Geode, které se používají v počítači OLPC XO-1.
    • Byla přidána podpora pro aktualizaci implementace mechanismu Intel TDX (Trusted Domain Extensions), používaného pro šifrování operační paměti hostovaných systémů. TDX je realizován ve formě speciálního programového runtime modulu, který je během spuštění přenášen BIOSem z Flash paměti do operační paměti. Do jádra byly přidány možnosti pro správu tohoto modulu a jeho výměnu za novější verzi v běžícím systému bez nutnosti restartu.
    • Byl implementován nový plánovač správy GPU (Fair GPU scheduler), který se používá k určení pořadí vykonávání úloh na GPU zasílaných procesy využívajícími GPU. Namísto tradiční FIFO fronty požadavků na GPU tento nový plánovač využívá mechanismy spravedlivého rozdělení zdrojů, navržené s ohledem na plánovač úloh CFS (Completely Fair Scheduler), který používá plánovací algoritmus s časem přechodu k vykonání dalšího procesu. Nejvýraznější účinek používání nového plánovače je patrný při paralelním vykonávání interaktivních úloh, které aktivně pracují s GPU. V posledním okamžiku před vydáním jádra 7.2 bylo rozhodnuto o zrušení Fair GPU scheduler a byl vrácen starý FIFO plánovač kvůli potřebě ladění regresí, které vedlo k poklesu výkonu a 100% zátěži GPU při spuštění jednotlivých her v Proton.
    • Změny v subsystému eBPF: Byla přidána možnost připojit jeden BPF program k více stopovacím bodům (tracepoint). Do BPF programů připojených k stopovacím bodům byla přidána možnost přístupu k paměti komponent běžících v uživatelském prostoru, s odpovídající obsluhou přístupu k nealokovaným stránkám paměti (page fault). Do systémového volání bpf() byla přidána podpora typových atributů (log_buf, log_size, log_level a log_true_size), což umožňuje zjednodušit přenos metadat ve všech příkazech BPF, a to nejen v příkazech BPF_PROG_LOAD, BPF_BTF_LOAD a BPF_MAP_CREATE. Bylo odstraněno omezení na přenos více než 5 parametrů v funkcích BPF. Byla přidána možnost bezpečného přístupu k sdílené paměti bpf_arena bez obav z přístupu k nealokovaným stránkám paměti (page fault). Byla implementována nová varianta struktury BPF hash map, která umožňuje dynamické změny velikosti.
    • Bylo optimalizováno generování výstupu „/proc/interrupts“ se statistikou přerušení, a také byly modernizovány struktury pro ukládání čítačů přerušení a přidáno kešování.
    • Byla zrychlena generace souboru „/proc/filesystems“, který se používá v libselinux.
    • V plánovači úloh byla implementována podpora pro vyvážení zátěže mezi jádry CPU, která zohledňuje stavy interní vyrovnávací paměti procesoru. Plánovač se nyní snaží seskupit procesy, které používají společné zdroje, například vlákna jednoho procesu, pro jejich použití v kontextu stejné úrovňové vyrovnávací paměti, což zvyšuje efektivitu přístupu k datům díky zvýšené pravděpodobnosti nalezení potřebných dat v cache.
    • V mechanismu SCHED_EXT, který umožňuje použít BPF k vytváření plánovačů CPU, pokračuje realizace možnosti pro vytváření vnořených plánovačů (sub-scheduler), díky nimž lze pro každou cgroup nasadit vlastní plánovač úloh.
    • Pokračuje přenos změn z větve Rust-for-Linux, které souvisejí s využitím jazyka Rust jako druhého jazyka pro vývoj ovladačů a modulů jádra (podpora Rust není ve výchozím nastavení aktivována a nezpůsobuje zařazení Rust mezi povinné závislosti pro kompilaci jádra). Možnost použití Rust v jádře byla realizována pro architekturu s390. Součástí je balíček "zerocopy" s rychlými primitivy pro práci s pamětí pro kód v režimu "unsafe".
    • Minimální verze nástrojů LLVM potřebných pro sestavení jádra byla zvýšena na 17.0.1.
    • V minimalistické C knihovně nolibc, dodávané v sadě zdrojových kódů jádra Linux a poskytující obálku nad základními systémovými voláními, byla implementována podpora architektur OpenRISC a 32-bit PA-RISC.
    • Do subsystému swap byly provedeny optimalizace, které zvyšují výkon a snižují spotřebu paměti v samotném subsystému tím, že eliminují režijní náklady na uchovávání statických metadat a sjednocují práci s anonymní a sdílenou pamětí při použití svazků. Snížení spotřeby paměti je dost výrazné; například při připojení swapového oddílu o velikosti 1 TB bylo pozorováno snížení spotřeby paměti přibližně o 512 MB.
    • Byla zvýšena efektivita mechanismu vyřazování paměti, který odstraňuje nebo přesouvá oblasti paměti do swapu, aby uvolnil paměť při jejím nedostatku v systému. V některých typech zátěže, například při testování MongoDB pomocí YCSB (Yahoo! Cloud Serving Benchmark), byl pozorován nárůst výkonu až o 30%.
    • Do sestavy byl přidán příkaz „make sbom“ pro generování seznamů SBOM (Software Bill Of Materials), které odrážejí použití komponent, knihoven a závislostí v aktuální sestavě jádra, stejně jako informace o jejich licencích získané z hlaviček SPDX v kódu.
    • V implementaci anonymních kanálů (pipe) byla optimalizována práce s blokacemi (operace alokace paměti byly vyňaty z oblasti blokace), což zvýšilo propustnost anonymních kanálů o 21–48 % a snížilo latenci o 17–33 %.
  • Virtualizace a bezpečnost
    • Mechanismu pro přidělování paměti slab (slab allocator) byla přidána možnost využití tokenů přidělování paměti (Allocation Token) implementovaných v kompilátoru Clang 22. Tokeny umožňují označit operace přidělování paměti jedinečnými identifikátory a organizovat oddělené umístění různých typů objektů, aby se ztížila exploatace zranitelností způsobených přetečením bufferu (při oddělení přetečení bufferu v jednom typu objektů není tak snadné použít ho k poškození jiných typů objektů).
    • Mechanismus AF_ALG, používaný v zranitelnosti Copy Fail pro modifikaci dat ve stránkovém cache, byl označen za zastaralý a plánuje se jeho odstranění v některé z budoucích verzí. AF_ALG umožňuje využívat hardwarové akcelerátory pro kryptografické výpočty v Crypto API jádra, ale aplikace se vyskytují v poměrně specifických situacích. V jádru 7.2 byly odstraněny podpory asynchronního vstupu/výstupu, starých ovladačů a mechanismu zero-copy v implementaci skcipher a aead. Zůstaly pouze softwarové implementace kryptografických algoritmů a podpora hardwarových kryptoakcelerátorů v crypto API jádra byla odstraněna, jelikož AF_ALG značně zvyšuje povrch útoku, ale nepřináší výhody v výkonu ve srovnání s realizací kryptografie v uživatelském prostoru. AF_ALG byl využíván v nástroji Cryptsetup, ale jeho podpora byla odstraněna v nedávné verzi 2.8.7.
    • Do mechanismu IMA (Integrity Measurement Architecture), který umožňuje externímu servisu ověřit stav subsystémů jádra, aby se ujistil o jejich autenticity, byla přidána podpora exportu interních tabulek s výsledky měření do uživatelského prostoru s odstraněním z paměti jádra na úsporu paměti.
    • Do modulu Landlock, který poskytuje neprivilegovaným programům prostředky pro omezení používání objektů jádra Linux (hierarchie souborů, síťové sokety, ioctl atd.), byla přidána podpora správy přístupu k UDP soketům, a také možnost selektivně vypnout zapisování informací o blokovaných objektech do logu, aby se zabránilo zahlcení logu nevýznamnými informacemi.
    • Jádro bylo zbaveno používání funkce strncpy(), která kopíruje určený počet bajtů z příchozího řetězce. Použití strncpy() představovalo riziko vzniku chyb v důsledku vynechání nulového znaku na konci řetězce nebo dodatečného výplňového nulování. Místo strncpy() se doporučuje používat funkce strscpy() a strscpy_pad() pro kopírování řetězců končících nulovým znakem, stejně jako strtomem_pad(), memcpy_and_pad() a memcpy() pro kopírování řetězců známé pevné velikosti. Práce na odstranění používání strncpy() v jádře byla zahájena v roce 2020 a vyžadovala přijetí 362 změn od 70 vývojářů.
    • V hypervisoru KVM byla přidána podpora rozšíření Intel MBEC (Mode-Based Execution Control) a AMD GMET (Guest-Mode Execution Trap), které umožňují v tabulkách překladů paměti odděleně zpracovávat práva na vykonávání kódu pro jádro a aplikační prostor v hostitelských systémech. Dříve umožňovala rozšíření hardwarové virtualizace Intel a AMD označit stránky paměti jako dostupné k vykonávání pouze jedním bitem s programovým oddělením práv pro jádro a aplikační prostor na úrovni hypervisoru. Použití MBEC a GMET dává možnost eliminovat kontroly oprávnění na straně hypervisoru a významně snížit intenzitu náročného přenosu řízení z hostitelského systému k hypervisoru VMexit.
  • Síťová subsystém
    • Implementace rozšíření TCP-AO (TCP Authentication Option, RFC 5925) byla převedena na použití nové kryptografické knihovny libcrypto, což umožnilo zjednodušit kód a zvýšit efektivitu práce. TCP-AO umožňuje ověřit TCP hlavičky pomocí MAC kódů (Message Authentication Code), přičemž se používají modernější algoritmy HMAC-SHA-1-96 a AES-128-CMAC-96 namísto dříve dostupné možnosti TCP-MD5 na bázi zastaralého algoritmu MD5.
    • Počet subthreadů podporovaných pro Multipath TCP (MPTCP) byl zvýšen z 8 na 64.
    • Pokračuje se v práci na snížení používání globálního zamykání rtnl_lock v síťovém zásobníku jádra.
    • Z jádra byla odstraněna implementace protokolového zásobníku AppleTalk, který se používal v počítačích Apple od roku 1985 a v 90. letech byl nahrazen TCP/IP. Kromě toho byly odstraněny komponenty technologie přenosu dat ATM, které nesouvisely s PPPoATM, stejně jako síťové rozhraní ARCnet založené na sběrnicích ISA a PCMCIA, Bluetooth adaptéry s rozhraním PCMCIA, TLS akcelerátory Chelsea, kód pro integraci TLS se sockmap a podpora frekvenčních rozsahů 5/10 MHz ve bezdrátovém zásobníku cfg80211/mac80211. Vzhledem k přítomnosti neřešitelných problémů se zámky a absencí údržby byla odstraněna specifická implementace akcelerace zpracování TLS na bázi TCP Offload Engine (běžnější implementace TLS offload byla zachována). Byla zakázána a plánována k odstranění kód kompatibility s 32bitovými x_tables na 64bitových systémech.
    • Do ovladače pppoe byla přidána podpora mechanismů GRO (Generic Receive Offload) a GSO (Generic Segmentation Offload) pro hardwarové urychlení opětovného sestavení a segmentace paketů. Použití GRO a GSO výrazně zvyšuje průchodnost pro příchozí provoz, například na zařízeních MediaTek MT7621 byla maximální průchodnost zvýšena z 130 Mbit/s na 630 Mbit/s.
  • Hardware
    • V ovladači AMDGPU byla zavedena počáteční podpora technologie HDMI 2.1 FRL (Fixed Rate Link), která umožňuje přenos nekomprimovaného videa v kvalitě 4K/120Hz a 8K/60Hz. Dříve se dlouhou dobu nedařilo implementovat podporu HDMI 2.1 v otevřených ovladačích kvůli licenčním požadavkům HDMI Forum, ale nyní se společnosti AMD podařilo dosáhnout dohody o takové implementaci.
    • Do ovladače i915 byla přidána podpora nastavení pozadí barvy displeje ze strany displejového řadiče. Byl realizován parametr pin_params.needs_low_address.
    • Pokračuje se v práci na drm-ovladači (Direct Rendering Manager) Xe pro GPU založené na architektuře 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 platformy CRI (Crescent Island). Pro platformy dGPU Xe3p byl implementován systémový řadič.
    • V ovladači Nouveau byly vyřešeny problémy s GPU NVIDIA GA100.
    • V ovladači v3d byla přidána možnost řízení spotřeby v3D GPU na deskách Raspberry Pi.
    • Pokračuje integrace komponent řidiče Nova pro GPU NVIDIA vybavené GSP firmwarem, používanými od série NVIDIA GeForce RTX 2000 postavené na mikroarchitektuře Turing. Ovladač je napsán v jazyce Rust. Přidána podpora pro GPU NVIDIA GA100 a série Hopper a Blackwell.
    • Byla přidána podpora pro ARM platformy, SoC a zařízení: Apple t8122 (M3), Motorola Edge 30, Nothing Phone 3a, Google Pixel 3a XL, Qualcomm Dragonwing IPQ9650, Huawei Hawi, ZTE zx297520v3, Renesas R-Car M3Le, ASPEED AST27xx, Cortina Gemini, NXP i.MX6/8/9, NXP LX2160A, TI K3 AM62x.

Zároveň latinskoamerický Fond svobodného software vytvořil variantu plně svobodného jádra 7.2 — Linux-libre 7.2-gnu, vyčištěného od prvků firmwaru a ovladačů obsahujících nesvobodné komponenty nebo kusy kódu, jejichž použití je omezeno výrobcem. V vydání 7.2 proběhla očista nových ovladačů rt722-sdca a tac5xx2. Byla aktualizována očistná rutina v ovladačích amdgpu, nova core, qcom iris, q6v5, iwlwifi, amdxnda, adreno, r8152 a mt792x. Byla provedena úprava rozhraní pro načítání firmwaru. Byla provedena očista názvů blobů v dts souborech (devicetree) pro ARM čipy.

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