Vydání jádra Linux 5.14

Po dvou měsících vývoje představil Linus Torvalds vydání linuxového jádra 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, I/O a souborové systémy
    • Pro cgroups byl implementován nový řadič priority I/O, 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.
    • Systém souborů ext4 implementuje nový příkaz ioctl, EXT4_IOC_CHECKPOINT, který vynutí vyprázdnění všech nevyřízených transakcí z žurnálu a jejich přidružených vyrovnávacích pamětí na disk a také přepíše oblast používanou žurnálem 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ů.
    • U Btrfs byly provedeny 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 byla přepracována implementace buffer cache, která byla přepnuta na alokaci paměťových stránek v dávkovém režimu. Vylepšená účinnost mezipaměti.
    • F2FS přidává možnost pracovat v režimu pouze pro čtení a implementuje režim komprimované blokové mezipaměti (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ů na základě masky, byla navržena nová možnost připojení nocompress.
    • V ovladači exFAT byla provedena práce na zlepšení kompatibility s některými úložištěmi digitálních fotoaparátů.
    • Přidáno systémové volání quotectl_fd(), které vám umožňuje spravovat kvóty nikoli prostřednictvím speciálního souboru zařízení, ale zadáním deskriptoru souboru přidruženého k systému souborů, pro který je kvóta apliková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.
    • 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
    • Plánovač úloh implementuje nový režim plánování, SCHED_CORE, který vám umožňuje řídit, které procesy lze společně spouštět 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 organizaci 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 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ů („split locks“), 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řekročí 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é vydání 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í se jakýkoli proces stal zdrojem rozděleného zámku. bude nuceno 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, implementuje možnost definovat časově omezené limity, což umožňuje lepší regulaci zátěže citlivé 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řidána počáteční infrastruktura pro vytváření zavaděčů programů BPF, která dále umožní načítá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č k výpočtu časového limitu, který bere v úvahu čas strávený systémem v režimu spánku.
    • Pro architekturu RISC-V je implementována podpora velkých paměťových stránek (Transparent Huge-Pages) a možnost využít mechanismus KFENCE pro detekci chyb při práci s pamětí.
    • Systémové volání madvise(), které poskytuje prostředky k optimalizaci správy paměti procesu, přidalo 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 na operace čtení nebo zápisu, aniž by bylo nutné provést 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 v důsledku proaktivního provádění obsluhy „chyby stránky“ pro všechny nepřidělené stránky najednou, aniž by se čekalo na skutečný přístup k nim.
    • Systém testování jednotek kunit přidal podporu pro spouštění testů v prostředí QEMU.
    • Byly 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 bezpečnost
    • Systémové volání memfd_secret() bylo přidáno, aby vytvořilo oblast soukromé paměti v izolovaném adresovém prostoru, viditelnou pouze pro vlastnící proces, neodrážející se pro ostatní procesy a nepřístupnou přímo jádru.
    • V systému filtrování systémových volání seccomp je možné při přesunu obslužných rutin blokování do uživatelského prostoru použít jedinou atomickou operaci k vytvoření deskriptoru souboru pro izolovanou úlohu a vrátit jej při zpracování systémového volání. Navrhovaná operace řeší problém přerušení obsluhy v uživatelském prostoru při příchodu signálu.
    • Přidán nový mechanismus pro správu limitů zdrojů ve jmenném prostoru ID uživatele, který váže jednotlivé čítače rlimit k uživateli v „oboru jmen uživatelů“. 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 značky 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í paměti, přístupy před inicializací a použitím mimo aktuální kontext.
    • Zařízení Pointer Authentication platformy ARM64 lze nyní konfigurovat samostatně pro jádro a uživatelský prostor. Technologie umožňuje pomocí specializovaných instrukcí ARM64 ověřit zpáteční adresy pomocí digitálních podpisů, které jsou uloženy v nepoužitých horních bitech samotného ukazatele.
    • Linux v uživatelském režimu přidal podporu pro použití ovladačů pro zařízení PCI s virtuální sběrnicí PCI, implementovanou ovladačem PCI-over-virtio.
    • Pro systémy x86 byla přidána podpora pro paravirtualizované zařízení virtio-iommu, což umožňuje odesílání požadavků IOMMU, jako jsou 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ů Zombieload, které manipulují s únikem informací prostřednictvím kanálů třetích stran, ke kterému dochází během činnosti mechanismu TAA (TSX Asynchronous Abort).
  • Síťový subsystém
    • 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á verze přidává mechanismus pro nastavení vašich vlastních zásad hashování provozu pro IPv4 a IPv6 (multipath hash policy), což 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 výběr cesty pro paket.
    • Do virtuálního transportu virtio byla přidána podpora soketů SOCK_SEQPACKET (uspořádaný 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í. . Nová verze přidává nástroje pro přenos řízení na jiný socket v případě selhání při zpracování požadavku původně vybraným socketem (řeší problém se ztrátou jednotlivých spojení při restartu služeb).
  • Оборудование
    • Ovladač amdgpu poskytuje podporu 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šenou podporu 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 ASPM (Active State Power Management), která byla dříve povolena pouze pro GPU Navi 1x, Vega a Polaris.
    • U čipů 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 správy paměti (MMU, memory management unit), který má přístup k hlavní paměti. Zejména pomocí 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í podpora pro technologii AMD Smart Shift, která dynamicky mění nastavení výkonu CPU a GPU u notebooků s čipovou sadou AMD a grafickou kartou pro zvýšení výkonu pro hraní her, úpravy videa a 3D vykreslování.
    • Ovladač i915 pro grafické karty Intel obsahuje podporu pro čipy Intel Alderlake P.
    • Přidán ovladač drm/hyperv pro virtuální grafický adaptér Hyper-V.
    • Přidána podpora pro počítač Raspberry Pi 400 all-in-one.
    • Přidán ovladač dell-wmi-privacy pro podporu hardwarových přepínačů kamery a mikrofonu, které jsou součástí notebooků Dell.
    • U notebooků Lenovo bylo přidáno rozhraní WMI pro změnu nastavení BIOSu pomocí sysfs /sys/class/firmware-attributes/.
    • Rozšířená podpora pro zařízení s rozhraním USB4.
    • Přidána podpora pro zvukové karty a kodeky 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řidány záplaty pro snížení zpoždění, než se zvuk začne přehrávat na zařízeních USB.

Zdroj: opennet.ru

Přidat komentář