Linux 5.16 kernel kiadás

Két hónapnyi fejlesztés után Linus Torvalds kiadta a Linux kernel 5.16-os verzióját. A legjelentősebb változások közé tartozik a futex_waitv rendszerhívás a Windows játékok Wine-ban való teljesítményének javítása érdekében, a fájlrendszeri hibák követése a fanotify-on keresztül, a fóliók koncepciója a memóriakezelő rendszerben, az AMX processzor utasításainak támogatása, a memória hálózati socketek számára történő lefoglalásának lehetősége, a netfilter csomagosztályozás támogatása a "kimeneti" szakaszban, a DAMON alrendszer használata a nem használt memóriaterületek proaktív kiürítésére, a túlterhelés kezelésének javítása nagy mennyiségű írási művelet során, valamint a többmeghajtós merevlemezek támogatása.

Az új verzió 15415 2105 javítást tartalmaz 45 12023 fejlesztőtől, a patch mérete 685198 MB (a változtatások 263867 44 fájlt érintettek, 5.16 16 kódsor került hozzáadásra, 16 4 sor törölve lett). Az 4-ben bevezetett módosítások körülbelül XNUMX%-a az eszközillesztőkkel kapcsolatos, a változtatások hozzávetőleg XNUMX%-a a hardverarchitektúrák kódjának frissítéséhez, XNUMX%-a a hálózati veremhez, XNUMX%-a a fájlrendszerekhez és XNUMX%-a. belső kernel alrendszerekhez kapcsolódnak.

