Linux 7.0

Linux 7.0

Nakon dva mjeseca razvoja, Linus Torvalds predstavio izdanje jezgre Linux 7.0. Među najistaknutijim promjenama su: pravila primjene AI-asistenata, prevođenje Rusta u osnovne mogućnosti jezgre, poboljšanje performansi paginacije, uključivanje PREEMPT_LAZY načina rada prema zadanim postavkama, podrška za filtre za io_uring operacije, nova datotečna sistem Nullfs, infrastruktura fserror, alati za nadgledanje XFS-a, podrška za remapiranje u Btrfs-u, uključivanje verzije NFS 4.1 kao zadane, integracija post-kvantnog kriptoalgoritma ML-DSA, aktivacija AccECN u mrežnoj podsustavu, osnovna 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 uključeno je 15624 ispravki od 2477 programera, veličina zakrpe je 56 MB (promjene su utjecale na 18053 datoteka, dodano je 704060 redaka koda, uklonjeno 278132 reda). U prethodnom izdanju bilo je 15657 ispravki od 2237 programera, veličina zakrpe je bila 52 MB. Oko 51% svih promjena u 7.0 povezano je s upravljačkim programima uređaja, otprilike 11% promjena odnosi se na ažuriranje koda specifičnog za hardverske arhitekture, 14% se odnosi na mrežne stackove, 5% na datotečne sustave, a 3% na unutarnje sustave jezgre.

