Uvolnění jádra Linux 5.7

Po dvou měsících vývoje Linus Torvalds představil jádrný release Linux 5.7. Mezi nejvýznamnější novinky patří: nová implementace souborového systému exFAT, modul bareudp pro vytváření UDP tunelů, ochrana založená na autentizaci ukazatelů pro ARM64, možnost připojení programů BPF k LSM zpracovatelům, nová implementace Curve25519, detektor „split-lock“, kompatibilita BPF s PREEMPT_RT, zrušení omezení 80 znaků na řetězec v kódu, zohlednění údajů o teplotě CPU v plánovači úloh, možnost využití clone() pro vytváření procesů v jiném cgroup, ochrana před zápisem do paměti pomocí userfaultfd.

Do nové verze bylo přijato 15033 oprav od 1961 vývojářů,
velikost patche činí 39 MB (změny se dotkly 11590 souborů, přidáno 570560 řádků kódu,
zrušeno 297401 řádků). Přibližně 41 % ze všech změn představených ve verzi 5.7
se týká ovladačů zařízení, přibližně 16 % změn má
vztah k aktualizaci kódu specifického pro hardwarové architektury, 13 %
vztah k síťovému stacku, 4 % k souborovým systémům a 4 % k interním
podsystemy jádra.

Hlavní novinky:

  • Diskový subsystém, vstup/výstup a souborové systémy
    • Byla přidána nová implementace ovladače exFAT, založená na aktuální kódové základně „sdfat“ (2.x), kterou vyvíjí společnost Samsung pro své chytré telefony Android. Dříve přidaný ovladač do jádra byl založen na zastaralém kódu Samsung (verze 1.2.9) a zaostával ve výkonu za novým ovladačem přibližně o 10 %. Připomeňme, že přidání podpory exFAT do jádra se stalo možné poté, co společnost Microsoft publikovala uvolnila veřejné specifikace a umožnila bezplatné využívání patentů na exFAT v Linuxu.
    • V Btrfs byla implementována nová příkaz ioctl() — BTRFS_IOC_SNAP_DESTROY_V2, která umožňuje mazání podřízeného podle jeho identifikátoru. Byla zajištěna plná podpora klonování inline extentů. Bylo rozšířeno množství bodů pro zrušení operací přerozdělování, což umožnilo zkrátit dlouhé čekací doby při provádění příkazu ‘balance cancel’. Bylo urychleno určování zpětných odkazů na extentu (například doba provádění testovacího scénáře se snížila z hodiny na několik minut). Byla přidána možnost připojení k každému inode stromu extentů souboru. Byla přepracována schéma blokování používaná při zápisu do podřízených komponent a při výjimce NOCOW. Byla zvýšena účinnost provádění fsync pro rozmezí.
    • Ve XFS byla vylepšena kontrola metadat a provádění fsck pro aktivní oddíly. Byla navržena knihovna pro rekonstrukci struktur btree, která bude v budoucnu použita pro přepracování xfs_repair a implementaci možnosti obnovy bez odpojení oddílu.
    • V CIFS byla přidána experimentální podpora umístění oddílu pro zápis do SMB3 úložišť. Byla implementována POSIX rozšíření v readdir, definovaných ve specifikaci SMB3.1.1. Zlepšena výkonnost zápisu pro stránky o velikosti 64KB při zapnutí režimu cache=strict a použití verzí protokolu 2.1+.
    • FS EXT4 byla převedena z bmap a iopoll na využívání iomap.
    • V F2FS byla implementována volitelná podpora komprese dat pomocí algoritmu zstd. Výchozím algoritmem pro kompresi je LZ4. Byla přidána podpora příkazu „chattr -c commit“. Zajištěno zobrazení času připojení. Přidán ioctl F2FS_IOC_GET_COMPRESS_BLOCKS pro získání informací o počtu komprimovaných bloků. Byly přidány informace o kompresi, které se zobrazují přes statx.
    • Ve souborovém systému Ceph byla přidána možnost lokálního provádění operací vytváření a odstraňování (unlink) souboru bez čekání na odpověď od serveru (asynchronní režim). Tato změna například výrazně zvyšuje výkonnost při práci s utilitou rsync.
    • V OVERLAYFS byla přidána možnost použití virtiofs jako FS horní úrovně.
    • Přepsán kód procházení cest v VFS, přepracován kód pro analýzu symbolických odkazů a unifikován průchod bodů připojení.
    • V subsystému scsi mají neoprávnění uživatelé je povoleno možnost provádět příkazy ZBC.
    • V dm_writecache byla implementována byla přidána možnost postupného čištění cache na základě parametru max_age, který stanovuje maximální životnost bloku.
    • V dm_integrity byla přidána byla přidána podpora operace „discard“.
    • V null_blk byla přidána byla přidána podpora simulace chyb pro testování selhání.
    • Byla přidána možnost zasílání udev oznámení o změně velikosti blokového zařízení.
  • Síťová subsystém
    • V Netfilter byly zahrnuty změny, což významně urychluje zpracování velkých seznamů shod (nftables set), kde je třeba ověřit kombinaci podsítí, síťových portů, protokolu a MAC adres.
      Optimalizace byly provedeny V modulu nft_set_pipapo (PIle PAcket POlicies), který řeší úlohu přiřazení obsahu paketu k aplikačním pravidlům filtrování pomocí libovolných rozsahů stavů polí, jako jsou rozsahy IP a síťových portů (nft_set_rbtree a nft_set_hash manipulují s přiřazováním intervalů a přímým odrazem hodnot). Vektorová verze pipapo s instrukcemi AVX2 o šířce 256 bitů na systému s procesorem AMD Epyc 7402 vykázala nárůst výkonu o 420 % při analýze 30 000 záznamů zahrnujících kombinace port-protokol. Nárůst při přiřazení kombinace z podsítě a čísla portu při analýze 1 000 záznamů činil 87 % pro IPv4 a 128 % pro IPv6.
    • Přidáno Modul bareudp, který umožňuje enkapsulaci různých L3 protokolů, jako jsou MPLS, IP a NSH, do UDP tunelu.
    • Pokračovala integrace komponent MPTCP (MultiPath TCP), rozšíření protokolu TCP pro organizaci TCP spojení s doručováním paketů současně přes více tras různými síťovými rozhraními, která jsou přiřazena k různým IP adresám.
    • Byla přidána Podpora mechanismů hardwarového urychlení enkapsulace Ethernetových rámců v 802.11 (Wi-Fi).
    • Při přesunu zařízení z jednoho prostorového názvu síťového subsystému (network namespace) do jiného byla zajištěna korekce práv přístupu a vlastníka příslušných souborů v sysfs.
    • Byla poskytnuta možnost použití příznaku SO_BINDTODEVICE uživateli, kteří nemají práva root.
    • Byla přijata třetí část patchů, které převádějí nástroje 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 odesílání oznámení při změně stavu, zjednodušuje interakci mezi jádrem a uživatelským prostorem a zkracuje počet synchronizovaných pojmenovaných seznamů.
    • Byla přidána možnost využití speciálních hardwarových akcelerátorů pro provádění operací sledování připojení.
    • V netfilter přidán hook pro připojení klasifikátorů odchozích paketů (egress), který doplnil dříve přítomný hook pro příchozí pakety (ingress).
  • Virtualizace a bezpečnost
    • Byla přidána hardwarová implementace autentizace ukazatelů (Pointer Authentication), která používá specializované instrukce CPU ARM64 na ochranu proti útokům využívajícím techniky návratového programování (ROP), kdy se útočník nesnaží umístit svůj kód do paměti, ale manipuluje s existujícími částmi strojových instrukcí v načtených knihovnách, které končí instrukcí návratu řízení. Ochrana spočívá v použití digitálních podpisů k ověření návratových adres na úrovni jádra. Podpis je uložen v nevyužívaných horních bitech samotného ukazatele. Na rozdíl od softwarových řešení se vytváření a ověřování digitálních podpisů provádí pomocí speciálních instrukcí CPU.
    • Byla přidána možnost chránit paměťovou oblast před zápisem pomocí systémového volání userfaultfd(), určeného pro zpracování page faults (přístup k nealokovaným stránkám paměti) v uživatelské prostor. Myšlenka je využít userfaultfd() také k sledování porušení přístupu ke stránkám označeným jako chráněné před zápisem a k vyvolání obslužného programu, který může reagovat na takové pokusy o zápis (například k zpracování změn při vytváření živých snímků běžících procesů, zajištění stavu při odesílání dumpů paměti na disk, realizaci sdílené paměti, sledování změn v paměti). Funkčnost je ekvivalentní použití mprotect() v kombinaci s obslužným signálem SIGSEGV, ale funguje výrazně rychleji.
    • V SELinux byl zastaralý parametr „checkreqprot“, který umožnil vypnout kontrolu ochrany paměti při zpracování pravidel (umožňoval použití spustitelných oblastí paměti bez ohledu na nařízení uvedená v pravidlech). Symbolickým odkazům kernfs bylo povoleno zdědit kontext rodičovských adresářů.
    • Složení bylo zapnuto modul KRSI, který umožňuje př attaching BPF programy k jakýmkoli LSM háčkům v jádře. Změna umožňuje vytvářet LSM moduly (Linux Security Module) ve formě BPF programů pro účely auditu a mandatorního řízení přístupu.
    • Bylo provedeno optimalizace výkonu /dev/random díky dávkovému přenosu hodnot CRNG namísto jednotlivého volání instrukcí RNG. Zlepšena funkce getrandom a /dev/random na systémech ARM64, které poskytují instrukce RNG.
    • Implementace elliptické křivky Curve25519 byla nahrazena variantou z knihovny HACL, pro kterou byla podána matematické dokazování formální verifikace spolehlivosti.
    • Přidáno mechanismus informování o volných stránkách paměti. Pomocí tohoto mechanismu mohou hostitelské systémy zasílat hostitelské systém informace o stránkách, které již nejsou používány, a hostitelský systém může tyto stránky vrátit zpět.
    • Ve vfio/pci byla přidána podpora SR-IOV (Single-Root I/O Virtualization).
  • Paměť a systémové služby
    • Od 80 do 100 znaků zvýšeno omezení maximální délky řetězce v původních textech. Vyvíjejícím se však stále doporučuje držet se v mezích 80 znaků na řetězec, ale to nyní není přísný limit. Navíc, překročení limitu na velikost řetězce nyní povede k vypsání varování při sestavení pouze v případě, že je nástroj checkpatch spuštěn s možností „—strict“. Změna umožní neodvádět vývojáře od manipulace s mezerami a volněji se cítit při zarovnávání kódu, a také zabrání nadměrnému dělení řetězců, které překážejí vnímání kódu a vyhledávání.
    • Byla přidána podpora smíšeného režimu zavádění EFI, který umožňuje zavést 64bitové jádro z 32bitového firmware bez použití specializovaného zaváděče běžícího na 64bitovém CPU.
    • Byla zapnuta systém zjišťování a ladění rozdělených zámků („split lock„), které vznikají při přístupu k nevyrovnaným datům v paměti, protože při vykonávání atomární instrukce data překračují dvě linky CPU cache. Takové zámky vedou k výraznému poklesu výkonu (o 1000 cyklů pomalejší než atomární operace s daty, která padnou do jedné linky cache). V závislosti na zaváděcím parametru „split_lock_detect“ jádro může za běhu detekovat takové zámky a vypisovat varování nebo posílat signál SIGBUS aplikaci, která zámek vyvolala.
    • V plánovači úloh je zajištěno sledování ukazatelů teplotních senzorů (Thermal Pressure) a byl implementován monitoring přehřátí při přiřazování úloh. Na základě poskytovaných statistik může řídicí prvek teploty (thermal governor) upravovat maximální frekvenci CPU při přehřátí, a plánovač úloh nyní zohledňuje snížení výpočetního výkonu z důvodu takového snížení frekvence při plánování spuštění úloh (dříve plánovač reagoval na změnu frekvence s určitým zpožděním, nějakou dobu činil rozhodnutí na základě nadhodnocených předpokladů o dostupných výpočetních zdrojích).
    • V plánovači úloh jsou zapojeny invariantní ukazatele sledování zátěže, které umožňují správně hodnotit zátěž, bez ohledu na aktuální frekvenci CPU. Změna umožňuje přesněji prognózovat chování úloh za podmínek dynamických změn napětí a frekvence CPU. Například úloha, která spotřebovávala 1/3 zdrojů CPU při frekvenci 1000 MHz, začne spotřebovávat 2/3 zdrojů při snížení frekvence na 500 MHz, což dříve vytvářelo falešný dojem o provozu na plnou kapacitu (tj. úlohy pro plánovač se zdály být větší pouze kvůli snížení frekvence, což vedlo k přijetí nesprávných rozhodnutí v schedutil cpufreq governor).
    • Ovladač Intel P-state, zodpovědný za výběr režimů výkonu, byl převeden na použití schedutil.
    • Byla implementována možnost využití subsystému BPF při provozu jádra v reálném čase (PREEMPT_RT). Dříve bylo při aktivaci PREEMPT_RT nařízeno vypnout BPF.
    • Přidán nový typ BPF programů — BPF_MODIFY_RETURN, které lze připojit k funkcím v jádře a měnit vracenou hodnotu této funkce.
    • Byla přidána možnost použití systémového volání clone3() pro vytváření procesu v cgroup, která se liší od základního cgroup, což umožňuje rodičovskému procesu uplatnit omezení a zahrnout účetnictví hned po vytvoření nového procesu nebo vlákna. Například správce služeb může přímo vyčlenit nové služby do samostatných cgroup, a nové procesy umístěné do „zmrazených“ cgroup budou okamžitě pozastaveny.
    • v Kbuild byla přidána podpora proměnné prostředí „LLVM=1“ pro přepnutí na nástroje Clang/LLVM při sestavení jádra. Zvednuty požadavky na verzi binutils (2.23).
    • Do debugfs byla přidána sekce /sys/kernel/debug/kunit/ s výsledky testů kunit.
    • Byl přidán parametr načítání jádra pm_debug_messages (analog /sys/power/pm_debug_messages), který zahrnuje výstup ladicích informací o práci systému řízení napájení (užitečné při ladění problémů s režimy spánku a čekání).
    • Do rozhraní asynchronního vstupu/výstupu io_uring byla přidána podpora splice() a atomární výběr bufferů.
    • Zlepšeno profilování cgroup pomocí nástroje perf. Dříve mohl perf profilovat úkoly pouze v určité cgroup a nemohl zjistit, k jaké cgroup patří aktuální vzorek. Nyní perf získává informace o cgroup pro každý vzorek, což umožňuje profilovat více než jednu cgroup a aplikovat třídění podle
      cgroup v zprávách.
    • V cgroupfs, pseudo-FS pro správu cgroups, byla přidána podpora rozšířených atributů (xattrs), pomocí kterých lze například ponechat další informace pro zpracovatele ve uživatelském prostoru.
    • V cgroup memory controller přidánbyla přidána podpora rekurzivní ochrany hodnoty „memory.low“, regulující minimální objem operační paměti poskytované účastníkům skupiny. Při připojení hierarchie cgroup s možností „memory_recursiveprot“ bude hodnota „memory.low“, která je nastavena pro spodní uzly, automaticky distribuována pro všechny podřízené uzly.
    • Přidáno framework 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 byla implementována funkce horkého vyjmutí paměti.
    • Pro architekturu RISC-V byla přidána podpora horkého připojení a vyjmutí CPU (CPU hotplug). Pro 32bitové RISC-V byl implementován eBPF JIT.
    • Byla odstraněna možnost použití 32bitových ARM systémů pro spuštění hostitelských prostředí KVM.
    • Byla odstraněna „fiktivní“ implementace NUMA pro architekturu s390, pro kterou nebyly nalezeny scénáře použití, které by vedly ke zvýšení výkonu.
    • Pro ARM64 byla přidána podpora rozšíření AMU (Activity Monitors Unit), definovaného v ARMv8.4 a poskytujícího výkonnostní proctery, které jsou využity pro výpočet koeficientů úpravy škálování frekvence v plánovači úloh.
  • Hardware
    • Byla přidána podpora zařízení vDPA, která používají datový kanál odpovídající specifikacím virtio. vDPA zařízení mohou být fyzicky připojeným zařízeními nebo emulovanými softwarovými virtuálními zařízeními.
    • V subsystému GPIO se objevila nový příkaz ioctl() pro sledování změn, který umožňuje informovat proces o změně stavu jakékoliv řady GPIO. Jako příklad použití nového příkazu navržena nástroj gpio-watch.
    • V DRM ovladači i915 pro grafické karty Intel je zahrnuta výchozí podpora čipů Tigerlake („Gen12“) a byla přidána počáteční podpora řízení podsvícení OLED. Zlepšena podpora čipů Ice Lake, Elkhart Lake, Baytrail a Haswell.
    • V ovladači amdgpu byla přidána možnost nahrávání firmwaru do čipu USBC pro ASIC. Zlepšena podpora čipů AMD Ryzen 4000 „Renoir“. Přidána podpora pro řízení OLED panelů. Zajištěno zobrazování stavu firmwaru v debugfs.
    • V DRM ovladači vmwgfx pro virtuální systémy VMware byla přidána možnost použití OpenGL 4 v hostujících systémech (dříve byla podporována OpenGL 3.3).
    • Byl přidán nový DRM ovladač tidss pro zobrazovací systém platformy TI Keystone.
    • Byly přidány ovladače pro LCD panely: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101II01D-CT, Frida FRD350H54004.
    • V systému řízení napájení byla přidána podpora platformy Intel Jasper Lake (JSL) na bázi Atom.
    • Byla přidána podpora notebooku Pinebook Pro na bázi Rockchip RK3399, tabletu Pine64 PineTab a chytrého telefonu PinePhone na bázi Allwinner A64.
    • Byla přidána podpora nových audio kodeků a čipů:
      Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc.
    • Byla přidána podpora pro ARM desky a platformy Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron „sl28“, 11 variant desky i.MX6 TechNexion Pico, tři nové varianty Toradex Colibri, Samsung S7710 Galaxy Xcover 2 na bázi ST-Ericsson u8500, DH Electronics DHCOM SoM a PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster