Vydání jádra Linux 5.9

Po dvou měsících vývoje Linus Torvalds představil jádrný release Linux 5.9. Mezi nejvýznamnější změny patří: omezení importu symbolů z proprietárních modulů do GPL modulů, zrychlení operací přepínání kontextu pomocí procesorové instrukce FSGSBASE, podpora komprese jádra pomocí Zstd, přepracování priorit pro vlákna v jádře, podpora protokolu PRP (Parallel Redundancy Protocol), plánování s ohledem na propustnost v plánovači deadline, prediktivní balení stránek paměti, capability-flag CAP_CHECKPOINT_RESTOR, systémové volání close_range(), zvýšení výkonu dm-crypt, odstranění kódu pro 32bitové hostitelské systémy Xen PV, nový mechanismus správy paměti slab, volba „rescue“ v Btrfs, podpora inline šifrování v ext4 a F2FS.

Do nové verze bylo zahrnuto 16074 oprav od 2011 vývojářů,
velikost patche je 62 MB (změny se dotkly 14548 souborů, přidáno 782155 řádků kódu, odstraněno 314792 řádků). Přibližně 45 % všech změn v 5.9
se týká ovladačů zařízení, přibližně 15 % změn má
vztah k aktualizaci kódu specifického pro hardwarové architektury, 13 %
se týká síťového zásobníku, 3 % – souborových systémů a 3 % s vnitřními
podsystemy jádra.

