Linux 7.0

Linux 7.0

Po dvou měsících vývoje Linus Torvalds představil jádrný release Linux 7.0. Mezi nejvýznamnější změny patří: pravidla pro používání AI asistentů, zařazení Rustu mezi základní funkce jádra, zvýšení výkonu swapu, aktivace režimu PREEMPT_LAZY ve výchozím nastavení, podpora filtrů pro operace io_uring, nová souborová systém Nullfs, infrastruktura fserror, monitorovací nástroje pro XFS, podpora remapingu v Btrfs, aktivace verze NFS 4.1 ve výchozím nastavení, integrace postkvantového kryptografického algoritmu ML-DSA, aktivace AccECN v síťové subsystému a počáteční podpora WiFi 8.

Číslo 7.0 bylo přiděleno, protože v řadě 6.x se nahromadilo dostatek vydání k změně prvního čísla verze (v době jeho vydání bylo 6.0 vytvořeno ihned po 5.19). Změna číslování se provádí z estetických důvodů a je to formální krok, který odstraňuje nepříjemnosti způsobené hromaděním velkého počtu vydání v sérii.

Do nové verze bylo zahrnuto 15624 oprav od 2477 vývojářů, velikost patchu je 56 MB (změny se dotkly 18053 souborů, bylo přidáno 704060 řádků kódu a odstraněno 278132 řádků). V předchozí verzi bylo 15657 oprav od 2237 vývojářů, velikost patchu byla 52 MB. Přibližně 51 % všech předložených změn v 7.0 se týká ovladačů zařízení, přibližně 11 % změn souvisí s aktualizací architektur specifického kódu, 14 % se vztahuje na síťový stack, 5 % na souborové systémy a 3 % na vnitřní subsystémy jádra.

