Vydání jádra Linux 6.6

Po dvou měsících vývoje představil Linus Torvalds vydání jádra Linux 6.6. Mezi nejvýraznějšími změnami se objevují: nový plánovač úloh EEVDF; mechanismus stínové zásobníku pro ochranu proti exploitům; podpora fs-verity v OverlayFS; implementace kvót a xattr v tmpfs; příprava online fsck v XFS; posílené sledování exportu symbolů „GPL-only“; podpora síťových soketů v io_uring; randomizace paměti v kmalloc(); ReiserFS byla označená za zastaralou; do Nouveau byly přidány primitiva pro Vulkanově ovladači NVK.

Do nové verze bylo přijato 15291 oprav od 2058 vývojářů, velikost opravy je 39 MB (změny se dotkly 14844 souborů, přidáno 553359 řádků kódu, odstraněno 284012 řádků). V předchozím vydání bylo 14674 oprav od 2016 vývojářů, velikost opravy byla 78 MB. Přibližně 44 % všech změn v 6.6 je spojeno s ovladači zařízení, zhruba 17 % změn se týká aktualizace kódu specifického pro hardwarové architektury, 11 % souvisí s síťovým zásobníkem, 4 % s filesystémy a 3 % s interními subsystémy jádra.

Hlavní novinky v jádře 6.6:

  • Paměť a systémové služby
    • Byl implementován nový plánovač úloh EEVDF (Earliest Eligible Virtual Deadline First), který nahradil plánovač CFS (Completely Fair Scheduler), dodávaný od jádra 2.6.23. Nový plánovač při výběru dalšího procesu k přidělení výkonu zohledňuje procesy, které nedostaly dostatečné procesorové zdroje, nebo které získaly nezaslouženě mnoho procesorového času. V prvním případě je převedení kontroly na proces nařízeno, zatímco ve druhém případě je naopak odloženo. Starý plánovač CFS používal heuristiku a jemná nastavení k určení procesů, které vyžadovaly zvláštní pozornost, zatímco nový plánovač je sleduje explicitněji a nevyžaduje jemné ladění. Předpokládá se, že EEVDF sníží zpoždění při vykonávání úloh, s nimiž měl CFS problémy s plánováním.
    • Byly provedeny změny v zpracování interních symbolů kategorie „GPL-only“, které mají za cíl zkomplikovat použití proprietárními moduly GPL vrstev pro obcházení omezení přístupu k subsystémům jádra, které umožňují přístup pouze kódu pod licencí GPL. Ve funkci symbol_get() je pro proprietární moduly zakázán vyhledávání symbolů označených jako GPL-only, a naopak moduly GPL nebudou schopny najít symboly exportované proprietárními moduly.
    • Byly přidány další možnosti pro pracovní fronty (unbound workqueue), aby se zvýšila efektivita opětovného využití procesorové cache na velkých systémech s několika úrovněmi třetí úrovně (L3). Do jádra byla také zahrnuta utilita tools/workqueue/wq_dump.py pro kontrolu aktuální konfigurace pracovních front.
    • Do subsystému io_uring byla přidána prvotní podpora operací a příkazů specifických pro síťové sokety. Bylo přidáno sysctl io_uring_disabled pro deaktivaci io_uring na úrovni celého systému. V io_uring byl také významně zrychlen přímý vstup/výstup (Direct I/O) v asynchronním režimu. Nárůst propustnosti a snížení latence při provádění operací vstupu a výstupu po provedených změnách dosahuje 37%.
    • Pro architekturu PA-RISC byl implementován JIT-kompilátor pro BPF.
    • Do nastavení /sys/devices/system/cpu/smt/control byla přidána podpora číselných parametrů, které určují počet vláken dostupných pro každé jádro CPU (dříve byly podporovány pouze hodnoty „on“ a „off“ pro zapnutí a vypnutí podpory symetrického vícívkového zpracování). Nová funkce může být aplikována na některé procesory PowerPC, které podporují režim horkého zapojení symetrického vícívkového zpracování („hotplug SMT“), pro selektivní zapnutí SMT na konkrétních jádrech během provozu.
    • Pokračuje přenos změn z větve Rust-for-Linux, které se týkají využití 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 nevede k tomu, že by Rust byl zařazen mezi povinné závislosti pro sestavení jádra). Byla provedena aktualizace na verze Rust 1.71.1 a bindgen 0.65.1. Bylo implementováno typové rozhraní 'Zeroable'. Přidány procedurální makra 'paste!' a '#[derive(Zeroable)]'. Zajištěna kompatibilita s '#[pin_data]'. Přidány inicializační funkce '{,pin_}init_array_from_fn()' a metoda '{,pin_}chain'. Rozšířeny možnosti modulu 'types'. Do rámce jednotkového testování kunit byla přidána možnost spouštění testů z dokumentace Rust.
    • Byl přidán subsystém 'eventfs', který výrazně snižuje spotřebu paměti v systému trasování tím, že eliminuje uchovávání zbytečných struktur používaných k reprezentaci trasovacích bodů v souborovém systému. Dříve byly podobné struktury vytvářeny pro všechny trasovací body, bez ohledu na použití trasování. S pomocí eventfs mohou být tyto struktury vytvářeny dynamicky, pouze v okamžiku, kdy jsou potřeba.
    • Byly rozšířeny možnosti utilitky perf.
    • Do souboru /proc/pid/smaps byla přidána informace pro diagnostiku účinnosti mechanismu sloučení identických stránek paměti (KSM, Kernel Samepage Merging).
    • Byl odstraněn API Frontswap, který umožňoval umístit swapovou oblast do paměti, kterou nelze přímo adresovat a která neposkytuje aktuální informace o dostupnosti volného místa. Tento API byl používán pouze v zswap, a proto bylo rozhodnuto přímo využít tuto funkčnost v zswap, čímž se zbavilo zbytečných vrstev.
    • Pro architekturu RISC-V byla přidána podpora přístupu k výkonovým čítačům z uživatelského prostoru a možnost umístění jádrového dumpu po havárii do oblasti za hranicí 4GB.
    • Byla přidána počáteční podpora instrukcí ARM SME (Scalable Matrix Extension).
    • Byla implementována možnost použití ladicích nástrojů KDB, KGDB, kcov, KFENCE a KASAN na systémech s architekturou LoongArch.
    • Byla přidána podpora souborů pro testování jádra v systému kontinuální integrace GitLab, který se používá při vývoji grafických ovladačů.
  • Diskový subsystém, vstup/výstup a souborové systémy
    • Do systému souborů OverlayFS byla přidána podpora pro ukládání hashů fs-verity v rozšířeném atributu (xattr) overlay.verity, což může být použito k ověřování integrity a pravosti souborů v nižších vrstvách OverlayFS pomocí kryptografických hashů a klíčů. Takže OverlayFS nyní zahrnuje všechny změny potřebné projektu Composefs pro fungování jako rozšíření nad souborovým systémem OverlayFS a EROFS.
    • V systému souborů XFS byla připravena implementace možnosti použití utilit fsck k ověřování a oprava zjištěných problémů v online režimu, bez nutnosti odpojení souborového systému. Kromě toho byla v XFS implementována možnost použití velkých obalů (folios) v stránkovém cache a byly přidány některé související optimalizace, které výrazně zvýšily výkon pro některé typy zátěže.
    • Do systému souborů tmpfs byla přidána podpora pro uživatelské rozšířené atributy (user xattrs), přímý vstup/výstup a kvoty vázané na uživatele a skupiny. Byly stabilizovány offsety pro adresáře, což vyřešilo problémy s exportem tmpfs přes NFS.
    • Do API správy připojování byl pro zvýšení bezpečnosti přidán příznak FSCONFIG_CMD_CREATE_EXCL, který zakazuje sdílení superbloku na více připojovacích bodech (zakazuje připojení jednoho oddílu k více připojovacím bodům). V nástroji mount byla navržena možnost "--exclusive" pro zahrnutí tohoto příznaku.
    • Do subsystému VFS byla přidána podpora pro okamžitou změnu parametrů s časem přístupu a změny (atime, mtime). Dříve byly informace o čase odráženy se zpožděním, což ztěžovalo sledování aktuálnosti dat v cache v systémech, jako je NFS (kvůli zpoždění při určení změn v souboru, systém mohl omylem považovat, že data v cache jsou aktuální). Nová funkce je dostupná pro Btrfs, Ext4, tmpfs a XFS.
    • V Btrfs byl prohlášen za zastaralý vestavěný mechanismus kontroly integrity, který se aktivoval při sestavení pomocí parametru BTRFS_FS_CHECK_INTEGRITY. Tento mechanismus zůstal bez podpory, již se netestuje a vytváří dodatečné zatížení CPU a paměti. Kromě toho byla v Btrfs optimalizována výkonnost nového kódu pro kontrolu souborového systému (scrub).
    • V souborovém systému Ext4 byly přidány periodické kontroly aktualizace superbloku a zrychleny operace alokace paměti při přidávání na konec souboru.
    • Do subsystému FUSE byla přidána podpora atributu btime ("čas vytvoření"), který určuje čas vytvoření inode.
    • Změna přístupových práv pro symbolické odkazy je zakázána.
    • Byl přidán systémový volání fchmodat2(), které se od systémového volání fchmodat() liší dalším argumentem pro určení flagů. Z flagů jsou zatím podporovány pouze AT_SYMLINK_NOFOLLOW a AT_EMPTY_PATH, které umožňují bez obezliček implementovat v libc-funkci fchmodat() zákaz dereferencování symbolických odkazů a možnost použití souborového deskriptoru při zadání prázdné cesty.
    • V souborovém systému EROFS (rozšiřitelný pouze pro čtení) určeném pro použití na oddílech dostupných v režimu pouze pro čtení byla přidána podpora kompresního algoritmu Deflate. Pro urychlení vyhledávání rozšířených atributů byla použita pravděpodobnostní struktura bloom filter.
    • Byla přidána nastavení CONFIG_BUFFER_HEAD, která umožňuje sestavit jádro bez použití struktury buffer_head. Při sestavení bez buffer_head je možné použít bloková zařízení a některé FS, například xfs, btrfs, cramfs, erofs a squashfs.
    • Do ovladače blokových zařízení ublk, který umožňuje přesunout specifickou logiku na stranu procesu ve specializovaném prostoru uživatele, 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ů).
    • Implementace souborového systému ReiserFS byla převedena z kategorie podporovaných do kategorie zastaralých (Obsolete). Ukončení podpory ReiserFS je plánováno na rok 2025. Jako důvod převedení ReiserFS do kategorie zastaralých je zmíněna stagnace v údržbě tohoto FS, nevyřešený problém roku 2038, absence možností pro zajištění odolnosti a snaha snížit pracovní zátěž na údržbu společných změn u souborových systémů souvisejících s podporou nového API pro montování, iomap a folios.
    • Na NFS serveru byla implementována delegační mechanismus operací zápisu pro NFSv4, který zvyšuje efektivitu cache zápisu souborů a redukuje provoz. Byla zahrnuta podpora operace READ_PLUS, definované v NFS 4.2.
    • Do souborového systému Ceph byla přidána podpora fscrypt.
  • Virtualizace a bezpečnost
    • Byla přidána implementace mechanismu Shadow Stack, který umožňuje blokovat mnoho exploitů pomocí hardwarových schopností procesorů Intel k ochraně před přepsáním návratové adresy z funkce v případě přetečení zásobníku. Podstatou ochrany je to, že po předání řízení funkci je návratová adresa uložena procesorem nejen v běžném zásobníku, ale také v samostatném "stínovém" zásobníku, který nelze měnit přímo. Před návratem z funkce je návratová adresa vytažena ze stínového zásobníku a porovnávána s návratovou adresou z hlavního zásobníku. Neshoda adres vede k vyvolání výjimky, která blokuje situace, kdy se exploitovi podařilo přepsat adresu v hlavním zásobníku. Hardwarový stínový zásobník je podporován pouze ve 64bitových sestaveních, zatímco v 32bitových sestaveních se používá jeho softwarová emulace.
    • Byla přidána podpora sestavení kompilátorem Clang se zapnutým režimem ochrany CFI (Control Flow Integrity), který blokuje porušení normálního pořadí vykonávání (control flow) v důsledku používání exploitů, které mění uložené v paměti ukazatele na funkce.
    • Pro architekturu RISC-V byla zahrnuta randomizace umístění jádra v paměti při spuštění.
    • Do systémového volání seccomp() byla přidána vlajka SECCOMP_USER_NOTIF_FD_SYNC_WAKE_UP, která umožňuje zpracovávat události ze sledovaných procesů synchronně pro efektivnější činnost plánovače úloh.
    • Ve funkci kmalloc() byla zajištěna randomizace slab-cache, což ztěžuje využívání zranitelností v jádře.
    • Z možností souvisejících s povolením systému nucené kontroly přístupu SELinux byla odstraněna zmínka o Agentuře národní bezpečnosti USA. Jelikož projekt již 20 let vyvíjí pod křídly komunity a je spravován nezávislými udržovateli, bylo rozhodnuto přejít na používání názvu „SELinux“ namísto „NSA SELinux“ v komentářích a dokumentaci v Kconfig (například vysvětlení ke konstrukčnímu parametru SECURITY_SELINUX bylo změněno z „NSA SELinux Support“ na „SELinux Support“).
    • Do systémového volání userfaultfd() byla přidána operace UFFDIO_POISON, která umožňuje označit stránky paměti jako „otrávené“ (poisoned), což může být použito k přesunu poškozených stránek paměti při migraci virtuálních strojů z jednoho systému na druhý.
    • Do subsystému VFIO byl přidán nový symbolický rozhraní (/dev/vfio/devices/vfioX) pro správu zařízení VFIO, umožňující uživateli přímo otevřít soubor s zařízením, aniž by bylo nutné se obracet na zastaralé skupinové rozhraní /dev/vfio/$groupID.
    • V serveru V NFS byla ukončena podpora zastaralých typů šifrování Kerberos, které používají algoritmy DES a 3DES.
    • Při spuštění v prostředí hypervizoru Hyper-V byla přidána podpora pro hostitelské systémy zabezpečené technologií AMD SEV-SNP (Secure Nested Paging) a Intel TDX (Trusted Domain Extensions).
    • Při sestavování jádra v režimu „W=1“ jsou ve výchozím kompilátoru zahrnuta upozornění „-Wformat-overflow“, „-Wformat-truncation“, „-Wstringop-overflow“ a „-Wrestrict“. Pro všechny sestavy je zahrnuto upozornění „-Wenum-conversion“.
  • Síťová subsystém
    • Implementace rodiny adres AF_XDP (eXpress Data Path) byla rozšířena o možnost práce s pakety uloženými ve více bufferch (například v jednom bufferu může být hlavička paketu a ve druhém data, nebo v řetězci několika bufferů mohou být umístěny velké jumbo-rámce Ethernet). Programy používající sokety AF_XDP nyní mohou přijímat a přenášet pakety přímo z několika bufferů.
    • Do subsystému BPF byla přidána podpora defragmentace paketů IPv4 a IPv6, stejně jako možnost filtrace fragmentovaných paketů.
    • Do BPF byl přidán nový zpracovatel update_socket_protocol, umožňující BPF programům měnit požadovaný protokol pro nové sokety. Například BPF program může transparentně nahradit protokol TCP protokolem MPTCP (multipath TCP) pro optimalizaci provozu aplikace. V BPF byla také přidána podpora pro řízení směrování paketů přes různé toky v MPTCP.
    • Byl odstraněn znak experimentálního vývoje z modulu ksmbd, který nabízí funkční server souborů na úrovni jádra založený na protokolu SMB3. Byla přidána podpora pro sloučení čtecích operací (žádosti „read compound“).
  • Hardware
    • Do subsystému DRM (Direct Rendering Manager) byly provedeny změny potřebné pro efektivní fungování otevřeného ovladače NVK s implementací grafického API Vulkan pro grafické karty NVIDIA. Původní DRM ovladač Nouveau byl navržen pro implementaci OpenGL, a proto mu chybí primitiva potřebná pro efektivní práci ovladačů Vulkan, například podpora synchronizovaných objektů a správa virtuálního adresního prostoru.
    • Řidič AMDGPU implementuje podporu SDMA 6.1.0, HDP 6.1, SMUIO 14.0, PSP 14.0, IH 6.1 a GFX 9.4.3. Kód pro načítání firmwaru PSP (Platform Security Processor) byl přepracován. Rozšířena podpora technologie adaptivní synchronizace FreeSync (přidána podpora Freesync Panel Replay V2).
    • V ovladači i915 pokračuje implementace podpory čipů Intel Meteor Lake. Byla vylepšena podpora technologie ochrany proti kopírování HDCP (High-bandwidth Digital Content Protection). Kód pro interakci s displejem byl přepracován.
    • Možnosti pro zakázání načítání mikro-kódu během sestavení byly odstraněny z Kconfig — MICROCODE_INTEL a MICROCODE_AMD. Jádro je nyní vždy sestavováno s kódem pro načítání mikro-kódu pro systémy x86, ale skutečné načítání mikro-kódu může být zakázáno zadáním jádrového parametru 'dis_ucode_ldr'.
    • Do zvukového subsystému byla přidána možnost ovládání zvukových zařízení připojených prostřednictvím subsystému IIO (Industrial I/O).
    • Byla přidána podpora zvukových rozhraní Intel LunarLake, Intel ArrowLake a AMD ACP5x, kodeků Cirrus Logic CS42L43, Realtek RT1017 a TI TAS2781, jakož i zesilovačů Cirrus Logic CS35L56 a winic aw88261. Přidána podpora ASoC AMD Van Gogh.
    • Byl přidán ovladač USB MIDI 2.0 Gadget, emulující rozhraní USB MIDI 2.0, svázané s zařízením ALSA UMP rawmidi.
    • Byla přidána podpora Ethernetových ovladačů Broadcom ASP 2.0 a Marvell 88Q2XXX.
    • Byla přidána podpora panelů Visionox R66451, TDO TL050HDV35, KD070FHFID015, Inanbo T28CP45TN89 a EDT ET028013DMA, řídicích obvodů displeje Loongson a řídicích obvodů dotykových obrazovek Azoteq IQS7222D/IQS7210A/7211A.
    • Byla přidána podpora ARM SoC Qualcomm SM4450 (Snapdragon 4 Gen 2), TI AM62P5, Intel Agilex5, Qualcomm ipq5018, AN400 (Amlogic T7).
    • Byla přidána podpora ARM platforem Samsung Galaxy Tab 3 8.0, FriendlyElec NanoPC T6, Amlogic A311D2, Khadas Vim4, Xiaomi SM7125, Facebook Yosemite 4, Orange Pi Zero 3 a Radxa ROCK 4SE.

Mezitím latinskoamerická Nadace pro svobodný software vytvořila variantu zcela svobodného jádra 6.6 — Linux-libre 6.6-gnu, zbaveného prvků firmwaru a ovladačů obsahujících nesvobodné komponenty nebo kusy kódu, jejichž použití je omezeno výrobcem. V vydání 6.6 byl aktualizován kód pro čištění blobů v různých ovladačích a subsystémech, například v ovladačích TI gigabit RU ethernet, MediaTek 792x wifi, Cirrus Logic cs42l43 mfd, cs35l56 HD-audio a aw88261 SoC. Byla provedena úprava názvů blobů v dts souborech pro architekturu Aarch64. Byly odstraněny bloby v nových ovladačích ivpu, v bluetooth ovladačích, v ovladači pro dotykové obrazovky a v kódovači/dekodovači Qualcomm Venus V4L2.

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