Po dveh mesecih razvoja je Linus Torvalds predstavil izdajo jedra Linux 5.19. Med najbolj opaznimi spremembami so: podpora za procesorsko arhitekturo LoongArch, integracija popravkov "BIG TCP", način "on-demand" v fscache, odstranitev kode za podporo formata a.out, možnost uporabe ZSTD za stiskanje programske opreme, vmesnik za upravljanje s pomnilnikom iz uporabniškega prostora, izboljšana zanesljivost in zmogljivost generatorja psevdonavodnih števil, podpora razširitvam Intel IFS (In-Field Scan), AMD SEV-SNP (Secure Nested Paging), Intel TDX (Trusted Domain Extensions) in ARM SME (Scalable Matrix Extension).
V napovedi je Linus dejal, da bo naslednji izdajni različici verjetno dodeljena številka 6.0, saj se je v veji 5.x nabralo dovolj izdaj za spremembo prve številke v različici. Sprememba številčne oznake se izvaja iz estetskih razlogov in je formalni korak, ki odpravlja nelagodje zaradi velikega števila izdaj v seriji.
Linus je tudi omenil, da je za oblikovanje izdaje uporabljal prenosnik Apple na osnovi arhitekture ARM64 (Apple Silicon) s sistemom Linux, temelječim na distribuciji Asahi Linux. To ni Linusova glavna delovna postaja, vendar je to platformo uporabljal za preverjanje njene uporabnosti za delo na jedru in za zagotavljanje, da bo lahko oblikoval izdaje jedra med potovanji, ob prvem težkem prenosniku. Pred tem je Linus pred več leti imel izkušnje z uporabo Apple strojne opreme za razvoj - nekoč je uporabljal računalnik na osnovi CPU ppc970 in prenosnik Macbook Air.
V novo različico je vključeno 16.401 popravkov od 2.190 razvijalcev (v prejšnji izdaji je bilo 16.206 popravkov od 2.127 razvijalcev), velikost popravka pa je 90 MB (spremembe so zajele 13.847 datotek, dodanih je bilo 1.149.456 vrstic kode, 349.177 vrstic pa je bilo odstranjeno). Približno 39 % vseh predstavljenih sprememb v 5.19 je povezanih z napravnimi gonilniki, približno 21 % sprememb se nanaša na posodobitve kode, specifične za strojne arhitekture, 11 % na omrežni seznam, 4 % na datotečne sisteme in 3 % na notranje podsisteme jedra.
Glavne novosti v jedru 5.19:
- Дисковая подсистема, ввод/вывод и файловые системы
- Datotečni sistem EROFS (Enhanced Read-Only File System) je bil zasnovan za uporabo na particijah, dostopnih v načinu samo za branje, in je bil prenesen na uporabo podsystema fscache, ki omogoča predpomnjenje podatkov. Sprememba je znatno izboljšala zmogljivost sistemov, v katerih se iz slike, ki temelji na EROFS, zažene veliko število kontejnerjev.
- V podsistem fscache je bila dodana funkcija branja na zahtevo ('on-demand'), ki se uporablja za optimizacijo EROFS. Nova funkcija omogoča organizacijo predpomnjenja branja iz datotečnih sistemov, ki se nahajajo v lokalnem sistemu. V nasprotju z prvotno razpoložljivim načinom, usmerjenim na predpomnjenje podatkov v lokalnem datotečnem sistemu, prenašanih preko omrežnih datotečnih sistemov, način 'on-demand' delegira funkcije pridobivanja podatkov in njihovo zapisovanje v predpomnilnik ločenemu ozadnjemu procesu, ki poteka v uporabniškem prostoru.
- V XFS je omogočeno shranjevanje milijard razširjenih atributov v i-node. Maksimalno število ekstentov za en file se je povečalo s 4 milijard na 247. Uveden je način za atomarno posodabljanje več razširjenih atributov datoteke hkrati.
- V datotečnem sistemu Btrfs je bila optimizirana obravnava s ključavnicami, kar je omogočilo povečanje zmogljivosti za približno 7 % pri neposrednem zapisovanju v načinu nowait. Zmogljivost operacij v načinu NOCOW (brez copy-on-write) se je povečala za približno 3 %. Obremenitev stranišča v predpomnilniku je bila znižana pri izvajanju ukaza 'send'. Minimalna velikost podstrani je bila znižana s 64K na 4K (možno je uporabljati podstrani manjše od jedrskih strani). Uvedena je bila prehod na uporabo osnovnega drevesa (radix tree) v algoritmu XArrays.
- V NFS strežniku je bila dodana možnost podaljšanja trajanja stanja ključavnice, ki jo je nastavila stranka, ki ni več odgovarjala na zahteve. Nova možnost omogoča odložitev čiščenja ključavnice do enega dne, če drug klient ne zahteva tekmovalne ključavnice. V običajnem režimu se ključavnica očisti 90 sekund po tem, ko je stranka prenehala odgovarjati.
- V podsistemu za spremljanje dogodkov v FS fanotify je bil uveden zastavica FAN_MARK_EVICTABLE, s pomočjo katere je mogoče onemogočiti fiksiranje ciljanih i-node v predpomnilniku, na primer za ignoriranje vej brez fiksiranja njihovih delov v predpomnilniku.
- V gonilniku za FS FAT32 je bila dodana podpora za pridobivanje informacij o času ustvarjanja datoteke prek sistemskega klica statx, ki implementira bolj učinkovit in funkcionalen različico stat(), ki vrača razširjene informacije o datoteki.
- Zrealizirane so bile pomembne optimizacije v gonilniku exFAT, povezane z zagotavljanjem hkratnega čiščenja skupine sektorjev v aktivnem načinu ‘dirsync’, namesto zaporednega čiščenja po sektorjih. Z zmanjšanjem števila zahtevkov za bloke po optimizaciji se je zmogljivost ustvarjanja velikega števila imenikov na SD kartici izboljšala za več kot 73-85% glede na velikost klasterja.
- V jedro je vključena prva popravna posodobitev gonilnika ntfs3. Od trenutka vključitve ntfs3 v jedro 5.15 oktobra lani gonilnik ni bil posodobljen, razvijalci pa so izgubili stik, vendar so zdaj razvijalci ponovno začeli objavljati spremembe. V predlaganih popravkih so odpravljene napake, ki so povzročale puščanja pomnilnika in nenadne prekinitve, reševane so težave z izvajanjem xfstests, opravljena je bila čiščenja neuporabljene kode in popravki tipkarskih napak.
- Za OverlayFS je bila omogočena možnost preslikave identifikatorjev uporabnikov pritrjenih datotečnih sistemov, ki se uporablja za usklajevanje datotek določenega uporabnika na pritrjenem tujem razdelku z drugim uporabnikom v trenutnem sistemu.
- Pomnilnik in sistemske storitve
- Dodana je začetna podpora za arhitekturo nabora ukazov LoongArch, ki se uporablja v procesorjih Loongson 3 5000 in implementira nov RISC ISA, podoben MIPS in RISC-V. Arhitektura LoongArch je na voljo v treh različicah: omejena 32-bitna (LA32R), običajna 32-bitna (LA32S) in 64-bitna (LA64).
- Odstranjena je podpora za format izvršljivih datotek a.out, ki je bil razvrščen med zastarele v izdaji 5.1. Format a.out se že dolgo ne uporablja na sistemih z Linuxom, generacija datotek a.out pa ni več podprta z modernim orodjem v privzetih konfiguracijah za Linux. Za nalagalnik datotek a.out je mogoče celotno implementacijo izvesti v uporabniškem prostoru.
- Podpora za možnosti nalaganja, specifične za arhitekturo x86: nosep, nosmap, nosmep, noexec in noclflush je bila ukinjena.
- Podpora za zastarelo arhitekturo CPU h8300 (Renesas H8/300), ki je že dolgo brez podpore, je bila prenehana.
- Razširjene so možnosti odzivanja na zaznane razcepljene zaklepke („split lock“), ki se pojavijo pri dostopu do neurejenih podatkov v pomnilniku, ker pri izvedbi atomarne instrukcije podatki prečkajo dve liniji CPU predpomnilnika. Takšne zaklepke povzročajo znatno upočasnitev zmogljivosti. Prej je jedro privzeto izdajalo opozorilo z informacijami o postopku, ki je povzročil zaklepanje, zdaj pa bo problematični postopek dodatno upočasnjen, da se ohrani zmogljivost preostalega sistema.
- Dodana je podpora za mehanizem IFS (In-Field Scan), implementiran v procesorjih Intel, ki omogoča izvajanje nizkonivojskih diagnostičnih testov CPU, sposobnih identificirati težave, ki jih ne zaznavajo standardna orodja na osnovi kod za popravljanje napak (ECC) ali bitov parnosti. Izvajani testi so oblikovani kot nalagljiva programska oprema, podobna posodobitvam mikroprogramov. Rezultati testiranja so dostopni preko sysfs.
- Dodana je možnost vgrajevanja datoteke bootconfig v jedro, ki omogoča določanje parametrov delovanja jedra poleg možnosti ukazne vrstice preko datoteke s nastavitvami. Vgrajevanje poteka z uporabo gradbene možnosti ‘CONFIG_BOOT_CONFIG_EMBED_FILE="/PATH/TO/BOOTCONFIG/FILE"‘. Prej je bil bootconfig določen z dodajanjem k sliki initrd. Vgrajevanje v jedru omogoča uporabo bootconfig v konfiguracijah brez initrd.
- Uresničena je možnost nalaganja programske opreme, stisnjene z uporabo algoritma Zstandard. V sysfs je dodan niz upravljalnih datotek /sys/class/firmware/*, ki omogoča zagon nalaganja programske opreme iz uporabniškega prostora.
- V vmesniku asinhronega vnosa/izvoda io_uring je predstavljen nova zastavica IORING_RECVSEND_POLL_FIRST, pri čemer se ob nastavitvi le-te preusmeri omrežna operacija na obdelavo z uporabo polinga (polling), kar lahko prihrani vire v situacijah, kjer je dovoljena obdelava operacije z določeno zamudo. V io_uring je tudi dodana podpora za sistemski klic socket(), predstavljene so nove zastavice za poenostavitev upravljanja s datotečnimi descriptorji, dodan je način „multi-shot“ za sprejemanje več povezav z enkratnim klicem accept(), dodane so operacije za posredovanje ukazov NVMe neposredno v napravo.
- Za arhitekturo Xtensa je bila dodana podpora za orodje za odpravljanje napak KCSAN (Kernel Concurrency Sanitizer), namenjeno dinamičnemu odkrivanju stanj dirke znotraj jedra. Dodana je podpora za način spanja in soprocesorje.
- Za arhitekturo m68k (Motorola 68000) je bila implementirana virtualni stroj (simulator platforme), ki je zasnovan na emulatorju Android Goldfish.
- Za arhitekturo AArch64 je bila uvedena podpora za razširitve Armv9-A SME (Scalable Matrix Extension).
- V podskladu eBPF je omogočeno shranjevanje tipiziranih kazalcev v map-strukture, poleg tega je bila dodana podpora za dinamične kazalce.
- Predlagan je nov mehanizem predhodnega izklopa pomnilnika, ki omogoča upravljanje iz uporabniškega prostora s pomočjo datoteke memory.reclaim. Zapis števila v navedeno datoteko bo poskušal izločiti ustrezno število bajtov iz nabora, povezanega s cgroup.
- Povečana je natančnost beleženja porabe pomnilnika pri stiskanju podatkov v delovnem pomnilniku s pomočjo mehanizma zswap.
- Za arhitekturo RISC-V je bila zagotovljena podpora za zagon 32-bitnih izvršnih datotek na 64-bitnih sistemih, dodan je način za vezavo omejevalnih atributov na pomnilniške strani (na primer, za prepoved predpomnjenja) in implementirana je funkcija kexec_file_load().
- Izvedba podpore za 32-bitne sisteme Armv4T in Armv5 je bila prilagojena za uporabo v univerzalnih večplatformnih gradnjah jedra, primernih za različne ARM-sisteme.
- Virtualizacija in varnost
- V podskladu EFI je bila uvedena možnost zaupne prenosa tajnih informacij gostujočim sistemom brez njihove razkritja gostiteljskemu sistemu. Podatki so na voljo prek imenika security/coco v securityfs.
- V režimu zaščite Lockdown, ki omejuje dostop uporabnika root do jedra in blokira poti za obvoz UEFI Secure Boot, je bila odpravljena ranljivost, ki je omogočala obvoz zaščite prek manipulacij z orodjem za odpravljanje napak jedra.
- Vključeni so popravki, namenjeni izboljšanju zanesljivosti in zmogljivosti generatorja psevdonaključnih števil.
- Pri gradnji s pomočjo Clang 15 je bila uvedena podpora za mehanizem za naključje struktur jedra.
- V mehanizmu Landlock, ki omogoča omejevanje interakcije skupine procesov z zunanjim okoljem, je bila dodana podpora za pravila, ki omogočajo nadzor nad izvajanjem operacij preimenovanja datotek.
- Podsystem IMA (Integrity Measurement Architecture) je namenjena preverjanju celovitosti komponent operacijskega sistema s pomočjo digitalnih podpisov in hash-ev, prenesena je na uporabo modula fs-verity za preverjanje datotek.
- Logika dejanj ob onemogočanju neprivilegiranega dostopa do podsystema eBPF je bila spremenjena - prej so bile onemogočene vse ukaze, povezane s sistemskim klicem bpf(), od različice 5.19 pa je dostop do ukazov, ki ne povzročajo ustvarjanja objektov, ostal. Pri tovrstnem vedenju je za nalaganje BPF programa potreben privilegiran proces, vendar lahko nato neprivilegirani procesi komunicirajo s tem programom.
- Dodana je podpora za razširitev AMD SEV-SNP (Secure Nested Paging), ki zagotavlja varen dostop do vgrajenih tabel strani pomnilnika in ščiti pred napadi 'undeSErVed' in 'SEVerity' na procesorje AMD EPYC, ki omogočajo obvladovanje mehanizma zaščite AMD SEV (Secure Encrypted Virtualization).
- Dodana je podpora za mehanizem Intel TDX (Trusted Domain Extensions), ki omogoča blokiranje poskusov zunanjega dostopa do šifriranega pomnilnika. virtualnih naprav.
- V gonilniku virtio-blk, ki se uporablja za emulacijo blokovnih naprav, je dodana podpora za vhod/izhod z uporabo polinga (polling), kar je po izvedenih testih omogočilo zmanjšanje zakasnitve za približno 10%.
- Mrežna podsistem
- Vključena je serija popravkov BIG TCP, ki omogočajo povečanje maksimalne velikosti TCP paketa na 4 GB za optimizacijo delovanja visoko hitrih notranjih omrežij podatkovnih centrov. Tako povečanje velikosti paketa pri 16-bitnem velikostnem polju v glavi se doseže z implementacijo 'jumbo' paketov, katerih velikost v IP glavi je nastavljena na 0, dejanska velikost pa se prenese v ločenem 32-bitnem polju v dodatni priloženi glavi. Pri testiranju zmogljivosti je nastavitev velikosti paketa na 185 kB omogočila povečanje propustnosti za 50% in znatno zmanjšanje zakasnitve prenosa podatkov.
- Nadaljujemo z integracijo sredstev za sledenje vzrokom zavrnitve paketov (kodi reason) v omrežno skladbo. Koda vzroka se posreduje med sproščanjem pomnilnika, povezanega s paketom, in omogoča upoštevati takšne situacije, kot so zavrnitev paketa zaradi napak pri izpolnjevanju polj v glavi, zaznavanje ponarejanja s filtrirnim rp_filter, napačna kontrolna vsota, pomanjkanje pomnilnika, aktivacija pravil IPSec XFRM, napačna številka zaporedja TCP itd.
- Dodana je podpora za preklop povezav MPTCP (MultiPath TCP) za uporabo običajnega TCP, v situacijah, ko določenih funkcij MPTCP ni mogoče uporabiti. MPTCP je razširitev protokola TCP za organizacijo delovanja TCP-povezave z dostavo paketov hkrati po več poteh preko različnih omrežnih vmesnikov, povezanih z različnimi IP-naslovi. Dodan je API za upravljanje s tokovi MPTCP iz uporabniškega prostora.
- Oprema
- Dodano je več kot 420 tisoč vrstic kode, povezanih z gonilnikom amdgpu, od katerih približno 400 tisoč vrstic predstavljajo samodejno generirani glavni datoteki z podatki za registre ASIC v gonilniku za GPU AMD, še dodatnih 22,5 tisoč vrstic pa zagotavlja začetno implementacijo podpore za AMD SoC21. Skupna velikost gonilnika za GPU AMD je presegla 4 milijone vrstic kode. Poleg SoC21 gonilnik AMD vključuje podporo za SMU 13.x (System Management Unit), posodobljena je podpora za USB-C in GPUVM, izvedena je priprava na podporo naslednjim generacijam platform RDNA3 (RX 7000) in CDNA (AMD Instinct).
- V gonilniku i915 (Intel) so razširjene možnosti, povezane z upravljanjem porabe energije. Dodani so identifikatorji GPU Intel DG2 (Arc Alchemist), ki se uporabljajo v prenosnih računalnikih, omogočena je začetna podpora za platformo Intel Raptor Lake-P (RPL-P), dodane so informacije o grafičnih karticah Arctic Sound-M, izveden je ABI za računske enote, za kartice DG2 je dodana podpora za format Tile4, za sisteme, osnovane na mikroarhitekturi Haswell, pa je zagotovljena podpora za DisplayPort HDR.
- V gonilniku Nouveau je bila izvedena preklop na uporabo obdelovalca drm_gem_plane_helper_prepare_fb, za nekatere strukture in spremenljivke je bila uporabljena statična dodelitev pomnilnika. Kar zadeva uporabo odprtokodnih modulov jedra podjetja NVIDIA v Nouveau, se delo zaenkrat osredotoča na odkrivanje in odpravo napak. V prihodnje se načrtuje uporaba objavljene programske opreme za izboljšanje zmogljivosti gonilnika.
- Dodan je gonilnik za krmilnik NVMe, ki se uporablja v računalnikih Apple na osnovi čipa M1.
Hkrati je Latinskoameriški sklad prostega programske opreme oblikoval različico popolnoma proste jedra 5.19 — Linux-libre 5.19-gnu, očiščeno vseh elementov strojne programske opreme in gonilnikov, ki vsebujejo neproste komponente ali odseke kode, katerih uporaba je omejena s strani proizvajalca. V novi različici je bila opravljena čiščenje gonilnikov za pureLiFi X/XL/XC in TI AMx3 Wkup-M3 IPC. Posodobljen je bil kod za čiščenje blobov v gonilnikih in podsklopih Silicon Labs WFX, AMD amdgpu, Qualcomm WCNSS Peripheral Image Loader, Realtek Bluetooth, Mellanox Spectrum, Marvell WiFi-Ex, Intel AVS, IFS, pu3-imgu. Implementirano je bilo obdelavo devicetree-datotek Qualcomm AArch64. Dodana je podpora za novo shemo poimenovanja komponent Sound Open Firmware. Čiščenje gonilnika ATM Ambassador, ki je bil odstranjen iz jedra, je bilo ustavljeno. Upravljanje s čiščenjem blobov v HDCP in Mellanox Core je bilo preneseno v ločene oznake kconfig.
Izvor: opennet.ru
