Vydání jádra Linux 5.12

Po dvou měsících vývoje představil Linus Torvalds vydání linuxového jádra 5.12. Mezi nejpozoruhodnější změny patří podpora pro zónovaná bloková zařízení v Btrfs, možnost mapovat uživatelská ID pro souborový systém, čištění starších architektur ARM, režim „netrpělivého“ zápisu v NFS, mechanismus LOOKUP_CACHED pro určování cest k souborům z mezipaměti , podpora atomických instrukcí v BPF, ladicí systém KFENCE pro identifikaci chyb při práci s pamětí, režim dotazování NAPI běžící v samostatném vláknu jádra v síťovém zásobníku, hypervizor ACRN, možnost měnit preemptový model za chodu v úloze plánovač a podpora optimalizací LTO při sestavování v Clang.

Nová verze obsahuje 14170 (v předchozí verzi 15480) oprav od vývojářů z roku 1946 (1991), velikost opravy je 38 MB (změny ovlivnily 12102 (12090) souborů, bylo přidáno 538599 (868025) řádků kódu, 333377 (261456) řádky byly smazány). Přibližně 43 % všech změn zavedených v 5.12 souvisí s ovladači zařízení, přibližně 17 % změn souvisí s aktualizací kódu specifického pro hardwarové architektury, 12 % se týká síťového zásobníku, 5 % se týká souborových systémů a 4 % souvisí s vnitřními subsystémy jádra.

