Po dvou měsících vývoje představil Linus Torvalds vydání jádra Linux 6.18. Mezi nejvýznamnější změny patří: dm-pcache pro diskové cachování v nepřetržité paměti (PMEM), odstranění Bcachefs, online kontrola XFS, ovladače Binder (Android IPC) a Tyr (GPU Mali) napsané v Rustu, možnost vytváření USB ovladačů v Rustu, optimalizace cachování v alokátoru paměti SLUB, adresace prostorů jmen podle souborových popisovačů, zrychlení práce s přepínáním (swap), verifikace BPF programů podle digitálního podpisu, virtualizace Intel CET v KVM, síťový protokol PSP (hybrid TLS a IPsec), podpora IP rozšíření AccECN, optimalizace UDP zásobníku.
Do nové verze bylo zaneseno 15035 oprav od 2217 vývojářů, velikost patche – 45 MB (změny se dotkly 13142 souborů, přidáno bylo 601897 řádků kódu, odstraněno 355006 řádků). V minulém vydání bylo 14334 oprav od 2118 vývojářů, velikost patche – 46 MB. Přibližně 40% všech změn ve verzi 6.18 souvisí s ovladači zařízení, přibližně 16% změn se týká aktualizace kódu specifického pro hardwarové architektury, 12% je spojeno se síťovým zásobníkem, 5% s filesystémy a 3% s interními podsystémy jádra.
Hlavní novinky v jádře 6.18 (1, 2, 3):
- Diskový subsystém, vstup/výstup a souborové systémy
- Do Device Mapperu byl přidán zpracovatel dm-pcache pro použití trvalé paměti (CXL paměť, adresovatelná přes DAX zařízení) jako dodatečného vysoce výkonného cachu před pomalejšími tradičními diskovými nebo flash uložišti. Dm-pcache zajišťuje uchování obsahu cache v případě havárie (crash-safe) díky použití nepřetržité paměti, duplikaci metadat a kontrole integrity dat a metadat pomocí kontrolních součtů CRC32. V současnosti je podporováno pouze cachování v režimu odloženého zápisu (write-back).
- Z jádra byl odstraněn kód souborového systému Bcachefs, který nyní bude distribuován ve formě externího modulu, sestavovaného pomocí nástrojů DKMS (Dynamic Kernel Module Support). Kód Bcachefs může být vrácen do jádra poté, co Kent Overstreet skutečně prokáže možnost správné spolupráce s ostatními vývojáři jádra a schopnost dodržovat ustálená pravidla vývoje.
- Do systémového volání pwritev2() byl přidán příznak RWF_NOSIGNAL, který vypíná oznámení signálu SIGPIPE při zápisu do přerušených anonymních kanálů nebo soketů.
- Do Procfs byla přidána možnost připojení "pidns" pro určení prostorů jmenných identifikátorů procesů (PID namespace). Například: "mount -t proc -o pidns=\/proc\/self\/ns\/pid proc \/tmp\/proc".
- Ve XFS byla prohlášena za stabilní a standardně povolena možnost použití nástroje fsck pro kontrolu a opravu zjištěných problémů v online režimu, bez odpojení souborového systému. Byly přidány systémové volání file_getattr a file_setattr pro změnu atributů speciálních souborů (jakýchkoli inode). V KConfig byly standardně vypnuty možnosti XFS_SUPPORT_V4 (4. verze XFS) a XFS_SUPPORT_ASCII_CI (režim bez ohledu na velikost písmen ASCII), prohlášené za zastaralé. Byly odstraněny zastaralé možnosti připojení attr2, noattr2, ikeep a noikeep.
- V MD RAID byl implementován nový typ bitmap – llbitmap (lockless bitmap), pracující bez zámků a zajišťující vyšší výkon.
- Z obecné struktury "inode" byly vyčleněny informace související s šifrováním a verifikací (ukazatele i_crypt_info a i_verity_info). Tato změna snižuje spotřebu paměti ve souborových systémech, které nepodporují šifrování a verifikaci.
- Do subsystému FUSE byla přidána podpora systémového volání copy_file_range() a přímého kopírování rozsahů s velikostí s 64bitovým typem (dříve byla podporována pouze 32bitová velikost). Byla přidána podpora pro inicializaci v synchronním režimu během připojení (FUSE_DEV_IOC_SYNC_INIT).
- Ve FS ext4 byla implementována možnost použití 32bitových identifikátorů uživatelů (uid) a skupin (gid) při přístupu k rezervovaným blokům. Byly přidány ioctl operace pro nastavení a čtení parametrů superbloku připojených FS (tune2fs bude moci měnit parametry v superbloku bez práv na zápis do blokového zařízení). Byly zcela odstraněny zastaralé nastavení specifická pro ext3.
- Ve f2fs byla přidána možnost připojení „lookup_mode“ pro výběr režimu vyhledávání: perf — hashované vyhledávání, compat — lineární vyhledávání, auto — automatický výběr. Změna režimu má smysl pro konfigurace s adresáři, kde se nezohledňuje velká a malá písmena. Aktuální režim vyhledávání lze zjistit prostřednictvím souboru "/sys/fs/f2fs//effective_lookup_mode". Byla přidána možnost rezervace inode, dostupných pouze privilegovaným uživatelům.
- Ve Overlayfs byl přidán režim práce bez zohlednění velikosti písmen, který se aktivuje na úrovni vrstev FS (nastavení pro jednotlivé adresáře zatím není podporováno).
- V BTRFS byla vylepšena paralelizace operací při vysokém zatížení čtení a nízkém zatížení zápisu, doba potvrzení transakcí se zkrátila a doba synchronizace se podstatně zkrátila (z minut na desítky sekund). Byla zpřístupněna možnost použití bloků (bs), jejichž velikost přesahuje velikost stránky (ps).
- V ksmbd (SMB server běžící na úrovni jádra) byl přidán parametr pro omezení maximálního počtu připojení z jednoho zdroje. IP adres. smbdirect, smbclient a smbserver byly převedeny na používání standardních struktur jádra.
- Ve SQUASHFS byla přidána možnost použití v systémovém volání lseek() možností SEEK_DATA a SEEK_HOLE pro vyhledávání dat a mezer v řídkých souborech. V některých testech byla zaznamenána zvýšená výkonnost při kopírování řídkých souborů až 150krát.
- V EXFAT byla přidána podpora ioctl FS_IOC_GETFSLABEL a FS_IOC_SETFSLABEL pro čtení a zápis štítků oddílů. Byla zpřístupněna možnost měnit možnosti připojení během opětovného připojení. Bylo urychleno načítání bitmap.
- V NTFS3 byla přidána podpora ioctl FS_IOC_GETFSLABEL a FS_IOC_SETFSLABEL pro čtení a nastavování štítků oddílů.
- Paměť a systémové služby
- Byla přijata implementace mechanismu meziprocesového zpracování Binder napsaná v jazyce Rust. Binder se používá v systému Android pro organizaci interakce mezi procesy a vzdálené volání metod (jeden proces Android může volat metodu nebo funkci v jiném procesu Android pomocí Binderu k identifikaci, volání a předání argumentů mezi procesy). Kód Binderu byl přepsán v jazyce Rust v rámci iniciativy Google na zvýšení bezpečnosti Androidu.
- V SLUB, správcovské jádro pamäte, bol implementovaný voliteľný kaskádovací „sheaves“ vrstva, ktorá využíva niekoľko cache, pričom každá je priradená k samostatnému CPU jadru, čo umožňuje lokalizovať operácie jedným jadrom pri alokácii alebo uvoľňovaní pamäte. Takáto cache zvýšila výkon alokácie a uvoľňovania pamäte v jadre, a to vďaka odstráneniu nadbytočných synchronizačných primitiv, ktoré sú potrebné pri zapojení rôznych CPU jadier. V vykonaných testoch sa nárast výkonu pohyboval od 6,3% do 31% v závislosti od typu zaťaženia.
- Pridaná možnosť vytvorenia súborových deskriptorov, ktoré sú identifikované s konkrétnym priestorom názvov (namespace). Na rozdiel od prístupu k priestorom názvov podľa identifikátorov (\/proc\/\/ns\/), súborový deskriptor je viazaný na konkrétny inštanciu priestoru názvov a zabraňuje situácii, kedy je identifikátor opätovne prideľovaný a odkazuje už na iný objekt. Analógiu s použitím pidfds umožňuje otváranie súborových deskriptorov, odkazujúcich na priestory názvov, prostredníctvom funkcií open_by_handle_at() a name_to_handle_at().
- Implementovaný mechanizmus „Swap Table“, ktorý zvyšuje výkon swapovania. Rýchlosť sa dosahuje vďaka zníženiu konkurencie pri prístupe k cache swapu, efektívnejšiemu vyhľadávaniu v cache a zníženiu fragmentácie. Backend založený na Swap Table je využitý na cache swapovania namiesto backendu XArray a umožnil priemerné zlepšenie výkonu o 5-20%. V teste usemem sa priepustnosť zvýšila o 17-28%, v teste na viacvláknové prekompilovanie jadra sa čas kompilácie znížil o 1,12-3,19%, test redis-benchmark s BGSAVE ukázal zvýšenie počtu spracovávaných požiadaviek o 6-7%.
- Pod systém Zswap prešiel na priamke používanie systému alokácie pamäte zsmalloc namiesto vrstvy zpool, ktorý sa už nikde nepoužíva a bol z jadra odstránený.
- Na riadenie správania bootloadera mikrokódu na systémoch x86 bola implementovaná voľba príkazového riadku „microcode=zoznam vlajok“. V súčasnej podobe nová voľba nahradila „microcode.force_minrev“ a tiež umožňuje nastaviť minimálne prípustnú verziu mikrokódu na načítanie.
- Začala práce na reorganizaci nadměrně rozšířené struktury „page“, která se používá k řízení stránek operační paměti. Přidán typ ‘memdesc_flags_t’ pro pole s univerzálními flagy, které budou moci být používány po očekávaném budoucím vyčlenění ze struktury „page“ jednotlivých struktur pro slab a folianty (folio).
- Pro architekturu nios2, používanou v procesorech Altera Nios II (soft-procesor na bázi FPGA), byla implementována podpora systémového volání clone3().
- Do konfigurace jádra (KConfig) byl přidán atribut „transitional“, který lze použít pro označování nastavení, která nejsou zobrazena v uživatelských rozhraních, jako je „make menuconfig“, a nejsou zahrnuta ve vygenerovaných konfiguračních souborech. Hlavním cílem atributu je zjednodušení přejmenovávání voleb při zachování zpětné kompatibility.
- Minimální verze kompilátoru Clang, kterou lze použít pro sestavení jádra, byla zvýšena na nástroje LLVM 15. Debian 12 a Ubuntu 22.04 dodávají LLVM 14.
- Pokračoval přenos změn z větve Rust-for-Linux, týkajících se použití jazyka Rust jako druhého jazyka pro vývoj ovladačů a modulů jádra (podpora Rust není ve výchozím nastavení aktivní a nevede k zařazení Rust do povinných komponentů pro sestavení jádra). V nové verzi pro kód napsaný v jazyce Rust byly implementovány atomické operace s pamětí, struktura maple tree, možnost vytváření souborů DebugFS a funkce pro manipulaci s bitmapami. Byla rozšířena přístupnost API pro vývoj ovladačů. Byl přidán kompletní soubor abstrakcí pro vývoj ovladačů USB zařízení (příklad USB ovladače). Do nástroje perf byla přidána podpora ladicích symbolů generovaných kompilátorem rustc.
- Virtualizace a bezpečnost
- Byla přidána podpora kryptografické verifikace nahrávaných BPF programů pomocí digitálního podpisu. V budoucnu bude tato schopnost rozšířena o prostředky pro určení pravidel nahrávání podepsaných BPF programů a poskytnutí neprivilegovaným uživatelům možnost používat verifikované BPF programy.
- V hypervizoru KVM byla implementována podpora virtualizace rozšíření Intel CET (Control-flow Enforcement Technology), používaného k ochraně proti exploitům využívajícím metody návratového orientovaného programování (ROP — Return-Oriented Programming). Podstata ochrany spočívá v tom, že po předání řízení funkci je adresa návratu uchovávána procesorem nejen v běžné zásobě, ale také v samostatné stínové zásobě, která nemůže být přímo měněna.
- Byla přidána možnost použití více než 255 CPU v hostovaných systémech běžících pod hypervizorem Bhyve na hostitelích s FreeBSD 15.
- Byla přidána vrstvení dibs (Direct Internal Buffer Sharing) pro řízené sdílení vyrovnávacích pamětí uvnitř izolovaného prostředí, jako je hypervizor nebo instance jádra Linux.
- Do auditního subsystému byla přidána podpora provozu s několika současně zapnutými moduly LSM (Linux Security Module).
- Byl přidán virtio ovladač spi-virtio pro přístup k zařízení SPI (Serial Peripheral Interface) z virtuálních strojů.
- Do hypervizoru KVM byla přidána podpora režimu SEV-SNP CipherText Hiding, který blokuje čtení šifrovaného textu paměti chráněných hostovaných systémů z neautorizovaného CPU.
- Byl přidán ovladač qtee pro TEE prostředí (Trusted Execution Environment) čipů Qualcomm.
- Síťová subsystém
- Byla přidána podpora šifrování TCP spojení pomocí protokolu PSP (PSP Security Protocol), vyvinutého společností Google pro šifrování provozu mezi datovými centry. PSP zajišťuje šifrování, kryptografickou kontrolu integrity a autentizaci zdroje, čímž realizuje kombinaci možností protokolů TLS a IPsec. V PSP se aplikuje šifrování na úrovni jednotlivých síťových spojení, nikoli celého komunikačního kanálu. PSP používá samostatné šifrovací klíče pro různá tunelovaná TCP spojení pro přísnou izolaci provozu různých aplikací a zpracovatelů. Pro snížení zátěže na CPU je podporováno odsunování šifrovacích a dešifrovacích operací na stranu síťových karet (offload). Pro transport dat je používán protokol UDP, na který je přeposílán obsah původního TCP paketu.

