Po dveh mesecih razvoja je Linus Torvalds izdal jedro. Linux 7.2. Med najbolj opaznimi spremembami: mehanizem pretakanja podatkov USB4STREAM, optimizacije delovanja btrfs, xfs in ext4, nadaljnje odstranjevanje kode za podporo procesorja i486, možnost ustvarjanja ugnezdenih razporejevalnikov SCHED_EXT, zmanjšana poraba pomnilnika v podsistemu swap, pospešene neimenovane cevi, podpora za razširitve Intel MBEC in AMD GMET v KVM, odstranitev protokola AppleTalk, začetna podpora za HDMI 2.1 FRL v gonilniku AMDGPU.
Glavne nove funkcije v jedru 7.2 (1, 2, 3):
- Diskovni podsistem, V/I in datotečni sistemi
- V mehanizmu iomap je bil odstranjen dodaten klic funkcije memset za že zaključene iteracije v funkciji iomap_iter(), ki je pri visoki intenzivnosti V/I na hitrih NVMe pogonih v testih, izvedenih z uporabo datotečnih sistemov ext4 in xfs, povečal število vhodno/izhodnih operacij na sekundo (IOPS) za 5 %.
- XFS je bil razglašen za stabilnega za podporo coniranih naprav za shranjevanje (razdelitev skupin blokov ali sektorjev v cone, v katere je dovoljeno le zaporedno dodajanje podatkov, posodabljanje celotne skupine blokov).
- Btrfs zdaj privzeto podpira velike folije, kar zmanjšuje stroške in izboljšuje zmogljivost med intenzivnim zaporednim vhodno/izhodnim delovanjem. Dodana je bila eksperimentalna podpora za ogromne folije (do 2 MB). Dodan je bil nov ioctl, GET_CSUMS, za pridobivanje informacij o kontrolni vsoti v uporabniškem prostoru, na primer za pripomoček mkfs in optimizacijo deduplikacije. Zmogljivost zaporednega pisanja se je povečala za 15 %, zmogljivost neposrednega vhodno/izhodnega delovanja pa za 59 %.
- Mehanizem »hitrega zapisa« datotečnega sistema Ext4 je bil bistveno preoblikovan, da bi odpravil konflikte in zastoje. Dodan je bil izvoz statistike posnetkov inode prek /proc/fs/ext4/*/fc_info. Optimizirana je bila zmogljivost izračuna zgoščene vrednosti imenika (skoraj podvojitev hitrosti za 255-znakovna imena, 27 % za 64-znakovna imena in 11 % za 32-znakovna imena).
- F2FS zdaj podpira vračanje napak fserror, kar omogoča spremljanje težav z datotečnim sistemom iz uporabniškega prostora. Čas, porabljen za obravnavo prekinitev, se je zmanjšal.
- V Device Mapper (DM) je bil dodan nov upravljalnik dm-inlinecrypt za pregledno šifriranje in dešifriranje blokovnih naprav z uporabo strojne opreme z inline šifrirno funkcionalnostjo.
- Na voljo je dokumentacija o dodajanju novih datotečnih sistemov v jedro.
- V NFS je bila privzeta velikost bloka povečana na 4 MB v sistemih z vsaj 16 GB RAM-a (za ročno spreminjanje velikosti bloka lahko uporabite /proc/fs/nfsd/max_block_size). Dodana je bila podpora za delegiranje imenikov, ki omogoča izvajanje operacij z danim imenikom določeno časovno obdobje brez preverjanja sprememb stanja. strežnika.
- Strežnik SMB zdaj podpira datoteke, shranjene v stisnjeni obliki, kot tudi stiskanje podatkov med prenosom po omrežju.
- Nova implementacija NTFS (ntfsplus) dodaja podporo za simbolne povezave. Windows in zagotovljena je pravilna obravnava številnih vrst poškodb metapodatkov.
- Zaledni sistem fscache za predpomnjenje podatkov EROFS (Enhanced Read-Only File System), ki je bil pred dvema letoma opuščen, je bil odstranjen.
- Ceph FS zdaj podpira ročno ponastavitev odjemalskih sej.
- Datotečni sistem 9P je bil optimiziran za izboljšanje zmogljivosti v scenarijih, kot so gradnje projektov.
- Sistemskemu klicu file_getattr() so bile dodane zastavice za pridobivanje informacij o občutljivosti datotečnega sistema na velike in male črke. Zastavica FS_XFLAG_CASEFOLD označuje, da se preverjanje imena datoteke izvaja brez razlikovanja med velikimi in malimi črkami, zastavica FS_XFLAG_CASENONPRESERVING pa označuje, da se podatki o velikih in malih črkah ne ohranijo pri ustvarjanju novih imen datotek. Te zastavice se lahko uporabljajo v odjemalcih NFS, ki ne razlikujejo med velikimi in malimi črkami.
- Sistemskemu klicu openat2() je bila dodana zastavica O_EMPTYPATH, ki omogoča posredovanje prazne poti do datoteke. V tem primeru se pot do datoteke, ki se odpira, določi na podlagi posredovanega deskriptorja datoteke.
- Sistemskemu klicu openat2() je bila dodana zastavica OPENAT2_REGULAR, ki dovoljuje odpiranje samo navadnih datotek (če se poskuša odpreti posebna datoteka, kot je vtičnica, cev ali naprava, bo vrnjena napaka EFTYPE).
- Pomnilniške in sistemske storitve
- Mehanizem USB4STREAM je bil implementiran za pretakanje podatkov med računalniki, povezanimi prek vrat USB4. Dodana je bila naprava /dev/tbstreamX, ki omogoča branje in pisanje podatkov z uporabo standardnih funkcij read() in write(), podobno kot pri branju in pisanju datotek. Na primer, na enem gostitelju lahko pošljete informacije z ukazom »echo hello > /dev/tbstream0«, na drugem pa jih preberete z ukazom »cat /dev/tbstream0«. Mehanizem USB4STREAM je mogoče kombinirati z možnostjo vzpostavitve omrežne povezave prek kabla USB4 (thunderbolt_net) ali pa ga uporabiti ločeno za prenos podatkov med aplikacijami, ki ne podpirajo omrežnih vtičnic.
- Vključena je bila druga serija sprememb za odpravo podpore za procesorje i486. Odstranjenih je bilo več kot 13 vrstic kode, povezane z emulacijo enot s plavajočo vejico za procesorje brez FPU. Podpora za procesorje i486 brez strojnih operacij CX8 (primerjava in izmenjava 8 bajtov) in TSC (števec ciklov CPU, ki se uporablja v razporejevalniku opravil) je bila odstranjena, saj je bila odstranjena tudi emulacijska koda za te operacije.
- Podpora za procesorje AMD Geode, ki se uporabljajo v računalniku OLPC XO-1, je bila razglašena za osirotela.
- Dodana je podpora za posodobitev implementacije Intelovega TDX (Trusted Domain Extensions), mehanizma, ki se uporablja za šifriranje RAM-a gostujočega sistema. TDX je implementiran kot poseben programski izvajalni modul, ki ga BIOS med zagonom prenese iz bliskovnega pomnilnika v RAM. Jedro zdaj vključuje zmožnosti za upravljanje tega modula in njegovo zamenjavo z novejšo različico v delujočem sistemu brez potrebe po ponovnem zagonu.
- Implementiran je bil nov razporejevalnik dodeljevanja virov GPU (Fair GPU scheduler). Uporablja se za določanje vrstnega reda, v katerem se delo, ki ga oddajo procesi, ki uporabljajo GPU, izvaja na GPU. Namesto uporabe tradicionalne čakalne vrste FIDO za zahteve GPU novi razporejevalnik uporablja mehanizme za pošteno dodeljevanje virov, ki temeljijo na razporejevalniku opravil Completely Fair Scheduler (CFS), ki uporablja načrt zagona s prehodnim časom za naslednji proces. Najbolj opazen učinek novega razporejevalnika je opazen med vzporednim izvajanjem interaktivnih nalog, ki močno uporabljajo GPU. V zadnjem trenutku pred izdajo jedra 7.2 je bil razporejevalnik Fair GPU deaktiviran, stari razporejevalnik FIFO pa je bil ponastavljen zaradi potrebe po odpravljanju napak regresije, ki je povzročala zmanjšanje zmogljivosti in 100-odstotno izkoriščenost GPU pri zagonu določenih iger v Protonu.
- Spremembe v podsistemu eBPF: Dodana je možnost priklopa enega programa BPF na več sledilnih točk. Programi BPF, priklopljeni na sledilne točke, lahko zdaj dostopajo do pomnilnika komponent uporabniškega prostora s pravilnim ravnanjem z nedodeljenimi stranmi pomnilnika (napake strani). Sistemski klic bpf() zdaj podpira standardne atribute (log_buf, log_size, log_level in log_true_size), kar omogoča poenoten prenos metapodatkov med vsemi ukazi BPF, ne le z BPF_PROG_LOAD, BPF_BTF_LOAD in BPF_MAP_CREATE. Odstranjena je bila omejitev posredovanja največ 5 parametrov funkcijam BPF. Dodana je bila možnost varnega dostopa do skupnega pomnilnika bpf_arena brez strahu pred dostopom do nedodeljenih strani pomnilnika (napake strani). Implementirana je bila nova različica strukture zgoščevalnega zemljevida BPF, ki omogoča dinamično spreminjanje velikosti.
- Optimizirano je bilo generiranje izhoda "/proc/interrupts" s statistiko prekinitev, posodobljene so bile strukture za shranjevanje števcev prekinitev in dodano je bilo predpomnjenje.
- Generiranje datoteke »/proc/filesystems«, ki se uporablja v libselinuxu, je bilo pospešeno.
- Razporejevalnik opravil zdaj podpira uravnoteženje obremenitve med jedri procesorja, pri čemer upošteva stanje notranjega predpomnilnika procesorja. Razporejevalnik zdaj poskuša združiti procese z uporabo skupnih virov, kot so niti znotraj enega procesa, da si delijo isti visokonivojski predpomnilnik, kar izboljša učinkovitost dostopa do podatkov s povečanjem verjetnosti, da bodo zahtevani podatki najdeni v predpomnilniku.
- Mehanizem SCHED_EXT, ki omogoča uporabo BPF za ustvarjanje razporejevalnikov CPU, je še naprej izvajal možnost ustvarjanja ugnezdenih razporejevalnikov (podrazporejevalnikov), ki vsaki kontrolni skupini omogočajo uporabo lastnega razporejevalnika opravil.
- Nadaljevanje migracije sprememb iz Rust-for-branchLinux, povezano z uporabo Rusta kot drugega jezika za razvoj gonilnikov in modulov jedra (podpora za Rust ni privzeto omogočena in ne vključuje Rusta kot obvezne odvisnosti pri gradnji jedra). Podpora za Rust v jedru je bila implementirana za arhitekturo s390. Vključen je paket »zerocopy«, ki zagotavlja hitre pomnilniške primitive za kodo v »nevarnem« načinu.
- Najmanjša različica nabora orodij LLVM, potrebna za gradnjo jedra, je bila povečana na 17.0.1.
- V minimalistični knjižnici C nolibc, ki je priložena izvorni kodi jedra Linux in zagotavlja ogrodje za osnovne sistemske klice, ki podpirajo arhitekturi OpenRISC in 32-bitne PA-RISC.
- Podsistem swap je bil optimiziran za izboljšanje zmogljivosti in zmanjšanje porabe pomnilnika znotraj samega podsistema z odpravo režijskih stroškov pri shranjevanju statičnih metapodatkov in poenotenjem anonimnega in deljenega pomnilnika pri uporabi tomov. Zmanjšanje pomnilnika je precejšnje; na primer, namestitev 1 TB swap particije zmanjša porabo pomnilnika za približno 512 MB.
- Izboljšana je bila zmogljivost mehanizma za izselitev pomnilnika, ki izbriše ali premakne pomnilnik v prostor za zamenjavo, da sprosti pomnilnik, ko je sistem pod obremenitvijo. Pri določenih obremenitvah, na primer pri testiranju MongoDB z uporabo YCSB (Yahoo! Cloud Serving Benchmark), so opazili do 30-odstotno povečanje zmogljivosti.
- V sistem za gradnjo je bil dodan ukaz »make sbom« za ustvarjanje seznamov SBOM (programski seznam materialov), ki odražajo komponente, knjižnice in odvisnosti, uporabljene v trenutni gradnji jedra, ter njihove licenčne podatke, pridobljene iz glav SPDX v kodnih datotekah.
- Implementacija neimenovanih cevi je bila optimizirana za obravnavo zaklepov (operacije dodeljevanja pomnilnika so premaknjene izven obsega zaklepa), kar je povečalo prepustnost neimenovanih cevi za 21–48 % in zmanjšalo zakasnitev za 17–33 %.
- Virtualizacija in varnost
- Alokator slabov zdaj podpira uporabo žetonov za dodeljevanje, ki so implementirani v prevajalniku Clang 22. Žetoni omogočajo enolične identifikatorje za operacije dodeljevanja pomnilnika in ločeno dodeljevanje različnih vrst objektov, kar otežuje izkoriščanje ranljivosti prelivanja medpomnilnika (z ločevanjem prelivanja medpomnilnika v eni vrsti objekta ni enostavno izkoristiti za poškodovanje drugih vrst objektov).
- Mehanizem AF_ALG, ki se izkorišča v ranljivosti Copy Fail za spreminjanje podatkov v predpomnilniku strani, je bil opuščen in je predviden za odstranitev v prihodnji izdaji. AF_ALG omogoča strojne pospeševalnike za kriptografske izračune v jedrnem Crypto API-ju, vendar se uporablja v precej specifičnih situacijah. V jedru 7.2 je bila iz AF_ALG odstranjena podpora za asinhroni V/I, starejše gonilnike in mehanizem ničelnega kopiranja v implementacijah skcipher in aead. Ohranjene so le programske implementacije kriptografskih algoritmov, podpora za strojne kriptografske pospeševalnike v jedrnem Crypto API-ju pa je bila odstranjena, saj AF_ALG znatno širi površino napada, vendar ne zagotavlja nobene izboljšave zmogljivosti v primerjavi z implementacijami kriptografije v uporabniškem prostoru. AF_ALG se je uporabljal v kompletu orodij Cryptsetup, vendar je bila njegova podpora odstranjena v nedavni izdaji 2.8.7.
- Mehanizem IMA (Integrity Measurement Architecture), ki zunanji storitvi omogoča preverjanje stanja podsistemov jedra in zagotavljanje njihove pristnosti, je bil dopolnjen s podporo za izvoz notranjih tabel z rezultati meritev v uporabniški prostor in njihovo brisanje iz medpomnilnikov jedra za prihranek pomnilnika.
- V modulu Landlock, ki programom brez privilegijev omogoča omejevanje uporabe objektov jedra Linux (hierarhije datotek, omrežne vtičnice, ioctl itd.), dodana je bila podpora za nadzor dostopa do vtičnic UDP, kot tudi možnost selektivnega onemogočanja izpisa informacij o zaklepanju objektov v dnevnik, da se prepreči natrpanost dnevnika z nepomembnimi informacijami.
- Jedro je opustilo uporabo funkcije strncpy(), ki kopira določeno število bajtov iz vhodnega niza. Uporaba strncpy() je ustvarila tveganje napak zaradi manjkajočega ničelnega znaka na koncu niza ali dodatnega dopolnjevanja z ničlami. Namesto strncpy() je priporočljivo uporabljati funkciji strscpy() in strscpy_pad() za kopiranje nizov, ki se končajo z ničlo, ter strtomem_pad(), memcpy_and_pad() in memcpy() za kopiranje nizov znane fiksne velikosti. Delo za opustitev uporabe strncpy() v jedru se je začelo leta 2020 in je zahtevalo 362 potrjevanj (commit) od 70 razvijalcev.
- V hipervizorju KVM Dodana je bila podpora za razširitvi Intel MBEC (Mode-Based Execution Control) in AMD GMET (Guest-Mode Execution Trap), ki omogočata ločeno obravnavo pravic izvajanja v jedru in uporabniškem prostoru v gostujočih sistemih v tabelah prevajanja pomnilnika. Prej so razširitve za virtualizacijo strojne opreme Intel in AMD omogočale označevanje pomnilniških strani kot izvedljivih z enim samim bitom, s programsko ločitvijo pravic jedra in uporabniškega prostora na ravni hipervizorja. Uporaba MBEC in GMET odpravlja preverjanja dovoljenj na strani hipervizorja in znatno zmanjšuje prenose nadzora, ki porabijo veliko virov, iz gostujočega sistema v hipervizor VMexit.
- Omrežni podsistem
- Razširitev TCP-AO (TCP Authentication Option, RFC 5925) je bila prenesena v novo kriptografsko knjižnico libcrypto, kar poenostavlja kodo in izboljšuje njeno delovanje. TCP-AO omogoča preverjanje glav TCP z uporabo kod MAC (Message Authentication Code) z uporabo sodobnejših algoritmov HMAC-SHA-1-96 in AES-128-CMAC-96, s čimer je nadomestila prej dostopno možnost TCP-MD5, ki se je zanašala na zastareli algoritem MD5.
- Število podtokov, podprtih za povezave Multipath TCP (MPTCP), se je povečalo z 8 na 64.
- Nadaljevalo se je delo za zmanjšanje uporabe globalnega zaklepanja rtnl_lock v omrežnem skladu jedra.
- Jedro je odstranilo implementacijo protokolnega sklada AppleTalk, ki se je v računalnikih Apple uporabljal od leta 1985 in ga je v devetdesetih letih prejšnjega stoletja nadomestil ... TCP/IPPoleg tega so bile odstranjene komponente tehnologije prenosa podatkov ATM, ki niso povezane s PPPoATM, pa tudi omrežni vmesniki ARCnet, ki temeljijo na vodilih ISA in PCMCIA, adapterji Bluetooth z vmesnikom PCMCIA, pospeševalniki TLS Chelsea, koda za integracijo TLS s sockmap in podpora za frekvenčna pasova 5/10 MHz v brezžičnem skladu cfg80211/mac80211. Zaradi nerešenih težav z blokiranjem in pomanjkanja vzdrževalcev je bila odstranjena specifična implementacija pospeševanja obdelave TLS, ki temelji na mehanizmu za razkladanje TCP (ohranjena je bolj pogosta implementacija razkladanja TLS). Koda za združljivost z 32-bitnimi x_tables na 64-bitnih sistemih je bila onemogočena in je predvidena za odstranitev.
- Gonilnik pppoe zdaj podpira mehanizma GRO (Generic Receive Offload) in GSO (Generic Segmentation Offload) za strojno pospeševanje ponovnega sestavljanja in segmentacije paketov. Uporaba GRO in GSO znatno poveča prepustnost dohodnega prometa. Na primer, na napravah MediaTek MT7621, konfiguriranih s prevajalnikom naslovov, se je največja prepustnost povečala s 130 Mbit/s na 630 Mbit/s.
- Оборудование
- Gonilnik AMDGPU zdaj vključuje začetno podporo za tehnologijo HDMI 2.1 FRL (Fixed Rate Link), ki omogoča prenos nestisnjenega videa pri 4K/120Hz in 8K/60Hz. Podpora za HDMI 2.1 je bila prej v gonilnikih z odprto kodo nedosegljiva zaradi licenčnih zahtev HDMI Foruma, vendar je AMD zdaj zagotovil podobno implementacijo.
- Gonilnik i915 zdaj podpira nastavitev barve ozadja za krmilnik zaslona. Implementiran je bil parameter pin_params.needs_low_address.
- Nadaljevalo se je delo na gonilniku Xe DRM (Direct Rendering Manager) za grafične procesorje, ki temeljijo na arhitekturi Intel Xe, ki se uporablja v grafičnih karticah serije Intel Arc in integrirani grafični kartici, začenši s procesorji Tiger Lake. Dodana je bila začetna podpora za platformo CRI (Crescent Island). Za platforme dGPU Xe3p je bil implementiran sistemski krmilnik.
- Gonilnik Nouveau odpravlja težave z grafično kartico NVIDIA GA100.
- Gonilnik v3d je bil posodobljen in zdaj vključuje možnost upravljanja porabe energije grafične kartice v3D na ploščah Raspberry Pi.
- Nadaljevali smo z integracijo komponent gonilnikov Nova za grafične kartice NVIDIA, opremljene z vdelano programsko opremo GSP, ki se uporablja od serije NVIDIA GeForce RTX 2000, ki temelji na mikroarhitekturi Turing. Gonilnik je napisan v jeziku Rust. Dodana je bila podpora za grafične kartice NVIDIA serije GA100, Hopper in Blackwell.
- Dodana podpora za ARM plošče, SoC in naprave: Apple t8122 (M3), Motorola Edge 30, Nothing Phone 3a, Google Pixel 3a XL, Qualcomm Dragonwing IPQ9650, Huawei Hawi, ZTE zx297520v3, Renesas R-Car M3Le, ASPEED AST27xx, Cortina Gemini, NXP i.MX6/8/9, NXP LX2160A, TI K3 AM62x.
Hkrati je Latinskoameriška fundacija za prosto programsko opremo ustvarila različico popolnoma brezplačnega jedra 7.2 - Linux-libre 7.2-gnu, očiščen elementov vdelane programske opreme in gonilnikov, ki vsebujejo ne-proste komponente ali dele kode z omejenim obsegom s strani proizvajalca. Izdaja 7.2 vključuje čiščenje blobov za nova gonilnika rt722-sdca in tac5xx2. Koda za čiščenje gonilnikov amdgpu, nova core, qcom iris, q6v5, iwlwifi, amdxnda, adreno, r8152 in mt792x je bila posodobljena. Vmesniki za nalaganje vdelane programske opreme so bili prilagojeni. Imena blobov v datotekah devicetree (dts) za čipe ARM so bila očiščena.
Vir: opennet.ru
