Pärast kahte kuud arendust esitles Linus Torvalds Linuxi tuuma 5.16 väljalaskmist. Kõige märkimisväärsemate muudatuste seas on: süsteemi kutse futex_waitv Windowsi mängude jõudluse parandamiseks Wine'is, veahaldus failisüsteemis fanotify kaudu, raamatute kontseptsioon mäluhaldes, AMX protsessorijuhiste toe lisamine, mälu reserveerimise võimalus võrgu soketite jaoks, netfilteris pakettide klassifitseerimise tugi 'egress' tasemel, DAMON alamkohtade kasutamine kasutamata mälupiirkondade proaktiivseks eemaldamiseks, kirjutamisülesannete suure koormuse parem töötlemine ja mitme seadme kõvakettade toetus.
Uude versiooni on lisatud 15415 parandust 2105 arendajalt, patši suurus on 45 MB (muudatused hõlmasid 12023 faili, lisati 685198 koodirida, kustutati 263867 rida). Umbes 44% kõikidest 5.16 muudatustest on seotud seadme draiveritega, umbes 16% muudatustest puudutavad riistvaraarhitektuuride jaoks spetsiifilise koodi uuendamist, 16% on seotud võrgu stack'iga, 4% failisüsteemide ja 4% tuuma sisemiste alamprogrammidega.
Peamised uuendused tuumas 5.16:
- Diskisüsteem, sisend/väljund ja failisüsteemid
- Fanotify mehhanismi on lisatud vahendid failisüsteemi seisundi jälgimiseks ja vigade esinemise jälgimiseks. Veateave edastatakse uue sündmustüübi - FAN_FS_ERROR - abil, mida saab jälgimissüsteemides kasutajaruumi, et kiiresti teavitada administraatorit või käivitada taastamisprotsesse. Vigade järjestikuse esinemise korral tagab fanotify, et esimese vea kohta saadetakse teade koos probleemide koguarvuga, et hõlbustada edasist põhjalikku uurimist. Vigade jälgimise tugi on praegu rakendatud ainult failisüsteemis Ext4.
- Parandatud kirjutamise ülekoormuse töötlemist (write congestion), mis tekib, kui kirjutamise operatsioonide maht ületab salvestusseadmest saadavat ribalaiust ning süsteem peab blokeerima kirjutamisprotsessi päringud kuni juba saadetud päringute täitmise lõpetamiseni. Uues versioonis on täielikult ümber tehtud tuumamehhanism, mida kasutatakse ülekoormuse tekkimise teabe saamiseks ja ülesannete blokeerimise jaoks, kuna vanas lahenduses täheldati probleeme kirjutamise ülekoormuse töötlemise ja mälu lehtede swapimise läbipaistvuse koordineerimise vahel, kui süsteemis on mälu puudus.
- Btrfs-s on rakendatud seadmete tsoonimise tehnoloogia (Zoned Namespace), mida kasutatakse kõvakettades või NVMe SSD-des, et jagada salvestusruum tsoonideks, mis koosnevad plokkide või sektorite gruppidest, kuhu lubatakse andmete järjestikune lisamine ainult kogu ploki grupi uuendamisega. Lisaks on tehtud väikesed inode logimise optimeerimised, mis on võimaldanud saavutada dbench testi läbilaskevõime suurenemise 3% ja vähendada viivitusi 11%. Kataloogide logimise mehhanism on ümber töötatud, et tõhususe suurendamiseks vähendada otsingute ja blokeeringute arvu puu sees. Elementide sisestamine btree struktuuri partiide meetodil on kiirenenud (elementide massilise sisestamise aeg on lühenenud 4% ja kustutamine 12%). Lisatud piiratud tugi osade kirjutamise kokkusurutud andmete kasutamisele, samuti võimalus alamsüsteemide (subpage) defragmentatsiooniks. On tehtud ettevalmistused protokolli teise versiooni toe lisamiseks käsule „send“.
- XFS-failisüsteemis on vähendatud mälu tarbimist, kasutades sagedaste elementide jaoks eraldi slab vahemälusid ning vähendades mõningate andmestruktuuride suurust.
- Ext4-failisüsteemis on tehtud ainult vigade parandusi ja täpsustatud viivitusega initsialiseerimise tabeli inode parameetrite arvutamist.
- Blokiseadmete tasandil on rakendatud optimeerimisi, mis võimaldavad oluliselt tõsta operatsioonide koormuse sidumist CPU tuumadega efektiivsust.
- Lisatud algne tugi mitme sõltumatu mehhanismiga kõvakettadele (multi-actuator), mis võimaldavad korraga ligi pääseda mitmele sektorile erinevates magnetplaadi tsoonides.
- Uus ioctl-käsk CDROM_TIMED_MEDIA_CHANGE on lisatud, et tuvastada optiliste ketaste vahetamise sündmusi.
- EROFS-i (Enhanced Read-Only File System) failisüsteemi on lisatud tugi mitme salvestusseadmest üle töötamiseks. Erinevaid seadmeid saab peegeldada ühte 32-bitisesse blokeeritud aadressiruumi. Samuti on lisatud LZMA algoritmi kasutamine kokkusurumiseks.
- F2FS-i failisüsteemis on lisatud montaaži valikud failide fragmentatsiooni haldamiseks salvestuses (näiteks fragmentidega salvestuste optimeerimise tõrkeotsingu jaoks).
- CEPH-s on nüüd vaikimisi asynchronous režiimis kataloogide loomise ja kustutamise toimingud (vana käitumise taastamiseks tuleks montaaži käigus kasutada lippu ‘-o wsync’). Samuti on lisatud statistika jälgimise meetodite loomine välist objektide kopeerimise toimingute jälgimiseks.
- CIFS-i on lisatud montaaži parameeter tcpnodelay, mis seab võrgu sokli jaoks tcp_sock_set_nodelay režiimi, lõpetades TCP-virna ooteajastuse. Samuti on lisatud tugi sisemistele DFS (Distributed File System) lingidele montaaži ajal.
- On lisatud tugi plokkseadmest päringute lõpetamiseks pakettrežiimis. Muutuse testimine näitas, et juhuslikult lugemise operatsioonide intensiivsus Optane seadmest tõusis 6.1 miljonilt IOPS-ilt 6.6 miljonile ühel CPU tuumal.
- Mälu ja süsteemiteenused
- Uus süsteemi kõne futex_waitv on lisatud, mis võimaldab mitme futexi oleku jälgimist ühe süsteemi kõne abil. Antud funktsionaalsus meenutab Windowsi nutikust WaitForMultipleObjects, mille emuleerimine futex_waitv kaudu võiks olla kasulik Windowsi mängude tõhususe suurendamisel, mis käivitatakse Wine või Protoni alla. Lisaks saab samasugust futexide ootamist kasutada ka Linuxile kohalike mängude tõhususe optimeerimiseks.
- Tehtud on lehekülgede mälufoliantide (page folios) kontseptsioon, mille kasutamine mõnedes tuumadesüsteemides kiirendab mälu haldamist tüüpiliste koormuste korral. Praegu on peamine mälu haldamise alamsüsteem tuumas juba üle viidud foliantidele ning leheküljekohvitsioon on reaalsed, tulevikus on kavas viia üle ka failisüsteemid. Edasi plaanitakse tuuma lisada ka mitme lehekülje foliantide toetust.
Foliandid meenutavad ühendatud mälulehekülgi (compound pages), kuid erinevad parema semantika ja arusaadavama töökorralduse poolest. Süsteemisüsteemi mälu haldamiseks jagatakse saadaval olev RAM mälulehekülgedeks, mille suurus sõltub arhitektuurist, kuid x86 süsteemides arvutatakse see kilobaitides (tavaliselt 4096 baiti). Kaasaegsed süsteemid sisaldavad kümneid gigabait RAM-i, mis toob endaga kaasa mälu haldamise keerukuse, kuna tuleb töödelda tohutut arvu mälulehekülgi. Lehekülgede arvu vähendamiseks on tuumas varem rakendatud ühendatud lehekülgede (compound pages) kontseptsioon, kus struktuurid katavad rohkem kui ühe füüsilise mälulehekülje. Kuid API ühendatud lehekülgedega manipuleerimiseks jättis soovida ja tekitas lisakulutusi.
- Ülesande planeerijale on lisatud töötlus, mis arvestab CPU vahemälu klasterdamist. Mõnedes protsessorites, nagu Kunpeng 920 (ARM) ja Intel Jacobsville (x86), võib kindel arv CPU tuumadest, tavaliselt 4, jagada L3 või L2 vahemälu. Selliste topoloogiate arvestamine võib oluliselt parandada ülesannete jaotamise efektiivsust CPU tuumade vahel ülesande planeerijas, kuna ülesannete liigutamine ühe CPU klastris suurendab mälu pöördumise läbilaskevõimet ja vähendab vahemälu konkurentsi.
- Lisatud on AMX (Advanced Matrix Extensions) käskude tugi, mis on ellu viidud tulevastes serveriprotsessorites Intel Xeon Scalable, mille koodnimi on Sapphire Rapids. AMX pakub uusi kohandatavaid registreid TMM "TILE" ja käsklusi nende registrite andmetega manipuleerimiseks, näiteks TMUL (Tile matrix MULtiply) maatriksite korrutamiseks.
- Mitmel uue võimaluse rakendamine, mis põhineb eelmisel väljaandel lisatud DAMON (Data Access MONitor) alam süsteemil, mis võimaldab jälgida mäluandmete ligipääsu seoses valitud protsessiga, mis töötab kasutaja ruumis. Näiteks võimaldab alam süsteem analüüsida, millistele mälu aladele protsess on kogu oma tööaja jooksul ligipääsu omanud ja millised mälu alad on tähelepanuta jäänud.
- DAMON_RECLAIM mälualade tuvastamiseks ja väljatõukamiseks, mida ei ole kasutatud. Mehhanismi saab kasutada mälu lehekülgede ennetavaks õrnaks väljatõukamiseks, kui vaba mälu hakkab otsa saama.
- DAMOS (Data Access Monitoring-based Operation Schemes) määratud operatsioonide madvise() rakendamiseks, nagu täiendava vaba mälu vabastamine, protsessi mälu aladele, mille kohta registreeritakse teatav mälu ligipääsu sagedus. DAMOSe parameetreid saab seadistada debugfs kaudu.
- Füüsilise mälu aadressiruumi jälgimise võimalus (varem sai jälgida ainult virtuaalseid aadresse).
- ZSTDi kokkupressimise algoritm on uuendatud versioonile 1.4.10, mis on märkimisväärselt parandanud erinevate tuumakomplektide, kus kokkupressimist rakendatakse, jõudlust (näiteks tuumapildi avamine on kiiruselt tõusnud 35%, Btrfsi ja SquashFS-i tihendatud andmete avamine on paranenud 15% ja ZRAM-i puhul 30%). Alguses kasutati tuumas eraldi toodetud zstd-i implementeerimist, mis põhines versioonil 1.3.1, mis ilmus üle kolme aasta tagasi ja ei sisaldanud paljusid olulisi optimeerimisi. Peale ülemineku ajakohasele versioonile lihtsustab lisatud patch ka sümbioosi upstream-zstd haru, võimaldades genereerida koodi, et lisada see tuuma otse põhirepositooriumist zstd. Tulevikus plaanitakse zstd koodi tuumas uuendada vastavalt uute zstd teekide versioonide väljaandmisele.
- Suure portsjon eBPF-i alamsüsteemi parendusi. Lisatud on võimalus kutsuda BPF-programmidest välja tuumamoodulite funktsioone. Rakendatud on funktsioon bpf_trace_vprintk(), mis erineb bpf_trace_printk() funktsioonist, võimaldades korraga kuvada rohkem kui kolme argumenti. Uus andmestruktuur (BPF map) bloom filter on lisatud, mis võimaldab kasutada sama nimega tõenäosusstruktuuri, et määrata, kas element on kogumis olemas. Lisatud uue atribuudi BTF_KIND_TAG, mida saab kasutada BPF-programmides siltide sidumiseks funktsiooniparametritega, näiteks veateate lihtsustamiseks kasutaja programmides. libbpf-is on lubatud omade .rodata.* / .data.* sektsioonide loomine, rakendatud toetust uprobe ja kprobe jälgimisüritustele, lisatud API, et kopeerida kõiki BTF tüüpide objekte ühest objekti teise. AF_XDP toed on viidud libbpf-ist välja eraldi teeki libxdp. Arhitektuurile MIPS on loodud JIT-kompilaator BPF-i virtuaalmasinale.
- Arhitektuurile ARM64 on rakendatud ARMv8.6 laienduste toetust ajastusse, sealhulgas võimaldades süsteemsete registrite esitamise enesekehtestamist ilma ISB käskude kasutamiseta.
- Arhitektuurile PA-RISC on rakendatud KFENCE mehhanismi kasutamise võimalus mäluhäirete tuvastamiseks ning lisatud on KCSANi toe koode, et hallata olukordi.
- Pakkuda on võimalik seadistada tracefsi ligipääsuõigusi individuaalsete kasutajate ja rühmade tasemel, näiteks on nüüd võimalik lubada juurdepääs jälgimisvahenditele vaid teatud rühma liikmetele.
- Virtualiseerimine ja turvalisus
- Alamsüsteemides io_uring ja device-mapper on rakendatud auditeerimise sündmuste genereerimise toetust. io_uring-is on tagatud juurdepääsu haldamine LSM moodulite kaudu. Lisatud on auditeerimise võimalus süsteemi kutsest openat2().
- Tuuma kood on täielikult vabastatud katkestamatute lausetest case switchis (ilma return või break ilma igas plokis). Tuuma kompileerimisel saab nüüd rakendada režiimi „-Wimplicit-fallthrough”.
- Lisatud muudatused, et karmistada piiride kontrollimist memcpy() funktsiooni täitmisel.
- Asünkroonse sisendi/väljundi io_uring liideses on rakendatud võimalust rakendada sisendi/väljundi operatsioonide jaoks ohutuspoliitikaid, mida määravad SELinux ja Smack moodulid.
- IMA (Integrity Measurement Architecture) alamsüsteemis, mis võimaldab välistel teenustel tuvastada tuuma alamsüsteemide olekuid nende autentsuse kontrollimiseks, on sisse viidud reeglite rakendamise võimalus, mis põhineb faili kuuluvusgrupi (GID) või faili juurde pääseva kasutaja kuulumisel.
- Mõned seccomp() protsesside kaitsmise täiustatud mehhanismid Spectre rünnakute vastu, mis osutuvad liialdatuks ja millel ei ole märkimisväärset negatiivset mõju turvalisusele, on vaikimisi deaktiveeritud. Retpoline'i kaitse rakendamist on üle vaadatud.
- Cryptoloopi mehhanismi rakendus on eemaldatud, selle asemel rakendati 2004. aastal dm-crypt, mis toetab vajadusel samu algoritme.
- Vaikimisi on blokeeritud mitteprivilegeeritud juurdepääs eBPF alamsüsteemile. Muudatus on tehtud BPF-programmide kasutamise vältimiseks külgkanalite rünnakute tõkestamiseks. Vajadusel saab administraator taastada eBPF kasutamise mitteprivilegeeritud kasutajate poolt.
- Aeg-reaalsete ülesannete täitmiseks ja kriitiliselt olulistes süsteemides kasutamiseks mõeldud ACRN hüperviisori on lisatud virtuaalsete seadmete loomise/tekitamise ja MMIO seadmete indekseerimise toetamine.
- Krüptomootorisse on lisatud KPP (Key-agreement Protocol Primitives) määratlemise tugi, mis lihtsustab krüptosüsteemide draiverite arendamise loogikat.
- Hyper-V hüperviisori jaoks on rakendatud isolatsiooni režiimi tugi, virtuaalmasinatemille alla kuulub mälu sisu krüpteerimine.
- Hüperviisorisse KVM on lisatud RISC-V arhitektuuri tugi. Realiseeritud on virtuaalmasinate siseselt host-keskkonnas rände võimalus, mis toimub AMD SEV ja SEV-ES laienduste kasutamisel. Ont API on lisatud elava rände toetamiseks, kus külastussüsteeme krüpteeritakse AMD SEV (Secure Encrypted Virtualization) abil.
- PowerPC arhitektuuril on vaikimisi sisse lülitatud STRICT_KERNEL_RWX režiim, mis blokeerib mälulehtede kasutamise, mis on samaaegselt kirjutatav ja käitatav.
- 32-bitistes x86 süsteemides on lõpetatud mälu kuumplugimise (Memory hotplug) tugi, mis on rohkem kui aasta olnud mittetöötav.
- Kernelt on välja jäetud liblockdep teek, mis nüüd saab olema hooldatud eraldi kerneli kõrval.
- Võrgusüsteem
- Soketitele on rakendatud uus funktsioon SO_RESERVE_MEM, mille abil on võimalik reserveerida soketi jaoks kindel mälu maht, mis jääb alati soketile kergesti kätte saadavaks ja ei eemaldata. Selle funktsiooni kasutamine võimaldab suurendada jõudlust, vähendades võrgu pakette edastades mälu eraldamise ja tagastamise operatsioone, eriti süsteemi mälu puuduse tingimustes.
- Lisatud tugi multikaudu edastamise automaatse tunnelimise protokollile (Automatic Multicast Tunneling, RFC 7450), mis võimaldab edastada multikaudu liiklust võrkudest, mis toetavad multicast, saajateni võrkudes, kus multicastit ei ole. Protokoll töötab UDP pakettidesse kapseldamise kaudu.
- Parandatud IOAM (In-situ Operations, Administration, and Maintenance) andmete kapseldamist ülekande pakettides.
- Etthool netlink API-sse on lisatud võimalus juhtida vastuvõtja ja saatja energiatootmisrežiime.
- Netfilter'i alamsüsteemis on rakendatud võimalus klassifitseerida pakette egress tasemel, st etapis, mil draiver saab paketti tuuma võrgu tõukest. Nftables toetab vastavaid filtreid alates versioonist 1.0.1. Netfilter’isse on lisatud võimalus võrrelda ja muuta UDP ja TCP (sisemised pealdised / koormus), mis järgivad transport pealdist.
- Lisatud uued sysctl parameetrid arp_evict_nocarrier ja ndisc_evict_nocarrier, mille seadmisel puhastatakse ARP cache ja ndisc (naaberiikide avastamine) tabel ühenduse katkedes (NOCARRIER).
- Võrkude järjekordade juhtimise mehhanismi fq_codel (Kontrollitud viivitus) on lisatud madala latentsuse, madala kaotsimineku ja skaleeritava läbilaskevõime režiimid (L4S).
- Varustus
- Draiveris amdgpu on rakendatud esialgne tugi DP 2.0 (DisplayPort 2.0) spetsifikatsioonile ja DisplayPorti tunnelimise võimalustele USB4 kaudu. APU Cyan Skillfish (Navi 1x GPU'd) toetavad ekraanide kontrollerite lisamist. Laiendatud tugi APU Yellow Carp jaoks (mobiilsed Ryzen 6000 'Rembrandt' protsessorid).
- Draiveris i915 on stabiliseeritud Intel Alderlake S kiipide tugi ja rakendatud Intel PXP (Protected Xe Path) tehnoloogia tugi, mis võimaldab luua riistvara kaitstud graafilise sessiooni Intel Xe kiipidega süsteemides.
- Draiveris nouveau on tehtud vigade parandusi ja koodi vormindamise parandusi.
- Lisatud tugi x86-ühildlikele CPU-dele Vortex (Vortex86MX). Linux töötas varem sarnastes protsessorites, kuid nende CPU-de selge tuvastamine oli vajalik Spectre/Meltdown rünnakute kaitse keelamiseks, mis ei kehti nimetatud kiipide suhtes.
- Lisatud algne tugi x86-platvormidele Surface Pro 8 ja Surface Laptop Studio.
- Lisatud draiver helikiipide toetamiseks, mida kasutatakse APU-de AMD Yellow Carp, Van Gogh, samuti lisatud toimetuste ja koodeksete Cirrus CS35L41, Maxim MAX98520/MAX98360A, Mediatek MT8195, Nuvoton NAU8821, NVIDIA Tegra210, NXP i.MX8ULP, Qualcomm AudioReach, Realtek ALC5682I-VS, RT5682S, RT9120, Rockchip RV1126 ja RK3568 toetamiseks.
- Lisatud draiver ishtp_eclite, et viia sisse pääs Intel PSE (Programmable Service Engine) sisseehitatud kontrolleritele ISHTP (Integratd Sensor Hub Transport Protocol) protokolli kaudu, näiteks akuteabe, temperatuuri ja UCSI (USB Type-C Connector System Software Interface) seotud teabe saamiseks.
- Lisatud draiver Nintendo Switchi mängukontrollerite toetuseks, mis toetab Switch Pro ja Joy-Con seadmeid. Lisatud tugi Wacom Intuos BT tahvelarvutitele (CTL-4100WL/CTL-6100WL) ja Apple 2021 Magic Keyboard klaviatuurile. Parandatud Sony PlayStation DualSense juhtelementide toetust. Lisatud toetus Xiaomi Mi hiire külg-nuppudele.
- Lisatud draiver RT89, mis toetab Realtek 802.11ax juhtmeta kiipe, samuti draiverid Asix AX88796C-SPI Ethernet-adapteritele ja Realtek RTL8365MB-VC lülititele.
- Apple M1 kiipidega on lisatud draiverid PCI ja PASemi i2c jaoks.
- Lisatud tugi ARM SoC-dele, seadmetele ja Raspberry Pi Compute Module 4, Fairphone 4, Snapdragon 690, LG G Watch R, Sony Xperia 10 III, Samsung Galaxy S4 Mini Value Edition, Xiaomi MSM8996 (Mi 5, Mi Note 2, Mi 5s, Mi Mix, Mi 5s Plus ja Xiaomi Mi 5), Sony Yoshino (Sony Xperia XZ1 ja Sony Xperia XZ Premium), F(x)tec Pro1 QX1000, Microchip LAN966, CalAmp LMU5000, Exegin Q5xR5, sama7g5, Samsung ExynosAutov9, Rockchip RK3566, RK3399 ROCK Pi 4A+, RK3399 ROCK Pi 4B+, Firefly ROC-RK3328-PC, Firefly ROC-RK3399-PC-PLUS, ASUS Chromebook Tablet CT100, Pine64 Quartz64-A, Netgear GS110EMX, Globalscale MOCHAbin 7040, NXP S32G2, Renesas R8A779M*, Xilinx Kria, Radxa Zero, JetHub D1/H1, Netronix E70K02.
Allikas: opennet.ru
