Po dvou měsících vývoje vydal Linus Torvalds jádro. Linux 6.12. Mezi nejvýznamnější změny patří: možnost povolit režim Realtime, sched_ext pro vytváření plánovačů CPU pomocí eBPF, výstup QR kódu v nouzových situacích, mechanismus TCP paměti zařízení, mechanismus rezervace serverových zdrojů SCHED_DEADLINE, vylepšení plánovače úloh EEVDF, modul IPE pro nastavení politik integrity.
Nová verze obsahuje 14607 2167 oprav od 37 13087 vývojářů, velikost opravy je 507913 MB (změny se dotkly 234083 15130 souborů, bylo přidáno 2078 85 řádků kódu, smazáno 6.10 41 řádků). Poslední vydání mělo 45 6.12 oprav od 12 13 vývojářů, velikost opravy byla 6 MB (v jádře 3 byla velikost opravy XNUMX MB). Přibližně XNUMX % všech změn zavedených v XNUMX souvisí s ovladači zařízení, přibližně XNUMX % změn souvisí s aktualizací kódu specifického pro hardwarové architektury, XNUMX % se týká síťového zásobníku, XNUMX % se týká souborových systémů a XNUMX % souvisí s vnitřními subsystémy jádra.
Klíčové inovace v jádře 6.12:
- Paměťové a systémové služby
- Nyní je k dispozici možnost sestavit jádro s volbou PREEMPT_RT bez dalších záplat pro provoz v reálném čase. Poslední chybějící funkcí jádra, která bránila povolení režimu PREEMPT_RT, byla podpora neblokujícího atomického výstupu pomocí funkce printk, která je také součástí jádra. Podpora PREEMPT_RT je k dispozici pro architektury x86, x86_64, ARM64 a RISC-V. Doposud byla implementace režimu PREEMPT_RT poskytována formou externích záplat, které některé distribuce, jako například RHEL, SUSE a... Ubuntu, vytvořili samostatné edice svých produktů v reálném čase, které jsou žádané v oblastech, jako jsou finanční systémy, zařízení pro zpracování zvuku a videa, letectví, medicína, robotika, telekomunikace a průmyslové systémy, kde je nutné zajistit předvídatelný čas zpracování událostí.
- Byl přidán mechanismus „sched_ext“ (SCX), který umožňuje použití eBPF k vytváření plánovačů CPU, které pokrývají prakticky všechny aspekty plánování úloh a alokace zdrojů CPU. Takové plánovače lze dynamicky načítat a spouštět v jádře. Linux в virtuální stroj eBPF. Mechanismus sched_ext zjednodušuje vytváření plánovačů specifických pro úlohy, umožňuje experimentování s různými technikami a strategiemi plánování a dovoluje rychlé vytváření funkčních prototypů a průběžnou výměnu plánovačů v produkčních infrastrukturách. Například pomocí sched_ext můžete vytvořit plánovač, který zohledňuje specifika konkrétní aplikace a dynamicky mění svou strategii plánování v závislosti na stavu systému a dalších faktorech.
- Složení zahrnuje zbývající část patchů nezbytných pro fungování serverového mechanismu SCHED_DEADLINE, který řeší problém nedostatečného využití zdrojů CPU běžnými úlohami, když je CPU monopolizováno úlohami s vysokou prioritou (v reálném čase). Aby se zabránilo monopolizaci CPU, jádro dříve používalo omezovací mechanismus v reálném čase, který se snažil vyhradit 5 % pro úlohy s nízkou prioritou, přičemž 95 % času zbylo na úlohy v reálném čase. Tento mechanismus zanechal mnoho přání, protože běžné úkoly v mnoha situacích nedostávaly dostatek procesorového času. Server SCHED_DEADLINE implementuje efektivnější mechanismus rezervace zdrojů.
- Byla 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. Při volbě dalšího procesu k provedení přenosu bere nový plánovač v úvahu procesy, které neobdržely dostatek procesorových zdrojů nebo získaly nezaslouženě velké množství procesorového času. V prvním případě je předání řízení procesu vynuceno a ve druhém naopak odloženo. Starý plánovač CFS používal heuristiku a jemné ladění k identifikaci procesů, které vyžadovaly zvláštní pozornost, zatímco nový plánovač je sleduje explicitněji a nevyžaduje jemné ladění. Očekává se, že EEVDF sníží zpoždění v úkolech, se kterými má CFS problémy s plánováním.
- V nouzovém obslužném programu jádra - DRM Panic, který využívá subsystém DRM (Direct Rendering Manager) k zobrazení vizuální zprávy ve stylu „modré obrazovky smrti“, možnost zobrazení loga a QR kódu se zprávou kmsg na obrazovce, když nastane nouzový stav. Protože se do QR kódu vejde pouze 2953 bajtů, je k dispozici možnost DRM_PANIC_SCREEN_QR_CODE_URL, ve které je sestava kmsg komprimována pomocí zlib a připojena jako parametr k adrese URL, což umožňuje přenos přibližně 40 7500 bajtů prostřednictvím QR kódu VXNUMX. Při sestavování balíčků s jádrem mohou distribuce nastavit základní URL pro URL, což jim umožní přejít na stránku pro nahlášení problému. Pro výběr formátu QR kódu je k dispozici nastavení DRM_PANIC_SCREEN_QR_VERSION.
- Přidána podpora pro ARM POE (Permission Overlay Extension), která umožňuje nastavit přístupová práva k oblastem paměti. Pomocí tohoto rozšíření lze na systémech s procesory ARM64 implementovat mechanismus Memory Protection Keys, který se používá k omezení přístupu ke stránkám paměti bez změny tabulky stránek paměti.
- Pro architektury Loongarch, ARM64, PowerPC a s390 byla přesunuta implementace systémového volání getrandom() optimalizovaná pomocí mechanismu vDSO (virtual dynamic shared object), který umožňuje přesunout obsluhu systémového volání z jádra na uživatelský prostor a vyvarujte se přepínání kontextu. Optimalizace umožňuje urychlit generování náhodných čísel až 15x.
- Do asynchronního vstupního/výstupního subsystému io_uring byla přidána možnost používat absolutní časové limity, spouštěné při dosažení určitého času na systémových hodinách (dříve bylo možné nastavit pouze relativní časové limity, které udávaly trvání od začátku operace ).
- Přidány soubory pro generování vazeb pro knihovnu libcpupower pomocí SWIG toolkitu, který umožňuje generovat vazby z kódu C/C++ pro různé programovací jazyky. Vazby vám umožňují vytvářet skripty v Pythonu a dalších jazycích a používat je k rozšíření funkčnosti knihovny libcpupower, která poskytuje API pro správu cpufreq a ovladačů z uživatelského prostoru.
- Obslužný program cpuidle zobrazuje hodnotu „rezidence“ v klidovém stavu, která se používá pro systémy v reálném čase a bere v úvahu minimální dobu, po kterou musí být procesor nečinný, aby ospravedlnil energetické náklady na přechod do tohoto stavu a z něj.
- Přidána možnost použití kompilátoru Clang k sestavení standardní knihovny jazyka C nolibc, která je součástí zdrojového kódu jádra. Linux a poskytuje obal kolem základních systémových volání. Při sestavování nolibc v Clangu je povolena optimalizace link-time (LTO).
- Některá rozhraní cgroup1 byla zastaralá, jako je účtování TCP, soft limit verze XNUMX a správa vyčerpání paměti. Podpora těchto funkcí zatím zůstává v plném rozsahu a varování je věnováno prostudování počtu uživatelů, kteří tyto funkce nadále používají.
- Přidána možnost konfigurovat vyrovnávací paměť pro trasování kruhu pro ukládání nashromážděných dat po restartu, což vám umožní neztratit nashromážděné informace o ladění v případě pádu jádra. Data jsou uložena v paměti. Povolení se provádí pomocí parametru příkazového řádku jádra trace_instance, například nastavením „trace_instance=boot_map@0x285400000:12M“ se vyhradí 12 MB paměti na 0x285400000 pro vyrovnávací paměť „boot_map“, která bude přístupná prostřednictvím souboru /sys/kernel /tracing/instances/boot_map.
- Pokračování migrace změn z verze Rust for branchLinux, související s použitím Rustu jako druhého jazyka pro vývoj ovladačů a modulů jádra (podpora Rustu není ve výchozím nastavení aktivní a nezahrnuje Rust mezi požadované závislosti jádra při sestavení). Přidány moduly 'list' a 'rbtree' pro práci s dvojitě propojenými seznamy a červeno-černými vyhledávacími stromy. Rozšířeny možnosti modulů 'init', 'sync', 'types' a 'error'. Byla přidána možnost použití kódu Rust při sestavování jádra s ochranou proti útokům Spectre (volby MITIGATION_{RETHUNK,RETPOLINE,SLS}), použití ladicího systému KASAN, ochranných mechanismů kCFI (kernel Control Flow Integrity) a Shadow Call a při použití dalších pluginů GCC. Byl přidán ovladač pro ethernetový kontrolér Applied Micro QT2025 PHY, napsaný v Rustu. Byla připravena samostatná webová stránka s dokumentací: rust.docs.kernel.org.
- Do zdrojového kódu jádra byl přidán nástroj xdrgen pro převod specifikací XDR (eXternal Data Representation) do funkcí kódování a dekódování XDR napsaných ve stylu jazyka C, který jádro používá. Linux.
- Jádro bylo upraveno tak, aby implementovalo mechanismus maskování ukazatelů, aby se snížil počet pomalých volání bariéry_nospec() v 64bitové funkci copy_from_user() používané ke kopírování dat do jádra z uživatelského prostoru. Použití maskování zrychluje test „per_thread_ops“, který vyhodnocuje počet operací, které lze provést v jednom vlákně, o 2.6 %.
- Byl přidán nový ovladač USB, který vám umožňuje používat protokol 9pfs jako přenos pro odesílání a přijímání dat ze zařízení USB při připojení systému souborů 9p přes USB (například „mount -t 9p -o trans=usbg, aname=/cesta/k/fs /mnt/9"). Příkladem použití nového ovladače je jeho použití místo NFS k organizaci spouštění kořenového oddílu při vývoji vestavěných zařízení.
- Diskový subsystém, I/O a souborové systémy
- Do subsystému VFS byla přidána možnost pracovat s úložnými zařízeními, jejichž velikost bloku je větší než velikost stránky paměti v systému. V souborových systémech je tato funkce aktuálně podporována pouze v XFS.
- Subsystém FUSE, který umožňuje vytvářet implementace souborových systémů pracujících v uživatelském prostoru, přidal podporu pro mapování uživatelských identifikátorů připojených souborových systémů, které se používají ke spárování souborů konkrétního uživatele na připojeném cizím oddílu s jiným uživatelem na aktuálním systém.
- Byla implementována nová operace fcntl, F_CREATED_QUERY, která dává aplikaci možnost určit, zda byl soubor otevřený pomocí příznaku O_CREAT vytvořen nebo zda již dříve existoval.
- Do systémového volání name_to_handle_at() byla přidána možnost používat jedinečná 64bitová ID přípojných bodů, aby se zabránilo závodům při analýze /proc/mountinfo.
- Velikost „souborové“ struktury v jádře byla snížena z 232 na 184 bajtů, což snižuje spotřebu paměti na systémech, které aktivně pracují se soubory.
- Připojování souborových systémů k přípojným bodům v hierarchii /proc, jako je /proc/PID/fd, bylo zakázáno, což způsobilo potenciální bezpečnostní problémy.
- Pseudo-FS NSFS (NameSpace FS), používaný pro práci s jmennými prostory, poskytuje další informace o jmenných prostorech přípojných bodů.
- Souborový systém EROFS (Extendable Read-Only File System), navržený pro použití na oddílech pouze pro čtení, nyní podporuje připojování souborových systémů přímo z diskových obrazů uložených jako soubory.
- Do XFS byly přidány nové příkazy ioctl XFS_IOC_START_COMMIT a XFS_IOC_COMMIT_RANGE pro výměnu obsahu mezi dvěma soubory.
- NFS má přidánu podporu pro protokol „LOCALIO“, který umožňuje určit, zda klient a serveru NFS na stejném hostiteli, aby se umožnily odpovídající optimalizace.
- V souborovém systému Btrfs byly navrženy optimalizace výkonu, kód byl refaktorován, oblast zamykání rozsahu během operací čtení byla omezena, pokračovaly práce na převodu paměťových stránek pro použití stránkových folií a bylo automatické uvolňování paměti. implementováno pro strukturu btrfs_path.
- V souborovém systému Ext4 byly opraveny chyby související s alokací bloků, správou rozsahu, rychlým odevzdáním a žurnálováním.
- Virtualizace a bezpečnost
- Přidán modul IPE (Integrity Policy Enforcement) LSM, vyvinutý společností Microsoft za účelem rozšíření stávajícího systému povinného řízení přístupu. Modul umožňuje definovat obecnou politiku integrity pro celý systém s uvedením, které operace jsou povoleny a jak se má ověřovat pravost komponent. Pomocí IPE můžete například určit, které spustitelné soubory se mohou spouštět, přičemž je třeba vzít v úvahu jejich shodu s referenční verzí pomocí kryptografických hashů poskytovaných systémem dm-verity.
- Ve fázi kompilace jádra je možné samostatně povolit dostupné metody ochrany proti různým zranitelnostem třídy Spectre v CPU. Kconfig nabízí 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 zastaralých dat), MITIGATE_L1ATERprotectionability MITIGATE_L1ATERETBLE (ochrana proti zranitelnostem Retbleed), MITIGATE_SPECTRE_V1, MITIGATE_SPECTRE_V2 (ochrana proti zranitelnosti Spectre), MITIGATE_SRBDS (ochrana proti zranitelnosti Special Register Buffer Data Sampling), MITIGATE_SSB (ochrana proti Spekulativnímu obcházení úložiště).
- Přidána možnost příkazového řádku proc_mem.force_override a sada nastavení sestavení v Kconfig (PROC_MEM_FORCE_ALWAYS, PROC_MEM_FORCE_PTRACE a PROC_MEM_FORCE_NEVER), aby se zabránilo změnám paměti přes /proc/pid/mem.
- LSM subsystém (Linux bezpečnostní modul) byl přepnut na používání statických volání, což zlepšilo zabezpečení a výkon.
- Možnost použití standardních jader pro architekturu ARM64 v hostovaných prostředích běžících na Android-systémy s upraveným hypervizorem KVM (chráněný KVM).
- Modul Landlock LSM, který umožňuje omezit interakci skupiny procesů s vnějším prostředím, implementuje koncept „IPC scoping“ pro selektivní omezení interakce s prostředími sandbox pomocí Unixových soketů a signálů. Můžete například zakázat připojení pomocí soketů Unix z prostředí sandbox k procesům, které nemají aplikovanou izolaci, ale umožňují připojení k procesům ve stejném rozsahu.
- V hypervisoru KVM byl k CPUID pro hostované systémy přidán příznak indikující podporu rozšíření AVX10.1.
- Síťový subsystém
- Byl přidán mechanismus Device Memory TCP, který umožňuje použití síťových soketů k přímému odesílání obsahu paměti periferních zařízení po síti (režim nulového kopírování) a přímému umístění obsahu síťových paketů do oblasti paměti zařízení na strana příjemce. Data přenášená v paketech jsou přenášena ze síťové karty do paměti periferního zařízení nebo z paměti zařízení na síťovou kartu přímo, obchází CPU a hlavičky paketů končí v běžných vyrovnávací paměti jádra.
- Možnosti mnoha ethernetových a bezdrátových ovladačů byly rozšířeny. Například ovladač Intel iwlwifi přidal podporu pro přesun operací RLC/SMPS na stranu firmwaru, ovladač RealTek rtw89 zvýšil výkon a přidal podporu pro čipy RTL8852BT/8852BE-VT (WiFi 6), ovladač microchip Ethernet přidal podporu pro IEEE 802.3 Specifikace bw (100BASE) -T1) a IEEE 802.3bp, implementace virtuálního Ethernetu Microsoft vNIC a IBM veth byly vylepšeny. 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 doručování TCP paketů současně po několika trasách přes různá síťová rozhraní, je velikost vah používaných při směrování zvýšena z 8 na 16 bitů. Implementována detekce ztraceného (blackhole) provozu a pozastavení na nějakou dobu pokusů o navázání spojení se systémy vedoucí ke ztrátě provozu.
- Pro IPv6 je implementována podpora pro příznak „p“ v PIO (možnost informací o prefixu), který se používá v reklamách RA (reklamy směrovače IPv6) k výběru modelu nasazení klienta prostřednictvím DHCPv6-PD (DHCPv6 Prefix Delegation, RFC9663) namísto přiřazení jednotlivé adresy na základě prefixů pomocí SLAAC (Stateless Address Autoconfiguration). IPv6 IOAM6 přidává podporu pro nový režim zapouzdření tunsrc, který umožňuje lepší výkon.
- Vylepšený výkon pro zpracování paketů řízení IPsec.
- Vylepšený výkon splachování velkých sad pravidel nftables. nfnetlink_queue má vylepšenou podporu pro protokol SCTP.
- Ethtool API přidalo podporu pro vazbu více síťových karet na jedno síťové rozhraní.
- Оборудование
- V ovladači AMDGPU pokračují práce na implementaci podpory pro GPU AMD RDNA4 („GFX12“). Přidána možnost resetovat jednotlivé fronty úloh bez resetování celého GPU.
- Pokračovaly práce na ovladači Xe drm (Direct Rendering Manager) pro GPU založené na architektuře Intel Xe, který se používá ve grafických kartách a integrovaných grafikách rodiny Intel Arc, počínaje procesory Tiger Lake. Nová verze obsahuje podporu pro GPU založené na mikroarchitekturách Battlemage a Lunar Lake. Byla zavedena podpora modifikátorů CCS (Color Control Surface) Xe2 pro ovládání parametrů integrovaných a diskrétních GPU.
- Ovladač i915 implementuje možnost výstupu informací o rychlosti ventilátoru přes rozhraní HWMON nebo sysfs (atribut „fan1_input“). Parametr "i915.modeset" byl zastaralý a měl by se používat parametr "i915.nomodeset" místo "i0.modeset=915".
- Přidána podpora pro GPU A615, A306 a A621 do ovladače msm DRM (Qualcomm Adreno GPU).
- Ovladač Nouveau nechal přepracovat a vyčistit vnitřní struktury.
- Ovladač intel_pstate, který řídí parametry spotřeby energie (P-state) na systémech s procesory Intel, přidal podporu pro hybridní systémy s asymetrickými (různými charakteristikami) CPU a také podporu pro správu napájení procesorů založených na Granite Rapids a Sierra Forest. mikroarchitektury. Přidána podpora pro Xeon Granite Rapids CPU do ovladače intel_idle. Ovladač intel_rapl zajišťuje rozpoznání procesů rodiny AMD 1Ah a procesorů Intel ArrowLake-U.
- Pokračující začleňování změn na podporu ARM SoC Snapdragon X Elite, který používá vlastní 12jádrový procesor Oryon od Qualcommu a GPU Qualcomm Adreno. Čip je zaměřen na použití v noteboocích a počítačích a v mnoha testech výkonu je před čipy Apple M3 a Intel Core Ultra 155H.
- Přidána podpora pro ARM desky, SoC a zařízení: Broadcom bcm2712 (Raspberry Pi 5), Renesas R9A09G057 (RZ/V2H), Qualcomm Snapdragon 414 (MSM8929), Lenovo ThinkPad T14s Gen 6, Lenovo A6000/A6010RG La7XXSP , Lenovo A35/A30RG LaXXSP 4, , Firefly Core-PX68-JD433, Lunzn Farrhino R2S, Aspeed Riser, AGX Orin, Rockchip Qnap-TS920, Huashan Pi, Meta Catalina, BeagleY-AI, NanoPi R2002S Plus, ExynosAuto v5332, SOPHGO SG4h IP815, LG5, G35 ), Cool Pi CM11 GenBook, Anbernic RG93XXSP, GameForce Ace, IBM P6, Kontron i.MXXNUMX OSM-S, NanoPC-TXNUMX
- Přidána podpora obrazovkových panelů Anbernic RG28XX, On Tat Industrial Company KD50G21-40NT-A1, Innolux G070ACE-LH3, Melfas lmfbx101117480, Densitron DMT028VGHMCMI-1D, Microchip AC40T08OTN116X02.3 B116AU06.1 116XAT04.1, BOE TV101WUM -LL2, BOE NV140WUM-N41, BOE NV133WUM-N63, BOE NV116WHM-A4D, BOE NE140WUM-N6G, CMN N116BCA-EA2, CMN N116BCP-EA2, CS601 MNB.1LS
- Audio subsystém přidal podporu pro čipy a kodeky RME Digiface USB, AMD ACP 7.1, Mediatek MT6367, MT8365, Realtek RTL1320, C-Media CM9825. Staré zvukové ovladače pro Intel ASoC byly prohlášeny za zastaralé a doporučuje se místo nich používat ovladače AVS. V ovladači SoundWire bylo provedeno mnoho vylepšení.
Zdroj: opennet.ru