Hlavní novinky:

  • Paměť a systémové služby
    • Zesílena ochrana před používáním GPL průhledů pro vazbu proprietárních ovladačů na komponenty jádra, které jsou exportovány pouze pro moduly licencované GPL. Flag TAINT_PROPRIETARY_MODULE se nyní dědí ve všech modulech, které importují symboly z modulů s tímto flagem. Pokud se GPL modul pokusí importovat symboly z ne-GPL modulu, tento GPL modul zdědí označení TAINT_PROPRIETARY_MODULE a nebude mít přístup k komponentům jádra, které jsou k dispozici pouze pro moduly licencované GPL, i když modul dříve importoval symboly z kategorie „gplonly“. Záporná blokace (export pouze EXPORT_SYMBOL_GPL v modulech, které importovaly EXPORT_SYMBOL_GPL), která mohla narušit chod proprietárních ovladačů, nebyla implementována (dědí se pouze flag proprietárního modulu, ale ne GPL vázání).
    • Byla přidána podpora mechanismu kcompactd pro prediktivní balení stránek paměti v režimu na pozadí, který umožňuje zvýšit počet velkých stránek paměti dostupných pro jádro. Předběžné odhady ukazují, že sbalení na pozadí s minimálními režijními náklady může snížit latence při přidělování velkých stránek paměti (huge-page) 70-80krát ve srovnání s dříve používaným mechanismem sbalení aktivovaným na základě potřeby (on-demand). Pro stanovení hranic externí fragmentace, kterou zajistí kcompactd, byl přidán sysctl vm.compaction_proactiveness.
    • Byla přidána podpora komprese obrazu jádra za použití algoritmu Zstandard (zstd).
    • Pro systémy x86 byla implementována podpora procesorové instrukce FSGSBASE, která umožňuje číst a měnit obsah registrů FS/GS z prostorů uživatele. V jádře se FSGSBASE používá k urychlení operací přepínání kontextu tím, že se vynechají zbytečné zápisy MSR pro GSBASE, a v uživatelském prostoru umožňuje obejít se bez zbytečných systémových volání pro změnu FS/GS.
    • Přidáno parametr „allow_writes“, který umožňuje zakázat změny registrů MSR procesoru z prostorů uživatele a omezit přístup k obsahu těchto registrů operacemi čtení, protože změna MSR může způsobit problémy. Ve výchozím nastavení zápis zatím není zakázán a změna MSR se zaznamenává do protokolu, ale do budoucna se plánuje přepnout výchozí přístup do režimu pouze pro čtení.
    • Do rozhraní asynchronního vstupu/výstupu io_uring byla přidána plná podpora asynchronních operací buffered reading, které nevyžadují zapojení vláken jádra. Podpora zápisu se očekává v příštím vydání.
    • Ve plánovači I/O deadline bylo realizováno bylo plánování s ohledem na propustnost, které umožňuje dělat správná rozhodnutí na asymetrických systémech, jako jsou systémy ARM založené na architekturách DynamIQ a big.LITTLE, které kombinují v jednom čipu výkonná a méně výkonná energeticky efektivní jádra CPU. Zvláště nový režim umožňuje vyhnout se nesrovnalostem při plánování, kdy pomalé jádro CPU nemá dostatek prostředků, aby úkol splnilo v přiděleném čase.
    • Model spotřeby energie v jádře (Energy Model framework) nyní popisuje nezahrnuje pouze chování spotřeby energie CPU, ale pokrývá také periferní zařízení.
    • Byl zaveden systémový zásah close_range(), který umožňuje procesu současně uzavřít celý rozsah otevřených souborových descriptorů.
    • Z implementace textového terminálu a ovladače fbcon byl odstraněn kód, který poskytoval možnost programového rolování textu zpět (CONFIG_VGACON_SOFT_SCROLLBACK) více než na objem video paměti textového režimu VGA.
    • Přepracováno algoritmus přiřazování priorit pro vlákna uvnitř jádra. Nová varianta zajišťuje lepší konzistenci ve všech subsystémech jádra při přiřazování priorit pro úkoly reálného času.
    • Přidán sysctl sched_uclamp_util_min_rt_default pro správu parametrů nucení frekvence CPU pro úkoly reálného času (například lze za běhu měnit chování při vykonávání úkolů reálného času pro úsporu energie po přepnutí na napájení z baterie nebo na mobilních systémech).
    • Byla provedena příprava na realizaci podpory technologie Transparent Huge Pages v stránkovém cache.
    • V mechanismu fanotify byly implementovány nové příznaky FAN_REPORT_NAME a FAN_REPORT_DIR_FID pro předávání informací o rodičském jménu a unikátním identifikátoru FID při vzniku událostí vytváření, odstraňování nebo přemisťování prvků katalogu a s katalogy nesouvisejících objektů.
    • Pro cgroups realizováno nový kontroler přidělování paměti slab (slab memory controller), který se vyznačuje přenosem účtování slab z úrovně stránek paměti na úroveň objektů jádra, což umožňuje společné využívání slab-stránek v různých cgroup, místo vyčleňování jednotlivých cache slab pro každou cgroup. Navrhovaný přístup umožňuje zvýšit efektivitu využívání slab, o 30-45 % zkrátit velikost použité paměti pro slab, výrazně snížit celkovou spotřebu paměti jádrem a snížit fragmentaci paměti.
    • V zvukovém subsystému ALSA a USB-stacku, v souladu s nedávno přijatými doporučeními pro používání inkluzivní terminologie v jádře Linuxu, byla provedena očista nekorektních termínů. Kód byl očištěn od použití slov „slave“, „master“, „blacklist“ a „whitelist“.
  • Virtualizace a bezpečnost
    • Při sestavení jádra s použitím kompilátoru Clang se objevila možnost nastavení (CONFIG_INIT_STACK_ALL_ZERO) automatické inicializace nulovým hodnotem všech proměnných uložených na stacku (při sestavení je uvedeno „-ftrivial-auto-var-init=zero“).
    • V subsystému seccomp, při použití režimu kontroly procesu v uživatelském prostoru, byla přidána možnost nahrazování sledovaných procesů souborovými popisovači pro úplnou emulaci systémových volání, vedoucích ke vzniku souborových popisovačů. Tato funkčnost je žádaná v systémech izolovaných kontejnerů a realizacích sandboxu pro Chrome.
    • Pro architektury xtensa a csky byla přidána podpora omezování systémových volání pomocí subsystému seccomp. Pro xtensa byla navíc implementována podpora auditního mechanismu.
    • Přidáno nový capability-flag CAP_CHECKPOINT_RESTORE, umožňující bez předávání dalších privilegovaných oprávnění poskytnout přístup k funkcím spojeným s pozastavením a obnovením stavu procesů.
    • V GCC 11 byly implementovány všechny potřebné funkce pro
      ladicí nástroj KCSAN (Kernel Concurrency Sanitizer), určený pro dynamické odhalování závodních stavů uvnitř jádra. KCSAN může nyní být používán s jádry sestavenými v GCC.
    • Pro AMD Zen a novější modely CPU byla přidána podpora technologie P2PDMA, umožňující použití DMA pro přímý přenos dat mezi pamětmi dvou zařízení připojených k sběrnici PCI.
    • V dm-crypt byl přidán režim, který umožňuje snížit latence prováděním kryptografického zpracování dat bez použití pracovních front. Tento režim je také nezbytný pro správnou funkčnost s zónovanými blokovými zařízeními (zařízení s oblastmi, které musí být zapisovány sekvenčně s aktualizací celé skupiny bloků). Byla provedena práce na zvýšení propustnosti a snížení latencí v dm-crypt.
    • Byl odstraněn kód pro podporu 32bitových hostitelských systémů běžících v režimu paravirtualizace pod řízením hypervizoru Xen. Uživatelé těchto systémů by se měli přepnout na používání 64bitových jader v hostitelských prostředích nebo používat pro spuštění prostředí místo paravirtualizace (PV) režimy plné (HVM) nebo kombinované (PVH) virtualizace.
  • Diskový subsystém, vstup/výstup a souborové systémy
    • V souborovém systému Btrfs byla implementována byla přidána možnost montování „rescue“, která sjednocuje přístup ke všem ostatním možnostem pro obnovu. Byla odstraněna podpora možností „alloc_start“ a „subvolrootid“, byla prohlášena za zastaralou možnost „inode_cache“. Byla provedena optimalizace výkonu, zejména zrychlení provádění operací fsync(). Byla přidána možnost použití alternativních typů kontrolních součtů, které se liší od CRC32c.
    • Byla přidána možnost použití inline-šifrování (Inline Encryption) ve souborových systémech ext4 a F2FS, pro jehož aktivaci je určena montážní volba „inlinecrypt“. Režim inline-šifrování umožňuje využívat integrované mechanismy šifrování v řadiči disku, které provádějí transparentní šifrování a dešifrování vstupu/výstupu.
    • V XFS je zajištěno vyprázdnění inode (flush) v plně asynchronním režimu, který neblokuje procesy při provádění operace vyčištění paměti. Byl vyřešen dlouholetý problém s kvótami, kvůli kterému byly nesprávně sledovány varování o překročení měkkého limitu a omezeních na počet inode. Byla sjednocena implementace podpory DAX pro ext4 a xfs.
    • V Ext4 byla implementována předběžné načítání bitmap rozdělení bloků. V kombinaci s omezením skenování neinicializovaných skupin, optimalizace umožnila zkrátit čas montáže velmi velkých oddílů.
    • V F2FS přidán ioctl F2FS_IOC_SEC_TRIM_FILE, který umožňuje používat příkazy TRIM/discard pro fyzické vymazání určených dat v souboru, například pro odstranění klíčů přístupu bez zanechání zbytkových dat na disku.
      V F2FS také přidán nový režim sběru odpadu GC_URGENT_LOW, který pracuje agresivněji díky vyloučení některých kontrol stavu nečinnosti (idle) před spuštěním sběrače odpadu.
    • V bcache se velikost bucket_size pro extent rozšířila z 16 na 32 bitů v rámci přípravy na umožnění použití pro cache zónovaných zařízení.
    • Do subsystému SCSI byla přidána možnost využití inline-šifrování založeného na integrovaných prostředcích hardwarového šifrování poskytovaných UFS-řadiči (Universal Flash Storage).
    • Byl přidán nový parametr příkazového řádku jádra „debugfs“, který umožňuje řídit dostupnost stejnojmenného pseudo-FS.
    • V klientu NFSv4.2 byla zajištěna podpora rozšířených atributů souborů (xattr).
    • V dm-dust přidán rozhraní pro výpis všech zjištěný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 nastavení velikosti STRIPE-bloku.
    • Pro zařízení úložiště NVMe byla přidána podpora týmů pro zónování úložiště (ZNS, NVM Express Zoned Namespace), což umožňuje rozdělit prostor pro ukládání do zón tvořících skupiny bloků pro dokonalejší řízení umístění dat na úložišti.
  • Síťová subsystém
    • V Netfilter byla přidána možnost zamítnutí paketů ve fázi před kontrolou směrování (výraz REJECT nyní může být používán nejen v řetězcích INPUT, FORWARD a OUTPUT, ale také ve fázi PREROUTING pro icmp a tcp).
    • V nftables byla přidána možnost auditu událostí spojených se změnou konfigurace.
    • V nftables v API netlink byla přidána podpora anonymních řetězců, jejichž názvy jsou dynamicky přiřazovány jádrem. Při odstranění pravidla spojeného s anonymním řetězcem je automaticky odstraněn i samotný řetězec.
    • V BPF byla přidána podpora iterátorů pro procházení, filtrování a změnu prvků asociativních polí (mapy) bez kopírování dat do uživatelského prostoru. Iterátory lze používat pro TCP a UDP sockety, což umožňuje BPF programům procházet seznamy otevřených socketů a získávat z nich potřebné informace.
    • Byl přidán nový typ BPF programů BPF_PROG_TYPE_SK_LOOKUP, spuštěný ve chvíli, kdy jádro hledá vhodný naslouchající socket pro příchozí spojení. Pomocí takového BPF programu lze vytvářet zpracovatele, kteří rozhodují o tom, s jakým socketem by mělo být spojení spojeno, bez omezení rámcem systémového volání bind(). Například lze uspořádat vazbu jednoho socketu na rozsah adres nebo portů. Kromě toho byla do bpf_setsockopt() přidána podpora příznaku SO_KEEPALIVE a implementována možnost nastavování zpracovatelů BPF_CGROUP_INET_SOCK_RELEASE, volaných při uvolnění socketu.
    • Byla implementována podpora protokolu PRP (Parallel Redundancy Protocol), který umožňuje na bázi Ethernetu realizovat pro aplikace transparentní přepínání na záložní kanál v případě selhání jakýchkoli komponentů sítě.
    • Ve st stacku mac80211 byla přidána podpora čtyřfázového vyjednávání kanálu WPA/WPA2-PSK v režimu přístupového bodu.
    • Byla přidána možnost přepínání plánovače qdisc (queuing discipline) na standardní použití algoritmu řízení síťových front FQ-PIE (Flow Queue PIE), který je zaměřen na snížení negativního vlivu mezivrstvení paketu na okrajovém síťovém zařízení (bufferbloat) v sítích s kabelovými modemy.
    • Byly přidány nové funkce do MPTCP (MultiPath TCP), což jsou rozšíření protokolu TCP pro organizaci práce TCP spojení s doručováním paketů současně po několika trasách přes různé síťové rozhraní přidružené k různým IP adresám. Byla přidána podpora syn cookie, DATA_FIN, automatické nastavení bufferů, diagnostiky socketů a použití příznaků REUSEADDR, REUSEPORT a V6ONLY v setsockopt.
    • Pro virtuální tabulky směrování VRF (Virtual Routing and Forwarding), které umožňují organizaci práce několika směrovacích domén na jednom systému, byl implementován režim „strict“. V tomto režimu může být virtuální tabulka asociována pouze s tabulkou směrování, která není používána v jiných virtuálních tabulkách.
    • Ve bezdrátovém ovladači ath11k byla přidána podpora frekvence 6 GHz a spektrálního skenování.
  • Hardware
    • Byl odstraněn kód pro podporu architektury UniCore, vyvinuté v mikroprocesorovém centru Peking University a zahrnuté do jádra Linuxu v roce 2011. Tato architektura je od roku 2014 bez podpory a nemá podporu v GCC.
    • Pro architekturu RISC-V byla zavedena podpora kcov (debugfs rozhraní pro analýzu pokrytí jádrového kódu), kmemleak (systém pro odhalování úniků paměti), ochrany zásobníku, přechodových značek a tickless operací (nezávislá na signálech timeru multitasking).
    • Pro architekturu PowerPC byla implementována podpora front pro spinlock, což výrazně zlepšilo výkon v situacích konfliktu zámků.
    • Pro architektury ARM a ARM64 je standardně aktivován mechanismus úpravy frekvence procesoru schedutil (cpufreq governor), který pro rozhodování o změně frekvence přímo využívá informace od plánovače úloh a může okamžitě kontaktovat ovladače cpufreq pro okamžitou změnu frekvence, čímž okamžitě přizpůsobuje parametry práce CPU aktuálnímu zatížení.
    • Ve DRM ovladači i915 pro grafické karty Intel byla zahrnuta podpora čipů založených na mikroarchitektuře Rocket Lake a byla přidána počáteční podpora diskrétních karet Intel Xe DG1.
    • V ovladači amdgpu byla přidána počáteční podpora GPU AMD Navi 21 (Navy Flounder) a Navi 22 (Sienna Cichlid). Byla přidána podpora motorů pro zrychlení kódování a dekódování videa UVD/VCE pro GPU Southern Islands (Radeon HD 7000).
      Byla přidána vlastnost pro otáčení zobrazení o 90, 180 nebo 270 stupňů.

      Zajímavé je, že ovladač pro GPU AMD je největším ovladačem v jádře — má přibližně 2,71 milionu řádků kódu, což představuje asi 10 % celkové velikosti jádra (27,81 milionu řádků). Z toho 1,79 milionu řádků tvoří automaticky generované hlavičkové soubory s daty pro registry GPU, a C-kód zahrnuje 366 tisíc řádků (pro srovnání, ovladač Intel i915 zahrnuje 209 tisíc řádků, zatímco Nouveau — 149 tisíc).

    • V ovladači Nouveau byla přidána podpora snímkového ověřování integrity pomocí CRC (Cyclic Redundancy Checks) v grafických enginách GPU NVIDIA. Implementace je založena na dokumentaci poskytnuté společností NVIDIA.
    • Byly přidány ovladače pro LCD panely: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 a Xingbangda XBD599.
    • V zvukovém subsystému ALSA byla implementována podpora Intel Silent Stream (režim trvalého udržování napájení pro externí HDMI zařízení, aby se vyloučila prodleva při zahájení přehrávání) a nového zařízení pro ovládání podsvícení tlačítek aktivace mikrofonu a ztlumení zvuku, a také byla přidána podpora nového hardwaru, včetně ovladače Loongson 7A1000.
    • Byla přidána podpora ARM platforem, zařízení a platforem: 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, XA2 Plus a XA2 Ultra), Jetson Xavier NX, Amlogic WeTek Core2, Aspeed EthanolX, pět nových desek na základě 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.

Zároveň latinskoamerická Nadace svobodného softwaru vytvořila
varianta zcela svobodného jádra 5.9 — Linux-libre 5.9-gnu, očištěného od prvků firmwaru a ovladačů obsahujících nesvobodné komponenty nebo části kódu, jejichž použití je omezeno výrobcem. V nové verzi byla zakázána carga blobů v ovladačích pro WiFi rtw8821c a SoC MediaTek mt8183. Byl aktualizován kód pro čištění blobů v ovladačích a subsystémech Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) a x86 touchscreen.

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