Vydání jádra Linux 5.16

Po dvou měsících vývoje představil Linus Torvalds vydání linuxového jádra 5.16. Mezi nejpozoruhodnější změny patří systémové volání futex_waitv pro zlepšení výkonu her pro Windows ve Wine, sledování chyb ve FS pomocí fanotify, koncepce folií v systému správy paměti, podpora instrukcí procesoru AMX, možnost rezervovat paměť pro síťové zásuvky, podpora klasifikace paketů ve fázi „egresu“ netfilteru, použití subsystému DAMON k proaktivnímu vyklizení nevyužitých paměťových oblastí, zlepšení zvládání přetížení při velkém objemu operací zápisu, podpora vícediskových pevných disků.

Nová verze obsahuje 15415 2105 oprav od 45 12023 vývojářů, velikost opravy je 685198 MB (změny se dotkly 263867 44 souborů, bylo přidáno 5.16 16 řádků kódu, smazáno 16 4 řádků). Přibližně 4 % všech změn zavedených v XNUMX souvisí s ovladači zařízení, přibližně XNUMX % změn souvisí s aktualizací kódu specifického pro hardwarové architektury, XNUMX % se týká síťového zásobníku, XNUMX % se týká souborových systémů a XNUMX % souvisí s vnitřními subsystémy jádra.

