Pärast kahte kuud arendust esitles Linus Torvalds Linuxi 6.9 tuuma väljalaske. Silmapaistvamad muudatused: dm-vdo moodul plokkseadmestiku dedupeerimiseks ja tihendamiseks, FUSE’is failidele otsejuurdepääsu režiim, pidfd loomise tugi eraldiseisvatele lõimedele, BPF-tokenite mehhanism, Rusti tugi ARM64 süsteemidel, Ext2 failisüsteemi klassifitseerimine vananenuks, NTFS-i vana draiveri eemaldamine, Intel FRED-mehhanismi tugi.
Uue versiooni on vastu võetud 15680 parandust 2106 arendajalt, plaastri suurus on 54 MB (muudatused puudutasid 11825 faili, lisatud 687954 koodirida, kustutatud 225344 rida). Eelmises väljaandes oli 15641 parandust 2018 arendajalt, plaastri suurus oli 44 MB. Umbes 42% kõigist 6.9 muudatustest on seotud seadme draiveritega, umbes 17% muudatusi puudutab riistvara-arkitektuurile spetsiifilise koodi värskendamist, 13% on seotud võrguvirnastamisega, 7% -ga failisüsteemide ning 4% -ga tuuma sisemiste alamsüsteemidega.
Peamised uuendused versioonis 6.9:
- Disski alamsüsteem, sisend/väljund ja failisüsteemid
- Device Mapper (DM) on lisatud uus dm-vdo (virtuaalne andmete optimeerija) töötleja, mis võimaldab olemasolevate plokkseadmete põhjal luua virtuaalset plokkseadet, millel on sellised võimalused nagu korduvate andmete deduplikatsioon, andmete tihendamine, tühjade plokkide eemaldamine ja plokkseadmise suuruse seadmine vastavalt vajadusele (thin provisioning). Need võimalused on rakendatud plokkseadmise tasemel ja ei sõltu kasutatavast failisüsteemist (näiteks saab dm-vdo abil automaatselt ühtlustada korduvaid andmeid ja salvestada teavet tihendatud kujul mis tahes FS- jaoks). dm-vdo kasutamine füüsiliste salvestuste jaoks, mille maht on kuni 256TB, ja loogiliste mahtude loomine, mille maht on kuni 4PB, on toetatud. VDO jagude haldamiseks soovitatakse kasutada lvm-i. VDO tehnoloogia on välja töötatud ettevõtte Permabit poolt ja avatud pärast selle omandamist Red Hat'iga 2017. aastal.
- FUSE-i alamsüsteemis, mida kasutatakse failisüsteemide rakendamiseks kasutaja ruumis, on lisatud algne «passthrough» režiimi teostus, mis võimaldab otse kernelitasemel failide andmeid saada, mööda minnes kasutajaruumis töötavast protsessist, mis teatud olukordades võib oluliselt parandada jõudlust. Näiteks võivad FUSE-i failisüsteemide teostused, mis töötavad ainult lugemisrežiimis ja piiravad juurdepääsu failidele, edastada failide sisu originaalsüsteemist ilma nende edastamiseta FUSE-i protsessile.
- Kategooriasse aegunud (deprecated) on viidud juht, millel on Ext2 failisüsteemi teostus. Põhjuseks on see, et juhendis toetatakse vaid 32-bitiseid ajaloendeid inode'is, mis ületavad 19. jaanuaril 2038 aastat. Ext2 juhendi asemel on soovitatav kasutada ext4 juhtmeid, mis toetavad Ext2 failisüsteemiga töötamist ja on täielikult ühilduvad, kuid suudavad kasutada ext2 partitsioonides ajatempleid, mis ei allu 2038. aasta probleemile, kui FS on loodud inode'iga, mille suurus on üle 255 baiti (Ext2 juhendis kasutati 32-bitiseid ajaloendeid olenemata inode'i suurusest).
- Vana NTFS failisüsteemi juht on eemaldatud, millele 5.15 versioonist alates on tulnud uus NTFS3 juht. Kahe NTFS rakendusega juhtmete kohaletoimetamine tuumas on tunnistatud ebaotstarbekaks, arvestades, et vana juhiks ei ole aastaid uuendatud, on halvas seisus ja suudab töötada ainult lugemisrežiimis.
- Failisüsteemides zonefs ja hugetlbfs on lisatud toetust kasutajaidentifikaatorite kaardistamiseks monteeritud failisüsteemide jaoks, mida kasutatakse teatud kasutaja failide seostamiseks monteeritud välistel osadel ja praeguses süsteemis teise kasutajaga.
- NFSv4-s on administraatoritele antud võimalus avatud failide seisundite ja lukustamise puhastamiseks.
- Ext4 failisüsteemi puhul on märgitud vaid vigade parandus ja kunit-testide värskendus.
- Btrfs-is jätkatakse funktsioonide üleviimist lehefolderite (page folios) kasutamisele.
- Failisüsteemis XFS jätkub töö utiliidi fsck rakendamise võimaluse realiseerimise kallal, et kontrollida ja parandada tuvastatud probleeme online-režiimis, ilma failisüsteemi demonteerimata.
- Süsteemikutsesse pwritev2() on lisatud lipp RWF_NOAPPEND, mis võimaldab määrata kirjutamise asukoha, isegi kui fail on avatud ainult faili lõppu andmete lisamise režiimis.
- Uued ioctl-käsud on lisatud: FS_IOC_GETUUID — tagastab antud failisüsteemi UUID-identifikaatori, ja FS_IOC_GETFSSYSFSPATH — määrab asukoha /sys/fs antud monteeritud FS jaoks.
- Failisüsteemid efs, qnx4 ja coda on viidud üle uue jaotuse monteerimise API kasutamisele.
- Täitmisprotsesside rakendus, mis käsitleb faile, on täiustatud, et töötada suurustähe ignoreerimise režiimis. Suureneb jõudlus, võrreldes kõigepealt suurustähe järgimisega ja seejärel lülitumisega suurustähe ignoreerimisele. Lahendatud on probleemid overlayfs-i monteerimisel kaustadele, mille puhul on kehtestatud suurustähe ignoreerimise režiim.
- Mälu ja süsteemiteenused
- Toetust on rakendatud Intel FRED (Flexible Return and Event Delivery) mehhanismi jaoks, mis on loodud info tõhususe ja usaldusväärsuse suurendamiseks madala taseme sündmuste edastamisel võrreldes praegu kasutusel oleva IDT (Interrupt Descriptor Table) mehhanismiga. Jõudluse suurendamine ja latentsuse vähendamine saavutatakse sündmuste tagastamise kaudu protsessori käsu IRET abil, selle asemel, et edastada sündmusi IDT tabeli kaudu. Usaldusväärsuse suurendamine saavutatakse sündmuste koostise eraldi käsitlemise abil kernelis ja kasutaja kontekstis, NMIdesse siseneva täitmise kaitse ning kõigi seotud CPU registrite salvestamine laiendatud virna raamistikku, mis on seotud erandiga.
- Lisati võimalus optimeerida üksikute CPU tuumade andmepääsude kaudu nimeeritud aadressiruumi (Named Address Spaces) kasutamist koodis, mis on realiseeritud GCC-s GNU C laiendusena.
- Funktsiooni pidfd_open() on lisatud PIDFD_THREAD lipp, mis võimaldab luua pidfd konkreetsete lõimede jaoks, mitte ainult kasutada pidfd lõimede grupijuhi kontekstis. Samuti on soovitatud pseudofailisüsteemi rakendus pidfd-ile juurdepääsu võimaldamiseks virtuaalse failisüsteemi kaudu. Erinevalt protsesside tuvastamisest pid abil on pidfd identifikaator seotud konkreetse protsessiga ja ei muutu, samas kui PID võib olla pärast jooksvat protsessi lõpetamist seotud teise protsessiga.
- BPF alamsüsteemi on lisatud BPF-tokenite mehhanism, mis võimaldab valida, milliseid õigusi programmid saavad privileegitud BPF-operatsioonide jaoks, näiteks saab andmeid mittesalajasele rakendusele õigusi anda, et luua juurdepääs teatud BPF alamsüsteemidele ilma täielike CAP_BPF õiguste andmiseta.
- BPF-alamsüsteemi on lisatud uus jagatud mälu tüüp bpf_arena, mis määratleb ala, mis on BPF-programmide ja kasutajaruumi protsesside jagamiseks kättesaadav. Lisatud on käsk may_goto, mis võimaldab korraldada tsüklite tööd, mille verifitseerija saab katkestada. BPF-programmidest on nüüd võimalik genereerida suvalisi TCP SYN cookie'sid ja luua BPF-teenuseid SYN-löögi vastu.
- Jätkub muudatuste üleviimine Rust-for-Linux harust, mis on seotud Rusti keele kasutamisega teise keelena draiverite ja tuumamoodulite arendamisel (Rusti tugi ei ole vaikimisi aktiveeritud ja ei muuda Rusti tuuma kohustuslikuks kogumis sõltuvuseks). Lisatud on Rusti toe kasutamine 64-bitistes ARM protsessorites. Üleminek Rusti versiooni 1.76 kasutamisele on teostatud. On lisatud makro 'container_of!'. Ebatäpsete 'ptr_metadata' funktsioonide asemel on rakendatud stabiilne meetod 'byte_sub'. Lisatud on 'time' moodul koos aja konverteerimise funktsiooniga 'msecs_to_jiffies()'.
- I-süsteemi io_uring on lisatud failide lühendamise võimalus (ftruncate_file).
- Lisatud uus tööde järjekorra tüüp WQ_BH (workqueue Bottom Halves), mis võimaldab asünkroonset koodi täitmist tarkvaraliste katkestuste kontekstis, et kasutada seda vananenud tasklet'ide asemel.
- Kellakava alamsüsteem on oluliselt ümber tehtud, kus on parandatud aktiivsete CPU tuumade valimise loogikat käivitatud kellafunktsioonide täitmiseks, et mitte toimetada mitteaktiivseid tuumasid välja magamerežiimist.
- Rakendatud on tuumade energiamudeli (EM, Energy Model) värskendamise võimalus töötamise ajal, mida saab näiteks kasutada töötemperatuuri mõju arvestamiseks CPU energiatarbimise efektiivsusele. Funktsiooni em_cpu_energy() jõudlust on oluliselt parandatud, nüüd töötab see testidel statsionaarses süsteemis 1,43 korda kiiremini ja RockPi 4B emulatsioonis 1,69 korda kiiremini.
- Lisatud on tugi ARM64 arhitektuuril põhinevate süsteemide käivitamiseks LPA2 režiimis, kus on 52-bitine virtuaalne aadressiruum.
- ARM64 süsteemide jaoks on implementeritud pidevate PTE-de (Page Table Entry) kirjutamise tugi, mis võimaldab tõsta jõudlust TLB-d (Translation Lookaside Buffer) tõhusama kasutamise kaudu.
- On vastu võetud täiendused mäluhaldussüsteemi jõudluse parandamiseks, vähendades vmalloc() konkurentside lukustuste tekkimist.
- LoongArch arhitektuuri jaoks on rakendatud kuumade täienduste mehhanism (live patching), mis võimaldab rakendada täiendusi kernelile ilma taaskäivitamata.
- RISC-V süsteemide jaoks on toeks süsteemikutsung membarrier(), mis tagab mälu barjääride seadistamise süsteemis töötavatele lõimedele.
- Tõstetud on nõuded LLVM/Clang versioonile, mida saab kernelit kompileerimiseks kasutada. Nüüd on minimaalselt vajalik LLVM 13.0.1 versioon (varasemalt oli toetatud ka LLVM 11+ kompileerimine).
- «User trace events» mehhanismi, mis võimaldab luua jälgimisüritusi kasutaja protsessidest kasutusruumi aktiivsuse jälgimiseks, on lisatud toetus ürituste teabe eksportimisele erinevates formaatides (USER_EVENT_REG_MULTI_FORMAT).
- Funktsioonide jälgimise mehhanismi on lisatud võimalus jälgida sisenemiste argumentide olekut funktsiooni väljajätmisel. Return operaatori väärtused on nüüd seotud funktsiooni kutsumisel kasutatud argumentidega.
- Perf utiliiti on lisatud tugi ‘cluster’ (‘perf stat -a —per-cluster’) väljundi agrgreerimise režiimile, et ühendada jagatud ressursside statistikat. On rakendatud libcapstone teegi kasutamise võimalus protsessori käskude diskreetimise jaoks (‘perf script -F disasm’). Perf report ja perf annotate käskude täitmisel on tehtud mälu tarbimise optimeerimisi.
- Virtualiseerimine ja turvalisus
- Intel Atom protsessorites on lisatud RFDS (Register File Data Sampling) haavatavuse kaitse, mis võimaldab ekstrakteerida jääkide teavet registrifailide (RF, Register File) kohta, mida kasutatakse registrite sisu jagamiseks kõigi ülesannete vahel samas CPU tuumas. Haavatavuse blokeerimiseks on vajalik mikrokoodi värskendus ja VERW käsu kasutamine mikroarhitektuursete puhvrite sisu kustutamiseks tuuma kasutusest väljumisel. Kaitse aktiveerimiseks tuuma laadimisel saab määrata lipu «reg_file_data_sampling=on». Teavet haavatavuse kohta ja vajaliku kaitseks mõeldud mikrokoodi olemasolu saab hinnata failis «/sys/devices/system/cpu/vulnerabilities/reg_file_data_sampling».
- Külalissüsteemide kaitse põhinõuded on lisatud AMD SEV-SNP (Secure Nested Paging) laienduse abil, mis tagab turvalise töö sisetabelite mäluhalduses ja kaitseb «undeSErVed» ja «SEVerity» rünnakute eest AMD EPYC protsessorites, mis võimaldavad mööda minna AMD SEV (Secure Encrypted Virtualization) kaitsemehhanismist. KVM SNP kasutamiseks vajalikud muudatused on plaanis lisada 6.10 harusse.
- IMA (Integrity Measurement Architecture) ja EVM (Extended Verification Module) tehnoloogiate rakendustega moodulid on ümber viidud LSM (Linux Security Modules) raamistikule, mis on võimaldanud oluliselt lihtsustada koodi, ühendades dubleeritud funktsioonid, ilma et see tooks kaasa funktsionaalsuse kaotust, ja kasutada LSM-i kaudu kergesti kätte saadavaid tüüpilisi võimalusi. IMA moodul on ette nähtud operatsioonisüsteemi komponentide terviklikkuse kontrollimiseks digitaalsignatuuride ja räsi abil. EVM moodul kaitseb failide laiendatud atribuute (xattrs) ründe eest, mille eesmärk on nende terviklikkuse rikkumine (EVM ei luba läbi viia offline-rünnakut, kus ründaja võib muuta metandmeid, näiteks käivitades oma seadmega).
- 32-bit süsteemide jaoks on ümber kirjutatud süsteemi kutsed lsm_list_modules(), lsm_get_self_attr() ja lsm_set_self_attr(), mis on mõeldud laaditud LSM-moodulite (Linux Security Modules) nimekirja väljastamiseks ning LSM-mooduli atribuutide saamiseks/seadmiseks. Muudatus rikub tagasiosaduse ühilduvust, kuid kuna uusi süsteemi kutsed on lisatud eelmises tuumas ja praegu ei kasutata neid rakendustes, pidas Linus Torvalds seda muudatust lubatavaks.
- Üritati taastada UBSAN (määratlemata käitumise sanitaar) mehhanismi kasutamine. Probleem on see, et kompilaatorid käsitlevad allkirjade ja mitte-allkirjade tüüpide täisarvulisi ületamisi erinevalt. Allkirjade ületamised ja osutite ületamised kuuluvad määratlemata käitumise kategooriasse, samas kui mitte-allkirjade ületamised lõigatakse modulaarselt 2n alusel, säilitades ainult tulemuse madalamad bitid ('wrap-around') ning ei kuulu määratlemata käitumise alla. Määratlemata käitumise olukordade vältimiseks kompileeritakse tuum valikuga ' -fno-strict-overflow', mis toob kaasa 'wrap-around' kasutamise kõikide täisarvuliste ületamiste jaoks. GCC ja Clang ei suuda kasutada lippu ' -fno-strict-overflow' korral õigesti teatud probleeme diagnoosida, ning UBSANi aktiveerimine on suunatud koostööle kompilaatorite arendajatega valehäirete kõrvaldamiseks ja täisarvuliste ületamiste leidmiseks kohtades, kus pole selgeid kontrollimeetodeid.
Tuuma üleujutuste kontrollimiseks kasutatakse kontrollstruktuure, nagu „var + offset PAGE_SHIFT) < pgoff) {..}"), mis on seotud kompilatsiooniga lipuga "-fno-strict-overflow" ja ei katva kogu koodi, kus potentsiaalselt võib esineda üleujutus. Probleem on selles, et UBSANi kasutamisel põhjustasid sarnased kontrollid suure hulga valehoiatuste väljumise, mistõttu tuli UBSAN 2021. aastal välja lülitada. Uuendatud teostuses on soovitatud kasutada spetsiaalseid annotatsioone __signed_wrap ja __unsigned_wrap ning valmis makrosid kontrollide jaoks add_would_overflow(a, b) ja add_wrap(a, b), mis võimaldavad eraldada arendajate kavandatud täisarvu üleujutuste kasutamist juhuslike üleujutuste ilmumisest, mis võivad viia nõrkusteni. Eettepanek suuremast tuuma ümberehitamisest täiendavate tüübi definitsioonidega on Linus Torvaldsi poolt tagasi lükatud.
- Võrgu alamsüsteem
- Võrgusubjääris on tehtud tööd konkurentsi blokeerimise („lock contention“, katse saada luku, mida hoiab kinni teine lõng) vähenemise nimel. RTNL lukustuste kasutamist on vähendatud.
- Lisatud võimalus aktiveerida soklite aktiivse polling'i (busy polling) tugi eraldi epoll'i väljakutsete kontekstis. Basiti suurus ja eelarve parameetrid võivad erineda süsteemi vaikesätetest.
- Rakendatud net_hotdata struktuur, et suurendada sagedamini kasutatavate võrgu konfiguratsiooni muutujate vahemälu tõhusust.
- MPTCP-sse on lisatud tugi socket'ite TCP_NOTSENT_LOWAT valiku seadmiseks, mis võimaldab piirata saatmise puhvri suurust. MCTP socket'ite API-s on lisatud võrgu tuvastajate ("network ID") tugi, mis võimaldab sama hosti peal kasutada mitut kattumatut MCTP võrgustikku.
- IPSec'is on lisatud tugi ICMP-ooduse suunamisele (RFC 4301).
- Aegunud teede skaneerimise protsessi kiirus on suurenenud.
- XDP töö kiirus on suurenenud tänu suurte mälablokkide eraldamise jäigemale vältimisele.
- Lisatud võimalus kinnitada metainfot netconsole'i sõnumitele.
- Netfilteris on lubatud määrata kasutaja ruumist tabelid, mis on seotud juhtimise taustprotsessiga ja ei eemaldata automaatselt pärast kasutaja rakenduse lõpetamist.
- Nftablesis on kiirendatud elementide lisamine set-kogudesse, mis on ühendatud vahemikega.
- Seadmed
- I915 draiveris on jätkatud Intel LunarLake (Xe 2) kiipide toe rakendamisega. Uued PCI-identifikaatorid on lisatud seadmetele, mis põhinevad Intel Arrow Lake ja Alder Lake N kiipidel. Displayporti jaoks on lisatud tunnelitootmise (DP tunneling) ja ribalaiuse jaotamise (bandwidth allocation) tugi. Kõikidel platvormidel on lubatud fastboot režiim. Lisatud on toed kliendi seadmete spetsiaalsele silumise väljundile.
- AMDGPU draiveris on valmistatud ette GPU AMD RDNA3.5 ja RDNA4 toe rakendamiseks. Toetatud on 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 ja RAS ACA raamistik. Tuuma moodulisse on lisatud freesync_video parameeter, et lubada katsekatse videorežiimide vahetuse optimeerimiseks, kasutades FreeSync tehnoloogiat.
- Nouveau draiveris on ekraanihalduse kood muudetud kasutama funktsiooni kmemdup().
- Tööd jätkatakse drm-draivieriga (Direct Rendering Manager) Xe, mis on mõeldud Intel Xe arhitektuuri GPU-dele, mida kasutatakse Intel Arc seeria graafikakaartides ja integreeritud graafikas alates Tiger Lake protsessoritest.
- Lisatud on DRM-draiver Mediatek MT8188 VDOSYS1 kiipide jaoks.
- Videopodsüsteemide seadistused on viidud CONFIG_VIDEO sektsiooni.
- Toetatud on 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.
- Toetatud on ARM-platvormid ja seadmed: Android telefonid Tegra30 kiibil, Mediatek MT8186 põhised Chromebookid, NAS, tahvelarvutid ja mängukonsoolid Rockchips RK35xx põhjal, Renesas SoC-l põhinevad White Hawk plaadid, Qualcomm SM8550 (Snapdragon 8 Gen 2) põhised plaadid, Apalis Evaluation Board, Sielaff i.MX6 Solo Board, Samsung Galaxy Tab 4 10.1 LTE.
- ALSA helisüsteemi koodi on ümber üles ehitatud. Lisatud tugi Microchip SAM9x7, NXP i.MX95 ja Qualcomm WCD939x helisüsteemidele. SoundWire draiveris on lisatud ASoC tugi AMD ACP 6.3 helikooprotsessoritega, ning Intel süsteemidele on rakendatud DSPless režiim. Lisatud tugi täiendavatele helikooderitele Cirrus HD. virtio draiveris on parendatud heliseadmete haldamist.
- Lisatud tugi Etherneti kontrolleritele Marvell Octeon PCI Endpoint NIC VF ja Intel E825-C 100G.
Samas on Ladina-Ameerika vaba tarkvara fond loonud täiesti vaba 6.9 versiooni kernelist — Linux-libre 6.9-gnu, mis on puhastatud tootjate toodetud mittesvaba komponentide või koodijuppide olemasolu tõttu piiratud kasutusmugavusest. 6.9 väljaandes on värskendatud puhtaks tegemise koodi draiverites amdgpu, ath12k, adreno, btusb ja r8169. Uue ptp_fc3 draiveri puhastamine on lõpetatud. Blobe nime puhastamine on toimunud Aarch64 arhitektuuri dts-failides (devicetree). Parandatud on i915 draiveri puhastamisega seotud probleeme, mis põhjustasid initsialiseerimise ajal seiskumise. Muudatused on tehtud blobide töötlemise osas, mis on tarnitud kuueksteistkümnendate dumpidena.
Allikas: opennet.ru
