Pärast kahe kuu arendust esitles Linus Torvalds Linuxi tuuma versiooni 5.16. Kõige silmapaistvamad muutused on: süsteemikutsung futex_waitv, et parandada Windowsi mängude jõudlust Wine'is, veahaldus FS-i kaudu fanotify, foliantide kontseptsioon mälu haldamise süsteemis, toetamine AMX protsessorite instruktsioone, võimalus reserveerida mälu võrgusoketite jaoks, netfilteri toestamine pakettide klassifitseerimise etapis „egress”, DAMON alamkogu kaasamine, et ennetada kasutusest väljas olnud mälualasid, ja paranenud koormuse töötlemine suure kirjutamise mahu korral, samuti mitme kõvaketta tugi.
Uude versiooni on vastuvõetud 15415 parandust 2105 arendajalt, patši suurus on 45 MB (muudatused puudutasid 12023 faili, lisati 685198 rida koodi ja eemaldati 263867 rida). Umbes 44% 5.16 versiooni esitatud muudatusi on seotud seadmedraiveritega, umbes 16% muudatusi on seotud riistvaraarhitektuuri spetsiifilise koodi uuendamisega, 16% seondub võrgu-kogumile, 4% -ga failisüsteemidele ja 4% tuuma sisemistele alamkondadele.
Peamised uuendused tuumas 5.16:
- Disski alamsüsteem, sisend/väljund ja failisüsteemid
- Fanotify mehhanismi on laiendatud failisüsteemi oleku jälgimise ja vigade jälgimise tööriistadega. Teave vigade kohta edastatakse uue sündmustüübi — FAN_FS_ERROR — abil, mida saab tõkestada kasutajaruumi jälgimissüsteemides, et teavitada administraatorit operatiivselt või käivitada taastamisprotsesse. Kaskaadne veaprobleemide esinemine tagab, et fanotify edastab sõnumi esimese vea kohta koos probleemide üldarvuga, et lihtsustada edasist veaanalüüsi. Vigade jälgimise tugi on praegu rakendatud ainult Ext4 failisüsteemi jaoks.
- Parandatud on kirjutamisülekande ülekoormuse töötlemist, mis tekib siis, kui kirjutamise tehingute maht ületab salvestusseadmest saadud läbilaskevõime ja süsteem peab blokeerima kirjutamisprotsessi päringud, kuni juba saadetud päringute täitmine on lõpetatud. Uues versioonis on täielikult ümber tehtud tuuma mehhanism, mida kasutatakse ülekoormuse ja ülesannete blokeerimise teate saamiseks, kuna vana rakenduse puhul esines probleeme kirjutamisülekande töötlemise ja mälu lehekülgede vahetamise vahel, kui süsteemis oli mälupuudus.
- Btrfs toetab seadmete tsoonimist (Zoned Namespace) tehnoloogiat, mida kasutatakse kõvakettades või NVMe SSD-des, et jagada salvestusruum tsoonideks, mis koosnevad plokkide või sektorite rühmadest, kuhu on lubatud ainult järjestikune andmete lisamine, uuendades kogu plokkide gruppi. Lisaks on tehtud väikseid täiustusi inode'i logimise osas, mis on parandanud läbilaskevõimet 3% võrra dbench testi käigus ja vähendanud latentsust 11%. Kataloogide logimise mehhanism on ümber töötatud, et suurendada efektiivsust, vähendades otsingute ja lukustuste arvu puus. Elemendi lisamine btree struktuuri pakettrežiimis on kiiruselt paranenud (masselementide lisamise aega on vähendatud 4% ja eemaldamise aega 12%). Lisatud piiratud tugi kasutamiseks survetöötlemisel täielikult täitmata lehtede kirjutamisel, samuti võimalus defragmenteerida alalehti (subpage). Tehtud ettevalmistused teise versiooni protokolli toetuse lisamiseks käsule „send“.
- XFS-faili süsteemis on mälu tarbimist vähendatud, kasutades sageli kasutatavate elementide jaoks eraldi slab-vahemälusid ja vähendades teatud andmestruktuure.
- Ext4-faili süsteemis on tehtud vaid veaparandusi ja täpsemat viivitusega Inode-tabeli algatamise parameetrite arvutamist.
- Blokiseadmestikul on rakendatud optimeerimisi, mis võimaldavad oluliselt tõhustada operatsioonide sidumist CPU tuumadega.
- Lisatud on algtugi mitme sõltumatu ajamiga kõvakettadele (multi-actuator), mis võimaldab korraga juurdepääsu mitmele sektorile erinevates magnetplaadi tsoonides.
- Lisaud uusi ioctl-käsku CDROM_TIMED_MEDIA_CHANGE optiliste ketaste draivi meedia vahetuse sündmuste tuvastamiseks.
- EROFS (Enhanced Read-Only File System) faili süsteemi on lisatud võimalus töötada mitme salvestusseadmestiku peal. Erinevad seadmed võivad olla peegeldatud ühte 32-bitisesse plokkide aadressiruumi. Samuti on lisatud LZMA algoritmi abil tihendamise tugi.
- F2FS-is on lisatud montaaži valikud, et hallata failide fragmenteerimist salvestuses (näiteks fragmentidega salvestuste optimeerimise tõrkeotsimiseks).
- CEPH hõlmab vaikimisi kataloogide loomise ja kustutamise toimingud asünkroonses režiimis (vana käitumise taastamiseks tuleks montaažimisel kasutada lippu '-o wsync'). Lisatud on meetrikate jälgimine, mis jälgivad väliste objektide kopeerimise toimingute tõhusust.
- CIFS-is on lisatud montaaži parameeter tcpnodelay, mille korral määratakse võrgu soketi režiim tcp_sock_set_nodelay, mis keelab TCP-stiilis järjekorra täitmist. Samuti on lisatud toetus pesastatud DFS Linkide (jagatud failisüsteem) ümbermontaažimisele.
- Lisatud toetust päringute lõpetamiseks plokkseadmest partii režiimis. Muudatuse testimine on näidanud juhuslike lugemisoperatsioonide intensiivsuse suurendamist Optane'i andmekandjatelt 6,1 miljonilt IOPS-ilt 6,6 miljonile IOPS-ile ühe CPU tuuma kohta.
- Mälu ja süsteemiteenused
- Lisatud on uus süsteemi kutse futex_waitv, mis võimaldab jälgida mitme fütiksi olekut ühe süsteemi kutse kaudu. Antud võimalus sarnaneb Windowsis olemasolevale funktsioonile WaitForMultipleObjects, mille emuleerimine futex_waitv kaudu võib olla kasulik Windowsi mängude jõudluse tõstmiseks, mis töötavad Wine'i või Proton'i all. Lisaks saab samaaegset fütiksite ooteolekut rakendada ka mängude põhiülesannete jõudluse optimeerimiseks Linuxis.
- On teostatud mälu lehtede foliantide (page folios) kontseptsioon, mille kasutamine mõnes tuumade alamsüsteemis võimaldab kiirendada mälu haldamist tüüpiliste koormuste korral. Praegu on põhialamsüsteem, mis haldab mälu tuumas, juba foliantide kasutusele võtnud ja rakendatud lehe vahemälu, tulevikus on plaanis edastada ka failisüsteemide üleminek. Tulevikus on plaanis lisada ka mitmeleheline foliantide toetus tuumale.
Foliandid meenutavad ühendatud mälu lehti (compound pages), kuid eristuvad parema semantika ja arusaadavama töökorralduse poolest. Süsteemse mälu haldamiseks jagatakse saadaval olev RAM mälulehtedeks, mille suurus sõltub arhitektuurist, kuid x86 süsteemides mõõdetakse neid kilobaitides (tavaliselt 4096 baiti). Kaasaegsed süsteemid on varustatud kümnete gigabaitidega RAM-iga, mis raskendab mälu haldamist tohutu hulga mälulehtede töötlemise vajaduse tõttu. Lehtede arvu vähendamiseks rakendati varem südamikus ühendatud lehtede kontseptsioon (compound pages), mis hõlmas struktuure, mis katab rohkem kui ühe füüsilise mälulehe. Kuid ühendatud mälulehtede käsitlemise API jättis soovida ja tekitas lisakulusid.
- Ülesande planeerijasse on lisatud töötleja, mis arvestab CPU vahemälu klastritega. Mõnedes protsessorites, nagu Kunpeng 920 (ARM) ja Intel Jacobsville (x86), võib teatud arv CPU tuumasid, tavaliselt 4, jagada L3 või L2 vahemälu. Selliste topoloogiate arvestamine võib märkimisväärselt parandada ülesannete jaotamise efektiivsust CPU tuumade vahel ülesande planeerijas, kuna ülesannete liigutamine ühe CPU klastrisse suurendab mälu pääsukaptsiteeti ja vähendab konkurentsi vahemälu puhul.
- Lisatud tugi AMX (Advanced Matrix Extensions) käskudele, mis on rakendatud tulevastes Intel Xeon Scalable serveriprotsessorites, mille koodnimi on Sapphire Rapids. AMX pakub uusi konfigureeritavaid registreid TMM "TILE" ja käske nende registrite andmete manipuleerimiseks, nagu TMUL (Tile matrix MULtiply) maatriksite korrutamiseks.
- Lisasime mitu uut funktsionaalsust, mis põhinevad eelmisel versioonil lisatud DAMON (Data Access MONitor) tilkadel, mis võimaldavad jälgida andmete juurdepääsu mälus, seondudes valitud protsessiga, mis töötab kasutajaruumi. Näiteks võimaldab süsteem analüüsida, millistele mälupiirkondadele protsess on kogu oma tööperioodil ligi pääsenud ja millised mälupiirkonnad on kasutamata jäänud.
- DAMON_RECLAIM tuvastamiseks ja mälualasuste välja tõukamiseks, mida ei ole kasutatud. Mehhanismi saab kasutada ennetava pehme mälu lehe välja tõukamise jaoks, kui vaba mälu hakkab otsa saama.
- DAMOS (Data Access Monitoring-based Operation Schemes) määratud madvise() operatsioonide rakendamiseks, nagu täiendava vaba mälu vabastamine, protsessi mälualasustele, mille puhul registreeritakse kindel ligipääsuta sagedus. DAMOSe parameetrite seadistamine toimub debugfs kaudu.
- Füüsilise aadressiruumi jälgimise võimalus (varem sai jälgida ainult virtuaalseid aadresse).
- Zstd-kompressiooni algoritmi rakendamine on ajakohastatud versioonini 1.4.10, mis on oluliselt parandanud tuuma erinevate alamsüsteemide jõudlust, kus kompressiooni rakendatakse (näiteks tuuma pildi avamine on kiiruselt suurenenud 35%, Btrfs ja SquashFS kompressitud andmete avamise jõudlus on paranenud 15% ja ZRAM-i puhul 30%). Alguses kasutati tuumas eraldi zstd-implementatsiooni, mis põhines versioonil 1.3.1, mis ilmus üle kolme aasta tagasi ja ei sisaldanud paljusid olulisi optimeerimisi. Aktuaalsele versioonile ülemineku kõrval lihtsustab ka lisatud patch zstd upstream-haru sünkroonimist, võimaldades genereerida koodi tuuma otse zstd pearepositooriumist. Tulevikus plaanitakse zstd-koodi tuumas värskendada vastavalt uute zstd raamatukogu versioonide väljalaskmiseks.
- eBPF alamsüsteemi on tehtud palju parandusi. BPF-programmidest saab kutsuda kernelimoodulite funktsioone. Käideldud on bpf_trace_vprintk() funktsioon, mis erineb bpf_trace_printk() funktsioonist, võimaldades korraga edastada rohkem kui kolm argumenti. Uus andmestruktuur (BPF kaart) ehk bloom filter on lisatud, mis kasutab sama nime kandvat tõenäosuslikku andmestruktuuri, et määrata, kas element komplekti kuulub. Uus atribuuti BTF_KIND_TAG on lisatud, mida saab rakendada BPF-programmides funktsioonide parameetritesse siltide seostamiseks, et lihtsustada vigade avastamist kasutajate programmides. Libbpf lubab luua oma .rodata.*/.data.* sektsioone, samuti on realiseeritud uprobe ja kprobe jälgimise sündmuste tugi, ning lisatud on API, mis võimaldab kopeerida kõiki BTF tüüpe ühest objektist teise. AF_XDP tugi on viidud libbpf-ist eraldi raamatukokku libxdp. MIPS arhitektuuri jaoks on realiseeritud BPFi virtuaalmasina JIT-kompilaator.
- ARM64 arhitektuuri jaoks on rakendatud ARMv8.6 laienduste tugi, sealhulgas need, mis võimaldavad süsteemiregistrite esitlemise automaatset sünkroniseerimist ilma ISB käskude kasutamiseta.
- PA-RISC arhitektuurile on rakendatud KFENCE mehhanismi, et tuvastada mälutöötluse vigu, samuti on lisatud KCSAN-i konkurentsiseisundite detektori tugi.
- Nüüd on võimalik seadistada tracefsi juurdepääsu õigusi eraldi kasutajate ja rühmade tasemel, võimaldades näiteks, et jälgimisvahenditele pääsevad ligi vaid teatud grupi liikmed.
- Virtualiseerimine ja turvalisus
- Io_uring ja seadme-mapper alamsüsteemides on toetatud auditisündmuste genereerimist. Io_uring võimaldab juurdepääsu haldamist LSM moodulite kaudu. Lisatud on võimalus auditeerida süsteemikutsumist openat2().
- Südamikukood on täielikult vabastatud katkematutest case avaldustest switchis (ilma iga case ploki järel returni või breakita). Südamiku kompileerimisel saab nüüd kasutada režiimi „-Wimplicit-fallthrough”.
- Tugevdatud on piiride kontrolli muutusi memcpy() funktsiooni käitamise ajal.
- Io_uring asünkroonse sisendi/väljundi liideses on rakendatud võimalus kasutada sisendi/väljundi operatsioonidel turvapoliitikaid, mida määratlevad SELinux ja Smack moodulid.
- IMA (Integrity Measurement Architecture) alamsüsteemis on rakendatud võimalus rakendada reegleid, mis põhinevad grupi identifikaatoril (GID), millele fail kuulub või kuhu kuulub failiga suhtlev kasutaja, et aidata välistel teenustel tuvastada tuumamoodulite alamsüsteemide olek ja kindlustada nende autentsus.
- Mõned täiendavad seccomp() kaitsemehanismid, et kaitsta Spectre rünnakute eest, on vaikimisi keelatud, kuna neid peeti liigseteks ja oluliselt ei suurendanud turvalisust, kuid negatiivselt mõjutasid jõudlust. Retpoline kaitse rakendamist on üle vaadatud.
- Cryptoloop mehhanismi rakendus on eemaldatud, selle asemel tulid 2004. aastal dm-crypt, mis toetab vajadusel samu algoritme.
- Vaikimisi on eBPF alamsüsteemile keelatud mitteprivileegitud juurdepääs. Muudatus on tehtud, et vältida BPF-programmide kasutamist külgvoolu rünnakute kaitse ringimiseks. Vajadusel võib administraator võimaldada eBPF kasutamist mitteprivileegitud kasutajatele.
- ACRN hüperviisorisse, mis on loodud reaalajas ülesannete täitmiseks ja kriitilistes süsteemides kasutamiseks, on lisatud tugi virtuaalsete seadmete loomisele/kustutamisele ja MMIO seadmete ülekandmisele.
- Krüptomootorisse on lisatud KPP (Key-agreement Protocol Primitives) määratluste tugi, mis lihtsustab krüptosüsteemide draiverite arendamise loogikat.
- Hyper-V hüperviisoril on rakendatud isolatsioonirežiimi tugi, virtuaalmasinadmis hõlmab mälu sisu krüptimist.
- Hüperviisorisse KVM on lisatud RISC-V arhitektuuri tugi. Tehtud on võimalus virtuaalmasinate migreerimise jaoks host-keskkonnas, mis kasutavad AMD SEV ja SEV-ES laiendusi. Lisa API live-migreerimiseks külalisüsteemide jaoks, mida krüptitakse AMD SEV (Secure Encrypted Virtualization) abil.
- PowerPC arhitektuuri puhul on vaikimisi aktiveeritud STRICT_KERNEL_RWX režiim, mis blokeerib kirjutamise ja täitmisega samaaegselt juurdepääsetavate mälu lehtede kasutamise.
- 32-bitistes x86 süsteemides on lõpetatud mälu kuumühenduse (Memory hotplug) tugi, mis on olnud rohkem kui aasta mittefunktsionaalne.
- Yt ydamist on väljajätud liblockdep raamatukogu, mis nüüd saadab sõltumatult tuuma.
- Võrgu alamsüsteem
- Sokettide jaoks on rakendatud uus võimalus SO_RESERVE_MEM, mille abil saab soketile reserveerida kindla hulga mälu, mis jääb alati soketi jaoks kättesaadavaks ja ei ole ära võetud. Selle valiku kasutamine võimaldab saavutada tootlikkuse suurenemist mäluhaldusoperatsioonide arvu vähendamise kaudu, eriti mälupuuduse tingimustes süsteemis.
- Lisatud toetust automaatse mitme saatmise tunnelimise protokollile (Automatic Multicast Tunneling, RFC 7450), mis võimaldab edastada mitme saatmise liiklust võrkudest, mis toetavad mitme saatmist, vastuvõtjatele võrkudesse ilma mitme saatmiseta. Protokoll töötab UDP-pakettidesse kapseldamise teel.
- Parandatud IOAM (In-situ Operations, Administration, and Maintenance) andmete kapseldamist üleminekupakettidesse.
- Ethtool netlink API-sse on lisatud võimalus juhtida vastuvõtjate energiatarbimise režiime.
- Netfilteri alamsüsteemis on realiseeritud pakettide klassifitseerimise võimalus egress-tasemel, st faasis, kui draiver saab paketi tuumast. Nftables on vastava filtreerimise toetuse saanud versioonis 1.0.1. Netfilterisse on lisatud võimalus võrdsustada ja muuta sisemisi päiseid ja andmeid UDP ja TCP (sisemine päis / koormus), mis järgivad transportpäist (transport header).
- Sisestatud on uued sysctl-parameetrid arp_evict_nocarrier ja ndisc_evict_nocarrier, mille seadistamisel puhastatakse ARP-mälu ja ndisc-tabel (naabrustuvastus) seoses ühenduse katkestamisega (NOCARRIER).
- Võrkude järjekordade haldamise mehhanismile fq_codel (Controlled Delay) on lisatud madala latentsuse, madala kaotuse ja skaleeritava läbilaskevõime režiimid (L4S).
- Seadmed
- Draiveris amdgpu on realiseeritud algne toetus spetsifikatsioonile DP 2.0 (DisplayPort 2.0) ja võimalus tunneldada DisplayPorti USB4 kaudu. APU Cyan Skillfish (Navi 1x GPU-dega varustatud) jaoks on lisatud toetus ekraanide kontrolleritele. APU Yellow Carp (mobiilsed Ryzen 6000 „Rembrandt” protsessorid) toetus on laiendatud.
- i915 draiverisse on stabiliseeritud Intel Alderlake S kiipide tugi ja realiseeritud Intel PXP (Protected Xe Path) tehnoloogia tugi, mis võimaldab korraldada riistvaraliselt kaitstud graafilise sessiooni tööd Intel Xe kiibiga süsteemides.
- nouveau draiveris on tehtud vigu parandavaid töid ja koodi vormindamise parandusi.
- Lisatud tugi x86-ühilduvatele Vortex CPU-dele (Vortex86MX). Linux toimis varem sarnastes protsessorites, kuid nimetatud CPU-de selge identifitseerimine oli vajalik Spectre/Meltdown rünnakute kaitse väljalülitamiseks, mis ei kehti nende kiipide puhul.
- Lisatud algne toetus x86 platvormidele Surface Pro 8 ja Surface Laptop Studio.
- Lisatud helikiipide draiverid, mida kasutatakse AMD APU-de Yellow Carp, Van Gogh, samuti on lisatud tugi helisüsteemidele ja koodekitele 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.
- Lisatud ishtp_eclite draiver Intel PSE (Programmable Service Engine) sisseehitatud kontrolleritele juurdepääsuks ISHTP (Integrated Sensor Hub Transport Protocol) protokolli kaudu, näiteks andmete saamiseks akude, temperatuuri ja UCSI (USB Type-C Connector System Software Interface) seotud teabe kohta.
- Lisatud Nintendo Switchi mängupuldide juht, mis toetab Switch Pro ja Joy-Con seadmeid. Lisatud tugi Wacom Intuos BT (CTL-4100WL/CTL-6100WL) tahvelarvutitele ja Apple 2021 Magic Keyboard klaviatuurile. Parandatud Sony PlayStation DualSense mängupultide tuge. Lisatud tugi Xiaomi Mi hiiremängu külgklahvidele.
- Lisatud RT89 draiver, mis toetab Realtek 802.11ax traadita kiipe, samuti Etherneti adapterite Asix AX88796C-SPI ja Realtek RTL8365MB-VC draivereid.
- Apple M1 kiipidele on lisatud PCI ja PASemi i2c draiverid.
- Lisatud ARM SoC, Raspberry Pi Compute Module 4 seadmete ja platvormide, 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 toed.
Allikas: opennet.ru
