Izdaja jedra Linuxa 5.16

Po dveh mesecih razvoja je Linus Torvalds predstavil izdajo jedra Linux 5.16. Med najbolj opaznimi spremembami: sistemski klic futex_waitv za izboljšanje zmogljivosti Windows iger v Winu, sledenje napakam v FS preko fanotify, koncept folij v sistemu za upravljanje pomnilnika, podpora za navodila procesorja AMX, možnost rezerviranja pomnilnika za omrežne vtičnice, podpora za razvrščanje paketov na stopnji v »izhodu« netfilterja, uporaba podsistema DAMON za proaktivno izločanje neuporabljenih pomnilniških območij, izboljšanje obvladovanja preobremenitev z velikim obsegom pisalnih operacij, podpora za trde diske z več pogoni.

Nova različica vključuje 15415 popravkov od 2105 razvijalcev, velikost popravka je 45 MB (spremembe so vplivale na 12023 datotek, dodanih je bilo 685198 vrstic kode, izbrisanih je bilo 263867 vrstic). Približno 44 % vseh sprememb, uvedenih v 5.16, je povezanih z gonilniki naprav, približno 16 % sprememb je povezanih s posodabljanjem kode, specifične za arhitekture strojne opreme, 16 % je povezanih z omrežnim skladom, 4 % je povezanih z datotečnimi sistemi in 4 % so povezani z notranjimi podsistemi jedra.