Glavne novine u jezgru 7.0 (kernelnewbies.org, lwn.net, OpenNET):

  • Sistem diska, ulaz/izlaz i datotečni sustavi
    • Implementirana je infrastruktura fserror i dodana je API za dobivanje informacija o pogreškama u ulazu/izlazu i oštećenju metapodataka prilikom rada s datotekama. Predložena infrastruktura unificira u datotečnim sustavima prijenos podataka o pogreškama u korisnički prostor putem mehanizma fsnotify.
    • U XFS-u dodane su 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 deskriptor datoteka, preko kojeg se mogu dobiti informacije o kvarovima vezanim uz oštećenje metapodataka ili nastanak grešaka tijekom ulaza/izlaza, kao i pratiti promjenu stanja FSt, kao što su odspajanje i gašenje. Dodatno je predložen upravljiv kroz systemd pozadinski proces xfs_healer, koji obrađuje događaje o stanju FSa iz korisničkog prostora i po potrebi automatski pokreće. postupci oporavka.
    • U datotečni sustav Btrfs dodana je eksperimentalna podrška za strukturu "stablo preusmjeravanja" (remap tree), koja se u budućnosti može koristiti kao posredni sloj pri izvođenju operacija ulaza/izlaza. Bit dodane mogućnosti je da nakon premještanja podataka na uređaju, umjesto ažuriranja svih povezanih struktura s tim podacima, u dodatnoj strukturi "remap tree" se čuvaju stare i nove adrese podataka, nakon čega se tijekom pristupanja podacima adrese zamjenjuju. Novi pristup se predstavlja kao pouzdaniji i fleksibilniji, a također pojednostavljuje daljnje proširenje funkcionalnosti Btrfs.
    • U Btrfs implementirano je podrška za izravni ulaz/izlaz u situacijama kada veličina bloka premašuje veličinu stranice memorije u sustavu.
    • U sastavu je uključena nova datotečna sustav Nullfs, koji se može koristiti kao zastupnik za korijenski FS. Datotečni sustav Nullfs je uvijek prazan, ne sadrži podatke i ne podržava izmjene. Cilj Nullfs-a je korištenje kao početni FS za pojednostavljenje procesa pokretanja sustava – preko Nullfs-a se zatim montiraju drugi FS-ovi i koristi se poziv sustava pivot_root() za prebacivanje korijenskog FS-a umjesto čišćenja sadržaja initramfs i korištenja povezanog korijenskog FS-a.
    • Implementirano aktualizacija informacija o vremenu izmjene datoteka u neblokirajućem načinu. Prije je poziv file_update_time_flags() s oznakom IOCB_NOWAIT vraćao grešku -EAGAIN, što nije dopuštalo korištenje operacija izravnog pisanja u neblokirajućem načinu.
    • U datotečnim sustavima u kategoriji posebno uključivih opcija je prebačen podrška za obavijesne zaključke (lease). Prema zadanim postavkama, mehanizam poput ovog sada nije aktivan zbog problema s datotečnim sustavima koji nisu od samog početka bili predviđeni za njegove primjene. Primjerice, ne podržavaju ga datotečni sustavi 9p i cephfs.
    • U datotečnom sustavu EROFS (Extendable Read-Only File System), koji je namijenjen dijelovima dostupnim samo za čitanje, algoritam LZMA je zadano aktiviran za kompresiju. Opcijski su dostupni algoritmi DEFLATE i Zstandard, koji više nisu označeni kao eksperimentalni. Uvedeno je dijeljenje zapisa u predmemoriji stranica (page-cache) za identične datoteke u različitim EROFS sustavima.
    • Uklonjeno Režim laptop_mode, koji štedi energiju odgađanjem i kombiniranjem operacija pisanja na tvrdi disk kako bi se produžilo trajanje diska u stanju mirovanja i smanjio broj buđenja. Ovaj način je izgubio svoju relevantnost jer su u modernim mobilnim uređajima tvrdi diskovi zamijenjeni solid-state diskovima.
    • Datotečni sustav F2FS prebačen je na korištenje velikih folio stranica memorije (large folios).
    • Obnovljen je rad na driveru ntfs3, koji razvija kompanija Paragon Software. Dodana je podrška za operacije s datotekama baziranim na iomap-u, realizirane su opcije llseek SEEK_DATA/SEEK_HOLE, dodan je režim delalloc za odgodu dodijeljenih blokova. U međuvremenu, na mailing listi programera jezgre u veljači bilo je odobreno je uključivanje nove implementacije NTFS u jednu od budućih verzija jezgre — ntfsplus,razvijene za zamjenu ntfs3.
    • Prema zadanim postavkama prilikom izgradnje je uključena verzija protokola NFS 4.1 (CONFIG_NFS_V4_1). Osigurana je blokiranje izvoza specijaliziranih pseudo-datotečnih sustava putem NFS, kao što su pidfs i nsfs. U NFSD implementirano je eksperimentalna mogućnost korištenja POSIX ACL-a i dodana podrška za dinamičko mijenjanje bazena niti (thread-pool) ovisno o opterećenju.
  • Memorija i sistemske usluge
    • Odobrena su službena pravila za primjenu AI-asistenata i uključivanje u jezgru automatski generiranog sadržaja.Pri prijenosu generiranog koda, potrebno je označavati ga putem navođenja korištenog AI-asistenta putem taga Assisted-by. AI-asistentima je zabranjeno dodavanje taga Signed-off-by – osoba koja je predala ispravak smatra se autorom, nosi odgovornost za predanu promjenu i jamči njezinu kvalitetu. Programerima je naloženo da provode ručno recenziranje generiranog AI koda i provjeravaju usklađenost rezultata s licencnim zahtjevima.

    • Podrška za Rust je prebačen iz eksperimentalnih u glavne mogućnosti jezgre.

    • Završena je integracija u jezgru mehanizma «Swap Table», koji omogućava povećanje performansi paginacije. Povećanje se postiže smanjenjem konkurencije za pristup cache-u za paginaciju, učinkovitijim pretraživanjem cache-a i smanjenjem fragmentacije. Backend zasnovan na Swap Table koristi se za keširanje paginacije umjesto backend-a XArray i omogućio je u testu redis-benchmark s BGSAVE povećanje broja obrađenih zahtjeva za 22%.

    • Dodana podrška za novo proširenje u Clang 22 Thread Safety Analysis, koje omogućava da se na razini kompajliranja prepoznaju potencijalna stanja utrke i greške izazvane neispravnim postavljanjem zaključavanja. Proširenje nudi niz atributa, kao što su GUARDED_BY(…), REQUIRES(…), RELEASE(…) i ACQUIRE(…), koji omogućavaju označavanje funkcija obuhvaćenih zaključavanjima i razdvajanje područja primjene zaključavanja (definiranje konteksta). Na razini kompajliranja izvršava se provjera ispravnosti primjene primitiva sinhronizacije, kao što su muteksi, temelji se na procjeni aktivnosti ili neaktivnosti povezane s tim kontekstom.

    • U sistemski poziv open_tree dodana je dodana je zastava OPEN_TREE_NAMESPACE za pojednostavljenje konfiguracije izoliranih kontejnera i ubrzanje pokretanja kontejnera na sustavima s velikim brojem točaka montiranja. Slično kao OPEN_TREE_CLONE, nova zastava kopira samo navedeno stablo točaka montiranja (mount tree), ali umjesto lokalnog datotečnog deskriptora vraća datotečni deskriptor u novom namespace-u točaka montiranja, gdje se kopirano stablo montira na vrh kopije stvarnog korijenskog FS-a. Zastava OPEN_TREE_NAMESPACE je potrebna za izbjegavanje odvojenog izvršavanja operacija unshare(CLONE_NEWNS) i pivot_root(), korištenih prilikom kreiranja kontejnera.

    • U sistemski poziv rseq dodana je mehanizam proširenja kvanta vremena (time slice), koji omogućava dodatno procesorsko vrijeme za neprekinuto izvršavanje kritične sekcije. Ideja je izbjeći prekid od strane raspoređivača zadataka u kritičnoj sekciji s postavljenom blokadom, što vodi do prijenosa kontrole na druge niti koje koriste resurs, na kojima ostaje postavljena blokada. Proširenje kvanta vremena se ostvaruje bez dodatnih troškova, ali ni bez strogih jamstava koja se pružaju pri punom reguliranju prioriteta.

    • Za arhitekture arm64, loongarch, powerpc, riscv, s390 i x86, način premošćivanja zadataka (preemption) u raspoređivaču je prema zadanim postavkama promijenjen s PREEMPT_NONE na PREEMPT_LAZY. Broj mogućih načina skraćeno s četiri na dva – PREEMPT_FULL i PREEMPT_LAZY (načini PREEMPT_NONE i PREEMPT_VOLUNTARY ostavljeni su samo za arhitekture koje ne podržavaju PREEMPT_FULL i PREEMPT_LAZY). Način PREEMPT_LAZY primjenjuje model potpunog premošćivanja (PREEMPT_FULL) za realtime-zadatke (RR/FIFO/DEADLINE), ali odgađa premošćivanje običnih zadataka (SCHED_NORMAL) do granice tikova. Uvedena odgoda dovodi do smanjenja slučajeva premošćivanja držatelja blokada, što omogućava približavanje performansi konfiguracijama koje koriste model dobrovoljnog premošćivanja (voluntary preemption), tj. PREEMPT_LAZY omogućava očuvanje mogućnosti potpunog premošćivanja za realtime-zadatke, ali minimizira propadanje performansi za obične zadatke.

      Uključivanje PREEMPT_LAZY dovelo do ozbiljne regresije, smanjujući performanse PostgreSQL na ARM64 sustavima za dva puta. Kako bi se riješio pad performansi, programeri PostgreSQL predloženo je moraju aktivirati opciju PR_RSEQ_SLICE_EXTENSION za smanjenje vjerojatnosti premošćivanja držatelja blokade.

    • Nastavljen prijenos izmjena iz grane Rust-for-Linux, vezanih uz korištenje jezika Rust kao drugog jezika za razvoj drajvera i modula jezgre (podrška za Rust nije uključena prema zadanim postavkama i ne dovodi do uključivanja Rusta u obavezne ovisnosti za izgradnju jezgre). Zahvaljujući prethodno integriranoj biblioteci "syn (crates.io)", koja pojednostavljuje pisanje složenih makroa, uspjeli smo smanjiti veličinu Rust-koda u jezgri pojednostavljivanjem definicija postojećih proceduralnih makroa. Proširene su mogućnosti biblioteka kernel, macros i pin-init.

    • U sustav asinkronog ulaza/izlaza io_uring dodana opcija za korištenje ne-ring redova (non-circular submission queue), učinkovitije keširanih 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 tipova u pseudo-kodu BPF, za pronalaženje informacija o debagiranju. je korišten binarna pretraga, što je povećalo učinkovitost učitavanja BPF programa. U eBPF dodana podrška za implicitne argumente prilikom poziva kfunc (funkcije jezgre dostupne za korištenje u BPF programima), definirane s oznakom KF_IMPLICIT_ARGS.

    • Uklonjeno kod za podršku inicijalnom RAM disku (initrd) temeljenom na linuxrc, dugo je proglašen zastarjelim. Preostale implementacije initrd planiraju se ukloniti 2027. godine. Umjesto initrd trebao bi se koristiti initramfs (razlika je u tome što initrd smješta inicijalno pokretno okruženje u diskovni imidž, dok initramfs - u datotečni sustav).

    • U blok uređaju zram, korištenom za komprimirano pohranjivanje particije swap u memoriji, promijenjena logika rada sa komprimiranim stranicama memorije prilikom opcionalnog premještanja podataka u trajnu memoriju u slučaju popunjavanja dostupne operativne memorije. Ranije su se stranice memorije dekomprimirale prije zapisivanja na fizički nosač, a sada se čuvaju onakve kakve jesu u komprimiranom obliku, što smanjuje opterećenje na CPU-u i štedi energiju prilikom autonomnog rada.

    • U alat timerlat, namijenjena za mjerenje latencija pri radu planera zadataka, dodana 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 dodane su mogućnosti za reviziju filtera i okidača. Dodana komanda perf sched stats za prikupljanje i prikaz statistike o radu planera zadataka.

    • Dodani su opcije kompilacije LOGO_LINUX_MONO_FILE, LOGO_LINUX_VGA16_FILE i LOGO_LINUX_CLUT224_FILE za određivanje datoteke s slikom logotipa, koji će se prikazivati pri pokretanju jezgre umjesto standardnog logotipa s pingvinom Tux.

  • Virtualizacija i sigurnost
    • U sustavu asinkronog ulaza/izlaza io_uring implementirano 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 pri stvaranju drugih procesa nakon poziva fork(). U prisutnosti aktivnih filtara, dodani filtri mogu samo postaviti dodatna ograničenja, ali ne mogu isključiti postojeće. Implementirana mogućnost omogućuje blokiranje metode zaobilaženja filtriranja sistemskih poziva u sandbox okruženjima, zasnovanih na izvršavanju umjesto sistemskih poziva sličnih operacija, koje pruža io_uring.
    • U SELinux dodana mogućnost upravljanja pristupom BPF tokenima, omogućujući neprivilegiranim procesima da izvršavaju određene privilegirane operacije s BPF, na primjer, učitavanje BPF programa u jezgru i stvaranje map struktura.
    • Dodana podrška algoritmu za generiranje digitalnih potpisa ML-DSA (CRYSTALS-Dilithium), koji se temelji na teoriji rešetki i otporan je na napade kvantnih računala. Osigurana je mogućnost korištenja ML-DSA za autentifikaciju modula jezgre.
    • Uklonjena mogućnost korištenja shema generiranja digitalnih potpisa s algoritmom SHA-1 za potpisivanje modula jezgre (podrška za učitavanje potpisanih modula je sačuvana).
    • U evidenciji audita NETFILTER_PKT dodane su polja sport i dport za inspekciju mrežnih portova, a ne samo IP adresa.
    • Za sustave s RISC-V arhitekturom implementirano je podrška proširenjima Zicfiss i Zicfilp, koja pružaju hardverske mogućnosti za primjenu zaštite CFI (Control Flow Integrity), koja blokira kršenja normalnog reda izvršavanja instrukcija (control flow) kao rezultat korištenja eksploita koji mijenjaju pohranjene u memoriji pokazivače na funkcije.
    • U hipervizoru KVM implementirano je mogućnost prijenosa informacija o podršci procesora za proširenje ERAPS (Enhanced Return Address Predictor Security) drugim sistemima, što omogućava izbjegavanje nekih operacija resetiranja stanja CPU prilikom vraćanja kontrole domaćinu od strane gostujućeg sistema. Osim toga, dodana podrška vezivanju opreme za gostujuće sisteme za praćenje performansi (PMU, Performance Monitoring Unit), što omogućava poboljšanje tačnosti profiliranja u usporedbi s korištenjem emuliranih PMU.
    • U upravljačkom programu za hipervizor Hyper-V dodana podrška za debugfs sučelje za pregled statistike o radu hipervizora.
  • Mrežni subsistem
    • Omogućeno po defaultu proširenje AccECN (Precizno eksplicitno obavijest o preopterećenju), koje implementira poboljšanu verziju proširenja ECN (wikipedia.org), koje omogućava računalima da, u slučaju preopterećenja, označe IP pakete umjesto da ih odbacuju, što omogućava prepoznavanje nastanka početne faze zagušenja 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 prijenosa TCP-a (RTT, Round-Trip Time, slanje zahtjeva i primanje odgovora). AccECN uklanja ovo ograničenje i omogućava primatelju da šalje pošiljatelju više oznaka o preopterećenju u TCP paketu. Algoritmi upravljanja preopterećenjem mogu koristiti informacije koje se dobiju za preciznije reagiranje na preopterećenja, a da ne pribjegavaju naglom smanjenju intenziteta slanja paketa pri nastanku manjih preopterećenja.
    • U implementaciji algoritma za upravljanje mrežnim redovima Cake dodana omogućava obradu više redova za raspodjelu opterećenja na više CPU jezgri. CAKE algoritam se koristi za smanjenje negativnog utjecaja privremene međuspremnosti paketa na granici mrežne opreme, i usmjeren je na postizanje maksimalne moguća propusnosti i minimalne razine kašnjenja čak i na sporim komunikacijskim kanalima.
    • U socketima VSOCK, koji se koriste za interakciju s virtualnim strojevima, dodana podrška za mrežne prostore imena (network namespace).
    • Dodana početna implementacija budućeg standarda WiFi 8 (802.11bn, Ultra High Reliability WiFi).
    • Dodani su optimizacije koje su omogućile povećanje performansi obrade dolaznih UDP paketa za 12% tijekom stresnog testiranja u 100-gigabitnoj mreži.
  • Oprema
    • U AMDGPU drajveru implementirano je podrška IP blokova, korištenih 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 vozaču i915 dodana početna podrška za IP blok zaslona Xe3p_LPD, korištenog u Intel procesorima Nova Lake-P.
    • Nastavljena rad na drm-drajveru (Direct Rendering Manager) Xe za GPU temeljen na Intel Xe arhitekturi, koja se koristi u Intel karticama obitelji Arc i integriranoj grafici, počevši od Intel procesora Tiger Lake. Dodan način Multi Queue. Dodani su komponente potrebne za dijagnosticiranje GPU zastoja u Mesi. Dodana podrška MERT mehanizmu za upravljanje pristupom GPU memoriji.
    • Nastavljena integracija Nova GPU drajvorskih komponenata za NVIDIA GSP firmware koji se koristi od serije NVIDIA GeForce RTX 2000 zasnovanih na Turing mikroarhitekturi. Drajver je napisan na Rust jeziku. U novoj verziji pripremljena je podrška za GPU zasnovane na Turing mikroarhitekturi uz razne unutarnje izmjene.
    • Dodana podrška kontrolerima i perifernim uređajima s višekanalnim SPI (Serijski Periferni Interfejs) omogućujući prijenos podataka u više paralelnih tokova.
    • Dodano drajver za kombinirane Type-C konektore korištene na uređajima temeljenim na Apple Silicon čipovima koji kombiniraju USB3, DP-AltMode i Thunderbolt/USB4 sučelja.
    • Dodana podrška za zvučne subsistem čipova Tegra238, Minisforum V3 SE, iBasso DC04U, Intel Nova Lake, Nova Lake S i Focusrite Forte.
    • Dodana 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.

Zajedno je latinskoamerička Zaklada za slobodan softver formirala varijantu potpuno slobodnog jezgra 7.0 – Linux-libre 7.0-gnu, očišćenog od elemenata firmvera i drajvera koji sadrže neslobodne komponente ili dijelove koda čija je primjena ograničena od strane proizvođača. U izdanju 7.0 izvršeno je čišćenje od iwlwifi drajver blobova. Ažuriran je kod čišćenja u drajverima amdgpu, adreno, TI PRUeth, air_en8811h, ath12k, TI VPE, rtw8852b, rt1320, rt5575 SPI, tas2783, Intel catpt. Očišćeni su nazivi blobova u dts datotekama (devicetree) za ARM čipove.

Izvor: linux.org.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster