Izdanje jezgre Linuxa 5.16

Nakon dva mjeseca razvoja, Linus Torvalds predstavio je izdanje Linux kernela 5.16. Među najznačajnijim promjenama: poziv sustava futex_waitv za poboljšanje performansi Windows igara u Wineu, praćenje pogrešaka u FS-u putem fanotifyja, koncept folija u sustavu upravljanja memorijom, podrška za upute AMX procesora, mogućnost rezerviranja memorije za mrežne utičnice, podrška za klasifikaciju paketa u fazi netfilter "egress", korištenje podsustava DAMON za proaktivno izbacivanje neiskorištenih memorijskih područja, poboljšanje rukovanja preopterećenjima s velikom količinom operacija pisanja, podrška za višestruke tvrde diskove.

Nova verzija uključuje 15415 popravka od 2105 programera, veličina zakrpe je 45 MB (promjene su utjecale na 12023 datoteka, dodane su 685198 linije koda, 263867 linije su izbrisane). Oko 44% svih promjena uvedenih u 5.16 odnosi se na upravljačke programe uređaja, približno 16% promjena odnosi se na ažuriranje koda specifičnog za hardverske arhitekture, 16% se odnosi na mrežni stog, 4% se odnosi na sustave datoteka, a 4% povezani su s unutarnjim podsustavima jezgre.

