Po dveh mesecih razvoja je Linus Torvalds predstavil izid jedra Linux 7.0. Med najbolj opaznimi spremembami so: pravila za uporabo AI asistentov, vključitev Rust v osrednje zmožnosti jedra, izboljšanje delovanja swap-a, privzeta aktivacija načina PREEMPT_LAZY, podpora filtrom za operacije io_uring, nova datotečna sistem Nullfs, infrastruktura fserror, orodja za spremljanje XFS, podpora remapiranja v Btrfs, privzeta vklopitev različice NFS 4.1, integracija post-kvantnega kriptoalgoritma ML-DSA, aktivacija AccECN v omrežni podobi, začetna podpora za WiFi 8.
Številka 7.0 je bila dodeljena, ker se je v seriji 6.x nabralo dovolj izdaj za spremembo prve številke različice (izdaja 6.0 je bila na primer oblikovana takoj po 5.19). Sprememba številčenja se izvede iz estetskih razlogov in predstavlja formalni korak, ki odstrani nelagodje zaradi velikega števila izdaj v seriji.
V novo različico je bilo sprejetih 15624 popravkov od 2477 razvijalcev, velikost popravka pa je 56 MB (spremembe so zajele 18053 datotek, dodanih je bilo 704060 vrstic kode, izbrisalo se je 278132 vrstic). V prejšnji izdaji je bilo 15657 popravkov od 2237 razvijalcev, velikost popravka pa je bila 52 MB. Približno 51% vseh sprememb v 7.0 je povezanih z gonilniki naprav, približno 11% sprememb se nanaša na posodobitev kode, specifične za strojne arhitekture, 14% je povezanih z omrežnim stekom, 5% z datotečnimi sistemi in 3% z notranjimi podsystemi jedra.
Glavne novosti v jedru 7.0 (1, 2, 3):
- Дисковая подсистема, ввод/вывод и файловые системы
- Izvedena je bila infrastruktura fserror in dodan API za pridobivanje informacij o napakah vhod/izhod in poškodbah metapodatkov pri delu s datotekami. Predlagana infrastruktura enotno prenaša informacije o napakah v uporabniški prostor prek mehanizma fsnotify.
- V XFS so dodane nove možnosti za spremljanje stanja datotečnega sistema iz uporabniškega prostora. Predlagana je ioctl-operacija XFS_IOC_HEALTH_MONITOR, ki vrne datotečni descriptor, preko katerega lahko pridobimo informacije o napakah, povezanih s poškodbo metapodatkov ali napakam pri vhodu/izhodu, prav tako pa sledimo spremembam stanj FS, kot so odmontiranje in izklop. Dodatno je predlagan upravljan proces v ozadju xfs_healer preko systemd, ki obdeluje dogodke o stanju FS iz uporabniškega prostora in po potrebi samodejno zažene postopke za obnovitev.
- V datotečni sistem Btrfs je dodana eksperimentalna podpora za strukturo 'drevo preusmeritve' (remap tree), ki bo v prihodnosti morda uporabila kot vmesno plast pri izvajanju vhodno-izhodnih operacij. Osnova dodane možnosti je, da po premiku podatkov na pomnilnik, namesto da bi posodobili vse povezane strukture s temi podatki, v dodatni strukturi 'remap tree' shranimo stare in nove naslove podatkov, po čemer se naslovi pri dostopu do podatkov zamenjajo. Nov pristop se predstavlja kot bolj zanesljiv in fleksibilen ter poenostavlja nadaljnje širjenje funkcionalnosti Btrfs.
- V Btrfs je implementirana podpora za neposredno vhod/izhod v primerih, ko velikost bloka presega velikost pomnilniške strani v sistemu.
- Vključena je nova datotečna sistem 'Nullfs', ki jo je možno uporabiti kot nadomestek za koreninsko FS. Datotečni sistem Nullfs je vedno prazen, ne vsebuje podatkov in ne podpira sprememb. Namen Nullfs je uporaba kot začetna FS za poenostavitev postopka nalaganja sistema - preko Nullfs se nato montirajo druge FS in uporablja sistemski klic pivot_root() za preklop koreninske FS namesto čiščenja vsebine initramfs in uporabe povezane koreninske FS.
- Izvedena je posodobitev informacij o času modificiranja datotek v neblokirnem načinu. Prej je klic file_update_time_flags() s flagom IOCB_NOWAIT vračal napako '-EAGAIN', kar ni omogočalo uporabe operacij neposrednega pisanja v neblokirnem načinu.
- V datotečnih sistemih so bile dodane podporne obvestilne blokade (lease) kot ločeno vključena možnost. Ta mehanizem je privzeto onemogočen zaradi težav z datotečnimi sistemi, ki izvorno niso bili zasnovani za njegovo uporabo. Na primer, datotečna sistema 9p in cephfs ne podpirata tega mehanizma.
- V datotečnem sistemu EROFS (Extendable Read-Only File System), namenjenem uporabi na particijah, dostopnih v samo za branje, je privzeto uporabljena algoritma LZMA za stiskanje. Opcijsko sta na voljo algoritma DEFLATE in Zstandard, ki nista več označena kot eksperimentalna. Uvedeno je bilo skupno rabo zapisov v fizičnem predpomnilniku (page-cache) za identične datoteke v ločenih datotečnih sistemih EROFS.
- Odstranjen je način laptop_mode, ki je varčeval z energijo z odlašanjem in združevanjem zapisovalnih operacij na trdem disku, da bi podaljšal čas delovanja diska v načinu mirovanja in zmanjšal število prebujenj. Ta način je izgubil relevanco, ker so sodobni mobilni napravi trdi diski zamenjali s trajnim pomnilnikom.
- Datotečni sistem F2FS je bil prenesen na uporabo velikih straneh pomnilnika (large folios).
- Obnovljeno je delo na upravitelju ntfs3, ki ga razvija podjetje Paragon Software. Dodana je podpora za operacije z datotekami na podlagi iomap, implementirane so možnosti llseek SEEK_DATA/SEEK_HOLE, dodan je način delalloc za odloženo dodelitev blokov. Medtem je bil na seznamu za pošto razvijalcev jedra marca odobren vključitev v eno od prihodnjih različic jedra nove implementacije NTFS — ntfsplus, razvite za zamenjavo ntfs3.
- Privzeto je ob gradnji vključena različica protokola NFS 4.1 (CONFIG_NFS_V4_1). Omogočeno je izvozno zaklepanje preko NFS specializiranih pseudo-datotečnih sistemov, kot sta pidfs in nsfs. V NFSD je bila uvedena eksperimentalna možnost uporabe POSIX ACL in dodana podpora dinamičnemu prilagajanju bazena niti (thread-pool) glede na obremenitve.
- Pomnilnik in sistemske storitve
- Zakonitosti uradbe o korišćenju AI asistenta i uključivanju automatski generisanog sadržaja u srž su potvrđene. Pri prenosu generisanog koda, obavezno ga označiti navodeći korišćenog AI asistenta putem oznake „Assisted-by“. AI asistentima je zabranjeno dodavanje oznake „Signed-off-by“ — osoba koja je prenela izmene smatra se autorom, preuzima odgovornost za prenetih izmena i garantuje za njenu kvalitetu. Programerima je naređeno da izvrše manuelnu reviziju dobijenog AI koda i da provere usklađenost rezultata sa licenčnim zahtevima.
- Podrška za Rust je prebačena iz eksperimentalnih u glavne mogućnosti jezgra. Podrška za Rust nije aktivna po defaultu i ne dovodi do uključivanja Rust-a u obavezne zavisnosti za izgradnju jezgra.
- Integracija mehanizma „Swap Table“ u jezgru je završena, što omogućava povećanje performansi paginacije. Povećanje brzine se postiže smanjenjem konkurencije za pristup paginacionom kešu, efikasnijim pretraživanjem u kešu i smanjenjem fragmentacije. Backend zasnovan na Swap Table koristi se za keširanje paginacije umesto XArray backend-a, a u testu redis-benchmark s BGSAVE povećao je broj obrađenih zahteva za 22%.
- Dodata je podrška za proširenje Thread Safety Analysis koje je predstavljeno u Clang 22, omogućavajući identifikaciju potencijalnih stanja trke i grešaka uzrokovanih nepravilnim postavljanjem zaključavanja u fazi kompajliranja. Proširenje nudi niz atributa, kao što su GUARDED_BY(…), REQUIRES(…), RELEASE(…) i ACQUIRE(…), kojima se označavaju funkcije obuhvaćene zaključavanjima i definišu opsezi zaključavanja (kontekst). U fazi kompajliranja vrši se provera ispravnosti primene sinhronizacijskih primitava, kao što su muteksi, na osnovu procene aktivnosti ili neaktivnosti povezanim kontekstom.
- V sistemski poziv open_tree je dodana zastavica OPEN_TREE_NAMESPACE za poenostavitev konfiguracije izoliranih kontejnerjev ter pospešitev začetka kontejnerjev v sistemih z veliko točkami montiranja. Podobno kot OPEN_TREE_CLONE nova zastavica kopira samo določeno drevo točk montiranja (mount tree), vendar namesto lokalnega datotečnega opisnika vrne datotečni opisnik v novem imenskem prostoru točk montiranja, v katerem se kopirano drevo montira nad kopijo dejanske korenske datotečne sistema. Zastavica OPEN_TREE_NAMESPACE je potrebna za izogibanje ločenemu izvajanju operacij unshare(CLONE_NEWNS) in pivot_root(), ki se uporabljata pri ustvarjanju kontejnerjev.
- V sistemski poziv rseq je dodan mehanizem razširitve kvantov časa (time slice), ki omogoča pridobitev dodatnega procesorskega časa za neprekinjeno izvajanje kritičnega odseka. Ideja je, da se izogne prekinitvi kritičnega odseka s strani planerja nalog, ko je nastavljen zaklep, kar vodi do prenosa nadzora drugim nitim, ki uporabljajo vir, na katerih ostaja nastavljen zaklep. Razširitev kvanta časa se izvaja brez dodatnih stroškov, vendar tudi brez strogih jamstev, ki jih zagotavlja polno urejanje prioritet.
- Za arhitekture arm64, loongarch, powerpc, riscv, s390 in x86 je bil privzeti način prekinjanja nalog (preemption) v planerju spremenjen iz PREEMPT_NONE v PREEMPT_LAZY. Število mogočih načinov je zmanjšano s štirih na dva — PREEMPT_FULL in PREEMPT_LAZY (načini PREEMPT_NONE in PREEMPT_VOLUNTARY so ohranjeni samo za arhitekture, ki ne podpirajo PREEMPT_FULL in PREEMPT_LAZY). Način PREEMPT_LAZY uporablja model popolnega prekinjanja (PREEMPT_FULL) za realtime-naloge (RR/FIFO/DEADLINE), vendar zamuja prekinitev običajnih nalog (SCHED_NORMAL) do meje tikanja. Vzpostavljena zamuda zmanjšuje število prekinitev lastnikov zaklepa, kar omogoča približevanje zmogljivosti konfiguracijam, ki uporabljajo model prostovoljnega prekinjanja (voluntary preemption), torej PREEMPT_LAZY omogoča ohranjanje sposobnosti popolnega prekinjanja glede na realtime-naloge, hkrati pa minimizira padec zmogljivosti za običajne naloge.
Vklučitev PREEMPT_LAZY je povzročila resen regres, ki je dvakrat znižal zmogljivost PostgreSQL na sistemih ARM64. Da bi odpravili upad zmogljivosti, so razvijalcem PostgreSQL predlagali, da uporabijo možnost PR_RSEQ_SLICE_EXTENSION za zmanjšanje verjetnosti izključitve imetnika zaklepa.
- Nadaljuje se prenos sprememb iz veje Rust-for-Linux, povezanih z uporabo jezika Rust kot drugega jezika za razvoj gonilnikov in jedrskih modulov. S prejšnjo integrirano knjižnico „syn“, ki poenostavi pisanje zapletenih makrov, je uspelo skrajšati obseg Rust kode v jedru z poenostavitvijo definicij obstoječih proceduralnih makrov. Razširjene so zmožnosti knjižnic kernel, macros in pin-init.
- V sistem za asinhrono vhodno/izhodno delovanje io_uring je bila dodana možnost za uporabo nekrožnih vrstic (non-circular submission queue), ki so bolj učinkovito predpomnjene v situacijah, kjer se izvajanje zahtevka zaključi pred vrnitvijo iz sistemskega klica.
- V podsklopu eBPF v mehanizmu BTF (BPF Type Format), ki nudi informacije za preverjanje tipov v pseudo-kodu BPF, je za iskanje podatkov za odpravljanje napak uporabljen binarni iskalni algoritem, kar je povečalo učinkovitost nalaganja BPF programov. V eBPF je bila dodana podpora za implicitne argumente pri klicu kfunc (jedrske funkcije, ki so na voljo za uporabo v programih BPF), ki so bile določene z oznako KF_IMPLICIT_ARGS.
- Odstranjen je koda za podporo začetnemu RAM-disku (initrd), ki temelji na linuxrc, ki je že dolgo razglašen za zastarelo. Preostale implementacije initrd nameravajo odstraniti leta 2027. Namesto initrd bi bilo treba uporabiti initramfs (razlika je v tem, da initrd postavi začetno zagonsko okolje v diskovni sliki, initramfs pa v datotečnem sistemu).
- V blokovnem napravi zram, ki se uporablja za stiskano shranjevanje particije za izmenjavo v pomnilniku, je bila spremenjena logika dela z compressed memory pages ob opcijskem premiku podatkov v trajni shranjevanje v primeru zapolnjenja razpoložljivega pomnilnika. Prej so se strani pomnilnika razpakirale pred zapisom na fizični nosilec, zdaj pa se shranjujejo tako, kot so, v stisnjeni obliki, kar zmanjšuje obremenitev CPU in varčuje z energijo pri delovanju brez napajanja.
- V utilitě timerlat, určené pro měření zpoždění při práci plánovače úloh, byla přidána možnost „—bpf-action“ pro spuštění BPF programů v případě překročení stanoveného prahu.
- Do systému trasování ftrace byla přidána nastavení „bitmask-list“ pro zobrazení bitových masek v čitelném formátu (v podobě seznamu bitů, nikoli hexadecimálního čísla). Do tracefs byly přidány možnosti pro audit filtrů a spouštěčů. Byla přidána příkaz „perf sched stats“ pro sběr a zobrazení statistik o práci plánovače úloh.
- Byly přidány možnosti sestavení LOGO_LINUX_MONO_FILE, LOGO_LINUX_VGA16_FILE a LOGO_LINUX_CLUT224_FILE pro určení souboru s obrázkem loga, který bude zobrazen při spuštění jádra místo standardního loga s tučňákem Tux.
- Virtualizacija in varnost
- V systému asynchronního vstupu/výstupu io_uring byla implementována možnost připojení BPF programů s filtry, které kontrolují, co mohou konkrétní operace SQE (Submission Queue Entry) dělat (podobně jako systémové volání v io_uring). Přidaná funkce je analogií filtrů systémových volání. Filtry lze spojit s konkrétními úlohami a přebírají se při vytváření dalších procesů po volání fork(). Při aktivních filtrech mohou přidané filtry pouze připojit další omezení, ale nemohou deaktivovat existující. Realizovaná funkce umožní blokovat metody obcházení filtrování systémových volání v sandboxových prostředích, které se zakládají na provádění podobných operací namísto systémových volání, poskytovaných v io_uring.
- V SELinux byla přidána možnost správy přístupu k tokenům BPF, které umožňují neprivilegovaným procesům vykonávat některé privilegované operace s BPF, například načítat BPF programy do jádra a vytvářet mapové struktury.
- Byla přidána podpora algoritmu tvorby digitálních podpisů ML-DSA (CRYSTALS-Dilithium), založeného na teorii mřížek a odolného proti útokům na kvantových počítačích. Byla poskytnuta možnost použití ML-DSA pro autentizaci modulů jádra.
- Byla odstraněna možnost použití schématu tvorby digitálních podpisů s algoritmem SHA-1 pro ověřování modulů jádra (podpora načítání podepsaných modulů zůstává).
- Do záznamu auditu NETFILTER_PKT byla přidána pole 'sport' a 'dport' pro inspekci čísel síťových portů, a ne pouze. IP naslovov.
- Za sisteme s arhitekturo RISC-V je bila implementirana podpora za razširitvi Zicfiss in Zicfilp, ki zagotavljata strojne zmožnosti za uporabo zaščite CFI (Control Flow Integrity), ki blokira kršitve normalnega zaporedja izvajanja navodil (control flow) kot posledico uporabe exploitov, ki spreminjajo shranjene v pomnilniku kazalce na funkcije.
- V hipervizorju KVM je bila implementirana možnost prenosa informacij o podpori procesorja za razširitev ERAPS (Enhanced Return Address Predictor Security) v gostiteljske sisteme, kar omogoča izogibanje nekaterim operacijam ponastavitve stanja CPU ob vračanju nadzora gostiteljici iz gostiteljskega sistema. Poleg tega je bila dodana podpora za dodelitev strojne opreme gostiteljskim sistemom za sledenje zmogljivosti (PMU, Performance Monitoring Unit), kar povečuje natančnost profiliranja v primerjavi z uporabo emuliranih PMU.
- V gonilniku za hipervizor Hyper-V je bila dodana podpora za vmesnik debugfs za ogled statistike delovanja hipervizorja.
- Mrežna podsistem
- Privzeto je vključena razširitev AccECN (Accurate Explicit Congestion Notification), ki implementira izboljšano različico razširitve ECN, ki omogoča gostiteljem, da v primeru preobremenitve označijo IP-pakete namesto, da bi jih zavrgli, kar omogoča prepoznavanje začetne faze zastoja v komunikacijskih kanalih brez izgube paketov. Izvirna razširitev ECN ima omejitev, ki dovoljuje le en signal o preobremenitvi v enem ciklu sprejemanja-in-oddajanja TCP (RTT, Round-Trip Time, pošiljanje zahtevka in prejem odgovora). AccECN odpravi to omejitev in omogoča prejemniku, da pošlje pošiljatelju več kot eno oznako o preobremenitvi v glavi TCP-paketa. Algoritmi za upravljanje preobremenitve lahko uporabijo pridobljene informacije za natančnejše odzivanje na preobremenitve in se izognejo ostri zmanjšanju intenzivnosti pošiljanja paketov ob pojavu majhne preobremenitve.
- V implementaciji algoritma upravljanja mrežnim redovima Cake dodana je mogućnost obrade više redova za raspodelu opterećenja na više CPU jezgara. Algoritam CAKE se koristi za smanjenje negativnog uticaja međubufferisanja paketa na granicnom mrežnom opremu i usmeren je na postizanje maksimalne propusnosti i minimalnog nivoa kašnjenja čak i na sporim komunikacionim kanalima.
- U VSOCK sokete, korišćene za interakciju sa virtuelnim mašinama, dodata je podrška za mrežne prostore imena (network namespace).
- Dodata je preliminarna implementacija budućeg standarda WiFi 8 (802.11bn, Ultra High Reliability WiFi).
- Dodate su optimizacije koje su povećale performanse obrade ulaznih UDP paketa za 12% tokom stres testiranja u 100-gigabitnoj mreži.
- Oprema
- U AMDGPU drajveru implementirana je podrška za IP blokove koji se koriste u novim AMD GPU-ima, kao što su SMUIO 15.x, PSP 15.x, IH 6.1.1/7.1, MMHUB 3.4/4.2, GC 11.5.4/12.1, SDMA 6.1.4/7.1/7.11.4 i JPEG 5.3.
- U Nouveau drajveru unapređeno je upravljanje frekvencijom na sistemima Tegra 186+.
- Dodat je preliminarni deo podrške za IP blok displeja Xe3p_LPD u i915 drajveru, koji se koristi u Intel procesorima Nova Lake-P.
- Nastavljeno je sa radom na drm drajveru (Direct Rendering Manager) Xe za GPU bazirane na Intel Xe arhitekturi, koja se koristi u grafičkim karticama Intel Arc porodice i integrisanoj grafici, počevši od procesora Tiger Lake. Dodat je režim Multi Queue. Dodati su potrebni komponenti za dijagnostiku zamrzavanja GPU u Mesi. Implementirana je podrška za MERT mehanizam za upravljanje pristupom GPU memoriji.
- Nastavljena je integracija komponenti drajvera Nova za NVIDIA GPU sa GSP firmverima, korišćenim od serije NVIDIA GeForce RTX 2000 bazirane na Turing mikroarhitekturi. Drajver je napisan na Rust jeziku. U novoj verziji izvršena je priprema za implementaciju podrške za GPU zasnovane na Turing mikroarhitekturi i unesene su razne interne izmene.
- Dodata je podrška za kontrolere i periferne uređaje sa više kanala SPI (Serial Peripheral Interface), koji omogućavaju prenos podataka u nekoliko paralelnih tokova.
- Dodat je drajver za kombinovane konektore tipa C, koji se koriste na uređajima zasnovanim na Apple Silicon čipovima i kombinuju USB3, DP-AltMode i Thunderbolt/USB4 interfese.
- Dodana podpora za zvočne sisteme čipov Tegra238, Minisforum V3 SE, iBasso DC04U, Intel Nova Lake, Nova Lake S in Focusrite Forte.
- Dodana podpora za ARM platforme, SoC in naprave: Arduino UnoQ, OrangePi 6 Plus, OrangePi CM5, Anbernic RG-DS, Realtek Kent, Qualcomm Kaanapali, Mediatek Ezurio, Facebook Anacapa, Microchip LAN9668, Khadas VIM1S, QNAP TS133, i.MX952, i.MX93, i.MX94, VHIP4 EvalBoard, TQ-Systems MBLS1028A, Agilex5, Radxa CM3J, Glymur.
- Dodana podpora za pametne telefone in tablice: Fairphone Gen 6 (SoC Qualcomm Milos/Snapdragon 7s Gen 3), Pixel 3/3 xl, Microsoft Surface Pro 11.
Hkrati je Latinskoameriška Fundacija za prosto programsko opremo oblikovala različico popolnoma prostega jedra 7.0 — Linux-libre 7.0-gnu, očiščenega od elementov vdelanih programske opreme in gonilnikov, ki vsebujejo neproste komponente ali kose kode, katerih uporabljajo omejuje proizvajalec. V izdaji 7.0 je bila izvedena čiščenje od blobov gonilnika iwlwifi. Posodobljena je bila koda čiščenja v gonilnikih amdgpu, adreno, TI PRUeth, air_en8811h, ath12k, TI VPE, rtw8852b, rt1320, rt5575 SPI, tas2783, Intel catpt. Opravljena je bila tudi odstranitev imen blobov v dts datotekah (devicetree) za ARM čipe.
Izvor: opennet.ru
