После двух месяцев разработки Линус Торвальдс релиз ядра . Med najopaznejšimi spremembami: nova implementacija FS exFAT, modul bareudp za ustvarjanje UDP-tunelov, zaščita na osnovi overjanja kazalcev za ARM64, možnost pritrjevanja BPF programov na LSM obdelovalce, nova implementacija Curve25519, detektor 'split-lock', združljivost BPF s PREEMPT_RT, odstranitev omejitve dolžine vrstic na 80 znakov v kodi, upoštevanje temperatur CPU v načrtovalniku nalog, možnost uporabe clone() za ustvarjanje procesov v drugih cgroup, zaščita pred pisanjem v pomnilnik z uporabo userfaultfd.
V novo različico je bilo sprejetih 15033 popravkov od 1961 razvijalcev,
velikost popravka — 39 MB (spremembe so zajele 11590 datotek, dodanih 570560 vrstic kode,
izbrisanih 297401 vrstic). Približno 41% vseh predstavljenih sprememb v 5.7
se nanaša na gonilnike naprav, približno 16% sprememb ima
na posodabljanje kode, specifične za strojne arhitekture, 13 %
povezave z omrežnim skladom, 4% — s datotečnimi sistemi in 4% z notranjimi
podsystemi jedra.
:
- Дисковая подсистема, ввод/вывод и файловые системы
- Dodana je nova implementacija gonilnika exFAT, na aktualni kodi 'sdfat' (2.x), ki jo razvija podjetje Samsung za svoje Android pametne telefone. Prej dodani gonilnik v jedro je temeljil na zastareli kodi Samsunga (različica 1.2.9) in je zaostajal za novim gonilnikom za približno 10% v zmogljivosti. Spomnimo, da je dodajanje podpore za exFAT v jedro postalo mogoče šele, ko je podjetje Microsoft objavilo specifikacije in omogočilo brezplačno uporabo patentov za exFAT v Linuxu.
- V Btrfs je bila uvedena nova ukazna ioctl() — BTRFS_IOC_SNAP_DESTROY_V2, ki omogoča brisanje pododdelka po njegovem identifikatorju. Zajamčena je polna podpora za kloniranje inline-ekstentov. Število točk za razveljavitev operacij prerazporeditve je bilo razširjeno, kar je omogočilo krajša čakanja pri izvajanju ukaza 'balance cancel'. Pospešeno je bilo določanje povratnih povezav do ekstentov (npr. čas izvedbe testne skripte se je zmanjšal s ure na nekaj minut). Dodana je bila možnost pritrjevanja na vsak inode drevesa ekstentov datoteke. Preurejena je shema zaklepanja, ki se uporablja pri pisanju v pododdelke in pri izjemi NOCOW. Povečana je bila učinkovitost izvajanja fsync za razpone.
- V XFS je izboljšana preverba metapodatkov in izvajanje fsck za aktivne razdelke. Predlagana je knjižnica za prenovo struktur btree, ki bo v prihodnosti uporabljena za predelavo xfs_repair in izvajanje možnosti obnovitve brez odmontiranja razdelka.
- V CIFS je dodana eksperimentalna podpora za umestitev razdelka swap v SMB3 shranjevanju. Izvedena so bila POSIX razširitev v readdir, določenih v specifikaciji SMB3.1.1. Povečana je zmogljivost pisanja za strani velikosti 64KB, ko je omogočen način cache=strict in se uporabljajo različice protokola 2.1+.
- FS EXT4 je bila prenesena z bmap in iopoll na uporabo iomap.
- V F2FS je bila uvedena opcijska podpora za stiskanje podatkov z uporabo algoritma zstd. Privzeto se za stiskanje uporablja algoritem LZ4. Dodana je podpora za ukaz „chattr -c commit“. Omogočeno je prikazovanje časa montaže. Dodan je ioctl F2FS_IOC_GET_COMPRESS_BLOCKS za pridobivanje informacij o številu stisnjenih blokov. Dodani so podatki o stiskanju, ki se izpisujejo preko statx.
- V datotečnem sistemu Ceph je bila dodana možnost lokalnega izvajanja operacij ustvarjanja in brisanja (unlink) datoteke brez čakanja na odgovor strežnika (delovanje v asinhronem načinu). Sprememba omogoča znatno povečanje zmogljivosti pri delovanju orodja rsync.
- V OVERLAYFS je bila dodana možnost uporabe virtiofs kot zgornjega FS.
- kodo za obhod poti v VFS, predelana je koda za razčlenitev simboličnih povezav in poenoteno obhod točk montiranja.
- V podsistemu scsi je neprivilegiranim uporabnikom izvajanje ukazov ZBC.
- V dm_writecache možnost postopnega čiščenja predpomnilnika na podlagi parametra max_age, ki določa maksimalni čas trajanja bloka.
- V dm_integrity podpora za operacijo „discard“.
- V null_blk podpora za simulacijo napak za posnemanje okvar med testiranjem.
- možnost pošiljanja udev obvestil o spremembi velikosti blokovnega naprave.
- Mrežna podsistem
- V Netfilter so vključeni , ki znatno pospešijo obdelavo velikih seznamov ujemanja (nftables set), kjer je potrebna preverba kombinacije podomrežij, omrežnih portov, protokola in MAC naslovov.
Optimizacije V modulu nft_set_pipapo (PIle PAcket POlicies) se reši naloga ujemanja vsebine paketa s pravili filtriranja, ki vključujejo poljubne obsege stanja polj, kot so obsegi IP in omrežni porta (nft_set_rbtree in nft_set_hash manipulirata z ujemanjem intervalov in neposrednim odražanjem vrednosti). Vektorizirana različica pipapo z 256-bitnimi AVX2 navodili na sistemu s procesorjem AMD Epyc 7402 je pokazala 420-odstotni porast zmogljivosti pri analiziranju 30.000 zapisov, ki vključujejo povezave port-protokol. Pri ujemanju povezave podomrežja in številke porta pri analizi 1.000 zapisov je bil porast 87 % za IPv4 in 128 % za IPv6. - Modul bareudp omogoča enkapsulacijo različnih L3-protokolov v UDP-tunel, kot so MPLS, IP in NSH.
- Integracija komponent MPTCP (MultiPath TCP) je bila nadalje povzdignjena, kar je razširitev protokola TCP za organizacijo delovanja TCP-povezave z dostavo paketov hkrati po več poteh prek različnih omrežnih vmesnikov, povezanih z različnimi IP-naslovi.
- Podprta so bila mehanizmi strojnega pospeševanja enkapsulacije Ethernet-nih okvirjev v 802.11 (Wi-Fi).
- Ob premikanju naprave iz enega prostora imen omrežne podsistem (network namespace) v drugega je bila zagotovljena prilagoditev dostopnih pravic in lastnika ustreznih datotek v sysfs.
- Omogočena je bila uporaba zastavice SO_BINDTODEVICE za uporabnike, ki nimajo naslovov root.
- Sprejeta je bila tretja serija popravil, ki prenašajo orodje ethtool z ioctl() na uporabo vmesnika netlink. Nov vmesnik poenostavi dodajanje razširitev, izboljša obravnavo napak, omogoča pošiljanje obvestil ob spremembi stanja, poenostavi interakcijo med jedrom in uporabniškim prostorom ter zmanjša število sinhroniziranih imenovanih seznamov.
- Dodana je bila možnost uporabe posebnih strojnih pospeševalnikov za izvajanje operacij sledenja povezavam.
- V netfilter je dodan hook za povezovanje klasifikatorjev izhodnih paketov (egress), ki dopolnjuje prejšnji hook za vhodne pakete (ingress).
- V Netfilter so vključeni , ki znatno pospešijo obdelavo velikih seznamov ujemanja (nftables set), kjer je potrebna preverba kombinacije podomrežij, omrežnih portov, protokola in MAC naslovov.
- Virtualizacija in varnost
- Dodana je bila strojna izvedba avtorizacije kazalcev (), using specialized CPU ARM64 instructions to protect against attacks that use return-oriented programming (ROP) techniques, in which the attacker does not attempt to place their code in memory but operates using existing pieces of machine instructions ending with a return control instruction in loaded libraries. Protection is reduced to using digital signatures to verify return addresses at the kernel level. The signature is stored in the unused upper bits of the pointer itself. Unlike software implementations, the creation and verification of digital signatures are performed using special CPU instructions.
- the ability to protect a memory area from writing using the system call userfaultfd(), intended for handling page faults (accessing unallocated memory pages) in user space. The idea is to use userfaultfd() to monitor access violations on pages marked as write-protected and invoke a handler that can respond to such write attempts (for example, to handle changes during the creation of live snapshots of running processes, freezing state when dumping memory to disk, implementing shared memory, tracking changes in memory). The functionality using mprotect() in conjunction with the SIGSEGV signal handler, but works significantly faster.
- In SELinux, the deprecated parameter "checkreqprot" has been announced, allowing the disabling of memory protection checks when processing rules (permitting the use of executable memory areas regardless of the mandates specified in the rules). Symbolic links in kernfs are allowed to inherit the context of parent directories.
- V sestavi modul , allowing BPF programs to be attached to any kernel LSM hooks. The change allows for the creation of LSM modules (Linux Security Module) in the form of BPF programs to address auditing and mandatory access control tasks.
- performance optimization of /dev/random through batch transmission of CRNG values instead of individual RNG instruction calls. The operation of getrandom and /dev/random has been improved on ARM64 systems providing RNG instructions.
- The implementation of the elliptic curve Curve25519 with a variant from the , for which matematično dokazovanje formalne verifikacije zanesljivosti.
- mehanizem obveščanja o prostih straneh pomnilnika. S pomočjo tega mehanizma lahko gostiteljske sisteme obveščajo gostiteljski sistem o straneh, ki se več ne uporabljajo, in podatkovne strani lahko gostiteljski sistem vrne nazaj.
- v vfio/pci podpora SR-IOV (Single-Root I/O Virtualization).
- Pomnilnik in sistemske storitve
- od 80 do 100 znakov omejitev maksimalne dolžine vrstice v izvornih besedilih. Kljub temu se razvijalcem še vedno priporoča, da ostanejo v mejah 80 znakov na vrstico, a to zdaj ni strogo omejeno. Poleg tega bo kršenje omejitve dolžine vrstice zdaj privedlo do opozorila ob sestavljanju le, če je orodje checkpatch zagnano z možnostjo «—strict’. Sprememba bo omogočila razvijalcem, da se lažje osredotočijo na poravnavo kode in se nesorazmernemu razbijanju vrstic, dojemanje kode in iskanje.
- podpora mešanemu načinu nalaganja EFI, ki omogoča nalaganje 64-bitnega jedra iz 32-bitnega vdelanega programa, ki teče na 64-bitnem CPU brez uporabe specializiranega nalagalnika.
- sistem za odkrivanje in odpravljanje razdeljenih zaklepov (««), ki nastanejo pri dostopu do neusklajenih podatkov v pomnilniku, ker pri izvajanju atomske instrukcije podatki prečkajo dve liniji CPU predpomnilnika. Takšne zaklepe povzročajo znatno znižanje zmogljivosti (do 1000 ciklov počasnejši od atomske operacije s podatki, ki padejo v eno linijo predpomnilnika). Glede na zagon parameter «split_lock_detect» lahko jedro na let prepozna take zaklepe in izda opozorila ali pošlje signal SIGBUS aplikaciji, ki je povzročila zaklep.
- V razporejevalniku nalog je omogočeno spremljanje kazalnikov senzorjev temperature () in se je implementiral nadzor pregrevanja pri dodeljevanju nalog. S pomočjo posredovanih statističnih podatkov lahko obdelovalnik temperature (thermal governor) prilagodi največjo frekvenco CPU pri pregrevanju, nalogovnik pa zdaj upošteva zmanjšanje računalniške moči zaradi takšnega zmanjšanja frekvence pri načrtovanju izvajanja nalog (prej je nalogovnik reagiral na spremembo frekvence z zamudo, nekaj časa temelječe na prenapihnjenih ocenah razpoložljivih računalniških virov).
- V nalogovniku se uporabljajo obremenitve, ki omogočajo pravilno oceno obremenitve, ne glede na trenutne frekvence delovanja CPU. Sprememba omogoča natančnejše napovedovanje vedenja nalog v razmerah dinamičnih sprememb napetosti in frekvence CPU. Na primer, naloga, ki je porabila 1/3 virov CPU pri frekvenci 1000 MHz, bo porabila 2/3 virov pri zmanjšanju frekvence na 500 MHz, kar je prej ustvarjalo napačno domnevo o delovanju s polno močjo (tj. naloge za nalogovnik so se zdele večje le zaradi zmanjšanja frekvence, kar je vodilo do napačnih odločitev v schedutil cpufreq governor).
- Intel P-state gonilnik, odgovoren za izbiro načinov delovanja, je bil preusmerjen na uporabo .
- Izvedena je bila možnost uporabe pod-sistema BPF pri delovanju jedra v načinu realnega časa (PREEMPT_RT). Prej je bilo pri aktivaciji PREEMPT_RT predpisano izklopiti BPF.
- Dodana je nova vrsta BPF programov — BPF_MODIFY_RETURN, ki jih je mogoče priključiti na funkcijo v jedru in spremeniti vrednost, ki jo ta funkcija vrne.
- Dodana uporabe sistemskega klica clone3() za ustvarjanje procesa v cgroup, ki se razlikuje od matične cgroup, kar omogoča matičnemu procesu, da uporabi omejitve in vključi računovodstvo takoj po nastanku novega procesa ali niti. Na primer, upravljalnik storitev lahko neposredno dodeljuje nove storitve v ločene cgroup, medtem ko se novi procesi, ko so nameščeni v 'zamrznjene' cgroup, takoj ustavijo.
- v Kbuild podpora okoljski spremenljivki 'LLVM=1' za preklop na orodja Clang/LLVM pri sestavljanju jedra. Izpolnjene so zahtevane različice binutils (2.23).
- V debugfs je dodana sekcija /sys/kernel/debug/kunit/ z rezultati kunit testov.
- Dodana je opcija za učitavanje jezgra pm_debug_messages (analog /sys/power/pm_debug_messages), koja uključuje ispis informacija za otklanjanje grešaka o radu sustava upravljanja napajanjem (korisno za otklanjanje problema s režimima spavanja i čekanja).
- V vmesnik asinhronega vnosa/izvoda dodana podpora in .
- Poboljšano profiliranje cgroup pomoću alata perf. Ranije je perf mogao profilirati zadatke samo u određenom cgroup-u i nije mogao saznati kojem cgroup-u pripada trenutna uzorak. Sada perf dobiva informacije o cgroup-u za svaki uzorak, što omogućava profiliranje više od jednog cgroup-a i primjenu sortiranja po
cgroup u izvještajima. - U cgroupfs, pseudo-FS za upravljanje cgroups, dodana je podrška za proširene atribute (xattrs) pomoću kojih se, na primjer, može ostaviti dodatne informacije za obrađivače u prostoru korisnika.
- U cgroup memory controller dodana je podrška za rekurzivnu zaštitu vrijednosti 'memory.low', koja regulira minimalni volumen radne memorije dodijeljen korisnicima grupe. Prilikom montiranja hijerarhije cgroup s opcijom 'memory_recursiveprot', vrijednost 'memory.low', koja je postavljena za donje čvorove, automatski će se distribuirati za sve dječje čvorove.
- framework Uacce (Unified/User-space-access-intended Accelerator Framework) za zajednički pristup virtualnim adresama (SVA, Shared Virtual Addressing) između CPU-a i perifernih uređaja, omogućavajući hardverskim ubrzivačima pristup strukturama podataka u glavnom CPU-u.
- Strojne arhitekture
- Za ARM arhitekturu implementirana je mogućnost vrućeg uklanjanja memorije.
- Za RISC-V arhitekturu dodana je podrška za vruće povezivanje i uklanjanje CPU-a (CPU hotplug). Za 32-bitne RISC-V implementiran je eBPF JIT.
- Ukinuta je mogućnost korištenja 32-bitnih ARM sustava za pokretanje gostujućih okruženja KVM.
- Uklonjena je 'fikcijska' implementacija NUMA za s390 arhitekturu, za koju još nisu pronađeni scenariji korištenja koji bi omogućili povećanje performansi.
- Za ARM64 dodana je podrška za AMU proširenje (Activity Monitors Unit), definirano u ARMv8.4 i pružajuće mjerače performansi koji se koriste za izračunavanje koeficijenata korekcije skaliranja frekvencije u planeru zadataka.
- Oprema
- podpora naprav vDPA, ki uporabljajo podatkovni prenosni kanal, skladen z specifikacijami virtio. vDPA naprave so lahko tako fizično priključena oprema kot tudi programsko emulirane virtualne naprave.
- V pod sistemas GPIO nova ukazna ioctl() za spremljanje sprememb, ki omogoča obveščanje postopka o spremembi stanja katere koli GPIO linije. Kot primer uporabe novega ukaza orodje gpio-watch.
- V DRM gonilniku i915 za grafične kartice Intel privzeto podpore čipov Tigerlake („Gen12“) in dodana začetna podpora za upravljanje osvetlitve OLED. Izboljšana podpora čipov Ice Lake, Elkhart Lake, Baytrail in Haswell.
- V gonilniku amdgpu možnost nalaganja programske opreme v čip USBC za ASIC. Izboljšana podpora čipov AMD Ryzen 4000 „Renoir“. Pojavila se je podpora za upravljanje OLED zasloni. Omogočeno je prikazovanje stanja programske opreme v debugfs.
- V DRM gonilniku vmwgfx za virtualizacijske sisteme VMware je bila dodana možnost uporabe OpenGL 4 v gostujočih sistemih (prej je bila podprta OpenGL 3.3).
- Dodana je nova DRM gonilnik tidss za prikazni sistem platforme TI Keystone.
- Dodani so gonilniki za LCD panele: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101II01D-CT, Frida FRD350H54004.
- V sistemu za upravljanje napajanja podpora platforme Intel Jasper Lake (JSL) temelji na Atomu.
- Dodana je podpora prenosnemu računalniku Pinebook Pro na osnovi Rockchip RK3399, tablici Pine64 PineTab in pametnemu telefonu na osnovi Allwinner A64.
- Dodane so podpora novim zvočnim kodekom in čipov:
Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc. - Dodana je podpora ARM ploščam in platformam Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron „sl28“, 11 variant plošče i.MX6 TechNexion Pico, tri nove variante Toradex Colibri, Samsung S7710 Galaxy Xcover 2 na osnovi ST-Ericsson u8500, DH Electronics DHCOM SoM in PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.
Izvor: opennet.ru
