Uvolnění jádra Linux 6.12 s podporou Realtime režimu

Po dvou měsících vývoje představil Linus Torvalds vydání jádra Linux 6.12. Mezi nejvýraznějšími změnami je možnost aktivace Realtime režimu, sched_ext pro vytváření plánovačů CPU pomocí eBPF, výstup QR kódu při havarijních stavech, mechanismus Device Memory TCP, mechanismus rezervování zdrojů SCHED_DEADLINE server, zlepšení plánovače úloh EEVDF a modul IPE pro stanovování politik zajištění integrity.

Nová verze obsahuje 14607 oprav od 2167 vývojářů, velikost patche je 37 MB (změny se dotkly 13087 souborů, přidáno 507913 řádků kódu, odstraněno 234083 řádků). V posledním vydání bylo 15130 oprav od 2078 vývojářů, velikost patche byla 85 MB (v jádře 6.10 byl patch velikosti 41 MB). Přibližně 45 % všech předložených změn v 6.12 se týká zařízení ovladačů, asi 12 % změn má vztah k aktualizaci kódu specifického pro hardwarové architektury, 13 % se týká síťového zásobníku, 6 % souborových systémů a 3 % vnitřních subsystémů jádra.

Hlavní novinky v jádře 6.12:

  • Paměť a systémové služby
    • Byla poskytnuta možnost sestavit jádro s volbou PREEMPT_RT bez dodatečných patchů pro práci v reálném čase. Poslední chybějící možnost v jádře, která neumožňovala aktivaci režimu PREEMPT_RT, byla podpora neblokující atomové výstupy prostřednictvím funkce printk, která byla rovněž přijata do jádra. Podpora PREEMPT_RT je dostupná pro architektury x86, x86_64, ARM64 a RISC-V. Dosud byla implementace režimu PREEMPT_RT dodávána ve formě externích patchů, na jejichž základě některé distribuce, jako je RHEL, SUSE a Ubuntu, vytvářely samostatné Realtime edice svých produktů, které jsou požadovány v oblastech, jako jsou finanční systémy, zařízení pro zpracování zvuku a videa, letectví, medicína, robotika, telekomunikační a průmyslové systémy, kde je třeba zajistit předvídatelný čas zpracování událostí.
    • Byl přidán mechanismus „sched_ext“ (SCX), který umožňuje používat eBPF pro vytváření plánovačů CPU, pokrývajících prakticky všechny aspekty plánování vykonávání úloh a rozdělování zdrojů CPU. Takové plánovače mohou být načítány dynamicky a vykonávány uvnitř jádra Linux v virtuálním stroji eBPF. Mechanismus sched_ext usnadňuje vytváření plánovačů specifických pro určité úkoly, umožňuje experimentovat s různými technikami a strategiemi plánování a také rychle vytvářet funkční prototypy a měnit plánovače za běhu v pracovních infrastrukturách. Například pomocí sched_ext lze vytvořit plánovač, který zohledňuje specifika určité aplikace a dynamicky mění strategii plánování jejího provádění v závislosti na stavu systému a dalších faktorech.
    • Systém zahrnuje zbývající část patchů potřebných pro práci mechanismu SCHED_DEADLINE server, který řeší problém s nedostatečným přidělováním CPU zdrojů běžným úlohám v podmínkách monopolizace CPU vysoce prioritními (realtime) úlohami. Aby se předešlo monopolizaci CPU, byl v jádře dříve používán mechanismus Real-time throttling, který se snažil rezervovat 5% pro nízko prioritní úlohy, přičemž 95% času bylo určeno pro realtime úlohy. Tento mechanismus zanechal mnoho přání, neboť běžné úlohy v mnoha situacích nedostávaly procesorový čas. SCHED_DEADLINE server implementuje efektivnější mechanismus rezervace zdrojů.
    • Dokončena integrace plánovače úloh EEVDF (Earliest Eligible Virtual Deadline First), který nahradil plánovač CFS (Completely Fair Scheduler), dodávaný od jádra 2.6.23. Nový plánovač při výběru dalšího procesu pro přenos vykonávání zohledňuje procesy, které nedostaly dostatečné procesorové zdroje nebo získaly nezákonně mnoho procesorového času. V prvním případě se vynucuje přenos řízení k procesu, zatímco ve druhém případě se odkládá. Starý plánovač CFS používal heuristiky a jemné úpravy k určení procesů vyžadujících zvláštní pozornost, zatímco nový plánovač je sleduje explicitněji a nevyžaduje jemné doladění. Předpokládá se, že EEVDF sníží zpoždění při vykonávání úloh, s nimiž měl CFS problémy s plánováním.
    • Do zpracovatele havarijních situací v jádře — DRM Panic, který využívá subsystém DRM (Direct Rendering Manager) k zobrazení přehledu ve stylu "modré obrazovky smrti", byla přidána možnost zobrazit na obrazovce logo a QR kód s přehledem kmsg při vzniku havarijního stavu. Vzhledem k tomu, že do QR kódu se vejde pouze 2953 bajtů, byla zavedena volba DRM_PANIC_SCREEN_QR_CODE_URL, při které je přehled kmsg komprimován pomocí zlib a připojen jako parametr k URL, což umožňuje přenést přes QR kód V40 přibližně 7500 bajtů. Při sestavování balíčků s jádrem mohou distribuce definovat základní odkaz pro URL, což umožňuje uspořádat přechod na stránku pro odeslání zprávy o problému. Pro výběr formátu QR kódu byla zavedena nastavení DRM_PANIC_SCREEN_QR_VERSION.
    • Byla přidána podpora rozšíření ARM POE (Permission Overlay Extension), které umožňuje nastavovat práva přístupu k oblastem paměti. Pomocí tohoto rozšíření na systémech s procesory ARM64 může být realizován mechanismus Memory Protection Keys, který se používá k omezení přístupu k stránkám paměti bez změny tabulky stránek paměti.
    • Pro architektury Loongarch, ARM64, PowerPC a s390 byla převedena implementace systémového volání getrandom(), optimalizovaná pomocí mechanismu vDSO (virtual dynamic shared object), který umožňuje přesunout zpracovatele systémového volání z jádra do prostoru uživatele a vyhnout se přepínání kontextu. Optimalizace umožňuje až 15násobné urychlení získávání náhodných čísel.
    • Do subsystému asynchronního vstupu/výstupu io_uring byla přidána možnost použití absolutních časových limitů, které se aktivují při dosažení určitého času na systémových hodinách (dříve mohly být nastavovány pouze relativní časové limity, ve kterých byla určena délka od začátku operace).
    • Byly přidány soubory pro generování bindingů pro knihovnu libcpupower pomocí nástroje SWIG, který umožňuje vytvářet bindingy z kódu v C/C++ pro různé programovací jazyky. Bindingy umožňují vytvářet skripty v Pythonu a dalších jazycích a používat je pro rozšíření funkcionality knihovny libcpupower, která poskytuje API pro řízení cpufreq a ovladačů z prostoru uživatele.
    • V utilitě cpuidle bylo implementováno zobrazení hodnoty stavu nečinnosti „residency“, používané pro realtime systémy, a to s ohledem na minimální čas, který musí procesor strávit v tomto stavu, aby ospravedlnil náklady na energii spojené s přechodem do tohoto stavu a následným návratem z něj.
    • Byla přidána podpora použití překladače Clang pro sestavení standardní C knihovny nolibc, která je součástí zdrojových textů jádra Linux a poskytuje obálku nad základními systémovými voláními. Při sestavování nolibc pomocí Clang je povoleno použití optimalizace v průběhu linkování (LTO).
    • Některé rozhraní cgroup1, jako je účtování TCP, první verze jemných limitů (soft limit) a správa vyčerpání volné paměti, byly označeny jako zastaralé. Podpora uvedených funkcí zatím zůstává plně zachována a varování bylo vydáno pro zjištění počtu uživatelů, kteří tyto možnosti stále používají.
    • Byla přidána možnost nastavení kruhového bufferu pro sledování, který uchovává nahromaděná data po restartu, což umožní neztratit nasbírané ladící informace v případě havárie jádra. Data jsou uchovávána v paměti. Aktivace se provádí pomocí příznaku příkazového řádku jádra trace_instance, například nastavení „trace_instance=boot_map@0x285400000:12M“ rezervuje 12 MB paměti na adrese 0x285400000 pro buffer „boot_map“, který bude přístupný prostřednictvím souboru /sys/kernel/tracing/instances/boot_map.
    • Pokračování přenosu změn z větve Rust-for-Linux týkajících se používání jazyka Rust jako druhého jazyka pro vývoj ovladačů a modulů jádra (podpora Rust není ve výchozím nastavení aktivní a nevede k zahrnutí Rustu mezi povinné závislosti pro kompilaci jádra). Přidány moduly 'list' a 'rbtree' pro práci s obousměrnými spojovými seznamy a červeno-černými vyhledávacími stromy (red-black tree). Byly rozšířeny funkce modulů 'init', 'sync', 'types' a 'error'. Umožněno použití kódu napsaného v Rustu při kompilaci jádra s ochranou proti útokům Spectre (možnosti MITIGATION_{RETHUNK, RETPOLINE, SLS}), použití ladicího systému KASAN, mechanismů ochrany kCFI (kernel Control Flow Integrity) a Shadow Call, a také při použití dalších pluginů GCC. Přidán ovladač pro Ethernetový řadič Applied Micro QT2025 PHY, napsaný v Rustu. Připraven samostatný web s dokumentací — rust.docs.kernel.org.
    • Do zdrojových textů jádra byla přidána utilita xdrgen pro převod XDR specifikací (eXternal Data Representation) na funkce pro kódování a dekódování XDR, napsané ve stylu C přijatém v jádru Linux.
    • Do jádra byla přijata změna s implementací mechanismu maskování ukazatelů pro snížení počtu pomalých volání barrier_nospec() v 64-bitové funkci copy_from_user(), která se používá pro kopírování dat do jádra z uživatelského prostoru. Použití maskování urychluje o 2,6 % průchod testem 'per_thread_ops', který hodnotí počet operací, které lze provést v jednom vlákně.
    • Byl přidán nový USB ovladač, který umožňuje použít protokol 9pfs jako transport pro přenos a příjem dat z USB zařízení, při připojení FS 9p přes USB (například 'mount -t 9p -o trans=usbg,aname=\/path\/to\/fs /mnt/9'). Jako příklad použití nového ovladače se uvádí jeho použití místo NFS pro organizaci zavádění kořenové části při vývoji vestavných zařízení.
  • Diskový subsystém, vstup/výstup a souborové systémy
    • Do subsystému VFS byla přidána možnost práce s úložnými zařízeními, jejichž velikost bloků je větší než velikost paměťové stránky v systému. V souborových systémech je tato možnost zatím podporována pouze v XFS.
    • Do subsystému FUSE, který umožňuje vytváření implementací souborových systémů pracujících v uživatelském prostoru, byla přidána podpora mapování identifikátorů uživatelů připojených souborových systémů, použitého k přiřazení souborů určitého uživatele na připojeném cizím oddíle k jinému uživateli v aktuálním systému.
    • Byla implementována nová fcntl operace F_CREATED_QUERY, která umožňuje aplikaci zjistit, zda byl soubor, otevřený pomocí příznaku O_CREAT, vytvořen, nebo zda již existoval předtím.
    • Do systémového volání name_to_handle_at() byla přidána možnost použití unikátních 64bitových identifikátorů bodů připojení pro vyloučení stavu závodu při analýze /proc/mountinfo.
    • Velikost struktury „file“ v jádře byla zkrácena z 232 na 184 bytů, což umožňuje snížit spotřebu paměti na systémech, které aktivně pracují se soubory.
    • Je zakázáno připojování souborových systémů k bodům připojení uvnitř hierarchie /proc, například do /proc/PID/fd, což vytvářelo potenciální bezpečnostní problémy.
    • V pseudo-FS NSFS (NameSpace FS), používané pro práci s prostory názvů, byla implementována možnost poskytování dodatečných informací o prostorech názvů bodů připojení.
    • Ve souborovém systému EROFS (Extendable Read-Only File System), který je určen k použití na oddílech přístupných pouze pro čtení, se objevila podpora připojení souborových systémů přímo z diskových obrazů uložených ve formě souborů.
    • V XFS byly přidány nové ioctl příkazy XFS_IOC_START_COMMIT a XFS_IOC_COMMIT_RANGE pro výměnu obsahu mezi dvěma soubory.
    • V NFS byla přidána podpora protokolu „LOCALIO“, který umožňuje určit, zda se klient a server NFS nacházejí na stejném hostiteli, aby se uskutečnily odpovídající optimalizace.
    • Ve souborovém systému Btrfs byly navrženy optimalizace výkonu, provedeno refaktoring kódu, zkrácena oblast zamykání extents při operacích čtení, pokračuje práce na přechodu na použití listů stránek paměti (page folios), byla implementována automatická uvolnění paměti pro strukturu btrfs_path.
    • Ve souborovém systému Ext4 byly odstraněny chyby spojené s alokací bloků, správou extentů, mechanismem „fast commit“ a žurnálováním.
  • Virtualizace a bezpečnost
    • Byl přidán modul LSM IPE (Integrity Policy Enforcement), vyvinutý společností Microsoft pro rozšíření stávajícího systému mandatorní správy přístupu. Modul umožňuje stanovit celkovou politiku zajištění integrity pro celý systém, která určuje, jaké operace jsou povolené a jakým způsobem by měly být ověřovány komponenty. Například pomocí IPE lze určit, které spustitelné soubory mohou být spouštěny s ohledem na ověření jejich shody s referenční verzí pomocí kryptografických hashů poskytovaných systémem dm-verity.
    • Ve fázi kompilace jádra byla zavedena možnost odděleného zapnutí dostupných metod ochrany proti různým zranitelnostem třídy Spectre v CPU. V Kconfig byly navrženy nové parametry: MITIGATE_MDS (ochrana proti zranitelnosti Microarchitectural Data Sampling), MITIGATE_TAA (ochrana proti zranitelnosti TSX Asynchronous Abort), MITIGATE_MMIO_STALE_DATA (ochrana proti zranitelnosti MMIO Stale Data), MITIGATE_L1TF (ochrana proti zranitelnosti L1 Terminal Fault), MITIGATE_RETBLEED (ochrana proti zranitelnosti Retbleed), MITIGATE_SPECTRE_V1, MITIGATE_SPECTRE_V2 (ochrana proti zranitelnostem Spectre), MITIGATE_SRBDS (ochrana proti zranitelnosti Special Register Buffer Data Sampling), MITIGATE_SSB (ochrana proti zranitelnosti Speculative Store Bypass).
    • Byl přidán parametr příkazového řádku proc_mem.force_override a sada konfiguračních nastavení v Kconfig (PROC_MEM_FORCE_ALWAYS, PROC_MEM_FORCE_PTRACE a PROC_MEM_FORCE_NEVER), která umožňují zakázat změnu paměti prostřednictvím /proc/pid/mem.
    • Podsystem LSM (Linux security module) byl převeden na používání statických volání, což posílilo bezpečnost a zvýšilo výkon.
    • Byla zajištěna možnost použití standardních jader pro architekturu ARM64 v hostitelských prostředích běžících na systémů Android s modifikovaným hypervizorem KVM (protected KVM).
    • V modulu LSM Landlock, který umožňuje omezit interakci skupiny procesů s externím prostředím, byla implementována koncepce „IPC scoping“ pro selektivní omezení interakce s sandboxovými prostředími pomocí Unixových socků a signálů. Například je možné zakázat vytváření spojení pomocí Unixových socků ze sandboxového prostředí s procesy, u kterých není použita izolace, ale povolit spojení s procesy ve stejné oblasí scope.
    • V hypervizoru KVM byl do CPUID pro hostitelské systémy přidán příznak, který signalizuje podporu rozšíření AVX10.1.
  • Síťová subsystém
    • Byl přidán mechanismus Device Memory TCP, který umožňuje využívání síťových soketů pro přímé odesílání obsahu paměti periferních zařízení přes síť (režim zero-copy) a přímé umístění obsahu síťových paketů do paměti zařízení na straně příjemce. Přenášená data v paketech se přenášejí přímo z síťové karty do paměti periferního zařízení, nebo z paměti zařízení do síťové karty, obcházejí CPU, zatímco hlavičky paketů končí v běžných jádrových bufferech.
    • Rozšířeny možnosti mnoha Ethernetových a bezdrátových ovladačů. Například, v ovladači Intel iwlwifi byla přidána podpora pro přesun operací RLC/SMPS na stranu firmwaru, v ovladači RealTek rtw89 byla zvýšena výkonnost a přidána podpora čipů RTL8852BT/8852BE-VT (WiFi 6), v Ethernetovém ovladači microchip byla přidána podpora specifikací IEEE 802.3bw (100BASE-T1) a IEEE 802.3bp, byly vylepšeny implementace virtuálních Ethernet Microsoft vNIC a IBM veth. Byly přidány nové ovladače pro Ethernetové čipy Realtek RTL9054, RTL9068, RTL9072, RTL9075, RTL9068, RTL9071 a Microchip LAN8650/1 10BASE-T1S MAC-PHY.
    • V MPTCP (MultiPath TCP), rozšíření protokolu TCP pro organizaci dodávky TCP paketů současně přes několik tras různými síťovými rozhraními, byl zvýšen velikost použitých váhových koeficientů při routování z 8 na 16 bitů. Byla implementována detekce ztraceného (blackhole) provozu a dočasné pozastavení pokusů o navázání spojení se systémy, které vedou ke ztrátě provozu.
    • Pro IPv6 byla implementována podpora příznaku „p“ v PIO (Prefix Information Option), používáném v oznámeních RA (IPv6 Router Advertisements) pro výběr modelu nasazení klientů prostřednictvím DHCPv6-PD (DHCPv6 Prefix Delegation, RFC9663) namísto přiřazení jednotlivých adres na základě prefixů s použitím SLAAC (Stateless Address Autoconfiguration). V IPv6 IOAM6 byla přidána podpora nového režimu enkapsulace tunsrc, což umožňuje dosáhnout vyšší výkonnosti.
    • Byla zvýšena výkonnost zpracování řídicích paketů IPsec.
    • Byla zvýšena výkonnost vymazání (flush) velkých sad pravidel nftables. V nfnetlink_queue byla vylepšena podpora protokolu SCTP.
    • V API ethtool byla přidána podpora pro přiřazení několika síťových karet k jednomu síťovému rozhraní.
  • Hardware
    • V ovladači AMDGPU byla pokračována práce na implementaci podpory GPU AMD RDNA4 („GFX12“). Byla přidána možnost vymazat jednotlivé fronty úloh bez vymazání stavu celého GPU.
    • Pokračuje práce na drm ovladači (Direct Rendering Manager) Xe pro GPU na bázi architektury Intel Xe, který se používá ve grafických kartách Intel rodiny Arc a integrované grafice, počínaje procesory Tiger Lake. Nová verze zahrnuje podporu GPU založených na mikroarchitekturách Battlemage a Lunar Lake. Představena byla podpora modifikátorů CCS (Color Control Surface) Xe2 pro řízení parametrů integrovaných a diskrétních GPU.
    • V ovladači i915 byla implementována možnost výstupu informací o rychlosti otáčení ventilátoru prostřednictvím rozhraní HWMON nebo sysfs (atribut „fan1_input“). Parametr „i915.modeset“ byl prohlášen za zastaralý, místo „i915.modeset=0“ by měl být použit parametr „i915.nomodeset“.
    • V DRM ovladači msm (GPU Qualcomm Adreno) byla přidána podpora GPU A615, A306 a A621.
    • V ovladači Nouveau došlo k přepracování a úklidu vnitřních struktur.
    • V ovladači intel_pstate, který spravuje parametry spotřeby energie (P-state) na systémech s procesory Intel, byla přidána podpora hybridních systémů s asymetrickými (lišícími se ve vlastnostech) CPU, a také podpora řízení spotřeby procesorů založených na mikroarchitekturách Granite Rapids a Sierra Forest. V ovladači intel_idle byla přidána podpora CPU Xeon Granite Rapids. V ovladači intel_rapl bylo zajištěno rozpoznání procesů AMD rodu 1Ah a procesorů Intel ArrowLake-U.
    • Pokračuje implementace změn pro podporu ARM SoC Snapdragon X Elite, ve kterém se nachází vlastní 12-jádrový CPU Qualcomm Oryon a GPU Qualcomm Adreno. Čip je cílen na používání v noteboocích a PC a v mnoha výkonnostních testech předčí čipy Apple M3 a Intel Core Ultra 155H.
    • Byla přidána podpora ARM platforem, SoC a zařízení: Broadcom bcm2712 (Raspberry Pi 5), Renesas R9A09G057 (RZ/V2H), Qualcomm Snapdragon 414 (MSM8929), Lenovo ThinkPad T14s Gen 6, Lenovo A6000/A6010, Surface Laptop 7, Anbernic RG35XXSP, Firefly Core-PX30-JD4, Lunzn Fastrhino R68S, Aspeed Riser, AGX Orin, Rockchip Qnap-TS433, Huashan Pi, Meta Catalina, BeagleY-AI, NanoPi R2S Plus, ExynosAuto v920, SOPHGO SG2002, Qualcomm IPQ5332, LG G4 (h815), Cool Pi CM5 GenBook, Anbernic RG35XXSP, GameForce Ace, IBM P11, Kontron i.MX93 OSM-S, NanoPC-T6.
    • Byla přidána podpora displejových panelů Anbernic RG28XX, On Tat Industrial Company KD50G21-40NT-A1, Innolux G070ACE-LH3, Melfas lmfbx101117480, Densitron DMT028VGHMCMI-1D, Microchip AC40T08A, AOU B116XTN02.3, AUO B116XAN06.1, AOU B116XAT04.1, BOE TV101WUM-LL2, BOE NV140WUM-N41, BOE NV133WUM-N63, BOE NV116WHM-A4D, BOE NE140WUM-N6G, CMN N116BCA-EA2, CMN N116BCP-EA2, CSW MNB601LS1-4, Starry er88577.
    • V zvukovém systému byla přidána podpora čipů a kodeků RME Digiface USB, AMD ACP 7.1, Mediatek MT6367, MT8365, Realtek RTL1320, C-Media CM9825. Staré zvukové ovladače pro ASoC Intel byly prohlášeny za zastaralé, místo kterých se doporučuje používat ovladače AVS. Bylo provedeno mnoho vylepšení v ovladači SoundWire.

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