A Linux 6.17 kernel kiadása

Két hónapnyi fejlesztés után Linus Torvalds bemutatta a Linux 6.17 kernel kiadását. A legfigyelemreméltóbb változások között szerepel: a Btrfs teljesítményének javítása, a file_getattr() és file_setattr() rendszerhívások, az egymagos és többmagos konfigurációk egységesítése a feladatütemezőben, a DAMON_STAT modul memóriahozzáférési statisztikákkal, élő javítások támogatása ARM64 rendszereken, core dumpok küldése AF_UNIX socketen keresztül, a SCHED_EXT korlátozása cgroup-on keresztül, egyszerűsített védelem a CPU sebezhetőségei ellen, változók inicializálása a veremben Clang-ban, a /proc cseréjének védelme, a Runtime Verification (RV) alrendszer bővítése, AF_UNIX socketek korlátozása az AppArmor által, és a TCP DualPI2 túlterhelési ellenőrző algoritmus.

Az új verzióba 14334 javítás került a 2118 fejlesztőtől, a patch mérete 46 MB (a változások 12841 fájlt érintettek, 646654 sor kódot adtak hozzá, 398782 sort töröltek). A korábbi kiadásban 15924 javítást végeztek el 2145 fejlesztőtől, a patch mérete 50 MB volt. A 6.17 verzióban bemutatott változások körülbelül 43%-a eszközmeghajtókkal, körülbelül 12%-a hardverarchitektúrához specifikus kód frissítésével, 14%-a a hálózati stackkel, 4%-a fájlrendszerekkel, és 3%-a a kernel belső alrendszereivel kapcsolatos.

