Pärast kahte kuud arendust esitles Linus Torvalds Linuxi tuuma versiooni 5.14. Oluliste muudatuste hulgas on uued süsteemi kutsed quotactl_fd() ja memfd_secret(), ide ja raw draiverite eemaldamine, uue cgroup-i sisend-/väljundprioriteedi kontrollija sisseviimine, SCHED_CORE ülesannete ajastamisrežiim, samuti infrastruktuur allkirjastatud BPF programmide laadijate loomiseks.
Uude versiooni on lisatud 15883 parandust 2002 arendajalt, patši suurus on 69 MB (muudatused puudutasid 12580 faili, lisati 861501 koodirida, eemaldati 321654 rida). Ligikaudu 47% kõikidest 5.14-s esitatud muudatustest on seotud seadmete draiveritega, umbes 14% on seotud koodiuuendustega, mis on spetsiifilised riistvara arhitektuuridele, 13% on seotud võrgu kihiga, 3% failisüsteemidega ja 3% tuuma sisemiste alamsüsteemidega.
Põhilised uuendused:
- Disski alamsüsteem, sisend/väljund ja failisüsteemid
- Cgroup-i jaoks on implementeritud uus sisend-/väljundprioriteedi kontrollija — rq-qos, mis suudab hallata blokeerivatesse seadmetesse esitatavate päringute töötlemise prioriteeti, mida genereerivad iga cgroup-i osalejad. Uue prioriteedikontrollija tugi on lisatud mq-deadline sisend-/väljund ajastajasse.
- Ext4 failijasüsteemis on rakendatud uus ioctl-käsklus EXT4_IOC_CHECKPOINT, mis sunnib kõik ootel tehingud välja kirjutama kettale ja nende seotud vahemälud, samuti kirjutab ajakirja kasutusel oleva ala uuesti salvestusse. Muudatus on valmistatud ette teabe lekete vältimise algatuse raames failisüsteemidest.
- Btrfs-sse on tehtud jõudluse optimeerimisi: ebaoluliste ajakirjaäratundjate välistamise tõttu fsync’i täitmise käigus on intensiivsete operatsioonide jõudlus suurenenud kuni 17%. Lisaks, operatsioonide kärpimisel, mis ei mõjuta ulatusi, on täieliku sünkroniseerimise täitmine välja lülitatud, mis on vähendanud operatsiooni kestust kuni 12%. Sysfs-isse on lisatud seade faili süsteemi kontrollimisel andmeedastuse ribalaiuse piiramiseks. Lisatud on ioctl-kutsed seadme suuruse muutmise ja eemaldamise toimingute tühistamiseks.
- XFS-is on ümber töötatud vahemälu rakendamine, mis on viidud lehtede mälu partii režiimi haldamisele. Parandatud on vahemälu toimimise efektiivsus.
- F2FS-i on lisatud võimalus töötada ainult lugemisrežiimis ja rakendatud on kompressitud plokkide vahemälu režiim (compress_cache) juhusliku lugemise jõudluse parandamiseks. On rakendatud failide kokkusurumise tugi, mis peegeldatakse mällu mmap() operatsiooni abil. Failide kokkusurumise valikulise keelamise jaoks on pakutud uus montaaživalik nocompress.
- exFAT draiveris on tehtud tööd, et parandada ühilduvust teatud digitaalsete kaamerate salvestusseadmetega.
- Lisatud on süsteemikõne quotactl_fd(), mis võimaldab hallata kvoote mitte spetsiaalse seadme faili kaudu, vaid failekse descriptor'iga, mis on seotud failisüsteemiga, millele kvoot rakendub.
- Kernist on eemaldatud vanad draiverid IDE-liidestega plokkseadmete jaoks, millele on juba pikka aega asenduseks tulnud libata alamsüsteem.
- Kernist on eemaldatud draiver 'raw', mis võimaldas vahemäluta juurdepääsu plokkseadmetele läbi liidese /dev/raw. Antud funktsionaalsus on juba ammu rakendatud rakendustes O_DIRECT lipu läbi.
- Mälu ja süsteemiteenused
- Ülesande planeerijas on rakendatud uus SCHED_CORE planeerimisrežiim, mis võimaldab hallata, millised protsessid võivad töötada sama CPU tuuma peal. Iga protsessile võidakse määrata küpsise identifikaator, mis määratleb usalduspiiri protsesside vahel (näiteks ühe kasutaja või konteineri kuuluvus). Koodi täitmise korral võivad planeerimisprotsessid tagada CPU ühe tuuma jagamise vaid neid protsesse jaoks, mis on seotud ühe omanikuga, mida saab kasutada teatud Spectre klassi rünnakute blokeerimiseks, takistades usaldusväärsete ja ebausaldusväärsete ülesannete täitmist samas SMT (Hyper Threading) niidis.
- Cgroup toetab kill operatsiooni, mis võimaldab lõpetada kõik rühmale seotud protsessid (saata SIGKILL) virtuaalsesse faili cgroup.kill kirjutamisega '1'.
- On parandatud võimalused, mis on seotud reageerimisega jagatud lukustuste ("split lock") tuvastamisele, mis tekivad, kui juurdepääs on ühetaolistele andmetele mälu kaudu, kuna atomaarse käsu täitmise käigus andmed ületavad kaks CPU vahemälu joont. Sellised lukustused põhjustavad märkimisväärset jõudluse langust, mistõttu varasemalt pakuti võimalust sundida lukustuse põhjustanud rakenduse lõpetamist. Uues versioonis on lisatud kernelikäsu parameeter "split_lock_detect=ratelimit:N", mis võimaldab määrata süsteemiülest lukustamisoperatsioonide intensiivsuse limiiti sekundis, mille ületamisel kõik protsessid, mis on jagatud lukustuse allikaks, peatatakse 20 ms jooksul, mitte ei lõpetata.
- CFS (CFS ribakontrolleri) cgroup-kontrollis on rakendatud võimalus määrata piirangud, mis on määratud ajavahemikku, mis võimaldab paremini reguleerida viivitustele tundlike koormuste ressursikasutust. Näiteks, kui seada cpu.cfs_quota_us väärtuseks 50000 ja cpu.cfs_period_us väärtuseks 100000, siis saab protsessigrupp kulutada iga 100 ms jooksul 50 ms CPU aega.
- Lisatud on algne infrastruktuur BPF-programmide laadijate loomiseks, mis edaspidi võimaldab lubada ainult usaldusväärse digitaalse võtmega allkirjastatud BPF-programmide laadimist.
- Uus futex-operatsioon FUTEX_LOCK_PI2 on lisatud, kasutades monotoonset taimerit ajamahuks, mis arvestab süsteemi magamisrežiimis veedetud aega.
- RISC-V arhitektuurile on rakendatud suurte mälulehtede (Transparent Huge-Pages) tugi ja KFENCE mehhanismi rakendamise võimalus mäluvigade tuvastamiseks.
- Süsteemikõne madvise() on täiendatud lipudega MADV_POPULATE_READ ja MADV_POPULATE_WRITE, et genereerida kõikides mälu lehekülgedes, mis on seotud lugemise või kirjutamisega, 'page fault', ilma tegeliku lugemis- või kirjutamiseta (prefault). Lipud võivad olla kasulikud programmi tööviivituste vähendamiseks, võimaldades 'page fault' töötlejat eelnevalt kõiki jaotamata lehekülgi korraga täita, ootamata tegelikku nende poole pöördumist.
- Unit-testimise keskkonnas kunit on lisatud toetus testide käivitamiseks QEMU keskkonnas.
- Uued jälgijad: 'osnoise', mis jälgib rakendustes viivitusi, mis on põhjustatud katkemiste töötlusest, ja 'timerlat', mis kuvab üksikasjalikku teavet viivituste kohta, mis esinevad taimeri signaali ärkamise ajal.
- Virtualiseerimine ja turvalisus
- Lisatud süsteemikõne memfd_secret(), mis võimaldab luua privaatse mälupiirkonna isoleeritud aadressiruumis, nähtav ainult omanikuprotsessile, mitte teistele protsessidele ja otse tuumale kättesaamatuks.
- Seccomp'i süsteemi kutsefilteris on kasutusele võetud võimalus kasutada ühte atomaarset operatsiooni failikirje loomiseks isoleeritud ülesande jaoks ja selle tagastamiseks süsteemikutse töötlemise käigus. Eelistatud operatsioon lahendab kasutajaruumi käsitleja katkestamise probleemi signaali saabumisel.
- Loodud on uus mehhanism ressursside piiramise haldamiseks kasutajate ID nimekirjas, mis seob eraldi rlimit loendajad kasutajaga 'user namespace' sees. Muudatus lahendab probleemi, millega seoses kohaldatakse ühiseid ressursiloendureid, kui üks kasutaja käivitab protsesse erinevates konteinerites.
- Hüperviisoris KVM ARM64 süsteemidele on lisatud MTE (MemTag, mälu sildistamise laienduse) tugi, mis võimaldab siduda silte iga mälutegevusega ja korraldada pointerite kasutamise õigsuse kontrollimist, et vältida haavatavuste ekspluateerimist, mis on põhjustatud vabastatud mälublooke, puhverduste ülevoolu, enne initsialiseerimist toimumist ja konteksti väljaspool kasutamist.
- ARM64 platvorm pakub pointerite autentimise (Pointer Authentication) seadistust, mis nüüd saab eraldi konfigureerida tuuma ja kasutaja ruumi jaoks. Tehnoloogia võimaldab kasutada spetsialiseeritud ARM64 käsklusi tagasivaadete aadresside kontrollimiseks digitaalsete allkirjade kaudu, mis on salvestatud ise pointeri kasutamata ülemistes bittides.
- User-mode Linuxis on lisatud tugi PCI-seadmete draiverite kasutamiseks virtuaalses PCI-bussis, mida rakendab PCI-over-virtio draiver.
- x86-süsteemidele on lisatud поддержка virtio-iommu-nimelise paravirtuaalset seadet, mis võimaldab IOMMU-päringute, näiteks ATTACH, DETACH, MAP ja UNMAP edastamist virtio transporti kaudu ilma mälulehtede tabelite emuleerimiseta.
- Intel CPU-de puhul, alates Skylake'i pere lõpetades Coffee Lake'iga, on vaikesätetena keelatud Intel TSX (Transactional Synchronization Extensions) laienduste kasutamine, mis pakuvad vahendeid mitme lõimega rakenduste jõudluse parandamiseks dünaamilise üleliigsete sünkroniseerimisoperatsioonide kõrvaldamise kaudu. Laiendused on keelatud Zombieload'i rünnakute võimaluse tõttu, mis manipuleerivad külgkanalite kaudu teabe leketega, mis tekivad töömehanismi asünkroonsete katkestuste (TAA, TSX Asynchronous Abort) töötamisel.
- Võrgu alamsüsteem
- Jätkatud integreerimist MPTCP (MultiPath TCP) tuumasse, TCP protokolli laiendus, mis organiseerib TCP-ühenduse, edastades pakette samal ajal mitme marsruudi kaudu erinevate võrguliideste kaudu, mis on seotud erinevate IP-aadressidega. Uues väljaandes on lisatud mehhanism kasutaja ruumide seadistamiseks oma liikluse räsi poliitikate jaoks IPv4 ja IPv6 (multipath hash policy), mis võimaldab määrata, milliseid pakettide kihtide välju, sealhulgas kapseldatud, kasutatakse paketi teekonna valimiseks arvutatava räsi määratlemiseks.
- Virtio virtuaalsesse transporti on lisatud SOCK_SEQPACKET sokettide tugi (järjestatud ja usaldusväärne datagrammide edastamine).
- SO_REUSEPORT sokettide mehhanismi võimalusi on laiendatud, võimaldades mitmel kuulaval soketil ühineda ühte porti, et vastu võtta ühendusi, jaotuslike päringute jagamisega kõigi SO_REUSEPORT kaudu ühendatud sokettide vahel, mis lihtsustab mitme lõimega serverirakenduste loomist. Uues versioonis on lisatud vahendid juhtimise edastamiseks teisele soketile juhul, kui algselt valitud soketirakenduse jooksul esineb viga (lahendab probleemid üksikute ühenduste kadumisega teenuste taaskäivitamisel).
- Seadmed
- Amdgpu draiveris on integreeritud tugi uutele AMD Radeon RX 6000 GPU seeriatele, mis arenevad koodnimede all "Beige Goby" (Navi 24) ja "Yellow Carp", samuti on parandatud GPU Aldebarani (gfx90a) ja APU Van Goghi tuge. Lisatud on mitme eDP-paneeli samaaegse kasutamise võimalus. APU Renoir jaoks on integreeritud tugi krüpteeritud mälupuutepunktide kasutamisele videomälus (TMZ, Trusted Memory Zone). Lisatud on kuuma eemaldamise tugi graafikakaartide jaoks (hot-unplug). Radeon RX 6000 (Navi 2x) ja vanemate AMD GPU-de jaoks on vaikimisi aktiveeritud energiasäästumehhanismi ASPM (Active State Power Management) tugi, mis varem oli aktiveeritud ainult GPU-dele Navi 1x, Vega ja Polaris.
- AMD kiipide jaoks on lisatud tugi jagatud virtuaalmälu (SVM, shared virtual memory) HMM (Heterogeneous memory management) alusel, mis võimaldab kasutada seadmeid oma mälu juhtimissektsioonidega (MMU, memory management unit), mis saavad juurdepääsu põhimenüle. HMM-iga saab luua ka ühiselt adresseeritud mäluruumi GPU ja CPU vahel, kus GPU võib saada juurdepääsu protsessi põhimenüle.
- Lisatud algne tugi AMD Smart Shifti tehnoloogiale, mis muudab dünaamiliselt CPU ja GPU energiatarbimisparameetreid AMD kiibistikuga ja -kaardiga sülearvutites, et suurendada jõudlust mängimisel, videoeditimisel ja 3D-renderdamisel.
- Intel i915 draiverisse on lisatud tugi Intel Alder Lake P kiipidele.
- Lisatud drm/hyperv draiver Hyper-V virtuaalse graafikakaardi jaoks.
- Lisatud tugi Raspberry Pi 400 all-in-one arvutile.
- Lisatud dell-wmi-privacy draiver, et toetada Dell sülearvutites kaasasolevaid kaamera ja mikrofoni riistvara lüliteid.
- Lenovo sülearvutitele lisati WMI liides BIOS-i seadete muutmiseks sysfs /sys/class/firmware-attributes/ kaudu.
- Laienenud tugi USB4 liidese seadmetele.
- Lisatud tugi helikaartidele ja koodekitele AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 ja Texas Instruments TAS2505. Parandatud heli tuge Lenovo HP ja ASUS sülearvutites. Lisatud täiendused heli edastamise viivituste vähendamiseks USB liidese seadmetes.
Allikas: opennet.ru