Glavne novosti v jedru 5.16:

  • Diskovni podsistem, V/I in datotečni sistemi
    • Mehanizem fanotify je dodal orodja za spremljanje stanja datotečnega sistema in sledenje pojavu napak. Informacije o napakah se prenašajo z novo vrsto dogodkov - FAN_FS_ERROR, ki jih je mogoče prestreči v nadzornih sistemih, ki delujejo v uporabniškem prostoru, da takoj obvestijo skrbnika ali zaženejo obnovitvene procese. Ko se vrsta napak pojavi kaskadno, fanotify zagotovi, da je prvo sporočilo o napaki dostavljeno skupaj s splošnim števcem težav za poenostavitev nadaljnje analize vzroka napake. Podpora za sledenje napakam je trenutno implementirana samo za datotečni sistem Ext4.
    • Izboljšano ravnanje s prezasedenostjo pisanja, do katere pride, ko obseg pisalnih operacij preseže prepustnost pogona in je sistem prisiljen blokirati pisalne zahteve procesa, dokler niso dokončane že poslane zahteve. V novi različici je mehanizem jedra, ki se uporablja za pridobivanje informacij o pojavu preobremenitve in blokiranju opravil, popolnoma preoblikovan, saj je v stari izvedbi prišlo do težav pri spajanju obdelave preobremenitve pisanja s premikom pomnilniških strani v zamenjavo. ko v sistemu ni dovolj pomnilnika.
    • Btrfs izvaja podporo za tehnologijo coniranja naprav (Zoned Namespace), ki se uporablja v trdih diskih ali NVMe SSD za razdelitev prostora za shranjevanje v cone, ki sestavljajo skupine blokov ali sektorjev, v katere je dovoljeno samo zaporedno dodajanje podatkov, s čimer se posodablja celotna skupina podatkov. bloki. Poleg tega so bile narejene manjše optimizacije za beleženje inode, kar je povečalo prepustnost v preskusu dbench za 3 % in zmanjšalo zakasnitev za 11 %. Mehanizem beleženja imenika je bil preoblikovan, pri čemer je bilo število operacij iskanja in blokiranja v drevesu zmanjšano za večjo učinkovitost. Pospešeno je vstavljanje elementov v strukturo btree v paketnem načinu (čas množičnega vstavljanja elementov je skrajšan za 4 %, brisanja pa za 12 %). Dodana omejena podpora za uporabo stiskanja pri pisanju delnih strani, kot tudi možnost defragmentiranja podstrani. Izvedene so bile priprave za omogočanje podpore za drugo različico protokola za ukaz »pošlji«.
    • Datotečni sistem XFS zmanjša porabo pomnilnika z uporabo ločenih predpomnilnikov za pogosto uporabljene elemente in zmanjšanjem nekaterih podatkovnih struktur.
    • V datotečnem sistemu Ext4 so zabeleženi le popravki napak in natančnejši izračun parametrov lene inicializacije tabele Inode.
    • Optimizacije so bile implementirane na ravni blokovnih naprav, da bi znatno povečali učinkovitost povezovanja operacij z jedri CPE.
    • Dodana začetna podpora za trde diske z več neodvisnimi pogoni (multi-aktuator), kar omogoča hkraten dostop do več sektorjev v različnih območjih magnetnega krožnika.
    • Dodan nov ukaz ioctl CDROM_TIMED_MEDIA_CHANGE za zaznavanje dogodkov spremembe medija v pogonu optičnega diska.
    • Datotečni sistem EROFS (izboljšan datotečni sistem samo za branje) je dodal možnost delovanja na več napravah za shranjevanje. Različne naprave je mogoče preslikati v en 32-bitni naslovni prostor blokov. Dodana je tudi podpora za stiskanje z uporabo algoritma LZMA.
    • Datotečnemu sistemu F2FS so bile dodane možnosti namestitve za nadzor fragmentacije datotek, ko so postavljene v shrambo (na primer za odpravljanje napak pri optimizacijah za delo z fragmentirano shrambo).
    • CEPH privzeto omogoča ustvarjanje in brisanje asinhronega imenika (uporabite zastavico '-o wsync' pri priklopu, da se vrnete na staro vedenje). Dodano vzdrževanje metrik, ki sledijo operacijam kopiranja zunanjih predmetov.
    • V CIFS je bil dodan parameter za priklop tcpnodelay, ki nastavi način tcp_sock_set_nodelay za omrežno vtičnico, ki onemogoči čakanje, da se čakalna vrsta zapolni v skladu TCP. Dodana podpora za ugnezdene povezave DFS (distribuirani datotečni sistem) pri ponovni namestitvi.
    • Dodana podpora za dokončanje zahtev za blokovno napravo v paketnem načinu. Testiranje spremembe je pokazalo povečanje intenzivnosti operacij naključnega branja iz pogonov Optane s 6.1 na 6.6 milijona IOPS na enem jedru CPE.
  • Pomnilniške in sistemske storitve
    • Dodan nov sistemski klic futex_waitv, ki vam omogoča spremljanje stanja več futexov hkrati z enim samim sistemskim klicem. Ta funkcija spominja na funkcijo WaitForMultipleObjects, ki je na voljo v sistemu Windows, katere emulacija prek futex_waitv je lahko koristna za izboljšanje zmogljivosti iger Windows, ki se izvajajo pod Wine ali Proton. Poleg tega lahko hkratno čakanje na futexe uporabite tudi za optimizacijo zmogljivosti izvornih gradenj iger za Linux.
    • Implementiran je bil koncept folij strani, katerih uporaba v nekaterih podsistemih jedra bo pospešila upravljanje pomnilnika pri tipičnih delovnih obremenitvah. Trenutno sta glavni podsistem za upravljanje pomnilnika v jedru in implementacija predpomnilnika strani že prenesena v folije, v prihodnosti pa je predviden prenos datotečnih sistemov. V prihodnosti je načrtovano tudi dodajanje podpore za večstranske folije v jedro.

      Zbirke spominjajo na sestavljene strani, vendar imajo izboljšano semantiko in jasnejšo organizacijo dela. Za upravljanje sistemskega pomnilnika je razpoložljivi RAM razdeljen na pomnilniške strani, katerih velikost se razlikuje glede na arhitekturo, v sistemih x86 pa se meri v kilobajtih (običajno 4096 bajtov). Sodobni sistemi so opremljeni z desetinami gigabajtov RAM-a, zaradi česar je upravljanje pomnilnika bolj zapleteno zaradi potrebe po obdelavi ogromnega števila pomnilniških strani. Za zmanjšanje števila strani je jedro prej implementiralo koncept sestavljenih strani s strukturami, ki obsegajo več kot eno fizično stran pomnilnika. Toda API za manipulacijo združenih pomnilniških strani je pustil veliko želenega in povzročil dodatne stroške.

    • V razporejevalnik opravil je bil dodan upravljalnik, ki upošteva združevanje predpomnilnika v gruče v CPE. V nekaterih procesorjih, kot sta Kunpeng 920 (ARM) in Intel Jacobsville (x86), lahko določeno število jeder CPE, običajno 4, združuje predpomnilnik L3 ali L2. Upoštevanje takšnih topologij lahko znatno izboljša učinkovitost porazdelitve nalog po jedrih CPE v razporejevalniku opravil, saj premikanje nalog znotraj iste gruče CPE omogoča povečanje prepustnosti dostopa do pomnilnika in zmanjšanje spora med predpomnilnikom.
    • Dodana podpora za navodila AMX (Advanced Matrix Extensions), implementirana v prihajajoče strežniške procesorje Intel Xeon Scalable s kodnim imenom Sapphire Rapids. AMX ponuja nove nastavljive registre TMM "TILE" in navodila za manipulacijo podatkov v teh registrih, kot je TMUL (Tile matrix MULTiply) za matrično množenje.
    • Izvedenih je bilo več novih funkcij na podlagi podsistema DAMON (Data Access MONitor), dodanega v zadnji izdaji, ki vam omogoča spremljanje dostopa do podatkov v RAM-u glede na izbrani proces, ki se izvaja v uporabniškem prostoru. Na primer, podsistem omogoča analizo, do katerih pomnilniških območij je proces dostopal med celotnim delovanjem in katera pomnilniška področja so ostala nezahtevana.
      • DAMON_RECLAIM za identifikacijo in odstranitev pomnilniških območij, do katerih niste dostopali. Mehanizem je mogoče uporabiti za proaktivno mehko izločanje pomnilniških strani, ko se prostega pomnilnika bliža izčrpanosti.
      • DAMOS (operacijske sheme, ki temeljijo na nadzoru dostopa do podatkov) za uporabo določenih operacij madvise(), kot je sprostitev dodatnega prostega pomnilnika, za obdelavo pomnilniških področij, za katera je določena frekvenca dostopa do pomnilnika. Parametri DAMOS se konfigurirajo prek debugfs.
      • Možnost spremljanja fizičnega naslovnega prostora pomnilnika (prej je bilo mogoče spremljati le navidezne naslove).
    • Izvedba kompresijskega algoritma zstd je bila posodobljena na različico 1.4.10, ki je znatno izboljšala delovanje različnih podsistemov jedra, ki uporabljajo stiskanje (npr. razpakiranje slike jedra je pospešeno za 35 %, zmogljivost razpakiranja stisnjenih podatkov v Btrfs in SquashFS se je povečal za 15%, v ZRAM pa za 30%). Jedro je sprva uporabljalo ločeno izvedbo zstd, ki temelji na različici 1.3.1, ki je bila izdana pred več kot tremi leti in ni vključevala veliko pomembnih optimizacij. Poleg prehoda na trenutno različico dodani popravek tudi poenostavlja sinhronizacijo z zgornjo vejo zstd, kar vam omogoča ustvarjanje kode za vključitev v jedro neposredno iz glavnega repozitorija zstd. V prihodnosti je načrtovana posodobitev kode zstd v jedru, ko bodo izdane nove različice knjižnice zstd.
    • Velik del izboljšav je bil narejen na podsistemu eBPF. Dodana možnost klicanja funkcij modula jedra iz programov BPF. Implementirana je funkcija bpf_trace_vprintk() za razliko od bpf_trace_printk(), ki vam omogoča izpis več kot treh argumentov hkrati. Dodan je bil nov bloom filter strukture shranjevanja podatkov (karta BPF), ki vam omogoča uporabo istoimenske verjetnostne podatkovne strukture za ugotavljanje prisotnosti elementa v nizu. Dodan je bil nov atribut BTF_KIND_TAG, ki se lahko uporablja v programih BPF za povezovanje oznak s parametri funkcije, na primer za poenostavitev odkrivanja napak v uporabniških programih. V libbpf je mogoče ustvariti lastne razdelke .rodata.*/.data.*, implementirana je podpora za dogodke sledenja uprobe in kprobe ter dodan API za kopiranje vseh vrst BTF iz enega objekta v drugega. Podpora za AF_XDP je bila premaknjena iz libbpf v ločeno knjižnico libxdp. Za arhitekturo MIPS je bil implementiran prevajalnik JIT za virtualni stroj BPF.
    • Za arhitekturo ARM64 je bila implementirana podpora za razširitve ARMv8.6 za časovnik, vključno s tistimi, ki omogočajo samosinhronizirano predstavitev sistemskih registrov brez uporabe navodil ISB.
    • Za arhitekturo PA-RISC je implementirana možnost uporabe mehanizma KFENCE za odkrivanje napak pri delu s pomnilnikom in dodana je podpora za detektor pogojev dirke KCSAN.
    • Možno je konfigurirati pravice dostopa do tracefov na ravni posameznih uporabnikov in skupin, na primer, zdaj lahko omogočite dostop do orodij za sledenje samo članom določene skupine.
  • Virtualizacija in varnost
    • Podsistema io_uring in device-mapper izvajata podporo za generiranje revizijskih dogodkov. io_uring omogoča nadzor dostopa prek modulov LSM. Dodana možnost revizije sistemskega klica openat2().
    • Koda jedra je popolnoma brez zveznih izrazov velikih in malih črk v switchu (brez povratka ali prekinitve po vsakem bloku velikih in malih črk). Pri gradnji jedra bo zdaj mogoče uporabiti način "-Wimplicit-fallthrough".
    • Vključene spremembe za poostritev preverjanja meja pri izvajanju funkcije memcpy().
    • Asinhroni V/I vmesnik io_uring izvaja zmožnost uporabe varnostnih politik, ki jih definirata modula SELinux in Smack, za V/I operacije.
    • Podsistem IMA (Integrity Measurement Architecture), ki zunanji storitvi omogoča preverjanje stanja podsistemov jedra, da se zagotovi njihova pristnost, implementira možnost uporabe pravil na podlagi identifikatorja skupine (GID), ki ji datoteka pripada ali kateri uporabnik dostop do datoteke pripada.
    • Privzeto onemogočeni nekateri napredni mehanizmi za zaščito niti seccomp() pred napadi Spectre, ki so veljali za nepotrebne in niso bistveno izboljšali varnosti, vendar so negativno vplivali na zmogljivost. Uporaba zaščite Retpoline je bila prenovljena.
    • Odstranjena je implementacija mehanizma cryptoloop, ki ga je leta 2004 nadomestil dm-crypt in po potrebi podpira enake algoritme.
    • Privzeto je neprivilegiran dostop do podsistema eBPF prepovedan. Sprememba je bila narejena, da bi preprečili uporabo programov BPF za obhod zaščite pred napadi stranskih kanalov. Po potrebi lahko skrbnik uporabnikom brez pravic obnovi možnost uporabe eBPF.
    • Hipervizor ACRN, zasnovan za opravila v realnem času in uporabo v kritičnih sistemih, ima dodano podporo za ustvarjanje/brisanje virtualnih naprav in posredovanje naprav MMIO.
    • Podpora za definicije KPP (Key-agreement Protocol Primitives) je bila dodana kripto motorju, kar poenostavlja logiko razvoja gonilnikov za kriptosisteme.
    • Hipervizor Hyper-V zdaj podpira način izolacije navideznega stroja, ki vključuje šifriranje vsebine pomnilnika.
    • Hipervizor KVM ima dodano podporo za arhitekturo RISC-V. Izvedena je bila možnost selitve virtualnih strojev, ki se izvajajo z razširitvami AMD SEV in SEV-ES znotraj gostiteljskega okolja. Dodan API za selitev v živo sistemov za goste, šifriranih z uporabo AMD SEV (Secure Encrypted Virtualization).
    • Za arhitekturo PowerPC je privzeto omogočen način STRICT_KERNEL_RWX, ki blokira uporabo pomnilniških strani, ki so hkrati na voljo za pisanje in izvajanje.
    • Na 32-bitnih sistemih x86 je bila ukinjena podpora za hotplug pomnilnika, ki ni deloval več kot eno leto.
    • Knjižnica liblockdep je bila odstranjena iz jedra in bo zdaj vzdrževana ločeno od jedra.
  • Omrežni podsistem
    • Za sockete je implementirana nova možnost SO_RESERVE_MEM, s katero lahko rezervirate določeno količino pomnilnika za socket, ki bo vedno ostal na voljo za socket in se ne bo odstranil. Uporaba te možnosti vam omogoča, da dosežete večjo zmogljivost z zmanjšanjem operacij dodeljevanja pomnilnika in ponovne pridobitve v omrežnem skladu, še posebej, ko v sistemu pride do pomanjkanja pomnilnika.
    • Dodana podpora za protokol Automatic Multicast Tunneling (RFC 7450), ki omogoča dostavo multicast prometa iz omrežij, ki podpirajo Multicast, do prejemnikov v omrežjih brez Multicast. Protokol deluje prek enkapsulacije v paketih UDP.
    • Izboljšana enkapsulacija podatkov IOAM (In-situ Operations, Administration, and Maintenance) v tranzitnih paketih.
    • V API ethtool netlink je bila dodana možnost nadzora načinov porabe energije oddajnika.
    • Podsistem netfilter implementira zmožnost razvrščanja paketov na izhodni ravni, tj. na stopnji, ko gonilnik prejme paket iz omrežnega sklada jedra. V nftables se je podpora za ustrezne filtre pojavila v različici 1.0.1. Netfilter je dodal možnost primerjave in spreminjanja notranjih glav in podatkov za UDP in TCP (notranja glava / koristni tovor), ki prihajajo za transportno glavo.
    • Dodana nova parametra sysctl arp_evict_nocarrier in ndisc_evict_nocarrier, ko sta nastavljena, bosta predpomnilnik ARP in tabela ndisc (odkrivanje soseda) izbrisana v primeru okvare povezave (NOCARRIER).
    • Načini nizke zakasnitve, majhne izgube in razširljive prepustnosti (L4S) so bili dodani mehanizmu za upravljanje omrežne čakalne vrste fq_codel (nadzorovana zakasnitev).
  • Оборудование
    • Gonilnik amdgpu zagotavlja začetno podporo za specifikacijo DP 2.0 (DisplayPort 2.0) in tuneliranje DisplayPort prek USB4. Za APU-je Cyan Skillfish (opremljene z GPU Navi 1x) je bila dodana podpora za krmilnike zaslona. Podpora za APU-je Yellow Carp (mobilni procesorji Ryzen 6000 »Rembrandt«) je bila razširjena.
    • Gonilnik i915 stabilizira podporo za čipe Intel Alderlake S in izvaja podporo za tehnologijo Intel PXP (Protected Xe Path), ki vam omogoča organiziranje strojno zaščitene grafične seje v sistemih s čipi Intel Xe.
    • V gonilniku nouveau je bilo opravljeno delo za odpravo napak in izboljšanje sloga kode.
    • Dodana podpora za procesorje Vortex, združljive z x86 (Vortex86MX). Linux je že prej delal na podobnih procesorjih, vendar je bila za onemogočanje zaščite pred napadi Spectre/Meltdown potrebna eksplicitna identifikacija določenih procesorjev, ki niso uporabni za navedene čipe.
    • Dodana začetna podpora za platforme x86 za Surface Pro 8 in Surface Laptop Studio.
    • Dodan gonilnik za podporo zvočnim čipom, ki se uporabljajo v AMD Yellow Carp, Van Gogh APU-jih, prav tako dodana podpora za zvočne sisteme in kodeke Cirrus CS35L41, Maxim MAX98520/MAX98360A, Mediatek MT8195, Nuvoton NAU8821, NVIDIA Tegra210, NXP i.MX8ULP, Qualcomm AudioReach, Realtek ALC5682I-VS, RT5682S, RT9120, Rockchip RV1126 in RK3568.
    • Dodan gonilnik ishtp_eclite za dostop do vgrajenih krmilnikov Intel PSE (Programmable Service Engine), ki uporabljajo ISHTP (Integratd Sensor Hub Transport Protocol), kot so baterija, temperatura in UCSI (USB Type-C Connector System Software) vmesnik za informacije).
    • Dodan gonilnik za igralne krmilnike Nintendo Switch, ki podpirajo Switch Pro in Joy-Cons. Dodana podpora za tablične računalnike Wacom Intuos BT (CTL-4100WL/CTL-6100WL) in Apple 2021 Magic Keyboard. Izboljšana podpora za krmilnike Sony PlayStation DualSense. Dodana podpora za stranske gumbe miške Xiaomi Mi.
    • Dodan gonilnik RT89 s podporo za brezžične čipe Realtek 802.11ax, kot tudi gonilnike za adapterje Asix AX88796C-SPI Ethernet in stikala Realtek RTL8365MB-VC.
    • Za čipe Apple M1 so bili dodani gonilniki za PCI in PASemi i2c.
    • Dodana podpora za ARM SoС, naprave in plošče Raspberry Pi Compute Module 4, 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 in Xiaomi Mi 5), Sony Yoshino (Sony Xperia XZ1 in 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, tablični računalnik ASUS Chromebook CT100, Pine64 Quartz64-A, Netgear GS110EMX, Globalscale MOCHAbin 7040, NXP S32G2, Renes kot R8A779M * , Xilinx Kria, Radxa Zero, JetHub D1/H1, Netronix E70K02.

Vir: opennet.ru

Dodaj komentar