Linuxové jádro 5.14

Linuxové jádro 5.14

Po dvou měsících vývoje Linus Torvalds představen vydání jádra Linux 5.14. Mezi nejpozoruhodnější změny patří nová systémová volání kvóta_fd() a memfd_secret(), odstranění ovladačů ide a raw, nový řadič I/O priority pro cgroup, režim plánování úloh SCHED_CORE, infrastruktura pro vytváření ověřených zavaděčů programů BPF.

Nová verze obsahuje 15883 2002 oprav od 69 12580 vývojářů, velikost opravy je 861501 MB (změny se dotkly 321654 47 souborů, bylo přidáno 5.14 14 řádků kódu, smazáno 13 3 řádků). Přibližně 3 % 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ýkají souborových systémů a XNUMX % souvisí s vnitřními subsystémy jádra.

hlavní inovace:

  • diskový subsystém, vstupní/výstupní a souborové systémy:
    • pro cgroup implementováno nový I/O prioritní řadič - rq-qos, který může řídit prioritu zpracování požadavků na blokování zařízení generovaných členy každé cgroup. Do plánovače I/O mq-deadline byla přidána nová podpora prioritního řadiče;
    • na souborovém systému ext4 implementováno nový příkaz ioctl EXT4_IOC_CHECKPOINT, který vynutí všechny nevyřízené transakce z protokolu a souvisejících vyrovnávacích pamětí na disk a také přepíše oblast používanou protokolem v úložišti. Změna byla připravena v rámci iniciativy, která má zabránit únikům informací ze souborových systémů;
    • v Btrfs vyrobeno Optimalizace výkonu: Odstraněním zbytečného protokolování rozšířených atributů během provádění fsync se výkon intenzivních operací s rozšířenými atributy zvýšil až o 17 %. Navíc při provádění operací trimování, které neovlivňují rozsahy, je plná synchronizace deaktivována, což zkrátilo dobu operace o 12 %. Do sysfs bylo přidáno nastavení pro omezení I/O šířky pásma při kontrole FS. Přidána volání ioctl pro zrušení změn velikosti a mazání operací zařízení;
    • v XFS přepracováno implementace vyrovnávací paměti cache, která se přenáší do alokace paměťových stránek v dávkovém režimu. Vylepšená účinnost mezipaměti;
    • F2FS přidal možnost pracovat v režimu pouze pro čtení a implementoval režim ukládání do mezipaměti komprimovaného bloku (compress_cache), aby se zlepšil výkon náhodného čtení. Byla implementována podpora pro kompresi souborů mapovaných do paměti pomocí operace mmap(). Chcete-li selektivně zakázat kompresi souborů maskou, byla navržena nová možnost připojení nocompress;
    • byla provedena práce v ovladači exFAT na zlepšení kompatibility s úložištěm některých digitálních fotoaparátů;
    • přidáno systémové volání kvóta_fd(), který umožňuje spravovat kvóty nikoli prostřednictvím speciálního souboru zařízení, ale zadáním deskriptoru souboru spojeného se systémem souborů, pro který je kvóta uplatněna;
    • Staré ovladače pro bloková zařízení s rozhraním IDE byly z jádra odstraněny a dávno byly nahrazeny subsystémem libata. Podpora starých zařízení zůstala zachována v plném rozsahu, změny se týkají pouze možnosti používat staré ovladače, při jejichž používání se disky nazývaly /dev/hd*, nikoli /dev/sd*;
    • Ovladač „raw“ byl z jádra odstraněn a poskytuje přístup k blokovým zařízením bez vyrovnávací paměti přes rozhraní /dev/raw. Tato funkce je již dlouho implementována v aplikacích používajících příznak O_DIRECT;
  • paměťové a systémové služby:
    • v plánovači úloh byl implementován nový režim plánování SCHED_CORE, který vám umožňuje řídit, které procesy mohou běžet společně na stejném jádru CPU. Každému procesu lze přiřadit identifikátor cookie, který definuje rozsah důvěryhodnosti mezi procesy (například patřící stejnému uživateli nebo kontejneru). Při organizování spouštění kódu může plánovač zajistit, že jedno jádro CPU je sdíleno pouze mezi procesy přidruženými ke stejnému vlastníkovi, což lze použít k blokování některých útoků Spectre tím, že zabrání spuštění důvěryhodných a nedůvěryhodných úloh na stejném vláknu SMT (Hyper Threading). ;
    • pro mechanismus cgroup byla implementována podpora pro operaci kill, která vám umožňuje zabít všechny procesy spojené se skupinou najednou (odeslat SIGKILL) zapsáním „1“ do virtuálního souboru cgroup.kill;
    • rozšířené možnosti související s reakcí na detekci rozdělených zámků („rozdělených zámků“), ke kterým dochází při přístupu k nezarovnaným datům v paměti kvůli skutečnosti, že při provádění atomické instrukce data překračují dvě řádky mezipaměti CPU. Takové blokování vede k výraznému poklesu výkonu, takže dříve bylo možné násilně ukončit aplikaci, která blokování způsobila. Nová verze přidává parametr příkazového řádku jádra „split_lock_detect=ratelimit:N“, který vám umožňuje definovat celosystémový limit rychlosti zamykání za sekundu, po jehož překročení dojde k překročení jakéhokoli procesu, který se stal zdrojem rozděleného zámku. být nucen zastavit na 20 ms místo ukončení;
    • Řadič šířky pásma cgroup CFS (CFS bandwidth controller), který určuje, kolik času procesoru lze přidělit každé cgroup, má schopnost definovat limity omezené danou dobou trvání akce, což umožňuje lepší regulaci zátěží citlivých na latenci. Například nastavení cpu.cfs_quota_us na 50000 a cpu.cfs_period_us na 100000 umožní skupině procesů plýtvat 100 ms času CPU každých 50 ms;
    • přidal počáteční infrastruktura pro vytváření zavaděčů programů BPF, která dále umožní stahování pouze programů BPF podepsaných důvěryhodným digitálním klíčem;
    • přidána nová futexová operace FUTEX_LOCK_PI2, která používá monotónní časovač pro výpočet časového limitu, který zohledňuje čas strávený systémem v režimu spánku;
    • pro architekturu RISC-V, podpora velkých paměťových stránek (Transparent Huge-Pages) a možnost používat KFENCE identifikovat chyby při práci s pamětí;
    • do systémového volání madvise(), které poskytuje prostředky pro optimalizaci správy paměti procesu, přidal Příznaky MADV_POPULATE_READ a MADV_POPULATE_WRITE pro generování "chyby stránky" na všech stránkách paměti mapovaných pro operace čtení nebo zápisu, aniž by se provedlo skutečné čtení nebo zápis (předvolba). Použití příznaků může být užitečné pro snížení zpoždění při provádění programu díky proaktivnímu provádění obsluhy „chyby stránky“ pro všechny nepřidělené stránky najednou, bez čekání na skutečný přístup k nim;
    • v systému testování jednotek kunit přidal podpora spouštění testů v prostředí QEMU;
    • přidány nové sledovače: "osnoise" pro sledování zpoždění aplikací způsobených zpracováním přerušení a " timerlat " pro zobrazení podrobných informací o zpožděních při probuzení signálem časovače;
  • virtualizace a zabezpečení:
    • přidal systémové volání memfd_secret(), která vám umožňuje vytvořit soukromou paměťovou oblast v izolovaném adresovém prostoru, viditelnou pouze pro proces vlastníka, která se neodráží v jiných procesech a není přímo přístupná jádru;
    • v systému filtrování systémových volání seccomp je možné při přesouvání manipulátorů zámků do uživatelského prostoru použít jednu atomickou operaci k vytvoření deskriptoru souboru pro izolovanou úlohu a vrátit jej při zpracování systémového volání. Navržený provoz řeší problém s přerušením obsluhy v uživatelském prostoru při příchodu signálu;
    • přidal nový mechanismus ke správě omezení zdrojů ve jmenném prostoru ID uživatele, který váže jednotlivé čítače rlimit k uživateli v "jmenném prostoru uživatele". Změna řeší problém s používáním společných čítačů prostředků, když jeden uživatel spouští procesy v různých kontejnerech;
    • hypervizor KVM pro systémy ARM64 přidal možnost používat rozšíření MTE (MemTag, Memory Tagging Extension) v hostujících systémech, které vám umožňuje vázat tagy na každou operaci alokace paměti a organizovat kontrolu správného použití ukazatelů pro blokování zneužití zranitelnosti způsobené přístupem k již uvolněným blokům paměti, přetečením vyrovnávacích pamětí, přístupy před inicializací a použitím mimo aktuální kontext;
    • Autentizaci ukazatele poskytovanou platformou ARM64 lze nyní konfigurovat samostatně pro jádro a uživatelský prostor. Technologie umožňuje používat specializované instrukce ARM64 k ověření návratových adres pomocí digitálních podpisů, které jsou uloženy v nepoužitých horních bitech samotného ukazatele;
    • v uživatelském režimu Linux přidal podpora použití ovladačů pro zařízení PCI s virtuální sběrnicí PCI, implementovaná ovladačem PCI-over-virtio;
    • pro systémy x86 přidána podpora pro paravirtualizované zařízení virtio-iommu, které umožňuje odesílat požadavky IOMMU, jako je ATTACH, DETACH, MAP a UNMAP, přes virtio transport bez emulace tabulek stránek paměti;
    • U procesorů Intel, od rodiny Skylake po Coffee Lake, je použití Intel TSX (Transactional Synchronization Extensions), které poskytují nástroje pro zlepšení výkonu vícevláknových aplikací dynamickým odstraněním zbytečných synchronizačních operací, ve výchozím nastavení zakázáno. Rozšíření jsou zakázána kvůli možnosti útoků Zombie zatíženímanipulace s únikem informací prostřednictvím kanálů třetích stran, ke kterému dochází během činnosti mechanismu pro asynchronní přerušení operací (TAA, TSX Asynchronous Abort);
  • síťový subsystém:
    • pokračující 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. V novém čísle přidal mechanismus pro nastavení vlastních zásad hashování provozu pro IPv4 a IPv6 (multipath hash policy), který umožňuje z uživatelského prostoru určit, která pole v paketech, včetně těch zapouzdřených, budou použita při výpočtu hash, který určuje volbu cesty pro balíček;
    • podpora soketu byla přidána do virtuálního transportního virtio SOCK_SEQPACKET (řádný a spolehlivý přenos datagramů);
    • Byly rozšířeny možnosti mechanismu soketů SO_REUSEPORT, který umožňuje připojení několika naslouchacích soketů k jednomu portu najednou a přijímání spojení s distribucí příchozích požadavků současně přes všechny sokety připojené přes SO_REUSEPORT, což zjednodušuje vytváření vícevláknových serverových aplikací. . V nové verzi přidal prostředky pro přenos řízení na jiný soket v případě selhání při zpracování požadavku původně vybraným soketem (řeší problém se ztrátou jednotlivých spojení při restartu služeb);
  • zařízení:
    • v ovladači amdgpu implementováno podpora pro novou řadu GPU AMD Radeon RX 6000 s kódovým označením „Beige Goby“ (Navi 24) a „Yellow Carp“, stejně jako vylepšená podpora pro GPU Aldebaran (gfx90a) a Van Gogh APU. Přidána možnost současně pracovat s několika eDP panely. Pro APU Renoir byla implementována podpora práce se šifrovanými buffery ve videopaměti (TMZ, Trusted Memory Zone). Přidána podpora pro grafické karty odpojitelné za provozu. U GPU Radeon RX 6000 (Navi 2x) a starších GPU AMD je standardně povolena podpora mechanismu úspory energie ASPM (Active State Power Management), který byl dříve povolen pouze pro GPU Navi 1x, Vega a Polaris;
    • pro čipy AMD přibyla podpora sdílené virtuální paměti (SVM, shared virtual memory) na bázi subsystému HMM (Heterogeneous memory management), který umožňuje použití zařízení s vlastními jednotkami pro správu paměti (MMU, memory management unit), který má přístup k hlavní paměti. Včetně použití HMM můžete organizovat sdílený adresní prostor mezi GPU a CPU, ve kterém má GPU přístup k hlavní paměti procesu;
    • přidána počáteční technologická podpora AMD Smart Shift, který dynamicky mění parametry spotřeby CPU a GPU u notebooků s čipovou sadou a grafickou kartou AMD pro zvýšení výkonu při hraní her, střihu videa a vykreslování 3D;
    • v ovladači i915 pro grafické karty Intel zahrnuta podpora čipů Intel Alderlake P;
    • přidán ovladač drm/hyperv pro virtuální grafický adaptér Hyper-V;
    • přidal simpledrm grafický ovladač, který pro výstup používá framebuffer EFI-GOP nebo VESA poskytovaný firmwarem UEFI nebo BIOSem. Hlavním účelem ovladače je poskytnout možnosti grafického výstupu během počátečních fází spouštění, než lze použít úplný ovladač DRM. Ovladač lze také použít jako dočasné řešení pro zařízení, která dosud nemají nativní ovladače DRM;
    • přidal počítačová podpora all-in-one Raspberry Pi 400;
    • Přidán ovladač dell-wmi-privacy pro podporu hardwarových přepínačů kamery a mikrofonu, které jsou součástí notebooků Dell;
    • pro notebooky Lenovo přidal WMI rozhraní pro změnu parametrů BIOSu přes sysfs /sys/class/firmware-attributes/;
    • rozšířený podpora zařízení s rozhraním USB4;
    • přidal podpora zvukových karet a kodeků AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 a Texas Instruments TAS2505. Vylepšená podpora zvuku na noteboocích HP a ASUS. Přidal záplaty pro snížení zpoždění před zahájením přehrávání zvuku na zařízeních s rozhraním USB.

Zdroj – opennet.ru.

Zdroj: linux.org.ru