Izdaja jedra Linuxa 5.18

Po dveh mesecih razvoja je Linus Torvalds predstavil izdajo jedra Linuxa 5.18. Med najbolj opaznimi spremembami: izvedeno je bilo veliko čiščenje zastarele funkcionalnosti, Reiserfs FS je bil razglašen za zastarel, implementirani so bili dogodki sledenja uporabniških procesov, dodana je bila podpora za mehanizem za blokiranje izkoriščanja Intel IBT, omogočen je bil način zaznavanja prekoračitve medpomnilnika, ko z uporabo funkcije memcpy(), dodan je bil mehanizem za sledenje klicem funkcije fprobe, izboljšana je zmogljivost razporejevalnika opravil na procesorjih AMD Zen, vključen je gonilnik za upravljanje funkcionalnosti procesorja Intel (SDS), integriranih je nekaj popravkov za prestrukturiranje datotek glave in odobrena je bila uporaba standarda C11.

Nova različica vključuje 16206 popravkov od 2127 razvijalcev (v zadnji izdaji je bilo 14203 popravkov od 1995 razvijalcev), velikost popravka je 108 MB (spremembe so vplivale na 14235 datotek, dodanih je bilo 1340982 vrstic kode, izbrisanih je bilo 593836 vrstic). Približno 44 % vseh sprememb, uvedenih v 5.18, je povezanih z gonilniki naprav, približno 16 % sprememb je povezanih s posodabljanjem kode, specifične za arhitekture strojne opreme, 11 % je povezanih z omrežnim skladom, 3 % je povezanih z datotečnimi sistemi in 3 % so povezani z notranjimi podsistemi jedra.

