Két hónap fejlesztés után Linus Torvalds bemutatta a Linux 5.15 kernel kiadását. A legfontosabb változások között szerepel: új NTFS illesztőprogram írási támogatással, ksmbd modul egy SMB-szerver megvalósítással, DAMON alrendszer a memóriahozzáférés nyomon követésére, valós idejű üzemmód blokkolási primitívjai, fs-verity támogatás a Btrfs-ben, process_mrelease rendszerhívás a memóriahiányra reagáló rendszerek számára, távoli hitelesítődm-ima modul.
Az új verzióba 13499 javítást fogadtak el 1888 fejlesztőtől, a patch mérete 42 MB (a változások 10895 fájt érintettek, 632522 sor kódot adtak hozzá, 299966 sort eltávolítottak). A 5.15-ös verzióban bemutatott változások körülbelül 45%-a kapcsolódik az eszközillesztőkhöz, körülbelül 14%-a a hardverarchitektúrákhoz kapcsolódó kód frissítése, 14%-a a hálózati veremhez, 6%-a a fájlrendszerekhez és 3%-a a kernel belső alrendszereihez.
Főbb újítások:
- Lemezszubszisztéma, bemenet/kipontozás és fájlrendszerek
- A kernelben új NTFS fájlrendszer-megvalósítás került elfogadásra, amelyet a Paragon Software nyitott meg. Az új illesztőprogram írásmódban is működhet és támogatja az NTFS 3.1 aktuális verziójának minden lehetőségét, beleértve a fájlok kiterjesztett attribútumait, a hozzáférési listákat (ACL), adatkompressziós üzemmódot, hatékony kezelést a fájlokban lévő üres területekkel (sparse) és a naplóváltozások újbóli alkalmazását a hibák utáni integritás helyreállításához.
- A Btrfs fájlrendszerben megvalósították az fs-verity mechanizmus támogatását, amely egyes fájlok átlátható integritás- és hitelesítési ellenőrzésére szolgál a fájlokhoz társított kriptográfiai hashek vagy kulcsok alapján, amelyeket a metadaták területén tárolnak. Korábban az fs-verity csak az Ext4 és F2fs fájlrendszerek számára volt elérhető.
A Btrfs-ben szintén hozzáadták a felhasználói azonosítók mappálásának támogatását a csatlakoztatott fájlrendszerekhez (korábban a FAT, ext4 és XFS fájlrendszerekhez támogatták). Ez a funkció lehetővé teszi meghatározott felhasználói fájlok összepárosítását egy csatolt idegen partíción más felhasználókkal a jelenlegi rendszerben.
A Btrfs változásai között szerepel: a kulcsok indexbe való hozzáadásának felgyorsítása a fájlok létrehozásának teljesítményéért; raid0 működésének lehetősége egyetlen eszközzel, valamint raid10 működése két eszközzel (például a tömb újrakonfigurálása során); a „rescue=ibadroots” opció, amely lehetővé teszi a hibás extent fa figyelmen kívül hagyását; a „send” művelet felgyorsítása; a blokkolás konfliktusok csökkentése átnevezési műveletek során; 4K szektorok használatának lehetősége 64K memóriaoldalméretű rendszereken.
- Az XFS stabilizálta a fájlrendszer 2038 utáni dátumokkal való használatának lehetőségét. Megvalósult a késleltetett inode deaktíválásának mechanizmusa, valamint a fájl attribútumok késleltetett beállítása és eltávolítása. A problémák elkerülése érdekében megszüntették azt a lehetőséget, hogy a már csatolt partíciók számára letiltsák a lemez kvótákat (a kvóták kényszerített letiltása lehetséges, de a kapcsolódó számítás folytatódik, ezért a teljes letiltáshoz újra kell csatolni).
- Az EXT4-ben javították a delalloc pufferek írási teljesítményét és a árva (orphan) fájlok feldolgozását, amelyek továbbra is léteznek, mert nyitva maradtak, de elvesztették a könyvtárhoz való kötődésüket. A discard műveletek feldolgozását a jbd2 kthread szálból kiemelték, hogy elkerüljék a metainformációk zárolási ütközéseit.
- Az F2FS-ben hozzáadták a „discard_unit=block|segment|section” opciót, amely a discard műveletek (a már nem tárolandó fizikai blokkok címkézése) összekapcsolására szolgál a blokk, szektor, szegmens vagy szakasz igazításával. Hozzáadták a késleltetések változásainak nyomon követését a be- és kimenetre.
- Az EROFS (Extendable Read-Only File System) fájlrendszerében hozzáadták a közvetlen be- és kimenetű támogatást a tömörítés nélkül tárolt fájlok számára, valamint a fiemap támogatását.
- Az OverlayFS-ben megvalósították a csatolási zászlók, például az „immutable”, „append-only”, „sync” és „noatime” helyes feldolgozását.
- Az NFS-ben javították azoknak a helyzeteknek a kezelését, amikor az NFS-szerver már nem válaszol a kérésekre. Lehetővé vált a már használt, de másik hálózati címről elérhető csatolás. a szerver, de elérhető egy másik hálózati címen.
- Megkezdődött a FSCACHE alrendszer újraírásának előkészítése.
- Hozzáadták az EFI partíciók támogatását, amelyeknél a GPT táblák szokatlan elhelyezése van.
- A fanotify mechanizmusában megvalósult egy új FLAG, a FAN_REPORT_PIDFD, amely lehetővé teszi a PIDFD megadását a visszaadott metaadatok között. A PIDFD segít a PID újbóli felhasználásával kapcsolatos helyzetek kezelésében, pontosabb azonosítást biztosítva a megfigyelt fájlokhoz hozzáférő folyamatok számára (a PIDFD egy konkrét folyamathoz kapcsolódik és nem változik, míg a PID más folyamatokhoz is társítható, ha a jelenlegi folyamat befejeződik).
- A move_mount() rendszerhíváshoz hozzáadták a lehetőséget, hogy meglévő megosztott csoportokba új mappahelyeket lehessen hozzáadni, ezzel megoldva a folyamatok állapotának megőrzésével és helyreállításával kapcsolatos problémákat a CRIU eszközkészletében, amikor több, elszigetelt konténerekben megosztott mount namespace van.
- Védelmet vezettek be a rejtett versenyhelyzetek ellen, amelyek potenciálisan fájlok sérüléséhez vezethettek, ha a cache-ből olvasás történt a fájl üres helyeinek feldolgozása közben.
- Megszüntették a kötelező (mandatory) fájlzárak támogatását, amelyeket a fájlt módosító rendszerhívások révén valósítottak meg. A lehetséges versenyhelyzetek miatt ezek a zárak megbízhatatlannak bizonyultak, és évek óta elavultnak számítanak.
- Eltávolították a LightNVM alrendszert, amely lehetővé tette a közvetlen hozzáférést az SSD tárolókhoz, megkerülve az emulációs réteget. A LightNVM értelmetlenné vált az NVMe szabványok megjelenésével, amelyek zónázást (ZNS, Zoned Namespace) biztosítanak.
- Memória és rendszerszolgáltatások
- Megvalósították a DAMON (Data Access MONitor) alrendszert, amely lehetővé teszi az operatív memóriához való hozzáférést érintő aktivitás nyomon követését a kiválasztott felhasználói térben futó folyamat kapcsolódásával. Az alrendszer elemzi, hogy a folyamat mely memóriaterületekhez nyúlt a működése során, és mely memóriaterületek maradtak kihasználatlanok. A DAMON jellemzői közé tartozik az alacsony CPU-terhelés, a kis memóriafogyasztás, a magas pontosság és az állandó, mérettől független költségek. Az alrendszer használható a memória kezelésének optimalizálására a kernelen, valamint felhasználói térbeli eszközök számára is, hogy megértsék, mit csinál a folyamat és optimalizálják a memóriafelhasználást, például a felesleges memória felszabadításával a rendszer számára.
- Megvalósítottuk a process_mrelease rendszerhívást, amely lehetővé teszi a folyamat memóriájának felszabadításának gyorsítását a befejeződés előtt. Normális körülmények között az erőforrások felszabadítása és a folyamat befejezése nem azonnali, és különböző okokból késlekedhet, ami megnehezíti a felhasználói térben működő memóriakezelő rendszer early response rendszereit, mint például az oomd (a systemd-ben) és a lmkd (Android-on használják). A process_mrelease hívás segítségével ezek a rendszerek kiszámíthatóbban képesek kezdeményezni a memória visszaadását a kényszeresen befejezett folyamatokból.
- A PREEMPT_RT kernel ágból átvittük a mutex, ww_mutex, rw_semaphore, spinlock és rwlock zárolási primitívek változatait, melyek az RT-Mutex alrendszerre épülnek. A SLUB slab allokátorba olyan módosításokat adtunk hozzá, amelyek javítják a PREEMPT_RT üzemmódbeli működést és csökkentik a megszakítások hatását.
- A cgrouphoz hozzáadva a SCHED_IDLE ütemező attribútum támogatása, amely lehetővé teszi, hogy ezt a jelzőt az adott cgroup összes folyamata megkapja. Ezért ezek a folyamatok csak akkor fognak elindulni, amikor a rendszerben nincsenek más, végrehajtásra váró feladatok. Ellentétben azzal, hogy az SCHED_IDLE attribútumot külön-külön kellene beállítani minden egyes folyamatra, az SCHED_IDLE cgroup-ra történő kötésekor a végrehajtásra való kiválasztáskor figyelembe veszi a feladatok relatív súlyát a csoporton belül.
- A cgroup memóriafogyasztás nyilvántartásához hozzáadva bővítettük a kernel további adatstruktúráinak nyomon követésének lehetőségével, beleértve a poll-ozáshoz, jelzések kezeléséhez és névtérhez létrehozottakat.
- Hozzáadva az aszimmetrikus feladatkiosztás támogatása a processzormagokhoz való kötés során olyan architektúrákon, ahol egyes CPU-k akár 32 bites feladatok végrehajtását is lehetővé teszik, míg mások csak 64 bites üzemmódban működnek (például ARM). Az új üzemmódban a 32 bites feladatok végrehajtásának ütemezésekor csak azokat a CPU-kat vesszük figyelembe, amelyek támogatják a 32 bites feladatokat.
- Az io_uring aszinkron I/O interfészében támogatást kapott a fájlok közvetlen megnyitása a fixed-file index táblában, fájlleíró használata nélkül, ami lehetővé teszi bizonyos típusú műveletek jelentős felgyorsítását, de ellentétben áll a Unix hagyományos fájlleírók használatának folyamatával a fájlok megnyitásához.
Az io_uring a BIO (Block I/O Layer) alrendszerhez új újrahasznosítást lehetővé tevő mechanizmust valósított meg, amely csökkenti a belső memória kezelés költségeit és körülbelül 10%-kal növeli a másodpercenként feldolgozott I/O műveletek számát. Az io_uring-höz további támogatást adtak a mkdirat(), symlinkat() és linkat() rendszerhívásokhoz is.
- A BPF-programok számára lehetővé vált az időzítő események kérése és feldolgozása. Hozzáadták az iterátort az UNIX-socketekhez, valamint lehetőség nyílt a socketek opcióinak megszerzésére és beállítására a setsockopt segítségével. A BTF dumper a típusos adatok támogatásával bővült.
- NUMA-rendszereken, melyek különböző teljesítményű memória típusokat használnak, a szabad memória kimerülése esetén bevezették a kiszorított memóriaoldalak áthelyezését a dinamikus memóriából (DRAM) a lassabb állandó memóriába (Persistent Memory) ahelyett, hogy ezeket az oldalakat törölnék. Tesztelések kimutatták, hogy ez a taktika általában javítja a teljesítményt az ilyen rendszereken. A NUMA esetében emellett lehetőség nyílt memóriablokkok kiosztására a folyamat számára a kiválasztott NUMA csomópontok halmazából.
- Az ARC architektúrához három- és négy szintű memóriaoldal táblák támogatását valósították meg, ami később lehetővé teszi a 64 bites ARC processzorok támogatását.
- Az s390 architektúrához lehetővé vált a KFENCE mechanizmus alkalmazása a memóriahibák észlelésére, valamint a KCSAN versenyállapot-észlelők támogatásának hozzáadása.
- Hozzáadták a printk() által kibocsátott üzenetlisták indexelésének támogatását, ami lehetővé teszi, hogy egyszerre kinyerjük az összes ilyen üzenetet, és nyomon kövessük a felhasználói térben bekövetkező változásokat.
- Az mmap() esetében megszüntették a VM_DENYWRITE opció támogatását, és a kernel kódja megszabadult a MAP_DENYWRITE üzemmód használatától, ami csökkentette az ETXTBSY hibával történő fájlba írás blokkolásának eseteit.
- A nyomozó alrendszerhez új ellenőrzési típus, az «Eseményprotokollok» került hozzáadásra, amely a meglévő nyomozási eseményekhez csatolható, megadva a saját kimeneti formátumát.
- A mag Clang fordítóval történő összeállításánál mostantól a beépített assembler az LLVM projektből van alapértelmezettként aktiválva.
- A magból a fordítói figyelmeztetések eltávolítására irányuló projekt keretében kísérletet folytattak a «-Werror» mód alapértelmezett aktiválására, amely esetén a fordítói figyelmeztetéseket hibaként kezelik. Az 5.15-ös kiadás előkészítése során Linus csak a figyelmeztetések nélküli változtatásokat fogadta el, és aktiválta a «-Werror» opciót, de később egyetértett azzal, hogy ez az intézkedés idő előtt történt, és elhalasztotta a «-Werror» alapértelmezett aktiválását. A «-Werror» opció a fordítás során a WERROR paraméterrel kezelhető, amely alapértelmezetten COMPILE_TEST értékre van állítva, azaz csak tesztfordítások során aktiválódik.
- Virtualizáció és biztonság
- A Device Mapper (DM) új dm-ima kezelőt kapott, amely az IMA (Integrity Measurement Architecture) alrendszeren alapuló távoli hitelesítési mechanizmust valósít meg, lehetővé téve egy külső szolgáltatás számára, hogy ellenőrizze a kernel alrendszereinek állapotát, ezáltal biztosítva azok hitelességét. A gyakorlatban a dm-ima segítségével a Device Mapper használatával olyan tárolók hozhatók létre, amelyek külső felhőalapú rendszerekhez kapcsolódnak, ahol az IMA ellenőrzi a DM cél konfigurációjának hitelességét.
- A prctl() új PR_SPEC_L1D_FLUSH opciót valósított meg, amely be- vagy kikapcsolása esetén a kernel minden egyes kontextusváltáskor törli az első szintű (L1D) cache tartalmát. Ez a mód lehetővé teszi a legfontosabb folyamatok számára, hogy további védelmet kapjanak a mellékcsatornás támadásokkal szemben, amelyek célja a cache-ben rekedt adatok azonosítása, amelyek a CPU spekulatív utasítás-végrehajtásából eredő sebezhetőségek miatt kerültek bele. A PR_SPEC_L1D_FLUSH aktiválásának (amely alapértelmezés szerint ki van kapcsolva) ára a teljesítmény jelentős csökkenése.
- Megvalósult a kernellel való fordítás lehetősége a GCC »-fzero-call-used-regs=used-gpr« kapcsolóval, amely biztosítja az összes regiszter nullázását, mielőtt a vezérlés visszatér a függvényből. A megadott opció segít megvédeni a függvényekből származó információk szivárgását és 20%-kal csökkenti a ROP-gadgetek (Return-Oriented Programming) létrehozásához alkalmas blokkok számát az exploitokban.
- Megvalósult az ARM64 architektúrájú kernelfordítás lehetősége ügyfél formájában a Hyper-V hypervisor számára.
- Javasolt egy új keretrendszer a meghajtók fejlesztéséhez, a »VDUSE«, amely lehetővé teszi virtuális blokkeszközök végrehajtását a felhasználói térben és a Virtio alkalmazását a vendég rendszerekhez való hozzáférés szállítójaként.
- Hozzáadtuk a Virtio-meghajtót az I2C buszhoz, amely lehetővé teszi az I2C vezérlők emulálását paravirtualizációs módban különböző backendek használatával.
- Hozzáadtuk a gpio-virtio Virtio-meghajtót, amely lehetővé teszi a vendég rendszerek számára, hogy hozzáférjenek a gazda rendszer által biztosított GPIO vonalakhoz.
- Megvalósítva a memóriaoldalak hozzáférésének korlátozása az eszközmeghajtók számára, támogatva a DMA-t olyan rendszereken, ahol nincs I/O MMU (memóriakezelő egység).
- A KVM hypervisorban megvalósult a statisztikák megjelenítése lineáris és logaritmikus hisztogramok formájában.
- Hálózati alrendszer
- A kernelbe hozzáadtuk a ksmbd modult, amely egy SMB3 protokollt használó fájl szerver megvalósítását tartalmazza. A modul kiegészíti a kernelben korábban elérhető SMB kliens megvalósítást, és azzal ellentétben, hogy a felhasználói térben működő SMB-szerver, hatékonyabb teljesítmény, memóriafogyasztás és integráció szempontjából a kernel kiterjesztett lehetőségeivel. A ksmbd egy magasan teljesítményű és beágyazott eszközökön történő alkalmazásra kész bővítményként jelenik meg a Samba számára, amely szükség esetén integrálható a Samba eszközeivel és könyvtáraival. A ksmbd lehetőségei közül kiemelendő a helyi rendszereken a megosztott fájlok gyorsítótárazási technológiájának (SMB leasing) javított támogatása, amely jelentősen csökkenti a forgalmat. A későbbiekben RDMA („smbdirect”) támogatását és a protokoll kiterjesztéseit tervezik, amelyek a titkosítás megerősítésével és digitális aláírásokkal kapcsolatosak.
- A CIFS kliensben megszűnt az NTLM és a kevésbé biztonságos azonosítási algoritmusok támogatása, amelyek a DES algoritmuson alapulnak és az SMB1 protokollban használatosak.
- A VLAN hálózati hídkivitelezésében megvalósult a multicast támogatás.
- A hálózati interfészek aggregálásához használt bonding meghajtóba bevezették az XDP (eXpress Data Path) alrendszer támogatását, amely lehetővé teszi a hálózati csomagok manipulálását a Linux kernel hálózati veremének feldolgozása előtt.
- A wireless mac80211 veremében megvalósult a 6 GHz STA (Special Temporary Authorization) támogatása az LPI, SP és VLP üzemmódokban, valamint lehetőség nyílt külön TWT (Target Wake Time) beállítására hozzáférési pont módban.
- Bevezetésre került az MCTP (Management Component Transport Protocol) protokoll támogatása, amely a kezelővezérlők és a hozzájuk kapcsolódó eszközök (hosprocesszorok, perifériák stb.) közötti interakcióra szolgál.
- Folyamatosan integrálják az MPTCP (MultiPath TCP) protokollt a kernelbe, amely a TCP kapcsolatok működését több útvonalon, különböző hálózati interfészeken keresztül valósítja meg, különböző IP-címekhez kötve. Az új verzióban bevezették a fullmesh üzemmódban lévő címek támogatását.
- A netfilterhez hozzáadták a hálózati áramlások feldolgozóit, amelyeket az SRv6 (Segment Routing IPv6) protokollba ágyaztak.
- Hozzáadták a sockmap támogatását az Unix-socketek áramlásához.
- Hardver
- Az amdgpu meghajtóban implementálták a Cyan Skillfish APU (Navi 1x GPU-val felszerelve) támogatását. A Yellow Carp APU esetében videó kodekek támogatását vezették be. Javult az Aldebaran GPU támogatása. Új azonosítók kerültek bevezetésre a Navi 24 „Beige Goby” és RDNA2 GPU alapú kártyák esetén. Felajánlották a virtuális képernyők (VKMS) javított megvalósítását. Megvalósították az AMD Zen 3 chipek hőmérsékletének nyomkövetését.
- Az amdkfd meghajtóban (például a Polaris diszkrét GPU-k esetében) megvalósították a megosztott virtuális memória (SVM, shared virtual memory) menedzsert az HMM (Heterogeneous memory management) alrendszer alapjain, amely lehetővé teszi olyan eszközök használatát, amelyek saját memória kezelés egységgel (MMU, memory management unit) rendelkeznek, amelyek hozzáférhetnek a fő memóriához. Az HMM segítségével közös címterületet lehet létrehozni a GPU és CPU között, ahol a GPU hozzáférhet a folyamat fő memóriájához.
- Az i915 meghajtóban, amely az Intel grafikus kártyákhoz készült, kibővítették a TTM videómemória-kezelő menedzser alkalmazását, és bevezették az energiatakarékos működés lehetőségét a GuC (Graphics micro Controller) alapjain. Elkezdődött az Intel ARC Alchemist grafikus kártya és az Intel Xe-HP GPU támogatásának előkészítése.
- A nouveau meghajtóban megvalósításra került az eDP panelek háttérvilágításának vezérlése a DPCD (DisplayPort Configuration Data) segítségével.
- A msm meghajtóhoz hozzáadva a GPU Adreno 7c Gen 3 és Adreno 680 támogatása.
- Az Apple M1 chiphez megvalósították az IOMMU meghajtót.
- Hozzáadva egy hangmeghajtó az AMD Van Gogh alapú APU rendszerekhez.
- A staging ágba hozzáadva a Realtek R8188EU meghajtó, amely felváltotta a régi rtl8188eu változatot a Realtek RTL8188EU 802.11 b/g/n vezeték nélküli chipekhez.
- A Meta (Facebook) által kifejlesztett PCIe kártyához elfogadva az ocp_pt meghajtó, amely kis méretű atomórákat és GNSS vevőket valósít meg, amelyek elkülönített időszinkronizálásra használhatók. szerverek Pontos időszinkronizálásra.
- Hozzáadva a Sony Xperia 10II (Snapdragon 665), Xiaomi Redmi 2 (Snapdragon MSM8916), Samsung Galaxy S3 (Snapdragon MSM8226), Samsung Gavini/Codina/Kyle okostelefonok támogatása.
- Hozzáadva ARM SoC és NVIDIA Jetson TX2 NX Developer Kit, Sancloud BBE Lite, PicoITX, DRC02, SolidRun SolidSense, SKOV i.MX6, Nitrogen8, Traverse Ten64, GW7902, Microchip SAMA7, Qualcomm Snapdragon SDM636/SM8150, Renesas R-Car H3e-2G/M3e-2G, Marvell CN913x, ASpeed AST2600 (Facebook Cloudripper, Elbert és Fuji szerver alaplapok) támogatása, 4KOpen STiH418-b2264.
- Hozzáadva a Gopher 2b, EDT ETM0350G0DH6/ETMV570G2DHU, LOGIC Technologies LTTD800480070-L6WH-RT, Multi-Innotechnology MI1010AIT-1CP1, Innolux EJ030NA 3.0, ilitek ili9341, E Ink VB3300-KCA, Samsung ATNA33XC20, Samsung DB7430, WideChips WS2401 LCD panelek támogatása.
- Hozzáadva a LiteETH meghajtó Ethernet vezérlők támogatásával, amelyeket a LiteX (FPGA) szoftveres SoC-k használnak.
- Az usb-audio meghajtóhoz hozzáadva a lowlatency lehetőség a minimális késleltetési mód működésének vezérlésére. Ezenkívül hozzáadva a quirk_flags opció az eszközspecifikus beállítások átadására.
Ugyanakkor a Latin-Amerikai Szabad Szoftver Alapítvány bemutatta a teljesen szabad 5.15-ös Linux-libre mag variánsát, amelyet megtisztítottak azoktól az elemekből, amelyek szabad firmware-okat és meghajtókat tartalmaznak, valamint a gyártó által korlátozott felhasználású kódrészekből. Az új kiadásban implementálva lett a log üzenet a tisztítás befejezéséről. Megszüntek a mkspec használata során fellépő csomaggenerálási problémák, és javult a snap csomagok támogatása. El lettek távolítva bizonyos figyelmeztetések, amelyeket a firmware.h fejlécfájl feldolgozása során adtak ki. Engedélyezve lett a figyelmeztetések egyes típusainak kiírása („format-extra-args”, megjegyzések, nem használt függvények és változók) a „-Werror” módban való fordításkor. Hozzá lett adva a gehc-achc meghajtó tisztítása. Frissítve lett a blobok tisztításához használt kód az adreno, btusb, btintel, brcmfmac és aarch64 qcom meghajtókban és alrendszerekben. Megszűnt a prism54 meghajtó tisztítása (eltávolítva) és az rtl8188eu (r8188eu-ra cserélve).
Forrás: opennet.ru