Klíčové inovace v jádře 5.16:

  • Diskový subsystém, I/O a souborové systémy
    • Do mechanismu fanotify byly přidány nástroje pro sledování stavu systému souborů a sledování výskytu chyb. Informace o chybách jsou přenášeny pomocí nového typu událostí – FAN_FS_ERROR, které lze zachytit v monitorovacích systémech běžících v uživatelském prostoru a okamžitě informovat správce nebo spustit procesy obnovy. Když se řada chyb vyskytne kaskádovitě, fanotify zajistí, aby byla doručena první chybová zpráva spolu s počítadlem obecných problémů, aby se zjednodušila následná analýza příčiny selhání. Podpora sledování chyb je v současnosti implementována pouze pro souborový systém Ext4.
    • Vylepšené zpracování zahlcení zápisem, ke kterému dochází, když objem operací zápisu překročí propustnost disku a systém je nucen blokovat požadavky procesu na zápis, dokud nejsou dokončeny požadavky, které již byly odeslány. V nové verzi byl zcela přepracován mechanismus jádra sloužící k získávání informací o výskytu přetížení a blokování úloh, protože ve staré implementaci byly problémy se spojením zpracování přetížení zápisem s přemístěním stránek paměti do swapu. v případě nedostatku paměti v systému.
    • Btrfs implementuje podporu technologie zónování zařízení (Zoned Namespace), která se používá v pevných discích nebo NVMe SSD k rozdělení úložného prostoru do zón, které tvoří skupiny bloků nebo sektorů, do kterých je povoleno pouze sekvenční přidávání dat, čímž se aktualizuje celá skupina bloky. Kromě toho byly provedeny drobné optimalizace protokolování inodů, což zvýšilo propustnost v testu dbench o 3 % a snížilo latenci o 11 %. Byl přepracován mechanismus protokolování adresářů, ve kterém byl pro zvýšení efektivity snížen počet operací vyhledávání a blokování ve stromu. Zrychlilo se vkládání prvků do struktury btree v dávkovém režimu (doba hromadného vkládání prvků se zkrátila o 4 %, mazání o 12 %). Přidána omezená podpora pro použití komprese při psaní dílčích stránek a také možnost defragmentovat podstránky. Byly provedeny přípravy pro umožnění podpory druhé verze protokolu pro příkaz „odeslat“.
    • Systém souborů XFS snižuje spotřebu paměti tím, že používá samostatné slab cache pro často používané položky a snižuje některé datové struktury.
    • V souborovém systému Ext4 jsou zaznamenány pouze opravy chyb a přesnější výpočet líných inicializačních parametrů tabulky Inode.
    • Na úrovni blokového zařízení byly implementovány optimalizace, které výrazně zvýšily efektivitu propojování operací s jádry CPU.
    • Přidána počáteční podpora pro pevné disky s více nezávislými disky (multi-aktuátor), což umožňuje současný přístup k několika sektorům v různých oblastech magnetického talíře.
    • Přidán nový příkaz ioctl CDROM_TIMED_MEDIA_CHANGE pro detekci událostí změny média v jednotce optických disků.
    • Systém souborů EROFS (Enhanced Read-Only File System) přidal možnost pracovat na více úložných zařízeních. Různá zařízení mohou být mapována do jednoho 32bitového bloku adresního prostoru. Byla také přidána podpora pro kompresi pomocí algoritmu LZMA.
    • Do souborového systému F2FS byly přidány možnosti připojení pro řízení fragmentace souborů při umístění do úložiště (například pro ladění optimalizací pro práci s fragmentovaným úložištěm).
    • CEPH ve výchozím nastavení umožňuje asynchronní vytváření a mazání adresářů (pro návrat ke starému chování použijte při připojování příznak '-o wsync'). Přidána údržba metrik, které sledují operace kopírování externích objektů.
    • Do CIFS byl přidán parametr připojení tcpnodelay, který nastavuje režim tcp_sock_set_nodelay pro síťový soket, který zakazuje čekání na frontu na vyplnění zásobníku TCP. Přidána podpora pro vnořené odkazy DFS (Distributed File System) při opětovném připojení.
    • Přidána podpora pro dokončování požadavků na blokové zařízení v dávkovém režimu. Testování změny ukázalo zvýšení intenzity operací náhodného čtení z disků Optane z 6.1 na 6.6 milionů IOPS na jednom jádru CPU.
  • Paměťové a systémové služby
    • Přidáno nové systémové volání futex_waitv, které umožňuje sledovat stav několika futexů najednou pomocí jediného systémového volání. Tato funkce připomíná funkci WaitForMultipleObjects dostupnou ve Windows, jejíž emulace přes futex_waitv může být užitečná pro zlepšení výkonu Windows her běžících pod Wine nebo Protonem. Kromě toho lze simultánní čekání na futexy využít také k optimalizaci výkonu nativních sestavení her pro Linux.
    • Byl implementován koncept stránkových folií, jejichž použití v některých subsystémech jádra urychlí správu paměti při typickém zatížení. V současné době již byly hlavní subsystém správy paměti v jádře a implementace mezipaměti stránek převedeny do folií a v budoucnu se plánuje převod souborových systémů. V budoucnu se také plánuje přidání podpory pro vícestránková folia do jádra.

      Tomes připomínají složené stránky, ale mají vylepšenou sémantiku a přehlednější organizaci práce. Pro správu systémové paměti je dostupná paměť RAM rozdělena do paměťových stránek, jejichž velikost se liší podle architektury, ale na systémech x86 se měří v kilobajtech (obvykle 4096 bajtů). Moderní systémy přicházejí s desítkami gigabajtů RAM, což dělá správu paměti složitější kvůli nutnosti zpracovávat obrovské množství paměťových stránek. Aby se snížil počet stránek, jádro dříve implementovalo koncept složených stránek se strukturami zahrnujícími více než jednu fyzickou stránku paměti. Ale API pro manipulaci se sloučenými paměťovými stránkami ponechalo mnoho požadavků a vedlo k další režii.

    • Do plánovače úloh byla přidána obslužná rutina, která bere v úvahu shlukování mezipaměti na CPU. V některých procesorech, jako je Kunpeng 920 (ARM) a Intel Jacobsville (x86), může určitý počet jader CPU, obvykle 4, kombinovat mezipaměť L3 nebo L2. Zohlednění takových topologií může výrazně zlepšit efektivitu distribuce úloh mezi jádra CPU v plánovači úloh, protože přesun úloh v rámci stejného clusteru CPU umožňuje zvýšit propustnost přístupu k paměti a snížit spory o mezipaměť.
    • Přidána podpora instrukcí AMX (Advanced Matrix Extensions) implementovaných v připravovaných serverových procesorech Intel Xeon Scalable s kódovým označením Sapphire Rapids. AMX nabízí nové konfigurovatelné TMM "TILE" registry a instrukce pro manipulaci s daty v těchto registrech, jako je TMUL (Tile matrix MULtiply) pro násobení matic.
    • Několik nových funkcí bylo implementováno na základě subsystému DAMON (Data Access MONitor) přidaného v poslední verzi, který umožňuje monitorovat přístup k datům v RAM ve vztahu k vybranému procesu běžícímu v uživatelském prostoru. Subsystém například umožňuje analyzovat, do kterých paměťových oblastí proces přistupoval během celé své činnosti a které paměťové oblasti zůstaly nevyzvednuté.
      • DAMON_RECLAIM k identifikaci a vyklizení paměťových oblastí, ke kterým nebyl přístup. Mechanismus lze použít k proaktivnímu vyřazení stránek paměti, když se volná paměť blíží vyčerpání.
      • DAMOS (Operační schémata založená na monitorování přístupu k datům) pro použití specifikovaných operací madvise(), jako je uvolnění další volné paměti, ke zpracování oblastí paměti, pro které je pevně stanovena určitá frekvence přístupu do paměti. Parametry DAMOS se konfigurují pomocí debugfs.
      • Schopnost monitorovat fyzický adresní prostor paměti (dříve bylo možné sledovat pouze virtuální adresy).
    • Implementace kompresního algoritmu zstd byla aktualizována na verzi 1.4.10, což výrazně zlepšilo výkon různých jaderných subsystémů, které používají kompresi (například rozbalení obrazu jádra bylo zrychleno o 35 %, výkon rozbalování komprimovaných dat v Btrfs a SquashFS se zvýšil o 15% a v ZRAM - o 30%). Jádro zpočátku používalo samostatnou implementaci zstd, založenou na verzi 1.3.1, která byla vydána před více než třemi lety a neobsahovala mnoho důležitých optimalizací. Kromě přechodu na aktuální verzi přidaný patch také zjednodušuje synchronizaci s upstream větví zstd, což vám umožňuje generovat kód pro zahrnutí do jádra přímo z hlavního úložiště zstd. V budoucnu se plánuje aktualizace kódu zstd v jádře s vydáním nových verzí knihovny zstd.
    • Velká část vylepšení byla provedena v subsystému eBPF. Přidána možnost volat funkce modulu jádra z programů BPF. Funkce bpf_trace_vprintk() byla implementována, na rozdíl od bpf_trace_printk(), která umožňuje vydávat více než tři argumenty najednou. Byl přidán nový Bloomův filtr struktury datového úložiště (BPF map), který umožňuje použít stejnojmennou pravděpodobnostní datovou strukturu k určení přítomnosti prvku v sadě. Byl přidán nový atribut BTF_KIND_TAG, který lze v programech BPF použít k navázání tagů na parametry funkcí, například pro zjednodušení detekce chyb v uživatelských programech. V libbpf je možné vytvářet vlastní sekce .rodata.*/.data.*, byla implementována podpora událostí uprobe a kprobe trace a přidáno API pro kopírování všech typů BTF z jednoho objektu do druhého. Podpora AF_XDP byla přesunuta z libbpf do samostatné knihovny libxdp. Pro architekturu MIPS byl implementován JIT kompilátor pro virtuální stroj BPF.
    • Pro architekturu ARM64 byla implementována podpora rozšíření ARMv8.6 pro časovač, včetně těch, které umožňují samosynchronizující reprezentaci systémových registrů bez použití instrukcí ISB.
    • Pro architekturu PA-RISC byla implementována možnost využívat mechanismus KFENCE k detekci chyb při práci s pamětí a přidána podpora pro detektor závodních podmínek KCSAN.
    • Přístupová práva k tracefům je možné konfigurovat na úrovni jednotlivých uživatelů a skupin, nově můžete například povolit přístup k trasovacím nástrojům pouze členům určité skupiny.
  • Virtualizace a bezpečnost
    • Subsystémy io_uring a device-mapper implementují podporu pro generování událostí auditu. io_uring poskytuje možnost řídit přístup prostřednictvím modulů LSM. Přidána možnost auditovat systémové volání openat2().
    • Kód jádra je zcela prostý výrazů souvislých velkých a malých písmen v přepínači (žádný návrat nebo přerušení po každém bloku velkých písmen). Při sestavování jádra bude nyní možné použít režim „-Wimplicit-fallthrough“.
    • Zahrnuty změny pro zpřísnění kontrol při provádění funkce memcpy().
    • Asynchronní I/O rozhraní io_uring implementuje schopnost aplikovat bezpečnostní politiky definované moduly SELinux a Smack na I/O operace.
    • Subsystém IMA (Integrity Measurement Architecture), který umožňuje externí službě ověřit stav jaderných subsystémů pro zajištění jejich autenticity, implementuje možnost aplikovat pravidla na základě identifikátoru skupiny (GID), do které soubor patří nebo do které uživatel přístup k souboru patří.
    • Ve výchozím nastavení jsou zakázány některé pokročilé mechanismy pro ochranu vláken seccomp() před útoky Spectre, které byly považovány za zbytečné a významně nezlepšily zabezpečení, ale negativně ovlivnily výkon. Použití ochrany Retpoline bylo revidováno.
    • Byla odstraněna implementace mechanismu cryptoloop, který byl v roce 2004 nahrazen dm-crypt a v případě potřeby podporuje stejné algoritmy.
    • Neprivilegovaný přístup do subsystému eBPF je standardně zakázán. Změna byla provedena, aby se zabránilo použití programů BPF k obejití ochrany proti útokům z postranního kanálu. V případě potřeby může správce obnovit možnost používat eBPF pro neprivilegované uživatele.
    • Hypervizor ACRN, navržený pro úkoly v reálném čase a použití v kritických systémech, přidal podporu pro vytváření/mazání virtuálních zařízení a předávání MMIO zařízení.
    • Do kryptomotoru byla přidána podpora definic KPP (Key-agreement Protocol Primitives), což zjednodušuje logiku vývoje ovladačů pro kryptosystémy.
    • Hyper-V hypervisor nyní podporuje režim izolace virtuálního stroje, který zahrnuje šifrování obsahu paměti.
    • Hypervizor KVM přidal podporu pro architekturu RISC-V. Byla implementována možnost migrovat virtuální stroje běžící pomocí rozšíření AMD SEV a SEV-ES v hostitelském prostředí. Přidáno API pro živou migraci hostovaných systémů šifrovaných pomocí AMD SEV (Secure Encrypted Virtualization).
    • Pro architekturu PowerPC je ve výchozím nastavení povolen režim STRICT_KERNEL_RWX, který blokuje použití stránek paměti, které jsou současně dostupné pro zápis a spouštění.
    • Na 32bitových x86 systémech byla ukončena podpora pro paměťový hotplug, který byl více než rok nefunkční.
    • Knihovna liblockdep byla z jádra odstraněna a nyní bude udržována odděleně od jádra.
  • Síťový subsystém
    • Pro sockety byla implementována nová volba SO_RESERVE_MEM, pomocí které si můžete vyhradit určité množství paměti pro socket, které zůstane pro socket vždy k dispozici a nebude odebráno. Použití této možnosti vám umožní dosáhnout zvýšeného výkonu snížením alokace paměti a operací obnovení v síťovém zásobníku, zvláště když v systému nastanou podmínky nedostatku paměti.
    • Přidána podpora pro protokol Automatic Multicast Tunneling (RFC 7450), který umožňuje doručovat multicastový provoz ze sítí podporujících Multicast k příjemcům v sítích bez Multicast. Protokol funguje prostřednictvím zapouzdření v paketech UDP.
    • Vylepšené zapouzdření dat IOAM (In-situ Operations, Administration, and Maintenance) v přenosových paketech.
    • Do rozhraní ethtool netlink API byla přidána možnost ovládat režimy spotřeby energie transceiveru.
    • Subsystém netfilter implementuje schopnost klasifikovat pakety na výstupní úrovni, tzn. ve fázi, kdy ovladač obdrží paket ze síťového zásobníku jádra. V nftables se podpora pro odpovídající filtry objevila ve verzi 1.0.1. Netfilter přidal možnost porovnávat a měnit interní hlavičky a data pro UDP a TCP (vnitřní hlavička / užitečné zatížení) po transportní hlavičce.
    • Přidány nové parametry sysctl arp_evict_nocarrier a ndisc_evict_nocarrier, pokud jsou nastaveny, mezipaměť ARP a tabulka ndisc (neighbor discovery) budou vymazány v případě selhání připojení (NOCARRIER).
    • Do mechanismu správy síťové fronty fq_codel (řízené zpoždění) byly přidány režimy nízké latence, nízké ztráty a škálovatelné propustnosti (L4S).
  • Оборудование
    • Ovladač amdgpu poskytuje počáteční podporu pro specifikaci DP 2.0 (DisplayPort 2.0) a tunelování DisplayPort přes USB4. Pro Cyan Skillfish APU (vybavené GPU Navi 1x) byla přidána podpora pro ovladače displeje. Podpora pro Yellow Carp APU (mobilní procesory Ryzen 6000 „Rembrandt“) byla rozšířena.
    • Ovladač i915 stabilizuje podporu pro čipy Intel Alderlake S a implementuje podporu technologie Intel PXP (Protected Xe Path), která umožňuje organizovat hardwarově chráněnou grafickou relaci na systémech s čipy Intel Xe.
    • V ovladači nouveau se pracovalo na opravě chyb a vylepšení stylu kódu.
    • Přidána podpora pro procesory Vortex kompatibilní s x86 (Vortex86MX). Linux na podobných procesorech fungoval již dříve, ale k deaktivaci ochrany proti útokům Spectre/Meltdown, které se na uvedené čipy nevztahují, byla vyžadována explicitní identifikace specifikovaných CPU.
    • Přidána počáteční podpora pro platformy x86 pro Surface Pro 8 a Surface Laptop Studio.
    • Přidán ovladač pro podporu zvukových čipů používaných v AMD Yellow Carp, Van Gogh APU, také přidána podpora pro zvukové systémy a kodeky Cirrus CS35L41, Maxim MAX98520/MAX98360A, Mediatek MT8195, Nuvoton NAU8821, NVIDIA Tegra210, NXP i.comlmReach, Quantek ALC8I-VS, RT5682S, RT5682, Rockchip RV9120 a RK1126.
    • Přidán ovladač ishtp_eclite pro přístup k integrovaným řadičům Intel PSE (Programmable Service Engine) pomocí ISHTP (Integratd Sensor Hub Transport Protocol), jako jsou informace o baterii, teplotě a UCSI (USB Type-C Connector System Software).
    • Přidán ovladač pro herní ovladače Nintendo Switch, který podporuje Switch Pro a Joy-Cons. Přidána podpora pro tablety Wacom Intuos BT (CTL-4100WL/CTL-6100WL) a Apple 2021 Magic Keyboard. Vylepšená podpora ovladačů Sony PlayStation DualSense. Přidána podpora bočních tlačítek myši Xiaomi Mi.
    • Přidán ovladač RT89 s podporou bezdrátových čipů Realtek 802.11ax, stejně jako ovladače pro ethernetové adaptéry Asix AX88796C-SPI a přepínače Realtek RTL8365MB-VC.
    • Pro čipy Apple M1 byly přidány ovladače pro PCI a PASemi i2c.
    • Přidána podpora pro ARM SoС, zařízení a desky Raspberry Pi Compute Module 4, Fairphone 4, Snapdragon 690, LG G Watch R, Sony Xperia 10 III, Samsung Galaxy S4 Mini Value Edition, Xiaomi MSM8996 (Mi 5, Mi Note 2, Mi 5s , Mi Mix, Mi 5s Plus a Xiaomi Mi 5), Sony Yoshino (Sony Xperia XZ1 a Sony Xperia XZ Premium), F(x)tec Pro1 QX1000, Microchip LAN966, CalAmp LMU5000, Exegin Q5xR5, sama7g5, Samsung ExynosAutov9, Rockchip RK3566 , RK3399 ROCK Pi 4A+, RK3399 ROCK Pi 4B+, Firefly ROC-RK3328-PC, Firefly ROC-RK3399-PC-PLUS, ASUS Chromebook Tablet CT100, Pine64 Quartz64-A, Netgear, 110X7040 Globální, RenG32 jako R2A8M*, Xilinx Kria, Radxa Zero, JetHub D779/H1, Netronix E1K70.

Zdroj: opennet.ru

Přidat komentář