Vydanie jadra Linux 5.16

Po dvoch mesiacoch vývoja predstavil Linus Torvalds vydanie linuxového jadra 5.16. Medzi najvýznamnejšie zmeny patrí systémové volanie futex_waitv na zlepšenie výkonu Windows hier vo Wine, sledovanie chýb vo FS cez fanotify, koncepcia fólií v systéme správy pamäte, podpora inštrukcií procesora AMX, možnosť rezervovať pamäť pre sieťové zásuvky, podpora klasifikácie paketov vo fáze „egresu“ sieťového filtra, používanie subsystému DAMON na proaktívne odstránenie nevyužitých pamäťových oblastí, zlepšenie zvládania preťaženia pri veľkom objeme operácií zápisu, podpora pevných diskov s viacerými jednotkami.

Nová verzia obsahuje 15415 2105 opráv od 45 12023 vývojárov, veľkosť opravy je 685198 MB (zmeny sa dotkli 263867 44 súborov, pribudlo 5.16 16 riadkov kódu, zmazalo sa 16 4 riadkov). Približne 4 % všetkých zmien zavedených v XNUMX súvisí s ovládačmi zariadení, približne XNUMX % zmien súvisí s aktualizáciou kódu špecifického pre hardvérové ​​architektúry, XNUMX % súvisí so sieťovým zásobníkom, XNUMX % sa týka súborových systémov a XNUMX % súvisia s internými subsystémami jadra.