Glavne novosti v jedru 5.18:

  • Diskovni podsistem, V/I in datotečni sistemi
    • Datotečni sistem Btrfs ima dodano podporo za posredovanje stisnjenih podatkov pri izvajanju operacij pošiljanja in prejemanja. Prej je pri uporabi pošiljanja/prejemanja pošiljateljska stran razpakirala podatke, shranjene v stisnjeni obliki, prejemna stran pa jih je znova stisnila, preden jih je zapisala. V jedru 5.18 so aplikacije uporabniškega prostora, ki uporabljajo klice za pošiljanje/prejemanje, dobile možnost prenosa stisnjenih podatkov brez ponovnega pakiranja. Funkcionalnost je implementirana zahvaljujoč novima operacijama ioctl BTRFS_IOC_ENCODED_READ in BTRFS_IOC_ENCODED_WRITE, ki vam omogočata neposredno branje in pisanje informacij v obsege.

      Poleg tega Btrfs izboljša zmogljivost fsync. Dodana je možnost odstranitve dvojnikov in izvajanja povratne povezave (kloniranje metapodatkov datoteke z ustvarjanjem povezave do obstoječih podatkov, ne da bi jih dejansko kopirali) za celotno shrambo, ne omejeno na točke priklopa.

    • V načinu Direct I/O je mogoče dostopati do šifriranih datotek, ko fscrypt uporablja vgrajeno šifriranje, pri katerem operacije šifriranja in dešifriranja izvaja krmilnik pogona in ne jedro. Z običajnim šifriranjem jedra je dostop do šifriranih datotek z uporabo Direct I/O še vedno nemogoč, saj se do datotek dostopa mimo mehanizma medpomnilnika v jedru.
    • Strežnik NFS privzeto vključuje podporo za protokol NFSv3, ki zdaj ne zahteva ločenega omogočanja in je na voljo, ko je NFS na splošno omogočen. NFSv3 velja za glavno in vedno podprto različico NFS, podpora za NFSv2 pa bo morda v prihodnosti ukinjena. Učinkovitost branja vsebin imenika je bila bistveno izboljšana.
    • Datotečni sistem ReiserFS je opuščen in naj bi bil odstranjen leta 2025. Opustitev ReiserFS bo zmanjšala trud, potreben za vzdrževanje sprememb celotnega datotečnega sistema, povezanih s podporo za novi API za pripenjanje, iomap in knjige.
    • Za datotečni sistem F2FS je bila implementirana možnost preslikave uporabniških ID-jev nameščenih datotečnih sistemov, ki se uporablja za primerjavo datotek določenega uporabnika na nameščeni tuji particiji z drugim uporabnikom v trenutnem sistemu.
    • Koda za izračun statistike v obdelovalcih Device-mapper je bila predelana, kar je znatno izboljšalo natančnost obračunavanja v obdelovalcih, kot je dm-crypt.
    • Naprave NVMe zdaj podpirajo 64-bitne kontrolne vsote za preverjanje celovitosti.
    • Za datotečni sistem exfat je bila predlagana nova možnost priklopa "keep_last_dots", ki onemogoči brisanje pik na koncu imena datoteke (v sistemu Windows so pike na koncu imena datoteke privzeto odstranjene).
    • EXT4 izboljša delovanje načina fast_commit in poveča razširljivost. Možnost priklopa “mb_optimize_scan”, ki omogoča povečanje zmogljivosti v pogojih velike razdrobljenosti datotečnega sistema, je prilagojena za delo z datotekami z obsegi.
    • Podpora za pisalne tokove v podsistemu, ki podpira blokovne naprave, je bila ukinjena. Ta funkcija je bila predlagana za SSD diske, vendar ni bila razširjena in trenutno ni v uporabi naprav, ki bi podpirale ta način, in je malo verjetno, da se bodo pojavile v prihodnosti.
  • Pomnilniške in sistemske storitve
    • Začela se je integracija kompleta popravkov, kar omogoča znatno skrajšanje časa obnove jedra s prestrukturiranjem hierarhije datotek glave in zmanjšanjem števila navzkrižnih odvisnosti. Jedro 5.18 vključuje popravke, ki optimizirajo strukturo datotek glave načrtovalnika opravil (kernel/sched). V primerjavi s prejšnjo izdajo se je poraba procesorskega časa pri sestavljanju kode kernel/sched/ zmanjšala za 61 %, dejanski čas pa za 3.9 % (z 2.95 na 2.84 s).
    • Koda jedra lahko uporablja standard C11, objavljen leta 2011. Prej je morala biti koda, dodana jedru, v skladu s specifikacijo ANSI C (C89), oblikovano leta 1989. V skriptih za gradnjo jedra 5.18 je možnost '—std=gnu89' nadomeščena z '—std=gnu11 -Wno-shift-negative-value'. Obravnavana je bila možnost uporabe standarda C17, vendar bi bilo v tem primeru potrebno povečati minimalno podprto različico GCC, medtem ko vključitev podpore C11 ustreza trenutnim zahtevam za različico GCC (5.1).
    • Izboljšana zmogljivost razporejanja opravil na procesorjih AMD z mikroarhitekturo Zen, ki zagotavlja več predpomnilnikov zadnje ravni (LLC) za vsako vozlišče z lokalnimi pomnilniškimi kanali. Nova različica odpravlja neravnovesje LLC med vozlišči NUMA, kar je povzročilo znatno povečanje zmogljivosti za nekatere vrste delovnih obremenitev.
    • Orodja za sledenje aplikacijam v uporabniškem prostoru so razširjena. Nova različica jedra dodaja zmožnost uporabniškim procesom, da ustvarijo uporabniške dogodke in zapišejo podatke v medpomnilnik sledenja, ki si ga lahko ogledate s standardnimi pripomočki za sledenje jedra, kot sta ftrace in perf. Dogodki sledenja uporabniškega prostora so izolirani od dogodkov sledenja jedra. Status dogodka si lahko ogledate preko datoteke /sys/kernel/debug/tracing/user_events_status, registracijo dogodka in zapis podatkov pa preko datoteke /sys/kernel/debug/tracing/user_events_data.
    • Dodan mehanizem za spremljanje (probe) klicev funkcij - fprobe. API fprobe temelji na ftrace, vendar je omejen le z zmožnostjo pritrjevanja rokovalcev za povratne klice na vstopne in izhodne točke funkcij. Za razliko od kprobes in kretprobes vam novi mehanizem omogoča uporabo enega upravljalnika za več funkcij hkrati.
    • Podpora za starejše procesorje ARM (ARMv4 in ARMv5), ki niso opremljeni z enoto za upravljanje pomnilnika (MMU), je bila ukinjena. Podpora za sisteme ARMv7-M brez MMU je ohranjena.
    • Podpora za RISC podobno arhitekturo NDS32, ki se uporablja v procesorjih Andes Technologies, je bila ukinjena. Koda je bila odstranjena zaradi pomanjkanja vzdrževanja in pomanjkanja povpraševanja po podpori NDS32 v glavnem jedru Linuxa (preostali uporabniki uporabljajo specializirane zgradbe jedra proizvajalcev strojne opreme).
    • Privzeto je izgradnja jedra s podporo za format izvršljive datoteke a.out onemogočena za arhitekturi alpha in m68k, ki še naprej uporabljata to obliko. Verjetno bo podpora za stari format a.out kmalu popolnoma odstranjena iz jedra. O načrtih za odstranitev formata a.out se razpravlja že od leta 2019.
    • Arhitektura PA-RISC zagotavlja minimalno podporo za mehanizem vDSO (virtualni dinamični objekti v skupni rabi), ki zagotavlja omejen nabor sistemskih klicev, ki so na voljo v uporabniškem prostoru brez preklapljanja konteksta. Podpora vDSO je omogočila implementacijo zmožnosti izvajanja z neizvršljivim skladom.
    • Dodana podpora za mehanizem Intel HFI (Hardware Feedback Interface), ki omogoča, da strojna oprema jedru posreduje informacije o trenutni zmogljivosti in energetski učinkovitosti posamezne CPE.
    • Dodan gonilnik za mehanizem Intel SDSi (software-Defined Silicon), ki vam omogoča nadzor nad vključitvijo dodatnih funkcij v procesor (na primer specializirana navodila in dodatni predpomnilnik). Ideja je, da je mogoče čipe dobaviti po nižji ceni z zaklenjenimi naprednimi funkcijami, ki jih je nato mogoče "kupiti" in aktivirati dodatne zmogljivosti brez zamenjave strojne opreme čipa.
    • Gonilnik amd_hsmp je bil dodan za podporo vmesniku AMD HSMP (Host System Management Port), ki omogoča dostop do funkcij upravljanja procesorja prek niza posebnih registrov, ki so se pojavili v strežniških procesorjih AMD EPYC, začenši z generacijo Fam19h. Na primer, prek HSMP lahko pridobite podatke o porabi energije in temperaturi, nastavite frekvenčne omejitve, aktivirate različne načine izboljšanja zmogljivosti in upravljate pomnilniške parametre.
    • Asinhroni V/I vmesnik io_uring izvaja možnost IORING_SETUP_SUBMIT_ALL za registracijo nabora deskriptorjev datotek v medpomnilniku obroča in operacijo IORING_OP_MSG_RING za pošiljanje signala iz enega medpomnilnika obroča drugemu medpomnilniku obroča.
    • Mehanizem DAMOS (Data Access Monitoring-based Operation Schemes), ki omogoča sproščanje pomnilnika ob upoštevanju frekvence dostopa do pomnilnika, ima razširjene zmožnosti spremljanja pomnilniških operacij iz uporabniškega prostora.
    • Tretja serija popravkov je integrirana z implementacijo koncepta stranskih folij, ki spominjajo na sestavljene strani, vendar imajo izboljšano semantiko in jasnejšo organizacijo dela. Uporaba tomov vam omogoča, da pospešite upravljanje pomnilnika v nekaterih podsistemih jedra. V predlaganih popravkih so bile funkcije upravljanja notranjega pomnilnika prevedene v folije, vključno z različicami funkcije get_user_pages(). Zagotovljena podpora za ustvarjanje velikih količin v kodi za vnaprejšnje branje.
    • Sistem za sestavljanje zdaj podpira spremenljivke okolja USERCFLAGS in USERLDFLAGS, s katerimi lahko posredujete dodatne zastavice prevajalniku in povezovalniku.
    • V podsistemu eBPF mehanizem BTF (BPF Type Format), ki zagotavlja informacije o preverjanju tipa v psevdokodi BPF, omogoča dodajanje opomb spremenljivkam, ki se nanašajo na pomnilniška področja v uporabniškem prostoru. Opombe pomagajo sistemu za preverjanje kode BPF bolje prepoznati in preveriti dostope do pomnilnika.
    • Predlagan je bil nov upravljalnik dodeljevanja pomnilnika za shranjevanje naloženih programov BPF, ki omogoča učinkovitejšo uporabo pomnilnika v situacijah, ko je naloženih veliko število programov BPF.
    • Sistemskemu klicu madvise(), ki ponuja orodja za optimizacijo upravljanja pomnilnika procesa, je dodana zastavica MADV_DONTNEED_LOCKED, ki dopolnjuje obstoječo zastavico MADV_DONTNEED, prek katere je mogoče jedro vnaprej obvestiti o skorajšnji sprostitvi pomnilniškega bloka, tj. da ta blok ni več potreben in ga lahko uporablja jedro. Za razliko od MADV_DONTNEED je uporaba zastavice MADV_DONTNEED_LOCKED dovoljena za pomnilniške strani, pripete v RAM-u, ki se ob klicu madvise izločijo, ne da bi se spremenil njihov status pripetosti, in v primeru poznejšega dostopa do bloka in generiranja »strani napaka«, se vrnejo z ohranjeno vezavo. Poleg tega je bila dodana sprememba, ki omogoča uporabo zastavice MADV_DONTNEED z velikimi pomnilniškimi stranmi v HugeTLB.
  • Virtualizacija in varnost
    • Za arhitekturo x86 je dodana podpora za zaščitni mehanizem ukaznega toka Intel IBT (Indirect Branch Tracking), ki preprečuje uporabo tehnik gradnje izkoriščanja z uporabo povratno usmerjenih programskih tehnik (ROP, Return-Oriented Programming), v katerih izkoriščanje se oblikuje v obliki verige klicev, ki že obstajajo v pomnilniku delov strojnih navodil, ki se končajo z navodilom za vrnitev nadzora (praviloma so to konci funkcij). Bistvo implementirane metode zaščite je blokiranje posrednih prehodov v telo funkcije z dodajanjem posebnega ukaza ENDBR na začetku funkcije in omogočanje izvedbe posrednega prehoda samo v primeru prehoda na to navodilo (indirekten klic prek JMP in CALL mora vedno pasti na ukaz ENDBR, ki je postavljen na samem začetku funkcije).
    • Omogočeno je strožje preverjanje meja vmesnega pomnilnika v funkcijah memcpy(), memmove() in memset(), izvedeno v času prevajanja, ko je omogočen način CONFIG_FORTIFY_SOURCE. Dodana sprememba se nanaša na preverjanje, ali elementi struktur, katerih velikost je znana, presegajo meje. Ugotovljeno je, da bi implementirana funkcija omogočila blokiranje vseh prekoračitev medpomnilnika jedra, povezanih z memcpy(), ugotovljenih v vsaj zadnjih treh letih.
    • Dodan je drugi del kode za posodobljeno izvedbo generatorja psevdonaključnih števil RDRAND, ki skrbi za delovanje naprav /dev/random in /dev/urandom. Nova izvedba je znana po poenotenju delovanja /dev/random in /dev/urandom, dodani zaščiti pred pojavom dvojnikov v toku naključnih števil pri zagonu virtualnih strojev in prehodu na uporabo zgoščevalne funkcije BLAKE2s namesto SHA1 za operacije mešanja entropije. Sprememba je izboljšala varnost generatorja psevdonaključnih števil z odpravo problematičnega algoritma SHA1 in odpravo prepisovanja inicializacijskega vektorja RNG. Ker je algoritem BLAKE2s boljši od SHA1 v zmogljivosti, je njegova uporaba tudi pozitivno vplivala na zmogljivost.
    • Za arhitekturo ARM64 je dodana podpora za nov algoritem za preverjanje pristnosti kazalca - “QARMA3”, ki je hitrejši od algoritma QARMA, hkrati pa ohranja ustrezno raven varnosti. Tehnologija vam omogoča uporabo specializiranih navodil ARM64 za preverjanje povratnih naslovov z uporabo digitalnih podpisov, ki so shranjeni v neuporabljenih zgornjih bitih samega kazalca.
    • Za arhitekturo ARM64 je bila implementirana podpora za sestavljanje z vključitvijo v GCC 12 zaščitnega načina pred prepisovanjem povratnega naslova iz funkcije v primeru prekoračitve medpomnilnika na skladu. Bistvo zaščite je shraniti povratni naslov v ločenem "senčnem" skladu po prenosu nadzora na funkcijo in pridobiti ta naslov pred izhodom iz funkcije.
    • Dodan je nov obesek za ključe - »stroj«, ki vsebuje ključe lastnika sistema (MOK, Machine Owner Keys), podprte v zagonskem nalagalniku shim. Te ključe je mogoče uporabiti za digitalno podpisovanje komponent jedra, naloženih v fazi po zagonu (na primer modulov jedra).
    • Odstranjena podpora za asimetrične zasebne ključe za TPM, ki so bili na voljo v podedovani različici TPM, je imela znane varnostne težave in v praksi ni bila široko sprejeta.
    • Dodana zaščita podatkov s tipom size_t pred celoštevilskimi prelivi. Koda vključuje obdelovalnike size_mul(), size_add() in size_sub(), ki vam omogočajo varno množenje, seštevanje in odštevanje velikosti s tipom size_t.
    • Pri gradnji jedra sta omogočeni zastavici »-Warray-bounds« in »-Wzero-length-bounds«, ki prikažeta opozorila, ko indeks preseže mejo matrike in ko se uporabljajo matrike ničelne dolžine.
    • Naprava virtio-crypto ima dodano podporo za šifriranje z algoritmom RSA.
  • Omrežni podsistem
    • Pri izvedbi omrežnih mostov je dodana podpora za način povezovanja vrat (locked mode), pri katerem lahko uporabnik pošilja promet preko vrat le z avtoriziranega MAC naslova. Dodana je bila tudi možnost uporabe več struktur za ovrednotenje stanja protokola STP (Spanning Tree Protocol). Prej je bilo mogoče omrežja VLAN preslikati samo neposredno v STP (1:1), pri čemer se je vsak VLAN upravljal neodvisno. Nova različica doda parameter mst_enable, ko je omogočen, stanje VLAN-ov nadzoruje modul MST (Multiple Spanning Trees) in vezava VLAN-ov lahko ustreza modelu M:N.
    • Nadaljevalo se je delo pri vključevanju orodij v omrežni sklad za sledenje razlogom za izpuščanje paketov (kode vzrokov). Koda vzroka se pošlje, ko se sprosti pomnilnik, povezan s paketom, in omogoča situacije, kot so zavrnitev paketa zaradi napak v glavi, zaznavanje ponarejanja rp_filter, neveljavna kontrolna vsota, pomanjkanje pomnilnika, sprožena pravila IPSec XFRM, neveljavna zaporedna številka TCP itd.
    • Možen je prenos omrežnih paketov iz programov BPF, zagnanih iz uporabniškega prostora v načinu BPF_PROG_RUN, v katerem se programi BPF izvajajo v jedru, vendar vrnejo rezultat v uporabniški prostor. Paketi se prenašajo s pomočjo podsistema XDP (eXpress Data Path). Podprt je način obdelave paketov v živo, pri katerem lahko procesor XDP sproti preusmerja omrežne pakete na omrežni sklad ali na druge naprave. Možna je tudi izdelava programskih generatorjev zunanjega prometa ali nadomestnih omrežnih okvirjev v omrežni sklad.
    • Za programe BPF, povezane z omrežnimi skupinami c, so bile predlagane pomožne funkcije za izrecno nastavitev povratne vrednosti sistemskih klicev, kar omogoča posredovanje popolnejših informacij o razlogih za blokiranje sistemskega klica.
    • Podsistem XDP (eXpress Data Path) je dodal podporo za fragmentirane pakete, nameščene v več medpomnilnikih, kar vam omogoča obdelavo Jumbo okvirjev v XDP in uporabo TSO/GRO (TCP Segmentation Offload/Generic Receive Offload) za XDP_REDIRECT.
    • Bistveno se je pospešil proces brisanja omrežnih imenskih prostorov, kar je bilo potrebno na nekaterih velikih sistemih z velikim obsegom prometa.
  • Оборудование
    • Gonilnik amdgpu privzeto vključuje tehnologijo prilagodljive sinhronizacije FreeSync, ki vam omogoča prilagajanje hitrosti osveževanja informacij na zaslonu, kar zagotavlja gladke slike brez trganja med igranjem iger in gledanjem videoposnetkov. Podpora za GPU Aldebaran je bila napovedana kot stabilna.
    • Gonilnik i915 dodaja podporo za čipe Intel Alderlake N in ločene grafične kartice Intel DG2-G12 (Arc Alchemist).
    • Gonilnik nouveau nudi podporo za višje bitne hitrosti za vmesnike DP/eDP in podporo za kabelske podaljške lttprs (Link-Training Tunable PHY Repeaters).
    • V podsistemu drm (Direct Rendering Manager) v podpori parametrov gonilnikov armada, exynos, gma500, hyperv, imx, ingenic, mcde, mediatek, msm, omap, rcar-du, rockchip, sprd, sti, tegra, tilcdc, xen in vc4 je bil dodan nomodeset, ki vam omogoča, da onemogočite preklapljanje video načinov na ravni jedra in uporabo orodij za pospeševanje strojnega upodabljanja, pri čemer ostane samo funkcionalnost, povezana s sistemskim medpomnilnikom okvirjev.
    • Dodana podpora za ARM SoС Qualcomm Snapdragon 625/632 (uporablja se v pametnih telefonih LG Nexus 5X in Fairphone FP3), Samsung Exynos 850, Samsung Exynos 7885 (uporablja se v Samsung Galaxy A8), Airoha (Mediatek/EcoNet) EN7523, Mediatek mt6582 (Prestigio PMT5008 tablični računalnik 3G), Microchip Lan966, Renesas RZ/G2LC, RZ/V2L, Tesla FSD, TI K3/AM62 in i.MXRTxxxx.
    • Dodana podpora za naprave in plošče ARM proizvajalcev Broadcom (Raspberry Pi Zero 2 W), Qualcomm (Google Herobrine R1 Chromebook, SHIFT6mq, Samsung Galaxy Book2), Rockchip (Pine64 PineNote, Bananapi-R2-Pro, STM32 Emtrion emSBS, Samsung Galaxy Tab S , tablični računalnik Prestigio PMT5008 3G), Allwinner (A20-Marsboard), Amlogic (Amediatek X96-AIR, CYX A95XF3-AIR, Haochuangy H96-Max, Amlogic AQ222 in OSMC Vero 4K+), Aspeed (Quanta S6Q, ASRock ROMED8HM3), Marvell MVEBU / Armada (Ctera C200 V1 in V2 NAS), Mstar (DongShanPiOne, Miyoo Mini), NXP i.MX (Protonic PRT8MM, emCON-MX8M Mini, Toradex Verdin, Gateworks GW7903).
    • Dodana podpora za zvočne sisteme in kodeke AMD PDM, Atmel PDMC, Awinic AW8738, i.MX TLV320AIC31xx, Intel CS35L41, ESSX8336, Mediatek MT8181, nVidia Tegra234, Qualcomm SC7280, Renesas RZ/V2L, Texas Instruments TAS585M. Dodana začetna izvedba zvočnega gonilnika za čip Intel AVS DSP. Posodobljena podpora za gonilnik za Intel ADL in Tegra234 ter narejene spremembe za izboljšanje zvočne podpore v napravah Dell, HP, Lenovo, ASUS, Samsung in Clevo.

    Istočasno je Latinskoameriška fundacija za prosto programsko opremo oblikovala različico popolnoma brezplačnega jedra 5.18 - Linux-libre 5.18-gnu, očiščeno elementov vdelane programske opreme in gonilnikov, ki vsebujejo neproste komponente ali odseke kode, katerih obseg je omejen. s strani proizvajalca. Nova izdaja čisti gonilnike za plošče MIPI DBI, VPU Amphion, WiFi MediaTek MT7986 WMAC, Mediatek MT7921U (USB) in Realtek 8852a/8852c, zvočne čipe Intel AVS in Texas Instruments TAS5805M. Datoteke DTS so bile očiščene tudi za različne procesorje Qualcomm SoC s procesorji, ki temeljijo na arhitekturi AArch64. Posodobljena koda za čiščenje madežev v gonilnikih in podsistemih AMD GPE, MediaTek MT7915, Silicon Labs WF200+ WiFi, Mellanox Spectru Ethernet, Realtek rtw8852c, Qualcomm Q6V5, Wolfson ADSP, MediaTek HCI UART.

Vir: opennet.ru

Dodaj komentar