Hlavní novinky v jádru 7.0 (kernelnewbies.org, lwn.net, OpenNET):

  • Diskový subsystém, vstup/výstup a souborové systémy
    • Byla realizována infrastruktura fserror a přidán API pro získávání informací o chybách vstupu/výstupu a poškození metadat při práci se soubory. Navrhovaná infrastruktura unifikuje v souborových systémech předávání informací o chybách do uživatelského prostoru prostřednictvím mechanismu fsnotify.
    • V XFS byly přidány nové možnosti pro monitoring stavu souborového systému z uživatelského prostoru. Byla navržena ioctl operace XFS_IOC_HEALTH_MONITOR, která vrací popisovač souboru, prostřednictvím kterého lze získávat informace o selháních spojených s poškozením metadat nebo výskytem chyb při vstupu/výstupu, a také sledovat změnu stavů FS, jako je odpojení a vypnutí. Dále byl navržen na systemd řízený na pozadí běžící proces xfs_healer, který zpracovává události o stavu FS z uživatelského prostoru a podle potřeby automaticky spouští procedury obnovy.
    • Do souborového systému Btrfs byla přidána experimentální podpora struktury "remapovací strom" (remap tree), která v budoucnu může být využita jako meziprst mezi operacemi vstupu/výstupu. Podstata této přidané funkcionality spočívá v tom, že po přesunu dat na úložném zařízení namísto aktualizace všech souvisejících struktur v dodatečné struktuře „remap tree“ jsou uchovány staré a nové adresy dat, a poté jsou při přístupu k datům adresy zaměněny. Nový přístup je prezentován jako spolehlivější a flexibilnější, a také zjednodušující další rozšíření funkcionality Btrfs.
    • V Btrfs byla implementována podpora přímého vstupu/výstupu v situacích, kdy velikost bloku překračuje velikost paměťové stránky v systému.
    • Složení je zahrnuta nový souborový systém Nullfs, který lze použít jako zástupce pro kořenový FS. Soubory systému Nullfs jsou vždy prázdné, neobsahují žádná data a nepodporují změny. Účelem Nullfs je použití jako počáteční FS pro zjednodušení procesu spouštění systému – na Nullfs jsou následně přimontovány jiné FS a používá se systémový hovor pivot_root() k přepnutí kořenového FS místo čištění obsahu initramfs a použití s ním spojeného kořenového FS.
    • Bylo implementováno aktualizace informace o čase modifikace souborů v neblokujícím režimu. Předtím volání file_update_time_flags() s flagem IOCB_NOWAIT vracelo chybu -EAGAIN, což znemožnilo provádění operací přímého zápisu v neblokujícím režimu.
    • V souborových systémech do kategorie samostatně zapínatelných možností byla převedena podpora notifikačních zámků (lease). Ve výchozím nastavení není takový mechanismus nyní aktivován kvůli problémům s FS, které nebyly původně navrženy pro jeho použití. Například jej nepodporují FS 9p a cephfs.
    • V souborovém systému EROFS (Extendable Read-Only File System), určeném pro použití na oddílech přístupných pouze v režimu pro čtení, je pro kompresi ve výchozím nastavení použit algoritmus LZMA. Alternativně jsou dostupné algoritmy DEFLATE a Zstandard, které již nejsou označeny jako experimentální. Bylo implementováno sdílení záznamů v stránkovém cache (page-cache) pro identické soubory v různých FS EROFS.
    • Odebráno režim laptop_mode šetří energii tím, že odkládá a slučuje operace zápisu na pevný disk, aby se prodloužila doba, kdy je disk v režimu spánku, a snížil se počet probuzení. Tento režim ztratil smysl, protože v moderních mobilních zařízeních byly pevné disky nahrazeny SSD.
    • Souborový systém F2FS byl převeden na použití velkých folio stránek paměti (velkých folii).
    • Byla obnovena práce na ovladači ntfs3, vyvíjeném společností Paragon Software. Přidána podpora operací se soubory na základě iomap, implementovány možnosti llseek SEEK_DATA/SEEK_HOLE, přidán režim delalloc pro odloženou alokaci bloků. Mezitím bylo na seznamu vývojářů jádra v únoru schváleno zahrnutí nové implementace NTFS do jedné z budoucích verzí jádra — ntfsplus, navržené jako náhrada za ntfs3.
    • Ve výchozím nastavení při sestavení je zahrnuta verze protokolu NFS 4.1 (CONFIG_NFS_V4_1). Je zajištěna blokování exportu přes NFS specializovaných pseudo-FS, jako jsou pidfs a nsfs. V NFSD byla implementována experimentální možnost používání POSIX ACL a byla přidána podpora dynamického přizpůsobení poolu vláken podle zatížení.
  • Paměť a systémové služby
    • Byla schválena oficiální pravidla používání AI-asistentů a zahrnutí automaticky generovaného obsahu do jádra . Při předávání generovaného kódu je nutné jej označit uvedením používaného AI-asistenta pomocí značky Assisted-by. AI-asistentům je zakázáno přidávat značku Signed-off-by – osoba, která předávala patch, je považována za autora a nese odpovědnost za provedenou změnu a zaručuje její kvalitu. Vývojářům se doporučuje provádět ruční revizi kódu získaného pomocí AI a kontrolovat soulad výsledku s licenčními požadavky.Podpora Rust

    • byla převedena z experimentálních do byla převedena hlavních schopností jádra integrace mechanismu do jádra „.

    • Byla dokončena “, který umožňuje zlepšit výkon swapu. Zrychlení je dosaženo díky snížení konkurence o přístup do swapového cache, efektivnějšímu vyhledávání v cache a snížení fragmentace. Backend založený na Swap Table byl zapojen pro cachování swapu místo backendu XArray a umožnil v testu redis-benchmark s BGSAVE zvýšit počet zpracovaných požadavků o 22%.Swap TableByla přidána podpora nového rozšíření v Clang 22

    • Thread Safety Analysis Analýza bezpečnosti vlákna, což umožňuje odhalit potenciální stavy závodu a chyby způsobené nesprávným nastavením zámků již během kompilace. Rozšíření nabízí řadu atributů, jako jsou GUARDED_BY(…), REQUIRES(…), RELEASE(…) a ACQUIRE(…), které umožňují označit funkce pokryté zámky a rozlišit oblasti platnosti zámků (definovat kontext). Během kompilace se provádí kontrola správnosti aplikace synchronizačních primitiv, jako jsou mutexy, na základě hodnocení aktivity nebo neaktivity s nimi spojeného kontextu.

    • V systémovém volání open_tree přidán příznak OPEN_TREE_NAMESPACE pro usnadnění konfigurace izolovaných kontejnerů a zrychlení spuštění kontejnerů na systémech s velkým počtem montážních bodů. Podobně jako OPEN_TREE_CLONE nový příznak kopíruje pouze určený strom montážních bodů, ale místo místního файлового дескриптора vrací файловый дескриптор v novém prostoru názvů montážních bodů, ve kterém je zkopírovaný strom namontován přes kopii skutečného kořenového FS. Příznak OPEN_TREE_NAMESPACE je žádán pro opuštění odděleného provádění operací unshare(CLONE_NEWNS) a pivot_root(), které se používají při vytváření kontejnerů.

    • V systémovém volání rseq přidán mechanismus rozšíření časových kvant (time slice), který umožňuje získat dodatečný čas procesoru pro nepřerušované provádění kritické sekce. Myšlenka spočívá v tom, aby se zabránilo přerušení plánovačem úloh kritické sekce se zámkem, což by vedlo k předání řízení jiným vláknům, která používají zdroj, na kterém zůstává zámek nastaven. Rozšíření kvant času se provádí bez dodatečných nákladů, ale ani bez přísných záruk poskytovaných při plném řízení priorit.

    • Pro architektury arm64, loongarch, powerpc, riscv, s390 a x86 režim předčasného přerušení (preemption) v plánovači je ve výchozím nastavení změněn z PREEMPT_NONE na PREEMPT_LAZY. Počet možných režimů byl zkrácen od čtyř do dvou – PREEMPT_FULL a PREEMPT_LAZY (módy PREEMPT_NONE a PREEMPT_VOLUNTARY zůstávají jen pro architektury, které nepodporují PREEMPT_FULL a PREEMPT_LAZY). Mód PREEMPT_LAZY aplikuje model plného preemptivního výpadku (PREEMPT_FULL) pro realtime úlohy (RR/FIFO/DEADLINE), ale zpožďuje preemptivní výpadky běžných úloh (SCHED_NORMAL) až do hranice tiků. Zpoždění způsobuje snížení případů výpadku držitelů zámků, což umožňuje přiblížit výkonnost ke konfiguracím, které používají model dobrovolného preemptivního výpadku (voluntary preemption), tj. PREEMPT_LAZY umožňuje uchovat možnosti plného výpadku v rámci realtime úloh, ale minimalizuje pokles výkonu pro běžné úlohy.

      Aktivace PREEMPT_LAZY vedlo k vážné regresi, která dvakrát snížila výkon PostgreSQL na systémech ARM64. Pro odstranění poklesu výkonu museli vývojáři PostgreSQL navrhnuto aktivovat možnost PR_RSEQ_SLICE_EXTENSION pro snížení pravděpodobnosti výpadku držitele zámku.

    • Pokračuje přenos změn z větve Rust-for-Linux, spojenou s použití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 zařazení Rustu mezi povinné závislosti pro sestavení jádra). Díky předem integrované knihovně „syn (crates.io)“, která usnadňuje psaní složitých maker, se podařilo zmenšit velikost Rust kódu v jádře díky zjednodušení definic stávajících procedurálních maker. Byly rozšířeny možnosti knihoven kernel, macros a pin-init.

    • Systém asynchronního I/O io_uring byla přidána možnost pro použití neoběhových front (non-circular submission queue), které jsou v situacích, kdy dokončení požadavku nastává dříve, než návrat ze systémového volání, efektivněji cachovatelné.

    • V subsystému eBPF v mechanismu BTF (BPF Type Format), který poskytuje informace pro typovou kontrolu v pseudokódu BPF, pro vyhledávání ladicích informací je využit binární vyhledávání, což zvýšilo efektivitu načítání BPF programů. V eBPF byla přidána podpora implicitních argumentů při volání kfunc (funkce jádra dostupné pro použití v BPF programech), definovaných s příznakem KF_IMPLICIT_ARGS.

    • Odebráno kód pro podporu počátečního RAM disku (initrd) založeného na linuxrc, již považována za zastaralou. Zbývající implementace initrd plánují odstranit v roce 2027. Místo initrd by se měl používat initramfs (rozdíl je v tom, že initrd umisťuje počáteční bootovací prostředí do diskového obrazu, zatímco initramfs - do souborového systému).

    • V blokovém zařízení zram, používaném pro komprimované ukládání oddílu swap v paměti, změněna logika práce se zkomprimovanými stránkami paměti při volitelném přesunu dat do trvalého úložiště v případě zaplnění dostupné operační paměti. Dříve se paměťové stránky rozbalovaly před zápisem na fyzické médium, nyní se ukládají tak, jak jsou, v komprimované podobě, což snižuje zátěž CPU a šetří energii při provozu na baterii.

    • Do nástroje timerlat, navržena pro měření zpoždění při práci plánovače úloh, byla přidána možnost —bpf-action pro spouštění BPF programů při překročení stanoveného prahu.

    • Do systému sledování ftrace byla přidána možnost bitmask-list pro zobrazení bitových masek ve čitelné podobě (ve formě seznamu bitů, nikoli hexadecimálního čísla). V tracefs byly přidány funkce pro audit filtrů a triggerů. Byla přidána příkaz perf sched stats pro shromažďování a zobrazení statistiky o činnosti plánovače úloh.

    • Byly přidány konfigurační možnosti LOGO_LINUX_MONO_FILE, LOGO_LINUX_VGA16_FILE a LOGO_LINUX_CLUT224_FILE pro určení souboru s obrázkem loga, které se zobrazí při spuštění jádra místo výchozího loga s tučňákem Tux.

  • Virtualizace a bezpečnost
    • V systému asynchronního vstupu/výstupu io_uring byla implementována možnost připojení BPF programů s filtry, které kontrolují, co mohou konkrétní operace SQE (Submission Queue Entry) dělat (podobně jako systémové volání v io_uring). Přidaná možnost je analogií filtrům systémových volání. Filtry lze přiřadit k specifickým úkolům a zdědí se při vytváření dalších procesů po volání fork(). Při aktivních filtrech mohou přidávané filtry pouze připojit další omezení, ale neodstranit existující. Realizovaná možnost umožní blokování metody obejít filtrační systémová volání v sandboxových prostředích, založené na provádění podobných operací poskytovaných v io_uring místo systémových volání.
    • V SELinux byla přidána možnost řízení přístupu k tokenům BPF, které umožňují neprivilegovaným procesům provádět některé privilegované operace s BPF, například nahrávat BPF programy do jádra a vytvářet map-struktury.
    • Byla přidána podpora algoritmu pro generování digitálních podpisů ML-DSA (CRYSTALS-Dilithium), založeného na teorii mřížek a odolného vůči útokům kvantových počítačů. Byla poskytnuta možnost využití ML-DSA pro autentizaci modulů jádra.
    • Byla odstraněna možnost použití schémat generování digitálních podpisů s algoritmem SHA-1 pro ověřování modulů jádra (podpora načítání podepsaných modulů byla zachována).
    • V záznamu auditu NETFILTER_PKT byly přidány pole sport a dport pro inspekci čísel síťových portů, nejen IP adres.
    • Pro systémy s architekturou RISC-V byla implementována podpora rozšíření Zicfiss a Zicfilp, poskytujících hardwarové možnosti pro aplikaci ochrany CFI (Control Flow Integrity), která blokuje porušení normálního pořadí vykonávání instrukcí (control flow) v důsledku exploitů, které mění uložené v paměti ukazatele na funkce.
    • V hypervizoru KVM byla implementována možnost přenosu informací do hostitelských systémů o podpoře procesorem rozšíření ERAPS (Enhanced Return Address Predictor Security), které umožňuje obejít některé operace resetování stavu CPU při předání řízení hostiteli z hostitelského systému. Kromě toho, byla přidána podpora přidělení zařízení hostitelským systémům pro sledování výkonu (PMU, Performance Monitoring Unit), což zvyšuje přesnost profilování ve srovnání s použitím emulovaných PMU.
    • V ovladači pro hypervizor Hyper-V byla přidána podpora rozhraní debugfs pro prohlížení statistik o činnosti hypervizoru.
  • Síťová subsystém
    • Rozšíření AccECN (Accurate Explicit Congestion Notification), realizující vylepšenou variantu rozšíření ECN (wikipedia.org), který umožňuje hostitelům v případě přetížení označovat IP pakety místo jejich odmítnutí, což přináší možnost určit počáteční fázi zácpy v komunikačních kanálech bez ztráty paketů. Původní rozšíření ECN má omezení, které umožňuje vyslat pouze jeden signál o přetížení v rámci jednoho cyklu příjmu a odesílání TCP (RTT, Round-Trip Time, odeslání požadavku a přijetí odpovědi). AccECN toto omezení odstraňuje a umožňuje příjemci posílat odesílateli více než jednu značku o přetížení v TCP záhlaví paketu. Algoritmy řízení přetížení mohou tuto informaci použít k přesnějšímu reagování na přetížení a vyhnout se náhlému snížení intenzity odesílání paketů při výskytu mírného přetížení.
    • Do realizace algoritmu řízení síťových front Cake byla přidána možnost zpracování více front pro rozložení zátěže na více jáder CPU. Algoritmus CAKE se uplatňuje pro snížení negativního vlivu mezipaměťového bufferování paketů na okrajovém síťovém zařízení a je zaměřen na dosažení maximální možného propustnosti a minimálních úrovní zpoždění i na pomalých komunikačních kanálech.
    • Do soketů VSOCK, používané pro interakci s virtuálními stroji, byla přidána podpora síťových jmenných prostorů (network namespace).
    • Byla přidána počáteční realizace budoucího standardu WiFi 8 (802.11bn, Ultra High Reliability WiFi).
    • Byly přidány optimalizací, které zvýšily výkon zpracování příchozích UDP paketů o 12 % při provádění stresového testování v 100-gigabitové síti.
  • Hardware
    • V ovladači AMDGPU byla implementována podpora IP bloků, používaných v nových GPU AMD, jako jsou SMUIO 15.x, PSP 15.x, IH 6.1.1/7.1, MMHUB 3.4/4.2, GC 11.5.4/12.1, SDMA 6.1.4/7.1/7.11.4 a JPEG 5.3.
    • V ovladači Nouveau bylo zlepšeno řízení frekvence na systémech Tegra 186+.
    • V ovladači i915 byla přidána počáteční podpora zobrazovacího IP bloku Xe3p_LPD, používaného v procesorech Intel Nova Lake-P.
    • 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 grafických kartách Intel rodiny Arc a integrované grafice, počínaje procesory Tiger Lake. Byla přidána režim Multi Queue. Byly přidány komponenty potřebné pro diagnostiku zamrzání GPU v Mesa. Byla přidána podpora mechanismu MERT pro řízení přístupu k paměti GPU.
    • Pokračuje Integrace komponent ovladače Nova pro GPU NVIDIA, vybavené GSP firmwarem, používaných od série NVIDIA GeForce RTX 2000 založené na mikroarchitektuře Turing. Ovladač je napsán v jazyce Rust. V nové verzi byla připravena podpora GPU založených na mikroarchitektuře Turing a byly provedeny různé vnitřní změny.
    • Byla přidána Podpora řadičů a periferních zařízení s vícetrakčním rozhraním SPI (Serial Peripheral Interface), které umožňuje přenášet data v několika paralelních proudech.
    • Přidáno Ovladač pro kombinované konektory Type-C používané na zařízeních na čipech Apple Silicon, které kombinují rozhraní USB3, DP-AltMode a Thunderbolt/USB4.
    • Byla přidána podpora zvukových subsystémů čipů Tegra238, Minisforum V3 SE, iBasso DC04U, Intel Nova Lake, Nova Lake S a Focusrite Forte.
    • Byla přidána podpora ARM platforem, SoC a zařízení: Arduino UnoQ, OrangePi 6 Plus, OrangePi CM5, Anbernic RG-DS, Realtek Kent, Qualcomm Kaanapali, Mediatek Ezurio, Facebook Anacapa, Microchip LAN9668, Khadas VIM1S, QNAP TS133, i.MX952, i.MX93, i.MX94, VHIP4 EvalBoard, TQ-Systems MBLS1028A, Agilex5, Radxa CM3J, Glymur,
    • Byla přidána podpora chytrých telefonů a tabletů: Fairphone Gen 6 (SoC Qualcomm Milos/Snapdragon 7s Gen 3), Pixel 3/3 xl, Microsoft Surface Pro 11.

Zároveň latinskoamerická Nadace svobodného softwaru vytvořila varianta zcela svobodného jádra 7.0 – Linux-libre 7.0-gnu, vyčištěného od prvků firmware a ovladačů, obsahujících nesvobodné komponenty nebo úseky kódu, jejichž použití je omezeno výrobcem. V vydání 7.0 bylo provedeno vyčištění od blobů ovladače iwlwifi. Bylo aktualizováno čištění v ovladačích amdgpu, adreno, TI PRUeth, air_en8811h, ath12k, TI VPE, rtw8852b, rt1320, rt5575 SPI, tas2783, Intel catpt. Bylo provedeno vyčištění názvů blobů v dts souborech (devicetree) pro ARM čipy.

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