Pärast kaht kuud arendust esitles Linus Torvalds Linuxi 6.9 tuuma. Kui rääkida kõige märgatavamatest muudatustest, siis on need: dm-vdo moodul plokkseadmete deduplikatsiooniks ja kompressiooniks, otsefailide juurdepääs FUSE'is, pidfd loomise tugi eraldi lõimede jaoks, BPF-tokenite mehhanism, Rusti tugi ARM64 süsteemidele, Ext2 failisüsteemi klassifitseerimine vananenud süsteemide hulka, vana NTFS draiveri eemaldamine, Intel FRED mehhanismi tugi.
Uude versiooni on lisatud 15680 parandust 2106 arendajalt, patši suurus on 54 MB (muudatused puudutasid 11825 faili, lisati 687954 koodirida, eemaldati 225344 rida). Eelmises versioonis oli 15641 parandust 2018 arendajalt, patši suurus oli 44 MB. Umbes 42% kõikidest 6.9 esitatud muudatustest on seotud seadme draiveritega, umbes 17% muudatustest puudutavad riistvaraspetsiifilist koodi uuendamist, 13% on seotud võrgustiku kihiga, 7% failisüsteemidega ja 4% tuuma sisemiste alamsüsteemidega.
Peamised uuendused tuumas 6.9:
- Diskisüsteem, sisend/väljund ja failisüsteemid
- Seadmese väljaandesse (DM) on lisatud uus töötleja dm-vdo (virtuaalne andmete optimeerija), mis võimaldab olemasolevate plokkseadmete alusel luua virtuaalset plokkseadet, mis pakub selliseid võimalusi nagu korduvate andmete deduplikatsioon, andmete kompressioon, tühjade plokkide välistamine ja plokkseade suuruse suurendamine vajaduse korral (õhuke provisioneerimine). Need võimalused on rakendatavad plokkseadmestiku tasandil ja ei ole sõltuvad kasutatavast failisüsteemist (näiteks, dm-vdo abil on võimalik automaatne korduvate andmete liitmine ja teabe salvestamine kompressitud kujul mis tahes failisüsteemides). Toetatakse dm-vdo rakendamist füüsilistes salvestusruumides, mille suurus ulatub kuni 256 TB ja loogiliste mahtude loomist kuni 4 PB. Jaotuste haldamiseks soovitatakse kasutada lvm-i. VDO tehnoloogia on arendatud ettevõtte Permabit poolt ja avatud pärast selle omandamist Red Hat'i poolt 2017. aastal.
- FUSE alamsüsteemis, mida kasutatakse kasutajaruumis failisüsteemide rakendamiseks, on lisatud esialgne "passthrough" režiimi teostus, mis võimaldab tuuma tasemel otse faile lugeda, mööda kasutajaruumis töötavat protsessi, mis oluliselt suurendab jõudlust teatud olukordades. Näiteks võivad FUSE failisüsteemide teostused, mis töötavad ainult lugemisrežiimis ja piiravad failidele juurdepääsu, edastada failide sisu algsest failisüsteemist ilma, et see tuleks edastada FUSE protsessi.
- Kategooriasse vananenud (deprecated) on viidud Ext2 failisüsteemi teostustega draiver. Põhjuseks on mainitud, et draiver toetab ainult 32-bitiseid aja loendureid inode's, mis ületavad oma piiri 19. jaanuaril 2038. Ameti koodit pakub kasutada ext4 draiverit, mis toetab Ext2 failisüsteemi ja on täielikult ühilduv, kuid suudab samas kasutada ext2 osade ajatempleid, mis ei allu 2038. aasta probleemile, kui failisüsteem on loodud inode'ga, mille suurus on rohkem kui 255 baiti (Ext2 draiveris kasutati 32-bitiseid aega loendureid sõltumata inode'i suurusest).
- Vana NTFS failisüsteemi draiver on eemaldatud ning alates versioonist 5.15 on selle asemel kasutusele võetud uus NTFS3 draiver. Kahe NTFS rakendava draiveri tarnimist tuumas on tunnustatud ebaotstarbekaks, kuna vana draiverit ei ole juba mitu aastat uuendatud, see on halvas seisukorras ja suudab töötada ainult lugemisrežiimis.
- Zonefs ja hugetlbfs failisüsteemidesse on lisatud toetus kasutaja ID-dest, mis on seotud monteeritud failisüsteemide mapeerimisega, mis on mõeldud teatud kasutaja faile monteeritud võõras osas vastandama süsteemi muude kasutajatega.
- NFSv4-s on administraatoritele antud võimalus puhastada failide avamis- ja lukustusolekute seisundi.
- Ext4 failisüsteemi puhul on tähelepanu pööratud ainult vigade parandamisele ja kunit testide värskendamisele.
- Btrfs-is jätkub funktsioonide tõlkimine mälu lehtede (page folios) kasutamise suunas.
- XFS failisüsteemi puhul on jätkatud tööd fsck utiliidi rakendamise võimaluse realiseerimise nimel, et kontrollida ja parandada esilekerkivaid probleeme online-režiimis, ilma failisüsteemi lahutamata.
- Süsteemi kutsesse pwritev2() on lisatud lipp RWF_NOAPPEND, mis võimaldab määrata kirjutamise asukohta, isegi kui fail on avatud ainult andmete lisamise režiimis.
- On lisatud uusi ioctl-käske: FS_IOC_GETUUID — tagastab määratud failisüsteemi UUID-i ja FS_IOC_GETFSSYSFSPATH — määrab määratud monteeritud failisüsteemi asukoha tee /sys/fs.
- Failisüsteemid efs, qnx4 ja coda on ümber viidud uue osade monteerimise API kasutamisele.
- Failide käsitlemise toimingute rakendamine ilma suurust arvesse võtmata on parandatud. Suurenenud jõudlus tänu esialgsele võrdlemisele tundlikult suurtelt ja tagasiloomele tundetuks otsingule. Lahendatud on probleemid overlayfs-i monteerimisel kaustadele, mille puhul on seatud tundlikkuse režiim.
- Mälu ja süsteemiteenused
- Toetatakse Intel FRED (Flexible Return and Event Delivery) mehhanismi, mis on loodud alandama madalamate sündmuste tõhususe ja usaldusväärsuse parandamiseks. Täiendav usaldusväärsus saavutatakse sündmuse saabumise eristatud töötlemisega tuuma ja kasutaja kontekstis, kaitstes sisemise NMI täitmise eest ja salvestades kõik seotud CPU eksitused laiemas virnas.
- Lisatud on võimalus optimeerida CPU eraldi tuumade andmete ligipääsu nimeliste aadressiruumide (Named Address Spaces) kaudu, mis on rakendatud GCC-s GNU C laiendusena.
- Funktsiooni pidfd_open() on lisatud lipp PIDFD_THREAD, mis võimaldab luua pidfd eraldi lõimede jaoks, mitte ainult kasutada pidfd lõimede grupi juhtimisel. Samuti on ettepanek pseudofailisüsteemi rakendamiseks, et pääseda pidfd-le virtuaalses failisüsteemis. Erinevalt protsesside tuvastamisest pid-i kaudu, on pidfd identifikaator seotud konkreetse protsessiga ja ei muutu, samas kui PID pärast praeguse protsessi lõpetamist võib olla seotud teise protsessiga.
- BPF alamsüsteemi on lisatud BPF-tokenite mehhanism, mis võimaldab programmidele valikuliselt delegeerida õigusi juurdepääsuks privileege BPF-operatsioonidele; näiteks on võimalik anda ülestõstmata rakendusele juurdepääs eraldi 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 kasutajasfääri protsesside vaheliseks jagamiseks kergesti kättesaadav. Lisatud on juhis may_goto, mis võimaldab korraldada tsüklite tööd, mida saab katkestada verifikaatori poolt. Samuti on lisatud võimalus BPF-programmidest genereerida suvalisi TCP SYN küpsiseid ja luua BPF-käsitlejaid SYN-puhangute tõrjumiseks.
- Jätkatakse muudatuste edastamist Rust-for-Linux harust, mis on seotud Rust'i kasutamisega teise keele kaudu draiverite ja tuumamoodulite arendamiseks (Rust'i tugi ei ole vaikimisi aktiveeritud ja see ei too kaasa Rust'i kaasamist tuumakoodeksu kohustuslike koostamisnõuetena). Lisatud on Rust'i keele tugi 64-bitistes ARM-protsessorites. Üleminek on toimunud Rust'i versiooni 1.76 kasutamisele. Lisatud on makro 'container_of!'. Asendamatu 'ptr_metadata' asemel on kasutusele võetud stabiilne meetod 'byte_sub'. Ajavahetamiseks on lisatud moodul 'time', millel on funktsioon 'msecs_to_jiffies()'.
- io_uring alamsüsteemi on lisatud failide trimmimise võimalus (ftruncate_file).
- Lisatud on uus tööqueue tüüp WQ_BH (workqueue Bottom Halves) asünkroonse koodi täitmiseks tarkvaraliste katkestuste kontekstis, mille eesmärk on asendada vananenud tasklet'ide kasutamine.
- Ajastustöötlemise alamsüsteem on oluliselt ümber töötatud, kus on parandatud aktiivse CPU tuuma valimise loogikat tagumise haldamise täitmise ajal, et mitte äratada mittetegevate tuumade unerežiimist.
- Töös on väljatöötatud tuuma energiakasutuse mudeli (EM, Energy Model) uuendamise võimalus, mida saab kasutada näiteks töötava temperatuuri mõju arvestamiseks CPU energiatõhususele. funktsiooni em_cpu_energy() jõudlust on oluliselt parandatud, jõudlusuuringute kohaselt toimib see statsionaarses süsteemis nüüd 1,43 korda kiiremini ja RockPi 4B emulatsioonil 1,69 korda kiiremini.
- Lisatud tugi ARM64 arhitektuuri süsteemide käivitamiseks LPA2 režiimis, millel on 52-bitine virtuaalne aadressiruum.
- ARM64 süsteemidele on rakendatud pidevate PTE (Page Table Entry) salvestuste tugi, mis võimaldab suurendada jõudlust, parandades TLB (Translation Lookaside Buffer) efektiivsust.
- Mäluhalduse alamkomplekti jõudluse tõstmiseks on aktsepteeritud patšid, mis vähendavad konkurentsis olevaid lukustusi vmalloc() funktsioonis.
- LoongArch arhitektuurile on rakendatud elava patšimise mehhanism, mis võimaldab rakendada parandusi kerneli ilma taaskäivitamiseta.
- RISC-V süsteemidele on rakendatud süsteemi kutsungi tugi membarrier(), mis tagab mälu barjääride seadistamise süsteemis töötavatele tahketele.
- Tõstetud nõuded LLVM/Clangi versioonile, mida saab kasutada kerneli koostamiseks. Nüüd on vajaliku minimaalse versioonina LLVM 13.0.1 (varem toetas versioon 11+).
- Kasutajate jälgimise sündmuste mehhanismi on lisatud toetust erinevates formaatides sündmusinfo eksportimiseks (USER_EVENT_REG_MULTI_FORMAT).
- Funktsioonikutsumise jälgimise mehhanismile on lisatud võimalus jälgida funktsiooni sisenemiste argumentide olekut funktsioonist väljumise jälgimise ajal. Tagastatavate väärtuste sidumine nüüd võimaldab seondada argumendid, mida kasutati funktsiooni kutsumisel.
- Perf utiliidis on lisatud tugi väljundi agregatsiooni režiimile "cluster" ("perf stat -a --per-cluster") jagatud ressursside statistika koondamiseks. Teostas optimeerimise mälu tarbimise ajal käsu perf report ja perf annotate täitmisel.
- Virtualiseerimine ja turvalisus
- Intel Atomi protsessorites on lisatud kaitse RFDS (Register File Data Sampling) haavatavuste vastu, mis võimaldab extrakti jäänud teavet registrifailide (RF, Register File) registritest, mida kasutatakse protsessori ülesannete vahelise sisu ühiseks salvestamiseks. Haavatavuse blokeerimiseks on vajalik mikrokoodi uuendus ja eespool mainitud инструкции VERW sisu puhastamine mikroarhitektuuride puhverdes, kui naasedakse tuumast kasutajaruumi. Kaitse aktiveerimiseks tuuma laadimisel saab nimetada lipu „reg_file_data_sampling=on“. Teavet haavatavuse kohta ja vajaliku kaitsmiseks vajaliku mikrokoodi olemasolu saab hinnata failis „/sys/devices/system/cpu/vulnerabilities/reg_file_data_sampling“.
- Külg-süsteemide kaitse põhitoe rakendamine AMD SEV-SNP (Secure Nested Paging) laienduse kaudu, mis tagab turvalise töötamise rakendustes, kus on kaetud sügavad lehed ja kaitseb rünnakute vastu „undeSErVed“ ja „SEVerity” AMD EPYC protsessoritest, mis võivad ulatuda AMD SEV (Secure Encrypted Virtualization) kaitsesüsteemi ümber. KVM SNP kasutamiseks vajalikud muudatused on plaanis lisada 6.10 oksooni.
- IMA (Integrity Measurement Architecture) ja EVM (Extended Verification Module) tehnoloogiate realiseerimise moodulid on muudetud LSM (Linux Security Modules) raamistikuga kooskõlas töötavaks, mis on lihtsustanud koodi, ühendades dubleeritud funktsionaalsuse ja kasutades LSM kaudu saadavat tavapärast funktsionaalsust, kaotamata funktsionaalsust. IMA moodul on mõeldud operatsioonisüsteemi komponentide terviklikkuse kontrollimiseks digitaalse allkirja ja hash'ide põhjal. EVM moodul kaitseb failide laiendatud atribuute (xattrs) rünnakute eest, mille eesmärk on nende terviklikkust rikkuda (EVM ei lase teostada offline-rünnakut, kus sissetungija võib muuta metaandmeid, näiteks oma massmälust käivitades).
- Süsteemikutsed lsm_list_modules(), lsm_get_self_attr() ja lsm_set_self_attr() on ümberehitatud suurema ühilduvuse saavutamiseks 32-bitiste keskkondadega, mis on mõeldud laaditud LSM-modulite (Linux Security Modules) nimekirja esitlemiseks ja LSM-mooduli atribuutide (LSM) hankimiseks/kehtestamiseks. Muudatus rikub tagasipöördumise ühilduvust, kuid kuna uusi süsteemikutseid on eelmine tuuma väljaanne juba lisanud ja neid ei ole veel rakendustes kasutatud, arvas Linus Torvalds, et muudatus on lubatav.
- Katsesus UBSAN (Undefined Behavior Sanitizer) mehhanismi kasutamise taastamiseks. Probleemi sisuks on see, et kompilatorid käsitlevad märkide ja märkideta tüüpide tervete arvude ülevoolu erinevalt. Märgilised ülevoolud ja pointe ülevoolud kuuluvad määratlemata käitumise kategooriasse, samas kui märkideta ülevoolud kärbitakse mooduli 2n järgi, säilitades tulemuse madalamad bitid („wrap-around”) ning need ei kuulu määratlemata käitumise alla. Määratlemata käitumise olukordade vältimiseks kompileeritakse kernel valiku „-fno-strict-overflow” abil, mis toob kaasa „wrap-around” kasutamise kõigi täisarvude ülevoolude korral. GCC ja Clang ei suuda mõningaid probleeme korralikult diagnoosida, kui kasutatakse lippu „-fno-strict-overflow”, ja UBSAN-i sisestamine on suunatud koostööle kompilatooride arendajatega, et kõrvaldada tekkivad valehäired ja tuvastada täisarvude ülevoolud kohtades, kus pole selgeid kontrolle.
Tuuma võimalike ülevoolude kontrollimiseks kasutatakse konstruktsioone nagu „var + offset PAGE_SHIFT) < pgoff){..}"), mis on seotud kompileerimisega lipu „-fno-strict-overflow” abil ja ei kata kogu koodi, kus võib tekkida ülevool. Probleem on selles, et UBSAN-i kasutamisel andsid sellised kontrollid palju valehoiatuste teateid ning seetõttu tuli 2021. aastal UBSAN välja lülitada. Uuendatud teostuses on ettepanek kasutada spetsiaalseid annotatsioone __signed_wrap ja __unsigned_wrap ning valmis makrosid kontrollidega add_would_overflow(a, b) ja add_wrap(a, b), mis võimaldavad eristada arendajate poolt ette nähtud täisarvude ülevoolude kasutamist juhuslikest ülevooludest, mis võivad viia haavatavusteni. Ettepanek laiemaks kernelistruktuuri muutmiseks täiendavate tüüpide määratlemisega lükati tagasi Linus Torvaldsi poolt.
- Võrgusüsteem
- Võrgusubsystemis on tehtud tööd konkurentsi lukustuse „lock contention” (katse saada lukustus, mida hoiab teine lõng) vähenemise nimel. RTNL lukustuste kasutamine on vähenenud.
- Lisatud võimalus aktiveerida soklite aktiivse pollimise (busy polling) toetust eraldi epoll'i kutsungite kontekstis. Puule ja eelarve parameetritele saab määrata väärtuseid, mis ei sõltu vaikimisi süsteemsetest parameetritest.
- Rakendatud net_hotdata struktuur, et suurendada enimkasutatud võrgukonfiguratsiooni muutujaid vahemälu tõhusust.
- MPTCP-sse on lisatud tugi soklite valiku TCP_NOTSENT_LOWAT seadmiseks, mis võimaldab piirata saatmispuuderi suurust. MCTP soklite API-sse on lisatud tugided võrgundi identifikaatoritele, mis võimaldavad kasutada ühel hostil mitut üksteisega mittekatkestavat MCTP võrku.
- IPSec-i on lisatud tugi ICMP sõnumite suunamiseks vigade teabega (RFC 4301).
- Ruutude skannimise protsess aegunud eluiga on kiirendatud.
- XDP töö kiirus on suurenenud, tänu suuremate mälu blokkide eraldamise rangemale vältimisele.
- Lisatud võimalus lisada metainfot netconsole'i sõnumitele.
- Netfilteris on lubatud määrata kasutajaruumi tabelid, mis on seotud haldava taustprotsessiga ja mis ei kustutata automaatselt pärast kasutajarakenduse lõpetamist.
- Nftables'is on kiirendatud elementide lisamine seadmete komplektidesse koos ühendatud vahemikega.
- Varustus
- I915 draiveris jätkatakse Intel LunarLake (Xe 2) kiipide toe rakendamise tööd. Uued PCI identifikaatorid on lisatud Intel Arrow Lake ja Alder Lake N alusel töötavatele seadmetele. Displayportile on lisatud tunneldamise (DP tunneling) ja ribalaiuse jaotamise (bandwidth allocation) toetus. Kõikidele platvormidele on aktiveeritud fastboot režiim. Lisatud on toega seotud silumise väljund üksteise seadmete sidumise jaoks.
- AMDGPU draiveris on ette valmistatud toetuse rakendamine GPU AMD RDNA3.5 ja RDNA4 jaoks. Lisatud on tugi 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 raamistiku toetuse rakendamiseks. Tuuma moodulisse on lisatud parameeter freesync_video eksperimentaalse toe lubamiseks videorežiimide muutmise optimeerimiseks FreeSync tehnoloogia abil.
- Nouveau draiveris on ekraanihalduse kood muudetud kmemdup() funktsiooni kasutamiseks.
- Jätkatakse drm-draiveri (Direct Rendering Manager) Xe arendust, mis on mõeldud Intel Xe arhitektuuril põhinevatele GPU-dele, mida kasutatakse Intel Arc seeria graafikakaartides ja integreeritud graafikas alates Tiger Lake protsessoritest.
- Lisatud on DRM-draiver Mediatek MT8188 VDOSYS1 kiipide jaoks.
- Videopõhiste süsteemide tuumikusse seadistused on kantud sektsiooni CONFIG_VIDEO.
- Lisatud on tugi ARM64 SoC-dele: Mediatek MT7981B (Filogic 820), MT7988A (Filogic 880), NXP i.MX8DXP, Renesas R8A779G2 (R-Car V4H ES2.0), R8A779H0 (R-Car V4M), TI J722S.
- Lisatud on tugi ARM-plaatidele ja seadmetele: Android telefonid Tegra30 kiibil, Chromebooki mudelid Mediatek MT8186 kiibil, NAS, tahvelarvutid ja mängukonsoolid Rockchips RK35xx kiipide peal, Renesase SoC-d põhinevad White Hawk plaadid, Qualcomm SM8550 (Snapdragon 8 Gen 2) plaadid, Apalis Evaluation Board, Sielaff i.MX6 Solo Board, Samsung Galaxy Tab 4 10.1 LTE.
- Teostati ALSA helisüsteemi koodi refaktooring. Lisatud on toetus Microchip SAM9x7, NXP i.MX95 ja Qualcomm WCD939x helisüsteemidele. SoundWire draiverisse lisati ASoC tugi AMD ACP 6.3 helikooprotsessoritega, ning Intel süsteemidele on rakendatud DSPless režiim. Lisatud on toetus täiendavatele helikoodekitele Cirrus HD. Virtio draiveris on parendatud heliseadmete haldamist.
- Lisatud on toetus Etherneti kontrolleritele Marvell Octeon PCI Endpoint NIC VF ja Intel E825-C 100G.
Samas lõi Ladina-Ameerika Vaba Tarkvara Fond täiesti vaba Linuxi tuuma versiooni 6.9 — Linux-libre 6.9-gnu, mis on puhastatud kõigist sulgemise ja draiverite elementidest, mis sisaldavad mittevabu komponente või koodilõike, mille kasutusala on tootja poolt piiratud. Versioonis 6.9 on uuendatud puhastusprotsessi amdgpu, ath12k, adreno, btusb ja r8169 draiverite blobide osas. Uue ptp_fc3 draiveri puhastamine on teostatud. DTS-failide (devicetree) blobide nimede puhastamine Aarch64 arhitektuuri jaoks on viidud lõpule. Lahendatud on i915 draiveri puhastusprobleemid, mis põhjustasid algatamisel hangumist. Muudatused, mis on seotud blobide töötlemisega, mis on pidevalt heksadekreetiliselt dekodeeritud.
Allikas: opennet.ru
