Linux 5.7 kernel kiadás

Két hónapos fejlesztés után Linus Torvalds benyújtott kernel kiadás Linux 5.7. A legfigyelemreméltóbb változások közé tartozik: az exFAT fájlrendszer új megvalósítása, egy bareudp modul az UDP alagutak létrehozásához, az ARM64 pointer hitelesítésén alapuló védelem, a BPF programok LSM-kezelőkhöz való csatolásának lehetősége, a Curve25519 új implementációja, egy split- lock detektor, BPF kompatibilitás a PREEMPT_RT-vel, a 80 karakteres sorméret korlátozásának megszüntetése a kódban, a CPU hőmérséklet-jelzők figyelembevétele a feladatütemezőben, a clone() használata egy másik cgroupban lévő folyamatok létrehozásához, írás elleni védelem a memóriába a userfaultfd használatával.

Az új verzió 15033 1961 javítást tartalmaz XNUMX XNUMX fejlesztőtől,
javítás mérete - 39 MB (a változások 11590 fájlt érintettek, hozzáadva 570560 kódsort,
297401 sor eltávolítva). Az 41-ben bemutatott összesnek körülbelül 5.7%-a
a változtatások eszközillesztőkkel kapcsolatosak, a változtatások körülbelül 16%-a
hozzáállás a hardver architektúrákra jellemző kód frissítéséhez, 13%
a hálózati veremhez, 4% a fájlrendszerekhez és 4% a belsőhöz kapcsolódik
kernel alrendszerek.

