Vydání jádra Linux 6.15

Po dvou měsících vývoje představil Linus Torvalds vydání jádra Linux 6.15. Mezi nejvýraznějšími změnami jsou: mechanismus auditu v Landlock, režim uzamčení mapování paměti, podsystem fwctl, ovladač Nova pro GPU NVIDIA, implementace hostitelského systému pro hypervisor Hyper-V, podpora zónovaných úložných zařízení v XFS, optimalizace síťového subsystému, scrub kontrola v Bcachefs, možnost kontroly operací pomocí io_uring.

Nová verze zahrnuje 15 945 oprav od 2 154 vývojářů, velikost patche je 59 MB (změny se dotkly 13 596 souborů, bylo přidáno 739 608 řádků kódu, odstraněno 312 168 řádků). V minulém vydání bylo 12 115 oprav od 1 984 vývojářů, velikost patche byla 39 MB. Přibližně 41 % všech změn v 6.15 souvisí s ovladači zařízení, asi 16 % změn má vztah k aktualizaci kódu specifického pro hardwarové architektury, 13 % se vztahuje k síťovému stacku, 5 % k souborovým systémům a 4 % k interním subsystémům jádra.

Hlavní novinky v jádře 6.15:

  • Diskový subsystém, vstup/výstup a souborové systémy
    • Do mechanismu fanotify byla přidána možnost sledování událostí připojení a odpojení.
    • Do XFS byla přidána podpora zónovaných úložných zařízení (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ů). Byl přidán příznak rwf_dontcache pro vypnutí kešování při zápisu. Byla implementována možnost atomárního zápisu více bloků dat najednou.
    • V Btrfs byla implementována možnost specifikace záporných úrovní komprese zstd při připojení (-15 až -1, například 'compress=zstd:-5'), které zajišťují vyšší rychlost práce na úkor účinnosti komprese. Bylo vylepšeno kešování cest k souborům (v provedeném testu se rychlost operace 'send' zvýšila o 30 %). Byla přidána podpora bloků o velikosti 2 KB.
    • V EXT4 byla zvýšena výkonnost při přehrávání žurnálu s velmi vysokým počtem zrušených záznamů (zátěž běžná pro oddíly pod FS Lustre). Byl implementován lineární vyhledávací algoritmus pro záznamy 'dentry' (vnitřní reprezentace elementů adresářů), který řeší problémy s přístupem k některým souborům v režimu bez ohledu na velikost písmen. Bylo zajištěno fungování možnosti připojení 'errors=remount-ro'. Byla zvýšena odolnost při zpracování poškozených FS.
    • V F2FS byl implementován ioctl pro získání informací o prioritě operace vstupu/výstupu pro zadaný soubor. Byla provedena práce na přechodu na používání foliantů stránek paměti (page folios).
    • V Bcachefs byl přidán režim „scrub“, ve kterém se provádí kontrola správnosti čtení všech dat a metadat z FS. V případě zjištění chyb se spustí procedura obnovy. V Bcachefs byla také přidána podpora pro práci s FS, jejichž velikost bloku je větší než velikost stránky paměti. Formát diskových struktur Bcachefs byl stabilizován (další změny formátu budou realizovány ve formě volitelných doplňků).
    • V EROFS byla přidána podpora pro 48bitovou adresaci bloků.
    • V subsystému FUSE byly implementovány sysctl default_request_timeout a max_request_timeout pro nastavení časových limitů pro provádění požadavků, což umožňuje sledování zaseknutí komponent FUSE pracujících v prostoru uživatele. Maximální velikost názvů souborů v FUSE byla zvýšena na 1024 znaků.
    • Do systémového volání statmount() byla přidána možnost získat informace o mapování identifikátorů uživatelů připojených souborových systémů, které se používá k přiřazení souborů určitého uživatele na připojeném cizím oddílu k jinému uživateli v aktuálním systému.
    • Byla zprovozněna možnost vytváření bodu připojení s jiným mapováním identifikátorů uživatelů, než má původní připojený oddíl.
    • Do API pro správu připojení byly provedeny změny, které zjednodušují sestavování složitých hierarchií souborových systémů bez odhalení jednotlivých částí souborových systémů, které je třeba ponechat skryté.
    • Do subsystému pro práci s blokovými zařízeními byla přidána podpora pro hardwarová zařízení ochrany klíčů šifrování.
    • Ve souborovém systému SMB byla implementována možnost is_network_name_deleted a výchozí režim smb_server_kerberos5 byl povolen.
    • Pro FS OverlayFS byla přidána možnost připojení „override_creds“, při jejímž uvedení se při přístupu k nižším úrovním úložiště použijí přihlašovací údaje volajícího uživatele, nikoli toho, kdo provedl připojení. Tato změna například umožňuje při připojení OverlayFS požadovat uživatele s oprávněními CAP_SYS_ADMIN, ale používat FS s přihlašovacími údaji bez této privilege.
    • V exFAT byly zrychleny operace mazání souborů. Místo odesílání požadavků „discard“ jednotlivě na každý uvolněný klastr mazání souboru nyní ovladač skupinu požadavků. V provedeném testu se doba mazání souboru o velikosti 80 GB snížila z 286 sekund na 1,6 sekundy.
    • Všechny pseudo-FS, stejně jako FS EXT2, byly převedeny na použití nového API pro připojení oddílů.
    • Byl odstraněn kód pro podporu souborových systémů SYSV (SystemV/386, Xenix a Coherent), který od roku 2023 označen jako nepodporovaný (orphaned).
  • Paměť a systémové služby
    • Minimální verze GCC potřebná pro sestavení jádra byla zvýšena na 8.1 a Clang na 15.0.0.
    • Byl přidán subsystém fwctl (Firmware Control), který poskytuje API pro bezpečné řízení firmware a provádění handlerů na straně firmware z prostoru uživatele. Na základě fwctl byly připraveny ovladače pro zařízení CXL (Compute Express Link), Ethernetové adaptéry Mellanox ConnectX (mlx5) a servisní karty AMD/Pensando.
    • Byly rozšířeny možnosti mechanismu pidfd, který umožňuje používat identifikátory spojené s konkrétními procesy a na rozdíl od pid nejsou znovu přidělovány. Byla poskytnuta možnost extrakce dat o stavu ukončení procesu, který je identifikován prostřednictvím pidfd poté, co rodičovský proces obdržel potvrzení o ukončení potomka (reaped) a jeho zdroje byly uvolněny. Do systémových volání byl přidán flag PIDFD_SELF, pomocí kterého může proces odkázat sám na sebe.
    • Pro architekturu RISC-V byla implementována podpora rozšíření BFloat16, Zaamo (atomární operace s pamětí), Zalrsc (Load-Reserved/Store-conditional) a ZBKB (bitové operace pro kryptografii).
    • Při trasování byla zajištěna možnost ukládání argumentů volaných funkcí a jejich zobrazení v logách trasování.
    • Do systému asynchronního vstupu/výstupu io_uring byla přidána podpora čtení informací o událostech epoll. Použití io_uring pro zpracování událostí epoll umožňuje snížit počet přepnutí kontextu a dává možnost zpracovávat najednou více událostí epoll.
    • V subsystému eBPF byla vylepšena verifikace programů s cykly. Byly přidány nové instrukce „timed_may_goto“, „load-acquire“ a „store-release“. Byla poskytnuta možnost měnit rozšířené atributy souborů z BPF programů. Byla přidána funkce try_alloc_pages(), navržená pro alokaci paměti při vysoké pravděpodobnosti selhání operace (při spuštění BPF programů v omezených kontextech).

      Byl implementován nový primitiv blokování — rqspinlock (Resilient Queued Spin Lock), který během běhu identifikuje situace vedoucí k vzájemnému blokování. Nový primitiv umožňuje načítání BPF programů, pro které verifikátor nezaručoval správnou funkčnost s blokováním.

    • Byla významně zvýšena spolehlivost alokace velkých stránek paměti (huge-page).
    • Bylo značně zrychleno výpočty kontrolních součtů CRC64 na systémech x86. Mimo jiné byly pro zrychlení využity nové vektorové instrukce z sady AVX-512. V některých situacích vzrostla výkonost až 100krát.
    • Pokračuje přenos změn z větve Rust-for-Linux, souvisejících 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í aktivní a nevede k zařazení Rust mezi povinné závislosti pro sestavení jádra). Byla poskytnuta možnost využití makra „#[kunit_tests()]“ v kódu jádra pro spuštění unit testů. Byla přidána podpora architektury ARMv7. Byly implementovány moduly dma a hrtimer s Rust obálkami pro DMA (byly přidány Linusem obcházejícím správce, který poté odešel ze svého postu) a vysoce přesné časovače. Rozšířeny moduly ‘list’, ‘str’, ‘sync’, ‘error’ a ‘alloc’. Byla přidána podpora nového syntaxe ‘&raw’ (raw_ref_op).
    • V subsystému perf byla implementována možnost profilování zpoždění, využívajíc informace od plánovače úloh.
    • Byl přidán parametr příkazového řádku jádra „traceoff_after_boot“, který vypíná trasování po spuštění jádra a procesu init. Parametr může být použit při diagnostice problémů souvisejících se spuštěním, zajišťující, že nasbíraná data trasování během spuštění nebudou přepsána.
    • Podpora 32bitových x86 systémů s více než 8 CPU a 4 GB RAM byla ukončena. Tento typ hardwaru již dávno nebyl vyráběn a systémy vyžadující takové zdroje byly převedeny na 64bitové CPU.
    • Byly provedeny změny v implementaci POSIX časovačů, které umožňují nástroji CRIU (Checkpoint/Restore in Userspace) ukládat a obnovovat identifikátory časovačů.
  • Virtualizace a bezpečnost
    • Byla přidána možnost využít Linux jako kořenové prostředí (Dom0, root partition) pro hypervisor Hyper-V (Microsoft Hypervisor). Hostitelské prostředí odpovídá za správu hypervisoru, organizaci spuštění hostovaných systémů, přidělování zdrojů a zajištění interakce virtuálních strojů s hardwarem. Správa hypervisoru Hyper-V v Linuxu se provádí prostřednictvím zařízení /dev/mshv.
    • Do modulu Landlock, který poskytuje nedávným programům prostředky pro omezení používání objektů jádra Linuxu (hierarchie souborů, síťové sockety, ioctl apod.), byl přidán auditní mechanismus. Audit umožňuje podrobně hodnotit příčiny blokací přístupu, ke kterým dochází při používání Landlocku, a poskytuje možnost pochopit, kdy a jaká operace byla blokována, proč došlo k blokaci a které pravidlo bylo aktivováno.
    • Byla přidána možnost realizace zpracovatelů v LSM modulech (Linux Security Modules), které kontrolují přístupy k systému asynchronního vstupu/výstupu io_uring a umožňují blokovat použití io_uring k obchodu s omezeními přístupu k systémovým voláním. Takový zpracovatel byl implementován v LSM modulu SELinux.
    • V SELinux byla implementována možnost uplatnění politik na jakýkoli typ dat načítaných jádrem, včetně obrazů firmwaru, bezpečnostních politik a certifikátů.
    • Byl přidán režim zapečetění (seal) některých operací mapování paměti prováděných jádrem ve virtuálním adresovém prostoru procesu. Zapečetění převádí mapování do režimu pouze pro čtení a neumožňuje jeho změnu v případě zneužití zranitelnosti. Toto opatření se vztahuje na mapování vDSO, vsyscall, vvar, sigpage a uprobes. Výchozí režim je vypnut, protože může narušit provoz některých aplikací. Pro zapnutí byla přidána konfigurační volba CONFIG_MSEAL_SYSTEM_MAPPINGS.
  • Síťová subsystém
    • Byla pokračována práce na odstranění globálního zámku RTNL (rtnl_lock) z síťového zásobníku a jeho přeměně na zámky vázané k jednotlivým prostorům síťových názvů.
    • Byla přidána počáteční možnost příjmu síťových paketů pomocí io_uring s okamžitým kopírováním obsahu do paměti programu v uživatelském prostoru bez mezikrocování (zero-copy). V provedených testech toto změna umožnila zpracování provozu přes 200 gigabitový kanál, přičemž se využívalo jedno jádro CPU.
    • Byly implementovány sysctl tcp_rto_max_ms a možnost TCP-socketů TCP_RTO_MAX_MS, pomocí kterých je možné nastavit maximální dobu mezi pokusy o opětovné poslání paketů.
    • Do BPF byla přidána série callbackových volání pro získávání informací o čase z různých míst síťového zásobníku, která mohou být použita k diagnostice problémů se síťovými zpožděními.
    • Byly přidány optimalizace výkonu síťových operací:
      • Optimalizace GRO (Generic Receive Offload), která spojuje několik malých paketů do jednoho velkého, je nyní aktivována při přepínání zpracování paketu na jiný CPU (pro vyvážení zátěže) při použití subsystému XDP (eXpress Data Path), který umožňuje zpracovávat pakety na úrovni síťového ovladače před jejich předáním síťovému zásobníku. Získaný nárůst výkonu zpracování TCP toků díky této optimalizaci může dosáhnout dvojnásobku.
      • Za podmínek vysokého zatížení byla výkon funkce connect() zvýšena až dvojnásobně díky nahrazení spin-zámku mechanismem synchronizace RCU (Read-Copy-Update) při vyhledávání záznamů s informacemi o stranách spojení (zdrojové a cílové adresy) a porty. Dále bylo provedeno zlepšení hashování, které zajistilo nárůst výkonu o dalších 229%. IP adres Byla zrychlena implementace MPTCP (Multipath TCP), rozšíření protokolu TCP pro organizaci dodávky paketů současně přes několik cest různými síťovými rozhraními přiřazenými k různým IP adresám. MPTCP v režimu s jedním tokem je urychlen o 29%.
      • V netfilteru bylo zastaveno provádění operací vyhledávání tras v FIB (Forwarding Information Base) při existenci socketu. Díky této optimalizaci se výkon zvýšil o 20%.
      • Výkon UDP v podmínkách floodu byl zvýšen o 10% vyloučením zbytečných operací se strukturou sk_tsflags při příjmu paketů.
      • Byl přidán ovladač s implementací protokolu MCTP-over-USB.
    • Byl přidán ovladač s implementací protokolu MCTP-over-USB.
  • Hardware
    • Do jádra byla přijata počáteční implementace ovladače Nova pro GPU NVIDIA, vybavené firmwary GSP, používanými od série NVIDIA GeForce RTX 2000 založené na mikroarchitektuře Turing. Ovladač je napsán v jazyce Rust. V první fázi byl přidán pouze rámec nova-core, který obsahuje přibližně 400 řádků kódu a implementuje základní úroveň abstrakcí nad programovými rozhraními firmwarů GSP. V další fázi plánují do jádra zahrnout DRM ovladač nova-drm (Direct Rendering Manager) pro interakci s GPU z prostoru uživatele, stejně jako VFIO ovladač se správcem vGPU, který umožňuje používat virtuální GPU NVIDIA v virtualizačních systémech.
    • Pokračuje práce na drm-ovladači (Direct Rendering Manager) Xe pro GPU na základě architektury Intel Xe, která se používá ve grafických kartách Intel rodiny Arc a integrované grafice od procesorů Tiger Lake. Byla přidána podpora SVM (Shared Virtual Memory), komponenty frameworku DRM, která spravuje sdílenou paměť používanou CPU a GPU.
    • Do ovladače i915 byly přidány identifikátory nových GPU.
    • V ovladači Nouveau byl přepracován GSP RPC a integrován rozhraní drm_slave_encoder.
    • V ovladači AMDGPU byla implementována podpora architektury DCN36 (Display Core Next). Byla přidána možnost definovat vlastní křivky jasu, které se používají pro korekci jasu displeje.
    • Do ovladače adreno byla přidána podpora GPU Qualcomm Adreno 623.
    • Byla přidána podpora dotykových panelů Apple Touch Bar.
    • Byla přidána podpora druhé verze rozšíření eUSB2 (eUSB2V2 — Embedded USB2 Version 2.0), které umožňuje snížit napětí napájení (až na 1.2 voltu) a zvýšit výkon USB 2.0. Rychlost přenosu dat v eUSB2V2 může dosáhnout 4.8 Gb/s, což je 10krát rychlejší než obvyklých 480 Mb/s, které jsou typické pro USB 2.0. eUSB2V2 umožní výrobcům notebooků vybavit svá zařízení webovými kamerami s vyšším rozlišením a zároveň používat pro jejich připojení sběrnici Embedded USB2.
    • Byla přidána podpora Ethernet adaptérů Intel Killer E5000 (RTL8126).
    • Byla přidána podpora displejových panelů Visionox RM692E5, Rockchip w552793dba-v10, kingdisplay-kd110n11-51ie a starry-2082109qfh040022-50e.
    • Byl přidán ovladač pro notebooky Samsung Galaxy Book.
    • Byla přidána podpora zvukových systémů Presonus Studio 1824c, Jabra Evolve 65. Byla přidána podpora DSP modulů AMD ACP 7.x, AWINC WM88166, Everest ES8388, Intel AVS PEAKVOL a GAIN. Byla zlepšena podpora zvuku na notebookech ASUS, HP a Lenovo.
    • Přidána podpora platforem ARM, SoC a zařízení: Arm Morello, AMD (Xilinx) Versal NET, Google Pixel Pro 6, NetCube Kumquat, MYIR Remi Pi, Huawei Matebook E Go, Milk-V Jupiter ST STM32MP2, Mediatek MT8370, Apple T2, Skov (i.MX8MP), EVK (i.MX95), Rockchip RK35xx, Allwinner A523, 11 desek Toradex založených na i.MX6.

Zároveň latinskoamerická Nadace svobodného softwaru vytvořila variantu zcela svobodného jádra 6.15 — Linux-libre 6.15-gnu, očištěného od prvků firmwaru a ovladačů obsahujících nesvobodné komponenty nebo bloky kódu, jejichž použití je omezeno výrobcem. Ve verzi 6.15 byla neutralizována načítání blobů v ovladačích nova, Qualcomm iris v4l2, Airoha NPU, Tehuti Networks TN40xx 10G ethernet, Realtek 8814A wifi, Apple Silicon SoC touchscreen, Renesas UFS a aw88166 audio. Bylo ukončeno čištění ovladače Spider 1Gb ethernet, který byl odstraněn ze složení jádra. Byly odstraněny odkazy na tivozované binární soubory. Byla implementována blokace načítání blobů z kódu napsaného v jazyce Rust.

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