Po dvoch mesiacoch vývoja Linus Torvalds predstavil vydanie jadra Linux 5.12. Medzi najvýraznejšími zmenami sú: podpora zónovaných blokových zariadení v Btrfs, možnosť mapovania identifikátorov používateľov pre FS, odstraňovanie zastaraných ARM architektúr, režim "netrpezlivej" zápisu v NFS, mechanizmus LOOKUP_CACHED na určenie súborových ciest z cache, podpora atomických inštrukcií v BPF, debuggovací systém KFENCE na odhaľovanie chýb pri práci s pamäťou, režim NAPI pollingu v sieťovom stacku fungujúci v samostatnom vlákne jadra, hypervízor ACRN, možnosť dynamickej zmeny preempt modelu v plánovači úloh a podpora LTO optimalizácií pri kompilácii v Clang.
Do novej verzie bolo zahrnutých 14170 (v predchádzajúcej verzii 15480) opráv od 1946 (1991) vývojárov, veľkosť patchu - 38 MB (zmeny sa dotkli 12102 (12090) súborov, bolo pridaných 538599 (868025) riadkov kódu, a odstránených 333377 (261456) riadkov). Približne 43% všetkých zmien v 5.12 sa týka ovládačov zariadení, asi 17% zmien má súvislosť s aktualizáciou kódu špecifického pre hardvérové architektúry, 12% súvisí so sieťovým stackom, 5% - s súborovými systémami a 4% s vnútornými subsystémami jadra.
Hlavné novinky:
- Diskový subsystém, I/O a súborové systémy
- Realizovaná bola možnosť mapovania identifikátorov používateľov pre namontované súborové systémy (je možné priradiť súbory jedného používateľa na namontovanej cudzom oddiele s inému používateľovi v aktuálnom systéme). Mapovanie je podporované pre FS FAT, ext4 a XFS. Navrhnutá funkčnosť umožňuje zjednodušiť zdieľanie súborov rôznymi používateľmi a na rôznych počítačoch, pričom mapovanie sa bude uplatňovať v mechanizme prenosných domácich adresárov systemd-homed, umožňujúce používateľom premiestňovať svoje domáce adresáre na externé médiá a používať ich na rôznych počítačoch, ktorých rozloženie identifikátorov používateľov sa neshoduje. Ďalším užitočným použitím je organizovanie prístupu k zdieľaným súborom z externého hostiteľa, bez skutočnej zmeny údajov o vlastníkoch súborov vo FS.
- Do jadra boli prijaté patche LOOKUP_CACHED, ktoré umožňujú vykonávať operácie určovania súborových ciest z užívateľského priestoru bez zablokovania, iba na základe údajov v cache. Režim LOOKUP_CACHED sa aktivuje pri volaní openat2() prostredníctvom odovzdania príznaku RESOLVE_CACHED, pri ktorom sa údaje poskytujú iba z cache a ak určovanie cesty si vyžaduje prístup k úložisku, vráti sa chyba EAGAIN.
- V súborovom systéme Btrfs bola pridaná základná podpora zónovaných blokových zariadení (zariadenia na pevných diskoch alebo NVMe SSD, kde je úložný priestor rozdelený na zóny, ktoré tvoria skupiny blokov alebo sektorov, do ktorých je povolené iba sekvenčné pridávanie údajov s aktualizáciou celej skupiny blokov). V režime iba na čítanie bola implementovaná podpora blokov s metadátami a údajmi, ktoré sú menšie ako stránka (subpage).
- V súborovom systéme F2FS bola pridaná možnosť výberu algoritmu a úrovne kompresie. Bola pridaná podpora vysokej úrovne kompresie pre algoritmus LZ4. Implementovaná bola možnosť montovania checkpoint_merge.
- Bola implementovaná nová ioctl-príkaz FS_IOC_READ_VERITY_METADATA na čítanie metadát z súborov chránených pomocou fs-verity.
- V klientovi NFS bol implementovaný režim "netrpenej" zápisu (writes=eager), pri ktorom sa operácie zápisu do súboru okamžite prenášajú na server, obchádzajúc stránkovú cache. Uvedený režim umožňuje znížiť spotrebu pamäte, zabezpečuje okamžité získanie informácií o dokončení voľného miesta v FS a v niektorých situáciách umožňuje zvýšiť výkon.
- V CIFS (SMB) boli pridané nové možnosti montovania: acregmax na riadenie caching súborov a acdirmax na riadenie caching metadát priečinkov.
- V XFS bol zapnutý režim viacvláknového overovania kvót, zrýchlené vykonávanie fsync, a pripravený kód growfs na implementáciu funkcie zmenšovania veľkosti FS.
- Pamäť a systémové služby
- Bola pridaná podsústava DTMP (Dynamic Thermal Power Management), ktorá umožňuje dynamicky regulovať spotrebu energie rôznych zariadení na základe stanovených spoločných obmedzení teploty.
- Implementácia kompilácie jadra pomocou kompilátora Clang s optimalizáciou počas prepojovania (LTO, Link Time Optimization) je teraz možná. LTO optimalizácie berú do úvahy stav všetkých súborov zapojených do procesu kompilácie, zatiaľ čo tradičné režimy optimalizácie optimalizujú každý súbor samostatne a nezohľadňujú podmienky volania funkcií definovaných v iných súboroch. Napríklad pri LTO je možné inline rozvinutie funkcií z iných súborov, nevyužívaný kód nie je zahrnutý do spustiteľného súboru, prebieha kontrola typov a celková optimalizácia na úrovni projektu. Podpora LTO je zatiaľ obmedzená na architektúry x86 a ARM64.
- Možnosť voľby režimov prečo predstihovania (PREEMPT) v plánovači úloh pri načítaní (preempt=none/voluntary/full) alebo počas jeho prevádzky cez debugfs (/debug/sched_debug) bola pridaná pri určení nastavenia PREEMPT_DYNAMIC počas kompilácie jadra. Predtým mohol byť režim predstihovania určený len na úrovni parametrov kompilácie. Zmena umožňuje distribúciám dodávať jadrá s povoleným režimom PREEMPT, ktorý zabezpečuje minimálne oneskorenia pre pracovné plochy na úkor mierneho zníženia priepustnosti, a v prípade potreby prejsť na režimy PREEMPT_VOLUNTARY (medzi režim pre pracovné plochy) alebo PREEMPT_NONE (maximalizuje priepustnosť). serverov).
- Podsystem BPF dostal podporu atomických operácií BPF_ADD, BPF_AND, BPF_OR, BPF_XOR, BPF_XCHG a BPF_CMPXCHG.
- BPF programom bola poskytnutá možnosť prístupu k údajom v zásobníku prostredníctvom ukazovateľov s variabilným posunom. Napríklad, ak skôr bolo možné použiť na prístup k poľu v zásobníku len statický index prvku, teraz je možné použiť aj dynamický. Kontrola prístupu je realizovaná overovačom BPF iba v rámci existujúcich hraníc. Táto možnosť je dostupná iba privilegovaným programom z obavy z možného zneužitia zraniteľností spojených so špekulatívnym vykonávaním kódu.
- Pridaná možnosť pripevnenia BPF programov k "holým" bodom sledovania (bare tracepoints), ktoré nie sú spojené s viditeľnými udalosťami sledovania vo používateľskom priestore (pre takéto body sledovania nie je zaručené zachovanie ABI).
- Implementovaná podpora zbernice CXL 2.0 (Compute Express Link), ktorá sa používa na organizáciu vysokorýchlostnej interakcie CPU s pamäťovými zariadeniami (umožňuje používať externé pamäťové zariadenia ako súčasť RAM alebo trvalej pamäte, ako keby bola táto pamäť pripojená cez štandardný pamäťový kontrolér v CPU).
- Pridaný ovládač nvmem na získavanie údajov z vyhradených oblastí pamäte, ktoré sú priamo nedostupné pre Linux (napríklad EEPROM pamäť, fyzicky dostupná iba pre firmvér, alebo údaje dostupné iba v počiatočnej fáze spúšťania).
- Odstránená podpora profilačného systému „oprofile“, ktorý sa nedostal do širokej praxe a bol vytlačený modernejším mechanizmom perf.
- V rozhraní asynchrónneho vstupu/výstupu io_uring bola zabezpečená integrácia s cgroup, ktoré kontrolujú využitie pamäte.
- Pre architektúru RISC-V bola implementovaná podpora systémov NUMA, ako aj mechanizmov kprobes a uprobes.
- Pridaná možnosť použitia systémového volania kcmp() bez ohľadu na funkčnosť uloženia stavu procesov (checkpoint/restore).
- Odstránené makrá EXPORT_UNUSED_SYMBOL() a EXPORT_SYMBOL_GPL_FUTURE(), ktoré sa už mnoho rokov prakticky nepoužívajú.
- Virtualizácia a bezpečnosť
- Pridaný mechanizmus ochrany KFence (Kernel Electric Fence), ktorý zachytáva chyby pri práci s pamäťou, ako sú pretečenie vyrovnávacej pamäte a prístup po uvoľnení pamäte. Na rozdiel od ladacieho mechanizmu KASAN sa subsystém KFence vyznačuje vysokou rýchlosťou a nízkymi nákladmi, čo umožňuje detekciu chýb pri práci s pamäťou, ktoré sa prejavujú iba na pracovných systémoch alebo pri dlhšej prevádzke.
- Pridaná podpora hypervízora ACRN, navrhnutého s ohľadom na schopnosť plniť úlohy reálneho času a vhodnosť na použitie v kritických systémoch. ACRN zabezpečuje minimálne náklady, garantuje nízke latencie (low latency) a primeranú odozvu pri interakcii s hardvérom. Podporuje virtualizáciu CPU, vstupu/výstupu, sieťového subsystému, operácií s grafikou a zvukom. ACRN môže byť použitý na spúšťanie viacerých izolovaných virtuálních strojů v elektronických riadiacich blokoch, prístrojových paneloch, automobilových informačných systémoch, spotrebiteľských IoT zariadeniach a inej zabudovanej technike. ACRN podporuje dva typy hosťujúcich systémov — privilegované Service VM, ktoré sa používajú na správu systémových zdrojov (CPU, pamäť, vstup/výstup atď.), a používateľské User VM, v ktorých môžu bežať distribúcie Linuxu, Android a Windows.
- V subsystéme IMA (Integrity Measurement Architecture), ktorý zabezpečuje vedenie databázy hashov na overovanie integrity súborov a s nimi spojených metadát, bola pridaná možnosť overovania integrity dát samotného jadra, napríklad na sledovanie zmien pravidiel SELinux.
- Do hypervízora KVM bola pridaná možnosť zachytávať hypervolania Xen a posielať ich do emulátora, ktorý beží v užívateľskom priestore.
- Bola pridaná možnosť používať Linux ako koreňové prostredie pre hypervízor Hyper-V. Koreňové prostredie má priamy prístup k hardvéru a používa sa na spúšťanie hosťujúcich systémov (podobne ako Dom0 v Xen). Doteraz Hyper-V (Microsoft Hypervisor) podporoval Linux iba v hosťujúcich prostrediach, pričom samotný hypervízor bol spravovaný z prostredia založeného na Windows.
- Bola pridaná podpora inline šifrovania pre karty eMMC, ktorá umožňuje využívať zabudované mechanizmy šifrovania v ovládači úložného zariadenia, ktoré vykonávajú transparentné šifrovanie a dešifrovanie vstupov/výstupov.
- Z kryptosystému bola odstránená podpora nepoužívaných v jadre hashov RIPE-MD 128/256/320 a Tiger 128/160/192, ako aj prúdového šifru Salsa20, na ktorý nadviazal algoritmus ChaCha20. Algoritmus blake2 bol aktualizovaný do implementácie blake2s.
- Sieťový subsystém
- Bola pridaná možnosť presunúť obslužnú rutinu NAPI polingu (polling) sieťových zariadení do samostatného vlákna jadra, čo umožňuje zvýšiť výkon pri niektorých typoch zaťaženia. Predtým bol polling vykonávaný v kontexte softirq a nebol pokrytý plánovačom úloh, čo sťažovalo jemnú optimalizáciu pre dosiahnutie maximálneho výkonu. Vykonávanie v samostatnom vlákne jadra umožňuje monitorovať obslužnú rutinu polingu z užívateľského priestoru, pripojiť ju k samostatným CPU jadrom a zohľadniť pri plánovaní prepinania úloh. Na aktiváciu nového režimu je navrhnutý parameter /sys/class/net//threaded.
- Pokračovala integrácia do jadra MPTCP (MultiPath TCP), rozšírenia protokolu TCP na organizovanie práce TCP pripojenia s dodávkou paketov súčasne cez viaceré trasy prostredníctvom rôznych sieťových rozhraní, priradených k rôznym IP adresám. V novej verzii bola pridaná možnosť pripojiť prioritu k určitým prúdom, čo umožňuje napríklad organizovať prácu záložných prúdov, ktoré sa zapnú len pri problémoch s primárnym prúdom.
- V IGMPv3 bola pridaná podpora mechanizmu EHT (Explicit Host Tracking).
- V mechanizme filtrovania paketov netfilter bola implementovaná možnosť vlastníctva určitých tabuliek na získanie exkluzívnej kontroly (napríklad, proces na pozadí firewalla môže pripojiť určité tabuľky, čím zakáže niekomu inému do nich zasahovať).
- Zariadenie
- Bola vykonaná čistka zastaraných a nepodporovaných ARM platforiem. Odstránený kód platforiem efm32, picoxcell, prima2, tango, u300, zx a c6x, ako aj súvisiacich ovládačov.
- V ovládači amdgpu bola implementovaná možnosť pretaktovania (OverDrive) kariet založených na GPU Sienna Cichlid (Navi 22, Radeon RX 6xxx). Pridaná podpora pixlového formátu FP16 pre DCE (display controller engine) od 8. po 11. generáciu. Pre GPU Navy Flounder (Navi 21) a APU Van Gogh bola implementovaná možnosť resetovania GPU.
- V ovládači i915 pre grafické karty Intel bola implementovaná parameter i915.mitigations na vypnutie mechanizmov izolácie a ochrany v prospech zvýšenia výkonu. Pre čipy od Tiger Lake bola zapnutá podpora mechanizmu VRR (Variable Rate Refresh), ktorý umožňuje adaptívne meniť frekvenciu obnovovania monitora s cieľom zabezpečiť plynulosť a absenciu trhania počas hier. Bolo zahrnuté aj zapnutí podpory technológie Intel Clear Color na zvýšenie presnosti podania farieb. Pridaná podpora DP-HDMI 2.1. Implementovaná možnosť riadenia podsvietenia panelov eDP. Pre GPU Gen9 s podporou LSPCON (Level Shifter and Protocol Converter) bola zapnutá podpora HDR.
- V ovládači nouveau bola pridaná základná podpora GPU NVIDIA postavenej na architektúre GA100 (Ampere).
- V ovládači msm bola pridaná podpora GPU Adreno 508, 509 a 512, používaných v čipoch SDM (Snapdragon) 630, 636 a 660.
- Bola pridaná podpora zvukových kariet Sound BlasterX AE-5 Plus, Lexicon I-ONIX FW810s a Pioneer DJM-750. Pridaná podporu zvukovej subsystémy Intel Alder Lake PCH-P. Implementovaná podpora softvérovej simulácie pripojenia a odpojenia zvukového konektora na ladenie spracovateľov v užívateľskom priestore.
- Pridaná podpora herných konzol Nintendo 64, ktoré sa vyrábali od roku 1996 do roku 2003 (predchádzajúce pokusy o portovanie Linuxu pre Nintendo 64 neboli dokončené a mali status Vaporware). Motiváciou na vytvorenie nového portu pre zastaranú platformu, ktorá sa už takmer dvadsať rokov nevyrába, je túžba stimulovať rozvoj emulátorov a zjednodušiť portovanie hier.
- Pridaný ovládač pre herný ovládač Sony PlayStation 5 DualSense.
- Pridaná podpora ARM platforiem, zariadení a platforiem: PineTab, Snapdragon 888 / SM8350, Snapdragon MTP, Two Beacon EmbeddedWorks, Intel eASIC N5X, Netgear R8000P, Plymovent M2M, Beacon i.MX8M Nano, NanoPi M4B.
- Pridaná podpora smartfónov Purism Librem5 Evergreen, Xperia Z3+/Z4/Z5, ASUS Zenfone 2 Laser, BQ Aquaris X5, OnePlus6, OnePlus6T, Samsung GT-I9070.
- Pridaný ovládač bcm-vk pre akcelerátorové dosky Broadcom VK (napríklad PCIe dosky Valkyrie a Viper), ktoré je možné použiť na vyčlenených zariadeniach na spracovanie zvuku, videa a obrázkov, ako aj na činnosti spojené so šifrovaním.
- Pridaná podpora platformy Lenovo IdeaPad s možnosťami riadenia nepretržitého nabíjania a podsvietenia klávesnice. Taktiež bola zabezpečená podpora ACPI profilu platformy ThinkPad s možnosťami riadenia režimov spotreby energie. Pridaný ovládač pre HID subsystém Lenovo ThinkPad X1 Tablet Gen 2.
- Pridaný ovládač ov5647 s podporou modulov kamery pre Raspberry Pi.
- Pridaná podpora RISC-V SoC FU740 a platforiem HiFive Unleashed. Taktiež bol pridaný nový ovládač pre čip Kendryte K210.
Zdroj: opennet.ru
