Vydání jádra Linux 5.15

Po dvou měsících vývoje představil Linus Torvalds vydání linuxového jádra 5.15. Mezi významné změny patří: nový ovladač NTFS s podporou zápisu, modul ksmbd s implementací serveru SMB, subsystém DAMON pro monitorování přístupu do paměti, primitiva zamykání v reálném čase, podpora fs-verity v Btrfs, systémové volání process_mrelease pro paměť systému odezvy na hladovění, modul vzdálené certifikace dm-ima.

Nová verze obsahuje 13499 1888 oprav od 42 10895 vývojářů, velikost opravy je 632522 MB (změny se dotkly 299966 45 souborů, bylo přidáno 5.15 14 řádků kódu, smazáno 14 6 řádků). Přibližně 3 % všech změn zavedených v XNUMX souvisí s ovladači zařízení, přibližně XNUMX % změn souvisí s aktualizací kódu specifického pro hardwarové architektury, XNUMX % se týká síťového zásobníku, XNUMX % se týká souborových systémů a XNUMX % souvisí s vnitřními subsystémy jádra.

Hlavní inovace:

  • Diskový subsystém, I/O a souborové systémy
    • Jádro přijalo novou implementaci souborového systému NTFS, kterou otevřel Paragon Software. Nový ovladač může pracovat v režimu zápisu a podporuje všechny funkce aktuální verze NTFS 3.1, včetně rozšířených atributů souborů, přístupových seznamů (ACL), režimu komprese dat, efektivní práce s prázdnými místy v souborech (sparse) a přehrávání změn z log pro obnovení integrity po selháních.
    • Souborový systém Btrfs podporuje mechanismus fs-verity, který se používá k transparentní kontrole integrity a autenticity jednotlivých souborů pomocí kryptografických hashů nebo klíčů spojených se soubory, uložených v oblasti metadat. Dříve byla fs-verity dostupná pouze pro systémy souborů Ext4 a F2fs.

      Btrfs také přidává podporu pro mapování uživatelských ID pro připojené systémy souborů (dříve podporované pro systémy souborů FAT, ext4 a XFS). Tato funkce umožňuje porovnat soubory konkrétního uživatele na připojeném cizím oddílu s jiným uživatelem v aktuálním systému.

      Mezi další změny Btrfs patří: rychlejší přidávání klíčů do indexu adresářů pro zlepšení výkonu při vytváření souborů; schopnost pracovat raid0 s jedním zařízením a raid10 se dvěma (například během procesu rekonfigurace pole); volba “rescue=ibadroots” pro ignorování nesprávného stromu rozsahu; zrychlení operace „odeslat“; omezení konfliktů zamykání během operací přejmenování; schopnost používat 4K sektory na systémech s velikostí stránky paměti 64K.

    • V XFS byla stabilizována možnost používat v souborovém systému data po roce 2038. Implementován mechanismus pro zpožděnou deaktivaci inodu a podpora zpožděné instalace a odstranění atributů souborů. Pro odstranění problémů byla odstraněna možnost zakázat diskové kvóty pro již připojené diskové oddíly (kvóty můžete vynutit, ale výpočet s nimi spojený bude pokračovat, takže k jejich úplné deaktivaci je nutné opětovné připojení).
    • V EXT4 byla odvedena práce na zvýšení výkonu zápisu vyrovnávací paměti delalloc a zpracování osiřelých souborů, které nadále existují kvůli skutečnosti, že zůstávají otevřené, ale nejsou spojeny s adresářem. Zpracování operací zrušení bylo přesunuto z vlákna jbd2 kthread, aby se zabránilo blokování operací s metadaty.
    • F2FS přidal možnost "discard_unit=block|segment|section" pro svázání operací vyřazení (označení uvolněných bloků, které již nemusí být fyzicky uloženy) na zarovnání vzhledem k bloku, sektoru, segmentu nebo sekci. Přidána podpora pro sledování změn v I/O latenci.
    • Souborový systém EROFS (Extendable Read-Only File System) přidává přímou I/O podporu pro soubory uložené bez komprese a také podporu fiemap.
    • OverlayFS implementuje správné zacházení s příznaky připojení „nezměnitelný“, „pouze připojení“, „synchronizace“ a „noatime“.
    • Systém NFS zlepšil zpracování situací, kdy server NFS přestane reagovat na požadavky. Přidána možnost připojení ze serveru, který se již používá, ale je přístupný prostřednictvím jiné síťové adresy.
    • Byly zahájeny přípravy na přepsání subsystému FSCACHE.
    • Přidána podpora EFI oddílů s nestandardním umístěním GPT tabulek.
    • Mechanismus fanotify implementuje nový příznak FAN_REPORT_PIDFD, který způsobí zahrnutí pidfd do vrácených metadat. Pidfd pomáhá zvládnout situace opětovného použití PID pro přesnější identifikaci procesů přistupujících k monitorovaným souborům (pidfd je spojen s konkrétním procesem a nemění se, zatímco PID může být spojen s jiným procesem poté, co aktuální proces spojený s tímto PID skončí).
    • Do systémového volání move_mount() byla přidána možnost přidávat přípojné body do existujících sdílených skupin, což řeší problémy s ukládáním a obnovováním stavu procesu v CRIU, když je v izolovaných kontejnerech sdíleno více přípojných prostorů.
    • Přidána ochrana proti skrytým rasám, které by mohly potenciálně způsobit poškození souboru při provádění čtení z mezipaměti při zpracování prázdných míst v souboru.
    • Podpora povinného (povinného) zamykání souborů, implementovaná prostřednictvím blokování systémových volání, která vedou ke změně souboru, byla ukončena. Kvůli možným závodním podmínkám byly tyto zámky považovány za nespolehlivé a před mnoha lety byly zastaralé.
    • Byl odstraněn subsystém LightNVM, který umožňoval přímý přístup k SSD disku a obcházel emulační vrstvu. LightNVM ztratil svůj význam po příchodu standardů NVMe, které zajišťují zónování (ZNS, Zoned Namespace).
  • Paměťové a systémové služby
    • Byl implementován subsystém DAMON (Data Access MONitor), který umožňuje sledovat aktivitu související s přístupem k datům v RAM ve vztahu k vybranému procesu běžícímu v uživatelském prostoru. Subsystém vám umožňuje analyzovat, ke kterým paměťovým oblastem proces přistupoval během celé své činnosti a které paměťové oblasti zůstaly nevyzvednuté. DAMON se vyznačuje nízkou zátěží CPU, nízkou spotřebou paměti, vysokou přesností a předvídatelnou konstantní režií, nezávisle na velikosti. Subsystém může být použit jak jádrem k optimalizaci správy paměti, tak obslužnými programy v uživatelském prostoru k pochopení toho, co přesně proces dělá, a optimalizaci využití paměti, například uvolněním přebytečné paměti pro systém.
    • Systémové volání process_mrelease bylo implementováno za účelem urychlení procesu uvolnění paměti procesu, který dokončí jeho provádění. Za normálních okolností nejsou uvolnění prostředků a ukončení procesu okamžité a mohou být z různých důvodů zpožděny, což narušuje systémy včasné odezvy paměti uživatelského prostoru, jako je oomd (poskytovaný systemd) a lmkd (používaný Androidem). Voláním process_mrelease mohou takové systémy předvídatelněji spustit obnovu paměti z vynucených procesů.
    • Z větve jádra PREEMPT_RT, která vyvíjí podporu pro provoz 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. Změny byly přidány do slab alokátoru SLUB, aby se zlepšil provoz v režimu PREEMPT_RT a snížil se dopad na přerušení.
    • Do cgroup byla přidána podpora pro atribut plánovače úloh SCHED_IDLE, což vám umožňuje poskytnout tento atribut všem procesům skupiny zahrnuté v konkrétní cgroup. Tito. tyto procesy budou spuštěny pouze tehdy, když v systému nebudou čekat na provedení žádné jiné úlohy. Na rozdíl od nastavení atributu SCHED_IDLE pro každý proces jednotlivě se při vázání SCHED_IDLE na cgroup bere v úvahu relativní váha úloh ve skupině při výběru úlohy, kterou chcete provést.
    • Mechanismus pro účtování spotřeby paměti v cgroup byl rozšířen o možnost sledovat další datové struktury jádra, včetně struktur vytvořených pro dotazování, zpracování signálu a jmenné prostory.
    • Přidána podpora pro asymetrické plánování vazby úloh na jádra procesorů na architekturách, ve kterých některé CPU umožňují provádění 32bitových úloh a některé fungují pouze v 64bitovém režimu (například ARM). Nový režim umožňuje při plánování 32bitových úloh brát v úvahu pouze CPU, které podporují 32bitové úlohy.
    • Asynchronní I/O rozhraní io_uring nyní podporuje otevírání souborů přímo v indexové tabulce pevných souborů, bez použití deskriptoru souboru, což umožňuje výrazně urychlit některé typy operací, ale jde proti tradičnímu unixovému procesu používání deskriptorů souborů. k otevírání souborů.

      io_uring pro subsystém BIO (Block I/O Layer) implementuje nový recyklační mechanismus („BIO recyklace“), který snižuje režii v procesu správy interní paměti a zvyšuje počet zpracovaných I/O operací za sekundu přibližně o 10 %. . io_uring také přidává podporu pro systémová volání mkdirat(), symlinkat() a linkat().

    • U programů BPF byla implementována možnost žádat a zpracovávat události časovače. Byl přidán iterátor pro UNIX sockety a byla implementována možnost získat a nastavit volby socketů pro setsockopt. BTF dumper nyní podporuje typovaná data.
    • Na systémech NUMA s různými typy paměti, které se liší výkonem, se po vyčerpání volného místa stránky vyřazené paměti přenesou z dynamické paměti (DRAM) do pomalejší trvalé paměti (Persistent Memory) namísto odstranění těchto stránek. Testy ukázaly, že taková taktika obvykle zlepšuje výkon na takových systémech. NUMA také poskytuje možnost alokovat paměťové stránky pro proces z vybrané sady uzlů NUMA.
    • Pro architekturu ARC byla implementována podpora tří a čtyřúrovňových tabulek stránek paměti, což dále umožní podporu 64bitových procesorů ARC.
    • Pro architekturu s390 byla implementována možnost využívat mechanismus KFENCE k detekci chyb při práci s pamětí a přidána podpora pro detektor rasových podmínek KCSAN.
    • Přidána podpora pro indexování seznamu výstupních zpráv pomocí printk(), což vám umožňuje získat všechny takové zprávy najednou a sledovat změny v uživatelském prostoru.
    • mmap() odstranila podporu pro volbu VM_DENYWRITE a kód jádra byl odstraněn z používání režimu MAP_DENYWRITE, což snížilo počet situací, které vedou k blokování zápisů do souboru s chybou ETXTBSY.
    • Do trasovacího subsystému byl přidán nový typ kontrol „Event probes“, které lze připojit k existujícím trasovacím událostem a definovat tak váš vlastní výstupní formát.
    • Při sestavování jádra pomocí kompilátoru Clang se nyní používá výchozí assembler z projektu LLVM.
    • V rámci projektu, jehož cílem bylo zbavit jádro kódu, který vede k tomu, že kompilátor vydává varování, byl proveden experiment se standardně povoleným režimem „-Werror“, ve kterém jsou varování kompilátoru zpracovávána jako chyby. V rámci přípravy na vydání 5.15 začal Linus přijímat pouze změny, které nevedly k varování při sestavování jádra a umožňoval sestavení s "-Werror", ale pak souhlasil, že takové rozhodnutí bylo předčasné a zpožděné povolení "-Werror" ve výchozím nastavení . Zahrnutí příznaku „-Werror“ při sestavování je řízeno pomocí parametru WERROR, který je standardně nastaven na COMPILE_TEST, tzn. Prozatím je povolena pouze pro testovací sestavení.
  • Virtualizace a bezpečnost
    • Do Device Mapper (DM) byl přidán nový handler dm-ima s implementací vzdáleného certifikačního mechanismu založeného na subsystému IMA (Integrity Measurement Architecture), který umožňuje externí službě ověřit stav jaderných subsystémů a zajistit jejich autenticitu. . V praxi dm-ima umožňuje vytvářet úložiště pomocí Device Mapperu, která jsou propojena s externími cloudovými systémy, ve kterých se pomocí IMA kontroluje platnost spuštěné konfigurace cíle DM.
    • prctl() implementuje novou volbu PR_SPEC_L1D_FLUSH, která když je povolena, způsobí, že jádro vyprázdní obsah mezipaměti první úrovně (L1D) pokaždé, když dojde k přepnutí kontextu. Tento režim umožňuje, selektivně pro nejdůležitější procesy, implementovat dodatečnou ochranu proti použití útoků postranním kanálem prováděných k určení dat, která se usadila v mezipaměti v důsledku zranitelností způsobených spekulativním prováděním instrukcí v CPU. Náklady na povolení PR_SPEC_L1D_FLUSH (ve výchozím nastavení není povoleno) představují významné snížení výkonu.
    • Je možné sestavit jádro s přidáním příznaku „-fzero-call-used-regs=used-gpr“ do GCC, který zajistí, že všechny registry budou resetovány na nulu, než funkce vrátí řízení. Tato možnost vám umožňuje chránit se před únikem informací z funkcí a snížit o 20 % počet bloků vhodných pro vytváření gadgetů ROP (Return-Oriented Programming) v exploitech.
    • Byla implementována možnost sestavovat jádra pro architekturu ARM64 ve formě klientů pro hypervizor Hyper-V.
    • Je navržen nový rámec pro vývoj ovladačů „VDUSE“, který umožňuje implementovat virtuální bloková zařízení v uživatelském prostoru a používat Virtio jako přenos pro přístup z hostovaných systémů.
    • Přidán ovladač Virtio pro sběrnici I2C, který umožňuje emulovat řadiče I2C v režimu paravirtualizace pomocí samostatných backendů.
    • Přidán ovladač Virtio gpio-virtio, který hostům umožňuje přístup k linkám GPIO poskytovaným hostitelským systémem.
    • Přidána možnost omezit přístup k paměťovým stránkám pro ovladače zařízení s podporou DMA na systémech bez I/O MMU (jednotka pro správu paměti).
    • Hypervizor KVM má schopnost zobrazovat statistiky 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 využívajícího protokol SMB3. Modul doplňuje implementaci klienta SMB dříve dostupnou v jádře a na rozdíl od serveru SMB běžícího v uživatelském prostoru je efektivnější z hlediska výkonu, spotřeby paměti a integrace s pokročilými schopnostmi jádra. Ksmbd je nabízen jako vysoce výkonné, vestavěné rozšíření Samba, které se podle potřeby integruje s nástroji a knihovnami Samba. Mezi možnosti ksmbd patří vylepšená podpora technologie distribuovaného ukládání souborů do mezipaměti (pronájmy SMB) na místních systémech, což může výrazně snížit provoz. V budoucnu plánují přidat podporu pro RDMA („smbdirect“) a rozšíření protokolu související se zvýšením spolehlivosti šifrování a ověřování pomocí digitálních podpisů.
    • Klient CIFS již nepodporuje NTLM a slabší ověřovací algoritmy založené na DES používané v protokolu SMB1.
    • Podpora multicastu je implementována v implementaci síťových mostů pro vlan.
    • Ovladač propojení, který se používá k agregaci síťových rozhraní, přidal podporu pro subsystém XDP (eXpress Data Path), který vám umožňuje manipulovat se síťovými pakety ve fázi před jejich zpracováním síťovým zásobníkem jádra Linuxu.
    • Bezdrátový stack mac80211 podporuje 6GHZ STA (Special Temporary Authorization) v režimech LPI, SP a VLP a také možnost nastavit individuální TWT (Target Wake Time) v režimu přístupového bodu.
    • Přidána podpora protokolu MCTP (Management Component Transport Protocol), který se používá pro interakci mezi řadiči správy a přidruženými zařízeními (hostitelské procesory, periferní zařízení atd.).
    • Integrace do jádra MPTCP (MultiPath TCP), rozšíření protokolu TCP pro organizaci provozu TCP spojení s doručováním paketů současně po několika trasách přes různá síťová rozhraní spojená s různými IP adresami. Nová verze přidává podporu pro adresy v režimu fullmesh.
    • Do netfilteru byly přidány obslužné rutiny pro síťové toky zapouzdřené v protokolu SRv6 (Segment Routing IPv6).
    • Přidána podpora sockmap pro Unixové streamovací zásuvky.
  • Оборудование
    • Ovladač amdgpu podporuje APU Cyan Skillfish (vybavené GPU Navi 1x). Žlutý kapr APU nyní podporuje video kodeky. Vylepšená podpora GPU Aldebaran. Přidány nové mapové identifikátory založené na GPU Navi 24 „Beige Goby“ a RDNA2. Je navržena vylepšená implementace virtuálních obrazovek (VKMS). Byla implementována podpora pro sledování teploty čipů AMD Zen 3.
    • Ovladač amdkfd (pro diskrétní GPU, jako je Polaris) implementuje správce sdílené virtuální paměti (SVM, sdílená virtuální paměť) založený na subsystému HMM (Heterogeneous memory management), který umožňuje použití zařízení s vlastními jednotkami správy paměti (MMU). , jednotka správy paměti), která má přístup k hlavní paměti. Zejména pomocí HMM můžete organizovat sdílený adresní prostor mezi GPU a CPU, ve kterém má GPU přístup k hlavní paměti procesu.
    • Ovladač i915 pro grafické karty Intel rozšiřuje použití správce video paměti TTM a zahrnuje schopnost řídit spotřebu energie na základě GuC (Graphics micro Controller). Byly zahájeny přípravy na implementaci podpory pro grafickou kartu Intel ARC Alchemist a GPU Intel Xe-HP.
    • Ovladač nouveau implementuje ovládání podsvícení pro eDP panely pomocí DPCD (DisplayPort Configuration Data).
    • Do ovladače msm přidána podpora pro GPU Adreno 7c Gen 3 a Adreno 680.
    • Ovladač IOMMU je implementován pro čip Apple M1.
    • Přidán ovladač zvuku pro systémy založené na AMD Van Gogh APU.
    • Do stagingové větve byl přidán ovladač Realtek R8188EU, který nahradil starou verzi ovladače (rtl8188eu) pro bezdrátové čipy Realtek RTL8188EU 802.11 b/g/n.
    • Ovladač ocp_pt je součástí desky PCIe vyvinuté společností Meta (Facebook) s implementací miniaturních atomových hodin a GNSS přijímače, které lze použít k organizaci provozu samostatných serverů pro přesnou synchronizaci času.
    • Přidána podpora pro smartphony Sony Xperia 10II (Snapdragon 665), Xiaomi Redmi 2 (Snapdragon MSM8916), Samsung Galaxy S3 (Snapdragon MSM8226), Samsung Gavini/Codina/Kyle.
    • Přidána podpora pro ARM SoС a NVIDIA Jetson TX2 NX Developer Kit, Sancloud BBE Lite, PicoITX, DRC02, SolidRun SolidSense, SKOV i.MX6, Nitrogen8, Traverse Ten64, GW7902, Microchip SAMA7, ualcomm Snapdragon SDM636ase-C, HSM Snapdragon SDM8150ase-C desky -3G/M2e-3G, Marvell CN2x, ASpeed ​​​​AST913 (Facebook Cloudripper, serverové desky Elbert a Fuji), 2600KOpen STiH4-b418.
    • Přidána podpora pro Gopher 2b LCD panely, EDT ETM0350G0DH6/ETMV570G2DHU, LOGIC Technologies LTTD800480070-L6WH-RT, Multi-Innotechnology MI1010AIT-1CP1, Innolux EJ030NA 3.0, ETM9341K, VCA3300Bilitek XC33 20, Samsung DB7430, WideChips WS2401 .
    • Přidán ovladač LiteETH s podporou ethernetových řadičů používaných v softwarových SoC LiteX (pro FPGA).
    • Do ovladače usb-audio byla přidána možnost nízké latence pro řízení zahrnutí provozu v režimu minimální latence. Také přidána možnost quirk_flags pro předání nastavení specifických pro zařízení.

Ve stejné době vytvořila Latin American Free Software Foundation verzi zcela svobodného jádra 5.15 - Linux-libre 5.15-gnu, zbavenou prvků firmwaru a ovladačů obsahujících nesvobodné komponenty nebo části kódu, jejichž rozsah je omezený. výrobcem. Nová verze implementuje výstup zprávy do protokolu o dokončení čištění. Problémy s generováním balíčků pomocí mkspec byly opraveny, byla vylepšena podpora balíčků snap. Byla odstraněna některá varování zobrazovaná při zpracování hlavičkového souboru firmware.h. Povolen výstup některých typů varování ("format-extra-args", komentáře, nepoužívané funkce a proměnné) při vytváření v režimu "-Werror". Přidáno čištění ovladače gehc-achc. Aktualizovaný kód čištění objektů blob v ovladačích a podsystémech adreno, btusb, btintel, brcmfmac, aarch64 qcom. Čištění ovladačů prism54 (odstraněno) a rtl8188eu (nahrazeno r8188eu) bylo zastaveno.

Zdroj: opennet.ru

Přidat komentář