Főbb újítások a 5.16-as kernelben:

  • Lemez alrendszer, I/O és fájlrendszerek
    • A fanotify mechanizmust továbbfejlesztették a fájlrendszer állapotának monitorozására és a hibák észlelésére szolgáló funkciókkal. A hibainformációk egy új eseménytípus, a FAN_FS_ERROR segítségével kerülnek továbbításra, amely a felhasználói térben működő monitorozó rendszerekben elfogható, hogy azonnal értesítse az adminisztrátort vagy elindítsa a helyreállítási folyamatokat. Ha egy sor hiba özönlik egymás után, a fanotify biztosítja, hogy az első hibaüzenet egy teljes hibaszámlálóval együtt kerüljön kézbesítésre, hogy egyszerűsítse a hiba okának későbbi elemzését. A hibakövetési támogatás jelenleg csak az Ext4 fájlrendszerhez érhető el.
    • Az írási torlódás kezelésének javítása, amely akkor fordul elő, amikor az írási műveletek mennyisége meghaladja a meghajtó átviteli sebességét, és a rendszer kénytelen blokkolni a folyamatok írási kérelmeit, amíg a meglévő kérelmek be nem fejeződnek. Az új verzió teljesen újratervezi a torlódási információk fogadására és a feladatok blokkolására használt kernel mechanizmust, mivel az előző implementációban problémák voltak az írási torlódás kezelése és a memórialapok swap partícióra való kilakoltatása közötti kölcsönhatással, amikor a rendszerben kevés a memória.
    • A Btrfs támogatja a Zoned Namespace technológiát, amely merevlemezekben vagy NVMe SSD-kben használatos, és zónákra osztja a tárolóhelyet, amelyek blokkok vagy szektorok csoportjait tartalmazzák. Csak szekvenciális adathozzáadás engedélyezett, beleértve a teljes blokkcsoport frissítéseit is. Az inode naplózásában is kisebb optimalizálásokat hajtottak végre, ami 3%-os átviteli sebességnövekedést eredményezett a dbench tesztben és 11%-os késleltetéscsökkenést. A könyvtárnaplózási mechanizmust áttervezték, csökkentve a fakeresések és zárolások számát a nagyobb hatékonyság érdekében. Felgyorsították az elemek kötegelt beszúrását a btree struktúrába (az elemek tömeges beszúrásának ideje 4%-kal, a törlésének pedig 12%-kal csökkent). Korlátozott támogatást adtak a tömörítéshez részleges oldalak írásakor, valamint lehetővé tették az aloldalak töredezettségmentesítését. Előkészületek történtek a "send" parancs V2-es támogatására.
    • Az XFS fájlrendszer csökkenti a memóriafogyasztást azáltal, hogy különálló gyorsítótárakat használ a gyakran használt elemekhez, és csökkenti egyes adatstruktúrák méretét.
    • Az Ext4 fájlrendszer csak hibajavításokat és az Inode tábla késleltetett inicializálási paramétereinek pontosabb kiszámítását tartalmazza.
    • A blokkeszközök szintjén olyan optimalizációkat hajtottak végre, amelyek jelentősen javítják a CPU-magokhoz való kötési műveletek hatékonyságát.
    • Hozzáadva a több független meghajtóval (multi-actuators) rendelkező merevlemezek kezdeti támogatása, amelyek lehetővé teszik a mágneses tálca különböző területein található több szektor egyidejű elérését.
    • Új ioctl parancsot adtunk hozzá (CDROM_TIMED_MEDIA_CHANGE), amely az optikai meghajtó adathordozó-változási eseményeit észleli.
    • Az EROFS (Enhanced Read-Only File System) fájlrendszer mostantól támogatja a több tárolóeszközön való működést. Különböző eszközök leképezhetők egyetlen 32 bites blokkcímtartományba. Az LZMA tömörítés támogatása is hozzáadásra került.
    • Az F2FS fájlrendszerhez csatolási opciók kerültek hozzáadásra a fájlok töredezettségének szabályozására a tárolóba helyezett fájlok során (például a töredezett tárolókkal való munkavégzés optimalizálásának hibakereséséhez).
    • A CEPH mostantól alapértelmezés szerint engedélyezi az aszinkron könyvtár-létrehozási és -törlési műveleteket (a régi működéshez való visszatéréshez használja az '-o wsync' jelzőt a csatoláskor). Hozzáadtuk a külső objektumok másolási műveleteit követő metrikák.
    • A CIFS-hez hozzáadták a tcpnodelay csatolási opciót. Ez az opció beállítja a hálózati socket tcp_sock_set_nodelay módját, letiltva a TCP verem sorba állítási várakozását. Hozzáadták a beágyazott DFS (Distributed File System) hivatkozások támogatását az újracsatolás során.
    • Hozzáadva a blokkeszközökhöz intézett kérések burst módban történő végrehajtásának támogatása. A módosítás tesztelése az Optane meghajtók véletlenszerű olvasási teljesítményének növekedését mutatta 6.1 millió IOPS-ról 6.6 millió IOPS-ra egyetlen CPU-magon.
  • Memória- és rendszerszolgáltatások
    • Egy új rendszerhívás, a futex_waitv került hozzáadásra, amely lehetővé teszi több futex állapotának egyidejű monitorozását egyetlen rendszerhívással. Ez a funkció hasonló a Windowsban elérhető WaitForMultipleObjects funkcióhoz, amelynek emulálása a futex_waitv segítségével hasznos lehet a Wine vagy Proton alatt futó Windows játékok teljesítményének javítására. Továbbá, az egyidejű futex várakozások a natív Linux játékbuildek teljesítményének optimalizálására is használhatók.
    • Megvalósították az oldalfóliók koncepcióját, amely egyes kernel alrendszerekben használva felgyorsítja a memóriakezelést tipikus munkaterhelések esetén. Jelenleg a kernel alapvető memóriakezelő alrendszerét és az oldalgyorsítótár implementációját már áthelyezték az oldalfóliókba, és a jövőben fájlrendszerek bevezetését is tervezik. A kernel a jövőben a többoldalas fóliók támogatását is tervezi.

      A fóliók hasonlóak az összetett oldalakhoz, de jobb szemantikával és letisztultabb szervezettséggel rendelkeznek. A rendszermemória kezeléséhez a rendelkezésre álló RAM memórialapokra van osztva, amelyek mérete az architektúrától függően változik, de x86 rendszereken kilobájtban mérik (jellemzően 4096 bájt). A modern rendszerek több tíz gigabájt RAM-mal vannak felszerelve, ami bonyolítja a memóriakezelést, mivel hatalmas számú memórialapot kell feldolgozni. Az oldalak számának csökkentése érdekében a kernel korábban megvalósította az összetett oldalak koncepcióját, ahol a struktúrák egynél több fizikai memórialapot ölelnek fel. Az összetett oldalak manipulálására szolgáló API azonban sok kívánnivalót hagyott maga után, és további terhelést okozott.

    • Egy olyan kezelő került a feladatütemezőbe, amely figyelembe veszi a CPU gyorsítótár-fürtözést. Egyes processzorokban, például a Kunpeng 920-ban (ARM) és az Intel Jacobsville-ben (x86), bizonyos számú CPU-mag, jellemzően négy, megoszthatja az L3 vagy L2 gyorsítótárat. Az ilyen topológiák figyelembevétele jelentősen javíthatja a feladatelosztás hatékonyságát a CPU-magok között a feladatütemezőben, mivel a feladatok egyetlen CPU-fürtön belüli mozgatása növeli a memória-áteresztőképességet és csökkenti a gyorsítótár-versengést.
    • Támogatás került az AMX (Advanced Matrix Extensions) utasításokhoz, melyeket a hamarosan megjelenő Sapphire Rapids kódnevű Intel Xeon Scalable szerverprocesszorokban valósítottak meg. Az AMX új, konfigurálható TMM "TILE" regisztereket és utasításokat vezet be az ezekben a regiszterekben lévő adatok kezelésére, mint például a TMUL (Tile matrix MULtiply) a mátrixok szorzásához.
    • Számos új funkció került bevezetésre, amelyek az előző kiadásban hozzáadott DAMON (Data Access MONitor) alrendszerre épülnek. Ez az alrendszer lehetővé teszi a RAM-adatokhoz való hozzáférés monitorozását egy kiválasztott, felhasználói tárhelyen futó folyamathoz képest. Az alrendszer például lehetővé teszi annak elemzését, hogy egy folyamat mely memóriaterületekhez fér hozzá a teljes futásideje alatt, és mely memóriaterületek maradtak kihasználatlanul.
      • A DAMON_RECLAIM a nem elért memóriaterületek azonosítására és visszanyerésére szolgál. Ez a mechanizmus a memórialapok proaktív, lágy visszanyerésére használható, amikor a memória a kimerüléshez közeledik.
      • DAMOS (Data Access Monitoring-based Operation Schemes) meghatározott madvise() műveletek alkalmazásához, például további szabad memória felszabadításához, olyan memóriaterületek feldolgozásához, amelyek bizonyos memória-hozzáférési gyakoriságnak vannak kitéve. A DAMOS paraméterek debugfs segítségével konfigurálhatók.
      • Lehetőség a fizikai memória címtartományának monitorozására (korábban csak virtuális címek monitorozása volt lehetséges).
    • A zstd tömörítési algoritmus implementációja frissült az 1.4.10-es verzióra, ami jelentősen javítja a tömörítést használó különféle kernel alrendszerek teljesítményét (például a kernel képkicsomagolása 35%-kal gyorsult, a tömörített adatok kicsomagolási teljesítménye Btrfs és SquashFS fájlokban 15%-kal, ZRAM-ban pedig 30%-kal nőtt). Kezdetben a kernel egy különálló zstd implementációt használt, amely az 1.3.1-es verzión alapult, amely több mint három évvel ezelőtt jelent meg, és számos fontos optimalizálás hiányzott belőle. A jelenlegi verzióra való frissítés mellett a hozzáadott javítás leegyszerűsíti a zstd upstream ággal való szinkronizálást is, lehetővé téve a kód generálását a kernelbe való beillesztéshez közvetlenül a fő zstd adattárból. A jövőben a kernelben található zstd kód frissítése a zstd könyvtár új verzióinak megjelenésekor várható.
    • Jelentős fejlesztések történtek az eBPF alrendszerben. Lehetővé vált a kernel modulfüggvények meghívása BPF programokból. Megvalósították a bpf_trace_vprintk() függvényt; a bpf_trace_printk() függvénytől eltérően ez lehetővé teszi háromnál több argumentum egyidejű kimenetét. Hozzáadtak egy új adattárolási struktúrát (BPF map), a bloom filtert, amely lehetővé teszi az azonos nevű valószínűségi adatstruktúra használatát egy elem halmazban való jelenlétének meghatározására. Hozzáadtak egy új attribútumot, a BTF_KIND_TAG-ot, amely a BPF programokban címkék függvényparaméterekhez kötésére használható, például a felhasználói programokban a hibakeresés egyszerűsítése érdekében. A libbpf-ben mostantól engedélyezett az egyéni .rodata.*/.data.* szakaszok létrehozása, támogatást nyújtottak az uprobe és kprobe nyomkövetési eseményekhez, és hozzáadtak egy API-t az összes BTF típus egyik objektumból a másikba való másolásához. Az AF_XDP támogatás átkerült a libbpf-ből egy külön könyvtárba, a libxdp-be. A MIPS architektúrához implementálták a BPF virtuális gép JIT fordítóját.
    • Az ARM64 architektúrához támogatást nyújtottak az ARMv8.6 időzítőbővítményekhez, beleértve azokat is, amelyek lehetővé teszik a rendszerregiszterek reprezentációjának önszinkronizálását ISB utasítások használata nélkül.
    • A PA-RISC architektúrához implementálták a KFENCE mechanizmus használatának lehetőségét a memóriával végzett munka során fellépő hibák észlelésére, valamint hozzáadták a KCSAN versenyhelyzet-érzékelő támogatását.
    • Bevezetésre került a tracefekhez való hozzáférési jogok konfigurálásának lehetősége az egyes felhasználók és csoportok szintjén, például mostantól korlátozhatja a nyomkövető eszközökhöz való hozzáférést egy adott csoport tagjaira.
  • Virtualizáció és biztonság
    • Az io_uring és az eszközleképező alrendszerek mostantól támogatják az audit események generálását. Az io_uring mostantól hozzáférés-vezérlést biztosít LSM modulokon keresztül. Hozzáadtuk az openat2() rendszerhívás auditálását.
    • A kernel kódját teljesen megszabadították a megszakíthatatlan case utasításoktól a switch utasításokban (nincs visszatérés vagy break minden case blokk után). A "-Wimplicit-fallthrough" mód mostantól használható a kernel fordításakor.
    • Változtatások a memcpy() függvény végrehajtásakor a határértékek ellenőrzésének szigorítására.
    • Az io_uring aszinkron I/O interfész mostantól lehetővé teszi az SELinux és Smack modulok által definiált biztonsági házirendek alkalmazását az I/O műveletekre.
    • Az IMA (Integrity Measurement Architecture) alrendszer, amely lehetővé teszi egy külső szolgáltatás számára a kernel alrendszerek állapotának ellenőrzését azok hitelességének biztosítása érdekében, képes szabályokat alkalmazni a fájlhoz tartozó vagy a fájlhoz hozzáférő felhasználó által használt csoportazonosító (GID) alapján.
    • Néhány fejlett seccomp() szálvédelmi mechanizmus a Spectre támadások ellen alapértelmezés szerint le van tiltva. Ezeket a mechanizmusokat szükségtelennek ítélték, és nem javították jelentősen a biztonságot, miközben negatívan befolyásolták a teljesítményt. A Retpoline védelem használatát felülvizsgálták.
    • A cryptoloop mechanizmus implementációját, amelyet 2004-ben a dm-crypt váltott fel, és szükség esetén ugyanazokat az algoritmusokat támogatja, eltávolították.
    • Alapértelmezés szerint a jogosultság nélküli felhasználók hozzáférhetnek az eBPF alrendszerhez, és ez a módosítás megakadályozza, hogy a BPF programok megkerüljék az oldalcsatornás támadások elleni védelmet. Szükség esetén a rendszergazda újra engedélyezheti az eBPF használatát a jogosultság nélküli felhasználók számára.
    • A valós idejű feladatokhoz és kritikus fontosságú rendszerekben való használatra tervezett ACRN hipervizor frissítésre került, hogy támogassa a virtuális eszközök létrehozását/törlését és az MMIO eszköztovábbítást.
    • A kriptomotor frissítésre került, hogy támogassa a KPP (Key-agreement Protocol Primitives) definíciókat, leegyszerűsítve a kriptorendszerekhez tartozó illesztőprogramok fejlesztésének logikáját.
    • A Hyper-V hipervizorhoz támogatás készült az izolációs módhoz. virtuális gépek, ami a memória tartalmának titkosítását foglalja magában.
    • A hipervizorban KVM Hozzáadtuk a RISC-V architektúra támogatását. Megvalósítottuk az AMD SEV és SEV-ES kiterjesztéseket használó virtuális gépek migrálását a gazdagépen belül. Hozzáadtunk egy API-t az AMD SEV (Secure Encrypted Virtualization) használatával titkosított vendégrendszerek élő migrálásához.
    • A PowerPC architektúra esetében a STRICT_KERNEL_RWX mód alapértelmezés szerint engedélyezve van, amely blokkolja az egyszerre írható és végrehajtható memórialapok használatát.
    • A memória hotplug támogatását több mint egy évig nem használták 32 bites x86-os rendszereken.
    • A liblockdep függvénykönyvtárat eltávolították a kernelből, és mostantól a kerneltől elkülönítve fogják karbantartani.
  • Hálózati alrendszer
    • Egy új SO_RESERVE_MEM opció került bevezetésre a socketek számára. Ez az opció lehetővé teszi, hogy egy bizonyos mennyiségű memóriát foglaljon le egy socket számára, amely mindig elérhető marad a socket számára, és nem kerül visszanyerésre. Az opció használata javítja a teljesítményt azáltal, hogy csökkenti a memóriafoglalási és -visszanyerési műveleteket a hálózati veremben, különösen kevés memória esetén.
    • Hozzáadott támogatás az Automatic Multicast Tunneling protokollhoz (RFC 7450), amely lehetővé teszi a multicast forgalom kézbesítését multicast-képes hálózatokról a nem multicast-képes hálózatokban lévő címzettekhez. A protokoll UDP csomagokba ágyazáson keresztül működik.
    • Az IOAM (helyben végzett műveletek, adminisztráció és karbantartás) adatok továbbfejlesztett beágyazása az átviteli csomagokba.
    • Az ethtool netlink API frissítésre került, hogy lehetővé tegye az adó-vevő energiafogyasztási módjainak vezérlését.
    • A netfilter alrendszer a kimenő szinten valósítja meg a csomagok osztályozását, azaz amikor egy illesztőprogram csomagot kap a kernel hálózati veremtől. Ezen szűrők támogatása az 1.0.1-es verzióban került be az nftables-be. A Netfilter mostantól támogatja az UDP és TCP (belső fejléc/hasznos adat) belső fejléceinek és adatainak egyeztetését és módosítását, amelyek a szállítási fejlécet követik.
    • Új sysctl paraméterek kerültek hozzáadásra: arp_evict_nocarrier és ndisc_evict_nocarrier, amelyek beállításakor törlik az ARP gyorsítótárat és az ndisc (szomszédfelderítés) táblát kapcsolati hiba (NOCARRIER) esetén.
    • Az fq_codel (vezérelt késleltetés) hálózati sorkezelési mechanizmushoz hozzáadták az alacsony késleltetés, az alacsony veszteség és a skálázható átviteli sebesség (L4S) módokat.
  • Оборудование
    • Az amdgpu illesztőprogram kezdeti támogatást nyújt a DP 2.0 (DisplayPort 2.0) specifikációhoz és a DisplayPort tunnelinghez USB4-en keresztül. Kijelzővezérlő-támogatás került hozzáadásra a Cyan Skillfish APU-khoz (Navi 1x GPU-kkal felszerelve). Bővítették a támogatást a Yellow Carp APU-khoz (Ryzen 6000 "Rembrandt" mobil processzorok).
    • Az i915 illesztőprogram stabilizálja az Intel Alderlake S chipek támogatását, és megvalósítja az Intel PXP (Protected Xe Path) technológia támogatását, amely lehetővé teszi hardveresen védett grafikus munkamenetek szervezését Intel Xe chipekkel rendelkező rendszereken.
    • A nouveau illesztőprogram frissítése során hibajavításokat és továbbfejlesztett kódstílust találtunk.
    • Hozzáadott támogatás az x86-kompatibilis Vortex CPU-khoz (Vortex86MX). A Linux korábban is működött ezeken a processzorokon, de ezen CPU-k explicit azonosítása szükséges volt a Spectre/Meltdown támadások elleni védelem letiltásához, amelyek nem alkalmazhatók ezekre a chipekre.
    • Hozzáadva a kezdeti x86 platformtámogatás Surface Pro 8 és Surface Laptop Studio eszközökön.
    • Hozzáadott illesztőprogram az AMD Yellow Carp és Van Gogh APU-kban használt hangchipek támogatásához, valamint támogatás a következő hangrendszerekhez és kodekekhez: Cirrus CS35L41, Maxim MAX98520/MAX98360A, Mediatek MT8195, Nuvoton NAU8821, NVIDIA Tegra210, NXP i.MX8ULP, Qualcomm AudioReach, Realtek ALC5682I-VS, RT5682S, RT9120, Rockchip RV1126 és RK3568.
    • Hozzáadtunk egy ishtp_eclite illesztőprogramot az integrált Intel PSE (Programmable Service Engine) vezérlők eléréséhez ISHTP (Integrated Sensor Hub Transport Protocol) használatával, például az akkumulátorral, a hőmérséklettel és az UCSI-vel (USB Type-C Connector System Software Interface) kapcsolatos információk lekéréséhez.
    • Hozzáadtunk egy illesztőprogramot a Nintendo Switch játékvezérlőkhöz, amely támogatja a Switch Pro és a Joy-Con kontrollereket. Hozzáadtuk a támogatást a Wacom Intuos BT tabletekhez (CTL-4100WL/CTL-6100WL) és az Apple 2021 Magic Keyboardhoz. Továbbfejlesztettük a Sony PlayStation DualSense vezérlők támogatását. Hozzáadtuk a Xiaomi Mi Mouse oldalsó gombjainak támogatását.
    • Hozzáadott RT89 illesztőprogram a Realtek 802.11ax vezeték nélküli chipek támogatásával, valamint illesztőprogramok az Asix AX88796C-SPI Ethernet adapterekhez és a Realtek RTL8365MB-VC kapcsolókhoz.
    • Az Apple M1 chipekhez PCI és PASemi i2c illesztőprogramokat adtak hozzá.
    • Hozzáadott támogatás a következőkhöz: ARM SoC-k, 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 és Xiaomi Mi 5), Sony Yoshino (Sony Xperia XZ1 és 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. GS110EMX, Globalscale MOCHAbin 7040, NXP S32G2, Renesas R8A779M*, Xilinx Kria, Radxa Zero, JetHub D1/H1, Netronix E70K02.

Forrás: opennet.ru