Vydání jádra Linux 5.9

Po dvou měsících vývoje Linus Torvalds představen vydání jádra Linux 5.9. Mezi nejpozoruhodnější změny patří omezení importu symbolů z proprietárních modulů do modulů GPL, zrychlení operací přepínání kontextu pomocí instrukce procesoru FSGSBASE, podpora komprese obrazu jádra pomocí Zstd, přepracování priority vláken v jádře, podpora PRP (Parallel Redundancy Protocol) , plánování s ohledem na šířku pásma v plánovači uzávěrky, preemptivní balení stránek paměti, příznak schopnosti CAP_CHECKPOINT_RESTOR, systémové volání close_range(), vylepšení výkonu dm-crypt, odstranění kódu pro hosty 32bitového Xen PV, nová slabá paměť mechanismus správy, možnost „záchrana“ v Btrfs, podpora inline šifrování v ext4 a F2FS.

Nová verze obsahuje 16074 oprav od vývojářů z roku 2011,
velikost opravy - 62 MB (změny se dotkly 14548 souborů, bylo přidáno 782155 řádků kódu, smazáno 314792 řádků). Asi 45 % všech prezentovaných v 5.9
změny se týkají ovladačů zařízení, přibližně 15 % 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, 3 % na souborové systémy a 3 % na interní
subsystémy jádra.

