Vydání jádra Linux 5.7

Po dvou měsících vývoje Linus Torvalds představen vydání jádra Linux 5.7. Mezi nejpozoruhodnější změny patří nová implementace souborového systému exFAT, modul bareudp pro vytváření tunelů UDP, ochrana založená na autentizaci ukazatelů pro ARM64, možnost připojit programy BPF k ovladačům LSM, nová implementace Curve25519, split- detektor zámků, kompatibilita BPF s PREEMPT_RT, odstranění limitu na velikost řádku 80 znaků v kódu, zohlednění indikátorů teploty CPU v plánovači úloh, možnost použít clone() k spawnování procesů v jiné cgroup, ochrana proti zápisu do paměti pomocí userfaultfd.

Nová verze obsahuje 15033 1961 oprav od XNUMX XNUMX vývojářů,
velikost opravy - 39 MB (změny ovlivnily 11590 souborů, přidáno 570560 řádků kódu,
Odebráno 297401 řádků). Asi 41 % všech prezentovaných v 5.7
změny se týkají ovladačů zařízení, přibližně 16 % změn se týká
postoj k aktualizaci kódu specifického pro hardwarové architektury, 13 %
související se síťovým zásobníkem, 4 % na souborové systémy a 4 % na interní
subsystémy jádra.

