A Linux 6.9 kernel kiadása

Két hónap fejlesztés után Linus Torvalds bemutatta a Linux 6.9 kernel kiadását. A legszembetűnőbb változások közé tartozik a dm-vdo modul a blokkeszközök deduplikálására és tömörítésére, a közvetlen fájl-hozzáférés mód a FUSE-ban, a pidfd létrehozásának támogatása egyes szálak számára, a BPF-token mechanizmus, a Rust támogatása ARM64 rendszereken, az Ext2 fájlrendszer elavultnak nyilvánítása, a régi NTFS meghajtó eltávolítása, és az Intel FRED mechanizmus támogatása.

Az új verzió 15680 javítást tartalmaz 2106 fejlesztőtől, a javítás mérete - 54 MB (a változások 11825 fájlt érintettek, 687954 sor kódot adtak hozzá, 225344 sor kódot töröltek). A múltbeli kiadásban 15641 javítás volt 2018 fejlesztőtől, a javítás mérete - 44 MB. A 6.9 verzióban bemutatott összes változás körülbelül 42%-a az eszközmeghajtókhoz kapcsolódik, körülbelül 17% a hardverarchitektúrákra specifikus kód frissítésével foglalkozik, 13% a hálózati veremhez, 7% a fájlrendszerekhez és 4% a kernel belső alrendszereihez.