- Byla přidána počáteční podpora pro rozšíření AccECN (Accurate Explicit Congestion Notification), což je vylepšená verze rozšíření ECN, která umožňuje hostitelům při přetížení značit IP pakety místo jejich zahazování. To dává možnost identifikovat počáteční fázi zácpy v komunikačních kanálech bez ztráty paketů. Původní rozšíření ECN mělo omezení, které umožňovalo zaslání pouze jednoho signálu o přetížení v rámci jednoho cyklu příjmu-přenosu TCP (RTT, Round-Trip Time, odeslání žádosti a přijetí odpovědi). AccECN toto omezení odstraňuje a umožňuje příjemci zaslat odesílateli více než jedno označení přetížení v TCP hlavičce. Algoritmy řízení přetížení mohou získané informace využít k přesnějšímu reagování na přetížení a vyhnout se náhlému snížení intenzity odesílání paketů při mírném přetížení.
- Ve UDP zásobníku byla optimalizována обработка příchozích paketů v podmínkách DDoS útoků, které vedou k příjmu velkého množství paketů do jednoho nebo více UDP soketů. Provedené optimalizace, jako snížení konkurenceschopného zámku, optimalizace umístění datových struktur v paměti a využití zámků zohledňujících architekturu NUMA (Non-Uniform Memory Access), umožnily zvýšit výkon při příjmu UDP paketů o 47 % a více v extrémních podmínkách.
- Byla implementována možnost vypnutí cache vstupu/výstupu na NFS serveru, což umožňuje použití NFS serveru v systémech s malým objemem paměti (například v redukovaných cloudových prostředích). Vypnutí cache může být také užitečné na zatížených NFS serverech, aby se předešlo vytěsňování dat souvisejících s místními úložišti z cache kvůli uvolnění paměti pro NFS cache.
- Maximální velikost bufferů příchozích a odesílaných paketů pro síťové sockety (net.core.rmem_max a net.core.wmem_max) byla zvýšena ze 2 MB na 4 MB. Výchozí velikost nebyla změněna (net.core.rmem_default a net.core.wmem_default = 2 MB).
- Byl přidán ovladač pro akcelerátor síťových operací Qualcomm PPE (Packet Processing Engine), používaný v SoC Qualcomm IPQ9574.
- Byla přidána podpora šifrování TCP spojení pomocí protokolu PSP (PSP Security Protocol), vyvinutého společností Google pro šifrování provozu mezi datovými centry. PSP zajišťuje šifrování, kryptografickou kontrolu integrity a autentizaci zdroje, čímž realizuje kombinaci možností protokolů TLS a IPsec. V PSP se aplikuje šifrování na úrovni jednotlivých síťových spojení, nikoli celého komunikačního kanálu. PSP používá samostatné šifrovací klíče pro různá tunelovaná TCP spojení pro přísnou izolaci provozu různých aplikací a zpracovatelů. Pro snížení zátěže na CPU je podporováno odsunování šifrovacích a dešifrovacích operací na stranu síťových karet (offload). Pro transport dat je používán protokol UDP, na který je přeposílán obsah původního TCP paketu.
- Hardware
- Jádro obsahuje ovladač Tyr, napsaný v jazyce Rust, který zajišťuje práci s GPU ARM Mali, která využívají technologii CSF (Command Stream Frontend), jako jsou Mali G310, G510 a G710. Ovladač zatím není připraven pro pravidelné využívání běžnými uživateli a je považován za experimentální prototyp pro testování abstrakcí pro vývoj ovladačů v jazyce Rust.
- Do ovladačů pro zařízení vstupu s rozhraním HID (Human Interface Device) byla přidána podpora touchpadů s hmatovou odezvou a senzory síly stisku.
- Pokračuje práce na drm-ovladači (Direct Rendering Manager) Xe pro GPU založené na architektuře Intel Xe, která se používá ve grafických kartách Intel rodiny Arc a integrované grafice od procesorů Tiger Lake. V nové verzi byl přidán rozhraní madvise, byla zapnuta podpora SR-IOV PF (Single Root I/O Virtualization Physical Function), byla přidána podpora režimu Intel PSMI pro validaci hardwaru, byla zajištěna zpracování informací o chybách předávaných firmwary a byl realizován profil spotřeby energie SLPC, byla přidána podpora načítání pomocných firmwarů (například pro regulátor chlazení a napětí) během prověřování ovladače.
- Do ovladače AMDGPU byla přidána podpora zařízení s APU Cyan Skillfish, vylepšena podpora AMD GCN 1.0, byla realizována kompatibilita s nástrojem criu, v sysfs byly přidány metriky teploty, bylo povoleno vyžadování přemapování MMIO z uživatelského prostoru.
- V ovladači i915 byla přidána podpora čipů rodiny Wildcat Lake a byla vylepšena práce s GPU Jasper Lake, Elkhart Lake, Gen7 a Gen6.
- V ovladači Nouveau byly standardně aktivovány GSP firmwary NVIDIA a vylepšena zpracování chyb.
- Pokračuje integrace komponent ovladače Nova pro GPU NVIDIA, vybavené GSP firmwary, používanými od série NVIDIA GeForce RTX 2000 založené na mikroarchitektuře Turing. Ovladač je napsán v jazyce Rust. V nové verzi byla rozšířena podpora GSP firmwarů, byla vylepšena implementace makra „register!“, přidána podpora tříd PCI zařízení a identifikátorů výrobců.
- Byl přidán ovladač rocket pro akcelerátory NPU, používající se v SoC Rockchip RK3588.
- Byl přidán parametr jádra „boot_display“ pro výběr zobrazovacího zařízení pro zobrazení procesu zavádění na systémech s více GPU.
- V ovladači vesadrm byla realizována podpora 8-bitových palet.
- Do ovladače msm byla přidána podpora GPU Adreno 663 a byla implementována podpora technologie snižování energetické náročnosti IFPC (Inter Frame Power Collapse).
- Do ovladače panthor byla přidána podpora GPU Mali-G710, Mali-G510, Mali-G310, Mali-Gx15, Mali-Gx20 a Mali-Gx25.
- Byla přidána podpora zvukových systémů ASoC Qualcomm Glymur a PM4125, Realtek RT1321, Shanghai FourSemi FS2104/5S, Texas Instruments PCM1754 a TAS2783A, qcs615, CS35L56 B2, tas2118, tas2x20, tas5825. Byla přidána podpora zvukových USB-karet Tascam US-144mkII a Presonus S1824c.
- Byla přidána podpora ARM CPU Cortex-A320/A520AE/A720AE a C1-Nano/Pro/Premium/Ultra.
- Byla přidána podpora ARM platforem, SoC a zařízení: Apple M2 Pro, M2 Max a M2 Ultr, Sony Xperia SP, Samsung Galaxy S22, Samsung Galaxy S20 FE, ASUS Eee Pad Slider SL101, Lenovo ThinkBook 16, HP Omnibook X14 X1P42100, Dell Inspiron 7441 / Latitude 7455, Sige1, NanoPi Zero2, Axis Artpec8, NXP i.MX91, ROCK 2A/2F, Qualcomm Lemans Auto, Renesas RZ/T2H, RZ/N2H, RZ/T2H a RZ/N2H, Aspeed AST27xx, Meta Clemente BMC, Netcube Nagami som, Tqma91xx, Ultratronik i.MX8MP Ultra-MACH, i.MX8ULP EVK9, Buffalo WXR-1750DHP.
Současně latinskoamerická Nadace svobodného softwaru vytvořila variantu plně svobodného jádra 6.18 — Linux-libre 6.18-gnu, očistěného od prvků firmware a ovladačů, které obsahují nesvobodné komponenty nebo části kódu, jejichž použití je omezeno výrobcem. V vydání 6.18 byl aktualizován kód čištění blobů v ovladačích Nova-Core, Intel XE, TI PRUeth, Lantiq GSWIP, Marvell WiFi-Ex. Bylo provedeno čištění názvů blobů v dts-souboru (devicetree) pro ARM čipy Qualcomm, Mediatek a TI ARM64. Byla neutralizována načítání blobů v nových ovladačích FourSemi fs2104/5s, TI TAS2783 a Qualcomm GENI.
Zdroj: opennet.ru

