Po dveh mesecih razvoja je Linus Torvalds predstavil izdajo jedra Linux 6.3. Med najbolj opaznimi spremembami so: čiščenje zastarelih ARM platform in grafičnih gonilnikov, nadaljevanje integracije podpore za jezik Rust, orodje hwnoise, podpora za drevesne strukture red-black v BPF, način BIG TCP za IPv4, vgrajeno merjenje zmogljivosti Dhrystone, možnost prepovedi izvajanja v memfd, podpora za ustvarjanje HID gonilnikov s pomočjo BPF ter spremembe v Btrfs za zmanjšanje fragmentacije blokov.
V novo različico je sprejetih 15637 popravkov od 2055 razvijalcev; velikost popravka je 76 MB (spremembe so zajele 14296 datotek, dodanih je bilo 1023183 vrstic kode, odstranjeno 883103 vrstic). Za primerjavo prejšnja različica je ponujala 16843 popravkov od 2178 razvijalcev; velikost popravka je bila 62 MB. Približno 39% vseh sprememb v jedru 6.3 je povezanih z gonilniki naprav, približno 15% sprememb se nanaša na posodobitev kode, specifične za strojne arhitekture, 10% je povezano z omrežnim steklom, 5% z datotečnimi sistemi in 3% z notranjimi podsystemi jedra.
Glavne novosti v jedru 6.3:
- Pomnilnik in sistemske storitve
- Izvedeno je bilo obsežno čiščenje kode, povezane s starimi in neuporabljenimi ARM platformami, kar je omogočilo zmanjšanje velikosti izvorne kode jedra za 150 tisoč vrstic. Odstranjenih je bilo več kot 40 starih ARM platform.
- Uvedena je možnost ustvarjanja gonilnikov za naprave za vhod z vmesnikom HID (Human Interface Device), ki so implementirani v obliki BPF programov.
- Nadaljuje se prenos dodatne funkcionalnosti iz veje Rust-for-Linux, povezane z uporabo jezika Rust kot drugega jezika za razvoj gonilnikov in modulov jedra. Podpora za Rust ni privzeto aktivna in ne zahteva vključitve Rust-a v seznam obveznih odvisnosti jedra. Predlagana funkcionalnost iz prejšnjih izdaj je razširjena s podporo za tipe Arc (implementacija kazalcev s števcem referenc), ScopeGuard (izvaja čiščenje pri izstopu iz obsega) in ForeignOwnable (omogoča premikanje kazalcev med kodo v C in Rust). Iz paketa 'alloc' je bil odstranjen modul 'borrow' (tip 'Cow' in tipaža 'ToOwned'). Opaža se, da je stanje podpore za Rust v jedru že blizu tega, da začne sprejemati prve module, napisane v Rust-u.
- V User-mode Linux (zagon jedra kot uporabniškega procesa) na sistemih x86-64 je bila dodana podpora za kodo, napisano v jeziku Rust. Dodana je podpora za gradnjo User-mode Linux s pomočjo clang z vključitvijo optimizacij v fazi povezovanja (LTO).
- Dodana je orodje hwnoise za sledenje zakasnitev, ki jih povzročajo posebnosti delovanja strojne opreme. Določajo se odmiki v času izvajanja operacij (jitter) pri izklopu obdelave prekinitev, ki presegajo mikrosekundo v 10 minutah izračunov.
- Dodan je jedrni modul z implementacijo testiranja zmogljivosti Dhrystone, ki ga lahko uporabimo za ocenjevanje zmogljivosti CPU v konfiguracijah brez komponent uporabniškega prostora (na primer, v fazi prenosov za nove SoC, na katerih je implementirano le nalaganje jedra).
- Dodana je parameter za ukazno vrstico jedra 'cgroup.memory=nobpf', ki onemogoča upoštevanje porabe pomnilnika za BPF programe, kar je lahko koristno za sisteme z izoliranimi kontejnerji.
- Za BPF programe je bila predlagana implementacija podatkovne strukture rdeče-črne drevo, ki uporablja kfunc + kptr (bpf_rbtree_add, bpf_rbtree_remove, bpf_rbtree_first) namesto dodajanja novega tipa preslikave.
- V mehanizem ponovljivih zaporedij (rseq, restartable sequences) je bila dodana možnost posredovanja procesom identifikatorjev vzporednega izvajanja (memory-map concurrency ID), ki so identificirani s številko CPU. Rseq zagotavlja sredstva za hitro atomsko izvajanje operacij, ki se v primeru prekinitev z drugim tokom očistijo in poskusi se ponovnega izvajanja.
- Na procesorjih ARM je bila zagotovljena podpora za ukaze SME 2 (Scalable Matrix Extension).
- Za arhitekture s390x in RISC-V RV64 je bila implementirana podpora za mehanizem 'BPF trampoline', ki omogoča minimiziranje stroškov pri prenosu klicev med jedrom in BPF programi.
- Na sistemih s procesorji, temelječimi na arhitekturi RISC-V, je bila implementirana uporaba ukazov 'ZBB' za pospeševanje operacij s nizi.
- Za sisteme, ki temeljijo na arhitekturi naborov ukazov LoongArch (uporablja se v procesorjih Loongson 3 5000 in implementira nov RISC ISA, podoben MIPS in RISC-V), je bila implementirana podpora za randomizacijo naslovnega prostora jedra (KASLR), spreminjanje postavitve jedra v pomnilniku (relocation), strojne točke za ustavljanje in mehanizem kprobe.
- V mehanizmu DAMOS (Sheme delovanja, ki temelji na spremljanju dostopa do podatkov), ki omogoča sprostitev pomnilnika ob upoštevanju frekvence dostopa do pomnilnika, je bila izvedena podpora za filtre, ki iz procesa v DAMOS izključujejo določena pomnilniška območja.
- V minimalni standardni C knjižnici Nolibc je bila dodana podpora za arhitekturo s390 in nabor ukazov Arm Thumb1 (poleg podpore za ARM, AArch64, i386, x86_64, RISC-V in MIPS).
- Izvedena je bila optimizacija objtool za pospešitev zbiranja jedra in zmanjšanje vrha porabe pomnilnika pri zbiranju (pri zbiranju jedra v načinu 'allyesconfig' sedaj ne prihaja do težav s prisilno zaustavitvijo procesov na sistemih s 32 GB RAM-a).
- Podpora za zbiranje jedra s prevajalnikom Intel ICC je bila ukinjena, saj ta že dolgo ni delovala in nihče ni izrazil želje po njeni odpravi.
- Дисковая подсистема, ввод/вывод и файловые системы
- V tmpfs je bila uvedena podpora za preslikovanje identifikatorjev uporabnikov v mountane datotečne sisteme, kar se uporablja za usklajevanje datotek določenega uporabnika na montirani tuji particiji z drugim uporabnikom v trenutnem sistemu.
- V Btrfs je za zmanjšanje fragmentacije skupin blokov zagotovljeno ločevanje ekstenzov po velikosti pri dodeljevanju blokov, tj. vsaka skupina blokov je sedaj omejena na majhne (do 128 KB), srednje (do 8 MB) in velike ekstente. Opravljena je bila refaktorizacija implementacije raid56. Koda za preverjanje kontrolnih zneskov je bila prenovljena. Vnesene so bile optimizacije zmogljivosti, ki so omogočile do 10-kratno pospešitev operacije send zahvaljujoč predpomnjenju utime za imenike in izvajanju ukazov le po potrebi. Izvajanje operacij fiemap je bilo pospešeno trikrat z izpusti preverjanj povratnih referenc za skupne podatke (snapshot). Operacije z metapodatki so bile pospešene za 10% z optimizacijo iskanja ključev v strukturah b-tree.
- Zmogljivost datotečnega sistema ext4 je bila izboljšana z možnostjo sočasnega izvajanja operacij neposrednega vnosa/izvoda z več procesi v vnaprej dodeljene bloke, ki uporabljajo skupne zaklepe inode namesto ekskluzivnega zaklepa.
- V f2fs je bilo delo usmerjeno v izboljšanje berljivosti kode. Rešeni so bili pomembni problemi, povezani z atomic write in novim predpomnilnikom ekstenzov.
- V datotečnem sistemu EROFS (Enhanced Read-Only File System), ki je namenjen uporabi v particijah, dostopnih v načinu samo za branje, je bila реализирована sposobnost vezave operacij razpakiranja stisnjenih vsebin datotek na CPU za zmanjšanje zamud pri dostopu do podatkov.
- V načrtovalnik vhod-/izhodnih operacij BFQ je dodana podpora za napredne naprave na vrtečih se diskih, na primer tiste, ki uporabljajo več ločeno upravljanih pogonov glav (Multi Actuator).
- V implementacijo odjemalca in strežnika NFS je dodana podpora za šifriranje podatkov z uporabo algoritma AES-SHA2.
- V podskladu FUSE (Filesystems In User Space) je bila dodana podpora za mehanizem razširitve zahtevkov, ki omogoča dodajanje dodatnih informacij v zahtevek. Na podlagi te možnosti je bilo реализirano dodajanje identifikatorjev skupin k zahtevku FS, kar je potrebno za obravnavo pravic dostopa pri ustvarjanju objektov v FS (create, mkdir, symlink, mknod).
- Virtualizacija in varnost
- V hipervizor KVM za sisteme x86 je dodana podpora za razširjene hipervizoreske klice Hyper-V ter omogočeno njihovo posredovanje v obdelovalec, ki deluje v gostiteljskem okolju v uporabniškem prostoru. Sprememba je omogočila izvedbo podpore za vgrajeno zagon hipervizorja Hyper-V.
- V KVM je poenostavljeno omejevanje dostopa gostujočega sistema do dogodkov PMU (Performance Monitor Unit), povezanih z merjenjem uspešnosti.
- V mehanizmu memfd, ki omogoča identifikacijo pomnilniškega območja preko posredovanega datotečnega deskriptorja med procesi, je dodana možnost ustvarjanja območij, v katerih je prepovedana izvedba kode (non-executable memfd) in v prihodnje ni mogoče dodeliti pravic za izvajanje.
- Dodana je nova prctl-operacija PR_SET_MDWE, ki blokira poskuse vklopa pravic dostopa do pomnilnika, ki hkrati dovoljujejo pisanje in izvajanje.
- Dodana in privzeto omogočena zaščita pred napadi razreda Spectre, реализirana na podlagi predlaganega v procesorjih AMD Zen 4 samodejnega načina IBRS (Enhanced Indirect Branch Restricted Speculation), ki omogoča adaptivno dovoljevanje in prepovedovanje spekulativnega izvajanja ukazov med obdelavo prekinitev, sistemskih klicev in preklapljanja konteksta. Predlagana zaščita povzroča manjše stroške v primerjavi z zaščito Retpoline.
- Odpravljena je ranljivost, ki omogoča obhod zaščite pred napadi Spectre v2 pri uporabi tehnologije sočasnega večnitnega izvajanja (SMT ali Hyper-Threading) in povzročena z izklopom mehanizma STIBP (Single Thread Indirect Branch Predictors) pri izbiri načina zaščite IBRS.
- Za sisteme, ki temeljijo na arhitekturi ARM64, je bila dodana nova ciljna konfiguracija 'virtconfig', pri izbiri katere se aktivira le minimalni nabor komponent jedra, potrebnih za nalaganje v virtualizacijskih sistemih.
- Za arhitekturo m68k je bila dodana podpora za filtriranje sistemskih klicev z mehanizmom seccomp.
- Dodana je podpora za vgrajene v procesor AMD Ryzen naprave CRB TPM2 (Command Response Buffer), ki temeljijo na tehnologiji Microsoft Pluton.
- Mrežna podsistem
- Dodano je netlink vmesnik za konfiguracijo podosnovnega nivoja preprečevanja trkov PLCA (Physical Layer Collision Avoidance), določenega v specifikaciji IEEE 802.3cg-2019 in uporabljenega v Ethernet omrežjih 802.3cg (10Base-T1S), optimiziranih za povezovanje naprav interneta stvari in industrijskih sistemov. Uporaba PLCA omogoča povečanje zmogljivosti v Ethernet omrežjih s skupno okolico (shared media).
- Podpora za API 'wireless extensions' za upravljanje brezžičnih vmesnikov WiFi 7 (802.11be) je bila prenehana, ker ta API ne pokriva vseh potrebnih nastavitev. Pri poskusu uporabe API 'wireless extensions', ki se še naprej podpira kot emulirani sloj, bo pri večini sodobnih naprav zdaj izpisano opozorilo.
- Pripravljena je podrobna dokumentacija za API netlink (za razvijalce jedra in razvijalce aplikacij v uporabniškem prostoru). Uresničena je orodje ynl-gen-c za generacijo C kode na podlagi YAML specifikacij protokola Netlink.
- V omrežne vtičnice je bila dodana podpora za možnost IP_LOCAL_PORT_RANGE za poenostavitev nastavitve odhodnih povezav prek prevajalnikov naslovov brez uporabe SNAT. Pri uporabi enega IP-naslove na več gostiteljih IP_LOCAL_PORT_RANGE omogoča uporabo svojega razpona odhodnih omrežnih prenosov na vsakem gostitelju, na prehodu pa preusmerjanje paketov na podlagi številk prenosov.
- Za MPTCP (MultiPath TCP) je omogočena obdelava mešanih tokov, ki uporabljajo protokole IPv4 in IPv6. MPTCP predstavlja razširitev protokola TCP za organizacijo delovanja TCP-povezave z dostavo paketov hkrati po več poteh preko različnih omrežnih vmesnikov, povezanih z različnimi IP-naslovi.
- Za IPv4 je omogočena uporaba razširitve BIG TCP, ki omogoča povečanje največje velikosti TCP-paketa na 4 GB za optimizacijo delovanja visokohitrostnih notranjih omrežij podatkovnih centrov. Takšno povečanje velikosti paketa pri 16-bitnem velikosti polja v glavi se doseže z izvajanjem "jumbo" paketov, kjer je velikost v IP-glavi nastavljena na 0, dejanska velikost pa se posreduje v ločenem 32-bitnem polju v priloženem ločenem naslovu.
- Dodana je nova sysctl-spremenljivka default_rps_mask, s katero je mogoče določiti privzeto konfiguracijo RPS (Receive Packet Steering), odgovorno za porazdelitev obdelave prihajajočega prometa po CPU-jedrih na ravni obdelovalcev prekinitev.
- Podpora za razrede obdelave čakalnih vrst za omejevanje prometa CBQ (class-based queuing), ATM (ATM virtual circuits), dsmark (differentiated service marker), tcindex (traffic-control index) in RSVP (resource reservation protocol) je prenehana. Ti razredi so dolgo časa bili zapuščeni in ni bilo nikogar, ki bi nadaljeval njihovo vzdrževanje.
- Oprema
- Odstranjeni so vsi grafični gonilniki na osnovi DRI1: i810 (stare integrirane grafične kartice Intel 8xx), mga (Matrox GPU), r128 (ATI Rage 128 GPU, vključno s karticami Rage Fury, XPERT 99 in XPERT 128), savage (S3 Savage GPU), sis (Crusty SiS GPU), tdfx (3dfx Voodoo) in via (VIA IGP), ki so bili razglašeni za zastarele leta 2016 in niso bili podprti v Mesu od leta 2012.
- Odstranjeni so zastareli gonilniki okvirnega predpomnilnika (fbdev) omap1, s3c2410, tmiofb in w100fb.
- Dodan je DRM-gonilnik za v CPU Intel Meteor Lake (14. generacija) vgrajene enote VPU (Versatile Processing Unit), namenjene pospeševanju operacij, povezanih s računalniškim vidom in strojno učenje. Gonilnik je izveden z uporabo podsystema "accel", ki je osredotočen na zagotavljanje podpore pospeševalnikom izračunov, ki se lahko dobavljajo v obliki ločenih ASIC-ov ali video IP-blokov znotraj SoC in GPU.
- V gonilniku i915 (Intel) je bila razširjena podpora za diskretne grafične kartice Intel Arc (DG2/Alchemist), izvedena je predhodna podpora za GPU Meteor Lake in dodana podpora za GPU Intel Xe HP 4tile.
- V gonilniku amdgpu je bila dodana podpora za tehnologijo AdaptiveSync in možnost uporabe več zaslonov v načinu zaščite pred kršitvijo prikazanih podatkov (Secure Display). Posodobljena je podpora DCN 3.2 (Display Core Next), SR-IOV RAS, VCN RAS, SMU 13.x in DP 2.1.
- V gonilniku msm (GPU Qualcomm Adreno) je bila dodana podpora za platforme SM8350, SM8450, SM8550, SDM845 in SC8280XP.
- V gonilniku Nouveau je prenehana podpora za stare klice ioctl.
- V gonilniku etnaviv je bila dodana poskusna podpora za NPU VerSilicon (VeriSilicon Neural Network Processor).
- Uveden je gonilnik pata_parport za IDE naprave, povezane prek paralelnega vrata. Dodani gonilnik je omogočil odstranitev starega gonilnika PARIDE iz jedra in posodobitev pod sistemas ATA. Omejitev novega gonilnika je nemogoče hkratno povezati tiskalnik in disk prek paralelnega porta.
- Dodani so gonilniki ath12k za brezžične kartice na čipih Qualcomm s podporo za Wi-Fi 7. Dodana je podpora za brezžične kartice na čipih RealTek RTL8188EU.
- Dodana je podpora za 46 plošč z ARM64 arhitekturo procesorjev, med njimi Samsung Galaxy tab A (2015), Samsung Galaxy S5, BananaPi R3, Debix Model A, EmbedFire LubanCat 1/2, Facebook Greatlakes, Orange Pi R1 Plus, Tesla FSD, ter naprave na osnovi SoC Qualcomm MSM8953 (Snapdragon 610), SM8550 (Snapdragon 8 Gen 2), SDM450 in SDM632, Rockchips RK3128 TV box, RV1126 Vision, RK3588, RK3568, RK3566, RK3588 in RK3328, TI K3 (AM642/AM654/AM68/AM69).
Hkrati je latinskoameriška Fundacija prostega programske opreme oblikovala različico popolnoma prostega jedra 6.3 — Linux-libre 6.3-gnu, očiščenega od elementov programske opreme in gonilnikov, ki vsebujejo nesvobodna komponenta ali kose kode, katerih uporaba je omejena s strani proizvajalca. V izdaji 6.3 je bila opravljena čiščenje blobov v novih gonilnikih ath12k, aw88395 in peb2466, prav tako v novih datotekah devicetree za naprave qcom na osnovi arhitekture AArch64. Posodobljen je koda za čiščenje blobov v gonilnikih in pod sistemih amdgpu, xhci-rcar, qcom-q6v5-pas, sp8870, av7110, prav tako v gonilnikih za DVB kartice s programsko dekodiranjem in v predkompajliranih BPF datotekah. Čiščenje v gonilnikih mga, r128, tm6000, cpia2 in r8188eu je bilo prekinjeno, saj so bili odstranjeni iz jedra. Izboljšana je bila čistost gonilnika i915.
Izvor: opennet.ru