A 6.9 kernel fő újításai:

  • Lemezszubszisztéma, bemenet/kipontozás és fájlrendszerek
    • A Device Mapper (DM) új dm-vdo (virtuális adattömörítő) kezelőt kapott, amely lehetővé teszi, hogy meglévő blokkeszközök alapján virtuális blokkeszközöket hozzanak létre, amelyek olyan funkciókkal rendelkeznek, mint a duplicált adatok deduplikálása, adatok tömörítése, üres blokkok kiszűrése és a blokkeszköz méretének növelése igény szerint (thin provisioning). Ezek a funkciók a blokkeszköz szintjén valósulnak meg, és függetlenek a használt fájlrendszertől (például a dm-vdo segítségével automatikusan egyesíthetők a duplikált adatok, és a fájlok tömörített formában tárolhatók bármilyen fájlrendszer esetében). A dm-vdo támogatja a fizikai tárolók használatát, melyek mérete legfeljebb 256TB, és logikai kötetek létrehozását, melyek mérete legfeljebb 4PB. A vdo partíciók kezelésére az lvm használata ajánlott. A VDO technológiát a Permabit fejlesztette ki, és 2017-ben a Red Hat általi felvásárlása után nyílt forráskódúvá vált.
    • A FUSE-alrendszerben, amely a felhasználói térben található fájlrendszerek megvalósítására szolgál, bevezetésre került a 'passthrough' üzemmód kezdeti megvalósítása, amely lehetővé teszi a fájlok adataihoz való közvetlen hozzáférést a kernel szintjén, megkerülve a felhasználói térben működő folyamatot, ami bizonyos helyzetekben jelentősen növelheti a teljesítményt. Például a FUSE fájlrendszerek, amelyek csak olvasási módban működnek és korlátozzák a fájlokhoz való hozzáférést, képesek a fájlok tartalmát visszaadni az eredeti fájlrendszerből anélkül, hogy azt a FUSE folyamatába kellene átadni.
    • A kimentett (deprecated) kategóriába került az Ext2 fájlrendszer implementációját tartalmazó sofőr. Az okok között szerepel, hogy a sofőr csak 32 bites időszámlálókat támogat az inode-okban, amelyek 2038. január 19-én túlcsordulnak. Az ext2 sofőr helyett ajánlott az ext4 sofőr használata, amely támogatja az Ext2 fájlrendszer működését, és teljes mértékben kompatibilis vele, ugyanakkor az ext2 partíciókban 2038-as probléma nélküli időbélyegeket is használhat, ha a fájlrendszert több mint 255 bájtos inode mérettel hozták létre (az ext2 sofőr esetében a 32 bites időszámlálók függetlenek voltak az inode méretétől).
    • Az NTFS fájlrendszer régi meghajtója eltávolításra került, amelyet az 5.15-ös kiadástól új NTFS3 meghajtó váltott fel. Két NTFS implementációs meghajtó szállítása a kernelben nem indokolt, tekintettel arra, hogy a régi meghajtó már évek óta nem frissült, rossz állapotban van, és csak olvasási módban működhet.
    • A zonefs és a hugetlbfs fájlrendszerekbe beépítésre került a csatolt fájlrendszerek felhasználói azonosítóinak leképezésének támogatása, amely lehetővé teszi egy adott felhasználó fájljainak párosítását a jelenlegi rendszerben lévő más felhasználó fájljaival egy, az idegen partícióra csatolt rendszerben.
    • Az NFSv4-ben a rendszergazdák számára elérhetővé vált a fájlok megnyitásának és zárásának állapotainak ürítése.
    • Az Ext4 fájlrendszer esetében csak a hibajavítások és a kunit tesztek frissítése emelhető ki.
    • A Btrfs esetében folytatódik a funkciók átállítása a memóriablokkok (page folios) használatára.
    • Az XFS fájlrendszerben folytatódik a fsck segédprogram alkalmazási lehetőségeinek megvalósítása a felmerült problémák online módban történő ellenőrzésére és javítására, anélkül hogy a fájlrendszert le kellene csatolni.
    • A pwritev2() rendszerhívásba bevezetésre került az RWF_NOAPPEND jelző, amely lehetővé teszi a fájlba írási eltolás megadását, még akkor is, ha a fájl csak adat hozzáfűzésére lett megnyitva.
    • Új ioctl parancsokat vezettek be: FS_IOC_GETUUID – visszaadja a megadott fájlrendszer UUID-azonosítóját, és FS_IOC_GETFSSYSFSPATH – meghatározza a megadott csatolt fájlrendszer helyét a /sys/fs alatt.
    • Az efs, qnx4 és coda fájlrendszerek átálltak az új partíciók csatlakoztatásának API-jára.
    • Javították a fájlműveletek végrehajtásának megvalósítását nagybetűérzékeny üzemmódban. A teljesítményjavulást az jelentette, hogy először a nagybetűs összehasonlítást végezték el, majd visszaálltak a kisbetűs keresésre. Megoldották az overlayfs csatolásának problémáit olyan könyvtárakra, amelyek kisbetűérzékeny üzemmódban vannak.
  • Memória és rendszerszolgáltatások
    • Megvalósították az Intel FRED (Flexible Return and Event Delivery) mechanizmus támogatását, amely a mélyszintű események információszállításának hatékonyságát és megbízhatóságát hivatott fokozni a jelenleg alkalmazott IDT (Interrupt Descriptor Table) mechanizmushoz képest. A teljesítmény növekedését és a késleltetések csökkentését a CPU IRET utasítással történő esemény-visszaadás biztosítja, ahelyett, hogy az eseményeket az IDT táblázaton keresztül továbbítanák. A megbízhatóság növekedése a kernel és felhasználói kontextusokban történő eseménykezelés elkülönített feldolgozása, a NMI beágyazott végrehajtásának védelme, valamint az összes kapcsolódó CPU regiszter mentésével a kibővített veremben érhető el.
    • Lehetővé vált a CPU egyes magokhoz való adatalcímzések optimalizálása, a kernel kódjában névvel ellátott címtartományok (Named Address Spaces) használatával, amelyek a GCC-ben a GNU C kiterjesztéseként valósultak meg.
    • A pidfd_open() függvényhez hozzáadták a PIDFD_THREAD flag-et, amely lehetővé teszi a pidfd létrehozását egyes szálak számára, nemcsak a szálcsoport vezetőjének kontextusában. Ezen kívül egy ál-FS megvalósítása is javasolt a pidfd virtuális fájlrendszeren keresztüli elérésére. A PID azonosítással ellentétben a pidfd azonosító egy adott folyamathoz van kötve, és nem változik, míg a PID az aktuális folyamat befejezése után egy másik folyamathoz is hozzárendelhető.
    • A BPF alszisztémába bevezetésre került a BPF-tokenek mechanizmusa, amely lehetővé teszi a programok számára a jogosultságok szelektív delegálását privilegizált BPF-műveletekhez, például egy privilégium nélküli alkalmazás számára lehetővé tehető egyes BPF alszisztémákhoz való hozzáférés, anélkül, hogy teljes CAP_BPF jogosultságokat adna.
    • A BPF alszisztémába egy új megosztott memória típust, a bpf_arena-t vezettek be, amely a BPF programok és a felhasználói tér folyamataival való közös használatra elérhető területet határoz meg. Bevezetésre került a may_goto utasítás, amely lehetővé teszi a megszakítható ciklusok működésének szervezését, amelyeket a verifikáló megszakíthat. Lehetővé vált véletlen TCP SYN cookie-k generálása BPF-programokból és BPF-kezelők létrehozása a SYN-flood elleni védekezéshez.
    • Folyamatos a változások átvitele a Rust-for-Linux ágból, amelyek a Rust nyelv második nyelvként való felhasználásával kapcsolatosak a meghajtók és a kernel modulok fejlesztésénél (a Rust támogatás alapértelmezés szerint nem aktív, és nem vezet a Rust kötött függőségekként való számításához a kernelben). Bevezették a Rust nyelv használatát a 64-bites ARM processzorokon. Az Rust 1.76-os kiadására való átállás megtörtént. Bevezetésre került a 'container_of!' makró. A 'ptr_metadata' instabil funkciója helyett egy stabil 'byte_sub' módszert használnak. A 'time' modul is bevezetésre került, amely a 'msecs_to_jiffies()' időátalakító funkciót tartalmazza.
    • Az io_uring alszisztémába hozzáadták a fájlok truncálásának lehetőségét (ftruncate_file).
    • Bevezetésre került egy új típusú munkasorozat, a WQ_BH (workqueue Bottom Halves), amely aszinkron kód végrehajtását célozza programozott megszakítások kontextusában, a régi tasklet-ek helyett.
    • Jelentős átdolgozáson ment keresztül a timer rendszer, melynek célja az akcióba lépő időzítő végrehajtásához szükséges aktív CPU mag kiválasztási logikájának javítása, hogy ne ébressze fel az inaktív magokat.
    • Lehetőség nyílt a kernel energiafogyasztási modell (EM, Energy Model) frissítésére működés közben, amely például figyelembe veheti a munkahőmérséklet hatását a CPU energiahatékonyságára. Az em_cpu_energy() funkció teljesítménye jelentősen megnövekedett, amely most 1,43-szor gyorsabban fut egy állandó rendszeren, míg a RockPi 4B deszkán 1,69-szer gyorsabb.
    • ARM64 architektúrá alapú rendszerek LPA2 üzemmódban történő indításának támogatása került hozzáadásra, 52 bites virtuális адрес térrel.
    • ARM64 rendszerekhez a PTE (Page Table Entry) folyamatos bejegyzéseinek támogatása megvalósult, amely javítja a teljesítményt a TLB (Translation Lookaside Buffer) hatékonyabb kihasználásával.
    • Javítófoltok kerültek elfogadásra a memóriakezelő alrendszer teljesítményének növelésére a vmalloc() versengő zárak előfordulásának csökkentésével.
    • A LoongArch architektúrához élő patchelés mechanizmusa került megvalósításra, amely lehetővé teszi a kernel javításainak alkalmazását újraindítás nélkül.
    • RISC-V rendszerekhez a membarrier() rendszerhívás támogatása megvalósult, amely memóriaügyekben korlátokat állít fel a futó szálak számára.
    • Emelték az LLVM/Clang verziójára vonatkozó követelményeket, amelyet a kernel fordításához lehet használni. Most már legalább LLVM 13.0.1 verzió szükséges a fordításhoz (korábban LLVM 11+ fordítása támogatható volt).
    • A "User trace events" mechanizmushoz, amely lehetővé teszi nyomkövető események létrehozását felhasználói folyamatokból a felhasználói tér aktivitásának nyomon követésére, hozzá lett adva az eseményinformációk exportálásának támogatása különböző formátumokban (USER_EVENT_REG_MULTI_FORMAT).
    • A funkcióhívások nyomkövető mechanizmusához hozzá lett adva a bemeneti argumentumok állapotának nyomon követési lehetősége a funkcióból való kilépés nyomkövetésekor. A visszatérési értékek most összehasonlíthatók a funkcióhíváskor használt argumentumokkal.
    • A perf utilitáshoz hozzá lett adva a "cluster" kimeneti aggregációs mód támogatása ("perf stat -a --per-cluster"), amely lehetővé teszi a közösen használt erőforrások statisztikájának egyesítését. Megvalósult a libcapstone könyvtár használatának lehetősége a processzor utasításainak disassemblálásához ("perf script -F disasm"). Memóriakihasználás optimalizálások történtek a 'perf report' és 'perf annotate' parancsok végrehajtása során.
  • Virtualizáció és biztonság
    • Hozzáadva az RFDS (Register File Data Sampling) sérülékenység elleni védelem az Intel Atom processzorokban, amely lehetővé teszi a maradványinformációk kinyerését a processzor regiszter fájljaiból (RF, Register File), amelyek a regisztrák tartalmának közös tárolására szolgálnak ugyanazon CPU mag összes feladata számára. A sérülékenység blokkolásához mikrokód frissítés és a VERW utasítás használata szükséges a mikroarchitektúra puffereinek kiürítésére a kernelből a felhasználói térbe való visszatéréskor. A védelem bekapcsolásához a kernel betöltésekor megadható a „reg_file_data_sampling=on” zászló. A sérülékenységnek való kitettségről és a védelemhez szükséges mikrokódról információt a „/sys/devices/system/cpu/vulnerabilities/reg_file_data_sampling” fájlban lehet értékelni.
    • Alapvető támogatás került hozzáadásra a vendég rendszerek védelme érdekében az AMD SEV-SNP (Secure Nested Paging) kiterjesztés révén, amely biztonságos működést biztosít a beágyazott oldal táblák kezelésénél, és védelmet nyújt az AMD EPYC processzorok „undeSErVed” és „SEVerity” támadásaival szemben, amely lehetővé tenné az AMD SEV (Secure Encrypted Virtualization) védelmi mechanizmus megkerülését. KVM A SNP használatához szükséges módosításokat a 6.10-es ágon tervezik hozzáadni.
    • Az IMA (Integrity Measurement Architecture) és EVM (Extended Verification Module) technológiák implementációs moduljai átálltak az LSM (Linux Security Modules) keretrendszer használatára, ami a funkcionalitás elvesztése nélkül jelentősen leegyszerűsítette a kódot, egyesítette a párhuzamos funkcionalitást és kihasználta az LSM-en elérhető tipikus lehetőségeket. Az IMA modul célja az operációs rendszer komponenseinek integritásának ellenőrzése digitális aláírások és hash-ek alapján. Az EVM modul lehetővé teszi a fájlok kiterjesztett attribútumainak (xattrs) védelmét a sérülékenységi támadásokkal szemben, amelyek célja azok integritásának megsértése (az EVM nem engedi offline támadás lebonyolítását, amelyben a támadó megváltoztathatja a metaadatokat, például a saját tárolójából való boot-lás során).
    • A lsm_list_modules(), lsm_get_self_attr() és lsm_set_self_attr() rendszerhívásokat a 32 bites környezetek jobb kompatibilitása érdekében átírták, amelyek a betöltött LSM modulok (Linux Security Modules) listáját adják meg, valamint az LSM modul attribútumainak megszerzésére/állítására szolgálnak. A módosítás megsérti a visszafelé kompatibilitást, de mivel az új rendszerhívásokat a kernel előző kiadásában már hozzáadták, és jelenleg még nem használják az alkalmazások, Linus Torvalds úgy vélte, hogy a módosítás megengedett.
    • Megpróbálták újból aktiválni az UBSAN (Undefined Behavior Sanitizer) mechanizmus használatát. A probléma lényege, hogy a fordítók eltérően kezelik a számítógépes túlcsordulásokat, a jelölt és a jelöletlen típusok esetében. A jelölt túlcsordulások és a pointer túlcsordulások az undefined behavior (meghatározatlan viselkedés) kategóriájába tartoznak, míg a jelöletlen túlcsordulások 2n modulos törvényt alkalmaznak, és csak az eredmény legkisebb bitei maradnak meg („wrap-around”), így nem számítanak meghatározatlan viselkedésnek. Az undefined behavior elkerülése érdekében a kernel az „-fno-strict-overflow” opcióval lett fordítva, amely minden integer túlcsordulás esetén a „wrap-around”-t alkalmazza. A GCC és a Clang nem mindig tudja helyesen diagnosztizálni a problémákat az „-fno-strict-overflow” jelző használatakor, ezért az UBSAN aktiválása a fordítófejlesztőkkel való együttműködés céljából történik, hogy megszüntethetőek legyenek a téves riasztások és a túlcsordulások az olyan helyeken, ahol nincsenek nyilvánvaló ellenőrzések.

      A kernelben a lehetséges túlcsordulások ellenőrzésére az olyan konstrukciók használatosak, mint a „var + offset PAGE_SHIFT) < pgoff){..}”), amelyek a „-fno-strict-overflow” jelzőn alapulnak, és nem fedik le az összes kódot, ahol potenciálisan túlcsordulás léphet fel. A problémát az okozza, hogy az UBSAN használatakor az ilyen ellenőrzések számos téves figyelmeztetést generáltak, ami miatt 2021-ben az UBSAN-t le kellett állítani. Az új megvalósításban javasolt speciális annotációk, mint az __signed_wrap és __unsigned_wrap, valamint a kész makrók a teszteléshez, mint például add_would_overflow(a, b) és add_wrap(a, b), amelyek lehetővé teszik a fejlesztők által tervezett integer túlcsordulások használatának elkülönítését a véletlenszerű túlcsordulásoktól, amelyek sebezhetőségeket okozhatnak. Linus Torvalds elutasította a kernel nagyobb átdolgozásának javaslatát további típuské definitions bevezetésével.

  • Hálózati alrendszer
    • A hálózati alrendszerben csökkentették a versengő zárolások (lock contention, más szál által megszállt zárolás megszerzése) előfordulását. Csökkent a RTNL zárolások használata.
    • Hozzáadva a lehetőség, hogy az egyes epoll hívásokhoz aktiváljuk az aktív polingot (busy polling). A medence mérete és a költségkeret paraméterei külön beállíthatók a rendszer alapértelmezett paramétereitől.
    • Megvalósítva a net_hotdata struktúra a leggyakrabban használt hálózati konfigurációs változók hatékonyabb gyorsítótárazásához.
    • Az MPTCP-ben hozzáadva a TCP_NOTSENT_LOWAT opció beállításának támogatása a socketekhez, amely lehetővé teszi a küldési puffer méretének korlátozását. Az MCTP socket API-ba bevezetve a hálózati azonosítók («network ID») támogatása, amelyek lehetővé teszik, hogy egy hoston több, nem átfedő MCTP hálózatot használjunk.
    • Az IPSec-ben hozzáadva az ICMP hibainformációk átirányításának támogatása (RFC 4301).
    • Felgyorsult az elavult élettartamú útvonalak szkennelési folyamata.
    • Felgyorsult az XDP működése, a nagy memória blokkok allokálásának szigorú elkerülésével.
    • Hozzáadva a metaadatok csatolásának lehetősége a netconsole üzenetekhez.
    • A Netfilterben lehetővé vált felhasználói térből definiált táblák meghatározása, amelyek a háttérfolyamathoz vannak kötve, és nem törlődnek automatikusan a felhasználói alkalmazás befejezése után.
    • Az nftables-ben felgyorsult a elemek hozzáadása a set-gyűjteményekhez, egyesített tartományokkal.
  • Hardver
    • Az i915 illesztőprogramban folytatódott az Intel LunarLake (Xe 2) chip támogatásának megvalósítása. Új PCI azonosítók kerültek hozzáadásra az Intel Arrow Lake és Alder Lake N chip alapú eszközökhöz. A Displayport számára hozzáadva a tunneling (DP tunneling) és a sávszélesség-allokáció (bandwidth allocation) támogatása. Minden platform számára engedélyezve a gyorsindítási mód. Hozzáadva a hibakeresési kimeneti támogatás a különböző eszközökhöz kötődő módon.
    • Az AMDGPU illesztőprogramban előkészületek folynak az AMD RDNA3.5 és RDNA4 GPU támogatásának megvalósítására. Hozzáadva az ATHUB 4.1, LSDMA 7.0, JPEG DPG, IH 7.0, HDP 7.0, VCN 5.0, SMU 13.0.6, NBIO 7.11, SDMA 6.1, MMHUB 3.3, DCN 3.5.1, NBIF 6.3.1, VPE 6.1.1 és a RAS ACA keretrendszer támogatása. A kernelmódba hozzáadva a freesync_video paraméter a FreeSync technológia használatával végzett videomód-váltás kísérleti támogatásának engedélyezéséhez.
    • A Nouveau illesztőprogramban a kijelzővezérlési kód át lett állítva a kmemdup() funkció használatára.
    • Folyamatban van az Intel Xe architektúrára épülő GPU-khoz készült drm-illesztőprogram (Direct Rendering Manager), amely az Intel Arc grafikus kártyákban és a Tiger Lake processzorokban található integrált grafikában használatos.
    • DRM-illesztőprogram került hozzáadásra a Mediatek MT8188 VDOSYS1 chipekhez.
    • A videorendszerekhez kapcsolódó kernelbeállításokat áthelyezték a CONFIG_VIDEO szekcióba.
    • ARM64 SoC támogatás került hozzáadásra: Mediatek MT7981B (Filogic 820), MT7988A (Filogic 880), NXP i.MX8DXP, Renesas R8A779G2 (R-Car V4H ES2.0), R8A779H0 (R-Car V4M), TI J722S.
    • ARM-alapú platformok és eszközök támogatása került hozzáadásra: Tegra30 chipre épülő Android telefonok, Mediatek MT8186 chipes Chromebook modellek, NAS, Rockchip RK35xx-alapú táblagépek és játékkonzolok, Renesas SoC-alapú White Hawk lapkák, Qualcomm SM8550 (Snapdragon 8 Gen 2) alapú lapok, Apalis Evaluation Board, Sielaff i.MX6 Solo Board, Samsung Galaxy Tab 4 10.1 LTE.
    • Az ALSA hangrendszer kódja átszerkesztésre került. Támogatás került hozzáadásra a Microchip SAM9x7, NXP i.MX95 és Qualcomm WCD939x hangrendszerekhez. A SoundWire illesztőprogramhoz hozzá került a hangprocesszorokkal való ASoC támogatás AMD ACP 6.3 verzióra, míg az Intel rendszerekhez DSPless mód került bevezetésre. További hangkódexek, például Cirrus HD támogatás is bekerült. A virtio illesztőprogramban javult a hangberendezések kezelése.
    • Ethernet vezérlők támogatása került hozzáadásra: Marvell Octeon PCI Endpoint NIC VF és Intel E825-C 100G.

Egyidejűleg a Latin-amerikai Szabad Szoftver Alapítvány elkészítette a teljesen szabad 6.9-es kernel alternatíváját - Linux-libre 6.9-gnu, amely mentes a gyártó által korlátozott nem szabad komponenseket vagy kódot tartalmazó firmware-ektől és illesztőprogramoktól. A 6.9-es kiadásban frissült a blobok tisztításáért felelős kód az amdgpu, ath12k, adreno, btusb és r8169 illesztőprogramokban. Tisztítás történt az új ptp_fc3 illesztőprogramon. A blobok nevei dts fájlokban (devicetree) Aarch64 architektúrához viszonyítva tisztázva lettek. Az i915 illesztőprogram tisztításával kapcsolatos problémák, amelyek leállást okoztak az inicializálás során, megoldásra kerültek. Megváltoztatások történtek a hexadecimális dump formájában biztosított blobok feldolgozásához.

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