Ključne inovacije u kernelu 5.16:

  • Diskovni podsustav, I/O i datotečni sustavi
    • Mehanizmu fanotify dodani su alati za praćenje stanja datotečnog sustava i praćenje pojave grešaka. Informacije o pogreškama prenose se pomoću nove vrste događaja - FAN_FS_ERROR, koji se mogu presresti u nadzornim sustavima koji rade u korisničkom prostoru kako bi se odmah obavijestio administrator ili pokrenuli procesi oporavka. Kada se niz pogrešaka pojavi kaskadno, fanotify osigurava isporuku prve poruke o pogrešci zajedno s općim brojačem problema kako bi se pojednostavila naknadna analiza uzroka pogreške. Podrška za praćenje pogrešaka trenutno je implementirana samo za Ext4 datotečni sustav.
    • Poboljšano rukovanje zagušenjem pisanja, koje se događa kada volumen operacija pisanja premaši propusnost pogona i sustav je prisiljen blokirati zahtjeve procesa za pisanje dok se zahtjevi koji su već poslani ne dovrše. U novoj verziji, mehanizam jezgre koji se koristi za dobivanje informacija o pojavi preopterećenja i blokiranju zadataka potpuno je redizajniran, budući da je u staroj implementaciji bilo problema s spajanjem obrade preopterećenja pisanja s premještanjem memorijskih stranica u swap. odjeljak kada u sustavu nema dovoljno memorije.
    • Btrfs implementira podršku za tehnologiju zoniranja uređaja (Zoned Namespace), koja se koristi u tvrdim diskovima ili NVMe SSD-ovima za podjelu prostora za pohranu u zone, koje čine grupe blokova ili sektora, u koje je dopušteno samo sekvencijsko dodavanje podataka, ažurirajući cijelu grupu blokovi. Osim toga, napravljene su manje optimizacije za bilježenje inode, što je povećalo propusnost u dbench testu za 3% i smanjilo kašnjenje za 11%. Mehanizam za bilježenje imenika je redizajniran, u kojem je broj operacija pretraživanja i blokiranja u stablu smanjen kako bi se povećala učinkovitost. Ubrzano je umetanje elemenata u strukturu btree u batch modu (vrijeme skupnog umetanja elemenata smanjeno je za 4%, a brisanja za 12%). Dodana ograničena podrška za korištenje kompresije pri pisanju djelomičnih stranica, kao i mogućnost defragmentiranja podstranica. Izvršene su pripreme za omogućavanje podrške za drugu verziju protokola za naredbu "pošalji".
    • Datotečni sustav XFS smanjuje potrošnju memorije korištenjem zasebnih predmemorija za često korištene stavke i smanjenjem nekih struktura podataka.
    • U Ext4 datotečnom sustavu zabilježeni su samo ispravci grešaka i točniji izračun parametara lijene inicijalizacije Inode tablice.
    • Optimizacije su implementirane na razini blok uređaja kako bi se značajno povećala učinkovitost povezivanja operacija s CPU jezgrama.
    • Dodana početna podrška za tvrde diskove s višestrukim neovisnim pogonima (multi-aktuator), što omogućuje istodobni pristup nekoliko sektora u različitim područjima magnetske ploče.
    • Dodana je nova ioctl naredba CDROM_TIMED_MEDIA_CHANGE za otkrivanje događaja promjene medija u pogonu optičkog diska.
    • Datotečni sustav EROFS (Enhanced Read-Only File System) dodao je mogućnost rada na više uređaja za pohranu. Različiti uređaji mogu se mapirati u jedan 32-bitni prostor za blok adrese. Također je dodana podrška za kompresiju pomoću LZMA algoritma.
    • Mogućnosti montiranja dodane su datotečnom sustavu F2FS za kontrolu fragmentacije datoteke kada se smjesti u pohranu (na primjer, za otklanjanje pogrešaka optimizacija za rad s fragmentiranom pohranom).
    • CEPH prema zadanim postavkama omogućuje operacije stvaranja i brisanja asinkronog direktorija (za vraćanje na staro ponašanje koristite zastavu '-o wsync' prilikom montiranja). Dodano održavanje metrika koje prate operacije kopiranja vanjskih objekata.
    • Parametar montiranja tcpnodelay dodan je u CIFS, koji postavlja način rada tcp_sock_set_nodelay za mrežnu utičnicu, što onemogućuje čekanje da se red čekanja ispuni u TCP stogu. Dodana podrška za ugniježđene DFS veze (distribuirani datotečni sustav) prilikom ponovnog montiranja.
    • Dodana podrška za dovršavanje zahtjeva za blok uređaj u batch načinu rada. Testiranje promjene pokazalo je povećanje intenziteta operacija nasumičnog čitanja s Optane pogona sa 6.1 na 6.6 milijuna IOPS-a na jednoj CPU jezgri.
  • Memorija i usluge sustava
    • Dodan je novi sistemski poziv futex_waitv, koji vam omogućuje praćenje stanja nekoliko futexa odjednom korištenjem jednog sistemskog poziva. Ova značajka podsjeća na funkcionalnost WaitForMultipleObjects dostupnu u sustavu Windows, čija emulacija putem futex_waitv može biti korisna za poboljšanje performansi Windows igara koje se izvode pod Wineom ili Protonom. Osim toga, istovremeno čekanje na futexe također se može koristiti za optimiziranje performansi izvornih verzija igara za Linux.
    • Implementiran je koncept folija stranica čija će upotreba u nekim podsustavima jezgre ubrzati upravljanje memorijom pod tipičnim radnim opterećenjima. Trenutačno su glavni podsustav upravljanja memorijom u kernelu i implementacija predmemorije stranica već preneseni u folije, a prijenos sustava datoteka planiran je u budućnosti. U budućnosti se također planira jezgri dodati podršku za folije s više stranica.

      Tomovi nalikuju složenim stranicama, ali imaju poboljšanu semantiku i jasniju organizaciju rada. Za upravljanje memorijom sustava, raspoloživi RAM podijeljen je na memorijske stranice, čija veličina varira ovisno o arhitekturi, ali na x86 sustavima mjeri se u kilobajtima (obično 4096 bajtova). Moderni sustavi dolaze s desecima gigabajta RAM-a, što upravljanje memorijom čini složenijim zbog potrebe za obradom ogromnog broja memorijskih stranica. Kako bi se smanjio broj stranica, kernel je prethodno implementirao koncept složenih stranica sa strukturama koje obuhvaćaju više od jedne fizičke stranice memorije. Ali API za manipuliranje spojenim memorijskim stranicama ostavio je nedostatke želja i doveo do dodatnih troškova.

    • U planer zadataka dodan je rukovatelj koji uzima u obzir klasteriranje predmemorije na CPU-u. U nekim procesorima, kao što su Kunpeng 920 (ARM) i Intel Jacobsville (x86), određeni broj CPU jezgri, obično 4, mogu kombinirati L3 ili L2 predmemoriju. Uzimanje u obzir takvih topologija može značajno poboljšati učinkovitost distribucije zadataka po CPU jezgrama u raspoređivaču zadataka, budući da premještanje zadataka unutar istog CPU klastera omogućuje povećanje propusnosti pristupa memoriji i smanjenje sukoba predmemorije.
    • Dodana je podrška za AMX (Advanced Matrix Extensions) upute implementirane u nadolazećim Intel Xeon Scalable poslužiteljskim procesorima kodnog naziva Sapphire Rapids. AMX nudi nove konfigurabilne TMM "TILE" registre i upute za manipuliranje podacima u tim registrima, kao što je TMUL (Tile matrix MULTiply) za matrično množenje.
    • Implementirano je nekoliko novih značajki na temelju DAMON (Data Access MONitor) podsustava dodanog u posljednjem izdanju, koji vam omogućuje praćenje pristupa podacima u RAM-u u odnosu na odabrani proces koji se izvodi u korisničkom prostoru. Na primjer, podsustav omogućuje analizu kojim je memorijskim područjima proces pristupao tijekom cijelog svog rada, a koja su memorijska područja ostala nezauzeta.
      • DAMON_RECLAIM za prepoznavanje i izbacivanje memorijskih područja kojima se nije pristupalo. Mehanizam se može koristiti za proaktivno meko izbacivanje memorijskih stranica kada je slobodna memorija pri kraju.
      • DAMOS (operacijske sheme temeljene na nadzoru pristupa podacima) za primjenu određenih madvise() operacija, kao što je oslobađanje dodatne slobodne memorije, za obradu memorijskih područja za koje je određena učestalost pristupa memoriji fiksna. DAMOS parametri se konfiguriraju preko debugfs.
      • Mogućnost praćenja fizičkog adresnog prostora memorije (prije su se mogle nadzirati samo virtualne adrese).
    • Implementacija algoritma kompresije zstd je ažurirana na verziju 1.4.10, što je značajno poboljšalo performanse raznih podsustava kernela koji koriste kompresiju (primjerice, raspakiranje slike kernela je ubrzano za 35%, performanse raspakiranja komprimiranih podataka u Btrfs i SquashFS porastao je za 15%, a u ZRAM-u za 30%). Kernel je u početku koristio zasebnu implementaciju zstd-a, temeljenu na verziji 1.3.1, koja je objavljena prije više od tri godine i nije uključivala mnoge važne optimizacije. Uz prelazak na trenutnu verziju, dodana zakrpa također pojednostavljuje sinkronizaciju sa uzvodnom granom zstd-a, omogućujući vam generiranje koda za uključivanje u kernel izravno iz glavnog zstd repozitorija. U budućnosti se planira ažurirati zstd kod u jezgri kako budu objavljivane nove verzije zstd biblioteke.
    • Velik dio poboljšanja napravljen je u podsustavu eBPF. Dodana je mogućnost pozivanja funkcija modula jezgre iz BPF programa. Implementirana je funkcija bpf_trace_vprintk(), za razliku od bpf_trace_printk(), koja vam omogućuje ispis više od tri argumenta odjednom. Dodan je novi filtar cvjetanja strukture za pohranu podataka (BPF mapa), koji vam omogućuje korištenje istoimene strukture vjerojatnosnih podataka za određivanje prisutnosti elementa u skupu. Dodan je novi atribut BTF_KIND_TAG koji se može koristiti u BPF programima za povezivanje oznaka s parametrima funkcije, na primjer, radi pojednostavljenja otkrivanja pogrešaka u korisničkim programima. U libbpf-u je moguće kreirati vlastite .rodata.*/.data.* sekcije, implementirana je podrška za događaje praćenja uprobe i kprobe i dodan je API za kopiranje svih tipova BTF-a s jednog objekta na drugi. AF_XDP podrška je premještena iz libbpf u zasebnu libxdp biblioteku. Za MIPS arhitekturu implementiran je JIT kompajler za BPF virtualni stroj.
    • Za arhitekturu ARM64 implementirana je podrška za ARMv8.6 ekstenzije za mjerač vremena, uključujući one koje omogućuju samosinkronizirajuće predstavljanje registara sustava bez korištenja ISB instrukcija.
    • Za PA-RISC arhitekturu implementirana je mogućnost korištenja KFENCE mehanizma za otkrivanje grešaka pri radu s memorijom, a dodana je i podrška za KCSAN detektor uvjeta utrke.
    • Moguće je konfigurirati prava pristupa tracefovima na razini pojedinačnih korisnika i grupa, na primjer, sada možete dopustiti pristup alatima za praćenje samo članovima određene grupe.
  • Virtualizacija i sigurnost
    • Podsustavi io_uring i device-mapper implementiraju podršku za generiranje revizijskih događaja. io_uring pruža mogućnost kontrole pristupa putem LSM modula. Dodana mogućnost revizije openat2() sistemskog poziva.
    • Kod kernela potpuno je oslobođen kontinuiranih izraza velikih i malih slova u switchu (nema povratka ili prekida nakon svakog bloka velikih i malih slova). Prilikom izgradnje kernela, sada će biti moguće koristiti način rada "-Wimplicit-fallthrough".
    • Uključene promjene za pooštravanje provjera granica prilikom izvršavanja funkcije memcpy().
    • Io_uring asinkrono I/O sučelje implementira mogućnost primjene sigurnosnih pravila definiranih SELinux i Smack modulima na I/O operacije.
    • Podsustav IMA (Integrity Measurement Architecture), koji omogućuje vanjskom servisu provjeru stanja podsustava jezgre kako bi se osigurala njihova autentičnost, implementira mogućnost primjene pravila na temelju identifikatora grupe (GID) kojoj datoteka pripada ili kojoj korisnik pristup datoteci pripada.
    • Prema zadanim postavkama onemogućeni su neki napredni mehanizmi za zaštitu niti seccomp() od Spectre napada, koji su smatrani nepotrebnim i nisu značajno poboljšali sigurnost, ali su negativno utjecali na performanse. Korištenje Retpoline zaštite je revidirano.
    • Uklonjena je implementacija mehanizma cryptoloop, koji je 2004. godine zamijenjen dm-cryptom i po potrebi podržava iste algoritme.
    • Prema zadanim postavkama, neprivilegirani pristup eBPF podsustavu je zabranjen. Promjena je napravljena kako bi se spriječilo korištenje BPF programa za zaobilaženje zaštite od napada sa strane kanala. Ako je potrebno, administrator može vratiti mogućnost neprivilegiranim korisnicima da koriste eBPF.
    • ACRN hipervizor, dizajniran za zadatke u stvarnom vremenu i korištenje u kritičnim sustavima, dodao je podršku za kreiranje/brisanje virtualnih uređaja i prosljeđivanje MMIO uređaja.
    • Podrška za KPP (Key-agreement Protocol Primitives) definicije dodana je u kripto mehanizam, pojednostavljujući logiku razvoja upravljačkih programa za kriptosustave.
    • Hyper-V hipervizor sada podržava način izolacije virtualnog stroja, koji uključuje šifriranje sadržaja memorije.
    • KVM hipervizor je dodao podršku za RISC-V arhitekturu. Implementirana je mogućnost migracije virtualnih strojeva koji rade pomoću proširenja AMD SEV i SEV-ES unutar okruženja domaćina. Dodan API za živu migraciju gostujućih sustava šifriranih pomoću AMD SEV (Secure Encrypted Virtualization).
    • Za PowerPC arhitekturu, STRICT_KERNEL_RWX način rada omogućen je prema zadanim postavkama, što blokira korištenje memorijskih stranica koje su istovremeno dostupne za pisanje i izvođenje.
    • Na 32-bitnim x86 sustavima ukinuta je podrška za hotplug memorije, koji nije radio više od godinu dana.
    • Biblioteka liblockdep je uklonjena iz kernela i sada će se održavati odvojeno od kernela.
  • Mrežni podsustav
    • Za sockete je implementirana nova opcija SO_RESERVE_MEM s kojom možete rezervirati određenu količinu memorije za socket, koja će uvijek ostati dostupna za socket i neće se uklanjati. Korištenje ove opcije omogućuje vam da postignete povećane performanse smanjenjem dodjele memorije i operacija povrata u mrežnom stogu, posebno kada se u sustavu pojave uvjeti niske memorije.
    • Dodana podrška za protokol Automatic Multicast Tunneling (RFC 7450), koji omogućuje isporuku multicast prometa s mreža koje podržavaju Multicast do primatelja na mrežama bez Multicasta. Protokol radi kroz enkapsulaciju u UDP paketima.
    • Poboljšana enkapsulacija podataka IOAM (In-situ Operations, Administration, and Maintenance) u tranzitnim paketima.
    • Mogućnost kontrole načina potrošnje energije primopredajnika dodana je ethtool netlink API-ju.
    • Podsustav netfilter implementira mogućnost klasificiranja paketa na izlaznoj razini, tj. u fazi kada upravljački program prima paket od mrežnog stoga jezgre. U nftables, podrška za odgovarajuće filtere pojavila se u verziji 1.0.1. Netfilter je dodao mogućnost usporedbe i promjene internih zaglavlja i podataka za UDP i TCP (unutarnje zaglavlje / korisni teret) koji dolaze nakon zaglavlja prijenosa.
    • Dodani su novi sysctl parametri arp_evict_nocarrier i ndisc_evict_nocarrier, kada su postavljeni, ARP predmemorija i tablica ndisc (otkrivanje susjeda) bit će izbrisani u slučaju kvara veze (NOCARRIER).
    • Načini Low Latency, Low Loss i Scalable Throughput (L4S) dodani su fq_codel (Controlled Delay) mrežnom mehanizmu upravljanja redovima čekanja.
  • Оборудование
    • Upravljački program amdgpu pruža početnu podršku za specifikaciju DP 2.0 (DisplayPort 2.0) i DisplayPort tuneliranje preko USB4. Za Cyan Skillfish APU-ove (opremljene GPU Navi 1x) dodana je podrška za kontrolere zaslona. Proširena je podrška za APU-ove Yellow Carp (mobilni procesori Ryzen 6000 “Rembrandt”).
    • Upravljački program i915 stabilizira podršku za Intel Alderlake S čipove i implementira podršku za Intel PXP (Protected Xe Path) tehnologiju, koja vam omogućuje organiziranje hardverski zaštićene grafičke sesije na sustavima s Intel Xe čipovima.
    • Radilo se na nouveau driveru kako bi se popravile pogreške i poboljšao stil koda.
    • Dodana podrška za x86-kompatibilne Vortex CPU (Vortex86MX). Linux je i prije radio na sličnim procesorima, ali bila je potrebna eksplicitna identifikacija navedenih CPU-a kako bi se onemogućila zaštita od napada Spectre/Meltdown, koji nisu primjenjivi na navedene čipove.
    • Dodana početna podrška za x86 platforme za Surface Pro 8 i Surface Laptop Studio.
    • Dodan upravljački program za podršku zvučnih čipova koji se koriste u AMD Yellow Carp, Van Gogh APU-ima, također dodana podrška za zvučne sustave i kodeke Cirrus CS35L41, Maxim MAX98520/MAX98360A, Mediatek MT8195, Nuvoton NAU8821, NVIDIA Tegra210, NXP i.MX8ULP, Qualcomm AudioReach, Realtek ALC5682I-VS, RT5682S, RT9120, Rockchip RV1126 i RK3568.
    • Dodan ishtp_eclite upravljački program za pristup Intel PSE (Programmable Service Engine) ugrađenim kontrolerima koji koriste ISHTP (Integratd Sensor Hub Transport Protocol), kao što su baterija, temperatura i UCSI (USB Type-C Connector System Software) povezano informacijsko sučelje).
    • Dodan je upravljački program za kontrolere igara Nintendo Switch koji podržavaju Switch Pro i Joy-Cons. Dodana podrška za Wacom Intuos BT tablete (CTL-4100WL/CTL-6100WL) i Apple 2021 Magic Keyboard. Poboljšana podrška za Sony PlayStation DualSense kontrolere. Dodana podrška za bočne gumbe miša Xiaomi Mi.
    • Dodan je RT89 upravljački program s podrškom za Realtek 802.11ax bežične čipove, kao i upravljački programi za Asix AX88796C-SPI Ethernet adaptere i Realtek RTL8365MB-VC preklopnike.
    • Upravljački programi za PCI i PASemi i1c dodani su za Apple M2 čipove.
    • Dodana podrška za ARM SoS, uređaje i 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 i Xiaomi Mi 5), Sony Yoshino (Sony Xperia XZ1 i 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, ASUS Chromebook Tablet CT100, Pine64 Quartz64-A, Netgear GS110EMX, Globalscale MOCHAbin 7040, NXP S32G2, Renes kao R8A779M * , Xilinx Kria, Radxa Zero, JetHub D1/H1, Netronix E70K02.

Izvor: opennet.ru

Dodajte komentar