A főbb innovációk:

  • Lemez alrendszer, I/O és fájlrendszerek
    • Új exFAT illesztőprogram-megvalósítás hozzáadva, alapított a jelenlegi „sdfat” (2.x) kódbázison alapul, amelyet a Samsung fejlesztett ki Android okostelefonjaihoz. A kernelhez korábban hozzáadott illesztőprogram a régi Samsung kódon (1.2.9-es verzió) alapult, és teljesítményben körülbelül 10%-kal elmaradt az új illesztőprogramtól. Emlékezzünk vissza, hogy az exFAT támogatás hozzáadása a kernelhez a Microsoft után vált lehetségessé közzétett nyilvános specifikációkat, és az exFAT szabadalmakat jogdíjmentesen elérhetővé tette Linuxon.
    • A Btrfs egy új ioctl() parancsot valósít meg - BTRFS_IOC_SNAP_DESTROY_V2, amely lehetővé teszi egy alszakasz törlését az azonosítója alapján. A beépített kiterjedések klónozásának teljes körű támogatása biztosított. Bővült az újraelosztási műveletek törlési pontjainak száma, ami csökkentette a hosszú várakozási időt az „egyenleg törlése” parancs végrehajtása során. Felgyorsult a mértékig tartó visszahivatkozások meghatározása (például a tesztszkript végrehajtási ideje egy óráról több percre csökkent). Hozzáadtuk a fájl kiterjedésének csatolását a fa minden inódjához. Az alpartíciókra való íráskor és a NOCOW kizárásakor használt blokkolási sémát újratervezték. Az fsync végrehajtásának jobb hatékonysága a tartományokban.
    • Az XFS továbbfejlesztette a metaadat-ellenőrzést és az aktív partíciók fsck-jét. Javasoltak egy könyvtárat a btree struktúrák újjáépítésére, amelyet a jövőben az xfs_repair átdolgozására és a partíció leválasztása nélküli helyreállítási lehetőség megvalósítására használnak.
    • A CIFS-hez hozzáadták a swap partíció SMB3 tárolókban való elhelyezésének kísérleti támogatását. Az SMB3.1.1 specifikációban meghatározott POSIX kiterjesztések a readdir számára. Jobb írási teljesítmény 64 KB-os oldalakhoz, ha a cache=strict mód engedélyezve van, és 2.1-es vagy újabb protokollverziókat használnak.
    • Az FS EXT4 átkerült a bmap és az iopoll az iomap használatára.
    • Az F2FS opcionálisan támogatja az adattömörítést a zstd algoritmus használatával. Alapértelmezés szerint az LZ4 algoritmust használja a tömörítés. Támogatás hozzáadva a "chattr -c commit" parancshoz. A szerelési idő kijelzése biztosított. Az ioctl F2FS_IOC_GET_COMPRESS_BLOCKS hozzáadva a tömörített blokkok számával kapcsolatos információk lekéréséhez. Hozzáadott tömörítési adatkimenet a statx-on keresztül.
    • A Ceph fájlrendszer hozzáadta a fájllétrehozási és -törlési műveletek helyi végrehajtásának (leválasztásának) lehetőségét, anélkül, hogy megvárná a kiszolgáló válaszát (aszinkron üzemmódban működik). A változtatás például jelentősen javíthatja a teljesítményt az rsync segédprogram futtatásakor.
    • Az OVERLAYFS-hez hozzáadták a virtiofs felső szintű fájlrendszerként való használatának lehetőségét.
    • Újraírva útvonal bejárási kódja a VFS-ben, a szimbolikus hivatkozáselemző kód átdolgozásra került, és a csatolási pont bejárása egységes lett.
    • Az scsi alrendszerben a jogosulatlan felhasználóknak megengedett ZBC parancsok végrehajtása.
    • A dm_writecache fájlban végrehajtva a gyorsítótár fokozatos törlésének lehetősége a max_age paraméter alapján, amely beállítja a blokk maximális élettartamát.
    • A dm_integrityben tette hozzá az "eldobás" művelet támogatása.
    • A null_blk tette hozzá hibahelyettesítés támogatása a tesztelés közbeni hibák szimulálására.
    • Hozzáadva udev értesítések küldése a blokkeszköz méretének változásairól.
  • Hálózati alrendszer
    • Netfilter mellékelve változások, jelentősen felgyorsítva a nagy egyezési listák (nftables készletek) feldolgozását, amelyek alhálózatok, hálózati portok, protokollok és MAC-címek kombinációjának ellenőrzését igénylik.
      Optimalizálások bemutatott az nft_set_pipapo (PIle PAcket POLICIES) modulba, amely megoldja a csomag tartalmának a szűrési szabályokban használt tetszőleges mezőállapot-tartományokkal való egyeztetésének problémáját, például IP- és hálózati porttartományokkal (nft_set_rbtree és nft_set_hash manipulálja az intervallum egyeztetést és az értékek közvetlen tükrözését ). A pipapo 256 bites AVX2 utasításokkal vektorizált verziója AMD Epyc 7402 processzorral rendelkező rendszeren 420%-os teljesítménynövekedést mutatott 30 ezer rekord elemzésekor, beleértve a port-protokoll kombinációkat is. Az 1000 rekord elemzésekor az alhálózat és a portszám kombinációjának összehasonlítása esetén a növekedés 87% volt IPv4 és 128% IPv6 esetében.

    • Hozzáadva bareudp modul, amely lehetővé teszi különböző L3 protokollok, például MPLS, IP és NSH beágyazását egy UDP alagútba.
    • Folytatódik az MPTCP (MultiPath TCP) komponensek integrációja, a TCP-kapcsolat működésének megszervezésére szolgáló TCP protokoll kiterjesztése, a csomagok egyidejű, több útvonalon, különböző, különböző IP-címekhez kötött hálózati interfészeken keresztül történő kézbesítésével.
    • Hozzáadva hardveres gyorsítási mechanizmusok támogatása az Ethernet keretek 802.11-be (Wi-Fi) való beágyazásához.
    • Amikor egy eszközt az egyik hálózati névtérből a másikba helyez át, a rendszer módosítja a hozzáférési jogokat és a megfelelő fájlok tulajdonjogát a sysf-ben.
    • Hozzáadtuk a SO_BINDTODEVICE jelző használatának lehetőségét a nem root felhasználók számára.
    • A javítások harmadik részét elfogadtuk, az ethtool eszközkészletet ioctl()-ről a netlink interfész használatára konvertálta. Az új felület megkönnyíti a bővítmények hozzáadását, javítja a hibakezelést, lehetővé teszi az állapotváltozásokról szóló értesítések küldését, leegyszerűsíti a kernel és a felhasználói terület közötti interakciót, valamint csökkenti a szinkronizálandó nevesített listák számát.
    • Hozzáadtuk a speciális hardveres gyorsítók használatát a kapcsolatkövetési műveletek végrehajtásához.
    • Netfilterben - tette hozzá egy hook a kimenő csomagok osztályozóinak összekapcsolására (kilépés), amely kiegészítette a korábban meglévő bejövő csomagok (ingress) hook-ot.
  • Virtualizáció és biztonság
    • A mutató hitelesítés hardveres megvalósítása (Mutató hitelesítés), amely speciális ARM64 CPU utasításokat használ a támadások elleni védelemre return-oriented programing (ROP) technikák segítségével, amelyek során a támadó nem próbálja meg elhelyezni a kódját a memóriában, hanem a betöltött könyvtárakban már elérhető gépi utasítások darabjain dolgozik, befejezve vezérlővisszaadási utasítással. A biztonság a digitális aláírás használatán múlik a visszaküldési címek kernelszinten történő ellenőrzésére. Az aláírást magának a mutatónak a fel nem használt felső bitjei tárolják. A szoftveres implementációkkal ellentétben a digitális aláírások létrehozása és ellenőrzése speciális CPU utasítások segítségével történik.
    • Hozzáadva az a képesség, hogy megvédje a memóriaterületet az írástól a userfaultfd() rendszerhívás segítségével, amelyet a felhasználói térben lévő laphibák (el nem osztott memórialapokhoz való hozzáférés) kezelésére terveztek. Az ötlet az, hogy a userfaultfd() segítségével észleljük az írásvédettként megjelölt oldalak hozzáférési megsértését, és hívjunk egy kezelőt, amely válaszolni tud az ilyen írási kísérletekre (például a futó folyamatok élő pillanatképeinek létrehozása során bekövetkező változások kezelésére, állapot rögzítés, amikor memória kiírja a lemezre, megosztott memória megvalósítása, a memória változásainak követése). Funkcionalitás egyenértékű használja az mprotect()-et a SIGSEGV jelkezelővel együtt, de észrevehetően gyorsabban működik.
    • A SELinux megszüntette a "checkreqprot" paramétert, amely lehetővé teszi a memóriavédelmi ellenőrzések letiltását a szabályok feldolgozásakor (lehetővé teszi a végrehajtható memóriaterületek használatát, függetlenül a szabályokban meghatározott szabályoktól). A Kernfs szimbolikus hivatkozások örökölhetik szülőkönyvtáruk kontextusát.
    • A szerkezet bekapcsolva modul KRSI, amely lehetővé teszi a BPF programok csatolását a kernel bármely LSM hookjához. A változás lehetővé teszi LSM modulok (Linux Security Module) létrehozását BPF programok formájában az auditálási problémák és a kötelező hozzáférés-szabályozás megoldására.
    • Végrehajtott Optimalizálja a /dev/random teljesítményét a CRNG értékek kötegelésével, ahelyett, hogy egyenként hívná meg az RNG utasításokat. A getrandom és /dev/random jobb teljesítménye RNG utasításokat biztosító ARM64 rendszereken.
    • Elliptikus görbe megvalósítása Curve25519 lecserélték opcióért a könyvtárból HACL, amelyekre adott a formális megbízhatóság igazolásának matematikai bizonyítása.
    • Hozzáadva Mechanizmus a szabad memórialapokról való tájékoztatáshoz. Ezzel a mechanizmussal a vendégrendszerek információkat továbbíthatnak a már nem használt oldalakról a gazdagépnek, és a gazdagép visszaveheti az oldaladatokat.
    • vfio/pci-ben tette hozzá az SR-IOV (Single-Root I/O Virtualization) támogatása.
  • Memória- és rendszerszolgáltatások
    • 80-100 karakter megnövekedett a forrásszöveg maximális sorhosszának korlátozása. Ugyanakkor a fejlesztőknek továbbra is azt javasolják, hogy soronként 80 karakteren belül maradjanak, de ez már nem szigorú határ. Ezenkívül a sorméret-korlát túllépése csak akkor eredményez összeállítási figyelmeztetést, ha a checkpatch a '--strict' opcióval fut. A változtatás lehetővé teszi, hogy ne vonják el a fejlesztők figyelmét manipuláció szóközökkel és nyugodtabban a kód igazításánál, valamint megakadályozza túlzott vonaltörés, zavaró kódértés és keresés.
    • Hozzáadva támogatja az EFI vegyes rendszerindítási módot, amely lehetővé teszi egy 64 bites kernel betöltését 32 bites CPU-n futó 64 bites firmware-ről speciális rendszerbetöltő használata nélkül.
    • Beleértve rendszer az osztott zárak azonosítására és hibakeresésére (“osztott zár"), amely akkor fordul elő, amikor a memóriában lévő nem igazított adatokhoz fér hozzá, mivel egy atomi utasítás végrehajtásakor az adatok kereszteznek két CPU gyorsítótár vonalat. Az ilyen blokkolások jelentős teljesítményhiányt eredményeznek (1000 ciklussal lassabb, mint egy atomi művelet olyan adatokon, amelyek egy gyorsítótár-sorba esnek). A "split_lock_detect" rendszerindítási paramétertől függően a kernel menet közben képes észlelni az ilyen zárolásokat, és figyelmeztetéseket küldeni vagy SIGBUS jelet küldeni a zárolást okozó alkalmazásnak.
    • A feladatütemező biztosítja a hőmérséklet-érzékelők nyomon követését (Hőnyomás) és a feladatok elhelyezésénél a túlmelegedés figyelembevételével valósult meg. A megadott statisztika segítségével a hőszabályzó beállíthatja a maximális CPU frekvenciát túlmelegedés esetén, és a feladatütemező most figyelembe veszi a számítási teljesítmény csökkenését a frekvencia ilyen csökkenése miatt a feladatok ütemezésekor (korábban az ütemező reagált a változásokra gyakorisággal, bizonyos késéssel, egy ideig döntéseket hozva a rendelkezésre álló számítási erőforrásokkal kapcsolatos túlzott feltételezések alapján).
    • A feladatütemező tartalmazza invariáns mutatók terheléskövetés, amely lehetővé teszi a terhelés helyes becslését, függetlenül az aktuális CPU működési frekvenciától. A változás lehetővé teszi a feladatok viselkedésének pontosabb előrejelzését a feszültség és a CPU frekvencia dinamikus változásai mellett. Például egy olyan feladat, amely a CPU-erőforrások 1/3-át 1000 MHz-en fogyasztja, az erőforrások 2/3-át fogja igénybe venni, ha a frekvencia 500 MHz-re csökken, ami korábban azt a téves feltételezést keltette, hogy teljes kapacitással fut (azaz megjelentek a feladatok csak a frekvencia csökkentésével nagyobb az ütemező számára, ami helytelen döntések meghozatalához vezetett a schedutil cpufreq kormányzóban).
    • Az Intel P-state illesztőprogramja, amely a teljesítménymódok kiválasztásáért felelős, használatba került scheduleutil.
    • Megvalósult a BPF alrendszer használatának lehetősége, amikor a kernel valós időben fut (PREEMPT_RT). Korábban, amikor a PREEMPT_RT engedélyezve volt, a BPF-et le kellett tiltani.
    • Egy új típusú BPF program került hozzáadásra - BPF_MODIFY_RETURN, amely a kernelben lévő függvényhez csatolható, és megváltoztathatja a függvény által visszaadott értéket.
    • Hozzáadva alkalom A clone3() rendszerhívás használata a szülő cgrouptól eltérő folyamat létrehozására a cgroupban, lehetővé téve a szülőfolyamat számára, hogy korlátozásokat alkalmazzon, és azonnal engedélyezze az elszámolást egy új folyamat vagy szál létrehozása után. Például egy szolgáltatásmenedzser közvetlenül hozzárendelhet új szolgáltatásokat különálló cgroupokhoz, és az új folyamatok, ha „lefagyott” cgroupokba kerülnek, azonnal leállnak.
    • a Kbuildben tette hozzá az "LLVM=1" környezeti változó támogatása a Clang/LLVM eszközkészletre váltáshoz a kernel felépítése során. A binutils verzió követelményei megemelkedtek (2.23).
    • A /sys/kernel/debug/kunit/ szakasz hozzáadásra került a debugfs-hoz a kunit tesztek eredményeivel.
    • Hozzáadott pm_debug_messages kernel rendszerindítási paraméter (a /sys/power/pm_debug_messages analógja), amely lehetővé teszi az energiagazdálkodási rendszer működésével kapcsolatos hibakeresési információk kiadását (hasznos hibernált és készenléti móddal kapcsolatos problémák hibakeresésekor).
    • Az aszinkron I/O interfészhez io_uring támogatás hozzáadva splice() и atomi puffer kiválasztása.
    • Továbbfejlesztett cgroup profilalkotás a perf eszközkészlet segítségével. Korábban a perf csak egy adott cgroupban tudott feladatokat profilozni, és nem tudta kideríteni, hogy az aktuális minta melyik ccsoporthoz tartozik. A perf mostantól minden egyes mintához lekéri a cgroup információkat, lehetővé téve egynél több cgroup profilozását és a rendezést
      cgroup a jelentésekben.

    • A cgroupfs, a cgroupok kezelésére szolgáló pszeudo-FS, kiegészítette a kiterjesztett attribútumok (xattrs) támogatását, amellyel például további információkat hagyhat a kezelőknek a felhasználói térben.
    • A cgroup memóriavezérlőben - tette hozzávalamint a „memory.low” érték rekurzív védelmének támogatása, amely szabályozza a csoporttagok számára biztosított RAM minimális mennyiségét. Ha egy cgroup hierarchiát a "memory_recursiveprot" opcióval csatlakoztat, az alsó csomópontokhoz beállított "memory.low" értéke automatikusan elosztásra kerül az összes gyermekcsomópont között.
    • Hozzáadva Uacce (Unified/User-space-access-inded Accelerator Framework) keretrendszer a virtuális címek (SVA, Shared Virtual Addressing) megosztására a CPU és a perifériás eszközök között, lehetővé téve a hardveres gyorsítóknak, hogy hozzáférjenek a fő CPU adatstruktúráihoz.
  • Hardver architektúrák
    • Az ARM architektúra esetében a memória gyors lekérésének lehetősége van megvalósítva.
    • A RISC-V architektúrához hozzáadták a CPU-k működés közbeni csatlakoztatását és eltávolítását (CPU hotplug). A 32 bites RISC-V esetében az eBPF JIT kerül megvalósításra.
    • Eltávolították a 32 bites ARM-rendszerek KVM vendégkörnyezetek futtatásának lehetőségét.
    • Eltávolítottuk az s390 architektúra "ál" NUMA implementációját, amelynél nem találtak olyan használati eseteket, amelyek teljesítményjavítást eredményeztek volna.
    • Az ARM64 esetében az AMU (Activity Monitors Unit) bővítmény támogatása, amelyet az ARMv8.4 definiált, és teljesítményszámlálókat biztosít, amelyek a frekvenciaskálázási korrekciós tényezők kiszámítására szolgálnak a feladatütemezőben.
  • Оборудование
    • Hozzáadva a virtio specifikációinak megfelelő adatcsere-csatornát használó vDPA-eszközök támogatása. A vDPA-eszközök lehetnek fizikailag csatlakoztatott berendezések vagy szoftveremulált virtuális eszközök.
    • A GPIO alrendszerben megjelent egy új ioctl() parancs a változások figyeléséhez, amely lehetővé teszi a folyamat tájékoztatását bármely GPIO-sor állapotának változásairól. Példaként az új parancs használatára javasolt gpio-watch segédprogram.
    • Az i915 DRM illesztőprogramban Intel videokártyákhoz beleértve alapértelmezett támogatás a Tigerlake („Gen12”) chipekhez, és hozzáadott kezdeti támogatás az OLED háttérvilágítás vezérléséhez. Jobb támogatás az Ice Lake, Elkhart Lake, Baytrail és Haswell chipekhez.
    • Az amdgpu illesztőprogramban tette hozzá firmware betöltésének képessége az USBC chipbe az ASIC számára. Továbbfejlesztett támogatás az AMD Ryzen 4000 "Renoir" chipekhez. Most már támogatott az OLED panelek vezérlése. A firmware állapotának megjelenítése a debugf-ban.
    • A VMware virtualizációs rendszerek vmwgfx DRM illesztőprogramjához hozzáadták az OpenGL 4 vendégrendszerekben való használatának lehetőségét (korábban az OpenGL 3.3 támogatott).
    • Új DRM illesztőprogram tids hozzáadva a TI Keystone platform megjelenítő rendszeréhez.
    • Hozzáadott illesztőprogramok az LCD-panelekhez: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech F101RD01II,350H54004RDXNUMX.
    • Az energiagazdálkodási rendszerhez tette hozzá az Atom-alapú Intel Jasper Lake (JSL) platform támogatása.
    • Hozzáadott támogatás a Rockchip RK3399 alapú Pinebook Pro laptophoz, Pine64 PineTab táblagéphez és okostelefonhoz pinephone az Allwinner A64 alapján.
    • Új audiokodekek és chipek támogatása:
      Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc.

    • Hozzáadott támogatás ARM kártyákhoz és platformokhoz Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron „sl28”, 11 i.MX6 TechNexion Pico kártyaopció, három új Toradex Colibri opció, Samsung S7710 Galaxy STcover 2 alapú -Ericsson u8500, DH Electronics DHCOM SoM és PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.

Forrás: opennet.ru

Hozzászólás