Nakon dva mjeseca razvoja, Linus Torvalds predstavio je izdanje jezgre Linux 7.0. Među najistaknutijim promjenama su: pravila korištenja AI-asistenata, uključivanje Rust-a u osnovne mogućnosti jezgre, poboljšana efikasnost swap-a, uključivanje PREEMPT_LAZY moda prema zadanim postavkama, podrška za filtre u operacijama io_uring, nova datotečna sustava Nullfs, infrastruktura fserror, alati za nadzor XFS-a, podrška za premapiranje u Btrfs, uključivanje verzije NFS 4.1 prema zadanim postavkama, integracija post-kvantnog kriptoalgoritma ML-DSA, aktivacija AccECN u mrežnoj podsupstavi, te početna podrška za WiFi 8.
Broj 7.0 dodijeljen je jer je u grani 6.x nagomilano dovoljno izdanja za promjenu prvog broja u verziji (u svoje vrijeme izdanje 6.0 oblikovano je odmah nakon 5.19). Promjena numeracije vrši se iz estetskih razloga i predstavlja formalni korak koji uklanja nelagodu uslijed nakupljanja velikog broja izdanja u seriji.
U novu verziju implementirano je 15624 ispravaka od 2477 developera, veličina patch-a iznosi 56 MB (promjene su zahvatile 18053 datoteka, dodano je 704060 linija koda, a uklonjeno 278132 linija). U prethodnom izdanju bilo je 15657 ispravaka od 2237 developera, a veličina patch-a iznosila je 52 MB. Oko 51% svih promjena u 7.0 vezano je uz upravljačke programe uređaja, približno 11% promjena odnosi se na ažuriranje koda specifičnog za hardverske arhitekture, 14% je vezano uz mrežni stog, 5% se odnosi na datotečne sustave, a 3% na unutarnje podsustave jezgre.
Glavne novine u jezgri 7.0 (1, 2, 3):
- Sistem diska, ulaz/izlaz i datotečni sustavi
- Implementirana je infrastruktura fserror i dodan API za dobivanje informacija o greškama ulaz/izlaz i oštećenju metapodataka pri radu s datotekama. Predložena infrastruktura unificira prijenos informacija o greškama u datotečnim sustavima u korisnički prostor putem mehanizma fsnotify.
- U XFS su dodane nove mogućnosti za nadzor stanja datotečnog sustava iz korisničkog prostora. Predložena je ioctl-operacija XFS_IOC_HEALTH_MONITOR, koja vraća datotečni descriptor putem kojeg se mogu dobiti informacije o kvarovima vezanim uz oštećenje metapodataka ili pojavama grešaka pri ulaz/izlazu, a također omogućuje praćenje promjene stanja FS-a, kao što su odmontiranje i završetak rada. Dodatno, predložen je upravljani putem systemd pozadinski proces xfs_healer, koji obrađuje događaje o stanju FS-a iz korisničkog prostora i, ako je potrebno, automatski pokreće procedure oporavka.
- U Btrfs datotečnom sustavu dodana je eksperimentalna podrška za strukturu "stabla remapiranja" (remap tree), koja bi se u budućnosti mogla koristiti kao posredni sloj prilikom izvođenja ulazno-izlaznih operacija. Suština dodane mogućnosti je u tome što se, nakon premještanja podataka na uređaju, umjesto ažuriranja svih povezanih struktura s tim podacima, u dodatnoj strukturi "remap tree" čuvaju stari i novi adresa podataka, nakon čega se prilikom pristupa podacima adrese zamjenjuju. Novi pristup se predstavlja kao pouzdaniji i fleksibilniji, kao i olakšavajući daljnje proširenje funkcionalnosti Btrfs.
- U Btrfs implementirana je podrška za direktni ulaz/izlaz u situacijama kada je veličina bloka veća od veličine stranice memorije u sustavu.
- U sistem je uključena nova datotečna jezgra "Nullfs", koju je moguće koristiti kao zamjenski način za glavnu FС. Datotečni sustav Nullfs je uvijek prazan, ne sadrži podatke i ne podržava promjene. Svrha Nullfs-a je korištenje kao početni FС za pojednostavljenje procesa pokretanja sustava - preko Nullfs-a se potom montiraju drugi FС-ovi i koristi poziv sustava pivot_root() za prebacivanje na glavni FС umjesto čišćenja sadržaja initramfs-a i korištenja s njim povezanog glavnog FС.
- Implementirano je ažuriranje informacija o vremenu izmjene datoteka u neblokirajućem načinu. Ranije je poziv file_update_time_flags() s flagom IOCB_NOWAIT vraćao grešku "-EAGAIN", što nije omogućavalo korištenje izravnih upisa u neblokirajućem načinu.
- U datotečnim sustavima u razredu opcija koje se mogu zasebno uključiti prevedena je podrška za obavještajne blokade (lease). Po defaultu, takav mehanizam sada nije aktiviran zbog problema s datotečnim sustavima koji izvorno nisu bili namijenjeni za njegovu primjenu. Na primjer, FС 9p i cephfs ne podržavaju ovu mogućnost.
- U EROFS (Extendable Read-Only File System) datotečnom sustavu, namijenjenom za korištenje na particijama dostupnim samo u načinu samo za čitanje, za kompresiju je po defaultu angažiran algoritam LZMA. Opcionalno su dostupni algoritmi DEFLATE i Zstandard, koji više nisu označeni kao eksperimentalni. Implementirano je dijeljenje zapisa u predmemoriji stranica (page-cache) za identične datoteke u odvojenim EROFS FС-ovima.
- Ukinut je način rada laptop_mode, koji štedi energiju odgađanjem i kombiniranjem operacija pisanja na tvrdi disk kako bi se produžio boravak diska u mirovanju i smanjio broj buđenja. Način je izgubio važnost, jer su u modernim mobilnim uređajima tvrdi diskovi zamijenjeni višim kapacitetima flash memorije.
- Datotečni sustav F2FS prebačen je na korištenje velikih folija stranica memorije (large folios).
- Ponovno je pokrenut razvoj drajvera ntfs3 koji razvija Paragon Software. Dodana je podrška za operacije s datotekama bazirane na iomap-u, implementirane su opcije llseek SEEK_DATA/SEEK_HOLE, a dodan je i način delalloc za odgođeno dodjeljivanje blokova. U međuvremenu, na popisu za raspravu među razvojnim programerima jezgre u veljači odobreno je uključivanje nove implementacije NTFS — ntfsplus, koja bi trebala zamijeniti ntfs3, u jednu od budućih verzija jezgre.
- Zadano je u sastavljanju uključena verzija protokola NFS 4.1 (CONFIG_NFS_V4_1). Osigurano je zaključavanje izvoza preko NFS specijaliziranih pseudo-FS-a kao što su pidfs i nsfs. U NFSD-u je implementirana eksperimentalna mogućnost korištenja POSIX ACL-a i dodana je podrška za dinamičko prilagođavanje grupe niti (thread-pool) u zavisnosti o opterećenju.
- Memorija i sistemske usluge
- Odljučena su službena pravila korištenja AI-asistenata i uključivanje automatski generiranog sadržaja u jezgru. Prilikom prijenosa generiranog koda, propisano je označavanje korištenog AI-asistenta pomoću oznake «Assisted-by». AI-asistentima je zabranjeno dodavanje oznake «Signed-off-by» — osoba koja je poslala patch smatra se njegovim autorom, odgovara za promjenu i jamči za njezinu kvalitetu. Razvijačima je propisano da provode ručne revizije dobivenog AI koda i provjeravaju usklađenost rezultata s licencnim zahtjevima.
- Podrška za Rust prebačena je iz eksperimentalne u osnovne mogućnosti jezgre. Podrška za Rust nije aktivna po defaultu i ne dovodi do uključivanja Rusta u obavezne zavisnosti prilikom sastavljanja jezgre.
- Završena je integracija u jezgru mehanizma „Swap Table“, koji omogućava povećanje performansi straniciranja. Povećanje se postiže smanjenjem konkurencije za pristup cache-u straniciranja, boljim pretraživanjem u cache-u i smanjenjem fragmentacije. Backend temeljen na Swap Table je korišten za cache straniciranja umjesto backend-a XArray i omogućio je u testu redis-benchmark s BGSAVE povećanje broja obrađenih zahtjeva za 22%.
- Dodana je podrška za proširenje Thread Safety Analysis uvedeno u Clang 22, koje omogućava otkrivanje potencijalnih stanja utrke i grešaka uzrokovanih nepravilnim postavljanjem zaključavanja tijekom kompilacije. Proširenje nudi niz atributa, kao što su GUARDED_BY(…), REQUIRES(…), RELEASE(…) i ACQUIRE(…), koji omogućuju označavanje funkcija koje pokrivaju zaključavanje i odvajanje područja primjene zaključavanja (definiranje konteksta). Tijekom kompilacije provodi se provjera ispravnosti primjene primiteta sinkronizacije, kao što su muteksi, na temelju procjene aktivnosti ili neaktivnosti s njima povezanog konteksta.
- U sistemski poziv open_tree dodat je zastavica OPEN_TREE_NAMESPACE za pojednostavljenje postavljanja izoliranih kontejnera i ubrzanje pokretanja kontejnera na sustavima s velikim brojem točaka montiranja. Na sličan način kao OPEN_TREE_CLONE, nova zastavica kopira samo odabrano stablo točaka montiranja (mount tree), ali umjesto lokalnog datotečnog deskriptora vraća datotečni deskriptor u novom prostoru imena točaka montiranja, u kojem se kopirano stablo montira iznad kopije stvarnog korijenskog FS-a. Zastavica OPEN_TREE_NAMESPACE je potrebna za izdvajanje od odvojenog izvršavanja operacija unshare(CLONE_NEWNS) i pivot_root(), koje se koriste prilikom stvaranja kontejnera.
- U sistemski poziv rseq dodan je mehanizam proširenja kvanta vremena (time slice) koji omogućava stjecanje dodatnog procesorskog vremena za neprekidno izvršavanje kritične sekcije. Ideja je izbjeći prekid izvršavanja kritične sekcije s postavljenim zaključavanjem od strane planera, što dovodi do prijenosa kontrole drugim nitima koje koriste resurs, na kojima ostaje postavljena zaključanost. Proširenje kvanta vremena se odvija bez dodatnih troškova, iako bez strogih garancija koje se dobivaju punim reguliranjem prioriteta.
- Za arhitekture arm64, loongarch, powerpc, riscv, s390 i x86, način preuzimanja zadataka (preemption) u scheduleru po defaultu promijenjen je s PREEMPT_NONE na PREEMPT_LAZY. Broj mogućih načina smanjen je s četiri na dva — PREEMPT_FULL i PREEMPT_LAZY (načini PREEMPT_NONE i PREEMPT_VOLUNTARY zadržani su samo za arhitekture koje ne podržavaju PREEMPT_FULL i PREEMPT_LAZY). Način PREEMPT_LAZY primjenjuje model potpunog preuzimanja (PREEMPT_FULL) za realtime zadatke (RR/FIFO/DEADLINE), ali odgađa preuzimanje običnih zadataka (SCHED_NORMAL) do granice ticanja. Ova odgoda smanjuje učestalost preuzimanja držatelja zaključavanja, što poboljšava performanse u usporedbi s konfiguracijama koje koriste model dobrovoljnog preuzimanja (voluntary preemption), tj. PREEMPT_LAZY omogućava zadržavanje mogućnosti potpunog preuzimanja za realtime zadatke, ali minimizira propadanje performansi za obične zadatke.
Uključivanje PREEMPT_LAZY dovelo je do ozbiljne regresije, koja je smanjila performanse PostgreSQL-a na ARM64 sustavima za dvostruko. Radi rješavanja pada performansi, programerima PostgreSQL-a predloženo je aktiviranje opcije PR_RSEQ_SLICE_EXTENSION za smanjenje vjerojatnosti preuzimanja držatelja zaključavanja.
- Nastavljen je prijenos promjena iz grane Rust-for-Linux, povezanih s korištenjem jezika Rust kao drugog jezika za razvoj drajvera i modula jezgra. Zahvaljujući prethodno integriranoj biblioteci „syn”, koja olakšava pisanje složenih makronaredbi, smanjen je veličina Rust koda u jezgru pojednostavljenjem definicija postojećih proceduralnih makronaredbi. Proširene su mogućnosti biblioteka kernel, macros i pin-init.
- U sustav asinkronog ulaza/izlaza io_uring dodana je opcija za korištenje nekružnih redova za podnošenje (non-circular submission queue), koji su učinkovitije predmemorirani u situacijama kada se izvršenje zahtjeva završava prije povratka iz sistemskog poziva.
- U podsustavu eBPF, u mehanizmu BTF (BPF Type Format), koji pruža informacije za provjeru vrsta u pseudokodu BPF, korištena je binarna pretraga za pronalaženje debuggerskih informacija, čime je povećana učinkovitost učitavanja BPF programa. U eBPF dodana je podrška za implicitne argumente prilikom poziva kfunc (funkcija jezgra dostupne za korištenje u BPF programima), definiranih s oznakom KF_IMPLICIT_ARGS.
- Uklonjen je kod za podršku početnom RAM disku (initrd) baziranom na linuxrc, koji je odavno proglašen zastarjelim. Preostale implementacije initrd planiraju se ukloniti 2027. godine. Umjesto initrd, treba koristiti initramfs (razlika je u tome što initrd smješta početno pokretno okruženje u diskovnu sliku, dok initramfs - u datotečni sustav).
- U blok uređaju zram, koji se koristi za komprimirano pohranjivanje particije swap u memoriji, promijenjena je logika rada sa komprimiranim stranicama memorije prilikom opcionalnog premještanja podataka u trajno pohranjivanje u slučaju popunjenosti dostupne RAM memorije. Ranije su se stranice memorije dekomprimirale prije zapisivanja na fizički medij, a sada se pohranjuju onako kako jesu u komprimiranom obliku, što smanjuje opterećenje CPU-a i štedi energiju tijekom rada na bateriji.
- U utilitu timerlat, namijenjenu za mjerenje kašnjenja u radu planera zadataka, dodana je opcija "--bpf-action" za pokretanje BPF programa u slučaju prekoračenja zadanog praga.
- U sustav praćenja ftrace dodana je postavka "bitmask-list" za ispis bitmaski u čitljivom obliku (u obliku liste bitova, a ne heksadecimalnog broja). U tracefs su dodane mogućnosti za reviziju filtara i okidača. Dodana je naredba "perf sched stats" za prikupljanje i prikaz statistike o radu planera zadataka.
- Dodane su opcije gradnje LOGO_LINUX_MONO_FILE, LOGO_LINUX_VGA16_FILE i LOGO_LINUX_CLUT224_FILE za definiranje datoteke s slikom logotipa koja će se prikazivati prilikom pokretanja kernela umjesto uobičajenog logotipa s pingvinom Tux.
- Virtualizacija i sigurnost
- U sustavu asinkronog ulaza/izlaza io_uring implementirana je mogućnost pričvršćivanja BPF programa s filtrima, koji kontroliraju što mogu raditi određene SQE (Submission Queue Entry) operacije (slično sistemskim pozivima u io_uring). Dodana mogućnost je analogna filtrima sistemskih poziva. Filtri se mogu vezati za određene zadatke i nasljeđuju se prilikom stvaranja drugih procesa nakon poziva fork(). Kada su aktivni filtri prisutni, dodani filtri mogu samo postavljati dodatna ograničenja, ali ne mogu onemogućiti postojeće. Implementirana mogućnost omogućit će blokiranje metoda za zaobilaženje filtriranja sistemskih poziva u sandbox okruženjima, temeljenim na izvršavanju sličnih operacija koje se pružaju u io_uring umjesto sistemskih poziva.
- U SELinux je dodana mogućnost upravljanja pristupom BPF tokenima, što omogućava neprivilegiranim procesima da izvršavaju određene privilegirane operacije s BPF-om, kao što su učitavanje BPF programa u jezgru i stvaranje map-struktura.
- Dodana je podrška za algoritam generiranja digitalnih potpisa ML-DSA (CRYSTALS-Dilithium), koji se temelji na teoriji rešetki i otporan je na napade kvantnim računalima. Omogućena je upotreba ML-DSA za autentifikaciju modula jezgre.
- Uklonjena je mogućnost korištenja shema generiranja digitalnih potpisa s algoritmom SHA-1 za potpisivanje modula jezgre (podrška za učitavanje potpisanih modula ostaje).
- U NETFILTER_PKT evidenciji dodana su polja 'sport' i 'dport' za inspekciju brojeva mrežnih portova, a ne samo. IP adresa.
- Za sustave s RISC-V arhitekturom implementirana je podrška za proširenja Zicfiss i Zicfilp, koja pružaju hardverske mogućnosti za primjenu zaštite CFI (Control Flow Integrity), koja onemogućava kršenja normalnog redoslijeda izvršavanja instrukcija (control flow) kao rezultat eksploitatacija koje mijenjaju pokazivače na funkcije pohranjene u memoriji.
- U hiper VIZORU KVM Omogućena je mogućnost prijenosa informacija o podršci procesora za proširenje ERAPS (Enhanced Return Address Predictor Security) u gostujuće sustave, što omogućava izbjegavanje nekih operacija resetiranja stanja CPU prilikom vraćanja upravljanja hostu iz gostujućeg sustava. Osim toga, dodana je podrška za vezanje gostujućih sustava s opremom za praćenje performansi (PMU, Performance Monitoring Unit), što omogućava povećanu točnost profiliranja u usporedbi s upotrebom emuliranih PMU-a.
- U driver za hipervizor Hyper-V dodana je podrška za debugfs sučelje za pregled statistike rada hipervizora.
- Mrežni subsistem
- Zadano zadano proširenje AccECN (Točna ekvivalencija eksplicitnog obavještavanja o preopterećenju), koje implementira poboljšanu verziju ECN proširenja, omogućujući hostovima da u slučaju preopterećenja označe IP pakete umjesto da ih odbace, što omogućuje određivanje nastanka inicijalne faze gužve u komunikacijskim kanalima bez gubitka paketa. Izvorno ECN proširenje ima ograničenje koje dopušta postavljanje samo jednog signala o preopterećenju unutar jednog ciklusa prijema i prijenosa TCP-a (RTT, Round-Trip Time, slanje zahtjeva i dobivanje odgovora). AccECN uklanja ovo ograničenje i omogućuje primatelju slanje više oznaka o preopterećenju pošiljatelju u TCP paketu. Algoritmi upravljanja preopterećenjem mogu koristiti dobivene informacije za preciznije reagiranje na preopterećenja i ne pribjegavaju naglom smanjenju intenziteta slanja paketa pri pojavi neznatnog preopterećenja.
- U implementaciju algoritma upravljanja mrežnim redovima Cake dodana je mogućnost obrade više redova za raspodjelu opterećenja na više CPU jezgri. Algoritam CAKE koristi se za smanjenje negativnog utjecaja međubufferiranja paketa na graničnom mrežnom hardveru i usmjeren je na postizanje maksimalne moguće propusnosti i minimalne razine kašnjenja čak i na sporim komunikacijskim kanalima.
- Soketi VSOCK, koji se koriste za interakciju s virtualnim strojevima, dobili su podršku za mrežne prostore imena (network namespace).
- Dodana je osnovna implementacija budućeg standarda WiFi 8 (802.11bn, WiFi s ultra visokom pouzdanošću).
- Dodate su optimizacije koje su omogućile povećanje performansi obrade dolaznih UDP paketa za 12% tijekom 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 unaprijeđeno je upravljanje frekvencijom na sustavima Tegra 186+.
- U i915 drajver dodana je osnovna podrška za IP blok prikaza Xe3p_LPD koji se koristi u Intel procesorima Nova Lake-P.
- Nastavljeni su radovi na drm drajveru (Direct Rendering Manager) Xe za GPU temeljen na arhitekturi Intel Xe, koji se koristi u grafičkim karticama Intel Arc i integriranoj grafici, počevši od procesora Tiger Lake. Dodan je Multi Queue mod. Dodane su komponente potrebne za dijagnosticiranje zamrzavanja GPU-a u Mesi. Dodana je podrška za MERT mehanizam za upravljanje pristupom GPU memoriji.
- Nastavljena je integracija komponenti drajvera Nova za NVIDIA GPU sa GSP firmware-om, koji se koristi od serije NVIDIA GeForce RTX 2000 temeljenih na mikroarhitekturi Turing. Drajver je napisan na jeziku Rust. U novoj verziji izvršena je priprema za implementaciju podrške za GPU temeljen na mikroarhitekturi Turing i izvršene su razne unutarnje promjene.
- Dodana je podrška za kontrolere i periferne uređaje s višekanalnim SPI (Serial Peripheral Interface) sučeljem, koje omogućuje prijenos podataka u nekoliko paralelnih tokova.
- Dodan je drajver za kombinirane Type-C konektore, korištene na uređajima s Apple Silicon čipovima, kombinirajući USB3, DP-AltMode i Thunderbolt/USB4 sučelja.
- Dodana je podrška za zvučne sustave čipova Tegra238, Minisforum V3 SE, iBasso DC04U, Intel Nova Lake, Nova Lake S i Focusrite Forte.
- Dodana je podrška za ARM platforme, SoC i uređaje: 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 podrška za pametne telefone i tablete: Fairphone Gen 6 (SoC Qualcomm Milos/Snapdragon 7s Gen 3), Pixel 3/3 xl, Microsoft Surface Pro 11.
Istovremeno, latinskoamerička Zaklada slobodnog softvera formirala je verziju potpuno slobodnog kernela 7.0 — Linux-libre 7.0-gnu, očišćenog od elemenata firmware-a i drajvera koji sadrže neslobodne komponente ili dijelove koda čija je upotreba ograničena od strane proizvođača. U izdanju 7.0 izvršeno je čišćenje od blobova drajvera iwlwifi. Ažuriran je kod čišćenja u drajverima amdgpu, adreno, TI PRUeth, air_en8811h, ath12k, TI VPE, rtw8852b, rt1320, rt5575 SPI, tas2783, Intel catpt. Izvršeno je čišćenje imena blobova u dts datotekama (devicetree) za ARM čipove.
Izvor: opennet.ru