hlavní inovace:

  • Paměťové a systémové služby
    • Utažené ochrana proti použití vrstev GPL pro propojení proprietárních ovladačů s komponentami jádra exportovanými pouze pro moduly pod licencí GPL. Příznak TAINT_PROPRIETARY_MODULE je nyní zděděn ve všech modulech, které importují symboly z modulů s tímto příznakem. Pokud se modul GPL pokusí importovat symboly z modulu bez GPL, pak tento modul GPL zdědí označení TAINT_PROPRIETARY_MODULE a nebude mít přístup ke komponentám jádra dostupným pouze pro moduly s licencí GPL, i když modul dříve importoval symboly z kategorii „gplonly“. Zpětný zámek (exportuje pouze EXPORT_SYMBOL_GPL v modulech, které importovaly EXPORT_SYMBOL_GPL), který by mohl přerušit práci proprietárních ovladačů, není implementován (dědí se pouze příznak proprietárního modulu, ale ne vazby GPL).
    • Přidal podpora motoru kcompactd pro předbalení stránek paměti na pozadí, aby se zvýšil počet velkých paměťových stránek dostupných jádru. Podle předběžných odhadů může balení na pozadí za cenu minimální režie zkrátit zpoždění při alokaci velkých stránek paměti (obrovská stránka) 70–80krát ve srovnání s dříve používaným balicím mechanismem, který se spouští v případě potřeby (na vyžádání ). Pro nastavení hranic externí fragmentace, kterou kcompactd poskytne, byl přidán sysctl vm.compaction_proactiveness.
    • Přidal podpora komprese obrazu jádra pomocí algoritmu zstandardní (zstd).
    • Pro systémy x86 byla implementována podpora pro instrukce procesoru FSGSBASE, který umožňuje číst a měnit obsah registrů FS/GS z uživatelského prostoru. V jádře se FSGSBASE používá k urychlení operací přepínání kontextu odstraněním zbytečných operací zápisu MSR pro GSBASE a v uživatelském prostoru se vyhne zbytečným systémovým voláním pro změnu FS/GS.
    • Přidat parametr „allow_writes“ umožňuje zakázat změny registrů MSR procesoru z uživatelského prostoru a omezit přístup k obsahu těchto registrů na operace čtení, protože změna MSR může vést k problémům. Ve výchozím nastavení ještě není zápis zakázán a změny MSR se projeví v protokolu, ale v budoucnu se plánuje přepnutí výchozího přístupu do režimu pouze pro čtení.
    • K asynchronnímu I/O rozhraní io_uring Přidána plná podpora pro asynchronní operace čtení s vyrovnávací pamětí, které nevyžadují vlákna jádra. Podpora nahrávání se očekává v budoucí verzi.
    • V termínu I/O plánovače implementováno plánování na základě kapacity, dovolující dělat správná rozhodnutí o asymetrických systémech, jako jsou systémy založené na ARM DynamIQ a big.LITTLE, které kombinují výkonná a méně efektivní energeticky úsporná CPU jádra v jednom čipu. Nový režim vám zejména umožňuje vyhnout se neshodám v plánování, když pomalé jádro CPU nemá správné prostředky k včasnému dokončení úkolu.
    • Model spotřeby energie v jádře (rámec energetického modelu) je nyní popisuje nejen chování při spotřebě CPU, ale také pokrývá periferní zařízení.
    • Systémové volání close_range() bylo implementováno, aby umožnilo procesu uzavřít celou řadu otevřených deskriptorů souborů najednou.
    • Z implementace textové konzole a ovladače fbcon kód odstraněn, který poskytuje možnost programově posouvat text zpět (CONFIG_VGACON_SOFT_SCROLLBACK) o více, než je množství video paměti VGA textového režimu.
    • Předělaný algoritmus pro přidělování priorit vláknům v jádře. Nová možnost poskytuje lepší konzistenci napříč všemi subsystémy jádra při přiřazování priorit úlohám v reálném čase.
    • Přidán sysctl sched_uclamp_util_min_rt_default pro ovládání nastavení zesílení CPU pro úlohy v reálném čase (například můžete měnit chování úloh v reálném čase za běhu, abyste šetřili energii po přepnutí na napájení z baterie nebo na mobilních systémech).
    • Byly provedeny přípravy na implementaci podpory technologie Transparent Huge Pages do mezipaměti stránek.
    • Modul fanotify implementuje nové příznaky FAN_REPORT_NAME a FAN_REPORT_DIR_FID pro hlášení nadřazeného jména a jedinečných informací FID, když dojde k událostem vytvoření, odstranění nebo přesunu položek adresáře a neadresářových objektů.
    • Pro cgroups implementováno nový řadič slab paměti, který je pozoruhodný tím, že přesouvá slab accounting z úrovně paměťových stránek na úroveň jaderných objektů, což umožňuje sdílet slab stránky v různých cgroups, namísto přidělování samostatných slab cache pro každou cgroup. Navrhovaný přístup umožňuje zvýšit efektivitu používání slab, snížit velikost paměti použité pro slab o 30-45 %, výrazně snížit celkovou spotřebu paměti jádra a snížit fragmentaci paměti.
    • Ve zvukovém subsystému ALSA и zásobník USB, v souladu s nedávno přijata doporučení ohledně používání inkluzivní terminologie v linuxovém jádře, byly očištěny politicky nekorektní termíny. Z kódu byla odstraněna slova „slave“, „master“, „blacklist“ a „whitelist“.
  • Virtualizace a bezpečnost
    • Při sestavování jádra pomocí kompilátoru Clang se objevil možnost konfigurovat (CONFIG_INIT_STACK_ALL_ZERO) automatickou inicializaci na nulu ze všech proměnných uložených v zásobníku (při sestavování zadejte „-ftrivial-auto-var-init=zero“).
    • V subsystému seccomp při použití režimu řízení procesu v uživatelském prostoru, přidal příležitost nahrazení deskriptorů souborů do sledovaného procesu pro plnou emulaci systémových volání, která vedou k vytvoření deskriptorů souborů. Funkce je požadována v izolovaných kontejnerových systémech a implementacích sandboxu pro Chrome.
    • Pro architektury xtensa a csky byla přidána podpora pro omezení systémových volání pomocí subsystému seccomp. Pro xtensa je navíc implementována podpora pro mechanismus auditu.
    • Přidat nový příznak schopnosti CAP_CHECKPOINT_RESTORE, který umožňuje poskytnout přístup ke schopnostem souvisejícím se zmrazením a obnovením stavu procesů bez přenosu dalších oprávnění.
    • GCC 11 poskytuje všechny funkce, které potřebujete
      ladicí nástroj KCSAN (Kernel Concurrency Sanitizer), určený k dynamické detekci rasových podmínek v jádře. Proto lze KCSAN nyní používat s jádry zabudovanými v GCC.

    • Pro modely AMD Zen a novější CPU přidal podpora technologie P2PDMA, která umožňuje využít DMA pro přímý přenos dat mezi pamětí dvou zařízení připojených na sběrnici PCI.
    • Do dm-crypt byl přidán režim, který umožňuje snížit latenci prováděním kryptografického zpracování dat bez použití pracovních front. Tento režim je také nezbytný pro správnou funkci s pásmový bloková zařízení (zařízení s oblastmi, které musí být zapsány sekvenčně, čímž se aktualizuje celá skupina bloků). Byla provedena práce na zvýšení propustnosti a snížení latence v dm-crypt.
    • Byl odstraněn kód pro podporu 32bitových hostů běžících v paravirtualizačním režimu s hypervizorem Xen. Uživatelé takových systémů by měli přejít na používání 64bitových jader v hostujících prostředích nebo používat režimy plné (HVM) nebo kombinované (PVH) virtualizace místo paravirtualizace (PV) ke spouštění prostředí.
  • Diskový subsystém, I/O a souborové systémy
    • Na souborovém systému Btrfs implementováno možnost „záchranného“ připojení, která sjednocuje přístup ke všem ostatním možnostem obnovy. Podpora pro volby "alloc_start" a "subvolrootid" byla odstraněna a volba "inode_cache" byla zastaralá. Byla provedena optimalizace výkonu, zejména znatelné zrychlení provádění operací fsync(). Přidal schopnost používat alternativní typy kontrolních součtů jiné než CRC32c.
    • Přidal schopnost používat inline šifrování (Inline Encryption) v souborových systémech ext4 a F2FS, pro umožnění je poskytována možnost připojení „inlinecrypt“. Režim inline šifrování vám umožňuje používat šifrovací mechanismy zabudované v řadiči disku, který transparentně šifruje a dešifruje vstup/výstup.
    • V XFS zajištěno reset inode (vyprázdnění) ve zcela asynchronním režimu, který neblokuje procesy při provádění operace čištění paměti. Vyřešen dlouhotrvající problém s kvótami, který způsoboval nesprávné sledování upozornění na měkký limit a limit inodů. Jednotná implementace podpory DAX pro ext4 a xfs.
    • V Ext4 implementováno předem načíst bitmapy alokace bloků. V kombinaci s omezením skenování neinicializovaných skupin optimalizace zkrátila čas potřebný k připojení velmi velkých oddílů.
    • V F2FS přidal ioctl F2FS_IOC_SEC_TRIM_FILE, který umožňuje používat příkazy TRIM/discard k fyzickému resetování specifikovaných dat v souboru, například k odstranění přístupových klíčů, aniž by na disku zůstala zbytková data.
      Ve F2FS také přidal nový režim garbage collection GC_URGENT_LOW, který pracuje agresivněji tím, že eliminuje některé kontroly nečinnosti před spuštěním garbage collector.

    • V bcache byla bucket_size pro rozsahy zvýšena z 16 na 32 bitů v rámci přípravy na povolení zónovaných mezipamětí zařízení.
    • Do subsystému SCSI byla přidána možnost používat inline šifrování založené na vestavěném hardwarovém šifrování poskytovaném řadiči UFS (Universal Flash Storage).
    • Byl přidán nový parametr příkazového řádku jádra „debugfs“, který vám umožňuje řídit dostupnost stejnojmenného pseudo-FS.
    • Klient NFSv4.2 poskytuje podporu pro rozšířené atributy souborů (xattr).
    • V dm-prach přidal rozhraní pro zobrazení seznamu všech identifikovaných vadných bloků na disku (“dmsetup message dust1 0 listbadblocks”).
    • Pro md/raid5 byl přidán parametr /sys/block/md1/md/stripe_size pro konfiguraci velikosti bloku STRIPE.
    • Pro úložná zařízení NVMe přidal podpora příkazů zónování disku (ZNS, NVM Express Zoned Namespace), která umožňuje rozdělit úložný prostor do zón, které tvoří skupiny bloků pro úplnější kontrolu nad umístěním dat na disku.
  • Síťový subsystém
    • V Netfilteru přidal možnost odmítnout pakety ve fázi před kontrolou směrování (výraz REJECT lze nyní použít nejen v řetězcích INPUT, FORWARD a OUTPUT, ale také ve fázi PREROUTING pro icmp a tcp).
    • V nftables přidal schopnost auditovat události související se změnami konfigurace.
    • V nftables v netlink API přidal podpora anonymních řetězců, jejichž název je přidělován dynamicky jádrem. Když odstraníte pravidlo přidružené k anonymnímu řetězci, řetězec samotný se automaticky odstraní.
    • BPF přidává podporu pro iterátory pro procházení, filtrování a úpravu prvků asociativních polí (map) bez kopírování dat do uživatelského prostoru. Iterátory lze použít pro sokety TCP a UDP, což umožňuje programům BPF iterovat seznamy otevřených soketů a extrahovat z nich informace, které potřebují.
    • Přidán nový typ BPF programu BPF_PROG_TYPE_SK_LOOKUP, který se spouští, když jádro hledá vhodný naslouchací socket pro příchozí spojení. Pomocí programu BPF, jako je tento, můžete vytvořit obslužné rutiny, které rozhodují o tom, ke kterému soketu by mělo být připojení spojeno, aniž byste byli omezováni systémovým voláním bind(). Můžete například přiřadit jeden soket k řadě adres nebo portů. Kromě toho byla do bpf_setsockopt() přidána podpora pro příznak SO_KEEPALIVE a byla implementována možnost instalovat obslužné rutiny BPF_CGROUP_INET_SOCK_RELEASE, které se volají při uvolnění soketu.
    • Implementována podpora protokolů PRP (Parallel Redundancy Protocol), který umožňuje přepínání na bázi Ethernetu na záložní kanál, transparentní pro aplikace, v případě selhání jakýchkoli síťových komponent.
    • Stack mac80211 přidal podpora čtyřfázového vyjednávání kanálu WPA/WPA2-PSK v režimu přístupového bodu.
    • Přidána možnost přepnout plánovač qdisc (disciplína ve frontě) tak, aby ve výchozím nastavení používal algoritmus správy front sítě FQ-PIE (Flow Queue PIE), jehož cílem je snížit negativní dopad ukládání do vyrovnávací paměti mezilehlých paketů na okrajová síťová zařízení (bufferbloat) v sítích s kabelové modemy.
    • Nové funkce byly přidány do 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. Přidána podpora pro syn cookie, DATA_FIN, automatické ladění vyrovnávací paměti, diagnostiku soketu a příznaky REUSEADDR, REUSEPORT a V6ONLY v setsockopt.
    • Pro virtuální směrovací tabulky VRF (Virtual Routing and Forwarding), které umožňují organizovat provoz několika směrovacích domén na jednom systému, byl implementován „strict“ režim. V tomto režimu může být virtuální tabulka spojena pouze se směrovací tabulkou, která se nepoužívá v jiných virtuálních tabulkách.
    • Bezdrátový ovladač je ath11k přidal podpora frekvence 6 GHz a spektrální skenování.
  • Оборудование
    • Odstraněný kód pro podporu architektury UniCore, vyvinutý v Centru mikroprocesorů Pekingské univerzity a zahrnutý do jádra Linuxu v roce 2011. Tato architektura je od roku 2014 neudržovaná a nemá žádnou podporu v GCC.
    • Byla implementována podpora architektury RISC-V kcov (rozhraní debugfs pro analýzu pokrytí kódem jádra), kmemleak (systém detekce úniku paměti), ochrana zásobníku, značky skoků a operace bez tiků (multitasking nezávislý na signálech časovače).
    • Pro architekturu PowerPC byla implementována podpora spinlockových front, což výrazně zlepšilo výkon v situacích konfliktu zámků.
    • U architektur ARM a ARM64 je mechanismus regulace frekvence procesoru ve výchozím nastavení povolen rozvrh (cpufreq governor), který přímo využívá informace z plánovače úloh k rozhodování o změně frekvence a může okamžitě přistupovat k ovladačům cpufreq pro rychlou změnu frekvence, čímž okamžitě přizpůsobuje provozní parametry CPU aktuální zátěži.
    • Ovladač i915 DRM pro grafické karty Intel obsahuje podporu pro čipy založené na mikroarchitektuře Raketové jezero a přidána počáteční podpora pro diskrétní karty Intel Xe DG1.
    • Ovladač Amdgpu přidal počáteční podporu pro GPU AMD Navi 21 (Navy Flounder) a Navi 22 (Cichlid Sienna). Přidána podpora pro akcelerační motory UVD/VCE video kódování a dekódování pro GPU Jižní ostrovy (Radeon HD 7000).
      Byla přidána vlastnost pro otočení displeje o 90, 180 nebo 270 stupňů.

      Zajímavostí je ovladač pro AMD GPU to je největší ovladač v jádře - má asi 2.71 milionů řádků kódu, což je přibližně 10 % celkové velikosti jádra (27.81 milionů řádků). 1.79 milionu řádků přitom připadá na automaticky generované hlavičkové soubory s daty pro registry GPU a kód C je 366 tisíc řádků (pro srovnání ovladač Intel i915 obsahuje 209 tisíc řádků a Nouveau - 149 tisíc).

    • In Nouveau řidič přidal podpora kontroly integrity snímek po snímku pomocí CRC (Cyclic Redundancy Checks) v zobrazovacích enginech NVIDIA GPU. Implementace je založena na dokumentaci poskytnuté společností NVIDIA.
    • Přidány ovladače pro LCD panely: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 a Xingbangda XBD599.
    • Podporuje audio subsystém ALSA Intel Silent Stream (režim nepřetržitého napájení pro externí zařízení HDMI pro eliminaci zpoždění při spuštění přehrávání) a nové zařízení pro ovládání podsvícení tlačítek pro aktivaci a ztlumení mikrofonu a také přidána podpora pro nové vybavení včetně ovladače Longson 7A1000.
    • Přidána podpora pro ARM desky, zařízení a platformy: Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1, ASUS Google Nexus 7, Acer Iconia Tab A500, Qualcomm Snapdragon SDM630 (používá se v Sony Xperia 10, 10 Plus, XA2, XA2A2 Plus Ultra), Jetson Xavier NX, Amlogic WeTek Core2, Aspeed EthanolX, pět nových desek založených na NXP i.MX6, MikroTik RouterBoard 3011, Xiaomi Libra, Microsoft Lumia 950, Sony Xperia Z5, MStar, Microchip Sparx5, Intel Keem Bay, Amazon Alpine v3, Renesas RZ/G2H.

Ve stejné době Latinská Amerika Free Software Foundation vytvořený
вариант zcela bezplatné jádro 5.9 - Linux-libre 5.9-gnu, zbavený prvků firmwaru a ovladače obsahujících proprietární komponenty nebo části kódu, jejichž rozsah je omezen výrobcem. Nová verze zakazuje načítání objektů blob v ovladačích pro WiFi rtw8821c a SoC MediaTek mt8183. Aktualizovaný kód čištění objektů blob v ovladačích a podsystémech Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) a dotykové obrazovce x86.

Zdroj: opennet.ru

Přidat komentář