A 6.17 kernel fő újdonságai (1, 2, 3):

  • Lemezszubszisztéma, bemenet/kipontozás és fájlrendszerek
    • A Btrfs-ben kísérleti támogatást kapott a nagy memóriaoldalak (large folios) használata, amely csökkenti a költségeket és javítja egyes műveletek teljesítményét. Megvalósították a szabad hely elosztási bitmapokra irányuló kérés caching-ét, amelynek révén a üres fájlok létrehozásának teljesítménye 20%-kal nőtt. A tömörített adatokat alkalmazó rendszerekben javult a előre olvasás teljesítménye. Sűrűbben helyezték el a kulcsokat az XArray struktúrában, ami növelte a bővítési fa csomópontjainak tárolásának kompakt jellegét és lehetővé tette a levegővágás végső csomópontjainak számának 50-70%-os csökkentését. További beállításokat biztosítottak a defragmentált bővítmények tömörítésének használatára.
    • Az ext4 fájlrendszerben megjelent a bufferolt I/O támogatása RWF_DONTCACHE opcióval, amelynél az adatok azonnal törlődnek az oldal cache-ből az operáció befejezése után.
    • Az EROFS fájlrendszerben megvalósították a metainformációk tömörítésének támogatását.
    • Az NFS szerver most már delegálhatja az írási műveleteket az ügyfeleknek, akik csak írásra nyitják meg a fájlokat.
    • A fallocate() rendszerhíváshoz hozzáadták az FALLOC_FL_WRITE_ZEROES zászlót, amely lehetővé teszi, hogy a megadott fájl tartományát nullákkal töltsük fel a néhány SSD meghajtó által támogatott WRITE_ZERO parancs használatával, amely a be-/kimeneti műveletek nélkül végzi a nullázást. A lehetőség egyelőre csak az ext4 fájlrendszerben érhető el.
    • Hozzáadták a file_getattr() és file_setattr() rendszerhívásokat a megadott fájl inode attribútumainak kezelésére.
    • Eltávolították a «pktcdvd» illesztőprogramot, amely az optikai médiák csomagolt üzemmódban való kezelésére szolgált, és amelyet 2016-ban elavultnak nyilvánítottak.
    • A Bcachefs fájlrendszert a Linux kernelben külső karbantartási módba helyezték, ami azt jelenti, hogy a Bcachefs-változtatásokat nem fogadják el a kernel fő kódjában, míg a fájlrendszer kódja a kernel kódalapjában marad. A Bcachefs fejlesztése a kernel kódalapján kívül folyik, amíg Kent Overstreet ténylegesen nem bizonyítja, hogy képes megfelelően együttműködni a kernel többi fejlesztőjével és követni a bevett fejlesztési szabályokat.
  • Memória és rendszerszolgáltatások
    • Az ütemezőből eltávolították az egyprocesszoros konfigurációk támogatását. Egyprocesszoros rendszerek esetén most már olyan kernelokat kell használni, amelyeket többprocesszoros rendszerekhez (SMP) állítottak össze. Az egyprocesszoros és többprocesszoros rendszerek kódja egységesítve lett, megszabadítva a felesleges kötelékektől, mint például a CONFIG_SMP kernel paraméter.
    • Hozzáadták a DAMON_STAT (Data Access Monitoring Results Stat) kernelmodult, amely lehetővé teszi a RAM-hozzáférés nyomon követését a DAMON (Data Access MONitor) alrendszer használatával. A modul statisztikákat biztosít az inaktivitásról (memory_idle_ms_percentiles) és a várható memória sávszélességről (estimated_memory_bandwidth).
    • ARM64 architektúrával rendelkező rendszereken megvalósították a Live-patch támogatást, amely lehetővé teszi a Linux kernel frissítéseinek alkalmazását a futás közben, rendszer leállítása és újraindítása nélkül.
    • A minimalista C könyvtárban, a nolibc-ben, amely a Linux kernel forráskódjával együtt érkezik, és alapvető rendszerhívásokhoz biztosít köteget, támogatást valósítottak meg a SuperH, x32, MIPS n32 és MIPS n34 architektúrákhoz.
    • Bővítették a core-dumpok AF_UNIX socketen keresztül történő átadásának lehetőségét, lehetővé téve biztonságosabb core-dump kezelők létrehozását a felhasználói térben, anélkül, hogy a kernelnek privilegizált folyamatok hívására lenne szüksége. Az új verzió tartalmaz egy protokollt a létrehozáshoz. szerverek, képesek kezelni a core-dumpok feldolgozását egyes feladatok szintjén. Például egyes folyamatok esetén figyelmen kívül lehet hagyni a core-dumpokat, míg másoknál át lehet őket adni egy socketen keresztül. Külön prototípus készült a core-dumpok kezelésére szolgáló szerverhez.
    • Hozzáadva a kernel parancssori opció «crashkernel=size,cma» az előre allokálható hely fenntartásához a CMA (Contiguous Memory Allocator) segítségével a kernel crash-dumpjának tárolásához.
    • Bővítve a pidfd mechanizmus képességeit, lehetővé téve az egyes folyamatokhoz kapcsolódó, és ellentétben a pid-del, újra nem rendelhető azonosítók használatát. Lehetővé vált a pidfd-hez kapcsolódó kiterjesztett attribútumok hozzáfűzése a felhasználói térből. Engedélyezve lett a fájl deszkriptorok megnyitása pidfd-hez az open_by_handle_at() függvény segítségével anélkül, hogy a fájlrendszerhez kapcsolódna. A kernel által létrehozott belső információ most a folyamathoz van kapcsolva, nem a pidfd-hez, és megmarad az ugyanazon folyamat újranyitása között.
    • A BPF alrendszerhez hozzáadva a bpf_cgroup_read_xattr() funkciót a fájlok kiterjesztett attribútumainak olvasására. Lehetővé téve a BPF-programokban jellemző karakterlánc műveletek, mint például a bpf_strcmp, bpf_strnchr, bpf_strchrnul, bpf_strlen és bpf_strspn használatát, amelyek csak olvasási módban működnek. Hozzáadva a szokásos stdout és stderr folyamok használatát a felhasználói térbeli komponensekkel való interakcióhoz. LoongArch architektúrájú rendszerek esetén a BPF-ben dinamikus kód módosítás realizálva lett, a «BPF trampoline» mechanizmusról (csökkenti a költségeket a kernel és a BPF-programok közötti hívások átadásakor) és programok indítása, amelyek struct_ops-ot használnak a kernel funkciókezelők létrehozásához a BPF-en keresztül.
    • Az időszámláló rendszerében megvalósítva az auxiliary órák támogatása, amelyek nincsenek összekapcsolva a normál rendszeridőkkel és saját ritmusuk szerint működnek (korábban minden óra ugyanazon ritmusra működött, csak a eltolódásukban különböztek).
    • Kezdeti támogatás hozzáadva a Proxy Execution számára, hogy mérsékelje a prioritás-inverzió problémáit. A proxy végrehajtás lehetővé teszi, hogy a zárlatra várakozó feladat átadja végrehajtási kontextusát a zárlatot tartó feladatnak, hogy felgyorsítsa ezen zárlat feloldását.
    • Folytatódik a Rust-for-Linux ágon végrehajtott változtatások átvitele, amelyek a Rust nyelv második nyelvként való használatára vonatkoznak az illesztőprogramok és a kernelfunkciók fejlesztésében (a Rust támogatása alapértelmezetten nem aktív, és nem kötelezi a Rust-ot a kernel kötelező építési függőségei közé). Absztrakciók kerültek bevezetésre a feszültség- és áramszabályozók, a firmware-tulajdonságok, valamint a bemeneti/kimeneti és memóriaforrások kezelésére. Megvalósult a „warn_on!()” makró. Bevezetésre került a UserPtr típus a felhasználói területen található mutatók számára. Kiterjesztették a workqueue, uaccess, dma, time és list modulk funkcionalitását. Új ‘bits’ modul került hozzáadásra a ‘bit’ és ‘genmask’ funkciókkal.
    • A CRC ellenőrző összegek számítására szolgáló kód újraírásra került, és új hívások kerültek hozzáadásra a SHA-1 és SHA-2 hash-ek generálásához. Hardverarchitektúrákra vonatkozó optimalizálások kerültek bevezetésre. A crc32c() funkció teljesítménye növekedett az új x86_64 CPU-kon, amelyek támogatják a VPCLMULQDQ kiterjesztést (Vector Carry-Less Multiplication of Quadwords).
    • Az S390 rendszer számára megvalósult a kiterjesztett memória oldali tér kitöltésének és az átlátszó nagy oldalak (transparent huge page) kezelésének támogatása.
    • Lehetőséget kapott a memóriaoldalak liberálásának agresszivitásának (proactive-reclaim) beállítása, amikor memóriahiány lép fel, NUMA csomópontokra vonatkozóan, amely lehetővé teszi, hogy olyan NUMA csomópontokat jelöljünk ki, ahol aktívan meg lehet húzni a memória felszabadítását. Például: ‘echo “512M swappiness=10” > /sys/devices/system/node/node1/reclaim’.
    • A SCHED_EXT mechanizmushoz, amely lehetővé teszi a BPF használatát CPU ütemezők létrehozásához, hozzáadva a cgroup-on keresztüli sávszélesség-kezelés lehetőségét. Például a cpu.max paraméter használható a CPU terhelés korlátozására.
    • Elavultnak nyilvánították a tracefs virtuális fájlrendszer automatikus csatolását a /sys/kernel/debug/tracing mappába, helyette a /sys/kernel/tracing használata ajánlott.
  • Virtualizáció és biztonság
    • Hozzáadva a védelem a CPU sebezhetőségei ellen a blokkolható támadási vektorok kiválasztásával A konkrét sebezhetőségek beállítása helyett a blokkolási módszerek az elszigetelés típusától függően választódnak: felhasználó és mag (user-kernel), felhasználó és másik felhasználó (user-user), vendég rendszer és gazda környezet (guest-host), különböző vendég rendszerek (guest-guest) és különböző szálak (cross-thread) között. A javasolt megközelítés lehetővé teszi csak azoknak a sebezhetőségi osztályoknak a védelmét, amelyek valóban aggasztják a felhasználót. Például a felhő környezet tulajdonosai aktiválhatják a guest-host és guest-guest módokat, majd aktiválódnak a BHI, GD, L1TF, MDS, MMIO, Retbleed, RFDS, Spectre_v2, SRBDS, SRSO és TAA sebezhetőségek elleni védelmi módszerek.
    • A Clang fordító támogatása bővült a mélységi nyomkövetés módjának bekapcsolásával, amely során az összes veremben tárolt változó inicializálásra kerül. Az inicializálás a kernelből származó információk szivárgásának megakadályozására szolgál, mivel az inicializálatlan változók korábbi verembéli adatok maradványait tartalmazhatják. Eddig hasonló lehetőség a GCC STACKLEAK bővítmény használatával támogatta.
    • A fájlrendszer /proc védelme bekerült a támadók általi megtévesztés ellen a 'bind' módban történő csatolás révén. A /proc gyökér inode száma most fix (PROCFS_ROOT_INO) és ellenőrizhető a felhasználói térben lévő folyamattal.
    • Az RV (Runtime Verification) alrendszerhez, amely a nagy megbízhatóságú rendszerek helyes működésének ellenőrzésére szolgál, hozzáadódott az rtapp (valós idejű alkalmazás monitor) komponens, amely nyomon követi a valós idejű üzemmódban működő alkalmazások tipikus problémáit, valamint az rp, sssw és opid komponensek a feladat ütemező tesztelésére. Lehetőség nyílik olyan monitoring komponensek létrehozására, amelyek a viselkedési modell meghatározásához lineáris időbeli logikát használnak a determinisztikus automata helyett. Az ellenőrzés futás közben történik, a nyomkövetési pontokhoz csatlakozó kezelők révén, amelyek a tényleges végrehajtást egy előre meghatározott referencia modellel hasonlítják össze, amely meghatározza a rendszer várt viselkedését.
    • Az AppArmor rendszerbe hozzáadódott az AF_UNIX socketekhez való hozzáférés szabályozásának támogatása.
    • A KVM hypervisor ARM rendszereken megvalósította a GICv5 megszakítási vezérlő támogatását.
    • Hozzáadva a CONFIG_KVM_IOAPIC beállítás, amely lehetővé teszi az APIC, PIC és PIT emulációs támogatás kikapcsolását a KVM-ben.
    • Hozzáadva a VMSCAPE sebezhetőség elleni védelem.
    • Hozzáadva az FS_IOC_GETLBMD_CAP ioctl-parancs, amely lehetővé teszi felhasználói térből az integritás védelmére szolgáló eszközök alkalmazásáról szóló információk lekérését egy fájl esetében.
    • A /sys/fs/selinux/user interfész elavultnak nyilvánítva, amelyhez való hozzáférés esetén most öt másodperces késleltetés lép életbe, és figyelmeztetés jelenik meg a naplóban.
  • Hálózati alrendszer
    • A PSE (Power Sourcing Equipment) technológia megvalósításában, amely lehetővé teszi az Etherneten keresztüli áramellátást olyan eszközök számára, mint az IP-kamerák és vezeték nélküli hozzáférési pontok, hozzáadva egy konfigurálható energiaértékelési költségvetési stratégiák támogatása (átlagosan elérhető kapacitás). Az ilyen stratégiák segítenek meghatározni, mely portokat kell elsőként kikapcsolni a túlterhelés megelőzése érdekében.
    • Az MCTP (Management Component Transport Protocol) protokoll megvalósításában hozzáadva a csomagok külső csomópontokhoz történő irányításának támogatása közbenső csomópontokon (gateway-routing) keresztül. Például az alábbi szabályok lehetővé teszik, hogy a csomagokat a 10-es azonosítóval rendelkező csomóponthoz (Endpoint ID 10) irányítsuk az mctpi2c0 eszközön keresztül, egy közvetlenül a 9-es azonosítójú csomóponthoz csatlakoztatott 0x1d címmel. mctp route add 9 via mctpi2c0 mctp neigh add 9 dev mctpi2c0 lladdr 0x1d mctp route add 10 gw 9
    • A UNIX-szokettekhez (AF_UNIX) megvalósítva a SO_INC opció, míg a VSOCK címzési családhoz az SIOCINQ opció került bevezetésre. A megvalósított opciók hasonlóak a TCP_INQ opcióhoz a TCP-nél, és lehetővé teszik, hogy vezérlő üzeneten keresztül tájékoztatást kapjunk a szokettben olvasásra rendelkezésre álló bájtok számáról.
    • A TCP-nél szigorú betartása lépett érvénybe a bejelentett fogadóablak méretének, amely meghatározza azokat az adatokat, amelyek küldésére lehetőség van az ACK megerősítés fogadása előtt a másik feletől. Korábban az operációs rendszer tovább folytatta a beérkező adatokat feldolgozni a bejelentett fogadóablak méretének túllépésével, de ezentúl ezt nem fogja tenni.
    • Az MPTCP (Multipath TCP) lehetővé tette a TCP_MAXSEG socket opció használatát a küldhető szegmensek maximális méretének korlátozására. Az MPTCP a TCP protokoll kiterjesztése, amely lehetővé teszi az adatcsomagok egyidejű továbbítását különböző hálózati interfészeken keresztül, amelyek különböző IP-címekhez vannak rendelve.
    • Hozzáadva a TCP DualPI2 (RFC 9332) túlterhelés-ellenőrző algoritmus támogatása, amely lehetővé teszi a skálázható túlterhelés-ellenőrzők használatát, olyan forgalomban, amely magas szintű szolgáltatási minőséget igényel (például TCP-Prague és DCTCP), anélkül, hogy csökkentené a klasszikus forgalom teljesítményét, amelyhez olyan túlterhelés-ellenőrzők használatosak, mint a Reno és a Cubic.
    • Hozzáadva a «force_forwarding» sysctl, amely lehetővé teszi a forgalom átirányításának aktiválását kiválasztott hálózati interfészeken IPv6 esetén.
    • Támogatás törölve a SACK (Selective Acknowledgment) csomagvesztés-észlelési algoritmushoz, amelyet az RFC 6675 ír le. Ezt az algoritmust 2018-ban elavultnak nyilvánították. TCP csomagvesztés észlelésére ajánlott a RACK-TLP algoritmus használata.
  • Hardver
    • Folyamatban van az Intel Xe architektúrával rendelkező GPU-khoz készült drm meghajtó (Direct Rendering Manager) fejlesztése, amelyet az Intel Arc család grafikus kártyáiban és az integrált grafikában használnak a Tiger Lake processzoroktól kezdődően. Az új verzió alapértelmezés szerint tartalmazza a Panthor Lake mikroarchitektúrára épülő chipok támogatását, és hozzáadta a WildCat Lake mikroarchitektúra támogatását is.
    • Az AMDGPU meghajtóban a GFX9.x GPU-khoz megvalósult a Cleaner Shader mechanizmus támogatása, amely biztosítja a GPU memória tisztítását annak újbóli felhasználása előtt, hogy elkerülje más folyamatok által hátra hagyott adatok szivárgását. Javítva a készenléti mód támogatása. Hozzáadva a hibernált módra való áttérés lehetősége az AMD SR-IOV környezetekben. Fejlesztve a háttérvilágítás vezérlését.
    • Az i915 meghajtóban megvalósult a drm_panic mechanizmus támogatása, amely a hibák során hasonlít a „kék képernyő halálához”. Hozzáadva a Wildcat Lake chipkészlethez használt kijelzővezérlő támogatása.
    • Folyamatban van a Nova meghajtó komponenseinek integrálása az NVIDIA GPU-khoz, amelyeket a Turing mikroarchitektúrára épülő NVIDIA GeForce RTX 2000-től kezdődően használnak, GSP firmware-rel. A meghajtót Rust nyelven írták. Az új verzióban hozzáadott egy absztrakciós szint a DMA-val való munkához, megvalósult a VBIOS elemző, hozzáadva kód a framebuffer beállításához és biztosítva a Falcon módban való gyorsított betöltés támogatását.
    • Az Adreno meghajtó támogatja a Qualcomm Adreno x1-45 és x1-85 GPU-kat.
    • A msm meghajtóban hozzáadva a GPU Adreno SM8750 támogatása és a videomemória (VM_BIND) leképezése.
    • A panfrost meghajtóban hozzáadva a Mali GPU-k támogatása, amelyeket a Mediatek mt8370 SoC-ban alkalmaznak.
    • A lima meghajtóba beépítették a Rockchip RK3528 SoC-ban használt GPU-k támogatását.
    • Hozzáadva az mtd (Memory Technology Devices) meghajtó az Intel GPU-ba integrált NVM memória eléréséhez.
    • Hozzáadva az ASoC IMX WM8524, AMD ACP7.2, SoundWire ACP 7.1, Fairphone 4 & 5, Qualcomm QCS8275, Framework Laptop 13 (AMD Ryzen AI 300), CS35L41 HDA (ASUS laptopokban használják), Richtek RTQ9124, TI TAS5753, HP EliteBook x360 830 G6, EliteBook 830 G6, LG 16Z90R-A és HP 15-fc000 hangrendszerek támogatása. A HD-audio kód átszervezésére került sor.
    • Hozzáadva az ARM platformok, SoC-k és eszközök támogatása: NVIDIA Tegra264, Marvell PXA1908 (Marvell első 64 bites chipje okostelefonok számára), CIX P1, Axiado AX3000, Sophgo SG2000 (ARM és RISC-V magokat kombinál), Mediatek mt6572, exynos2200 (használják a Samsung Galaxy S22-ben), Renesas R-Car V4M-7, TI am62d2 és Sophgo sg2042, Mediatek mt8186 és Qualcomm Snapdragon X1 alapú laptopok, mt6572, tegra30 és msm8976 platformok alapú okostelefonok és táblagépek.

Egyúttal a latin-amerikai Szabad Szoftver Alapítvány bemutatta a teljesen szabad 6.17-es kernel verziót - Linux-libre 6.17-gnu, amely megtisztítva lett a gyártó által korlátozott szabadalmi vagy kód elemekkel rendelkező firmware-ktől és meghajtóktól. A 6.17-es kiadásban frissült a blobok tisztítási kódja az amdgpu, prueth, iwlwifi, btusb, pci mhi host, adreno a6xx, nova-core és Intel AVS meghajtókban. A blobok neveinek tisztítása megtörtént az ARM chipek és Intel IPU7 dts fájljaiban (devicetree). A blobok betöltése új pci hda drivereknél semlegesítve lett. Megszűnt a blobok tisztítása a kivett QLogic infiniband drivernél.

Forrás: opennet.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster