Po dvoch mesiacoch vývoja vydal Linus Torvalds jadro. Linux 6.12. Medzi najvýznamnejšie zmeny patria: možnosť povoliť režim v reálnom čase, sched_ext na vytváranie plánovačov CPU prostredníctvom eBPF, výstup QR kódu v núdzových situáciách, mechanizmus TCP pamäte zariadenia, mechanizmus rezervácie zdrojov servera SCHED_DEADLINE, vylepšenie plánovača úloh EEVDF, modul IPE na nastavenie politík integrity.
Nová verzia obsahuje 14607 2167 opráv od 37 13087 vývojárov, veľkosť záplaty je 507913 MB (zmeny sa dotkli 234083 15130 súborov, pridaných 2078 85 riadkov kódu, vymazaných 6.10 41 riadkov). Posledné vydanie malo 45 6.12 opráv od 12 13 vývojárov, veľkosť záplaty bola 6 MB (v jadre 3 mala záplata veľkosť XNUMX MB). Približne XNUMX % všetkých zmien zavedených v XNUMX súvisí s ovládačmi zariadení, približne XNUMX % zmien súvisí s aktualizáciou kódu špecifického pre hardvérové architektúry, XNUMX % súvisí so sieťovým zásobníkom, XNUMX % súvisí so súborovými systémami a XNUMX % súvisia s internými subsystémami jadra.
Kľúčové inovácie v jadre 6.12:
- Pamäťové a systémové služby
- Teraz je k dispozícii možnosť zostaviť jadro s možnosťou PREEMPT_RT bez ďalších záplat pre prevádzku v reálnom čase. Poslednou chýbajúcou funkciou jadra, ktorá bránila povoleniu režimu PREEMPT_RT, bola podpora neblokujúceho atomického výstupu prostredníctvom funkcie printk, ktorá je tiež zahrnutá v jadre. Podpora PREEMPT_RT je k dispozícii pre architektúry x86, x86_64, ARM64 a RISC-V. Doteraz bola implementácia režimu PREEMPT_RT poskytovaná vo forme externých záplat, ktoré niektoré distribúcie, ako napríklad RHEL, SUSE a... Ubuntu, vytvorili samostatné edície svojich produktov v reálnom čase, ktoré sú žiadané v oblastiach ako finančné systémy, zariadenia na spracovanie zvuku a videa, letectvo, medicína, robotika, telekomunikácie a priemyselné systémy, v ktorých je potrebné zabezpečiť predvídateľný čas spracovania udalostí.
- Bol pridaný mechanizmus „sched_ext“ (SCX), ktorý umožňuje použitie eBPF na vytváranie plánovačov CPU, ktoré pokrývajú prakticky všetky aspekty plánovania úloh a alokácie zdrojov CPU. Takéto plánovače je možné dynamicky načítať a spustiť v jadre. Linux в virtuálny prístroj eBPF. Mechanizmus sched_ext zjednodušuje vytváranie plánovačov špecifických pre úlohy, umožňuje experimentovanie s rôznymi technikami a stratégiami plánovania a umožňuje rýchle vytváranie funkčných prototypov a okamžitú výmenu plánovačov v produkčných infraštruktúrach. Napríklad pomocou sched_ext môžete vytvoriť plánovač, ktorý zohľadňuje špecifiká konkrétnej aplikácie a dynamicky mení svoju stratégiu plánovania v závislosti od stavu systému a ďalších faktorov.
- Zloženie obsahuje zvyšnú časť záplat potrebných na fungovanie serverového mechanizmu SCHED_DEADLINE, ktorý rieši problém nedostatočného využívania zdrojov CPU bežnými úlohami, keď je CPU monopolizované úlohami s vysokou prioritou (v reálnom čase). Aby sa zabránilo monopolizácii CPU, jadro predtým používalo mechanizmus obmedzovania v reálnom čase, ktorý sa snažil vyhradiť 5% pre úlohy s nízkou prioritou, pričom 95% času zostávalo na úlohy v reálnom čase. Tento mechanizmus zanechal veľa požiadaviek, pretože bežné úlohy v mnohých situáciách nedostávali dostatok procesorového času. Server SCHED_DEADLINE implementuje efektívnejší mechanizmus rezervácie zdrojov.
- Dokončila sa integrácia plánovača úloh EEVDF (Earliest Eligible Virtual Deadline First), ktorý nahradil plánovač CFS (Completely Fair Scheduler), dodávaný od jadra 2.6.23. Nový plánovač pri výbere ďalšieho procesu na prenos vykonania zohľadňuje procesy, ktoré nedostali dostatok procesorových zdrojov alebo dostali nespravodlivo veľa procesorového času. V prvom prípade je presun kontroly na proces vynútený a v druhom naopak odložený. Starý plánovač CFS používal heuristiku a jemné ladenie na identifikáciu procesov, ktoré si vyžadovali osobitnú pozornosť, zatiaľ čo nový plánovač ich sleduje explicitnejšie a nevyžaduje jemné ladenie. Očakáva sa, že EEVDF zníži oneskorenia úloh, pri ktorých má CFS problémy s plánovaním.
- V núdzovom obslužnom programe jadra - DRM Panic, ktorý využíva subsystém DRM (Direct Rendering Manager) na zobrazenie vizuálnej správy v štýle „modrej obrazovky smrti“, možnosť zobraziť logo a QR kód so správou kmsg bola pridaná obrazovka, keď nastane núdzový stav. Keďže do QR kódu sa zmestí iba 2953 bajtov, poskytuje sa možnosť DRM_PANIC_SCREEN_QR_CODE_URL, v ktorej je správa kmsg komprimovaná pomocou zlib a pripojená ako parameter k adrese URL, čo umožňuje preniesť približne 40 7500 bajtov prostredníctvom kódu QR VXNUMX. Pri zostavovaní balíkov s jadrom môžu distribúcie nastaviť základnú adresu URL pre adresu URL, čo im umožní prejsť na stránku na nahlásenie problému. Na výber formátu kódu QR je k dispozícii nastavenie DRM_PANIC_SCREEN_QR_VERSION.
- Pridaná podpora pre ARM POE (Permission Overlay Extension), ktorá umožňuje nastaviť prístupové práva do pamäťových oblastí. Pomocou tohto rozšírenia možno na systémoch s procesormi ARM64 implementovať mechanizmus Memory Protection Keys, ktorý sa používa na obmedzenie prístupu k stránkam pamäte bez zmeny tabuľky stránok pamäte.
- Pre architektúry Loongarch, ARM64, PowerPC a s390 bola implementácia systémového volania getrandom() presunutá, optimalizovaná pomocou mechanizmu vDSO (virtual dynamic shared object), ktorý umožňuje presunúť obsluhu systémového volania z jadra k používateľovi. priestor a vyhýbajte sa prepínaniu kontextu. Optimalizácia umožňuje zrýchliť generovanie náhodných čísel až 15-krát.
- Do asynchrónneho vstupno/výstupného subsystému io_uring bola pridaná možnosť používať absolútne časové limity, ktoré sa spúšťajú po dosiahnutí určitého času na systémových hodinách (predtým bolo možné nastaviť iba relatívne časové limity, ktoré udávali trvanie od začiatku operácie ).
- Pridané súbory na generovanie väzieb pre knižnicu libcpupower pomocou súpravy nástrojov SWIG, ktorá umožňuje generovať väzby z kódu C/C++ pre rôzne programovacie jazyky. Väzby vám umožňujú vytvárať skripty v Pythone a iných jazykoch a používať ich na rozšírenie funkcionality knižnice libcpupower, ktorá poskytuje API na správu cpufreq a ovládačov z používateľského priestoru.
- Obslužný program cpuidle zobrazuje hodnotu „rezidencie“ v nečinnom stave, ktorá sa používa pre systémy v reálnom čase a berie do úvahy minimálny čas, počas ktorého musí byť procesor v nečinnom stave, aby odôvodnil energetické náklady na prechod do tohto stavu a z neho.
- Pridaná možnosť použiť kompilátor Clang na zostavenie štandardnej knižnice jazyka C nolibc, ktorá je súčasťou zdrojového kódu jadra. Linux a poskytuje obal okolo základných systémových volaní. Pri zostavovaní nolibc v Clangu je povolená optimalizácia link-time (LTO).
- Niektoré rozhrania cgroup1 boli zastarané, ako napríklad účtovanie TCP, soft limit verzia XNUMX a správa vyčerpania pamäte. Podpora pre tieto funkcie zatiaľ zostáva v plnom rozsahu a varovanie sa vydáva za účelom preštudovania počtu používateľov, ktorí tieto funkcie naďalej používajú.
- Pridaná možnosť nakonfigurovať vyrovnávaciu pamäť sledovania zvonenia na ukladanie nahromadených údajov po reštarte, čo vám umožní nestratiť nahromadené informácie o ladení v prípade zlyhania jadra. Dáta sú uložené v pamäti. Povolenie sa vykonáva prostredníctvom parametra príkazového riadka jadra trace_instance, napríklad nastavením „trace_instance=boot_map@0x285400000:12M“ sa vyhradí 12 MB pamäte pri 0x285400000 pre vyrovnávaciu pamäť „boot_map“, ktorá bude prístupná cez súbor /sys/kernel /tracing/instances/boot_map.
- Pokračovanie migrácie zmien z verzie Rust pre branchLinux, súvisiace s používaním Rustu ako druhého jazyka na vývoj ovládačov a modulov jadra (podpora Rustu nie je štandardne aktívna a nezahŕňa Rust medzi požadované závislosti jadra pri zostavovaní). Pridané moduly „list“ a „rbtree“ pre prácu s dvojito prepojenými zoznamami a červeno-čiernymi vyhľadávacími stromami. Rozšírené možnosti modulov „init“, „sync“, „types“ a „error“. Pridaná bola možnosť používať kód Rust pri zostavovaní jadra s ochranou pred útokmi Spectre (možnosti MITIGATION_{RETHUNK,RETPOLINE,SLS}), pri použití ladiacieho systému KASAN, mechanizmov ochrany kCFI (kernel Control Flow Integrity) a Shadow Call a pri použití ďalších pluginov GCC. Pridaný bol ovládač pre ethernetový ovládač Applied Micro QT2025 PHY, napísaný v Ruste. Pripravená bola samostatná webová stránka s dokumentáciou: rust.docs.kernel.org.
- Do zdrojového kódu jadra bol pridaný nástroj xdrgen na prevod špecifikácií XDR (eXternal Data Representation) do funkcií kódovania a dekódovania XDR napísaných pomocou štýlu C, ktorý jadro používa. Linux.
- Jadro bolo zmenené tak, aby implementovalo mechanizmus maskovania ukazovateľa na zníženie počtu pomalých volaní bariéry_nospec() v 64-bitovej funkcii copy_from_user(), ktorá sa používa na kopírovanie údajov do jadra z používateľského priestoru. Použitie maskovania zrýchľuje test „per_thread_ops“, ktorý hodnotí počet operácií, ktoré je možné vykonať v jednom vlákne, o 2.6 %.
- Bol pridaný nový ovládač USB, ktorý vám umožňuje používať protokol 9pfs ako prenos na odosielanie a prijímanie údajov zo zariadenia USB pri pripájaní systému súborov 9p cez USB (napríklad „mount -t 9p -o trans=usbg, aname=/cesta/k/fs /mnt/9"). Príkladom použitia nového ovládača je jeho použitie namiesto NFS na organizáciu zavádzania koreňového oddielu pri vývoji vstavaných zariadení.
- Diskový subsystém, I/O a súborové systémy
- Do subsystému VFS bola pridaná možnosť pracovať s úložnými zariadeniami, ktorých veľkosť bloku je väčšia ako veľkosť pamäťovej stránky v systéme. V súborových systémoch je táto funkcia momentálne podporovaná iba v XFS.
- Subsystém FUSE, ktorý vám umožňuje vytvárať implementácie súborových systémov pracujúcich v používateľskom priestore, pridal podporu pre mapovanie identifikátorov používateľov pripojených súborových systémov, ktoré sa používajú na porovnávanie súborov konkrétneho používateľa na pripojenom cudzom oddiele s iným používateľom na aktuálnom systém.
- Bola implementovaná nová operácia fcntl, F_CREATED_QUERY, ktorá dáva aplikácii možnosť určiť, či súbor otvorený pomocou príznaku O_CREAT bol vytvorený alebo či už predtým existoval.
- Do systémového volania name_to_handle_at() bola pridaná možnosť používať jedinečné 64-bitové ID bodu pripojenia, aby sa predišlo rasovým podmienkam pri analýze /proc/mountinfo.
- Veľkosť „súborovej“ štruktúry v jadre bola znížená z 232 na 184 bajtov, čo znižuje spotrebu pamäte na systémoch, ktoré aktívne pracujú so súbormi.
- Pripájanie súborových systémov na body pripojenia v rámci hierarchie /proc, ako napríklad /proc/PID/fd, bolo zakázané, čo spôsobilo potenciálne bezpečnostné problémy.
- Pseudo-FS NSFS (NameSpace FS), ktorý sa používa na prácu s mennými priestormi, poskytuje ďalšie informácie o menných priestoroch prípojných bodov.
- Súborový systém EROFS (Extendable Read-Only File System), navrhnutý na použitie na oddieloch iba na čítanie, teraz podporuje pripájanie súborových systémov priamo z obrazov diskov uložených ako súbory.
- Do XFS boli pridané nové príkazy ioctl XFS_IOC_START_COMMIT a XFS_IOC_COMMIT_RANGE na výmenu obsahu medzi dvoma súbormi.
- NFS má pridanú podporu pre protokol „LOCALIO“, ktorý umožňuje určiť, či klient a server NFS na tom istom hostiteľovi, aby sa umožnili zodpovedajúce optimalizácie.
- V súborovom systéme Btrfs boli navrhnuté optimalizácie výkonu, kód bol prerobený, oblasť uzamykania rozsahu počas operácií čítania bola znížená, pokračovali práce na konverzii pamäťových stránok na používanie fólií stránok a automatické uvoľňovanie pamäte bolo implementované pre štruktúru btrfs_path.
- V súborovom systéme Ext4 boli opravené chyby súvisiace s alokáciou blokov, správou rozsahu, rýchlym odovzdaním a žurnálovaním.
- Virtualizácia a bezpečnosť
- Pridaný modul IPE (Integrity Policy Enforcement) LSM, vyvinutý spoločnosťou Microsoft na rozšírenie existujúceho povinného systému kontroly prístupu. Modul vám umožňuje definovať všeobecnú politiku integrity pre celý systém s uvedením, ktoré operácie sú povolené a ako sa má overovať pravosť komponentov. Napríklad pomocou IPE môžete určiť, ktoré spustiteľné súbory sa môžu spúšťať, berúc do úvahy ich súlad s referenčnou verziou pomocou kryptografických hash poskytovaných systémom dm-verity.
- Vo fáze kompilácie jadra je možné samostatne povoliť dostupné metódy ochrany proti rôznym zraniteľnostiam triedy Spectre v CPU. Kconfig ponúka nové parametre: MITIGATE_MDS (ochrana pred zraniteľnosťou Microarchitectural Data Sampling), MITIGATE_TAA (ochrana pred zraniteľnosťou TSX Asynchrónne prerušenie), MITIGATE_MMIO_STALE_DATA (ochrana pred zraniteľnosťou MMIO zastaraných údajov), MITIGATE_L1ATERochrana proti terminálu ETBLE (ochrana proti Retbleed zraniteľnosti), MITIGATE_SPECTRE_V1, MITIGATE_SPECTRE_V1 (ochrana pred zraniteľnosťami Spectre), MITIGATE_SRBDS (ochrana pred zraniteľnosťou Special Register Buffer Data Sampling), MITIGATE_SSB (ochrana pred zraniteľnosťou Speculative Store Bypass).
- Pridaná možnosť príkazového riadka proc_mem.force_override a sada nastavení zostavy v Kconfig (PROC_MEM_FORCE_ALWAYS, PROC_MEM_FORCE_PTRACE a PROC_MEM_FORCE_NEVER), aby sa zabránilo zmenám pamäte cez /proc/pid/mem.
- Podsystém LSM (Linux bezpečnostný modul) bol prepnutý na používanie statických volaní, čo zlepšilo bezpečnosť a výkon.
- Možnosť používať štandardné jadrá pre architektúru ARM64 v hosťovských prostrediach bežiacich na Android-systémy s upraveným hypervízorom KVM (chránený KVM).
- Modul Landlock LSM, ktorý vám umožňuje obmedziť interakciu skupiny procesov s vonkajším prostredím, implementuje koncept „IPC scoping“ na selektívne obmedzenie interakcie s prostrediami sandbox pomocou Unixových zásuviek a signálov. Môžete napríklad zakázať pripojenia pomocou soketov Unix z prostredia karantény k procesom, ktoré nemajú aplikovanú izoláciu, ale umožňujú pripojenie k procesom v rovnakom rozsahu.
- V hypervízore KVM bol do CPUID pridaný príznak pre hosťujúce systémy označujúci podporu pre rozšírenia AVX10.1.
- Sieťový subsystém
- Bol pridaný mechanizmus Device Memory TCP, ktorý umožňuje použitie sieťových zásuviek na priame odosielanie obsahu pamäte periférnych zariadení cez sieť (režim nulového kopírovania) a priame umiestňovanie obsahu sieťových paketov do oblasti pamäte zariadenia na strane príjemcu. Dáta prenášané v paketoch sa prenášajú zo sieťovej karty do pamäte periférneho zariadenia alebo z pamäte zariadenia na sieťovú kartu priamo, obchádzajúc CPU, a hlavičky paketov končia v bežných vyrovnávacích pamätiach jadra.
- Možnosti mnohých ethernetových a bezdrôtových ovládačov boli rozšírené. Napríklad ovládač Intel iwlwifi pridal podporu pre presun operácií RLC/SMPS na stranu firmvéru, ovládač RealTek rtw89 zvýšil výkon a pridal podporu pre čipy RTL8852BT/8852BE-VT (WiFi 6), ovládač mikročipu Ethernet pridal podporu pre IEEE 802.3 špecifikácie bw (100BASE) -T1) a IEEE 802.3bp, vylepšené implementácie virtuálneho Ethernetu Microsoft vNIC a IBM veth. Pridané nové ovládače pre ethernetové čipy Realtek RTL9054, RTL9068, RTL9072, RTL9075, RTL9068, RTL9071 a Microchip LAN8650/1 10BASE-T1S MAC-PHY.
- V MPTCP (MultiPath TCP), rozšírení protokolu TCP na organizáciu doručovania TCP paketov súčasne niekoľkými cestami cez rôzne sieťové rozhrania, sa veľkosť váh používaných pri smerovaní zvyšuje z 8 na 16 bitov. Implementovaná detekcia stratenej (blackhole) prevádzky a pozastavenie pokusov o nadviazanie spojenia so systémami na určitý čas, čo vedie k strate prevádzky.
- Pre IPv6 je implementovaná podpora pre príznak „p“ v PIO (Prefix Information Option), ktorý sa používa v reklamách RA (IPv6 Router Advertisements) na výber modelu nasadenia klienta cez DHCPv6-PD (DHCPv6 Prefix Delegation, RFC9663) namiesto priradenia jednotlivé adresy na základe prefixov pomocou SLAAC (Stateless Address Autoconfiguration). IPv6 IOAM6 pridáva podporu pre nový režim zapuzdrenia tunsrc, ktorý umožňuje lepší výkon.
- Vylepšený výkon pri spracovaní paketov riadenia IPsec.
- Vylepšený výkon splachovania veľkých sád pravidiel nftables. nfnetlink_queue má vylepšenú podporu pre protokol SCTP.
- Ethtool API pridalo podporu pre viazanie viacerých sieťových kariet na jedno sieťové rozhranie.
- Оборудование
- V ovládači AMDGPU pokračujú práce na implementácii podpory pre GPU AMD RDNA4 („GFX12“). Pridaná možnosť resetovať jednotlivé fronty úloh bez resetovania celého GPU.
- Pokračovali práce na ovládači Xe drm (Direct Rendering Manager) pre GPU založené na architektúre Intel Xe, ktorý sa používa vo grafických kartách a integrovaných grafikách rodiny Intel Arc, počnúc procesormi Tiger Lake. Nová verzia obsahuje podporu pre GPU založené na mikroarchitektúrach Battlemage a Lunar Lake. Bola zavedená podpora modifikátorov Xe2 CCS (Color Control Surface) na ovládanie parametrov integrovaných a diskrétnych GPU.
- Ovládač i915 implementuje možnosť výstupu informácií o rýchlosti ventilátora cez rozhranie HWMON alebo sysfs (atribút „fan1_input“). Parameter „i915.modeset“ bol zastaraný, namiesto parametra „i915.modeset=0“ by sa mal použiť parameter „i915.nomodeset“.
- Pridaná podpora pre GPU A615, A306 a A621 do ovládača msm DRM (Qualcomm Adreno GPU).
- Nouveau driver má prepracované a vyčistené vnútorné štruktúry.
- Ovládač intel_pstate, ktorý riadi parametre spotreby energie (P-state) na systémoch s procesormi Intel, pridal podporu pre hybridné systémy s asymetrickými (rozdielnymi charakteristikami) CPU, ako aj podporu pre správu napájania procesorov založených na Granite Rapids a Sierra Forest. mikroarchitektúry. Do ovládača intel_idle bola pridaná podpora pre procesor Xeon Granite Rapids. Ovládač intel_rapl poskytuje rozpoznávanie procesov rodiny AMD 1Ah a procesorov Intel ArrowLake-U.
- Pokračujúce začleňovanie zmien na podporu ARM SoC Snapdragon X Elite, ktorý využíva vlastný 12-jadrový procesor Oryon od Qualcommu a GPU Qualcomm Adreno. Čip je zameraný na použitie v notebookoch a počítačoch a v mnohých výkonnostných testoch je pred čipmi Apple M3 a Intel Core Ultra 155H.
- Pridaná podpora pre ARM dosky, SoC a zariadenia: Broadcom bcm2712 (Raspberry Pi 5), Renesas R9A09G057 (RZ/V2H), Qualcomm Snapdragon 414 (MSM8929), Lenovo ThinkPad T14s Gen 6, Lenovo A6000/A6010RG La7XXSP 35, , Firefly Core-PX30-JD4, Lunzn Farrhino R68S, Aspeed Riser, AGX Orin, Rockchip Qnap-TS433, Huashan Pi, Meta Catalina, BeagleY-AI, NanoPi R2S Plus, ExynosAuto v920, SOPHGO SG2002, G5332, G4com LG CoolPi CM815 GenBook, Anbernic RG5XXSP, GameForce Ace, IBM P35, Kontron i.MX11 OSM-S, NanoPC-T93
- Pridaná podpora pre Anbernic RG28XX, On Tat Industrial Company KD50G21-40NT-A1, Innolux G070ACE-LH3, Melfas lmfbx101117480, Densitron DMT028VGHMCMI-1D, Microchip AC40T08A, obrazovka AOU116 B02.3X B116XAN06.1, AOU B116XAT04.1, BOE TV101WUM-LL2, BOE NV140WUM-N41, BOE NV133WUM-N63, BOE NV116WHM-A4D, BOE NE140WCMMNEA-N6B,CSBC W MNB116LS2-116, Starry er2.
- Audio subsystém má pridanú podporu pre čipy a kodeky RME Digiface USB, AMD ACP 7.1, Mediatek MT6367, MT8365, Realtek RTL1320, C-Media CM9825. Staré zvukové ovládače pre Intel ASoC boli vyhlásené za zastarané a namiesto nich sa odporúča používať ovládače AVS. Ovládač SoundWire prešiel mnohými vylepšeniami.
Zdroj: opennet.ru
