Po dveh mesecih razvoja je Linus Torvalds predstavil izdajo jedra Linux 7.0. Med najbolj opaznimi spremembami so: pravila za uporabo AI-asistentov, vključitev Rusta v osnovne zmožnosti jedra, povečana zmogljivost izmenjevanja, privzeto vključitev načina PREEMPT_LAZY, podpora filtrom za operacije io_uring, nova datotečna sistema Nullfs, infrastruktura fserror, orodja za spremljanje XFS, podpora preusmerjanju v Btrfs, privzeta vključitev različice NFS 4.1, integracija post-kvantnega kriptoalgoritma ML-DSA, aktivacija AccECN v omrežni podsistemu, začetna podpora za WiFi 8.
Številka 7.0 je bila dodeljena, ker se je v veji 6.x nabrala dovolj izdaj za spremembo prve številke različice (v preteklosti je bila izdaja 6.0 oblikovana takoj za 5.19). Sprememba številčenja se izvede iz estetskih razlogov in predstavlja formalni korak, ki odpravi nelagodje zaradi prevelikega števila izdaj v seriji.
V novo različico je bilo sprejetih 15624 popravkov od 2477 razvijalcev, velikost popravka je 56 MB (spremembe so zajele 18053 datotek, dodanih je bilo 704060 vrstic kode, odstranjeno je bilo 278132 vrstic). V prejšnji izdaji je bilo 15657 popravkov od 2237 razvijalcev, velikost popravka je bila 52 MB. Približno 51% vseh sprememb v 7.0 se nanaša na gonilnike naprav, približno 11% sprememb se nanaša na posodobitev kode, specifične za strojno arhitekturo, 14% se nanaša na omrežni sklad, 5% na datotečne sisteme in 3% na notranje podsisteme jedra.
Glavne novosti v jedru 7.0 (1, 2, 3):
- Дисковая подсистема, ввод/вывод и файловые системы
- Uresničena je bila infrastruktura fserror in dodan API za pridobivanje informacij o napakah vhod/izhod in poškodbah metapodatkov pri delu z datotekami. Predlagana infrastruktura poenotuje prenos podatkov o napakah v prostor uporabnika preko mehanizma fsnotify v datotečnih sistemih.
- V XFS so dodale nove možnosti za spremljanje stanja datotečnega sistema iz uporabniškega prostora. Predlagana je ioctl-operacija XFS_IOC_HEALTH_MONITOR, ki vrača datotečni deskriptor, prek katerega je mogoče pridobiti informacije o napakah, povezanih s poškodbo metapodatkov ali napakami pri vhodu/izhodu, ter spremljati spremembe stanj FS, kot sta odmontiranje in zaključek delovanja. Dodatno je predlagan upravljan proces v ozadju xfs_healer preko systemd, ki obdela dogodke o stanju FS iz uporabniškega prostora in po potrebi samodejno zažene postopke za obnovitev.
- V datotečni sistem Btrfs je bila dodana eksperimentalna podpora za strukturo 'drevo premapiranja' (remap tree), ki se lahko v prihodnosti uporablja kot vmesni sloj pri izvajanju vhodno-izhodnih operacij. Bistvo dodane funkcionalnosti je v tem, da po prenosu podatkov na shranjevalniku namesto posodabljanja vseh povezanih struktur s temi podatki v dodatni strukturi 'remap tree' shranimo stare in nove naslove podatkov, nato pa se pri dostopu do podatkov naslovi zamenjajo. Nov pristop se predstavlja kot bolj zanesljiv in fleksibilen, kar dodatno poenostavi širitev funkcionalnosti Btrfs.
- V Btrfs je podpora za neposredno vhod/izhod v situacijah, ko je velikost bloka večja od velikosti strani v sistemu.
- Vključena je nova datotečna sistem 'Nullfs', ki jo je mogoče uporabiti kot nadomestek za korenski FS. Datotečni sistem Nullfs je vedno prazen, ne vsebuje podatkov in ne podpira sprememb. Namen Nullfs je, da služi kot začetni FS za poenostavitev procesa zagona sistema — na Nullfs se nato montirajo drugi FS in uporablja se sistemski klic pivot_root() za preklapljanje korenskega FS namesto čiščenja vsebine initramfs in uporabe s tem povezanega korenskega FS.
- Uvedeno je posodabljanje informacij o času spremembe datotek v neblokirnem načinu. Prej je klic file_update_time_flags() s flago IOCB_NOWAIT vračal napako '-EAGAIN', kar ni omogočalo uporabe neposrednih zapisov v neblokirnem načinu.
- V datotečnih sistemih je bila v razred posebej vključenih možnosti prevedena podpora za obvestilne zaklepe (lease). Privzeto ta mehanizem zdaj ni aktiven zaradi težav z datotečnimi sistemi, ki sprva niso bili zasnovani za njegovo uporabo. Na primer, datotečna sistema 9p in cephfs tega ne podpirata.
- V datotečnem sistemu EROFS (Extendable Read-Only File System), namenjenem za uporabo na particijah, dostopnih samo za branje, je privzeto za stiskanje uporabljen algoritem LZMA. Opcijsko so na voljo algoritmi DEFLATE in Zstandard, ki več niso označeni kot eksperimentalni. Uvedeno je bilo skupno uporabo zapisov v strančnem predpomnilniku (page-cache) za identične datoteke v ločenih datotečnih sistemih EROFS.
- Odstranjen je način laptop_mode, ki varčuje z energijo s preložitvijo in združevanjem operacij zapisa na trdi disk z namenom podaljšanja časa, ko je disk v mirovanju, in zmanjšanja števila prebujanj. Ta način je izgubil ustreznost, saj so v sodobnih mobilnih napravah trdi diski zamenjani s trdimi diski.
- Datotečni sistem F2FS je bil prenesen na uporabo velikih folojev pomnilnika (large folios).
- Obnovljeno je delo na gonilniku 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 na seznamu razprav razvijalcev jedra februarja bilo odobreno vključitev nove implementacije NTFS — ntfsplus, zasnovane za nadomestitev ntfs3, v eno od prihodnjih različic jedra.
- Privzeto je ob sestavljanju vključena različica protokola NFS 4.1 (CONFIG_NFS_V4_1). Zagotovljena je zaklepanje izvoza 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 za dinamično prilagajanje bazena niti (thread-pool) glede na obremenitev.
- Pomnilnik in sistemske storitve
- Zaslužena so uradna pravila za uporabo AI-asistentov in vključitev v jedro avtomatsko generirane vsebine. Pri prenosu generirane kode je predpisano označevanje s pripisom o uporabljenem AI-asistentu preko oznake "Assisted-by". AI-asistentom je prepovedano dodajanje oznake "Signed-off-by" — oseba, ki je predala popravek, se šteje za njenega avtorja, nosi odgovornost za posredovano spremembo in jamči za njeno kakovost. Razvijalcem je naloženo, da opravijo ročni pregled kode, pridobljene preko AI, in preverijo skladnost rezultata z licenčnimi zahtevami.
- Podpora za Rust je prešla iz eksperimentalnih v glavne funkcije jedra. Podpora za Rust ni privzeto aktivna in ne vključuje Rust med obvezne kompilacijske odvisnosti za jedro.
- Zaključena je integracija mehanizma "Swap Table" v jedro, ki omogoča povečanje zmogljivosti izmenjevanja. Pospešek je dosežen z zmanjšanjem konkurence za dostop do predpomnilnika izmenjevanja, učinkovitejšim iskanjem v predpomnilniku in zmanjšanjem fragmentacije. Ozadje, ki temelji na Swap Table, je bilo uporabljeno za predpomnjenje izmenjavanja namesto XArray in je v testu redis-benchmark z BGSAVE omogočilo povečanje števila obdelanih poizvedb za 22%.
- Dodana je podpora za novo razširitev Thread Safety Analysis, ki se je pojavila v Clang 22 in omogoča odkrivanje potencialnih stanj dirke in napak, ki izhajajo iz nepravilnega nastavljanja zaklepov, že v fazi kompilacije. Razširitev ponuja serijo atributov, kot so GUARDED_BY(…), REQUIRES(…), RELEASE(…) in ACQUIRE(…), ki omogočajo označevanje funkcij, ki jih obdajajo zaklepi, in razločevanje območij delovanja zaklepov (določitev konteksta). V fazi kompilacije se izvaja preverjanje pravilnosti uporabe sinhronizacijskih prvin, kot so mutexi, na podlagi ocene aktivnosti ali neaktivnosti povezanega konteksta.
- V sistemski klic open_tree je bila dodana zastavica OPEN_TREE_NAMESPACE za poenostavitev nastavitve izoliranih kontejnerjev in pospešitev njihovih zagonov v sistemih z veliko število točk montiranja. Na podoben način kot OPEN_TREE_CLONE nova zastavica kopiira le določeno drevo točk montiranja (mount tree), vendar namesto lokalnega datotečnega descriptorja vrne datotečni descriptor v novem prostoru imen točk montiranja, kjer se skopirano drevo montira nad kopijo dejanskega korenskega datotečnega sistema. Zastavica OPEN_TREE_NAMESPACE je potrebna za ukinitev ločenega izvajanja operacij unshare(CLONE_NEWNS) in pivot_root(), ki se uporabljata pri ustvarjanju kontejnerjev.
- V sistemski klic rseq je bila dodana mehanizem za razširitev kvantov časa (time slice), kar omogoča pridobitev dodatnega procesorskega časa za neprekinjeno izvajanje kritične sekcije. Ideja je, da se izogne prekinitvi načrtovalnika nalog kritične sekcije z nastavljeno zaklepanjem, kar bi pripeljalo do prenosa nadzora drugim nitjem, ki uporabljajo vir, na katerem ostaja nastavljena zaklepna. Razširitev kvanta časa se izvaja brez dodatnih stroškov, vendar tudi brez strogih garancij, ki jih zagotavlja popolno uravnavanje prioritet.
- Za arhitekture arm64, loongarch, powerpc, riscv, s390 in x86 je bil način premeščanja nalog (preemption) v načrtovalniku privzetno spremenjen iz PREEMPT_NONE v PREEMPT_LAZY. Število možnih načinov je bilo zmanjšano s štirih na dva — PREEMPT_FULL in PREEMPT_LAZY (načina PREEMPT_NONE in PREEMPT_VOLUNTARY sta za zdaj obdržana le za arhitekture, ki ne podpirajo PREEMPT_FULL in PREEMPT_LAZY). Način PREEMPT_LAZY uporablja model popolnega premeščanja (PREEMPT_FULL) za realnočasovne naloge (RR/FIFO/DEADLINE), vendar zadržuje premeščanje običajnih nalog (SCHED_NORMAL) do meje cika. Vnosena zamuda pripomore k zmanjšanju primerov premeščanja nosilcev zaklepov, kar omogoča izboljšanje zmogljivosti v primerjavi s konfiguracijami, ki uporabljajo model prostovoljnega premeščanja (voluntary preemption), torej PREEMPT_LAZY omogoča ohranitev možnosti popolnega premeščanja za realnočasovne naloge, a hkrati minimizira upad zmogljivosti za običajne naloge.
Vklučitev PREEMPT_LAZY je povzročila resno regresijo, ki je dvakrat znižala zmogljivost PostgreSQL na sistemih ARM64. Da se odpravi padec zmogljivosti, je razvijalcem PostgreSQL predlagano, da uporabijo možnost PR_RSEQ_SLICE_EXTENSION za zmanjšanje verjetnosti izgnanja lastnika zaklepa.
- Nadaljnji prenos sprememb iz veje Rust-for-Linux, povezanih z uporabo jezika Rust kot drugega jezika za razvoj gonilnikov in modulov jedra. Zaradi prej integrirane knjižnice „syn“, ki poenostavi pisanje zapletenih makrov, je bilo mogoče zmanjšati velikost Rust kode v jedru z poenostavitvijo definicij obstoječih procesnih makrov. Razširjene so možnosti knjižnic kernel, macros in pin-init.
- V sistem asinkrone vnose/izvode io_uring je bila dodana možnost za uporabo neokroglih vrstic za oddajo (non-circular submission queue), ki se učinkoviteje predpomnijo v situacijah, ko se izvajanje zahteve konča prej, kot se vrne iz sistemskega klica.
- V podsystemu eBPF je v mehanizmu BTF (BPF Type Format), ki zagotavlja informacije za preverjanje tipov v psevdokodu BPF, za iskanje podatkov za odpravljanje napak uporabljen binarni iskalnik, kar je povečalo učinkovitost nalaganja BPF programov. V eBPF je bila dodana podpora za implicitne argumente pri klicu kfunc (funkcije jedra, dostopne za uporabo v BPF programih), opredeljenimi z oznako KF_IMPLICIT_ARGS.
- Odstranjena je podpora za začetni RAM-disk (initrd) na podlagi linuxrc, ki je že dolgo označen kot zastarel. Preostale implementacije initrd nameravajo odstraniti leta 2027. Namesto initrd je treba uporabiti initramfs (razlika je v tem, da initrd postavi začetno zagonsko okolje v diskovno sliko, medtem ko initramfs to postavi v datotečni sistem).
- V blokovnem napravljenju zram, ki se uporablja za stisnjeno shranjevanje razdelka za izmenjavo v pomnilniku, je bila spremenjena logika dela s stisnjenimi stranmi pomnilnika pri neobveznem prenosu podatkov v trajno shranjevanje v primeru, da se razpoložljiv pomnilnik napolni. Prej so se strani pomnilnika razpakirale pred zapisovanjem na fizični nosilec, zdaj pa se shranjujejo, kot so, v stisnjeni obliki, kar zmanjšuje obremenitev CPU in prihrani energijo pri delovanju na prosti energiji.
- V utilitu timerlat, namenjeno merjenju zakasnitve pri delu načrtovalnika opravil, je dodana možnost „—bpf-action“ za zagon BPF-program v primeru preseganja določenega praga.
- V sistem sledenja ftrace je dodana nastavitev „bitmask-list“ za izpis bitnih mask v berljivi obliki (v obliki seznama bitov, ne hex številke). V tracefs so dodane možnosti za revizijo filtrov in sprožilcev. Dodana je bila tudi ukazna vrstica „perf sched stats“ za zbiranje in prikaz statistik o delovanju načrtovalnika opravil.
- Dodane so možnosti sestavljanja LOGO_LINUX_MONO_FILE, LOGO_LINUX_VGA16_FILE in LOGO_LINUX_CLUT224_FILE za določitev datoteke z logotipom, ki bo prikazana ob zagonu jedra namesto privzete podobe pingvina Tux.
- Virtualizacija in varnost
- V sistemu asinhronih vhodov/izhodov io_uring je bila realizirana možnost pritrjevanja BPF-programov s filtri, ki nadzorujejo, kaj lahko počnejo določene operacije SQE (Submission Queue Entry) (podobno sistemskim klicem v io_uring). Dodana možnost je ekvivalent filtrom sistemskih klicev. Filtri se lahko vežejo na določene naloge in se dedujejo pri ustvarjanju drugih procesov po klicu fork(). Z aktivnimi filtri lahko dodani filtri le dodajo dodatne omejitve, ne morejo pa onemogočiti obstoječih. Realizirana možnost bo omogočila blokiranje metod obhajanja filtriranja sistemskih klicev v sandbox-okoljih, ki temeljijo na izvajanju namesto sistemskih klicev podobnih operacij, ki jih nudi io_uring.
- V SELinux je dodana možnost upravljanja dostopa do BPF-tokene, ki omogočajo nepremoženim procesom izvajanje nekaterih privilegiranih operacij z BPF, na primer nalaganje BPF-programov v jedro in ustvarjanje map-struktur.
- Dodana je podpora za algoritem oblikovanja digitalnih podpisov ML-DSA (CRYSTALS-Dilithium), ki temelji na teoriji mrež in je odporen na napade s kvantnimi računalniki. Omogočeno je tudi uporabo ML-DSA za avtentikacijo jedrskih modulov.
- Odstranjena je možnost uporabe shem oblikovanja digitalnih podpisov z algoritmom SHA-1 za overjanje jedrskih modulov (podpora za nalaganje podpisanih modulov ostaja).
- V zapisu revizije NETFILTER_PKT so dodana polja ‘sport’ in ‘dport’ za inšpekcijo številk omrežnih portov, ne le. IP naslovov.
- Za sisteme z arhitekturo RISC-V je bila uvedena podpora za razširitve Zicfiss in Zicfilp, ki zagotavljajo strojne zmožnosti za uporabo zaščite CFI (Control Flow Integrity), ki blokira kršitve normalnega reda izvajanja ukazov (control flow) zaradi uporabe izkoriščanj, ki spreminjajo v pomnilniku shranjene kazalce na funkcije.
- V hipervizorju KVM je bila uvedena možnost prenosa v gostiteljske sisteme informacij o podpori procesorja za razširitev ERAPS (Enhanced Return Address Predictor Security), ki omogoča, da se izognejo nekaterim operacijam ponastavitve stanja CPU ob vrnitvi nadzora gostitelju iz gostiteljskega sistema. Poleg tega je bila dodana podpora za dodeljevanje opreme gostiteljskim sistemom za sledenje zmogljivosti (PMU, Performance Monitoring Unit), kar omogoča povečano 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 o delovanju hipervizorja.
- Mrežna podsistem
- Privzeto je vklopljena razširitev AccECN (Accurate Explicit Congestion Notification), ki izvaja izboljšano različico razširitve ECN, ki omogoča gostiteljem, da v primeru prenatrpanosti označijo IP-pakete namesto njihovega zavrnitve, kar omogoča določanje začetne faze zastoja v komunikacijskih kanalih brez izgube paketov. Izvorna razširitev ECN ima omejitev, ki dovoljuje oddajanje le enega signala o prenatrpanosti v okviru enega cikla prenosa 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 prenatrpanosti v glavi TCP-paketa. Algoritmi za upravljanje prenatrpanosti lahko uporabijo pridobljene informacije za natančnejše odzivanje na prenatrpanosti in se izognejo drastičnemu zmanjšanju intenzivnosti pošiljanja paketov ob pojavu manjše prenatrpanosti.
- v implementaciji algoritma za upravljanje mrežnim redovima Cake dodana je mogućnost obrade više redova za raspodelu opterećenja na više jezgara CPU. Algoritam CAKE se koristi za smanjenje negativnog uticaja međubuferisanja paketa na graničnom mrežnom uređaju i ima cilj da postigne maksimalni mogući kapacitet i minimalni nivo latencije čak i na sporim komunikacionim kanalima.
- U VSOCK sokete, koji se koriste za interakciju s virtuelnim mašinama, dodata je podrška za mrežne prostore imena (network namespace).
- Dodata je početna implementacija budućeg standarda WiFi 8 (802.11bn, Ultra High Reliability WiFi).
- Dodate su optimizacije koje su omogućile povećanje performansi 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 korišćene 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 poboljšano je upravljanje frekvencijom na sistemima Tegra 186+.
- U i915 drajver dodatna je početna podrška za IP blok za prikaz Xe3p_LPD koji se koristi u Intel procesorima Nova Lake-P.
- Nastavljena je rad na drm drajveru (Direct Rendering Manager) Xe za GPU zasnovane na Intel Xe arhitekturi, koja se koristi u Intel grafičkim karticama porodice Arc i integrisanoj grafici, počevši od procesora Tiger Lake. Dodan je režim Multi Queue. Dodate su komponente potrebne za dijagnostiku zamrzavanja GPU u Mesi. Dodata je podrška za MERT mehanizam za upravljanje pristupom GPU memoriji.
- Nastavljena je integracija komponenti drajvera Nova za NVIDIA GPU-ove, opremljene GSP firmware-om, korišćenim od serije NVIDIA GeForce RTX 2000 zasnovane na mikroarhitekturi Turing. Drajver je napisan na Rust-u. U novoj verziji izvršena je priprema za implementaciju podrške za GPU zasnovane na mikroarhitekturi Turing i izvršene su različite unutrašnje izmene.
- Dodata je podrška za kontrolere i periferalne uređaje s višekanalnim SPI (Serial Peripheral Interface) interfejsom, omogućavajući prenos podataka u nekoliko paralelnih tokova.
- Dodata je drajver za kombinovane konektore Type-C, korišćene na uređajima koji se zasnivaju na Apple Silicon čipovima i kombinuju USB3, DP-AltMode i Thunderbolt/USB4 interfejse.
- Dodana je podpora za avdio sisteme čipov Tegra238, Minisforum V3 SE, iBasso DC04U, Intel Nova Lake, Nova Lake S in Focusrite Forte.
- Dodana je 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 je 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 povsem prostega jedra 7.0 — Linux-libre 7.0-gnu, očiščeno elementov vdelane programske opreme in gonilnikov, ki vsebujejo nesvobodne komponente ali dele kode, katerih uporaba je omejena s strani proizvajalca. V izdaji 7.0 je bila izvedena čistka blobov gonilnika iwlwifi. Posodobljena je čistilna koda v gonilnikih amdgpu, adreno, TI PRUeth, air_en8811h, ath12k, TI VPE, rtw8852b, rt1320, rt5575 SPI, tas2783, Intel catpt. Opravljena je bila čistka imen blobov v dts datotekah (devicetree) za ARM čipe.
Izvor: opennet.ru
