Pärast kahte kuud arendust tutvustas Linus Torvalds Linuxi kerneli versiooni 6.17. Kõige märgatavamate muudatuste hulka kuuluvad: Btrfsi jõudluse parandamine, süsteemikutsed file_getattr() ja file_setattr(), ühe- ja mitme protsessori konfiguratsioonide ühtlustamine ülesannete ajakava, moodul DAMON_STAT mäluelevuse statistika jaoks, Live-patchide toimetamine ARM64 süsteemides, core-dumpide saatmine AF_UNIX soketi kaudu, SCHED_EXT limiteerimine cgrupi kaudu, lihtsustatud kaitse seadistamine CPU haavatavuste eest, Clangi kokkupanek muutujate initsialiseerimisega virnas, /proc asendamise kaitse, RV (Run Time Verification) alam süsteemi laiendamine, AF_UNIX sokettide limiteerimine AppArmori kaudu, TCP DualPI2 ülekoormuse kontrollimise algoritm.
Uue versiooniga on kaasas 14334 parandust 2118 arendajalt, paketi suurus on 46 MB (muudatused puudutasid 12841 faili, lisatud on 646654 koodirida ja eemaldatud 398782 rida). Eelmises väljaandes oli 15924 parandust 2145 arendajalt, paketi suurus oli 50 MB. Umbes 43% kõigist väljaandes 6.17 esitatud muudatustest on seotud seadme draiveritega, umbes 12% muudatustest puudutab koodi, mis on spetsiifiline riistvaraarhitektuuridele, 14% on seotud võrgustiku steegiga, 4% -ga failisüsteemidest ja 3% -ga tuuma sisemiste süsteemidega.
Peamised uuendused tuumas 6.17 (1, 2, 3):
- Disski alamsüsteem, sisend/väljund ja failisüsteemid
- Btrfs on testitud suurte mälufolioonide (large folios) katsetamisega, mis vähendavad kulusid ja parandavad mitmete toimingute jõudlust. Kanseldusruumide bitmapide päringute vahemälu rakendamine on tõstnud tühi failide loomise jõudlust 20%. Andmete kokkusurumise rakendavates süsteemides on paranenud ennustav lugemine. XArray struktuuris on tagatud tihedam võti paigutamine, mis on suurendanud ulatusedruppide sõlmede kompaktsust ja vähendanud lõpp-sõlmede arvu 50-70%. Lisatud on täiendavad kokkusurumise seadistused defragmentitud ulatuses.
- Ext4 failisüsteemis on lisatud RWF_DONTCACHE lipuga puhversüsteemi sissetulekut, kus andmed eemaldatakse lehekülgede vahemälust kohe pärast toimingu lõpetamist.
- EROFS failisüsteemis on rakendatud metaandmete kokkusurumise tugi.
- NFS-server võib nüüd delegaatida kirjutamistoimingud klientidele, kes avavad faile ainult kirjutamisrežiimis.
- Süsteemikutsesse fallocate() on lisatud lipp FALLOC_FL_WRITE_ZEROES, mis võimaldab määratud vahemiku failis täita nullidega, kasutades mõnede SSD-diskide toetatud käsku WRITE_ZERO, mis teostab nullimise ilma sisendi/väljundi toiminguteta. See valik on hetkel saadaval ainult Ext4 failisüsteemis.
- Lisatud süsteemikutsed file_getattr() ja file_setattr() määratud faili inode atribuutide manipuleerimiseks.
- Optiliste meedia paketirežiimi töötav draiver "pktcdvd" on eemaldatud, kuna see märgiti 2016. aastal aegunuks.
- Linuxi tuuma Bcachefsi failisüsteem viidi välise hoolduse režiimi, mis tähendab, et muudatused Bcachefsi põhituuma koosseisus ei ole enam aktsepteeritud, kuid selle failisüsteemi kood jääb tuuma koodibaasi. Bcachefsi arendamine toimub tuuma koodibaasist väljaspool, kuni Kent Overstreet tõendab praktikaliselt teiste tuuma arendajate koostöövõimet ja oskust järgida kehtivaid arendusreegleid.
- Mälu ja süsteemiteenused
- Ülesannete plaanijast on eemaldatud ühesuguse protsessoriga konfiguratsioonide tugi. Ühe protsessoriga süsteemides tuleks nüüd kasutada SMP jaoks loodud tuuma. Üheprotsessoriliste ja mitmeprotsessoriliste süsteemide kood on ühtlustatud ja vabanenud liigsetest sidemetest CONFIG_SMP tuuma parameetriga.
- Lisatud on näidis tuuma moodul DAMON_STAT (Data Access Monitoring Results Stat), mis võimaldab jälgida juurdepääsu operatiivmälu kaudu DAMON-i (Data Access MONitor) alamsüsteemi. Moodul pakub statistikat mitteaktiivsuse (memory_idle_ms_percentiles) ja prognoositava mälu läbilaskevõime (estimated_memory_bandwidth) kohta.
- ARM64 arhitektuuriga süsteemides on rakendatud Live-patchide tugi, mis võimaldab rakendada parandusi Linuxi tuumale reaalajas, ilma süsteemi taaskäivitamata või peatamata.
- Minimalistlikus C-raamatukogus nolibc, mis on kaasas Linuxi tuum allikatekstide komplektiga ja pakub sidet põhistatistika kutsetega, on rakendatud toetust arhitektuuridele SuperH, x32, MIPS n32 ja MIPS n34.
- Tuvastatud sisu saatmise võimalus core-dumpide jaoks AF_UNIX-sokiti kaudu, võimaldades luua kasutaja ruumis turvalisemaid core-dumpide töötlejaid, mis ei ole seotud privileeritud protsesside tuuma kutsumisega. Uues versioonis on lisatud protokoll, et luua serverite, mis suudab hallata core-dumpide töötlemist eraldi ülesannete tasandil. Näiteks on võimalik ühte tüüpi protsesside jaoks core-dumpe ignoreerida, samas kui teistele nende saatmine sokiti kaudu on lubatud. Eraldi on ette valmistatud serveri prototüüp core-dumpide haldamiseks.
- Lisatud tuuma käsurea valik "crashkernel=size,cma", et reserveerida CMA (Contiguous Memory Allocator) kaudu mälu ruumi tuuma crash-dumpi salvestamiseks.
- Pidfd mehhanismi funktsioonid on laienenud, võimaldades kasutada identifikaatoreid, mis on seotud konkreetsete protsessidega ja mis ei ole nagu pid uuesti määratavad. Lisatud on võimalus seostada pidfd laiendatud atribuute kasutajasfäärist. Failide descriptorite avamine pidfd jaoks on lubatud funktsiooni open_by_handle_at() kaudu ilma failisüsteemiga sidumata. Süsteemi genereeritud teave, mis on seotud pidfd-ga, seondub nüüd protsessiga, mitte pidfd-ga, ning säilib, kui sama protsessi taas avatakse.
- BPF alamsüsteemi on lisatud funktsioon bpf_cgroup_read_xattr() failide laiendatud atribuutide lugemiseks. On võimaldatud kasutada BPF-programmides tüüpilisi stringitehteid, nagu bpf_strcmp, bpf_strnchr, bpf_strchrnul, bpf_strlen ja bpf_strspn, mis töötavad ainult lugemisrežiimis. On lisatud võimalus kasutada standardseid vooge stdout ja stderr komponentidega suhtlemiseks kasutajaruumi. LoongArch arhitektuuril põhinevates süsteemides on BPF-s rakendatud dünaamilise koodi muutmise võimalus, „BPF trampoline” mehhanism (mis vähendab kulu kutsungite edastamisel tuuma ja BPF-programmide vahel) ning BPF kaudu struktuurioperatsioonide (struct_ops) kasutamisega funktsioonide töötlemise käivitamine.
- Aja arvestussüsteemis on rakendatud tugikellade (auxiliary) toetamist, mis ei ole seotud tavaliste süsteemi kelladega ja käivad oma rütmis (varasemalt käisid kõik kellad sama rütmiga ja erinesid ainult nihkega).
- Lisatud algne tugi Proxy Execution'ile, et leevendada prioriteetide inversiooni probleeme. Proxy Execution võimaldab lukustuse vabastamist ootaval ülesandel edastada oma teostuskonteksti ülesandele, mis lukustab, kiirendades lukustuse vabastamist.
- Jätkatud muutuste üleviimist Rust-for-Linux harust, millel on seos Rust keele kasutamisega teise keelena draiverite ja tuumamoodulite arendamisel (Rust'i tugi ei ole vaikimisi aktiveeritud ja ei Lisa Rust'i tuuma kohustuslike ehitus sõltuvuste hulka). Lisatud abstraktsioonid pinge ja voolu regulaatorite, püsivara omaduste, sisend-/väljundressursside ja mäluressursside haldamiseks. Teostatud makro 'warn_on!()'. Lisatud tüüp UserPtr kasutajatühikute puhul. Laiendatud moodulite workqueue, uaccess, dma, time ja list funktsionaalsust. Lisatud moodul 'bits' funktsioonidega 'bit' ja 'genmask'.
- CRC kontrollsummade arvutamise kood on ümber töötatud ja lisatud uued funktsioonid SHA-1 ja SHA-2 räside genereerimiseks. Lisatud on riistvaraarhitektuurile spetsiifilised optimeerimised. crc32c() funktsiooni jõudlust on suurendatud uutel x86_64 CPU-del, mis toetavad VPCLMULQDQ laiendust (Vector Carry-Less Multiplication of Quadwords).
- S390 süsteemide jaoks on rakendatud toimetamise toetust vahetusfailides ja suurte mälu lehtede (transparent huge page) migreerimise toetust.
- Lisatud on võimalus seadistada mälu lehtede aktiivset vabastamise agressiivsust (proactive-reclaim), kui seda on puudu, seoses eraldi NUMA sõlmedega, mis võimaldab määrata NUMA sõlmed, mille jaoks rakendatakse intensiivsemat mälu vabastamist. Näiteks: "echo '512M swappiness=10' > /sys/devices/system/node/node1/reclaim".
- SCHED_EXT mehhanismi, mis võimaldab kasutada BPF-i CPU plaanijate loomiseks, on lisatud võimalus hallata läbilaskevõimet kaudu cgroup. Näiteks saab kasutada parameetrit cpu.max CPU koormuse piiramiseks.
- Automaatne virtuaalse failisüsteemi tracefs mountimine katalooge /sys/kernel/debug/tracing on kuulutatud vananenuks, selle asemel peaks kasutama /sys/kernel/tracing.
- Virtualiseerimine ja turvalisus
- Lisatud on võimalus sisse lülitada CPU haavatavustest kaitsmiseks rünnakute blokeerimise vektorite valiku kaudu konkreetsete haavatavuste määramise asemel. Blokeerimismeetodid valitakse sõltuvalt isoleerimise rikkumise tüübist: kasutaja ja tuuma (user-kernel) vahel, kasutaja ja teise kasutaja (user-user) vahel, külg süsteemi ja host-üksuse (guest-host) vahel, erinevate külg süsteemide (guest-guest) vahel ning erinevate lõimede (cross-thread) vahel. Pakutud lähenemine võimaldab aktiveerida ainult kaitse nende haavatavuste klasside eest, mis kasutajat tegelikult puudutavad. Näiteks saavad pilvesüsteemide omanikud aktiveerida guest-host ja guest-guest režiimid, mille järel aktiveeritakse kaitsemeetodid haavatavuste vastu BHI, GD, L1TF, MDS, MMIO, Retbleed, RFDS, Spectre_v2, SRBDS, SRSO ja TAA.
- Lisatud Clangi kompilaatori toetamine, sealhulgas sügava jälgimise režiim, kus initsialiseeritakse kõik mälu pakis salvestatud muutujad. Initsialiseerimine toimub, et vältida teabe leket tuumast mitteinihti seal olevate muutujate kaudu, mis võivad sisaldada varem pakis salvestatud andmete jääke. Varem toetas sarnast funktsiooni GCC-plugin STACKLEAKiga.
- Lisatud kaitse failisüsteemi /proc rünnaku asendamise vastu, kasutades mälestamist režiimis "bind". /proc juure inode number on nüüd fikseeritud (PROCFS_ROOT_INO) ja seda saab kontrollida kasutajapoolse protsessi poolt.
- RV (Runtime Verification) alamsüsteemi, mis on mõeldud kõrgelt usaldusväärsete süsteemide töö korrektsuse kontrollimiseks, on lisatud rtapp (reaalajas rakenduste jälgija) monitooringu komponent rakenduste tavapäraste probleemide jälgimiseks, mis töötavad reaalajas, samuti komponentide rp, sssw ja opid lisamine ülesannete ajastaja testimiseks. On rakendatud võimalus luua monitooringu komponente, mis määravad käitumismudeli lineaarse ajaloogika abil, mitte deterministliku automaadina. Kontrollimine toimub täitmise ajal, sidudes töötlejad jälgimispunktidega, mis võrdlevad tegelikku täitmisprotsessi eelnevalt määratletud standardmudeliga, mis määratleb süsteemi oodatud käitumise.
- AppArmori süsteemi on lisatud tugi AF_UNIX soklite juurdepääsu haldamiseks.
- KVM hüperrafteris on ARM-süsteemidel rakendatud GICv5 katkestuste kontrollija tugi.
- Lisatud on CONFIG_KVM_IOAPIC seadistus, mis võimaldab keelata APIC, PIC ja PIT emulatsiooni toe KVM-is.
- Lisatud on kaitse VMSCAPE haavatavuse eest.
- Lisatud ioctl-käsk FS_IOC_GETLBMD_CAP, et saada kasutajaruumi kaudu teavet faili kohta, millel on rakendatud integriteedi kaitsemeetmed.
- Sisendliides /sys/fs/selinux/user tunnistatakse aegunuks, millele pöördumisel lisatakse nüüd viis sekundit viivitust ja logisse antakse hoiatus.
- Võrgu alamsüsteem
- PSE (Power Sourcing Equipment) tehnoloogia rakendusse, mida kasutatakse toite edastamiseks Etherneti kaudu selliste seadmete nagu IP-kaamerad ja juhtmevabad pääsupunktid, on lisatud konfigureeritavate toitebüroo hindamisstrateegiate tugi (üldiselt kergesti kättesaadav). Sellised strateegiad võimaldavad kindlaks teha, millised pordid tuleks esmakordselt välja lülitada, et vältida ülekoormust.
- MCTP (Management Component Transport Protocol) protokolli rakendusse on lisatud tugi paketide suunamiseks välistele sõlmedele läbi vahe-sõlmede (gateway-routing). Näiteks allolevad reeglid võimaldavad suunata pakette sõlmele, mille ID on 10 (Endpoint ID 10), seadme mctpi2c0 kaudu, kasutades aadressi 0x1d, mis on otse seotud sõlmega, mille ID on 9. mctp route add 9 via mctpi2c0 mctp neigh add 9 dev mctpi2c0 lladdr 0x1d mctp route add 10 gw 9
- UNIX-socketite (AF_UNIX) on rakendatakse SO_INC valikut ning VSOCK aadressiperel SIOCINQ. Rakendatud valikud on sarnased TCP_INQ valikule TCP jaoks ja võimaldavad juhtmessengeri kaudu saada teavet selle kohta, kui palju baitide lugemiseks soketis saadaval on.
- TCP puhul on range järgimine kuulutatud vastuvõtuaken, mille suurus määrab andmete suuruse, mida tohib saata, kuni teine pool kinnitab ACK. Varem töötles tuuma andmeid, mis ületasid kuulutatud vastuvõtuaken, kuid nüüd lõpetab see selle tegemise.
- MPTCP (Multipath TCP) on lisatud võimalus kasutada TCP_MAXSEG soketi valikut, et piirata saadetavate segmentide maksimaalset suurust. MPTCP on TCP protokolli laiendus, mis võimaldab pakettide kohaletoimetamist samaaegselt mitme marsruudi kaudu erinevate võrguliidestega, mis on seotud erinevate IP-aadressidega.
- Lisatud TCP DualPI2 (RFC 9332) ülekande kontrolli algoritmi tugi, mis võimaldab kasutada skaleeritavaid ülekande kontrollereid liikluse jaoks, millel on kõrged teenuse kvaliteedi nõuded (nt TCP-Prague ja DCTCP), ilma et see vähendaks klassikalise liikluse jõudlust, millele rakendatakse selliseid ülekande kontrollereid nagu Reno ja Cubic.
- Lisatud sysctl „force_forwarding”, mille kaudu saab aktiveerida liikluse suunamist valitud võrgu liidestel IPv6-ga.
- Eemaldatud SACK (Selective Acknowledgment) pakettide kaotuse määramise algoritmi tugi, nagu on kirjeldatud RFC 6675-s. See algoritm kuulutati 2018. aastal aegunuks. TCP-pakettide kaotuse määramiseks soovitatakse kasutada RACK-TLP algoritmi.
- Seadmed
- Jätkub drm-draiveri (Direct Rendering Manager) Xe arendamine Intel Xe arhitektuuril põhinevatele GPU-dele, mida kasutatakse Intel Arc seeria graafikakaartides ja integreeritud graafikas alates Tiger Lake protsessoritest. Uues versioonis on vaikimisi lisatud tugi Panthor Lake mikroarhitektuuri alustele ja lisatud tugi WildCat Lake mikroarhitektuuri alustele.
- AMDGPU draiveris GFX9.x GPU jaoks toetab Cleaner Shader mehhanismi, mis tagab GPU mälu puhastamise enne selle uuesti kasutusele võtmist, et vältida andmete leket, mis jääb pärast teise protsessi käitamist. Parandatud on ooteoleku tuge. Lisatud on tugi magamerežiimile keskkondades, kus on AMD SR-IOV. Parandatud on valgustuse juhtimist.
- i915 draiveris on rakendatud drm_panic mehhanismi tugi, mis kuvab tõrgete korral midagi sarnast 'sinise ekraani surmale'. Lisatud on toe kuvamisregulaator, mida kasutatakse Wildcat Lake perekonna kiipides.
- NVIDIA GPU Nova draiverikomponentide integreerimist jätkatakse, mis on varustatud GSP-firmwarega, mida kasutatakse alates NVIDIA GeForce RTX 2000 seeriast, mis põhineb Turing mikroarhitektuuril. Draiver on kirjutatud Rust keeles. Uues versioonis on lisatud abstraktsioonitase DMA töötlemiseks, teostatud VBIOS-i parser, lisatud kood raamifaili seadistamiseks ning tagatud kiirendatud laadimise tugi Falcon režiimis.
- Adreno draiveris on lisatud Qualcomm Adreno x1-45 ja x1-85 GPU tugi.
- MSM draiveris on lisatud Adreno SM8750 GPU toimetamine ja videomälu (VM_BIND) mapimine.
- Panfrosti draiverisse on lisatud GPU Mali tugi, mida kasutatakse Mediatek mt8370 SoC-is.
- Lima draiverisse on lisatud GPU tugi, mida kasutatakse Rockchip RK3528 SoC-is.
- Lisa mtd (Memory Technology Devices) draiver NVM-mälu ligipääsuks, mis on integreeritud Intel GPU-sse.
- Lisa tugi ASoC IMX WM8524, AMD ACP7.2, SoundWire ACP 7.1, Fairphone 4 & 5, Qualcomm QCS8275, Framework Laptop 13 (AMD Ryzen AI 300), CS35L41 HDA (kasutatakse ASUSi sülearvutites), Richtek RTQ9124, TI TAS5753, HP EliteBook x360 830 G6, EliteBook 830 G6, LG 16Z90R-A, HP 15-fc000 helisüsteemidele. Tehtud HD-helikoodi reorganiseerimine.
- Lisa tugi ARM-platformidele, SoC-idele ja seadmetele: NVIDIA Tegra264, Marvell PXA1908 (Marvelli esimene 64-bitine kiip nutitelefonide jaoks), CIX P1, Axiado AX3000, Sophgo SG2000 (kombineerib ARM ja RISC-V tuumad), Mediatek mt6572, exynos2200 (kasutatakse Samsung Galaxy S22-s), Renesas R-Car V4M-7, TI am62d2 ja Sophgo sg2042, sülearvutid, mis põhinevad Mediatek mt8186-l ja Qualcomm Snapdragon X1-l ning nutitelefonid ja tahvelarvutid, mis põhinevad SoC mt6572-l, tegra30-l ja msm8976-l.
Sama ajal lõi Ladina-Ameerika vabade tarkvarade fond täielikult vaba 6.17 tuuma variandi – Linux-libre 6.17-gnu, mis on puhastatud kõikidest sulgudest ja draiveritest, mis sisaldavad mittevabad elemente või koodilõike, mille rakendamine on piiratud tootja poolt. 6.17 väljaandes on värskendatud amdgpu, prueth, iwlwifi, btusb, pci mhi host, adreno a6xx, nova-core ja Intel AVS draiverites blobide puhastamise koodi. Blobide nimede puhastamine dts-failides (seadmepuu) ARM-kiipide ja Intel IPU7 jaoks on lõpetatud. Uute pci hda draiverite blobide laadimine on neutraliseeritud. QLogic infiniband draiveri blobide puhastamine, mis on tuumast eemaldatud, on lõpetatud.
Allikas: opennet.ru
