Nakon dva mjeseca razvoja, Linus Torvalds predstavio je izdanje jezgre Linux 6.9. Među najistaknutijim promjenama su: modul dm-vdo za deduplikaciju i kompresiju blokovnih uređaja, način izravnog pristupa datotekama u FUSE-u, podrška za kreiranje pidfd-a za pojedine niti, mehanizam BPF-tokena, podrška za Rust na ARM64 sustavima, prebacivanje FS Ext2 u kategoriju zastarjelih, uklanjanje starog vozača NTFS-a, podrška za Intel FRED mehanizam.
U novu verziju uključeno je 15680 ispravki od 2106 programera, veličina zakrpe iznosi 54 MB (promjene su se dotakle 11825 datoteka, dodano je 687954 linija koda, uklonjeno 225344 linija). U prošlom izdanju bilo je 15641 ispravka od 2018 programera, veličina zakrpe iznosila je 44 MB. Oko 42% svih promjena predstavljenih u 6.9 odnosi se na vozače uređaja, otprilike 17% promjena odnosi se na ažuriranje koda specifičnog za hardverske arhitekture, 13% se odnosi na mrežni stak, 7% na datotečne sustave i 4% na unutarnje podsustave jezgre.
Glavne novosti u jezgri 6.9:
- Sistem diska, ulaz/izlaz i datotečni sustavi
- U Device Mapperu (DM) dodan je novi upravljač dm-vdo (virtualni optimizator podataka), koji omogućuje na temelju postojećih blokovnih uređaja realizaciju virtualnog blokovnog uređaja s mogućnostima poput deduplikacije ponavljajućih podataka, kompresije podataka, isključivanja praznih blokova i povećanja veličine blokovnog uređaja prema potrebi (thin provisioning). Ove se mogućnosti realiziraju na razini blokovnog uređaja i ne ovise o korištenoj datotečnoj sustavi (na primjer, pomoću dm-vdo može se automatski kombinirati duplicirani podaci i pohranjivati informacije u komprimiranom obliku za bilo koju FS). Podržava se primjena dm-vdo za fizička skladišta veličine do 256TB i stvaranje logičkih volumena veličine do 4PB. Preporučuje se korištenje lvm-a za upravljanje particijama vdo. Tehnologiju VDO razvila je tvrtka Permabit i otvorena je nakon njezinog preuzimanja od strane Red Hata 2017. godine.
- U FUSE podsustavu, koja se koristi za implementaciju datotečnih sustava u korisničkom prostoru, dodana je početna implementacija 'passthrough' moda, koja omogućuje izravno dobivanje podataka datoteka na razini jezgre, zaobilazeći proces koji radi u korisničkom prostoru, čime se u određenim situacijama može značajno poboljšati performanse. Na primjer, FUSE implementacije FS-a koje rade u 'samo za čitanje' modu i ograničavaju pristup datotekama mogu isporučivati sadržaj datoteka iz izvorne FS bez njihove predaje FUSE procesu.
- U kategoriju zastarjelih (deprecated) prebačen je vozač s implementacijom datotečnog sustava Ext2. Kao razlog navodi se podrška u vozaču samo za 32-bitne brojače vremena u inode, koji će preplaviti 19. siječnja 2038. Umjesto vozača ext2, preporučuje se korištenje vozača ext4, koji podržava rad s datotečnim sustavom Ext2 i potpuno je kompatibilan s njim, ali može koristiti vremenske oznake u ext2 particijama koje nisu podložne problemu iz 2038. godine, ako je FS stvoren s inode-ima većim od 255 bajta (u vozaču ext2 32-bitni brojači vremena korišteni su neovisno o veličini inode-a).
- Stari vozač datotečnog sustava NTFS je uklonjen, a na njegovo je mjesto s verzijom 5.15 došao novi vozač NTFS3. Isporuka dva vozača s implementacijom NTFS u jezgri je ocijenjena kao nepraktična, s obzirom na to da stari vozač nije ažuriran već dugi niz godina, nalazi se u lošem stanju i može raditi samo u načinu čitanja.
- U datotečne sustave zonefs i hugetlbfs dodana je podrška za mapiranje identifikatora korisnika montiranih datotečnih sustava, koja se koristi za usklađivanje datoteka određenog korisnika na montiranoj tuđoj particiji s drugim korisnikom u trenutnom sustavu.
- U NFSv4 administratorima je omogućena opcija čišćenja stanja otvaranja i zaključavanja datoteka.
- Za datotečni sustav Ext4 zabilježeno je samo ispravljanje grešaka i ažuriranje kunit testova.
- U Btrfs je nastavljen prijenos funkcija na korištenje stranica memorijskih folija (page folios).
- U datotečnom sustavu XFS nastavljeno je rad na implementaciji mogućnosti korištenja alata fsck za provjeru i ispravljanje otkrivenih problema u online načinu, bez odremontiranja datotečnog sustava.
- U sustavnu funkciju pwritev2() dodana je oznaka RWF_NOAPPEND, koja omogućava navođenje pomaka za pisanje, čak i kada je datoteka otvorena u načinu samo dodavanja podataka na kraj datoteke.
- Dodane su nove ioctl naredbe: FS_IOC_GETUUID — vraća UUID identifikator navedene datotečne sustava, i FS_IOC_GETFSSYSFSPATH — određuje lokaciju u /sys/fs za zadani montirani FS.
- Datotečni sustavi efs, qnx4 i coda prebačeni su na korištenje novog API-ja za montiranje particija.
- Poboljšana je realizacija operacija s datotekama, izvedenih u načinu bez uvažavanja veličine slova. Performanse su povećane zbog prvo usporedbe s uvažavanjem veličine slova te povratka na pretraživanje bez uvažavanja veličine slova. Riješeni su problemi prilikom montiranja overlayfs-a iznad direktorija, za koje je postavljen način bez uvažavanja veličine slova.
- Memorija i sistemske usluge
- Implementirana je podrška mehanizmu Intel FRED (Fleksibilna povratna i isporuka događaja), stvorenog za povećanje učinkovitosti i pouzdanosti isporuke informacija o niskonivovskim događajima, u odnosu na trenutni mehanizam IDT (Tablica deskriptora prekida). Povećanje performansi i smanjenje latencija osigurava se povratkom događaja procesorskom instrukcijom IRET umjesto prijenosom događaja putem IDT tablice. Povećanje pouzdanosti postiže se odvojenim obradom dolaska događaja u kontekstu jezgre i korisničkom kontekstu, zaštitom od ugniježđenog izvršavanja NMI i spremanjem svih registrara CPU povezanih s iznimkom u proširenom okviru stoga.
- Dodana je mogućnost optimizacije pristupa podacima pojedinih jezgri CPU-a kroz korištenje u jezgru imenskih adresnih prostora (Named Address Spaces), implementiranih u GCC-u kao proširenje GNU C.
- U funkciju pidfd_open() dodana je oznaka PIDFD_THREAD, koja omogućava stvaranje pidfd-a za pojedine niti, a ne samo korištenje pidfd-a u kontekstu vođe grupe niti. Također je predložena realizacija pseudo-FS-a za pristup pidfd-u preko virtualnog datotečnog sustava. Za razliku od identifikacije procesa putem pid-a, identifikator pidfd je povezan s specifičnim procesom i ne mijenja se, dok se PID nakon završetka trenutnog procesa može povezati s drugim procesom.
- U BPF podsistemu dodan je mehanizam BPF-tokena koji omogućava selektivno delegiranje prava pristupa privilegiranih BPF-operacija aplikacijama, na primjer, može se dati neprivilegiranoj aplikaciji pristup pojedinim podsistemima BPF bez davanja punih prava CAP_BPF.
- U BPF podsistem dodan je novi tip zajedničke memorije bpf_arena, definirajući područje dostupno za zajedničko korištenje od strane BPF programa i procesa u korisničkom prostoru. Dodana je instrukcija may_goto koja omogućava organizaciju rada petlji koje mogu biti prekinute od strane verifikatora. Dodana je mogućnost generiranja proizvoljnih TCP SYN cookie iz BPF programa i stvaranja BPF handlera za borbu protiv SYN flood-a.
- Nastavljen je prijenos promjena iz grane Rust-for-Linux vezanih uz korištenje programskog jezika Rust kao drugog jezika za razvoj drajvera i modula jezgre (podrška za Rust nije aktivna po defaultu i ne dovodi do uključivanja Rusta u obavezne kompilacijske ovisnosti jezgre). Dodana je podrška za korištenje programskog jezika Rust pri radu na 64-bitnim ARM procesorima. Održan je prijelaz na verziju Rusta 1.76. Dodan je makro ‘container_of!’. Umjesto nestabilne funkcionalnosti ‘ptr_metadata’ korištena je stabilna metoda ‘byte_sub’. Dodan je modul ‘time’ s funkcijom pretvorbe vremena ‘msecs_to_jiffies()’.
- U io_uring podsistem dodana je mogućnost skraćivanja datoteka (ftruncate_file).
- Dodana je nova vrsta radnih redova WQ_BH (workqueue Bottom Halves) za asinhrono izvršavanje koda u kontekstu programskih prekida, usmjerena na korištenje umjesto zastarjelih tasklet-a.
- Značajno je preuređena podsistem rada s tajmerom, u kojoj je poboljšana logika odabira aktivnog CPU jezgra za izvršenje aktiviranog tajmera, kako bi se neaktivna jezgra ne izvodila iz spavanja.
- Implementirana je mogućnost ažuriranja modela potrošnje energije jezgra (EM, Energy Model) tijekom rada, što se može koristiti, na primjer, za uzimanje u obzir utjecaja radne temperature na energetsku učinkovitost CPU-a. Značajno je povećana učinkovitost funkcije em_cpu_energy(), koja se sada na testovima stacionarnog sustava izvršava 1.43 puta brže, a na testu s pločom RockPi 4B - 1.69 puta brže.
- Dodana je podrška za pokretanje sustava na ARM64 arhitekturi u LPA2 načinu s 52-bitnim virtualnim adresnim prostorom.
- Za ARM64 sustave implementirana je podrška za kontinuirane zapise PTE (Page Table Entry), što poboljšava performanse kroz efikasnije korištenje TLB-a (Translation Lookaside Buffer).
- Usvojene su ispravke za poboljšanje performansi podsustava upravljanja memorijom smanjenjem konkurentnog blokiranja u vmalloc().
- Za LoongArch arhitekturu implementiran je mehanizam za vruće patchiranje jezgre (live patching), što omogućava primjenu ispravki na jezgru bez ponovnog pokretanja.
- Za RISC-V sustave implementirana je podrška za sistemski poziv membarrier(), koji postavlja barijere u memoriji za tekuće sisteme niti.
- Povišeni su zahtjevi za verzijom LLVM/Clang koja se može koristiti za kompajliranje jezgre. Sada je za kompajliranje potrebna najmanje verzija LLVM 13.0.1 (ranije je bila podržana verzija 11+).
- U mehanizam "User trace events", koji omogućava kreiranje događaja praćenja iz korisničkih procesa za praćenje aktivnosti u korisničkom prostoru, dodana je podrška za izvoz informacija o događaju u različitim formatima (USER_EVENT_REG_MULTI_FORMAT).
- U mehanizam praćenja pozivnih funkcija dodana je mogućnost praćenja stanja ulaznih argumenata funkcije prilikom praćenja izlaza iz funkcije. Vrijednosti operatora return sada se mogu povezati s argumentima koji su korišteni prilikom poziva funkcije.
- U utilitu perf dodana je podrška za način agregacije izlaza "cluster" ("perf stat -a --per-cluster") za objedinjavanje statistike dijeljenih resursa. Omogućena je upotreba biblioteke libcapstone za disasembleranje procesorskih instrukcija ("perf script -F disasm"). Provedene su optimizacije potrošnje memorije prilikom izvršavanja komandi perf report i perf annotate.
- Virtualizacija i sigurnost
- Dodana je zaštita od ranjivosti RFDS (Register File Data Sampling) u Intel Atom procesorima, koja omogućuje izdvajanje preostale informacije iz registara (RF, Register File) procesora, koji se koriste za zajedničko pohranjivanje sadržaja registara u svim zadacima na istom CPU jezgru. Za blokiranje ranjivosti potrebno je ažuriranje mikroprograma i korištenje instrukcije VERW za čišćenje sadržaja mikroarhitektonskih bafera prilikom povratka iz jezgre u korisnički prostor. Za omogućavanje zaštite prilikom podizanja jezgre može se postaviti oznaka „reg_file_data_sampling=on“. Informacije o podložnosti ranjivosti i dostupnosti potrebnog mikroprograma za zaštitu mogu se procijeniti u datoteci „/sys/devices/system/cpu/vulnerabilities/reg_file_data_sampling“.
- Dodana je osnovna podrška za zaštitu gostujućih sustava pomoću proširenja AMD SEV-SNP (Secure Nested Paging), koje osigurava sigurni rad s ugniježdenim tablicama stranica memorije i štiti od napada „undeSErVed“ i „SEVerity“ na AMD EPYC procesorima, koji omogućuju zaobilaženje mehanizma zaštite AMD SEV (Secure Encrypted Virtualization). KVM Neophodne izmjene za korištenje SNP planiraju se dodati u granu 6.10.
- Moduli s implementacijom tehnologija IMA (Integrity Measurement Architecture) i EVM (Extended Verification Module) prebačeni su na korištenje okvira LSM (Linux Security Modules), što je bez gubitka funkcionalnosti značajno pojednostavnilo kod, spojilo duplirajuću funkcionalnost i iskoristilo dostupne tipične mogućnosti kroz LSM. Modul IMA namijenjen je provjeri cjelovitosti komponenti operativnog sustava prema digitalnim potpisima i hashovima. Modul EVM omogućava zaštitu proširenih atributa datoteka (xattrs) od napada usmjerenih na narušavanje njihove cjelovitosti (EVM neće dopustiti offline napad, pri kojem napadač može promijeniti metapodatke, na primjer, podizajući se s vlastitog uređaja).
- Sistem pozivi lsm_list_modules(), lsm_get_self_attr() i lsm_set_self_attr() prilagođeni su za veću kompatibilnost s 32-bitnim okruženjima, a namijenjeni su za ispis liste učitanih LSM modula (Linux Security Modules) i dobivanje/postavljanje atributa LSM modula. Promjena krši unazadnu kompatibilnost, ali budući da su novi sistemski pozivi dodani u prošlom izdanju jezgre i za sada se ne koriste u aplikacijama, Linus Torvalds smatra da je promjena prihvatljiva.
- Pokušano je ponovo koristiti mehanizam UBSAN (Undefined Behavior Sanitizer). Suština problema je u tome što kompajleri različito obrađuju preopterećenja celih brojeva sa potpisanim i nepodpisanim tipovima. Potpisana preopterećenja i preopterećenja pokazivača spadaju u kategoriju neodređenog ponašanja, dok se nepodpisana preopterećenja odbacuju po modulu 2n, zadržavajući samo niže bitove rezultata („wrap-around“) i ne spadaju pod neodređeno ponašanje. Da bi se eliminisale situacije sa neodređenim ponašanjem, jezgro se kompajlira sa opcijom „-fno-strict-overflow“, što dovodi do korišćenja „wrap-around“ za sve preopterećenja celih brojeva. GCC i Clang ne mogu normalno dijagnostikovati neke probleme prilikom korišćenja oznake „-fno-strict-overflow“ i uključivanje UBSAN-a ima za cilj saradnju sa programerima kompajlera na eliminaciji lažnih alarma i identifikaciji preopterećenja brojeva na mestima gde nema eksplicitnih provera.
Za provere mogućih preopterećenja u jezgru koriste se konstrukcije poput „var + offset PAGE_SHIFT) < pgoff){..}"), koje su vezane za kompajliranje sa oznakom "-fno-strict-overflow" i ne obuhvataju ceo kod u kojem potencijalno može doći do preopterećenja. Problem je u tome što su s korišćenjem UBSAN-a ovakve provere dovodile do velikog broja lažnih upozorenja, i zbog toga je 2021. godine UBSAN morao biti isključen. U ažuriranoj implementaciji predloženo je korišćenje posebnih anotacija __signed_wrap i __unsigned_wrap, kao i gotovih makroa sa proverenim add_would_overflow(a, b) i add_wrap(a, b), koji omogućavaju odvajanje predviđenih korišćenja celih brojeva od slučajnih preopterećenja koja mogu dovesti do ranjivosti. Predlog za opširniju preradu jezgra sa uvođenjem dodatnih definicija tipova odbio je Linus Torvalds.
- Mrežni subsistem
- U mrežnoj podsistemi sprovedeni su radovi na smanjenju konkurentnog blokiranja („lock contention“, pokušaj dobijanja zaključavanja koje drži druga nit). Smanjena je upotreba RTNL zaključavanja.
- Dodana je mogućnost uključivanja podrške za aktivno ispitivanje utičnica (busy polling) u kontekstu pojedinačnih poziva epoll. Veličina pool-a i parametri budžeta mogu se postaviti odvojeno od sistemskih zadanih parametara.
- Implementirana je struktura net_hotdata za poboljšanje efikasnosti keširanja najčešće korištenih varijabli mrežne konfiguracije.
- U MPTCP je dodana podrška za postavljanje opcije TCP_NOTSENT_LOWAT za utičnice, koja omogućuje ograničavanje veličine međuspremnika za slanje. U API-ju za utičnice MCTP dodata je podrška za identifikatore mreže („network ID“), što omogućava korištenje više preklapajućih mreža MCTP na jednom hostu.
- U IPSec je dodana podrška za preusmjeravanje ICMP poruka s informacijama o greškama (RFC 4301).
- Ubrzan je proces skeniranja ruta s isteklim vremenom trajanja.
- Ubrzan je rad XDP-a zahvaljujući strožem izbjegavanju dodjele velikih blokova memorije.
- Dodana je mogućnost pridruživanja metapodataka porukama netconsole.
- U Netfilter-u dopušteno je definiranje iz prostora korisnika tablica koje se vežu uz upravljački pozadinski proces i ne brišu se automatski nakon završetka korisničke aplikacije.
- U nftables-u ubrzano je dodavanje elemenata u set-kolekcije s kombiniranim rasponima.
- Oprema
- U i915 drajveru nastavljen je rad na podršci za Intel LunarLake čipove (Xe 2). Dodani su novi PCI identifikatori za uređaje temeljen na Intel Arrow Lake i Alder Lake N čipovima. Za DisplayPort dodana je podrška za tuneliranje (DP tunneling) i dodjelu propusnosti (bandwidth allocation). Za sve platforme uključen je fastboot način rada. Dodana je podrška za ispravne izvoze povezanih na pojedinačne uređaje.
- U AMDGPU drajveru provedena je priprema za implementaciju podrške za AMD RDNA3.5 i RDNA4 GPU. Dodana je podrška za ATHUB 4.1, LSDMA 7.0, JPEG DPG, IH 7.0, HDP 7.0, VCN 5.0, SMU 13.0.6, NBIO 7.11, SDMA 6.1, MMHUB 3.3, DCN 3.5.1, NBIF 6.3.1, VPE 6.1.1 i RAS ACA framework. U kernel modul dodan je parametar freesync_video za uključivanje eksperimentalne podrške optimizacije prebacivanja video režima koristeći tehnologiju adaptivne sinkronizacije FreeSync.
- U Nouveau drajveru kod za upravljanje ekranom prebačen je da koristi funkciju kmemdup().
- Nastavak rada na drm drajveru (Direct Rendering Manager) Xe za GPU baziran na Intel Xe arhitekturi, koji se koristi u Intelovim grafičkim karticama obitelji Arc i integriranoj grafici, počevši s procesorima Tiger Lake.
- Dodana je DRM podrška za Mediatek MT8188 VDOSYS1 čipove.
- Povezane postavke za video sustave prebačene su u odjeljak CONFIG_VIDEO.
- Dodana je podrška za ARM64 SoC: Mediatek MT7981B (Filogic 820), MT7988A (Filogic 880), NXP i.MX8DXP, Renesas R8A779G2 (R-Car V4H ES2.0), R8A779H0 (R-Car V4M), TI J722S.
- Dodana je podrška za ARM platforme i uređaje: Android telefoni bazirani na Tegra30 čipu, Chromebook modeli na temelju Mediatek MT8186, NAS, tableti i igraće konzole na bazi Rockchips RK35xx, White Hawk ploče na bazi Renesas SoC, ploče na bazi Qualcomm SM8550 (Snapdragon 8 Gen 2), Apalis Evaluation Board, Sielaff i.MX6 Solo Board, Samsung Galaxy Tab 4 10.1 LTE.
- Provedena je refaktorizacija koda ALSA audio sustava. Dodana je podrška za audio sustave Microchip SAM9x7, NXP i.MX95 i Qualcomm WCD939x. U SoundWire drajveru dodana je podrška za ASoC sa zvučnim koprocesorima AMD ACP 6.3, a za Intel sustave implementiran je DSPless način. Dodana je podrška za dodatne audio kodeke Cirrus HD. U virtio drajveru poboljšano je upravljanje audio uređajima.
- Dodana je podrška za Ethernet kontrolere Marvell Octeon PCI Endpoint NIC VF i Intel E825-C 100G.
U isto vrijeme, latinoamerička Fondacija slobodnog softvera oblikovala je verziju potpuno slobodnog jezgra 6.9 - Linux-libre 6.9-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 6.9 ažuriran je kod za čišćenje blobova u drajverima amdgpu, ath12k, adreno, btusb i r8169. Provedeno je čišćenje novog drajvera ptp_fc3. Provedeno je čišćenje imena blobova u dts datotekama (devicetree) za Aarch64 arhitekturu. Ispravljeni su problemi s čišćenjem drajvera i915 koji su uzrokovali zastoje tijekom inicijalizacije. Unesene su promjene vezane uz obradu blobova, isporučenih u obliku heksadecimalnih isječaka.
Izvor: opennet.ru
