Vydanie jadra Linux 6.9

Po dvoch mesiacoch vývoja predstavil Linus Torvalds vydanie jadra Linux 6.9. Medzi najvýraznejšie zmeny patrí modul dm-vdo na deduplikáciu a kompresiu blokových zariadení, režim priameho prístupu k súborom vo FUSE, podpora vytvárania pidfd pre jednotlivé vlákna, mechanizmus BPF-tokenov, podpora Rust na systémoch ARM64, zaradenie FS Ext2 medzi zastarané, odstránenie starého ovládača NTFS a podpora mechanizmu Intel FRED.

Do novej verzie bolo prijatých 15680 opráv od 2106 vývojárov, veľkosť záplaty je 54 MB (zmeny sa dotkli 11825 súborov, pridaných bolo 687954 riadkov kódu a odstránených 225344 riadkov). V minulom vydaní bolo 15641 opráv od 2018 vývojárov, veľkosť záplaty bola 44 MB. Približne 42% všetkých zmien v 6.9 súvisí s ovládačmi zariadení, asi 17% zmien sa týka aktualizácie kódu špecifického pre hardvérové architektúry, 13% súvisí so sieťovým stackom, 7% s súborovými systémami a 4% s vnútornými subsystémami jadra.

Hlavné novinky v jadre 6.9:

  • Diskový subsystém, I/O a súborové systémy
    • Do Device Mapper (DM) bol pridaný nový spracovateľ dm-vdo (virtual data optimizer), ktorý umožňuje na základe existujúcich blokových zariadení implementovať virtuálne blokové zariadenie s takými možnosťami, ako sú deduplikácia opakujúcich sa dát, kompresia dát, vylúčenie prázdnych blokov a zvyšovanie veľkosti blokového zariadenia podľa potreby (thin provisioning). Tieto možnosti sa realizujú na úrovni blokového zariadenia a nezávisia od použitého súborového systému (napríklad pomocou dm-vdo je možné implementovať automatické spájanie duplicovaných dát a uchovávanie informácií v komprimovanej podobe pre akékoľvek FS). Podporuje sa použitie dm-vdo pre fyzické úložiská s veľkosťou až 256TB a vytváranie logických objemov s veľkosťou až 4PB. Na správu oddielov vdo sa odporúča používať lvm. Technológia VDO bola vyvinutá spoločnosťou Permabit a bola otvorená po jej akvizícii spoločnosťou Red Hat v roku 2017.
    • V subsystéme FUSE, ktorý sa používa na implementáciu súborových systémov v používateľskom priestore, bola pridaná počiatočná implementácia režimu „passthrough“, ktorá umožňuje priamy prístup na úrovni jadra k súborovým dátam, čím sa obíde proces bežiaci v používateľskom priestore, čo môže v niektorých prípadoch výrazne zvýšiť výkon. Napríklad FUSE implementácie FS, ktoré pracujú v režime iba na čítanie a obmedzujú prístup k súborom, môžu poskytovať obsah súborov z pôvodného FS bez ich prenosu do procesu FUSE.
    • Do kategórie zastaraných (deprecated) bol zaradený ovládač s implementáciou súborového systému Ext2. Dôvodom je podpora v ovládači iba 32-bitových počítadiel času v inode, ktoré sa preplnia 19. januára 2038. Namiesto ovládača ext2 sa odporúča používať ovládač ext4, ktorý podporuje prácu so súborovým systémom Ext2 a je s ním plne kompatibilný, pričom môže v ext2 oddieloch používať časové pečiatky, ktoré nie sú ovplyvnené problémom roku 2038, ak bol FS vytvorený s inode väčším ako 255 bajtov (v ovládači ext2 sa 32-bitové počítadlá času používali nezávisle od veľkosti inode).
    • Starý ovládač súborového systému NTFS bol odstránený, nahradil ho nový ovládač NTFS3, ktorý prišiel so zverejnením 5.15. Dodávka dvoch ovládačov s implementáciou NTFS v jadre bola považovaná za nevhodnú, pretože starý ovládač sa už dlhé roky neaktualizoval, nachádza sa v zúfalom stave a môže fungovať iba v režime čítania.
    • Do súborových systémov zonefs a hugetlbfs bola pridaná podpora mapovania identifikátorov používateľov pripojených súborových systémov, ktorá sa používa na priradenie súborov určitého používateľa na pripojenom cudzom oddiele k inému používateľovi v aktuálnom systéme.
    • V NFSv4 sa správcov snaď ponúka možnosť vyčistenia stavov otvorenia a blokovania súborov.
    • Pre súborový systém Ext4 sa zaznamenáva len oprava chýb a aktualizácia kunit testov.
    • V Btrfs pokračuje prevod funkcií na používanie foliantov stránok pamäti (page folios).
    • V súborovom systéme XFS sa pokračuje v implementácii možnosti používania utilitky fsck na kontrolu a opravu zistených problémov v online režime, bez odmontovania súborového systému.
    • Do systémového volania pwritev2() bol pridaný flag RWF_NOAPPEND, ktorý umožňuje určiť posun pre zápis, aj keď bol súbor otvorený v režime iba na pridávanie dát na koniec súboru.
    • Pridané nové ioctl príkazy: FS_IOC_GETUUID — vracia UUID identifikátor uvedeného súborového systému, a FS_IOC_GETFSSYSFSPATH — určuje umiestnenie v /sys/fs uvedeného pripojeného FS.
    • Súborové systémy efs, qnx4 a coda boli prevedené na používanie nového API na pripojenie oddielov.
    • Vylepšená implementácia operácií so súbormi, vykonávaných bez ohľadu na veľkosť písmen. Zvýšený výkon prostredníctvom porovnania s ohľadom na veľkosť písmen na začiatku a prechodu na vyhľadávanie bez ohľadu na veľkosť písmen. Riešené problémy pri pripojení overlayfs nad adresármi, pre ktoré je nastavený režim bez ohľadu na veľkosť písmen.
  • Pamäť a systémové služby
    • Implementovaná podpora mechanizmu Intel FRED (Flexible Return and Event Delivery), vytvoreného na zvýšenie efektívnosti a spoľahlivosti dodávania informácií o nízkoúrovňových udalostiach v porovnaní s aktuálne používaným mechanizmom IDT (Interrupt Descriptor Table). Zlepšenie výkonu a skrátenie oneskorení je dosiahnuté vďaka vracaniu udalostí pomocou procesorovej inštrukcie IRET namiesto prenášania udalostí cez tabuľku IDT. Zlepšenie spoľahlivosti je zabezpečené oddeleným spracovaním príchodu udalosti v kontexte jadra a kontexte používateľa, ochranou pred vnoreným vykonávaním NMI a uchovávaním v rozšírenom zásobníku všetkých registrov CPU súvisiacich s výnimkami.
    • Pridaná možnosť optimalizácie prístupu k údajom jednotlivých jadier CPU prostredníctvom používania pomenovaných adresných priestorov (Named Address Spaces) implementovaných v GCC ako rozšírenia GNU C.
    • Do funkcie pidfd_open() bol pridaný príznak PIDFD_THREAD, ktorý umožňuje vytvorenie pidfd pre jednotlivé vlákna, a nie len používať pidfd v kontexte vedúceho vlákna. Bol tiež navrhnutý pseudo-FS na prístup k pidfd cez virtuálny súborový systém. Na rozdiel od identifikácie procesov pomocou pid, identifikátor pidfd je viazaný na konkrétny proces a nemení sa, zatiaľ čo PID po ukončení aktuálneho procesu môže byť viazaný k inému procesu.
    • Do subsystému BPF bol pridaný mechanizmus BPF tokenov, ktorý umožňuje selektívne delegovanie právomocí programom na prístup k privilegovaným operáciám BPF, napríklad je možné poskytnúť neprivilegovanej aplikácii prístup k jednotlivým subsystémom BPF bez udelenia plných práv CAP_BPF.
    • Do subsystéme BPF bol pridaný nový typ zdieľanej pamäte bpf_arena, ktorý určuje oblasť dostupnú na zdieľanie programami BPF a procesmi v užívateľskom priestore. Pridaná inštrukcia may_goto, ktorá umožňuje organizovať cykly, ktoré môžu byť prerušené overovačom. Pridaná možnosť generovať v programoch BPF ľubovoľné TCP SYN cookie a vytvárať BPF spracovávateľov na boj proti SYN floodu.
    • Pokračovalo sa v prenose zmien z vetvy Rust-for-Linux, ktoré súvisia s používaním jazyka Rust ako druhého jazyka pre vývoj ovládačov a modulov jadra (podpora Rust nie je predvolene aktívna a nevedie k zahrnutiu Rust medzi povinné závislosti na zostavi jadra). Pridaná podpora používania jazyka Rust pri práci na 64-bitových procesoroch ARM. Prešlo sa na používanie verzie Rust 1.76. Pridaný makro ‘container_of!’. Namiesto nestabilnej funkcionality ‘ptr_metadata’ bol využitý stabilný spôsob ‘byte_sub’. Pridaný modul ‘time’ s funkciou na konverziu času ‘msecs_to_jiffies()’.
    • Do subsystému io_uring bola pridaná možnosť skracovania súborov (ftruncate_file).
    • Pridaný nový typ pracovných frontov WQ_BH (workqueue Bottom Halves) pre asynchrónne vykonávanie kódu v kontexte softvérových prerušení, zameraný na použitie namiesto zastaraných tasklet-ov.
    • Výrazne prepracovaná subsystém práce s časovačom, v ktorom bola vylepšená logika výberu aktívneho CPU jadra na vykonanie spusteného časovača, aby sa neprebudili neaktívne jadrá.
    • Realizovaná možnosť aktualizácie modelu spotreby energie jadra (EM, Energy Model) počas prevádzky, čo môže byť použité napríklad na zohľadnenie vplyvu pracovnej teploty na energetickú účinnosť CPU. Výrazne zvýšený výkon funkcie em_cpu_energy(), ktorá sa v testoch na stacionárnych systémoch teraz vykonáva rýchlejšie o 1,43-krát, a v teste na doske RockPi 4B — o 1,69-krát.
    • Pridaná podpora spúšťania systémov založených na architektúre ARM64 v režime LPA2 s 52-bitovým virtuálnym adresným priestorom.
    • Pre systémy ARM64 bola implementovaná podpora kontinuálnych záznamov PTE (Page Table Entry), ktoré umožňujú zvýšiť výkonnosť vďaka zlepšeniu efektívnosti využitia TLB (Translation Lookaside Buffer).
    • Prijali sme opravy pre zlepšenie výkonu subsystému správy pamäte znížením výskytu konkurujúcich zámkov vo vmalloc().
    • Pre architektúru LoongArch bol implementovaný mechanizmus horúceho prekrývania opráv (live patching), ktorý umožňuje aplikovať opravy na jadro bez reštartu.
    • Pre systémy RISC-V bola implementovaná podpora systémového volania membarrier(), ktorá zabezpečuje nastavenie bariér na pamäť pre bežiace vlákna v systéme.
    • Zvýšili sa požiadavky na verziu LLVM/Clang, ktorú je možné použiť na zostavenie jadra. Na zostavenie je teraz potrebné minimálne vydanie LLVM 13.0.1 (predtým bola podporovaná aj zostava v LLVM 11+).
    • Do mechanizmu „User trace events“, ktorý umožňuje vytvárať udalosti sledovania z používateľských procesov na monitorovanie aktivity v užívateľskom priestore, bola pridaná podpora exportu informácií o udalosti v rôznych formátoch (USER_EVENT_REG_MULTI_FORMAT).
    • Do mechanizmu sledovania volaní funkcií bola pridaná možnosť sledovania stavu vstupných argumentov funkcie pri sledovaní výstupu z funkcie. Hodnoty operátora return je teraz možné porovnať s argumentmi použitými pri volaní funkcie.
    • Do nástroja perf bola pridaná podpora režimu aglomerácie výstupu „cluster“ („perf stat -a —per-cluster“) na kombinovanie štatistiky zdieľaných zdrojov. Bolo implementované zapojenie knižnice libcapstone pre disassemblovanie procesorových inštrukcií („perf script -F disasm“). Boli vykonané optimalizácie spotreby pamäte pri vykonávaní príkazov perf report a perf annotate.
  • Virtualizácia a bezpečnosť
    • Bola pridaná ochrana proti zraniteľnosti RFDS (Register File Data Sampling) v procesoroch Intel Atom, ktorá umožňuje extrahovať zvyškové informácie z registrárových súborov (RF, Register File) procesora, ktoré slúžia na spoločné uchovávanie obsahu registrov vo všetkých úlohách na tom istom CPU jadre. Na blokovanie zraniteľnosti je potrebné aktualizovať mikrokód a použiť inštrukciu VERW na vyčistenie obsahu mikroarchitektonických bufferov pri návrate z jadra do užívateľského priestoru. Pre aktiváciu ochrany pri spúšťaní jadra je možné zadať flag „reg_file_data_sampling=on“. Informácie o zraniteľnosti a prítomnosti potrebného mikrokódu pre ochranu je možné vyhodnotiť v súbore „/sys/devices/system/cpu/vulnerabilities/reg_file_data_sampling“.
    • Pridaná základná podpora ochrany hosťovských systémov prostredníctvom rozšírenia AMD SEV-SNP (Secure Nested Paging), ktoré zabezpečuje bezpečnú prácu s vnorenými stránkovými tabuľkami a chráni pred útokmi "undeSErVed" a "SEVerity" na procesoroch AMD EPYC, ktoré umožňujú obísť ochranný mechanizmus AMD SEV (Secure Encrypted Virtualization). V KVM potrebné na využitie SNP zmeny sa plánujú pridať do vetvy 6.10.
    • Moduly s implementáciou technológií IMA (Integrity Measurement Architecture) a EVM (Extended Verification Module) boli prevedené na využívanie rámca LSM (Linux Security Modules), čo bez straty funkčnosti umožnilo výrazne zjednodušiť kód, skombinovať duplicitné funkčnosti a využiť dostupné prostredníctvom LSM normálne možnosti. Modul IMA je určený na kontrolu integrity komponentov operačného systému pomocou digitálnych podpisov a hashov. Modul EVM chráni rozšírené atribúty súborov (xattrs) pred útokmi zameranými na narušenie ich integrity (EVM neumožní vykonať offline útok, pri ktorom by útočník mohol zmeniť metadáta, napríklad naštartovaním z vlastného úložiska).
    • Prepracované pre väčšiu kompatibilitu s 32-bitovými prostrediami systémové volania lsm_list_modules(), lsm_get_self_attr() a lsm_set_self_attr(), určené na zobrazenie zoznamu načítaných LSM modulov (Linux Security Modules) a získanie/nastavenie atribútov LSM modulu. Zmena narušuje spätnú kompatibilitu, no keďže nové systémové volania boli pridané v predchádzajúcej verzii jadra a zatiaľ sa nepoužívajú v aplikáciách, Linus Torvalds považoval túto zmenu za prípustnú.
    • Bol sa vykonaný pokus o obnovenie používania mechanizmu UBSAN (Undefined Behavior Sanitizer). Jadro problému spočíva v tom, že kompilátory rôzne spracovávajú celkové pretečenia signálnych a bezsignálnych typov. Signálne pretečenia a pretečenia ukazovateľov spadajú do kategórie neurčitého správania, zatiaľ čo bezsignálne pretečenia sú obmedzené modulo 2n s uchovaním iba najnižších bitov výsledku („wrap-around“) a nepatria pod neurčité správanie. Aby sa vylúčili situácie s výskytom neurčitého správania, jadro sa zostavuje s voľbou „-fno-strict-overflow“, ktorá vedie k použitiu „wrap-around“ pre všetky celkové pretečenia. GCC a Clang nemôžu správne diagnostikovať niektoré problémy pri použití voľby „-fno-strict-overflow“ a zapnutie UBSAN je zamerané na vykonávanie spolupráce s vývojármi kompilátorov pri eliminácii vznikajúcich falošných poplachov a odhaľovaní celkových pretečení na miestach, kde chýbajú jasné kontroly.

      Na kontrolu možných pretečení v jadre sa používajú konštrukcie ako „var + offset PAGE_SHIFT) < pgoff){..}"), ktoré sú viazané na zloženie s voľbou "-fno-strict-overflow" a nezahŕňajú celý kód, v ktorom potenciálne môže dôjsť k pretečeniu. Problém spočíva v tom, že pri použití UBSAN takéto kontroly viedli k vyprodukovaniu veľkého množstva falošných upozornení, a preto v roku 2021 bolo potrebné UBSAN vypnúť. V aktualizovanej implementácii je navrhnuté používať špeciálne anotácie __signed_wrap a __unsigned_wrap, ako aj pripravené makrá s kontrolami add_would_overflow(a, b) a add_wrap(a, b), ktoré umožňujú oddeliť zamýšľané použitie celkových pretečení vývojármi od výskytu náhodných pretečení, ktoré môžu viesť k zraniteľnostiam. Návrh na rozsiahlejšiu prerábku jadra s zavedením dodatočných definícií typov bol zamietnutý Linusom Torvaldsom.

  • Sieťový subsystém
    • V sieťovej subsystéme bola vykonaná práca na znížení výskytu konkurujúcich zámkov („lock contention“, pokus o získanie zámku, ktorý je držaný iným vláknom). Zredukovalo sa používanie zámkov RTNL.
    • Pridaná možnosť zapnúť podporu aktívneho polling-u soketov (busy polling) v kontexte jednotlivých volaní epoll. Veľkosť poolu a parametre rozpočtu môžu byť nastavené oddelene od systémových predvolených parametrov.
    • Implementovaná štruktúra net_hotdata na zlepšenie efektivity caching-u najčastejšie používaných premenných sieťovej konfigurácie.
    • V MPTCP pridali podporu nastavovania pre sokety možnosti TCP_NOTSENT_LOWAT, ktorá umožňuje obmedziť veľkosť bufferu odosielania. V API pre sokety MCTP bola pridaná podpora identifikátorov siete („network ID“), čo umožňuje používať na jednom hoste niekoľko neprekrývajúcich sa sietí MCTP.
    • V IPSec bola pridaná podpora pre presmerovanie ICMP správ s informáciami o chybách (RFC 4301).
    • Urýchlený proces skenovania trás s vypršanou dobou života.
    • Práca XDP bola urýchlená vďaka prísnejšiemu vyhýbaniu sa alokácii veľkých blokov pamäte.
    • Pridaná možnosť pripojenia metadát k správam netconsole.
    • V Netfilter povolené definovanie z užívateľského priestoru tabuliek, ktoré sa viažu na riadiaci pozadový proces a automaticky sa neodstraňujú po skončení užívateľskej aplikácie.
    • V nftables urýchlené pridávanie prvkov do set-reťazcov s kombinovanými rozsahmi.
  • Zariadenie
    • V ovládači i915 pokračovali práce na implementácii podpory čipov Intel LunarLake (Xe 2). Pridané nové PCI identifikátory pre zariadenia založené na čipoch Intel Arrow Lake a Alder Lake N. Pre DisplayPort bola pridaná podpora tunelovania (DP tunneling) a alokácie šírky pásma (bandwidth allocation). Pre všetky platformy je zapnutý režim fastboot. Pridaná podpora debug outputu viazaného na jednotlivé zariadenia.
    • V ovládači AMDGPU bola vykonaná príprava na implementáciu podpory GPU AMD RDNA3.5 a RDNA4. Pridaná podpora ATHUB 4.1, LSDMA 7.0, JPEG DPG, IH 7.0, HDP 7.0, VCN 5.0, SMU 13.0.6, NBIO 7.11, SDMA 6.1, MMHUB 3.3, DCN 3.5.1, NBIF 6.3.1, VPE 6.1.1 a frameworku RAS ACA. Do jadrového modulu bol pridaný parameter freesync_video na zapnutie experimentálnej podpory optimalizácie prepínania videorežimov pomocou technológie adaptívnej synchronizácie FreeSync.
    • V ovládači Nouveau kód správy obrazovky prešiel na používanie funkcie kmemdup().
    • Pokračuje sa na práci na drm ovládači (Direct Rendering Manager) Xe pre GPU založené na architektúre Intel Xe, ktorá sa používa vo grafických kartách Intel rodiny Arc a integrovaných grafikách, počnúc procesormi Tiger Lake.
    • Pridaný DRM ovládač pre čipy Mediatek MT8188 VDOSYS1.
    • Nastavenia jadra súvisiace s videopod systémami boli presunuté do sekcie CONFIG_VIDEO.
    • Pridaná podpora ARM64 SoC: Mediatek MT7981B (Filogic 820), MT7988A (Filogic 880), NXP i.MX8DXP, Renesas R8A779G2 (R-Car V4H ES2.0), R8A779H0 (R-Car V4M), TI J722S.
    • Pridaná podpora ARM platforiem a zariadení: Android telefóny založené na čipe Tegra30, modely Chromebook založené na Mediatek MT8186, NAS, tablety a herné konzoly na báze Rockchips RK35xx, dosky White Hawk založené na SoC Renesas, dosky založené na Qualcomm SM8550 (Snapdragon 8 Gen 2), Apalis Evaluation Board, Sielaff i.MX6 Solo Board, Samsung Galaxy Tab 4 10.1 LTE.
    • Prebehlo refaktoring kódu zvukového subsystému ALSA. Pridaná podpora zvukových systémov Microchip SAM9x7, NXP i.MX95 a Qualcomm WCD939x. V ovládači SoundWire bola pridaná podpora ASoC so zvukovými koprocesormi AMD ACP 6.3 a pre systémy Intel bol implementovaný režim DSPless. Pridaná podpora dodatočných zvukových kodekov Cirrus HD. V ovládači virtio bolo zlepšené riadenie zvukových zariadení.
    • Pridaná podpora Ethernet ovládačov Marvell Octeon PCI Endpoint NIC VF a Intel E825-C 100G.

Zároveň latinskoamerická Nadácia slobodného softvéru vytvorila variant úplne slobodného jadra 6.9 — Linux-libre 6.9-gnu, očisteného od prvkov firmvéru a ovládačov obsahujúcich neslobodné komponenty alebo kusy kódu, ktorých využitie je obmedzené výrobcom. Vo vydaní 6.9 bol aktualizovaný kód čistenia blobov v ovládačoch amdgpu, ath12k, adreno, btusb a r8169. Prebehlo čistenie nového ovládača ptp_fc3. Prebehlo čistenie mien blobov v dts súboroch (devicetree) pre architektúru Aarch64. Boli odstránené problémy s čistením ovládača i915, ktoré viedli k zamŕzaniu počas inicializácie. Vykonané zmeny súvisiace s spracovaním blobov dodávaných vo forme šestnástkových dumpov.

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster