Pärast kahte kuud arendust Linus Torvalds ydinversioon . Kõige silmapaistvamad muudatused: uus exFAT-failisüsteemi rakendus, bareudp-moodul UDP-tunnelite loomise jaoks, ARM64-põhine osutite autentimise kaitse, võimalus kinnitada BPF-programme LSM-töötlejatele, uus Curve25519 rakendus, split-lock detektor, BPF ühilduvus PREEMPT_RT, 80-tähemärgi piirangute eemaldamine koodis, CPU temperatuurinäitude arvestamine ülesannete ajakava koostamisel, võimalus kasutada clone() protsesside käivitamiseks teises cgroupis, mälu kirjutamise kaitse userfaultfd abil.
Uude versiooni on lisatud 15033 parandust 1961 arendajalt,
patši suurus on 39 MB (muudatused puudutasid 11590 faili, lisatud 570560 rida koodi,
kustutatud 297401 rida). Umbes 41% kõigist 5.7
muudatustest on seotud seadme draiveritega, umbes 16% muudatusi on
seotud riistvaraarhitektuuride kohandatud koodi värskendamisega, 13%
seotud võrgu protokolliga, 4% - failisüsteemide ja 4% - sisemiste
alamsüsteemidega.
:
- Diskisüsteem, sisend/väljund ja failisüsteemid
- Lisatud on uus exFAT draiveri rakendus, täiustatud koodibaas 'sdfat' (2.x), mida arendab Samsung oma Android-smartfonide jaoks. Varasemalt lisatud draiver oli põhinenud aegunud Samsungi koodil (versioon 1.2.9) ja vastandas uue draiveriga umbes 10% madalamal jõudlusel. Meenutame, et exFAT-i toe lisamine kernelisse sai võimalikuks pärast seda, kui Microsoft avaldas avalikud spetsifikatsioonid ja võimaldas tasuta kasutada exFAT patende Linuxis.
- Btrfs-is on rakendatud uus ioctl() käsk — BTRFS_IOC_SNAP_DESTROY_V2, mis võimaldab eemaldada alamkategooria selle identifikaatori järgi. Täielik inline-esteente kloonimise tugi on tagatud. Töötluse täiendamise punktide arv on laienenud, mis on võimaldanud vähendada ootamisaega 'balance cancel' käsu täitmisel. Tagasiviidud eetente määramine on kiirenenud (näiteks teststsenaariumi täitmise aeg vähenes tunnist mõne minuti peale). Lisatud on võimalus kinnitada iga inimese failieestendite puusse. Kirjutamiseks ja NOCOW erandite määramiseks kasutatav lukustusmehhanism on ümber töötatud. Fsng-i tõhusus vahemike teostamisel on paranenud.
- XFS-is on parandanud metaandmete kontrolli ja fsck-i teostamist aktiivsete jaotiste jaoks. Pakutud on btree struktuuride ümberkujundamise teek, mida tulevikus kasutatakse xfs_repairi ümberehitusel ning jaotiste mittetgevuse taastamise võimaluse rakendamisel.
- CIFS-is on lisatud katsetamisjärgus tugi vahetusühenduse faile SMB3-kogudes. Teostatud on POSIX-i laiendused readdiris, nagu on määratletud SMB3.1.1 spetsifikatsioonis. Kirjutamise jõudlust on suurendatud 64 KB suuruste lehtede puhul, kui on sisse lülitatud cache=strict režiim ja kasutatakse protokolli versioone 2.1+.
- EXT4-failisüsteem on tõlgitud bmap-ist ja iopoll-ist iomap-i kasutamisele.
- F2FS-is on teostatud valikuline andmete tihendamise tugi zstd algoritmi kasutamisega. Tihendamiseks kasutatakse vaikimisi LZ4 algoritmi. Lisatud on käsk «chattr -c commit». Paigaldamise aja kuvamine on tagatud. Lisatud on ioctl F2FS_IOC_GET_COMPRESS_BLOCKS tihendatud blokkiinfo saamiseks. Statx kaudu kuvatakse tihendamise andmeid.
- Ceph-failisüsteemis on lisatud võimalus luua ja kustutada (unlink) faile lokaalselt ilma serverilt vastust ootamata (asünkroonne töörežiim). See muudatus suurendab oluliselt rsync utiliidi töövõimet.
- OVERLAYFS-is on lisatud virtiofs-i kasutamise võimalus ülemise taseme failisüsteemina.
- VFS-teid läbimise kood on ümber kirjutatud, sümboolsülinkite parsimise kood on ümber töötatud ning montaažitooted on ühtsustatud.
- SCSI-alamsüsteemis on mitteprivilegeeritud kasutajatele ZBC käsude täitmise võimalus.
- dm_writecache-s on lisatud võimalus järk-järgult puhastada vahemälu max_age parameetri alusel, mis määrab ploki maksimaalse eluiga.
- dm_integrity-s on lisatud 'discard' tehingu tugi.
- null_blk-s on lisatud vigade asendamise tugi, et simuleerida rikkeid testimise käigus.
- on lisatud udev-teatiste saatmine plokiseade suuruse muutmise kohta.
- Võrgusüsteem
- Netfilterisse on lisatud , mis kiirendavad märkimisväärselt suurte vastavusrühmade (nftables set) töötlemist, kus on vajalik alamside, võrguportide, protokolli ja MAC-aadresside kombinatsiooni kontrollimine.
Optimeerimised nft_set_pipapo (PIle PAcket POlicies) moodul lahendab pakettide sisu vastavuse määramise ülesande, rakendades filtrireeglitega valiidseid olekute väljade vahemikke, nagu IP ja võrgupordid (nft_set_rbtree ja nft_set_hash manipuleerivad vahemike vastavuse ja otse reflekteeritavate väärtustega). 256-bitist AVX2 juhiseid kasutav pipapo versioon AMD Epyc 7402 protsessoriga näitas 420% jõudluse kasvamist 30 000 kirje töötlemisel, sealhulgas port-protokolli paaride arvestamisel. Alamsordist ja pordist koosneva paaride vastavuse kasv 1000 kirje töötlemisel oli 87% IPv4 ja 128% IPv6 puhul. - bareudp moodul, mis võimaldab erinevaid L3 protokolle, nagu MPLS, IP ja NSH, UDP-tunnelisse kapseldada.
- MPTCP (MultiPath TCP) komponentide integreerimist on jätkatud, mis on TCP protokolli laiendus, et korraldada TCP-ühenduse tööd pakettide kohaletoimetamisega samaaegselt mitme marsruudi kaudu erinevate võrguliideste kaudu, mis on seotud erinevate IP-aadressidega.
- Ethernet-raamide kapseldamise riistvaralise kiirendamise mehhanismide tugi 802.11 (Wi-Fi).
- Seadme liigutamisel ühest võrgunimeksonist (network namespace) teise tagatakse vastavate failide õiguste ja omaniku korrigeerimine sysfs-is.
- Kasutajatele, kellel ei ole root õigusi, on antud võimalus kasutada SO_BINDTODEVICE lippu.
- Kolmas osa patši on vastu võetud, mis viib ethtooli tööriistad üle ioctl() kasutamiselt netlink liidese kasutamisele. Uus liides lihtsustab laiendite lisamist, parandab vigade töötlemist, võimaldab teateid staatuse muutuste korral, lihtsustab tuuma ja kasutusruumi vahelisi suhtlemisi ning vähendab sünkroonitud nimeliste nimekirjade arvu.
- Lisatud on võimalus kasutada spetsiaalseid riistvarakiirendajaid ühenduste jälgimise operatsioonide täitmiseks.
- netfilteris väljuvate pakkide klassifitseerijate ühendamiseks mõeldud hook, mis täiendab varem olemasolevat sissetulevate pakkide (ingress) hooki.
- Netfilterisse on lisatud , mis kiirendavad märkimisväärselt suurte vastavusrühmade (nftables set) töötlemist, kus on vajalik alamside, võrguportide, protokolli ja MAC-aadresside kombinatsiooni kontrollimine.
- Virtualiseerimine ja turvalisus
- Lisatud on suunamiste autentimise (), kasutades ARM64 CPU spetsialiseeritud juhiseid ründetaktikate vastu, mis kasutavad tagasipöördumise orientatsiooni programmimise meetodeid (ROP), mille käigus ründaja ei pühi oma koodi mällu, vaid opereerib juba laaditud raamatukogudes olevate masiinijuhiste tükkidega, mille lõpp on tagasipöördumise juhis. Kaitse seisneb digitaalsete allkirjade kasutamises tagasipöördumise aadresside kontrollimiseks kernitase. Allkiri salvestatakse mittekasutatavates kõrgeimates biitides ise näitaja. Erinevalt tarkvaralistest rakendustest toimub digitaalsete allkirjade loomine ja kontrollimine spetsiaalsete CPU juhiste abil.
- võimalus kaitsta mäluala kirjutamise eest süsteemikutsungi userfaultfd() abil, mis on mõeldud lehekülje vigade töötlemiseks (juurdepääs mittejaotatud mälulehekülgedele) kasutajaruumi. Idee on kasutada userfaultfd() ka lehekülgede juurdepääsupiirangute jälgimiseks, mis on märgitud kirjutamise eest kaitstuks, ja kutseli töötleja, mis saab reageerida sellistele kirjutamise katsetele (nt töötavate protsesside elusnapsode loomise töötlemiseks, seisundi fikseerimine mäludumpide kettale kirjutamise ajal, jagatud mälu rakendamiseks, muutuste jälgimiseks mälus). Funktsionaalsus mprotect() kasutamisega koos SIGSEGV signaalitöötlijaga, kuid töötab märgatavalt kiiremini.
- SELinuxis on käideldav parameter „checkreqprot” aegunud, võimaldades mälukaitse kontrollimise keelamine reeglite töötlemisel (lubades teostatavate mälupiirkondade kasutamist, sõltumata reeglites määratud piirangutest). Sümboolsetele linkidele on kernfsis lubatud vanemate kataloogide konteksti pärimine.
- kuuluvad moodul , mis võimaldab BPF-programmide kinnitamist igasugustele kernelis LSM-haakidele. Muudatus võimaldab luua LSM-mooduleid (Linuxi turvamuul) BPF-programmide vormis auditi ja mandaadi juurdepääsu kontrollimise ülesannete lahendamiseks.
- tootlikkuse optimeerimine /dev/random väärtuste CRNG paketipõhise edastamise kaudu eraldi RNG juhiste kutsetest. Parandatud on getrandom ja /dev/random töötlust ARM64 süsteemides, mis pakuvad RNG juhiseid.
- Elliptilise kõvera Curve25519 rakendamine HACL raamatukogu variandiga, on viidatud matemaatiline tõestus formaalsest verifitseerimisest usaldusväärsuse osas.
- mälu vabade lehtede teavitamise mehhanism. Selle mehhanismi abil saavad külgsüsteemid edastada host-süsteemile teavet lehtede kohta, mida ei kasutata enam, ning host saab need lehed tagasi võtta.
- Vfio/pci SR-IOV (Single-Root I/O Virtualization) tugi.
- Mälu ja süsteemiteenused
- 80 kuni 100 sümbolit piirang algtekstide maksimaalsele stringi pikkusele. Arendajatele soovitatakse endiselt jääda 80 sümboli piiresse, kuid see ei ole enam range piirang. Lisaks toob stringi pikkuse ületamine kaasa hoiatuse koostamisel ainult juhul, kui utility checkpatch on käivitatud valiku „—strict” abil. Muudatus annab võimaluse arendajatel mitte keskenduda tühikute olemasolule ja tunda end koodi joondamisel vabamalt, samuti ülemäärast stringide jagamist, koodi tajumist ja leidmist.
- EFI segalaadi käivitamise režiimi toetamine, mis võimaldab ilma spetsialiseeritud käivitaja kasutamiseta käivitada 64-bitise tuuma 32-bitise püsivara kaudu, mis töötab 64-bitises CPU-s.
- süsteem jagatud lukustuste avastamiseks ja tõrkeotsinguks (""), mis tekivad siis, kui proovime juurdepääseda joondamata andmetele mälu, kuna atomaarsed käsklused ületavad kaks CPU vahemälu rida. Sellised lukustused toovad kaasa märkimisväärse jõudluse vähenemise (1000 tsüklit aeglasem kui atomaarsed operatsioonid, mille andmed langevad ühte vahemälu ritta). Sõltuvalt käivitamisparameetrist „split_lock_detect” suudab tuum reaalajas tuvastada selliseid lukustusi ja väljastada hoiatusi või saata SIGBUS signaali blokeerimise tekitanud rakendusele.
- Ülesannete planeerijas on tagatud temperatuuriandurid () ja on rakendatud ülekuumenemise jälgimine ülesannete jaotamisel. Kasutades antud statistikat, saab temperatuuri töötleja (thermal governor) kuuma tingimuste korral korrigeerida CPU maksimaalset sagedust, samas kui ülesande planeerija arvestab nüüd arvutusvõimsuse kärpimist sageduse langemise tõttu ülesannete käivitamisel (varem reageeris planeerija sageduse muutusele teatud viivitusega, aktsepteerides mõnedel hetkedel valeid eeldusi saadaval olevate arvutusressursside kohta).
- Ülesande planeerijas on kasutatud koormuse jälgimiseks, mis võimaldab õigesti hinnata koormust, olenemata CPU praegsest sagedusest. Muudatus võimaldab täpsemalt prognoosida ülesannete käitumist dünaamiliste pingete ja CPU sageduse muutumise tingimustes. Näiteks ülesanne, mis sõi 1/3 CPU ressursse sagedusel 1000 MHz, hakkab kulutama 2/3 ressursse sageduse langemisel 500 MHz, mis varem tekitas vale arusaama täisvõimsuses töötamisest (st ülesanded planeerijas tundusid suuremad ainult sageduse vähenemise tõttu, mis viis vale otsuste tegemiseni schedutil cpufreq governoris).
- Intel P-state draiver, mis vastutab jõudluse režiimide valimise eest, on viidud üle .
- Rakendatud on võimalus kasutada BPF-alamsüsteemi, kui kerneli režiim on reaalajas (PREEMPT_RT). Varasemalt nõudis PREEMPT_RT sisselülitamine BPF-i keelamist.
- Lisatud on uus BPF-programmide tüüp — BPF_MODIFY_RETURN, mis saab kinnitada kerneli funktsioonidele ja muuta nende tagastatavaid väärtusi.
- Lisatud süsteemikõne clone3() kasutamine protsessi loomiseks erinevas cgroupis, mis erineb vanemat cgroupist, võimaldades vanemal protsessil rakendada piiranguid ja aktiveerida arvestuse kohe pärast uue protsessi või lõime sünnitamist. Näiteks teenuse haldur võib otse määrata uusi teenuseid eraldi cgroupidesse, samas kui uued protsessid, mis on paigutatud 'külmutatud' cgroupidesse, peatatakse koheselt.
- Kbuild-is toetatakse keskkonnamuutujat 'LLVM=1' kerneli ehitamisel Clang/LLVM tööriistakomplekti välja lülitamiseks. Tõstetud on binutils versiooni nõuded (2.23).
- debugfs-ile on lisatud jaotis /sys/kernel/debug/kunit/ kunit testide tulemuste jaoks.
- Lisatud pm_debug_messages tuuma laadimisparameeter (sarnane /sys/power/pm_debug_messages), mis võimaldab kuvada toitehalduse süsteemi töö kohta silumisinfot (kasulik probleemide lahendamisel, mis on seotud magamise ja ooterežiimiga).
- Asünkroonse sisendi/väljundi lisatud tugi ja .
- Cgroupi profiliseerimist on parandatud perf-teenuse abil. Varem suutis perf profiliseerida ülesandeid ainult kindlas cgroupis ja ei suutnud teada, millesse cgroupi praegune proov kuulub. Nüüd saab perf teavet cgroupi kohta iga prooviga, mis võimaldab profiliseerida rohkem kui ühte cgroupi ja rakendada sortimist
cgroupide raportites. - Cgroupfs, cgroupide haldamiseks mõeldud pseudo-FS, on lisatud laiendatud atribuutide (xattrs) tugi, mille abil saab näiteks jätta täiendavat teavet töötlejatele kasutajaruumi.
- Cgroupi mälu kontrolleris on toetatud rekurssiivne kaitse väärtuseks "memory.low", mis reguleerib minimaalset operatiivmälu, mis on rühma osalistele kättesaadav. Cgroupi hierarhia mountimisel koos "memory_recursiveprot" valikuga, jagatakse "memory.low" väärtus automaatselt kõigile alamsõlmedele, mis on seatud alumistes sõlmedes.
- Uacce raamistik (Unified/User-space-access-intended Accelerator Framework) võimaldab jagada virtuaalseid aadresse (SVA, Jagatud Virtuaalne Aadressimine) CPU ja perifeerseadmete vahel, võimaldades riistvarakiirenditel pääseda andmestruktuuridele peamise CPU-s.
- Riistvaraarhitektuurid
- ARM arhitektuuri jaoks on sisse viidud võimalus mälu kuumaks eemaldamiseks.
- RISC-V arhitektuuri jaoks on lisatud CPU kuumplug ja eemaldamise tugi (CPU hotplug). 32-bitise RISC-V jaoks on rakendatud eBPF JIT.
- 32-bitiste ARM süsteemide kasutamise võimalus on eemaldatud KVM-iga külaliskeskkondade käitamiseks.
- S390 arhitektuuri jaoks on eemaldatud "fiktivne" NUMA teostus, mille jaoks pole leitud kasutusstsenaariume, mis tooksid kaasa jõudluse kasvu.
- ARM64 jaoks on lisatud AMU (Activity Monitors Unit) laienduse tugi, mis määratletakse ARMv8.4-s ja mis pakub jõudlusloendureid, mida kasutatakse sageduse skaala korrektsioonide tegurite arvutamiseks ülesannete ajastajas.
- Varustus
- vDPA seadmete tugi, mis kasutavad virtio spetsifikatsioonidele vastavat andmevahetuskanalit. vDPA seadmed võivad olla nii füüsiliselt ühendatud seadmed kui ka emuleeritud virtuaalsed seadmed.
- GPIO alamsüsteemis uus ioctl() käskude muutuste jälgimiseks, mis võimaldab protsessile teavitada igasuguste GPIO ridade oleku muutmisest. Näiteks uue käskluse kasutamine tööriist gpio-watch.
- Intel'i i915 DRM draiveris on vaikimisi Tigerlake („Gen12”) kiipide tugi ja algne OLED taustvalgustuse juhtimise tugi. Parandatud on Ice Lake, Elkhart Lake, Baytrail ja Haswell kiipide toimet.
- amdgpu draiveris võime laadida firmavärskendusi USBC kiibis ASIC. Parandatud on AMD Ryzen 4000 „Renoir” kiipide tugi. OLED-paneelide juhtimise tugi on lisatud. Tugi on lisatud foorumi oleku kuvamiseks debugfs.
- VMware virtualiseerimissüsteemide vmwgfx DRM draiverisse on lisatud OpenGL 4 kasutamise võimalus külgsüsteemides (varasemalt toetati OpenGL 3.3).
- Lisa uus DRM draiver tidss TI Keystone platvormi kuvandisüsteemi jaoks.
- Lisatud ülekanne LCD paneelidele: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101II01D-CT, Frida FRD350H54004.
- Energiahalduse süsteemis tugi Intel Jasper Lake (JSL) põhinevatel Atom platvormidel.
- Lisatud Pinebook Pro sülearvuti tugi Rockchip RK3399 põhiselt, Pine64 PineTab tahvelarvuti ja nutitelefoni Allwinner A64 põhised.
- Lisatud toetus uutele helikoodikatele ja kiipidele:
Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc. - Lisatud ARM-plaatide ja Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plusi, Kontroni „sl28”, 11 versiooni i.MX6 TechNexion Pico, kolm uut versiooni Toradex Colibri, Samsung S7710 Galaxy Xcover 2 ST-Ericsson u8500, DH Electronics DHCOM SoM ja PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.
Allikas: opennet.ru
