Po dvoch mesiacoch vývoja predstavil Linus Torvalds výstup jadra Linux 5.15. Medzi najvýraznejšími zmenami sú: nový ovládač NTFS s podporou zápisu, modul ksmbd so zavedením SMB servera, subsystém DAMON na monitorovanie prístupu k pamäti, primitíva zámkov pre reálny čas, podpora fs-verity v Btrfs, systémový volanie process_mrelease pre systémy reagujúce na nedostatok pamäte, modul vzdialenej atestácie dm-ima.
Do novej verzie bolo prijatých 13499 opráv od 1888 vývojárov, veľkosť patchu je 42 MB (zmeny sa dotkli 10895 súborov, bolo pridaných 632522 riadkov kódu a odstránených 299966 riadkov). Približne 45% všetkých zmien v 5.15 sa týka ovládačov zariadení, asi 14% zmien má vzťah k aktualizácii kódu špecifického pre hardvérové architektúry, 14% súvisí so sieťovým stackom, 6% s súborovými systémami a 3% s internými subsystémami jadra.
Hlavné novinky:
- Diskový subsystém, I/O a súborové systémy
- Do jadra bola prijatá nová implementácia súborového systému NTFS, ktorú otvorila spoločnosť Paragon Software. Nový ovládač môže pracovať v režime zápisu a podporuje všetky možnosti aktuálnej verzie NTFS 3.1, vrátane rozšírených atribútov súborov, zoznamov prístupu (ACL), režimu kompresie dát, efektívnej práce s prázdnotou v súboroch (sparse) a reprodukciu zmien z denníka na obnovu integrity po zlyhaniach.
- V súborovom systéme Btrfs bola realizovaná podpora mechanizmu fs-verity, ktorý sa používa na transparentné sledovanie integrity a autentickosti jednotlivých súborov podľa kryptografických hashov alebo kľúčov súvisiacich so súbormi, ktoré sú uložené v oblasti metadát. Predtým bol fs-verity dostupný iba pre FS Ext4 a F2fs.
V Btrfs bola tiež pridaná podpora mapovania identifikátorov používateľov pre pripojené súborové systémy (predtým bola podporovaná pre FS FAT, ext4 a XFS). Uvedená funkcia umožňuje priradenie súborov určitého používateľa na pripojenom cudzom oddiele k inému používateľovi v aktuálnom systéme.
Medzi inými zmenami v Btrfs: zrýchlenie pridávania kľúčov do indexu adresára na zvýšenie výkonu vytvárania súborov; možnosť fungovať v raid0 na jednom zariadení a raid10 na dvoch (napríklad počas prekconfigurovania poľa); možnosť „rescue=ibadroots“ na ignorovanie chybných stromov extentov; zrýchlenie operácie „send“; zníženie konfliktov zámkov počas operácií premenovania; možnosť používania 4K sektorov na systémoch s veľkosťou pamäťovej stránky 64K.
- V XFS bola stabilizovaná možnosť používania FS dát po roku 2038. Bol zavedený mechanizmus oneskorenej deaktivácie inode a podpora oneskorenej inštalácie a odstraňovania atribútov súborov. Aby sa vylúčili problémy, bola odstránená možnosť vypínania diskových kvót pre už pripojené oddiely (je možné ich nútene vypnúť, ale súvisiace počítanie bude pokračovať, takže na plné vypnutie je potrebné opätovné pripojenie).
- V EXT4 sa pracovalo na zvýšení výkonu zápisu do delalloc-bufferov a spracovania osirotených (orphan) súborov, ktoré naďalej existujú, pretože sú otvorené, ale nie sú viazané na adresár. Spracovanie operácií discard bolo presunuté z jbd2 vlákna kthread, aby sa vylúčili blokovania operácií s metadátami.
- Vo F2FS bola pridaná možnosť „discard_unit=block|segment|section“ na viazanie operácií discard (označovanie uvoľnených blokov, ktoré už nie je potrebné fyzicky uchovávať) k vyrovnaniu k bloku, sektoru, segmentu alebo sekcii. Bola pridaná podpora sledovania zmien oneskorení pri vstupe/výstupe.
- V súborovom systéme EROFS (Extendable Read-Only File System) bola pridaná podpora priameho vstupu/výstupu pre súbory uložené bez kompresie, ako aj podpora fiemap.
- V OverlayFS bola implementovaná správna spracovanie montážnych praporkov „immutable“, „append-only“, „sync“ a „noatime“.
- V NFS bola zlepšená správa situácií, keď server NFS prestal odpovedať na požiadavky. Bolo pridané možnosť montáže z už používaného servera, ale dostupného cez iný sieťový adres.
- Začala sa príprava na prepísanie subsystému FSCACHE.
- Bola pridaná podpora EFI oddielov s netradičným umiestnením tabuliek GPT.
- V mechanizme fanotify bol implementovaný nový flag FAN_REPORT_PIDFD, ktorý umožňuje zahrnúť pidfd medzi vracané metadáta. Pidfd pomáha spracovávať situácie s opätovným použitím PID na presnejšiu identifikáciu procesov, ktoré komunikujú so sledovanými súbormi (pidfd je viazaný na konkrétny proces a nezmení sa, zatiaľ čo PID môže byť priradený inému procesu po ukončení aktuálneho procesu spojeného s týmto PID).
- Do systémového volania move_mount() bola pridaná možnosť pridávania bodov pripojenia do existujúcich zdieľaných skupín, čo vyrieši problémy so zachovávaním a obnovovaním stavu procesov v nástrojoch CRIU pri existencii viacerých montážnych priestorov zdieľaných v izolovaných kontajneroch.
- Bola pridaná ochrana pred skrytými stavmi pretekania, ktoré potenciálne mohli viesť k poškodeniu súborov pri čítaní z cache počas spracovania medzier v súboroch.
- Bola ukončená podpora povinných (mandatory) blokád súborov, implementovaných cez systémové volania, ktoré vedú k zmene súboru. Z dôvodu možných stavov pretekania sa tieto blokády považovali za nespoľahlivé a pred mnohými rokmi boli vyhlásené za zastarané.
- Bola odstránená subsystém LightNVM, ktorý umožňoval priamy prístup k SSD disku, obchádzajúc emulačnú vrstvu. LightNVM stratilo význam po vzniku štandardov NVMe, ktoré predpokladajú možnosť zónovania (ZNS, Zoned Namespace).
- Pamäť a systémové služby
- Bola implementovaná subsystém DAMON (Data Access MONitor), ktorá umožňuje sledovať aktivitu súvisiacu s prístupom k údajom v operačnej pamäti, viazanú na vybraný proces bežiaci v užívateľskom priestore. Subsystém umožňuje analyzovať, ku ktorým oblastiam pamäte proces pristupoval počas celej svojej činnosti a aké oblasti pamäte zostali nevyužité. Medzi vlastnosti DAMON patrí nízka záťaž na CPU, nízka spotreba pamäte, vysoká presnosť a predvídateľné konštantné náklady nezávislé od veľkosti. Subsystém môže byť použitý ako jadrom na optimalizáciu správy pamäte, tak aj nástrojmi v užívateľskom priestore na pochopenie toho, čo proces robí a optimalizáciu využitia pamäte, napríklad na oslobodenie nadbytočnej pamäte pre systém.
- Bol vykonaný systémový hovor process_mrelease, ktorý umožňuje urýchliť proces oslobodenia pamäte procesu, ktorý končí svoju činnosť. Za normálnych podmienok sa uvoľnenie zdrojov a ukončenie procesu neuskutočňuje okamžite a z rôznych dôvodov sa môže oneskoriť, čo bráni práci fungujúcich systémov v užívateľskom priestore pre včasné reakcie na nedostatok pamäte, ako sú oomd (poskytované v systemd) a lmkd (používané v Android). Pomocou volania process_mrelease môžu takéto systémy predvídateľnejšie iniciovať návrat pamäte od nútene ukončených procesov.
- Z vetvy jadra PREEMPT_RT, v ktorej sa vyvíja podpora práce v reálnom čase, boli prenesené varianty primitív pre organizovanie zámkov mutex, ww_mutex, rw_semaphore, spinlock a rwlock, založené na subsystéme RT-Mutex. Do SLUB slabového alokátora boli pridané zmeny, ktoré zlepšujú prácu v režime PREEMPT_RT a znižujú vplyv na prerušení.
- Do cgroup bola pridaná podpora atribútu plánovača úloh SCHED_IDLE, ktorý umožňuje poskytnúť tento znak všetkým procesom skupiny, ktoré patrí do určitej cgroup. T.j. tieto procesy sa spustia iba vtedy, keď v systéme nie sú iné úlohy, ktoré čakajú na vykonanie. Na rozdiel od nastavovania atribútu SCHED_IDLE pre každý proces jednotlivo, pri viazaní SCHED_IDLE na cgroup sa pri výbere úlohy na vykonanie zohľadňuje relatívna váha úloh vnútri skupiny.
- Mechanizmus sledovania spotreby pamäte v cgroup bol rozšírený o možnosť sledovania ďalších štruktúr dát jadra, vrátane tých, ktoré sa vytvárajú pre poll-ing, spracovanie signálov a priestorov názvov.
- Bola pridaná podpora asymetrického plánovania priradenia úloh k procesorovým jadrom na architektúrach, kde niektoré CPU umožňujú vykonávanie 32-bitových úloh, zatiaľ čo niektoré pracujú iba v 64-bitovom režime (napríklad ARM). Nový režim umožňuje pri plánovaní vykonávania 32-bitových úloh zohľadniť iba CPU, ktoré podporujú 32-bitové úlohy.
- V rozhraní asynchrónneho vstupu/výstupu io_uring bola pridaná podpora pre otváranie súborov priamo v indexovej tabuľke fixed-file, bez potreby používania súborového deskriptora, čo umožňuje významne urýchliť niektoré typy operácií, ale je to v rozpore s tradičným unixovým procesom používania súborových deskriptorov pri otváraní súborov.
V io_uring pre subsystém BIO (Block I/O Layer) bol implementovaný nový mechanizmus recyklácie BIO, ktorý umožňuje znížiť náklady na správu vnútornej pamäte a približne o 10% zvýšiť počet spracovaných operácií vstupu/výstupu za sekundu. V io_uring bola tiež pridaná podpora systémových volaní mkdirat(), symlinkat() a linkat().
- Pre programy BPF bola implementovaná možnosť požiadania a spracovania udalostí časovača. Bol pridaný iterátor pre UNIX sockety a tiež bola implementovaná možnosť získavať a nastavovať možnosti socketov pre setsockopt. Do BTF dumpera bola pridaná podpora typovaných údajov.
- Na NUMA systémoch s rôznymi typmi pamäte, ktoré sa líšia výkonnosťou, bola v prípade vyčerpaného voľného priestoru implementovaná migrácia vypuditeľných strán pamäte z dynamickej pamäte (DRAM) do pomalšej trvalej pamäte (Persistent Memory) namiesto ich vymazania. Testy preukázali, že táto stratégia zvyčajne zlepšuje výkon na takýchto systémoch. Pre NUMA bola tiež implementovaná možnosť prideľovania strán pamäte pre proces z vybraného súboru uzlov NUMA.
- Pre architektúru ARC bola implementovaná podpora troj- a štvorizbových tabuliek strán pamäte, čo neskôr umožní podporu 64-bitových procesorov ARC.
- Pre architektúru s390 bola implementovaná možnosť použitia mechanizmu KFENCE na detekciu chýb pri práci s pamäťou, a tiež bola pridaná podpora detektora stavov pretekov KCSAN.
- Bola pridaná podpora indexovania zoznamu správ, ktoré sa zobrazujú prostredníctvom printk(), čo umožňuje naraz extrahovať všetky takéto správy a sledovať zmeny v užívateľskom priestore.
- V mmap() bola zrušená podpora pre možnosť VM_DENYWRITE a kód jadra bol zbavený používania režimu MAP_DENYWRITE, čo znížilo počet situácií vedúcich k blokovaniu zápisu do súboru s chybou ETXTBSY.
- Do systému trasovania bol pridaný nový typ kontrol „Event probes“, ktorý je možné pripojiť k existujúcim udalostiam trasovania na definovanie vlastného formátu výstupu.
- Pri zostavovaní jadra pomocou prekladača Clang sa teraz predvolene používa zabudovaný assembler z projektu LLVM.
- V rámci projektu na odstránenie kódu jadra, ktorý spôsoboval varovania prekladača, bol uskutočnený experiment so zapnutím režimu „-Werror“ predvolene, pri ktorom sa varovania prekladača spracovávajú ako chyby. Počas prípravy vydania 5.15 Linus začal akceptovať iba zmeny, ktoré nespôsobujú varovania pri zostavovaní jadra a aktivoval zostavenie s „-Werror“, avšak neskôr súhlasil s názorom, že toto rozhodnutie bolo predčasné a odložil zapnutie „-Werror“ predvolene. Riadenie zapnutia voľby „-Werror“ pri zostavovaní sa vykonáva pomocou parametra WERROR, ktorý je predvolene nastavený na hodnotu COMPILE_TEST, t.j. zapína sa len pri testovacích zostaveniach.
- Virtualizácia a bezpečnosť
- Do Device Mapper (DM) bol pridaný nový spracovateľ dm-ima s implementáciou mechanizmu vzdialenej atestácie založeného na subsystéme IMA (Integrity Measurement Architecture), ktorý umožňuje externému servisu overiť stav subsystémov jadra, aby sa zabezpečila ich autenticita. V praxi dm-ima umožňuje vytvárať pomocou Device Mapper úložiská viazané na externé cloudové systémy, v ktorých pomocou IMA sa kontroluje dôveryhodnosť spúšťanej konfigurácie DM target.
- V prctl() bola implementovaná nová voľba PR_SPEC_L1D_FLUSH, pri ktorej jadro začína mazať obsah cache prvej úrovne (L1D) vždy, keď dôjde k prepnúť kontaxt. Tento režim umožňuje selektívne pre najdôležitejšie procesy implementovať dodatočnú ochranu pred útokmi bočnými kanálmi, ktoré sa vykonávajú na určenie údajov, ktoré sa usadili v cache v dôsledku zraniteľností spôsobených špekulatívnym vykonávaním inštrukcií v CPU. Cena za aktiváciu PR_SPEC_L1D_FLUSH (predvolene nie je aktivovaný) je podstatné zníženie výkonu.
- Bola implementovaná možnosť zostavenia jadra so zapnutím flagu GCC "-fzero-call-used-regs=used-gpr", ktorý zabezpečuje nulovanie všetkých registrov pred návratom riadenia z funkcie. Táto voľba pomáha chrániť pred únikom informácií z funkcií a znižuje o 20 % počet blokov, ktoré sú použiteľné na vytváranie ROP gadgetov (Return-Oriented Programming) v exploitov.
- Bola implementovaná možnosť zostavenia jadier pre architektúru ARM64 vo forme klientov pre hypervízor Hyper-V.
- Bol navrhnutý nový rámec na vývoj ovládačov "VDUSE", ktorý umožňuje implementovať virtuálne blokové zariadenia v užívateľskom priestore a používať Virtio ako transport pre prístup z hosťovských systémov.
- Bol pridaný Virtio ovládač pre zbernicu I2C, ktorý umožňuje emulovať ovládače I2C v režime paravirtuálneho strojového prostredia s použitím samostatných backendov.
- Bol pridaný Virtio ovládač gpio-virtio, ktorý umožňuje hosťovským systémom získať prístup k GPIO linkám poskytovaným hostiteľským systémom.
- Bola pridaná možnosť obmedzenia prístupu k pamäťovým stránkam pre ovládače zariadení s podporou DMA na systémoch bez I/O MMU (jednotka správy pamäte).
- V hypervízore KVM bola implementovaná možnosť výstupu štatistiky vo forme lineárnych a logaritmických histogramov.
- Sieťový subsystém
- Do jadra bol pridaný modul ksmbd s implementáciou súborového servera, ktorý používa protokol SMB3. Modul dopĺňa predtým dostupnú implementáciu klienta SMB a v porovnaní so SMB serverom, ktorý funguje v užívateľskom priestore, je výkonnejší z hľadiska výkonu, spotreby pamäte a integrácie s rozšírenými možnosťami jadra. Ksmbd sa prezentuje ako vysoko výkonné a pripravené na použitie v integrovaných zariadeniach rozšírenie k Samba, s možnosťou integrácie s nástrojmi a knižnicami Samba. Medzi funkciami ksmbd vyniká vylepšená podpora technológie distribuovaného cacheovania súborov (SMB leases) na lokálnych systémoch, ktorá výrazne znižuje prenos dát. V budúcnosti plánujú pridať podporu RDMA ("smbdirect") a rozšírenia protokolu súvisiace s posilnením spoľahlivosti šifrovania a verifikáciou digitálnych podpisov.
- V klientovi CIFS bola ukončená podpora NTLM a menej spoľahlivých algoritmov autentifikácie založených na algoritme DES, ktoré sa používali v protokole SMB1.
- V realizácii sieťových mostov pre vlan bola implementovaná podpora multicastu.
- Do ovládača bonding, ktorý sa používa na agregáciu sieťových rozhraní, bola pridaná podpora subsystému XDP (eXpress Data Path), ktorý umožňuje manipuláciu so sieťovými paketmi pred ich spracovaním sieťovým zásobníkom jadra Linux.
- Vo wireless stacku mac80211 bola implementovaná podpora 6GHZ STA (Špeciálne dočasné oprávnenie) v režimoch LPI, SP a VLP, ako aj možnosť nastavenia samostatných TWT (Cieľový čas prebudenia) v režime prístupového bodu.
- Bola pridaná podpora protokolu MCTP (Management Component Transport Protocol), ktorý sa používa na interakciu riadiacich ovládačov a s nimi súvisiacich zariadení (host procesory, periférne zariadenia atď.).
- Pokračuje integrácia do jadra MPTCP (MultiPath TCP), rozšírenia protokolu TCP pre organizáciu TCP spojenia s dodávkou paketov súčasne po niekoľkých trasách cez rôzne sieťové rozhrania, viazané na rôzne IP adresy. V novej verzii bola pridaná podpora adries v režime fullmesh.
- V netfilter boli pridané spracovateľské moduly pre sieťové prúdy, inkapsulované v protokole SRv6 (Segment Routing IPv6).
- Bola pridaná podpora sockmap pre streamové Unix sockety.
- Zariadenie
- V ovládači amdgpu bola implementovaná podpora APU Cyan Skillfish (označené GPU Navi 1x). Pre APU Yellow Carp bola implementovaná podpora video kodekov. Zlepšená podpora GPU Aldebaran. Boli pridané nové identifikátory kariet na báze GPU Navi 24 "Beige Goby" a RDNA2. Bolo navrhnuté vylepšené zavedenie virtuálnych obrazoviek (VKMS). Bolo implementované sledovanie teploty čipov AMD Zen 3.
- V ovládači amdkfd (pre diskrétne GPU ako Polaris) bol implementovaný manažér zdieľanej virtuálnej pamäte (SVM, shared virtual memory) na báze subsystému HMM (Heterogeneous memory management), ktorý umožňuje využívanie zariadení s vlastnými pamäťovými riadičmi (MMU, memory management unit), ktoré môžu pristupovať k hlavnej pamäti. Takisto pomocou HMM je možné organizovať spoločný adresný priestor medzi GPU a CPU, v ktorom GPU môže pristupovať k hlavnej pamäti procesu.
- V ovládači i915 pre grafické karty Intel bola rozšírená aplikácia manažéra správy video pamäte TTM a zapnutá možnosť správy spotreby energie na báze GuC (Graphics micro Controller). Začala sa príprava na implementáciu podpory grafickej karty Intel ARC Alchemist a GPU Intel Xe-HP.
- V ovládači nouveau je implementované ovládanie podsvietenia panelov eDP pomocou DPCD (DisplayPort Configuration Data).
- Do ovládača msm bola pridaná podpora GPU Adreno 7c Gen 3 a Adreno 680.
- Pre čip Apple M1 bol implementovaný ovládač IOMMU.
- Bol pridaný zvukový ovládač pre systémy založené na APU AMD Van Gogh.
- Do vetvy staging bol pridaný ovládač Realtek R8188EU, ktorý nahradil staršiu verziu ovládača (rtl8188eu) pre bezdrôtové čipy Realtek RTL8188EU 802.11 b/g/n.
- Bol pridaný ovládač ocp_pt pre PCIe kartu vyvíjanú spoločnosťou Meta (Facebook) s implementáciou mini atomových hodín a GNSS prijímača, ktoré môžu byť použité na organizovanie práce samostatného zosynchronizovania presného času. serverov synchronizácie presného času.
- Bola pridaná podpora smartfónov Sony Xperia 10II (Snapdragon 665), Xiaomi Redmi 2 (Snapdragon MSM8916), Samsung Galaxy S3 (Snapdragon MSM8226), Samsung Gavini/Codina/Kyle.
- Bola pridaná podpora ARM SoC a platforiem NVIDIA Jetson TX2 NX Developer Kit, Sancloud BBE Lite, PicoITX, DRC02, SolidRun SolidSense, SKOV i.MX6, Nitrogen8, Traverse Ten64, GW7902, Microchip SAMA7, Qualcomm Snapdragon SDM636/SM8150, Renesas R-Car H3e-2G/M3e-2G, Marvell CN913x, ASpeed AST2600 (serverové dosky Facebook Cloudripper, Elbert a Fuji), 4KOpen STiH418-b2264.
- Bola pridaná podpora LCD panelov Gopher 2b, EDT ETM0350G0DH6/ETMV570G2DHU, LOGIC Technologies LTTD800480070-L6WH-RT, Multi-Innotechnology MI1010AIT-1CP1, Innolux EJ030NA 3.0, ilitek ili9341, E Ink VB3300-KCA, Samsung ATNA33XC20, Samsung DB7430, WideChips WS2401.
- Bol pridaný ovládač LiteETH s podporou Ethernet kontrolérov používaných v softvérových SoC LiteX (pre FPGA).
- Do ovládača usb-audio bola pridaná možnosť lowlatency na riadenie zapnutia práce v režime minimálnych oneskorení. Taktiež bola pridaná možnosť quirk_flags na prenos špecifických nastavení pre zariadenie.
Zároveň latinskoamerická Nadácia pre voľný softvér vytvorila verziu úplne voľného jadra 5.15 – Linux-libre 5.15-gnu, ktorá je vyčistená od prvkov firmvéru a ovládačov obsahujúcich nevoľné komponenty alebo úseky kódu, ktorých použitie je obmedzené výrobcom. V novej verzii bol implementovaný výstup správy do logu o dokončení čistenia. Riešené sú problémy pri vytváraní balíkov s využitím mkspec, zlepšená podpora balíkov snap. Niektoré varovania, ktoré sa zobrazovali pri spracovaní hlavičkového súboru firmware.h, boli odstránené. Povolený je výstup niektorých druhov varovaní („format-extra-args“, komentáre, nepoužívané funkcie a premenné) pri kompilácii v režime „-Werror“. Pridané bolo čistenie ovládača gehc-achc. Kód čistenia blobov v ovládačoch a subsystémoch adreno, btusb, btintel, brcmfmac, aarch64 qcom bol aktualizovaný. Čistenie ovládačov prism54 (odstránené) a rtl8188eu (nahradené r8188eu) bolo ukončené.
Zdroj: opennet.ru
