Két hónapos fejlesztés után Linus Torvalds bemutatta a Linux 5.16 kernel kiadását. A legfontosabb változások között szerepel a futex_waitv rendszerhívás, amely a Windows játékok teljesítményének javítására szolgál a Wine-ben, a hibafigyelés a fájlrendszerben a fanotify-n keresztül, a folio koncepció a memória kezelésében, az AMX processzor utasítások támogatása, a memória foglalásának lehetősége a hálózati socketeknél, az egységes eredménytáblák (egress) szakaszban való csomagklasszifikálás támogatása a netfilterben, a DAMON alrendszer használata a nem használt memória területek előzetes elűzésére, a nagy mennyiségű írási műveleteket elviselő túlterhelés kezelésének javítása és a többlemez-gyakori merevlemezek támogatása.
Az új verzióban 15415 javítást fogadtak el 2105 fejlesztőtől, a javítás mérete 45 MB (a változtatások 12023 fájlt érintettek, 685198 kódsort adtak hozzá, 263867 sort töröltek). A 5.16 változtatások körülbelül 44%-a eszközmeghajtókhoz kapcsolódik, körülbelül 16%-a a specifikus hardverarchitektúrákra vonatkozó kód frissítésével, 16%-a a hálózati stackkel, 4%-a a fájlrendszerekkel és 4%-a a kernel belső alrendszereivel foglalkozik.
A 5.16 kernel fő újdonságai:
- Lemezszubszisztéma, bemenet/kipontozás és fájlrendszerek
- A fanotify mechanizmusba eszközöket építettek be a fájlrendszer állapotának figyelésére és a hibák előfordulásának nyomon követésére. A hibainformációk egy új eseménytípuson keresztül — FAN_FS_ERROR — kerülnek átadásra, amelyek a felhasználói térben zajló monitorozó rendszerek által elfoghatók, hogy az adminisztrátort gyorsan tájékoztassák vagy helyreállító folyamatokat indítsanak. Ha sorozatos hibák lépnek fel, a fanotify biztosítja az első hibaüzenet és egy összesített hiba számláló küldését, hogy elősegítse a hibák későbbi okainak elemzését. Jelenleg a hibafigyelés támogatása csak az Ext4 fájlrendszerhez valósult meg.
- Javították a túlterhelés kezelését írási műveletek végrehajtásakor (write congestion), amelyek akkor fordulnak elő, amikor az írási műveletek mennyisége meghaladja a tároló kapacitását, és a rendszer kénytelen blokkolni az írási folyamatok kérelmeit a már átadott kérések teljesítése előtt. Az új verzióban teljesen át lett dolgozva a kernel mechanizmusa, amelyet a túlterhelés fellépésének és a feladatok blokkolásának információinak beszerzésére használnak, mivel a régi megoldásnál problémák merültek fel az írási túlterhelés kezelésének összehangolásában a memóriába való lapkivetés során, amikor a rendszer memóriahiányos volt.
- A Btrfs-ben megvalósították a zónázási eszközök (Zoned Namespace) technológia támogatását, amelyet a merevlemezek vagy NVMe SSD-k alkalmaznak a tárolóterület zónákra való felosztására, amelyek csoportokba rendezett blokkokból vagy szektorokból állnak, ahol csak sorban történő adatbevitel engedélyezett, az egész blokkcsoport frissítésével. Továbbá, kis optimalizálásokat hajtottak végre az inode naplózásában, ami 3%-kal növelte a teljesítményt a dbench tesztben, és 11%-kal csökkentette a késleltetéseket. Átdolgozták a könyvtári naplózás mechanizmusát, amelyben a hatékonyság növelése érdekében csökkentették a keresési és blokkolási műveletek számát a fába. Felgyorsították az elemek betöltését a btree struktúrába batch módban (a tömeges elembeillesztési idő 4%-kal csökkent, míg a törlés 12%-kal csökkent). Korlátozott támogatást adtak a tömörítés használatához nem teljes oldalak írásakor, valamint a rész-oldalak (subpage) defragmentálásának lehetőségét. Előkészítést végeztek a második verziójú protokoll támogatásának aktiválására a „send” parancshoz.
- Az XFS fájlrendszerben csökkentették a memóriafogyasztást azáltal, hogy külön cache-eket alkalmaztak az gyakran használt elemekhez, és csökkentették egyes adatszerkezeteket.
- Az Ext4 fájlrendszerben csak hibajavításokat és pontosabb számításokat végeztek a késői inicializálási inode tábla paramétereinek meghatározásakor.
- A blokkeszközök szintjén optimalizációkat valósítottak meg, amelyek jelentősen növelik a műveletek CPU magokra való kötésének hatékonyságát.
- Bevezetésre került a több független hajtóművet (multi-actuator) tartalmazó merevlemezek kezdeti támogatása, amelyek lehetővé teszik a különböző zónákban lévő szektorok egyidejű elérését.
- Új ioctl-parancs került hozzáadásra, a CDROM_TIMED_MEDIA_CHANGE, amely lehetővé teszi az optikai meghajtó media váltási eseményeinek meghatározását.
- Az EROFS (Enhanced Read-Only File System) fájlrendszerbe hozzáadták a több tárolóeszközön való működést. Különböző eszközök egy 32 bites blokk címzési térbe tükrözhetőek. Emellett LZMA algoritmus használatával tömörítés támogatása is bevezetésre került.
- Az F2FS fájlrendszerbe új, fájlok fragmentáltságának kezelésére szolgáló csatolási opciók kerültek bevezetésre (pl. a fragmentált tárolók kezelésének optimalizálásának hibakereséséhez).
- A CEPH alapértelmezetten támogatja a könyvtárak aszinkron létrehozási és törlési műveleteit (a régi működés visszaállításához a csatolás során a ‘-o wsync’ kapcsolót kell használni). Hozzáadták a külső objektumok másolását figyelő metrikák nyilvántartását.
- A CIFS-hez új csatolási paraméter, a tcpnodelay került hozzáadásra, amely a hálózati socket számára a tcp_sock_set_nodelay módot állítja be, amely kikapcsolja a TCP-verem sorának kitöltésére való várakozást. Emellett bevezették a beágyazott DFS Link (Distributed File System) támogatását újra-csatoláskor.
- Hozzáadták a kéréskezelés támogatását blokk eszközök esetében kötegelt üzemmódban. A módosítás tesztelése során az Optane tárolókból történő véletlenszerű olvasási műveletek teljesítménye 6,1 millióról 6,6 millió IOPS-ra nőtt egy CPU magon.
- Memória és rendszerszolgáltatások
- Új rendszerhívás került bevezetésre, a futex_waitv, amely lehetővé teszi több futex állapotának nyomon követését egyetlen rendszerhívás segítségével. Ez a funkció hasonlít a Windows által biztosított WaitForMultipleObjects funkcióra, amelynek futex_waitv általi emulálása hasznos lehet a Wine vagy Proton környezetében futó Windows-játékok teljesítményének növelésében. Emellett a futexek egyidejű várakozása alkalmazható a Linuxra készült natív játékok teljesítményének optimalizálására is.
- A bevezetett memóriaoldalak (page folios) koncepciója lehetővé teszi a memória kezelésének felgyorsítását az alrendszerekben a tipikus terhelések esetén. Jelenleg a fő memória kezelő alrendszer már át lett alakítva fiókokra, valamint a lapozó gyorsítótár megvalósítása is folyamatban van, a jövőben pedig a fájlrendszerek átállítása is tervben van. Továbbá a kernelben tervezik a többoldalas fiókok támogatásának hozzáadását is.
A fiókok hasonlítanak a megoldott memóriaoldalakra (compound pages), de javított szemantikával és érthetőbb munkaszervezéssel rendelkeznek. A rendszermemória kezeléséhez az elérhető RAM részekre oszlik, amelynek mérete az architektúrától függ, de x86 rendszereken kilobytekben van megadva (általában 4096 byte). A modern rendszerek több tíz gigabájt RAM-mal vannak felszerelve, ami megnehezíti a memória kezelését a memóriák óriási számának feldolgozása miatt. A szamasok csökkentése érdekében korábban a kernelben megvalósították az összesített oldalak (compound pages) koncepcióját azzal, hogy struktúrák terjednek ki több mint egy fizikai memória oldalra. Azonban az összesített oldalakkal való manipulációhoz szükséges API nem volt ideális, és további költségeket okozott.
- A feladatütemezőbe egy kezelőt adtak hozzá, amely figyelembe veszi a CPU gyorsítótárának klaszterezését. Egyes processzorokban, például a Kunpeng 920 (ARM) és az Intel Jacobsville (x86) esetén a CPU általában 4 magja osztozkodhat az L3 vagy L2 gyorsítótáron. Az ilyen topológiák figyelembe vétele jelentősen javíthatja a feladatok magok közötti elosztásának hatékonyságát a feladatütemezőben, mivel a feladatok mozgatása egyetlen CPU klaszteren belül növeli a memória hozzáférésének áteresztőképességét és csökkenti a gyorsítótáron belüli versenyt.
- Hozzáadva az AMX (Advanced Matrix Extensions) utasítások támogatása, amelyeket az Intel Xeon Scalable jövőbeli szerver processzorai számára fejlesztenek, kódneve Sapphire Rapids. Az AMX új testreszabható TMM «TILE» regisztereket és utasításokat kínál az ezekben a regiszterekben lévő adatok manipulálásához, mint például a TMUL (Tile matrix MULtiply) a mátrixok szorzásához.
- Több új lehetőséget valósítottak meg, amelyeket a múltbeli kiadásban bemutatott DAMON (Data Access MONitor) alrendszer alapozott meg. Ez az alrendszer lehetővé teszi az adatok memóriához való hozzáférés nyomon követését a kiválasztott felhasználói térben futó folyamatokhoz kötődően. Például az alrendszer lehetőséget ad arra, hogy elemezzük, hogy a folyamat milyen memóriaterületekhez férhetett hozzá a működése során, és mely memóriahelyek maradtak kihasználatlanok.
- A DAMON_RECLAIM arra szolgál, hogy azonosítsa és eltávolítsa a memória olyan területeit, amelyekhez nem volt hozzáférés. Ezt a mechanizmust proaktív, finom memóriaoldali eltávolításra használhatjuk, amikor a szabad memória közel a végéhez ér.
- A DAMOS (Data Access Monitoring-based Operation Schemes) a megadott madvise() műveletek, például a további szabad memória felszabadításának alkalmazására szolgál azok számára a memória területek számára, ahol meghatározott gyakoriságú memóriahozzáférést rögzítenek. A DAMOS paramétereit a debugfs-en keresztül állíthatjuk be.
- Lehetőség nyílt a fizikai címzési memória tér monitorozására (korábban csak a virtuális címeket lehetett nyomon követni).
- A zstd tömörítő algoritmus implementációja frissült 1.4.10 verzióra, ami jelentősen növelte a kernel különböző alrendszereinek teljesítményét, ahol tömörítést alkalmaznak (például a kernel image kicsomagolása 35%-kal gyorsult, míg a Btrfs és SquashFS tömörített adatok kicsomagolási teljesítménye 15%-kal, a ZRAM 30%-kal nőtt). Az eredeti kernelben egy külön zstd implementációt használtak, amely a három évvel ezelőtt kiadott 1.3.1 verzión alapult, és számos fontos optimalizálást nem tartalmazott. A legfrissebb verzióra való áttérés mellett a hozzáadott patch is megkönnyíti a zstd upstream ággal való szinkronizálását, lehetővé téve a kernelbe való közvetlen kódgenerálást a zstd fő adattárából. A jövőben a zstd kódját a kernelben tervezi frissíteni, ahogy új verziók jelennek meg a zstd könyvtárból.
- Jelentős fejlesztések készültek az eBPF alrendszerében. Lehetőség nyílt BPF-programokból kernelmodulok funkcióinak hívására. Megvalósult a bpf_trace_vprintk() függvény, amely ellentétben a bpf_trace_printk() -val, lehetővé teszi több mint három argumentum egyszerre történő kiírását. Új adatstruktúra (BPF map) is került bevezetésre, a bloom filter, amely az azonos nevű valószínűségi adatstruktúrát használja az elemek tárolásának ellenőrzésére egy halmazban. Új attribútumot, a BTF_KIND_TAG -ot is bevezettek, amely a BPF-programokban használható címkék funkcióparaméterekhez történő hozzárendelésére, például a felhasználói programok hibáinak könnyebb azonosítása érdekében. A libbpf-ban lehetőség nyílt saját .rodata.* / .data.* szekciók létrehozására, megvalósult az uprobe és kprobe követési események támogatása, valamint API-t adtak hozzá minden típusú BTF másolásához egy objektumból a másikba. Az AF_XDP támogatása külön könyvtárba, a libxdp -be került. A MIPS architektúrához JIT-kompilátort valósítottak meg a BPF virtuális géphez.
- ARM64 architektúrára megvalósították az ARMv8.6 kiterjesztések támogatását az időzítő számára, beleértve azokat is, amelyek lehetővé teszik a rendszerszintű regiszterek megjelenítésének önszinkronizálását ISB utasítások alkalmazása nélkül.
- PA-RISC architektúrára megvalósították a KFENCE mechanizmus alkalmazásának lehetőségét a memóriában fellépő hibák azonosítása érdekében, illetve hozzáadódott a KCSAN versenyállapot-érzékelő támogatása.
- Lehetőség nyílt a tracefs jogosultságok kiválasztására külön felhasználók és csoportok szintjén, például most már csak bizonyos csoport tagjainak engedélyezhető a nyomozási eszközökhöz való hozzáférés.
- Virtualizáció és biztonság
- Az io_uring és device-mapper alrendszerekben megvalósították a audit események generálásának támogatását. Az io_uring-ban lehetőség nyílt a hozzáférés kezelésére az LSM modulokon keresztül. Megvalósították a openat2() rendszerhívás auditálásának lehetőségét.
- A kernelkód teljesen megszabadult a switch utasításokban található megszakító case kifejezésektől (return vagy break nélkül minden case blokk után). A kernel összeállítása során mostantól alkalmazható a ' -Wimplicit-fallthrough ' mód.
- Megérkeztek a határok szigorúbb ellenőrzésének változtatásai a memcpy() funkció végrehajtása során.
- Az io_uring aszinkron bemeneti/kimeneti interfészén lehetőség nyílt biztonsági politikák alkalmazására a bemenet/kimenet műveleteknél, amelyeket a SELinux és Smack modulok határoznak meg.
- Az IMA (Integrity Measurement Architecture) alrendszerben, amely lehetővé teszi a külső szolgáltatás számára a kernel alrendszerek állapotának hitelesítését, megvalósították a fájlhoz tartozó vagy a fájlhoz hozzáférő felhasználó csoportazonosítója (GID) alapú szabályok alkalmazásának lehetőségét.
- Alapértelmezés szerint le vannak tiltva bizonyos kiterjesztett folyamatvédelmi mechanizmusok, mint a seccomp(), amelyek Spectre osztályú támadások ellen védelmet nyújtanak és amelyek túlzottnak minősültek, nem növelték jelentősen a biztonságot, viszont kedvezőtlen hatással voltak a teljesítményre. A Retpoline védelem alkalmazását felülvizsgálták.
- A cryptoloop mechanizmus megvalósítása eltávolításra került, helyébe 2004-ben a dm-crypt lépett, amely szükség esetén ugyanazokat az algoritmusokat támogatja.
- Alapértelmezés szerint el van tiltva a nem privilégizált hozzáférés az eBPF alrendszerhez. A változtatás célja, hogy megakadályozza a BPF programok használatát a hátsó csatornás támadások védelmének megkerülésére. Szükség esetén az adminisztrátor visszaállíthatja az eBPF nem privilégizált felhasználók általi használatát.
- Az ACRN hipervizor, amelyet valós idejű feladatok végrehajtására és kritikus rendszerekben való használatra terveztek, lehetővé tette virtuális eszközök létrehozását/törlését és az MMIO eszközök átirányítását.
- A kriptográfiai motorhoz hozzáadták a KPP (Key-agreement Protocol Primitives) definíciók támogatását, amelyek leegyszerűsítik a kriptoszisztémák illesztőprogramjainak fejlesztését.
- A Hyper-V hipervizorhoz megvalósították az izolációs mód támogatását, virtuális gépekhezamely a memória tartalmának titkosítását jelenti.
- A hipervizorban KVM hozzáadták a RISC-V architektúra támogatását. Megvalósították a virtuális gépek migrációját a hoszt környezetében, amelyeket AMD SEV és SEV-ES kiterjesztések használatával hajtanak végre. API-t adtak hozzá a vendégrendszerek élő migrációjához, amelyeket AMD SEV (Secure Encrypted Virtualization) módszerrel titkosítanak.
- A PowerPC architektúrával alapértelmezés szerint engedélyezve van a STRICT_KERNEL_RWX mód, amely blokkolja az írásra és végrehajtásra egyidejűleg elérhető memóriablokkok használatát.
- A 32 bites x86 rendszereken leállították a memória forró csatlakoztatásának (Memory hotplug) támogatását, amely több mint egy éve nem működött.
- A kernelből eltávolították a liblockdep könyvtárat, amely mostantól külön lesz kezelve a kerneltől.
- Hálózati alrendszer
- A socketekhez új SO_RESERVE_MEM opció került bevezetésre, amellyel bizonyos mennyiségű memóriát lehet fenntartani a socket számára, amely mindig elérhető marad, és nem vonják el. E szándékolt lehetőség alkalmazásával a teljesítmény növelhető a hálózati veremben a memória allokálási és felszabadítási műveletek csökkentésével, különösen, ha a rendszerben memóriahiányos körülmények merülnek fel.
- Hozzáadva a multicast forgalom automatikus alagútezési protokolljának (Automatic Multicast Tunneling, RFC 7450) támogatása, amely lehetővé teszi a multicast forgalom szállítását a multicastot támogató hálózatokból a multicastot nem támogató hálózatokba. A protokoll UDP csomagokba való kapszulázáson keresztül működik.
- Javították az IOAM (In-situ Operations, Administration, and Maintenance) adatok kapszulázását az átkonfiguráló csomagokban.
- Az ethtool netlink API-ba beépítésre került az energiagazdálkodási módok vezérlésének lehetősége a transzeverek számára.
- A netfilter alrendszerében bevezetésre került a csomagok osztályozásának lehetősége az egress szinten, azaz abban a szakaszban, amikor az illesztőprogram megkapja a csomagot a kernel hálózati vereméből. Az nftables-ben az ehhez kapcsolódó szűrők támogatása az 1.0.1 verzióban jelent meg. A netfilterben lehetőség nyílt az UDP és TCP belső fejléceinek és adataik (inner header / payload) illesztésére és módosítására a szállítási fejléc (transport header) után.
- Új sysctl paraméterek, az arp_evict_nocarrier és a ndisc_evict_nocarrier kerültek bevezetésre, amelyek esetében az ARP cache és a szomszéd felfedező táblázat (ndisc) törlődnek a kapcsolati megszakítás (NOCARRIER) esetén.
- A fq_codel hálózati sorok vezérlési mechanizmusához (Controlled Delay) hozzáadták az Alacsony Késleltetés, Alacsony Nettó és Skálázható Átviteli módokat (L4S).
- Hardver
- Az amdgpu meghajtóban kezdeti támogatást nyújtanak a DP 2.0 (DisplayPort 2.0) specifikációhoz, és a DisplayPort USB4-en keresztüli alagútezésének képességeihez. A Cyan Skillfish APU-khoz (Navi 1x GPU-val) hozzáadták a kijelzővezérlők támogatását. A Yellow Carp APU-k (Ryzen 6000 „Rembrandt” mobilprocesszorok) támogatása bővült.
- Az i915 meghajtóban stabilizálták az Intel Alderlake S chipek támogatását és megvalósították az Intel PXP (Protected Xe Path) technológia támogatását, amely lehetővé teszi az ipari védett grafikai munkamenetek szervezését Intel Xe chipekkel rendelkező rendszereken.
- A nouveau meghajtóban végrehajtották a hibák javítását és a kódstílus javítását.
- Hozzáadva a Vortex86MX x86-kompatibilis CPU-k támogatása. Linux ezen processzorokon korábban is működött, de a megadott CPU-k egyértelmű azonosítása szükséges volt a Spectre/Meltdown támadások védelmének letiltásához, amelyek nem alkalmazhatók a megadott chipekre.
- Hozzáadva a Surface Pro 8 és Surface Laptop Studio x86-platformok kezdeti támogatása.
- Hozzáadva egy illesztőprogram az AMD Yellow Carp és Van Gogh APU-k hangchipjeinek támogatásához, valamint a 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 hangrendszerek és kodekek támogatásához.
- Hozzáadva az ishtp_eclite illesztőprogram az Intel PSE (Programmable Service Engine) beépített vezérlőihoz való hozzáféréshez az ISHTP (Integratd Sensor Hub Transport Protocol) protokollon keresztül, például az akkumulátor, hőmérséklet és az UCSI (USB Type-C Connector System Software Interface) kapcsolódó információk megszerzéséhez.
- Hozzáadva egy Nintendo Switch játékvezérlők számára készült illesztőprogram, amely támogatja a Switch Pro és Joy-Con eszközöket. Hozzáadva a Wacom Intuos BT (CTL-4100WL/CTL-6100WL) táblagépek és az Apple 2021 Magic Keyboard billentyűzet támogatása. Fejlesztve a Sony PlayStation DualSense vezérlők támogatásának minősége. Hozzáadva a Xiaomi Mi egér oldalsó gombjainak támogatása.
- Hozzáadva az RT89 illesztőprogram a Realtek 802.11ax vezeték nélküli chipek támogatásához, valamint az Asix AX88796C-SPI Ethernet-adapterek és a Realtek RTL8365MB-VC kapcsolók illesztőprogramjait.
- Az Apple M1 chipekhez hozzáadva a PCI és PASemi i2c illesztőprogramok.
- Hozzáadva az ARM SoC-k, eszközök és a 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 és Netronix E70K02 támogatása.
Forrás: opennet.ru
