Po dvou měsících vývoje Linus Torvalds představil vydání jádra Linux 5.15. Mezi nejvýznamnější změny patří: nový ovladač NTFS s podporou zápisu, modul ksmbd implementující SMB server, subsystém DAMON pro monitoring přístupu k paměti, primitiva zámků pro reálný čas, podpora fs-verity v Btrfs, systémový volání process_mrelease pro reakci na nedostatek paměti a modul vzdáleného ověření dm-ima.
Do nové verze bylo zahrnuto 13499 oprav od 1888 vývojářů, velikost patche – 42 MB (změny se dotkly 10895 souborů, přidáno 632522 řádků kódu, odstraněno 299966 řádků). Přibližně 45 % všech změn v 5.15 se týká ovladačů zařízení, asi 14 % změn se vztahuje na aktualizaci kódu specifického pro hardwarové architektury, 14 % souvisí se síťovým стеком, 6 % s souborovými systémy a 3 % s interními subsystémy jádra.
Hlavní novinky:
- Diskový subsystém, vstup/výstup a souborové systémy
- Do jádra byla přijata nová implementace souborového systému NTFS, kterou otevřela společnost Paragon Software. Nový ovladač může pracovat v režimu zápisu a podporuje všechny možnosti aktuální verze NTFS 3.1, včetně rozšířených atributů souborů, seznamů přístupu (ACL), režimu komprese dat, efektivní práce s mezerami v souborech (sparse) a obnovování integrity po selhání pomocí protokolovaných změn.
- V souborovém systému Btrfs byla implementována podpora mechanismu fs-verity, který se používá pro transparentní kontrolu integrity a autenticity jednotlivých souborů pomocí kryptografických hashů nebo klíčů asociovaných se soubory, které jsou uloženy v oblasti metadat. Dříve byl fs-verity dostupný pouze pro FS Ext4 a F2fs.
V Btrfs byla také přidána podpora mapování identifikátorů uživatelů pro připojené souborové systémy (dříve podporováno pro FS FAT, ext4 a XFS). Tato funkce umožňuje přiřadit soubory konkrétního uživatele na připojené cizí parti jako jinému uživateli v aktuálním systému.
Mezi dalšími změnami v Btrfs: zrychlení přidávání klíčů do indexu adresáře pro zvýšení výkonu při vytváření souborů; možnost provozu raid0 na jednom zařízení a raid10 na dvou (například během přeconfigurování pole); volba „rescue=ibadroots“ pro ignorování neplatného stromu extents; zrychlení operace „send“; snížení konfliktů zámků během operací přejmenování; možnost použití 4K sektorů na systémech s velikostí stránky paměti 64K.
- Ve XFS byla stabilizována možnost použití v FS dat po roce 2038. Byla implementována funkce odložené deaktivace inode a podpora odloženého nastavování a mazání atributů souborů. S cílem vyloučit problémy byla odstraněna možnost vypínání diskových kvót pro již připojené oddíly (kvóty lze vynutit, ale související počítání bude pokračovat, proto pro plné vypnutí je třeba opětovné připojení).
- V EXT4 byla provedena práce na zvýšení výkonu zápisu delalloc-bufferů a zpracování osiřelých (orphan) souborů, které stále existují, protože zůstávají otevřené, ale nemají vazbu na adresář. Zpracování operací discard bylo vyjmuto z jbd2-vlákna kthread, aby se vyloučily blokace operací s metadaty.
- V F2FS byla přidána možnost „discard_unit=block|segment|section“ pro vázání operací discard (označení osvobozených bloků, které již není třeba uchovávat fyzicky) k vyrovnání vzhledem k bloku, sektoru, segmentu nebo sekci. Byla přidána podpora sledování změn zpoždění při vstupu/výstupu.
- V souborovém systému EROFS (Extendable Read-Only File System) byla přidána podpora přímého vstupu/výstupu pro soubory uložené bez komprese, stejně jako podpora fiemap.
- V OverlayFS byla implementována správná obsluha montážních příznaků „immutable“, „append-only“, „sync“ a „noatime“.
- V NFS bylo zlepšeno zpracování situací, kdy NFS-server přestal reagovat na požadavky. Byla přidána možnost připojení z již používaného serveru, ale dostupného přes jinou síťovou adresu.
- Bylo zahájené přípravy na přepsání subsystému FSCACHE.
- Byla přidána podpora EFI oddílů s nestandardním umístěním tabulek GPT.
- Ve mechanismu fanotify byl implementován nový příznak FAN_REPORT_PIDFD, který způsobuje, že pidfd je zahrnut mezi vracené metadata. Pidfd pomáhá řešit situace opakovaného použití PID pro přesnější identifikaci procesů, které se pokoušejí o přístup k sledovaným souborům (pidfd je spojen s konkrétním procesem a nemění se, zatímco PID může být přiřazen jinému procesu po ukončení aktuálního procesu spojeného s tímto PID).
- Do systémového volání move_mount() byla přidána možnost přidávat body připojení do existujících sdílených skupin, což vyřešilo problémy s uchováváním a obnovováním stavu procesů v nástroji CRIU v případě několika montážních prostorů sdílených mezi izolovanými kontejnery.
- Byla přidána ochrana proti skrytým podmínkám závodu, které mohly potenciálně vést k poškození souborů během čtení z cache při zpracování mezer ve souboru.
- Byla ukončena podpora povinných (mandatory) zámků souborů, které byly implementovány prostřednictvím systémových volání blokujících, jež vedly ke změně souboru. Kvůli možným podmínkám závodu byly tyto zámky považovány za nespolehlivé a již před mnoha lety byly prohlášeny za zastaralé.
- Byl odstraněn subsystém LightNVM, který umožňoval přímý přístup k SSD disku, obcházející vrstvu emulace. LightNVM ztratil smysl po vzniku standardů NVMe, které zahrnují možnost zónování (ZNS, Zoned Namespace).
- Paměť a systémové služby
- Byl implementován subsystém DAMON (Data Access MONitor), který umožňuje sledovat aktivitu spojenou s přístupem k datům v operační paměti vázanou na zvolený proces běžící ve space uživatele. Tento subsystém umožňuje analyzovat, ke kterým oblastem paměti proces přistupoval po celou dobu své činnosti, a které oblasti paměti zůstaly nevyužité. Mezi vlastnosti DAMON patří nízká zátěž CPU, malá spotřeba paměti, vysoká přesnost a předvídatelné stálé režijní náklady, které nezávisí na velikosti. Tento subsystém může být používán jak jádrem pro optimalizaci správy paměti, tak nástroji ve space uživatele pro pochopení toho, co daný proces dělá, a pro optimalizaci využívání paměti, například uvolnění nadbytečné paměti systému.
- Byl implementován systémový hovor process_mrelease, který umožňuje zrychlit proces uvolňování paměti procesu, který končí svůj běh. Za normálních podmínek je uvolnění prostředků a dokončení procesu prováděno nikoli okamžitě a z různých důvodů může být zpožděno, což brání správnému fungování systémů časného reakčního zásahu na nedostatek paměti, jako jsou oomd (poskytováno v systemd) a lmkd (používané v systému Android). Pomocí volání process_mrelease mohou tyto systémy předvídatelněji zahájit navracení paměti od násilně ukončovaných procesů.
- Z větve jádra PREEMPT_RT, ve které se vyvíjí podpora pro práci v reálném čase, byly přeneseny varianty primitiv pro organizaci zámků mutex, ww_mutex, rw_semaphore, spinlock a rwlock, založené na subsystému RT-Mutex. Do SLUB slab allocatoru byly přidány změny, které zlepšují fungování v režimu PREEMPT_RT a snižují vliv na přerušení.
- Do cgroup byla přidána podpora atributu plánovače úloh SCHED_IDLE, který umožňuje vybavit tímto označením všechny procesy skupiny, které patří do určité cgroup. Tedy tyto procesy budou spuštěny pouze tehdy, když systém nemá žádné jiné úlohy čekající na provedení. Na rozdíl od nastavení atributu SCHED_IDLE pro každý proces jednotlivě, při přiřazení SCHED_IDLE k cgroup se při výběru úlohy k provedení zohledňuje relativní váha úloh uvnitř skupiny.
- Mechanismus sledování využívání paměti v cgroup byl rozšířen o možnost sledování dalších struktur dat jádra, včetně těch, které vznikají pro polling, zpracování signálů a prostorů názvů.
- Byla přidána podpora asymetrického plánování přiřazování úloh k procesorovým jádrům na architekturách, kde některé CPU umožňují provádění 32bitových úloh, zatímco některé fungují pouze v 64bitovém režimu (například ARM). Nový režim umožňuje při plánování provádění 32bitových úloh zohlednit pouze CPU, které podporují 32bitové úlohy.
- V rozhraní asynchronního vstupu/výstupu io_uring byla přidána podpora pro otevírání souborů přímo v indexové tabulce fixed-file, aniž by bylo potřeba používat souborový deskriptor, což umožňuje výrazně urychlit některé typy operací, avšak stojí to v rozporu s tradičním unixovým procesem používání souborových deskriptorů pro otevírání souborů.
V io_uring pro subsystém BIO (Block I/O Layer) byl zaveden nový mechanismus recyklace BIO, který umožňuje snížit režijní náklady při správě interní paměti a zhruba o 10 % zvýšit počet zpracovávaných vstupně/výstupních operací za sekundu. V io_uring byla také přidána podpora systémových volání mkdirat(), symlinkat() a linkat().
- Pro BPF programy byla implementována možnost požadovat a zpracovávat události časovače. Byl přidán iterátor pro UNIX sokety a implementována možnost získávat a nastavovat možnosti soketů pro setsockopt. Do BTF dumpovacího programu byla přidána podpora typovaných dat.
- Na NUMA systémech s různými typy paměti, které se liší výkonem, při vyčerpání volného prostoru byl realizován přesun vyhazovaných stránek paměti z dynamické paměti (DRAM) do pomalejší trvalé paměti (Persistent Memory) místo jejich vymazání. Testy ukázaly, že tato taktika zpravidla zlepšuje výkon na takových systémech. Pro NUMA byla také implementována možnost alokace stránek paměti pro proces z vybraného souboru NUMA uzlů.
- Pro architekturu ARC byla zavedena podpora tří- a čtyřúrovňových tabulek stránek paměti, což v budoucnu umožní implementaci podpory 64bitových procesorů ARC.
- Pro architekturu s390 byla zavedena možnost aplikace mechanismu KFENCE pro detekci chyb při práci s pamětí a také byla přidána podpora detektoru závodních stavů KCSAN.
- Byla přidána podpora pro indexování seznamu zpráv, které jsou vypsány prostřednictvím printk(), což umožňuje najednou extrahovat všechny takové zprávy a sledovat změny ve uživatelském prostoru.
- V mmap() byla ukončena podpora volby VM_DENYWRITE a jádro bylo zbaveno používání režimu MAP_DENYWRITE, což snížilo počet situací, které vedly k blokování zápisu do souboru s chybou ETXTBSY.
- Do subsystému sledování byl přidán nový typ kontrol „Event probes“, které lze připojit k existujícím událostem sledování, čímž se určí vlastní formát výstupu.
- Při kompilaci jádra s použitím překladače Clang je nyní ve výchozím nastavení využíván integrovaný assembler z projektu LLVM.
- V rámci projektu zaměřeného na odstranění kódu, který vede k výpisu varování od překladače, byl proveden experiment se zapnutím výchozího režimu „-Werror“, při kterém jsou varování překladače zpracovávána jako chyby. Při přípravě vydání 5.15 Linus začal přijímat pouze změny, které nevyvolávají varování při kompilaci jádra, a aktivoval kompilaci s „-Werror“, ale poté se připojil k názoru, že takové řešení je předčasné, a odložil zapnutí „-Werror“ ve výchozím nastavení. Řízení zapnutí příznaku „-Werror“ při kompilaci se provádí pomocí parametru WERROR, který je ve výchozím nastavení nastaven na hodnotu COMPILE_TEST, tedy zatím se zapíná pouze při testovacích kompilacích.
- Virtualizace a bezpečnost
- Do Device Mapperu (DM) byl přidán nový zpracovatel dm-ima s implementací mechanismu vzdálené attestation založeného na subsystému IMA (Integrity Measurement Architecture), který umožňuje externí službě ověřit stav subsystémů jádra, aby se zajistila jejich autentičnost. V praxi dm-ima umožňuje vytvářet pomocí Device Mapperu úložiště spojená s externími cloudovými systémy, ve kterých se pomocí IMA kontroluje pravost spouštěné konfigurace cíle DM.
- V prctl() byla implementována nová volba PR_SPEC_L1D_FLUSH, která při zapnutí způsobí, že jádro začíná vymazávat obsah prvního úrovňového cache (L1D) pokaždé, když dochází k přepnutí kontextu. Tento režim umožňuje cíleně implementovat dodatečnou ochranu pro nejdůležitější procesy proti útokům pomocí postranních kanálů, které se snaží zjistit data usazená v cache v důsledku zranitelností způsobených spekulativním vykonáváním instrukcí v CPU. Cenou za zapnutí PR_SPEC_L1D_FLUSH (ve výchozím nastavení není aktivováno) je výrazné snížení výkonnosti.
- Byla zavedena možnost kompilace jádra s přidáním příznaku GCC „-fzero-call-used-regs=used-gpr“, který zajišťuje vynulování všech registrů před návratem řízení ze funkce. Tato volba umožňuje ochránit se před únikem informací z funkcí a snížit o 20 % počet bloků vhodných pro sestavení ROP gadgetů (Return-Oriented Programming) v exploitech.
- Byla zavedena možnost kompilace jader pro architekturu ARM64 ve formě klientů pro hypervisor Hyper-V.
- Byl navržen nový framework pro vývoj ovladačů „VDUSE“, který umožňuje implementovat virtuální bloková zařízení v uživatelském prostoru a použít Virtio jako transport pro přístup z hostitelských systémů.
- Byl přidán Virtio ovladač pro sběrnici I2C, který umožňuje emulovat I2C řadiče v režimu paravirtualizace s použitím jednotlivých backendů.
- Byl přidán Virtio ovladač gpio-virtio, který umožňuje hostitelským systémům přístup k řadám GPIO poskytovaným hostitelským systémem.
- Byla přidána možnost omezení přístupu k stránkám paměti pro ovladače zařízení s podporou DMA na systémech bez I/O MMU (jednotky pro správu paměti).
- V hypervisoru KVM byla zavedena možnost výstupu statistik ve formě lineárních a logaritmických histogramů.
- Síťová subsystém
- Do jádra byl přidán modul ksmbd s implementací souborového serveru, který používá protokol SMB3. Tento modul doplňuje dříve dostupnou v jádře implementaci klienta SMB a na rozdíl od SMB serveru běžícího v uživatelském prostoru, je výkonnější z hlediska efektivity, spotřeby paměti a integrace s rozšířenými možnostmi jádra. Ksmbd je prezentován jako vysoce výkonné a připravené k použití na vestavěných zařízeních rozšíření k Samba, které je možné integrovat s nástroji a knihovnami Samba. Mezi funkcemi ksmbd vyniká vylepšená podpora technologie distribuovaného cachování souborů (SMB leases) na místních systémech, která výrazně snižuje provoz. V budoucnu plánují přidat podporu RDMA („smbdirect“) a rozšíření protokolu, související se zvýšením spolehlivosti šifrování a ověřováním digitálními podpisy.
- V klientovi CIFS byla ukončena podpora NTLM a méně spolehlivých algoritmů autentizace založených na algoritmu DES používaných v protokolu SMB1.
- V implementaci síťových mostů pro vlan byla zavedena podpora multicastu.
- Do ovladače bonding, používaného pro agregaci síťových rozhraní, byla přidána podpora subsystému XDP (eXpress Data Path), který umožňuje manipulaci se síťovými pakety před jejich zpracováním jádrem linuxového síťového stacku.
- V bezdrátovém stacku mac80211 byla zavedena podpora 6GHZ STA (Special Temporary Authorization) v režimech LPI, SP a VLP, stejně jako možnost nastavení jednotlivých TWT (Target Wake Time) v režimu přístupového bodu.
- Byla přidána podpora protokolu MCTP (Management Component Transport Protocol), který se používá pro interakci řídících modulů a jejich zařízení (hostitelské procesory, periferní zařízení atd.).
- Pokračuje integrace do jádra MPTCP (MultiPath TCP), rozšíření protokolu TCP pro organizaci TCP spojení s doručováním paketů současně přes několik tras různými síťovými rozhraními, přiřazenými k různým IP adresám. V novém vydání byla přidána podpora adres v režimu fullmesh.
- V netfilter byly přidány zpracovatele síťových toků, které jsou enkapsulovány v protokolu SRv6 (Segment Routing IPv6).
- Byla přidána podpora sockmap pro streamové Unix sockety.
- Hardware
- V ovladači amdgpu byla zavedena podpora APU Cyan Skillfish (s GPU Navi 1x). Pro APU Yellow Carp byla zavedena podpora video kodeků. Byla vylepšena podpora GPU Aldebaran. Byly přidány nové identifikátory karet na bázi GPU Navi 24 „Beige Goby“ a RDNA2. Bylo navrženo vylepšené provedení virtuálních obrazovek (VKMS). Byla zavedena podpora sledování teploty čipů AMD Zen 3.
- V ovladači amdkfd (pro diskrétní GPU, jako je Polaris) byl implementován správce sdílené virtuální paměti (SVM, shared virtual memory) na bázi subsystému HMM (Heterogeneous memory management), který umožňuje používat zařízení s vlastním řídícím blokem paměti (MMU, memory management unit), která mohou přistupovat k hlavní paměti. To zahrnuje organizaci společného adresního prostoru mezi GPU a CPU, ve kterém může GPU přistupovat k hlavní paměti procesu.
- V ovladači i915 pro grafické karty Intel bylo rozšířeno použití správce řízení grafické paměti TTM a byla zavedena možnost správy spotřeby energie na bázi GuC (Graphics micro Controller). Začala se příprava na implementaci podpory grafické karty Intel ARC Alchemist a GPU Intel Xe-HP.
- V ovladači nouveau bylo implementováno řízení podsvícení panelů eDP pomocí DPCD (DisplayPort Configuration Data).
- Do ovladače msm byla přidána podpora GPU Adreno 7c Gen 3 a Adreno 680.
- Pro čip Apple M1 byl implementován ovladač IOMMU.
- Byl přidán zvukový ovladač pro systémy založené na APU AMD Van Gogh.
- Do větve staging byl přidán ovladač Realtek R8188EU, který nahradil starší variantu ovladače (rtl8188eu) pro bezdrátové čipy Realtek RTL8188EU 802.11 b/g/n.
- Byl přijat ovladač ocp_pt pro vyvíjenou společností Meta (Facebook) PCIe desku s realizací miniaturizovaných atomových hodin a GNSS přijímače, které mohou být použity pro organizaci izolované servery synchronizace přesného času.
- Byla přidána podpora smartphonů Sony Xperia 10II (Snapdragon 665), Xiaomi Redmi 2 (Snapdragon MSM8916), Samsung Galaxy S3 (Snapdragon MSM8226), Samsung Gavini/Codina/Kyle.
- Byla přidána podpora ARM SoC a desek 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é desky Facebook Cloudripper, Elbert a Fuji), 4KOpen STiH418-b2264.
- Byla přidána podpora LCD panelů 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.
- Byl přidán ovladač LiteETH s podporou Ethernetových řadičů používaných v programových SoC LiteX (pro FPGA).
- Do ovladače usb-audio byla přidána možnost lowlatency pro ovládání zapnutí režimu minimálních zpoždění. Také byla přidána možnost quirk_flags pro předávání specifických nastavení pro zařízení.
Současně latinskoamerická Nadace svobodného softwaru představila variantu zcela svobodného jádra 5.15 — Linux-libre 5.15-gnu, očištěného od prvků firmware a ovladačů obsahujících nesvobodné komponenty nebo kódy, jejichž použití je omezeno výrobcem. V nové verzi byl implementován výstup zprávy do logu o dokončení úklidu. Byly odstraněny problémy při vytváření balíčků pomocí mkspec, byla vylepšena podpora balíčků snap. Byla odstraněna některá upozornění, která se zobrazovala při zpracování hlavičkového souboru firmware.h. Bylo povoleno zobrazení některých typů výstrah („format-extra-args“, komentáře, nepoužívané funkce a proměnné) při kompilaci v režimu „-Werror“. Bylo přidáno čištění ovladače gehc-achc. Byla aktualizována kód čistění blobů v ovladačích a subsystémech adreno, btusb, btintel, brcmfmac, aarch64 qcom. Čištění ovladačů prism54 (odebráno) a rtl8188eu (nahrazeno r8188eu) bylo zastaveno.
Zdroj: opennet.ru