Hlavní inovace:

  • Diskový subsystém, I/O a souborové systémy
    • Byla implementována schopnost mapovat ID uživatelů pro připojené systémy souborů (můžete mapovat soubory jednoho uživatele na připojeném cizím oddílu s jiným uživatelem na aktuálním systému). Mapování je podporováno pro systémy souborů FAT, ext4 a XFS. Navrhovaná funkce usnadňuje sdílení souborů mezi různými uživateli a na různých počítačích, včetně mapování bude použito v mechanismu přenosných domovských adresářů s domovským systémem systemd, což uživatelům umožní přesunout své domovské adresáře na externí média a používat je na různých počítačích, mapování ID uživatelů, se kterými se neshoduje. Další užitečnou aplikací je organizování poskytování sdíleného přístupu k souborům z externího hostitele, aniž by došlo ke skutečné změně údajů o vlastníkech souborů v systému souborů.
    • Do jádra byly přijaty opravy LOOKUP_CACHED, které umožňují operacím určit cestu k souboru z uživatelského prostoru bez blokování, pouze na základě dat dostupných v mezipaměti. Režim LOOKUP_CACHED se aktivuje ve volání openat2() předáním příznaku RESOLVE_CACHED, ve kterém jsou data obsluhována pouze z mezipaměti, a pokud určení cesty vyžaduje přístup k jednotce, vrátí se chyba EAGAIN.
    • Souborový systém Btrfs přidal počáteční podporu pro zónovaná bloková zařízení (zařízení na pevných magnetických discích nebo NVMe SSD, jejichž úložný prostor je rozdělen do zón, které tvoří skupiny bloků nebo sektorů, do kterých je povoleno pouze sekvenční přidávání dat, aktualizace celé skupiny bloků). V režimu pouze pro čtení je implementována podpora bloků s metadaty a daty menšími než stránka (podstránka).
    • V souborovém systému F2FS byla přidána možnost výběru algoritmu a úrovně komprese. Přidána podpora vysoké úrovně komprese pro algoritmus LZ4. Implementována možnost montáže checkpoint_merge.
    • Pro čtení metadat ze souborů chráněných fs-verity byl implementován nový příkaz ioctl FS_IOC_READ_VERITY_METADATA.
    • Klient NFS implementuje „eager“ režim zápisu (writes=eager), když je povolen, operace zápisu do souboru jsou okamžitě přeneseny na server, čímž se obchází mezipaměť stránek. Tento režim umožňuje snížit spotřebu paměti, poskytuje okamžitý příjem informací o konci volného místa v souborovém systému a v některých situacích umožňuje dosáhnout zvýšeného výkonu.
    • Do CIFS (SMB) byly přidány nové možnosti připojení: acregmax pro řízení ukládání souborů do mezipaměti a acdirmax pro řízení ukládání metadat adresářů do mezipaměti.
    • V XFS byl povolen režim kontroly kvót s více vlákny, spouštění fsync bylo zrychleno a kód growfs byl připraven k implementaci funkce zmenšení velikosti souborového systému.
  • Paměťové a systémové služby
    • Byl přidán subsystém DTMP (Dynamic Thermal Power Management), který umožňuje dynamicky regulovat spotřebu energie různých zařízení na základě nastavených obecných teplotních limitů.
    • Byla implementována možnost sestavit jádro pomocí kompilátoru Clang se zahrnutím optimalizací ve fázi propojení (LTO, Link Time Optimization). Optimalizace LTO se liší tím, že zohledňují stav všech souborů zapojených do procesu sestavení, zatímco tradiční režimy optimalizace optimalizují každý soubor samostatně a neberou v úvahu podmínky pro volání funkcí definovaných v jiných souborech. Například u LTO je možné inline nasazení pro funkce z jiných souborů, nepoužitý kód není zahrnut do spustitelného souboru, kontrola typu a obecná optimalizace se provádí na úrovni projektu jako celku. Podpora LTO je v současnosti omezena na architektury x86 a ARM64.
    • Je možné vybrat režimy preempce (PREEMPT) v plánovači úloh ve fázi bootování (preempt=žádný/dobrovolný/plný) nebo při práci s debugfs (/debug/sched_debug), pokud bylo při sestavování jádra zadáno nastavení PREEMPT_DYNAMIC. Dříve bylo možné režim vysunutí nastavit pouze na úrovni parametrů sestavy. Tato změna umožňuje distribucím dodávat jádra se zapnutým režimem PREEMPT, který poskytuje minimální latenci pro stolní počítače za cenu malé penalizace za propustnost, a v případě potřeby se vrátit k PREEMPT_VOLUNTARY (střední režim pro stolní počítače) nebo PREEMPT_NONE (poskytuje maximální propustnost pro servery) .
    • Do subsystému BPF byla přidána podpora pro atomové operace BPF_ADD, BPF_AND, BPF_OR, BPF_XOR, BPF_XCHG a BPF_CMPXCHG.
    • Programy BPF mají možnost přistupovat k datům na zásobníku pomocí ukazatelů s proměnlivým posunem. Pokud jste například dříve mohli pro přístup k poli v zásobníku použít pouze konstantní index prvku, nyní můžete použít měnící se index. Kontrolu přístupu pouze v rámci stávajících hranic provádí ověřovatel BPF. Tato funkce je k dispozici pouze privilegovaným programům kvůli obavám ze zneužití zranitelností při spouštění spekulativního kódu.
    • Přidána možnost připojit programy BPF k holým sledovacím bodům, které nejsou spojeny s událostmi trasování viditelnými v uživatelském prostoru (u takových sledovacích bodů není zaručeno zachování ABI).
    • Byla implementována podpora sběrnice CXL 2.0 (Compute Express Link), která se používá k organizaci vysokorychlostní interakce mezi CPU a paměťovými zařízeními (umožňuje používat externí paměťová zařízení jako součást RAM nebo trvalé paměti, jako by tato paměť byly připojeny přes standardní paměťový řadič v CPU).
    • Přidán ovladač nvmem pro načítání dat z paměťových oblastí vyhrazených pro firmware, které nejsou přímo přístupné Linuxu (například paměť EEPROM, která je fyzicky přístupná pouze firmwaru, nebo data, která jsou přístupná pouze během počáteční fáze spouštění).
    • Byla odstraněna podpora pro profilovací systém „oprofile“, který nebyl široce používán a byl nahrazen modernějším perf mechanismem.
    • Asynchronní I/O rozhraní io_uring poskytuje integraci s cgroups, které řídí využití paměti.
    • Architektura RISC-V podporuje systémy NUMA, stejně jako mechanismy kprobes a uprobes.
    • Přidána možnost používat systémové volání kcmp() bez ohledu na funkčnost snímků stavu procesu (kontrolní bod/obnovení).
    • Byla odstraněna makra EXPORT_UNUSED_SYMBOL() a EXPORT_SYMBOL_GPL_FUTURE(), která se v praxi mnoho let nepoužívala.
  • Virtualizace a bezpečnost
    • Přidán ochranný mechanismus KFence (Kernel Electric Fence), který zachytí chyby při práci s pamětí, jako je přetečení vyrovnávací paměti a přístup po uvolnění paměti. Na rozdíl od ladícího mechanismu KASAN se subsystém KFence vyznačuje vysokou provozní rychlostí a nízkou režií, což umožňuje zachytit chyby paměti, které se objevují pouze na fungujících systémech nebo při dlouhodobém provozu.
    • Přidána podpora pro hypervizor ACRN, napsaný s ohledem na připravenost na úkoly v reálném čase a vhodnost pro použití v kritických systémech. ACRN poskytuje minimální režii, zaručuje nízkou latenci a adekvátní odezvu při interakci se zařízením. Podporuje virtualizaci zdrojů CPU, I/O, síťového subsystému, grafických a zvukových operací. ACRN lze použít ke spuštění více izolovaných virtuálních strojů v elektronických řídicích jednotkách, přístrojových panelech, automobilových informačních systémech, spotřebitelských zařízeních IoT a dalších vestavěných technologiích. ACRN podporuje dva typy hostujících systémů – privilegované servisní VM, které se používají ke správě systémových prostředků (CPU, paměť, I/O atd.), a vlastní uživatelské VM, na kterých lze provozovat distribuce Linux, Android a Windows.
    • V subsystému IMA (Integrity Measurement Architecture), který udržuje hašovací databázi pro kontrolu integrity souborů a souvisejících metadat, je nyní možné kontrolovat integritu dat samotného jádra, například pro sledování změn pravidel SELinuxu. .
    • Do hypervizoru KVM byla přidána možnost zachytit hypervolání Xen a přeposlat je emulátoru běžícímu v uživatelském prostoru.
    • Přidána možnost používat Linux jako kořenové prostředí pro hypervizor Hyper-V. Kořenové prostředí má přímý přístup k hardwaru a používá se ke spouštění hostujících systémů (analogicky jako Dom0 v Xenu). Hyper-V (Microsoft Hypervisor) dosud podporoval Linux pouze v hostujících prostředích, ale samotný hypervisor byl řízen z prostředí založeného na Windows.
    • Přidána podpora pro inline šifrování pro karty eMMC, což vám umožňuje používat šifrovací mechanismy zabudované v řadiči disku, které transparentně šifrují a dešifrují I/O.
    • Podpora pro hashe RIPE-MD 128/256/320 a Tiger 128/160/192, které se nepoužívají v jádře, a také proudová šifra Salsa20, která byla nahrazena algoritmem ChaCha20, byla z rozhraní odstraněna. kryptografický subsystém. Algoritmus blake2 byl aktualizován, aby implementoval blake2s.
  • Síťový subsystém
    • Přidána možnost přesunout obslužnou rutinu dotazování NAPI pro síťová zařízení do samostatného jádra jádra, což umožňuje lepší výkon pro některé typy zátěže. Dříve se dotazování provádělo v kontextu softirq a nebylo pokryto plánovačem úloh, což ztěžovalo provádění jemnozrnných optimalizací pro dosažení maximálního výkonu. Spuštění v samostatném vláknu jádra umožňuje, aby byl obslužný program dotazování sledován z uživatelského prostoru, připojen k jednotlivým jádrům CPU a zohledněn při plánování přepínání úloh. Pro aktivaci nového režimu v sysfs je navržen parametr /sys/class/net//threaded.
    • Integrace do jádra MPTCP (MultiPath TCP), rozšíření protokolu TCP pro organizaci provozu TCP spojení s doručováním paketů současně po několika trasách přes různá síťová rozhraní spojená s různými IP adresami. Nové vydání přidává možnost přiřadit prioritu určitým vláknům, což umožňuje například organizovat práci záložních vláken, která se zapnou pouze v případě problémů s primárním vláknem.
    • IGMPv3 přidává podporu pro mechanismus EHT (Explicit Host Tracking).
    • Modul filtrování paketů Netfilter poskytuje možnost vlastnit určité tabulky a získat tak výhradní kontrolu (například proces brány firewall na pozadí může převzít vlastnictví určitých tabulek a zabránit tomu, aby do nich někdo zasahoval).
  • Оборудование
    • Vyčistili jsme zastaralé a neudržované platformy ARM. Kód pro platformy efm32, picoxcell, prima2, tango, u300, zx a c6x, stejně jako jejich přidružené ovladače, byl odstraněn.
    • Ovladač amdgpu poskytuje možnost přetaktování (OverDrive) karet založených na GPU Sienna Cichlid (Navi 22, Radeon RX 6xxx). Přidána podpora pro formát FP16 pixelů pro DCE (display controller engine) od 8. do 11. generace. Pro GPU Navy Flounder (Navi 21) a APU Van Gogh byla implementována možnost resetování GPU.
    • Ovladač i915 pro grafické karty Intel implementuje parametr i915.mitigations pro deaktivaci mechanismů izolace a ochrany ve prospěch lepšího výkonu. U čipů začínajících od Tiger Lake je zahrnuta podpora mechanismu VRR (Variable Rate Refresh), který umožňuje adaptivně měnit obnovovací frekvenci monitoru a zajistit tak plynulost a žádné mezery během her. Pro lepší přesnost barev je zahrnuta podpora technologie Intel Clear Color. Přidána podpora pro DP-HDMI 2.1. Byla implementována možnost ovládat podsvícení eDP panelů. Pro GPU Gen9 s podporou LSPCON (Level Shifter and Protocol Converter) je povolena podpora HDR.
    • Ovladač nouveau přidává počáteční podporu pro GPU NVIDIA založené na architektuře GA100 (Ampere).
    • Ovladač msm přidává podporu pro GPU Adreno 508, 509 a 512 používané v čipech SDM (Snapdragon) 630, 636 a 660.
    • Přidána podpora pro zvukové karty Sound BlasterX AE-5 Plus, Lexicon I-ONIX FW810s a Pioneer DJM-750. Přidána podpora pro audio subsystém Intel Alder Lake PCH-P. Pro ladění obslužných programů v uživatelském prostoru byla implementována podpora softwarové simulace připojování a odpojování audio konektoru.
    • Přidána podpora pro herní konzole Nintendo 64 vyráběné v letech 1996 až 2003 (minulé pokusy o portování Linuxu na Nintendo 64 nebyly dokončeny a byly klasifikovány jako Vaporware). Motivací pro vytvoření nového portu pro zastaralou platformu, která nevyšla téměř dvacet let, je touha stimulovat vývoj emulátorů a zjednodušit portování her.
    • Přidán ovladač pro herní ovladač Sony PlayStation 5 DualSense.
    • Přidána podpora pro ARM desky, zařízení a platformy: PineTab, Snapdragon 888 / SM8350, Snapdragon MTP, Two Beacon EmbeddedWorks, Intel eASIC N5X, Netgear R8000P, Plymovent M2M, Beacon i.MX8M Nano, NanoPi M4B.
    • Přidána podpora pro smartphony Purism Librem5 Evergreen, Xperia Z3+/Z4/Z5, ASUS Zenfone 2 Laser, BQ Aquaris X5, OnePlus6, OnePlus6T, Samsung GT-I9070.
    • Přidán ovladač bcm-vk pro desky akcelerátoru Broadcom VK (například desky Valkyrie a Viper PCIe), který lze použít k přenesení operací zpracování zvuku, videa a obrazu, stejně jako operací souvisejících se šifrováním, na samostatné zařízení.
    • Přidána podpora platformy Lenovo IdeaPad s možností ovládat neustálé nabíjení a podsvícení klávesnice. K dispozici je také podpora profilu ACPI platformy ThinkPad s možností ovládat režimy spotřeby energie. Přidán ovladač pro subsystém Lenovo ThinkPad X1 Tablet Gen 2 HID.
    • Přidán ovladač ov5647 s podporou modulu kamery pro Raspberry Pi.
    • Přidána podpora pro desky RISC-V SoC FU740 a HiFive Unleashed. Byl také přidán nový ovladač pro čip Kendryte K210.

Zdroj: opennet.ru

Přidat komentář