Kľúčové inovácie v jadre 5.16:

  • Diskový subsystém, I/O a súborové systémy
    • Do mechanizmu fanotify boli pridané nástroje na sledovanie stavu súborového systému a sledovanie výskytu chýb. Informácie o chybách sa prenášajú pomocou nového typu udalostí – FAN_FS_ERROR, ktoré je možné zachytiť v monitorovacích systémoch bežiacich v užívateľskom priestore a okamžite informovať administrátora alebo spustiť procesy obnovy. Keď sa kaskádovito vyskytne séria chýb, fanotify zaistí doručenie prvej chybovej správy spolu s počítadlom všeobecných problémov, aby sa zjednodušila následná analýza príčiny zlyhania. Podpora sledovania chýb je v súčasnosti implementovaná iba pre súborový systém Ext4.
    • Vylepšené spracovanie preťaženia zápisu, ku ktorému dochádza, keď objem operácií zápisu prekročí priepustnosť disku a systém je nútený blokovať požiadavky procesu na zápis, kým sa nedokončia požiadavky, ktoré už boli odoslané. V novej verzii bol úplne prepracovaný mechanizmus jadra slúžiaci na získavanie informácií o výskyte preťaženia a blokovanie úloh, keďže v starej implementácii boli problémy s prepojením spracovania preťaženia zápisom s premiestnením pamäťových stránok do swap sekcie. keď v systéme nie je dostatok pamäte.
    • Btrfs implementuje podporu technológie zónovania zariadení (Zoned Namespace), ktorá sa používa v pevných diskoch alebo NVMe SSD na rozdelenie úložného priestoru do zón, ktoré tvoria skupiny blokov alebo sektorov, do ktorých je povolené len postupné pridávanie údajov, čím sa aktualizuje celá skupina bloky. Okrem toho boli vykonané menšie optimalizácie v protokolovaní inodov, čo zvýšilo priepustnosť v teste dbench o 3 % a znížilo latenciu o 11 %. Prepracovaný bol mechanizmus protokolovania adresárov, v ktorom sa pre zvýšenie efektivity znížil počet operácií vyhľadávania a blokovania v strome. Zrýchlilo sa vkladanie prvkov do štruktúry bstrom v dávkovom režime (čas na hromadné vkladanie prvkov sa skrátil o 4% a mazanie o 12%). Pridaná obmedzená podpora používania kompresie pri písaní čiastkových stránok, ako aj možnosť defragmentovať podstránky. Boli urobené prípravy na umožnenie podpory druhej verzie protokolu pre príkaz „odoslať“.
    • Súborový systém XFS znižuje spotrebu pamäte používaním oddelených slab cache pre často používané položky a redukciou niektorých dátových štruktúr.
    • V súborovom systéme Ext4 sú zaznamenané iba opravy chýb a presnejší výpočet lenivých inicializačných parametrov tabuľky Inode.
    • Na úrovni blokových zariadení boli implementované optimalizácie, aby sa výrazne zvýšila efektivita prepájania operácií s jadrami CPU.
    • Pridaná počiatočná podpora pre pevné disky s viacerými nezávislými jednotkami (multi-aktuátor), vďaka čomu je možné súčasne pristupovať k niekoľkým sektorom v rôznych oblastiach magnetickej platne.
    • Pridaný nový príkaz ioctl CDROM_TIMED_MEDIA_CHANGE na zisťovanie udalostí zmeny média v optickej jednotke.
    • Súborový systém EROFS (Enhanced Read-Only File System) pridal možnosť pracovať na viacerých úložných zariadeniach. Rôzne zariadenia môžu byť mapované do jedného 32-bitového bloku adries. Pridaná bola aj podpora kompresie pomocou algoritmu LZMA.
    • Do súborového systému F2FS boli pridané možnosti pripojenia na kontrolu fragmentácie súborov pri umiestnení do úložiska (napríklad na ladenie optimalizácií pre prácu s fragmentovaným úložiskom).
    • CEPH štandardne umožňuje asynchrónne vytváranie a odstraňovanie adresárov (na návrat k starému správaniu použite pri pripájaní príznak '-o wsync'). Pridaná údržba metrík, ktoré sledujú operácie kopírovania externých objektov.
    • Do CIFS bol pridaný parameter pripojenia tcpnodelay, ktorý nastavuje režim tcp_sock_set_nodelay pre sieťový soket, ktorý zakazuje čakanie na vyplnenie frontu TCP zásobníkom. Pridaná podpora pre vnorené prepojenia DFS (Distributed File System) pri opätovnom pripojení.
    • Pridaná podpora pre dokončenie požiadaviek na blokové zariadenie v dávkovom režime. Testovanie zmeny ukázalo zvýšenie intenzity operácií náhodného čítania z diskov Optane zo 6.1 na 6.6 milióna IOPS na jednom jadre CPU.
  • Pamäťové a systémové služby
    • Pridané nové systémové volanie futex_waitv, ktoré vám umožňuje sledovať stav niekoľkých futexov naraz pomocou jediného systémového volania. Táto funkcia pripomína funkciu WaitForMultipleObjects dostupnú vo Windows, ktorej emulácia cez futex_waitv môže byť užitočná na zlepšenie výkonu Windows hier bežiacich pod Wine alebo Proton. Okrem toho je možné simultánne čakanie na futexy využiť aj na optimalizáciu výkonu natívnych zostavení hier pre Linux.
    • Bol implementovaný koncept stránkových fólií, ktorých použitie v niektorých podsystémoch jadra urýchli správu pamäte pri typickom zaťažení. V súčasnosti už bol hlavný subsystém správy pamäte v jadre a implementácia vyrovnávacej pamäte stránok prenesená do fólií a v budúcnosti sa plánuje prenos súborových systémov. V budúcnosti sa tiež plánuje pridať do jadra podporu pre viacstránkové foliá.

      Tomes pripomínajú zložené stránky, ale majú vylepšenú sémantiku a prehľadnejšiu organizáciu práce. Na správu systémovej pamäte je dostupná pamäť RAM rozdelená na pamäťové stránky, ktorých veľkosť sa líši podľa architektúry, ale na systémoch x86 sa meria v kilobajtoch (zvyčajne 4096 bajtov). Moderné systémy sa dodávajú s desiatkami gigabajtov RAM, čo robí správu pamäte zložitejšou kvôli potrebe spracovávať obrovské množstvo pamäťových stránok. Aby sa znížil počet stránok, jadro predtým implementovalo koncept zložených stránok so štruktúrami pokrývajúcimi viac ako jednu fyzickú stránku pamäte. Ale API na manipuláciu so zlúčenými pamäťovými stránkami ponechalo veľa požiadaviek a viedlo k dodatočnej réžii.

    • Do plánovača úloh bol pridaný obslužný program, ktorý zohľadňuje klastrovanie vyrovnávacej pamäte na CPU. V niektorých procesoroch, ako napríklad Kunpeng 920 (ARM) a Intel Jacobsville (x86), môže určitý počet jadier CPU, zvyčajne 4, kombinovať vyrovnávaciu pamäť L3 alebo L2. Zohľadnenie takýchto topológií môže výrazne zlepšiť efektivitu distribúcie úloh medzi jadrá CPU v plánovači úloh, pretože presun úloh v rámci toho istého klastra CPU umožňuje zvýšiť priepustnosť prístupu k pamäti a znížiť spory o vyrovnávaciu pamäť.
    • Pridaná podpora pre inštrukcie AMX (Advanced Matrix Extensions) implementované v pripravovaných serverových procesoroch Intel Xeon Scalable s kódovým označením Sapphire Rapids. AMX ponúka nové konfigurovateľné TMM "TILE" registre a inštrukcie pre manipuláciu s dátami v týchto registroch, ako napríklad TMUL (Tile matrix MULtiply) pre maticové násobenie.
    • Na základe subsystému DAMON (Data Access MONitor) pridaného v poslednom vydaní bolo implementovaných niekoľko nových funkcií, ktoré umožňujú monitorovať prístup k údajom v RAM vo vzťahu k vybranému procesu bežiacemu v užívateľskom priestore. Subsystém napríklad umožňuje analyzovať, ku ktorým pamäťovým oblastiam proces pristupoval počas celej svojej činnosti a ktoré pamäťové oblasti zostali nevyužité.
      • DAMON_RECLAIM na identifikáciu a vyradenie pamäťových oblastí, ku ktorým nebol prístup. Mechanizmus možno použiť na proaktívne vyradenie pamäťových stránok, keď sa voľná pamäť blíži k vyčerpaniu.
      • DAMOS (Operačné schémy založené na monitorovaní prístupu k údajom) na aplikáciu špecifikovaných operácií madvise(), ako je uvoľnenie dodatočnej voľnej pamäte, na spracovanie oblastí pamäte, pre ktoré je pevne stanovená určitá frekvencia prístupu do pamäte. Parametre DAMOS sa konfigurujú pomocou debugfs.
      • Schopnosť monitorovať fyzický adresný priestor pamäte (predtým bolo možné monitorovať iba virtuálne adresy).
    • Implementácia kompresného algoritmu zstd bola aktualizovaná na verziu 1.4.10, čím sa výrazne zlepšil výkon rôznych podsystémov jadra, ktoré používajú kompresiu (napríklad rozbaľovanie obrazu jadra sa zrýchlilo o 35 %, výkon rozbaľovania komprimovaných údajov v Btrfs a SquashFS sa zvýšil o 15% a v ZRAM - o 30%). Jadro spočiatku používalo samostatnú implementáciu zstd, založenú na verzii 1.3.1, ktorá bola vydaná pred viac ako tromi rokmi a neobsahovala veľa dôležitých optimalizácií. Okrem prechodu na aktuálnu verziu pridaný patch zjednodušuje aj synchronizáciu s upstream vetvou zstd, čo vám umožňuje generovať kód na zahrnutie do jadra priamo z hlavného úložiska zstd. V budúcnosti sa plánuje aktualizácia kódu zstd v jadre, keď budú vydané nové verzie knižnice zstd.
    • Veľká časť vylepšení bola vykonaná v subsystéme eBPF. Pridaná možnosť volať funkcie modulu jadra z programov BPF. Funkcia bpf_trace_vprintk() bola implementovaná, na rozdiel od bpf_trace_printk(), ktorá vám umožňuje vypísať viac ako tri argumenty naraz. Pribudol nový Bloom filter štruktúry dátového úložiska (BPF map), ktorý umožňuje použiť rovnomennú pravdepodobnostnú dátovú štruktúru na určenie prítomnosti prvku v množine. Bol pridaný nový atribút BTF_KIND_TAG, ktorý je možné použiť v programoch BPF na naviazanie tagov na parametre funkcií, napríklad na zjednodušenie detekcie chýb v užívateľských programoch. V libbpf je možné vytvárať vlastné sekcie .rodata.*/.data.*, implementovaná je podpora udalostí sledovania uprobe a kprobe a pribudlo API na kopírovanie všetkých typov BTF z jedného objektu do druhého. Podpora AF_XDP bola presunutá z libbpf do samostatnej knižnice libxdp. Pre architektúru MIPS bol implementovaný JIT kompilátor pre virtuálny stroj BPF.
    • Pre architektúru ARM64 bola implementovaná podpora rozšírení ARMv8.6 pre časovač, vrátane tých, ktoré umožňujú samosynchronizujúcu reprezentáciu systémových registrov bez použitia inštrukcií ISB.
    • Pre architektúru PA-RISC bola implementovaná možnosť využiť mechanizmus KFENCE na detekciu chýb pri práci s pamäťou a pridaná podpora pre detektor rasových podmienok KCSAN.
    • Prístupové práva k tracefom je možné konfigurovať na úrovni jednotlivých používateľov a skupín, napríklad teraz môžete povoliť prístup k nástrojom sledovania len členom určitej skupiny.
  • Virtualizácia a bezpečnosť
    • Subsystémy io_uring a device-mapper implementujú podporu pre generovanie udalostí auditu. io_uring poskytuje možnosť riadiť prístup prostredníctvom modulov LSM. Pridaná možnosť auditovať systémové volanie openat2().
    • Kód jadra je úplne bez výrazov so súvislými veľkými písmenami v prepínači (bez návratu alebo prerušenia po každom bloku malých a veľkých písmen). Pri zostavovaní jadra bude teraz možné použiť režim „-Wimplicit-fallthrough“.
    • Zahrnuté zmeny na sprísnenie kontroly hraníc pri vykonávaní funkcie memcpy().
    • Asynchrónne I/O rozhranie io_uring implementuje schopnosť aplikovať bezpečnostné politiky definované modulmi SELinux a Smack na I/O operácie.
    • Subsystém IMA (Integrity Measurement Architecture), ktorý umožňuje externej službe overiť stav subsystémov jadra, aby sa zabezpečila ich autentickosť, implementuje možnosť aplikovať pravidlá na základe identifikátora skupiny (GID), do ktorej súbor patrí alebo do ktorej používateľ prístup k súboru patrí.
    • Predvolene vypnuté niektoré pokročilé mechanizmy na ochranu vlákien seccomp() pred útokmi Spectre, ktoré sa považovali za zbytočné a výrazne nezlepšili bezpečnosť, ale negatívne ovplyvnili výkon. Používanie ochrany Retpoline bolo revidované.
    • Bola odstránená implementácia mechanizmu cryptoloop, ktorý bol v roku 2004 nahradený dm-crypt a v prípade potreby podporuje rovnaké algoritmy.
    • Neprivilegovaný prístup k subsystému eBPF je štandardne zakázaný. Zmena bola vykonaná, aby sa zabránilo použitiu programov BPF na obídenie ochrany proti útokom z bočných kanálov. V prípade potreby môže správca obnoviť možnosť používania eBPF pre neprivilegovaných používateľov.
    • Hypervízor ACRN, navrhnutý pre úlohy v reálnom čase a použitie v kritických systémoch, má pridanú podporu pre vytváranie/odstraňovanie virtuálnych zariadení a preposielanie zariadení MMIO.
    • Do kryptomotora bola pridaná podpora pre definície KPP (Key-agreement Protocol Primitives), čím sa zjednodušila logika vývoja ovládačov pre kryptosystémy.
    • Hyper-V hypervízor teraz podporuje režim izolácie virtuálneho stroja, ktorý zahŕňa šifrovanie obsahu pamäte.
    • Hypervízor KVM pridal podporu pre architektúru RISC-V. V hostiteľskom prostredí bola implementovaná možnosť migrovať virtuálne stroje spustené pomocou rozšírení AMD SEV a SEV-ES. Pridané API pre živú migráciu hosťujúcich systémov šifrovaných pomocou AMD SEV (Secure Encrypted Virtualization).
    • Pre architektúru PowerPC je štandardne povolený režim STRICT_KERNEL_RWX, ktorý blokuje používanie pamäťových stránok, ktoré sú súčasne dostupné na zápis a spustenie.
    • Na 32-bitových x86 systémoch bola ukončená podpora pre hotplug pamäte, ktorá bola viac ako rok nefunkčná.
    • Knižnica liblockdep bola odstránená z jadra a teraz bude udržiavaná oddelene od jadra.
  • Sieťový subsystém
    • Pre sockety bola implementovaná nová voľba SO_RESERVE_MEM, pomocou ktorej si môžete rezervovať určité množstvo pamäte pre socket, ktorý zostane pre socket vždy dostupný a neodstráni sa. Použitie tejto voľby vám umožňuje dosiahnuť zvýšený výkon znížením alokácie pamäte a operácií regenerácie v sieťovom zásobníku, najmä ak sa v systéme vyskytnú podmienky nedostatku pamäte.
    • Pridaná podpora pre protokol Automatic Multicast Tunneling (RFC 7450), ktorý umožňuje doručovať multicastovú prevádzku zo sietí, ktoré podporujú Multicast, príjemcom v sieťach bez Multicast. Protokol funguje prostredníctvom zapuzdrenia do paketov UDP.
    • Vylepšené zapuzdrenie údajov IOAM (in-situ Operations, Administration, and Maintenance) v tranzitných paketoch.
    • Do rozhrania ethtool netlink API bola pridaná možnosť ovládať režimy spotreby energie transceivera.
    • Subsystém netfilter implementuje schopnosť klasifikovať pakety na výstupnej úrovni, t.j. vo fáze, keď ovládač prijme paket zo sieťového zásobníka jadra. V nftables sa podpora pre príslušné filtre objavila vo verzii 1.0.1. Netfilter pridal možnosť porovnávať a meniť interné hlavičky a údaje pre UDP a TCP (vnútorná hlavička / užitočné zaťaženie), ktoré prichádzajú po hlavičke transportu.
    • Pridané nové parametre sysctl arp_evict_nocarrier a ndisc_evict_nocarrier, ak sú nastavené, vyrovnávacia pamäť ARP a tabuľka ndisc (objavenie susedov) sa vymažú v prípade zlyhania pripojenia (NOCARRIER).
    • Do mechanizmu správy sieťového frontu fq_codel (riadené oneskorenie) boli pridané režimy nízkej latencie, nízkej straty a škálovateľnej priepustnosti (L4S).
  • Оборудование
    • Ovládač amdgpu poskytuje počiatočnú podporu pre špecifikáciu DP 2.0 (DisplayPort 2.0) a tunelovanie DisplayPort cez USB4. Pre Cyan Skillfish APU (vybavené GPU Navi 1x) bola pridaná podpora pre ovládače displeja. Podpora pre Yellow Carp APU (mobilné procesory Ryzen 6000 “Rembrandt”) bola rozšírená.
    • Ovládač i915 stabilizuje podporu pre čipy Intel Alderlake S a implementuje podporu technológie Intel PXP (Protected Xe Path), ktorá umožňuje organizovať hardvérovo chránenú grafickú reláciu na systémoch s čipmi Intel Xe.
    • V ovládači nouveau sa pracovalo na oprave chýb a zlepšení štýlu kódu.
    • Pridaná podpora pre x86-kompatibilné Vortex CPU (Vortex86MX). Linux už na podobných procesoroch fungoval, ale na deaktiváciu ochrany proti útokom Spectre/Meltdown, ktoré nie sú aplikovateľné na špecifikované čipy, bola potrebná explicitná identifikácia špecifikovaných CPU.
    • Pridaná počiatočná podpora pre platformy x86 pre Surface Pro 8 a Surface Laptop Studio.
    • Pridaný ovládač na podporu zvukových čipov používaných v AMD Yellow Carp, Van Gogh APU, tiež pridaná podpora pre zvukové systémy a kodeky Cirrus CS35L41, Maxim MAX98520/MAX98360A, Mediatek MT8195, Nuvoton NAU8821, NVIDIA Tegra210, NXP i.comlMX8ULP, Quartek ALC5682I-VS, RT5682S, RT9120, Rockchip RV1126 a RK3568.
    • Pridaný ovládač ishtp_eclite na prístup k integrovaným ovládačom Intel PSE (Programmable Service Engine) pomocou protokolu ISHTP (Integratd Sensor Hub Transport Protocol), ako sú informácie o batérii, teplote a UCSI (USB Type-C Connector System Software).
    • Pridaný ovládač pre herné ovládače Nintendo Switch, ktorý podporuje Switch Pro a Joy-Cons. Pridaná podpora pre tablety Wacom Intuos BT (CTL-4100WL/CTL-6100WL) a Apple 2021 Magic Keyboard. Vylepšená podpora pre ovládače Sony PlayStation DualSense. Pridaná podpora pre bočné tlačidlá myši Xiaomi Mi.
    • Pridaný ovládač RT89 s podporou bezdrôtových čipov Realtek 802.11ax, ako aj ovládače pre ethernetové adaptéry Asix AX88796C-SPI a prepínače Realtek RTL8365MB-VC.
    • Pre čipy Apple M1 boli pridané ovládače pre PCI a PASemi i2c.
    • Pridaná podpora pre ARM SoС, zariadenia a dosky Raspberry Pi Compute Module 4, Fairphone 4, Snapdragon 690, LG G Watch R, Sony Xperia 10 III, Samsung Galaxy S4 Mini Value Edition, Xiaomi MSM8996 (Mi 5, Mi Note 2, Mi 5s , Mi Mix, Mi 5s Plus a Xiaomi Mi 5), Sony Yoshino (Sony Xperia XZ1 a Sony Xperia XZ Premium), F(x)tec Pro1 QX1000, Microchip LAN966, CalAmp LMU5000, Exegin Q5xR5, sama7g5, Samsung ExynosAutov9, Rockchip RK3566 , RK3399 ROCK Pi 4A+, RK3399 ROCK Pi 4B+, Firefly ROC-RK3328-PC, Firefly ROC-RK3399-PC-PLUS, ASUS Chromebook Tablet CT100, Pine64 Quartz64-A, Netgear, 110GSCAL7040Global, Reng 32 MOXXEXX ako R2A8M*, Xilinx Kria, Radxa Zero, JetHub D779/H1, Netronix E1K70.

Zdroj: opennet.ru

Pridať komentár