Pärast kahte kuud arendust esitles Linus Torvalds Linuxi 7.2 tuuma väljalaske. Silmapaistvamad muudatused on: USB4STREAMi andmevoogede mehhanism, btrfs, xfs ja ext4 jõudluse optimeerimine, koodi eemaldamine i486 CPU toe jaoks, võimalus luua sisemisi planeerijaid SCHED_EXT, mälutarbimise vähendamine vahetusmälu alamstes, anonüümsete kanalite kiirendamine, Intel MBEC ja AMD GMET laienduste tugi KVM-is, AppleTalk protokolli eemaldamine, HDMI 2.1 FRL algtugi AMDGPU draiveris.
Peamised uuendused tuumas 7.2 (1, 2, 3):
- Diskisüsteem, sisend/väljund ja failisüsteemid
- iomap mehhanismist eemaldati liigne memset funktsiooni kutsumine juba lõpetatud iteratsioonide jaoks funktsioonis iomap_iter(), mis suurendas kõrge I/O intensiivsuse korral kiiretel NVMe salvestusseadmetel testides IOPS-i 5% võrra ext4 ja xfs failisüsteemide kasutamisel.
- XFS-is kuulutati välja stabiilne tugi tsoonitud salvestusseadmetele (bloki- või sektorigruppide tsooni jagamine, kuhu on lubatud vaid järjestikune andmete lisamine kogu bloki grupi värskendamisega).
- Btrfs-is on vaikimisi lubatud suurte mälu lehtede (large folios) tugi, mis vähendab kulusid ja tõstab jõudlust intensiivse järjestikuse I/O korral. Lisatud eksperimentaalne huge folios tugi suurusega kuni 2 MB. Uus ioctl GET_CSUMS on lisatud kontrollsumma teabe saamiseks kasutajaruumi, näiteks utiliidi mkfs ja dedupe optimeerimist. Jõudlus järjestikuste andmete kirjutamisel on suurenenud 15% ja sirgjoonelise I/O korral 59%.
- Ext4 failisüsteemis on märkimisväärselt ümber töötatud 'fast commit' mehhanismi rakendus konkurentsi ja vastastikuste lukustuste vältimiseks. Lisatud inode'i snapshotide statistika eksport läbi /proc/fs/ext4/*/fc_info. Ahnustatud kaustade hashide arvutamise jõudlust (255-tähemärgiste nimede puhul kiirus peaaegu kahekordistus, 64 tähemärki 27%, 32 tähemärki - 11%).
- F2FS-is on lisatud fserrori vigade tagasiside tugi, mis võimaldab kasutajaruumi kaudu jälgida failisüsteemi probleeme. Vähenenud katkestuste töötlemise kontekstis veedetud aeg.
- Device Mapper (DM) on lisatud uus dm-inlinecrypt käitleja, mis võimaldab läbipaistvat krüpteerimist ja dekrüpteerimist plokkseadmete puhul, kasutades riistvaraseadmeid, millel on inline-krüpteerimise funktsioon.
- Esitatud dokumentatsioon uute failisüsteemide lisamiseks tuumale.
- NFS-i puhul on ploki suurus vaikimisi suurendatud 4 MB-ni süsteemides, mis sisaldavad vähemalt 16 GB mälu (ploki suuruse käsitsi muutmiseks saab kasutada /proc/fs/nfsd/max_block_size). Lisatud on toetust katalooge koosoleku delegeerimisele kliendile, mis võimaldab teatud aja jooksul teostada toiminguid selle kataloogi osas ilma oleku muutuste kontrollimiseta. serveris.
- SMB-serverisse on lisatud toetus faile hoidmiseks kompressitud kujul ning andmete kokkusurumiseks nende edastamise ajal võrgu kaudu.
- Uues NTFS-i (ntfsplus) rakenduses on lisatud toetus Windowsi sümboolsetele linkidele ning tagatud on paljude metainfode vigade õige käsitlemine.
- Eemaldatud on fscache tagantjärele andmete vahemälu EROFS-i (Enhanced Read-Only File System) jaoks, mis kuulutati kaks aastat tagasi aegunuks.
- Ceph failisüsteemi on lisatud tugi kliendi seansside käsitsi nullimiseks.
- 9P failisüsteemi on tehtud optimeerimisi, mis kiirendavad tööprotsesse sellistes stsenaariumides nagu projektide koostamine.
- Süsteemikutsesse file_getattr() on lisatud lipud, et saada teavet failisüsteemi sümbolite reegli arvestamise kohta. Lipp FS_XFLAG_CASEFOLD näitab, et failinimede kontroll toimub ilma sümbolite reegli arvestamiseta, ja lipp FS_XFLAG_CASENONPRESERVING, et uute failinimede loomisel ei säilitata sümbolite reegli teavet. Antud lippude rakendamine on võimalik NFS-kliendides, mis töötavad ilma sümbolite reegli arvestamiseta.
- Süsteemikutsesse openat2() on lisatud lipp O_EMPTYPATH, mis võimaldab edastada tühja failitee. Sellisel juhul määratakse avatud faili tee edastatud failidekstraktori alusel.
- Süsteemikutsesse openat2() on lisatud lipp OPENAT2_REGULAR, mis lubab avada vaid tavalisi faile (katse avada erifail, näiteks sokkel, toru või seade, põhjustab vea EFTYPE).
- Mälu ja süsteemiteenused
- USB4STREAM mehhanism on andnud andmeed edastamiseks arvutite vahel, mis on ühendatud USB4 kaabliga. Lisa seadme /dev/tbstreamX, mille abil saab andmeid lugeda ja kirjutada, kasutades standardseid funktsioone read() ja write(), sarnaselt failide lugemise ja kirjutamisega. Näiteks ühel hostil saab teavet saata käsuga "echo hello > /dev/tbstream0", samas kui teisel saab lugeda käsuga "cat /dev/tbstream0". USB4STREAM mehhanismi saab kombineerida USB4 kaabli kaudu võrguühenduse loomise võimalusega (thunderbolt_net) või kasutada seda eraldi, kui on vajalik andmete edastamine rakenduste vahel, mis ei toeta võrgusokette.
- Lülitatud sisse teine muudatuste seeria i486 protsessorite toetuse lõpetamiseks. Eemaldatud üle 13 koodirea, mis on seotud FPU puuduvate protsessorite ujuvkomaaride simulatsiooniplokiga. Eemaldatud toetus i486 protsessorite jaoks, millel ei ole CX8 (võrdle ja vaheta 8 baiti) ja TSC (CPU tsüklite loendur, mida kasutatakse ülesannete ajakaval) riistvara operatsioone; nende simulatsioonikood on eemaldatud.
- Teatatud, et AMD Geode protsessorite tugi, mis kasutatakse OLPC XO-1 arvutis, on jäänud ilma hoolduseta (orphaned).
- Lisatud tugi Intel TDX (Trusted Domain Extensions) mehhanismi rakenduse uuendamiseks, mida kasutatakse külalissüsteemide mälu krüpteerimiseks. TDX on rakendatud spetsiaalse programmikogumi käitusena, mis transporditakse BIOS-i poolt Flash-mälust operatiivmälu alglaadimise ajal. Tuumale on lisatud võimalused selle mooduli haldamiseks ja uuema versiooniga asendamiseks töötavas süsteemis ilma taaskäivitamiseta.
- Uus GPU ressursihalduri (Fair GPU scheduler) on rakendatud GPU tööde täitmise järjekorra määramiseks, mida saadavad GPU-d kasutavad protsessid. Erinevalt traditsioonilisest GPU päringute FIFO järjekorrast, kasutab uus haldur õiglast ressursijagamise mehhanismi, mis on seotud CFS (Completely Fair Scheduler) planeerijaga, mis rakendab protsesside täitmise vahetusaega. Uue halduri kasutamisest on kõige tõhusamad tulemused nähtavad interaktiivsete ülesannete paralleelse täitmise korral, mis töötavad aktiivselt GPU-ga. Viimasel hetkel enne 7.2 tuuma väljalaskmist tühistati Fair GPU scheduler sisselülitamine ja tagastati vana FIFO planeerija, kuna tekkis vajadus tõrgete tõrkeotsingu järele, mis viis jõudluse languseni ja 100% koormuseni GPU-l eraldi mängude käivitamisel Protonis.
- eBPF alamsüsteemis on tehtud muudatusi: lisatud võimalus ühendada üks BPF programm mitmele jälgimispunktile (tracepoint). Jälgimispunktidega seotud BPF programmidesse on lisatud juurdepääsu võimalus mälu komponentidele, mis töötavad kasutaja tasemel, korrektselt käsitledes mittealokatsioonitud mälu lehtede käsitlemist (page fault). Sistemaatilisse kõne bpf() on lisatud tüübiklasside atribuutide (log_buf, log_size, log_level ja log_true_size) tugi, mis võimaldab ühtlustada metainformatsiooni edastamist kõigis BPF käskudes, piiranguteta BPF_PROG_LOAD, BPF_BTF_LOAD ja BPF_MAP_CREATE käskudega. BPF funktsioonidesse on eemaldatud piirang, mis ei võimalda edastada rohkem kui 5 parameetrit. Lisatud on ohutu juurdepääs jagatud mälu bpf_arena, ilma kartmata mittealokatsiooni lehti käsitleda (page fault). Uus BPF hash map struktuuri variant, mis lubab dünaamilist suuruse muutmist, on rakendatud.
- Parandatud on '/proc/interrupts' väljundi loomist katkestuste statistika jaoks, samuti on moderniseeritud struktuurid katkestuste arvestamiseks ja lisatud vahemälu.
- Kiirendatud on faili '/proc/filesystems' genereerimist, mida kasutatakse libselinux-is.
- Ülesannete ajakavandajal on nüüd rakendatud koormuse tasakaalustamise tugi CPU tuumade vahel, arvestades protsessori sisemisi vahemälu olekuid. Ajakavandaja püüab nüüd rühmitada protsesse, mis kasutavad ühiseid ressursse, näiteks ühe protsessi lõime, et kasutada neid sama taseme vahemälus, mis suurendab andmete kättesaadavuse tõhusust, suurendades vajadusel vahemälus vajalike andmete leidmise tõenäosust.
- SCHED_EXT mehhanismis, mis võimaldab BPF-i kasutamist CPU ajakavandajate loomiseks, on edasi viidud võimalus luua saabuvad ajakavandajad (sub-scheduler), mille abil saab iga cgroup-i jaoks kasutada oma ülesannete ajakavandajat.
- On jätkatud muudatuste üleviimist Rust-for-Linux harust, mis on seotud Rust-i keele kasutamisega teise keele arendusena draiverite ja tuumamoodulite loomiseks (Rust-i tugi ei ole vaikimisi aktiveeritud ja see ei too kaasa Rust-i kaasamist tuuma kohustuslike kogumite sõltuvustesse). Rust-i kasutamise võimalus tuumas on rakendatud s390 arhitektuuril. Paketti on lisatud 'zerocopy', mis sisaldab kiireid mälupääsupimeetriga primitiive 'unsafe' režiimi koodi jaoks.
- Tuuma kompileerimiseks vajalik LLVM tööriistade minimaalne versioon on tõstetud 17.0.1-le.
- Minimaalne C-raamatukogu nolibc, mis on kaasas Linuxi allika tekstidega ja mis pakub vahekihit loovusi põhitegevuste süsteemi kutsete suhtes, on saanud toe OpenRISC ja 32-bit PA-RISC arhitektuuridele.
- Vahetussüsteemi (swap) on viidud läbi optimeerimisi, mis suurendavad jõudlust ja vähendavad süsteemi mälutarvet, vähendades staatiliste metaandmete salvestamise kulusid ja ühtlustades anonüümse ja jagatud mälu töötlemist lehtede kasutamisel. Mälu tarbimise vähenemine on piisavalt märkimisväärne, näiteks 1 TB vahetuspartitsiooni monteerimisel täheldatakse mälutarbimise vähenemist umbes 512 MB võrra.
- Mälu tõrjumismehhanismi tõhusust on suurendatud, eemaldata või viies vahetusse mälupiirkonna, et vabastada mälu, kui süsteemis on mälu puudus. Teatud koormuste korral, näiteks MongoDB testimisel YCSB (Yahoo! Cloud Serving Benchmark) abil, täheldatakse jõudluse kasvu kuni 30%.
- Kogumissüsteemi on lisatud käsk „make sbom”, mis genereerib SBOM (Software Bill Of Materials) loetelusid, mis peegeldavad jõudnud komponentide, raamatukogude ja sõltuvuste, samuti nende litsentside teavet, mis on saadud SPDX päistest koodifailides.
- Nimetamata kanalite (pipe) rakenduses on optimeeritud lukustuste töötlemist (mälu eraldamise toimingud on viidud lukustuse ulatusest välja), mis on suurendanud nimetamata kanalite läbilaskevõimet 21-48% ja vähendanud viivitusi 17-33%.
- Virtualiseerimine ja turvalisus
- Slabi mälu jaotamise mehhanismile (slab allocator) on lisatud võimalus kasutada mälu eraldamise tokeneid (Allocation Token), mis on rakendatud Clang 22 kompilatsioonis. Tokeneid saab kasutada mälu eraldamise toimingute märgistamiseks ainulaadsete identifikaatoritega ning erinevat tüüpi objektide eraldi paigutamise korraldamiseks, et raskendada haavatavuste, mis on seotud puhverülevooluga, ekspluateerimist (puhverülevool ühe objekti tüübiga ei ole nii lihtne kasutada teiste objektide tüüpide kahjustamiseks).
- AF_ALG mehhanism, mida kasutati Copy Fail haavatavuses andmete muutmiseks leheküljepuhvrisse, on kuulutatud aegunuks ja plaanis eemaldada ühes tulevases väljaandes. AF_ALG võimaldab kasutada riistvarakiirendajaid krüptograafiliste arvutuste jaoks kernelis Crypto API-s, kuid seda rakendatakse üsna spetsiifilistes olukordades. Kernelis 7.2 on AF_ALG eemaldatud asünkroonse sisendi/väljundi tugi, vanade draiverite ja zero-copy mehhanismi tugi skcipher ja aead teostustes. Järele on jäänud ainult tarkvaralised rakendused krüptograafiliste algoritmide jaoks, ja riistvaraliste krüpto kiirendajate toetus kernelis crypto API-s on eemaldatud, kuna AF_ALG laiendab oluliselt rünnaku pinda, kuid ei paku võrreldes krüptograafia rakendamisega kasutajaruumi paremat jõudlust. AF_ALG kasutati Cryptsetup'i tööriistakomplektis, kuid selle toetus eemaldati hiljutises väljaandes 2.8.7.
- IMA (Integrity Measurement Architecture) mehhanismile, mis võimaldab välistel teenustel tuvastada kernelis alam-süsteemide olekuid, et tagada nende autentimine, on lisatud tugi sisemiste tabelite ekspordiks mõõtmistulemustega kasutajaruumi, eemaldades need kernelist, et säästa mälu.
- Landlock moodul, mis pakub privileegitud programmidele vahendeid Linuxi tuuma objekti kasutuse piiramiseks (failihierarhiad, võrgu soketid, ioctl jne), on lisatud UDP sokettide juurdepääsu haldamise tugi ning võimalus valikuliselt keelata objekti blokaadide logimist, et vältida logi ülekoormamist ebaoluliste teadetega.
- Tuuma on vabastatud funktsiooni strncpy() kasutamisest, mis kopeerib sisendstringist kindla arvu bite. strncpy() kasutamine võib põhjustada vigu, kui null sümbol stringi lõpus vahele jääb või kui see täidab stringi nullidega. Soovitatakse kasutada funktsioone strscpy() ja strscpy_pad() nulliga lõpetatud stringide kopeerimiseks, samuti strtomem_pad(), memcpy_and_pad() ja memcpy() tuntud fikseeritud suurusega stringide kopeerimiseks. Töö tuuma vabastamiseks strncpy() kasutamisest algas 2020. aastal ning nõudis 70 arendajalt 362 muudatust.
- Hüpervisor KVM Lisatud tugi Intel MBEC (Mode-Based Execution Control) ja AMD GMET (Guest-Mode Execution Trap) laiendustele, mis võimaldavad mälu kaarditabelites eraldi hallata koodi täitmise õigusi tuuma ja kasutajaruumi jaoks külalisüsteemides. Varasemad Intel ja AMD riistvaralise virtualiseerimise laiendused lubasid märkida mälu leheküljed, mis on täitmiseks saadaval, ainult ühe bitiga, samas kui tuuma ja kasutajaruumi õiguste vaheline programm käidi läbi hüperviisori tasemel. MBEC ja GMET kasutamine välistab hüperviisori õiguste kontrollimise ja vähendab oluliselt ressursside nõudlikkust, kui juhtimine külalisüsteemist hüperviisorile edasi antakse (VMexit).
- Võrgusüsteem
- TCP-AO (TCP Authentication Option, RFC 5925) laienduse rakendamine on viidud uue krüptograafilise raamatukogu libcrypto kasutamise alla, mis on võimaldanud koodi lihtsustada ja tõhusust parandada. TCP-AO võimaldab verifitseerida TCP-pealkirju MAC-koodide (Message Authentication Code) abil, kasutades kaasaegsemaid algoritme HMAC-SHA-1-96 ja AES-128-CMAC-96 asemel varem saadaval olnud TCP-MD5, mis põhines vananenud MD5 algoritmil.
- Multipath TCP (MPTCP) ühenduste toetatavate subvoogude arv on suurenenud 8-lt 64-le.
- Tööd jätkatakse tuuma võrgu paketi globale lukustamise vähendamiseks rtnl_lock.
- AppleTalk protokolli steki, mida kasutati Apple’i arvutites alates 1985. aastast ja mis asendati 1990ndatel TCP/IP-ga, on eemaldatud tuumast. Samuti on eemaldatud ATM andmeedastustehnoloogia komponendid, mis ei ole seotud PPPoATM-iga, ning ARCnet võrguinterfeisid ISA ja PCMCIA busside baasil, PCMCIA liidese Bluetooth-adapterid, Chelsea TLS-kiirendajad, kood TLS-i integreerimiseks sockmapiga ja tugi 5/10 MHz sagedusvahemikele cfg80211/mac80211 traadita stegis. Erinevate blokeeringute tõttu, mille lahendamiseks pole leidunud head lahendust, on eemaldatud ka TLS töötluse kiirem rakendus TCP Offload Engine baasil (kuid laialdaselt kasutatav TLS offload on säilinud). 32-bitiste x_tables ühilduvuse kood 64-bitistes süsteemides on välja lülitatud ja plaanis eemaldada.
- pppoe draiverisse on lisatud tugi GRO (Generic Receive Offload) ja GSO (Generic Segmentation Offload) mehhanismidele, et kiirendada pakettide taastamist ja segmentimist riistvara tasandil. GRO ja GSO kasutamine võimaldab oluliselt suurendada sissetuleva liikluse läbilaskevõimet, näiteks MediaTek MT7621 seadmetes, kus aadresside tõlke konfiguratsioonis on maksimaalne läbilaskevõime tõusnud 130 Mbit/s-lt 630 Mbit/s-ni.
- Varustus
- AMDGPU draiveris on saadud algtugi HDMI 2.1 FRL (Fixed Rate Link) tehnoloogiale, mis võimaldab edastada kaotamata videot 4K/120Hz ja 8K/60Hz kvaliteedis. Erinevalt varasemast, mil HDMI 2.1 toe rakendamine avatud draiverites ei õnnestunud HDMI Foorumi litsentsinõuete tõttu, on AMD-l nüüd õnnestunud selline rakendus kokku leppida.
- i915 draiverisse on lisatud võimalus seadistada seadme kontrolleri taustavärvi kuvamine. On rakendatud parameeter pin_params.needs_low_address.
- Inteli Xe arhitektuuri põhineva GPU drm-draiveri (Direct Rendering Manager) Xe arendamine jätkub, mida kasutatakse Inteli Arc seeria graafikakaartides ja integreeritud graafikas, alates Tiger Lake protsessoritest. Algne tugi CRI (Crescent Island) platvormile on lisatud. dGPU plattformide Xe3p jaoks on rakendatud süsteemi kontroller.
- Nouveau draiveris on lahendatud probleemid NVIDIA GA100 GPU-ga.
- v3d draiverisse on lisatud võimalus hallata v3D GPU energiatarbimist Raspberry Pi plaatidel.
- NVIDIA GPU-draiveri Nova komponentide integratsioon jätkub GSP-firmware'iga, mida kasutatakse alates NVIDIA GeForce RTX 2000 seeriast, mis põhineb Turingi mikroarhitektuuril. Draiver on kirjutatud Rusti keeles. Lisatud on tugi NVIDIA GPU-le GA100 ja seeriatele Hopper ja Blackwell.
- Lisatud tugi ARM-platvormidele, SoC-dele ja seadmetele: 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.
Samas on Ladina-Ameerika Tasuta Tarkvara Fond loonud täiesti vabade kärg 7.2 – Linux-libre 7.2-gnu, mis on puhastatud firmware'ide ja draiverite elementidest, mis sisaldavad mittevabu komponente või koodi osi, mille kasutusala on tootja poolt piiratud. Väljalaskes 7.2 on puhastatud uute draiverite rt722-sdca ja tac5xx2 blobidest. Uuendatud on puhastuskoode draiverites amdgpu, nova core, qcom iris, q6v5, iwlwifi, amdxnda, adreno, r8152 ja mt792x. Tehtud on kohandamised firmware laadimise liideste jaoks. Tehtud on blobide nimede puhastamine ARM-kiipide dts-failides (seadmepuu).
Allikas: opennet.ru