hlavní inovace:

  • Diskový subsystém, I/O a souborové systémy
    • Přidána nová implementace ovladače exFAT, Založený založené na aktuální kódové základně „sdfat“ (2.x) vyvinuté společností Samsung pro její smartphony Android. Ovladač dříve přidaný do jádra byl založen na starším kódu Samsung (verze 1.2.9) a za novým ovladačem zaostával z hlediska výkonu asi o 10 %. Připomeňme, že přidání podpory exFAT do jádra bylo možné po Microsoftu publikováno veřejné specifikace a zpřístupnění patentů exFAT pro bezplatné použití v systému Linux.
    • Btrfs implementuje nový příkaz ioctl() - BTRFS_IOC_SNAP_DESTROY_V2, který umožňuje smazat podsekci podle jejího identifikátoru. Je poskytována plná podpora pro klonování inline rozsahů. Byl rozšířen počet stornovacích bodů pro operace přerozdělování, což zkrátilo dlouhé čekání při provádění příkazu 'zrušení zůstatku'. Určování zpětných odkazů v rozsahu bylo zrychleno (např. doba provádění testovacího skriptu se zkrátila z hodiny na několik minut). Přidána možnost připojit rozsahy souborů ke každému inodu stromu. Schéma blokování používané při zápisu do pododdílů a při vyloučení NOCOW bylo přepracováno. Vylepšená účinnost spouštění fsync pro rozsahy.
    • XFS zlepšilo kontrolu metadat a fsck pro aktivní oddíly. Pro přestavbu btree struktur byla navržena knihovna, která bude v budoucnu sloužit k přepracování xfs_repair a implementaci možnosti obnovy bez odpojení oddílu.
    • Do CIFS byla přidána experimentální podpora pro umístění odkládacího oddílu v úložištích SMB3. Implementována rozšíření POSIX do readdir, definovaná ve specifikaci SMB3.1.1. Vylepšený výkon zápisu pro stránky o velikosti 64 kB, když je povolen režim cache=strict a používají se verze protokolu 2.1+.
    • FS EXT4 byl převeden z bmap a iopoll do používání iomap.
    • F2FS poskytuje volitelnou podporu pro kompresi dat pomocí algoritmu zstd. Ve výchozím nastavení se pro kompresi používá algoritmus LZ4. Přidána podpora pro příkaz "chattr -c commit". K dispozici je zobrazení doby montáže. Přidán ioctl F2FS_IOC_GET_COMPRESS_BLOCKS pro získání informací o počtu komprimovaných bloků. Přidán výstup kompresních dat přes statx.
    • Souborový systém Ceph přidal možnost lokálně provádět operace vytváření a mazání souborů (odpojení) bez čekání na odpověď ze serveru (práce v asynchronním režimu). Změna může například výrazně zlepšit výkon při spuštění nástroje rsync.
    • Do OVERLAYFS byla přidána možnost používat virtiofs jako systém souborů nejvyšší úrovně.
    • Přepsáno kód procházení cesty ve VFS, kód pro analýzu symbolických odkazů byl přepracován a procházení přípojných bodů bylo sjednoceno.
    • V subsystému scsi nepřivilegovaným uživatelům povoleno provádění příkazů ZBC.
    • V dm_writecache implementováno možnost postupného čištění mezipaměti na základě parametru max_age, který nastavuje maximální životnost bloku.
    • V dm_integrity přidal podpora operace „zahodit“.
    • V null_blk přidal podpora substituce chyb pro simulaci selhání během testování.
    • Přidal možnost posílat upozornění udev o změnách velikosti blokovaných zařízení.
  • Síťový subsystém
    • Včetně síťového filtru změny, výrazně zrychlující zpracování velkých seznamů shod (nftables sad), které vyžadují kontrolu kombinace podsítí, síťových portů, protokolu a MAC adres.
      Optimalizace vyrobeno do modulu nft_set_pipapo (PIle PAcket POlicies), který řeší problém shody obsahu paketu s libovolnými rozsahy stavu polí používanými ve filtrovacích pravidlech, jako jsou rozsahy IP a síťových portů (nft_set_rbtree a nft_set_hash manipulují s porovnáváním intervalů a přímým odrazem hodnot ). Verze pipapo vektorizovaná pomocí 256bitových instrukcí AVX2 na systému s procesorem AMD Epyc 7402 vykázala 420% nárůst výkonu při analýze 30 tisíc záznamů včetně kombinací port-protokol. Nárůst při porovnání kombinace podsítě a čísla portu při analýze 1000 záznamů byl 87 % pro IPv4 a 128 % pro IPv6.

    • Přidat modul bareudp, který umožňuje zapouzdřit různé protokoly L3, jako jsou MPLS, IP a NSH, do tunelu UDP.
    • Pokračovala integrace komponent MPTCP (MultiPath TCP), rozšíření protokolu TCP pro organizaci provozu TCP spojení s doručováním paketů současně několika cestami přes různá síťová rozhraní vázaná na různé IP adresy.
    • Přidal podpora mechanismů hardwarové akcelerace pro zapouzdření ethernetových rámců v 802.11 (Wi-Fi).
    • Při přesunu zařízení z jednoho síťového jmenného prostoru do druhého se upraví přístupová práva a vlastnictví odpovídajících souborů v sysfs.
    • Přidána možnost používat příznak SO_BINDTODEVICE pro uživatele bez oprávnění root.
    • Byla přijata třetí část oprav, která převádí sadu nástrojů ethtool z ioctl() na použití rozhraní netlink. Nové rozhraní usnadňuje přidávání rozšíření, zlepšuje zpracování chyb, umožňuje zasílání upozornění při změně stavu, zjednodušuje interakci mezi jádrem a uživatelským prostorem a snižuje počet pojmenovaných seznamů, které je třeba synchronizovat.
    • Přidána možnost používat speciální hardwarové akcelerátory k provádění operací sledování připojení.
    • V síťovém filtru přidal háček pro připojení klasifikátorů odchozích paketů (egress), který doplnil dříve přítomný hák pro příchozí pakety (ingress).
  • Virtualizace a bezpečnost
    • Přidána hardwarová implementace autentizace ukazatele (Ověření ukazatele), která používá specializované instrukce CPU ARM64 k ochraně před útoky pomocí technik návratově orientovaného programování (ROP), ve kterých se útočník nesnaží umístit svůj kód do paměti, ale operuje s částmi strojových instrukcí, které jsou již dostupné v načtených knihovnách, a končí s instrukcí návratu řízení. Bezpečnost spočívá v používání digitálních podpisů k ověření návratových adres na úrovni jádra. Podpis je uložen v nepoužitých horních bitech samotného ukazatele. Na rozdíl od softwarových implementací se vytváření a ověřování digitálních podpisů provádí pomocí speciálních instrukcí CPU.
    • Přidal schopnost chránit paměťovou oblast před zápisem pomocí systémového volání userfaultfd(), navrženého pro řešení chyb stránek (přístup k nepřiděleným paměťovým stránkám) v uživatelském prostoru. Cílem je použít userfaultfd() jak k detekci narušení přístupu ke stránkám označeným jako chráněné proti zápisu, tak k volání handleru, který může na takové pokusy o zápis reagovat (například pro zpracování změn během vytváření živých snímků běžících procesů, stav zachycení při ukládání výpisů paměti na disk, implementace sdílené paměti, sledování změn v paměti). Funkčnost ekvivalent pomocí mprotect() ve spojení s obslužným programem signálu SIGSEGV, ale funguje znatelně rychleji.
    • SELinux zavrhl parametr „checkreqprot“, který umožňuje zakázat kontroly ochrany paměti při zpracování pravidel (umožňující použití spustitelných oblastí paměti bez ohledu na pravidla uvedená v pravidlech). Symbolické odkazy Kernfs mohou zdědit kontext svých nadřazených adresářů.
    • Struktura v ceně modulu KRSI, který vám umožňuje připojit programy BPF k libovolným hákům LSM v jádře. Změna umožňuje vytvářet moduly LSM (Linux Security Module) ve formě programů BPF pro řešení problémů auditu a povinné kontroly přístupu.
    • Odneseno Optimalizuje výkon /dev/random dávkováním hodnot CRNG namísto individuálního volání instrukcí RNG. Vylepšený výkon getrandom a /dev/random na systémech ARM64 poskytujících instrukce RNG.
    • Realizace eliptické křivky Curve25519 nahrazeno pro možnost z knihovny HACL, pro který daný matematický důkaz ověření formální spolehlivosti.
    • Přidat mechanismus pro informování o volných stránkách paměti. Pomocí tohoto mechanismu mohou hostované systémy přenášet informace o stránkách, které se již nepoužívají, do hostitelského systému a hostitel si může vzít data stránky zpět.
    • Ve vfio/pci přidal podpora SR-IOV (Single-Root I/O Virtualization).
  • Paměťové a systémové služby
    • Od 80 do 100 znaků zvýšené omezení maximální délky řádků ve zdrojových textech. Vývojářům se přitom stále doporučuje držet se maximálně 80 znaků na řádek, ale to už není pevný limit. Navíc překročení limitu velikosti řádku bude mít za následek varování sestavení pouze v případě, že je checkpatch spuštěn s volbou '--strict'. Změna umožní nerozptylovat vývojáře manipulace s mezerami a cítit se volněji při zarovnávání kódu, stejně jako zabrání nadměrné lámání čar, rušivý porozumění kódu a vyhledávání.
    • Přidal podpora smíšeného bootovacího režimu EFI, který umožňuje načíst 64bitové jádro z 32bitového firmwaru běžícího na 64bitovém CPU bez použití specializovaného bootloaderu.
    • Zahrnuta systém pro identifikaci a ladění rozdělených zámků („dělený zámek"), ke kterému 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í má za následek významný zásah do výkonu (o 1000 cyklů pomalejší než atomická operace s daty, která spadají do jednoho řádku mezipaměti). V závislosti na spouštěcím parametru "split_lock_detect" může jádro detekovat takové zámky za běhu a vydat varování nebo poslat SIGBUS signál do aplikace, která zámek způsobila.
    • Plánovač úloh poskytuje sledování teplotních senzorů (Tepelný tlak) a implementováno s přihlédnutím k přehřátí při zadávání úkolů. Pomocí poskytnutých statistik může tepelný regulátor upravit maximální frekvenci CPU při přehřátí a plánovač úloh nyní bere v úvahu snížení výpočetního výkonu v důsledku takového snížení frekvence při plánování spouštění úloh (dříve plánovač reagoval na změny ve frekvenci s určitým zpožděním, po určitou dobu rozhodování na základě nafouknutých předpokladů o dostupných výpočetních zdrojích).
    • Plánovač úloh obsahuje invariantní ukazatele sledování zátěže, což vám umožní správně odhadnout zátěž bez ohledu na aktuální pracovní frekvenci CPU. Změna umožňuje přesněji předvídat chování úloh v podmínkách dynamických změn napětí a frekvence CPU. Například úloha, která spotřebovala 1/3 zdrojů CPU při 1000 MHz, spotřebuje 2/3 zdrojů, když frekvence klesne na 500 MHz, což dříve vytvářelo falešný předpoklad, že běží na plnou kapacitu (tj. úlohy se objevily větší pro plánovač pouze snížením frekvence, což vedlo k nesprávným rozhodnutím v regulátoru schedutil cpufreq).
    • Ovladač Intel P-state, který je zodpovědný za výběr režimů výkonu, byl přepnut do používání rozvrh.
    • Byla implementována možnost používat subsystém BPF, když jádro běží v reálném čase (PREEMPT_RT). Dříve, když bylo povoleno PREEMPT_RT, bylo nutné zakázat BPF.
    • Byl přidán nový typ programu BPF - BPF_MODIFY_RETURN, který lze připojit k funkci v jádře a změnit hodnotu vrácenou touto funkcí.
    • Přidal příležitost Použití systémového volání clone3() k vytvoření procesu v cgroup, který se liší od rodičovské cgroup, což umožňuje nadřazenému procesu aplikovat omezení a povolit účtování ihned po vytvoření nového procesu nebo vlákna. Správce služeb může například přímo alokovat nové služby do samostatných cgroups a nové procesy, když jsou umístěny do „zmrazených“ cgroups, budou okamžitě zastaveny.
    • v Kbuild přidal podpora proměnné prostředí "LLVM=1" pro přepnutí na sadu nástrojů Clang/LLVM při sestavování jádra. Požadavky na verzi binutils byly zvýšeny (2.23).
    • Do debugfs byla přidána sekce /sys/kernel/debug/kunit/ s výsledky testů kunit.
    • Přidán spouštěcí parametr jádra pm_debug_messages (analogický k /sys/power/pm_debug_messages), který umožňuje výstup ladicích informací o provozu systému řízení spotřeby (užitečné při ladění problémů s hibernací a pohotovostním režimem).
    • K asynchronnímu I/O rozhraní io_uring podpora přidána spoj () и výběr atomového pufru.
    • Vylepšené profilování cgroup pomocí sady nástrojů perf. Dříve mohl perf profilovat úkoly pouze v konkrétní cgroup a nemohl zjistit, do které cgroup patří aktuální vzorek. perf nyní získává informace o cgroup pro každý vzorek, což vám umožňuje profilovat více než jednu cgroup a použít třídění podle
      cgroup v přehledech.

    • cgroupfs, pseudo-FS pro správu cgroups, přidal podporu pro rozšířené atributy (xattrs), pomocí kterých můžete například v uživatelském prostoru zanechat další informace pro handlery.
    • V řadiči paměti cgroup přidala podpora rekurzivní ochrany hodnoty „memory.low“, která reguluje minimální množství paměti RAM poskytované členům skupiny. Když připojujete hierarchii cgroup pomocí volby "memory_recursiveprot", hodnota "memory.low", která je nastavena pro nižší uzly, bude automaticky distribuována všem podřízeným uzlům.
    • Přidat Rámec Uacce (Unified/User-space-access-intended Accelerator Framework) pro sdílení virtuálních adres (SVA, Shared Virtual Addressing) mezi CPU a periferními zařízeními, umožňující hardwarovým akcelerátorům přístup k datovým strukturám v hlavním CPU.
  • Hardwarové architektury
    • Pro architekturu ARM je implementována možnost hot-fetch paměti.
    • Pro architekturu RISC-V byla přidána podpora pro hot plugging a odebrání CPU (CPU hotplug). Pro 32bitový RISC-V je implementován eBPF JIT.
    • Možnost používat 32bitové systémy ARM ke spouštění hostujících prostředí KVM byla odstraněna.
    • Odstraněna "fiktivní" implementace NUMA pro architekturu s390, pro kterou nebyly nalezeny žádné případy použití k dosažení zlepšení výkonu.
    • Pro ARM64 byla přidána podpora pro rozšíření AMU (Activity Monitors Unit), definované v ARMv8.4 a poskytující čítače výkonu, které se používají k výpočtu opravných faktorů frekvenčního škálování v plánovači úloh.
  • Оборудование
    • Přidal podpora pro zařízení vDPA, která používají kanál pro výměnu dat, který vyhovuje specifikacím virtio. Zařízení vDPA mohou být buď fyzicky připojená zařízení, nebo softwarově emulovaná virtuální zařízení.
    • V subsystému GPIO se objevil nový příkaz ioctl() pro sledování změn, který vám umožní informovat proces o změnách stavu libovolné GPIO linky. Jako příklad použití nového příkazu navrženo nástroj gpio-watch.
    • V ovladači i915 DRM pro grafické karty Intel zahrnuta výchozí podpora pro čipy Tigerlake („Gen12“) a přidána počáteční podpora pro ovládání podsvícení OLED. Vylepšená podpora pro čipy Ice Lake, Elkhart Lake, Baytrail a Haswell.
    • V ovladači amdgpu přidal schopnost nahrát firmware do čipu USBC pro ASIC. Vylepšená podpora pro čipy AMD Ryzen 4000 „Renoir“. Nově je zde podpora ovládání OLED panelů. Poskytováno zobrazení stavu firmwaru v debugfs.
    • Do ovladače vmwgfx DRM pro virtualizační systémy VMware byla přidána možnost používat OpenGL 4 v hostujících systémech (dříve bylo podporováno OpenGL 3.3).
    • Přidán nový ovladač DRM tidss pro zobrazovací systém platformy TI Keystone.
    • Přidány ovladače pro LCD panely: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101II01D350D54004
    • Do systému řízení spotřeby přidal podpora platformy Intel Jasper Lake (JSL) na bázi Atom.
    • Přidána podpora pro notebook Pinebook Pro založený na Rockchip RK3399, tabletu Pine64 PineTab a smartphonu PinePhone založeno na Allwinner A64.
    • Přidána podpora pro nové zvukové kodeky a čipy:
      Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc.

    • Přidána podpora pro ARM desky a platformy Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron „sl28“, 11 i.MX6 TechNexion Pico možnosti desky, tři nové Toradex Colibri možnosti, Samsung S7710 Galaxy Xcover 2 založený na ST -Ericsson u8500, DH Electronics DHCOM SoM a PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.

Zdroj: opennet.ru

Přidat komentář