Izdanje kernela Linux 5.16

Nakon dva mjeseca razvoja, Linus Torvalds je predstavio izdanje Linux kernela 5.16. Među najznačajnijim promjenama: futex_waitv sistemski poziv za poboljšanje performansi Windows igara u Wine-u, praćenje grešaka u FS-u putem fanotify-a, koncept folija u sistemu upravljanja memorijom, podrška za AMX instrukcije procesora, mogućnost rezervisanja memorije za mrežne utičnice, podrška za klasifikaciju paketa u fazi netfilter “egress”, korištenje DAMON podsistema za proaktivno izbacivanje neiskorištenih memorijskih područja, poboljšanje rukovanja preopterećenjima sa velikim obimom operacija pisanja, podrška za više diskova tvrdih diskova.

Nova verzija uključuje 15415 popravka od 2105 programera, veličina zakrpe je 45 MB (promjene su uticale na 12023 datoteka, dodano je 685198 reda koda, 263867 linije je obrisano). Oko 44% svih promjena uvedenih u 5.16 odnosi se na drajvere uređaja, otprilike 16% promjena se odnosi na ažuriranje koda specifičnog za hardverske arhitekture, 16% se odnosi na mrežni stog, 4% se odnosi na sistem datoteka i 4% odnose se na interne podsisteme kernela.

Ključne inovacije u kernelu 5.16:

  • Diskovni podsistem, I/O i sistemi datoteka
    • U mehanizam fanotify su dodani alati za praćenje stanja sistema datoteka i praćenje pojave grešaka. Informacije o greškama se prenose pomoću novog tipa događaja - FAN_FS_ERROR, koji se može presresti u sistemima za praćenje koji rade u korisničkom prostoru kako bi se pravovremeno obavijestio administrator ili pokrenuli procesi oporavka. Kada se niz grešaka pojavi kaskadno, fanotify osigurava da se prva poruka o grešci isporuči zajedno sa općim brojačem problema kako bi se pojednostavila kasnija analiza uzroka kvara. Podrška za praćenje grešaka trenutno je implementirana samo za sistem datoteka Ext4.
    • Poboljšano rukovanje zagušenošću pisanja, koja se javlja kada obim operacija pisanja premašuje propusnost pogona i sistem je primoran da blokira zahtjeve procesa za pisanje dok se zahtjevi koji su već predati ne dovrše. U novoj verziji, mehanizam kernela koji se koristi za dobijanje informacija o pojavi preopterećenja i blokiranju zadataka je potpuno redizajniran, budući da je u staroj implementaciji bilo problema sa povezivanjem obrade preopterećenja pisanja sa premještanjem memorijskih stranica u swap odjeljak kada nema dovoljno memorije u sistemu.
    • Btrfs implementira podršku za tehnologiju zoniranja uređaja (Zoned Namespace), koja se koristi na tvrdim diskovima ili NVMe SSD-ovima za podjelu prostora za pohranu u zone, koje čine grupe blokova ili sektora, u koje je dozvoljeno samo sekvencijalno dodavanje podataka, ažuriranje cijele grupe blokovi. Pored toga, napravljene su manje optimizacije za evidentiranje inode, što je povećalo propusnost u dbench testu za 3% i smanjilo kašnjenje za 11%. Redizajniran je mehanizam evidentiranja direktorija, u kojem je smanjen broj operacija pretraživanja i blokiranja u stablu kako bi se povećala efikasnost. Ubrzano je umetanje elemenata u btree strukturu u batch modu (vrijeme masovnog umetanja elemenata smanjeno je za 4%, a brisanje za 12%). Dodata ograničena podrška za korištenje kompresije pri pisanju djelomičnih stranica, kao i mogućnost defragmentiranja podstranica. Izvršene su pripreme da se omogući podrška za drugu verziju protokola za naredbu “send”.
    • XFS sistem datoteka smanjuje potrošnju memorije korištenjem odvojenih predmemorija ploča za često korištene stavke i smanjenjem nekih struktura podataka.
    • U sistemu datoteka Ext4, samo su ispravke grešaka i preciznije izračunavanje parametara lijene inicijalizacije Inode tablice zabilježene.
    • Optimizacije su implementirane na nivou blok uređaja kako bi se značajno povećala efikasnost povezivanja operacija sa CPU jezgrama.
    • Dodata inicijalna podrška za čvrste diskove sa više nezavisnih diskova (multi-aktuator), što omogućava istovremeni pristup nekoliko sektora u različitim oblastima magnetne ploče.
    • Dodana je nova ioctl naredba CDROM_TIMED_MEDIA_CHANGE za otkrivanje događaja promjene medija u optičkoj disk jedinici.
    • Sistem datoteka EROFS (Enhanced Read-Only File System) dodao je mogućnost rada na više uređaja za skladištenje podataka. Različiti uređaji se mogu mapirati u jedan 32-bitni blok adresa. Dodata je i podrška za kompresiju pomoću LZMA algoritma.
    • Opcije montiranja su dodate sistemu datoteka F2FS za kontrolu fragmentacije datoteke kada se stavi u skladište (na primjer, za otklanjanje grešaka u optimizaciji za rad s fragmentiranom memorijom).
    • CEPH podrazumevano omogućava asinkrono kreiranje i brisanje direktorijuma (koristite '-o wsync' zastavicu prilikom montiranja da biste se vratili na staro ponašanje). Dodato održavanje metrike koja prati operacije kopiranja eksternih objekata.
    • tcpnodelay parametar montiranja je dodat u CIFS, koji postavlja tcp_sock_set_nodelay način rada za mrežnu utičnicu, što onemogućuje čekanje da se red popuni u TCP stogu. Dodata podrška za ugniježđene DFS veze (distribuirani sistem datoteka) prilikom ponovnog montiranja.
    • Dodata podrška za dovršavanje zahtjeva za blok uređaj u batch modu. Testiranje promjene pokazalo je povećanje intenziteta nasumičnih operacija čitanja sa Optane diskova sa 6.1 na 6.6 miliona IOPS na jednom CPU jezgru.
  • Memorijski i sistemski servisi
    • Dodan je novi sistemski poziv futex_waitv, koji vam omogućava da nadgledate stanje nekoliko futeksa odjednom koristeći jedan sistemski poziv. Ova funkcija podsjeća na WaitForMultipleObjects funkcionalnost dostupnu u Windows-u, čija emulacija putem futex_waitv može biti korisna za poboljšanje performansi Windows igara koje rade pod Wine ili Proton. Osim toga, istovremeno čekanje na futexe također se može koristiti za optimizaciju performansi izvornih verzija igara za Linux.
    • Implementiran je koncept folija stranica, čija će upotreba u nekim podsistemima kernela ubrzati upravljanje memorijom pod tipičnim radnim opterećenjima. Trenutno, glavni podsistem za upravljanje memorijom u kernelu i implementacija keša stranica su već prebačeni u folije, a planira se prenos sistema datoteka u budućnosti. U budućnosti je takođe planirano da se kernelu doda podrška za višestrane folije.

      Tomovi liče na složene stranice, ali imaju poboljšanu semantiku i jasniju organizaciju rada. Za upravljanje sistemskom memorijom, dostupna RAM memorija je podijeljena na memorijske stranice, čija veličina varira ovisno o arhitekturi, ali se na x86 sistemima mjeri u kilobajtima (obično 4096 bajtova). Moderni sistemi dolaze sa desetinama gigabajta RAM-a, što upravljanje memorijom čini složenijim zbog potrebe za obradom velikog broja memorijskih stranica. Da bi se smanjio broj stranica, kernel je prethodno implementirao koncept složenih stranica sa strukturama koje obuhvataju više od jedne fizičke stranice memorije. Ali API za manipulaciju spojenim memorijskim stranicama ostavio je mnogo željenog i doveo do dodatnih troškova.

    • Rukovalac je dodat planeru zadataka koji uzima u obzir klasterisanje keša na CPU-u. U nekim procesorima, kao što su Kunpeng 920 (ARM) i Intel Jacobsville (x86), određeni broj CPU jezgara, obično 4, može kombinovati L3 ili L2 keš memoriju. Uzimanje u obzir takvih topologija može značajno poboljšati efikasnost distribucije zadataka kroz CPU jezgre u rasporedu zadataka, budući da premještanje zadataka unutar istog CPU klastera omogućava povećanje propusnosti pristupa memoriji i smanjenje sukoba keša.
    • Dodata podrška za AMX (Advanced Matrix Extensions) instrukcije implementirane u nadolazeće Intel Xeon Scalable server procesore, kodnog naziva Sapphire Rapids. AMX nudi nove konfigurabilne TMM "TILE" registre i uputstva za manipulisanje podacima u ovim registrima, kao što je TMUL (Tile matrix MULTtiply) za množenje matrica.
    • Nekoliko novih karakteristika je implementirano na osnovu DAMON (Data Access MONitor) podsistema dodanog u prošlom izdanju, koji vam omogućava da nadgledate pristup podacima u RAM-u u odnosu na odabrani proces koji se izvodi u korisničkom prostoru. Na primjer, podsistem omogućava analizu kojim memorijskim područjima je proces pristupio tokom cijelog svog rada, a koja memorijska područja su ostala nepotražena.
      • DAMON_RECLAIM za identifikaciju i izbacivanje memorijskih područja kojima se nije pristupilo. Mehanizam se može koristiti za proaktivno uklanjanje memorijskih stranica kada se slobodna memorija bliži iscrpljenju.
      • DAMOS (Operacijske sheme zasnovane na nadzoru pristupa podacima) za primjenu specificiranih madvise() operacija, kao što je oslobađanje dodatne slobodne memorije, za obradu memorijskih područja za koje je određena frekvencija pristupa memoriji fiksna. DAMOS parametri se konfigurišu preko debugfs-a.
      • Mogućnost praćenja fizičkog adresnog prostora memorije (ranije su se mogle pratiti samo virtuelne adrese).
    • Implementacija zstd algoritma kompresije je ažurirana na verziju 1.4.10, što je značajno poboljšalo performanse različitih podsistema kernela koji koriste kompresiju (na primjer, raspakivanje slike kernela je ubrzano za 35%, performanse raspakivanja komprimiranih podataka u Btrfs-u i SquashFS-u je povećan za 15%, au ZRAM-u - za 30%. Kernel je u početku koristio zasebnu implementaciju zstd-a, zasnovanu na verziji 1.3.1, koja je objavljena prije više od tri godine i nije uključivala mnogo važnih optimizacija. Pored prelaska na trenutnu verziju, dodata zakrpa takođe pojednostavljuje sinhronizaciju sa zstd uzvodnom granom, omogućavajući vam da generišete kod za uključivanje u kernel direktno iz glavnog zstd spremišta. U budućnosti se planira ažuriranje zstd koda u kernelu kako nove verzije zstd biblioteke budu objavljene.
    • Veliki dio poboljšanja je napravljen na eBPF podsistemu. Dodata mogućnost pozivanja funkcija modula kernela iz BPF programa. Funkcija bpf_trace_vprintk() je implementirana, za razliku od bpf_trace_printk(), koja vam omogućava da ispišete više od tri argumenta odjednom. Dodan je novi filter bloom strukture za pohranu podataka (BPF mapa), koji vam omogućava da koristite vjerovatnostnu strukturu podataka istog imena 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 sa parametrima funkcije, na primjer, da bi se pojednostavilo otkrivanje greš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, a dodat je API za kopiranje svih BTF tipova iz jednog objekta u drugi. AF_XDP podrška je premještena iz libbpf u zasebnu libxdp biblioteku. Za MIPS arhitekturu implementiran je JIT kompajler za BPF virtuelnu mašinu.
    • Za arhitekturu ARM64 implementirana je podrška za ARMv8.6 ekstenzije za tajmer, uključujući one koje dozvoljavaju samosinhronizirajuće predstavljanje sistemskih registara bez korištenja ISB instrukcija.
    • Za PA-RISC arhitekturu je implementirana mogućnost korišćenja mehanizma KFENCE za otkrivanje grešaka pri radu sa memorijom, a dodata je i podrška za detektor stanja rase KCSAN.
    • Moguće je konfigurirati prava pristupa tracefovima na razini pojedinačnih korisnika i grupa; na primjer, sada možete dozvoliti pristup alatima za praćenje samo članovima određene grupe.
  • Virtuelizacija i sigurnost
    • Podsistemi io_uring i uređaj-mapper implementiraju podršku za generiranje događaja revizije. io_uring pruža mogućnost kontrole pristupa preko LSM modula. Dodata mogućnost revizije sistemskog poziva openat2().
    • Kôd kernela je potpuno bez kontinuiranih izraza case u switch (bez povratka ili prekida nakon svakog bloka slučaja). Prilikom izgradnje kernela, sada će biti moguće koristiti “-Wimplicit-fallthrough” mod.
    • Uključene promjene za pooštravanje provjera granica prilikom izvršavanja funkcije memcpy().
    • Asinhroni I/O interfejs io_uring implementira mogućnost primjene sigurnosnih politika definiranih od strane SELinux i Smack modula na I/O operacije.
    • IMA (Integrity Measurement Architecture) podsistem, koji omogućava vanjskom servisu da provjeri stanje podsistema kernela kako bi se osigurala njihova autentičnost, implementira mogućnost primjene pravila na osnovu identifikatora grupe (GID) kojoj datoteka pripada ili kojoj korisnik pristup fajlu pripada.
    • Po defaultu su onemogućeni neki napredni mehanizmi za zaštitu seccomp() niti od Spectre napada, koji su smatrani nepotrebnim i nisu značajno poboljšali sigurnost, ali su negativno uticali na performanse. Korištenje Retpoline zaštite je revidirano.
    • Uklonjena je implementacija cryptoloop mehanizma, koji je 2004. godine zamijenjen dm-cryptom i po potrebi podržava iste algoritme.
    • Po defaultu, neprivilegirani pristup eBPF podsistemu 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 neprivilegovanim korisnicima da koriste eBPF.
    • ACRN hipervizor, dizajniran za zadatke u realnom vremenu i upotrebu u kritičnim sistemima, ima dodatnu podršku za kreiranje/brisanje virtuelnih uređaja i prosleđivanje MMIO uređaja.
    • Podrška za KPP (Key-agreement Protocol Primitives) definicije je dodata kripto mašini, pojednostavljujući logiku razvoja drajvera za kriptosisteme.
    • Hyper-V hipervizor sada podržava način izolacije virtuelne mašine, koji uključuje enkripciju memorijskog sadržaja.
    • KVM hipervizor je dodao podršku za RISC-V arhitekturu. Implementirana je mogućnost migracije virtuelnih mašina koje koriste AMD SEV i SEV-ES ekstenzije unutar domaćinskog okruženja. Dodan API za živu migraciju gostujućih sistema šifriranih pomoću AMD SEV (Secure Encrypted Virtualization).
    • Za arhitekturu PowerPC, režim STRICT_KERNEL_RWX je podrazumevano omogućen, što blokira upotrebu memorijskih stranica koje su istovremeno dostupne za pisanje i izvršavanje.
    • Na 32-bitnim x86 sistemima, podrška za memorijski hotplug je ukinuta, koja nije bila u funkciji više od godinu dana.
    • Liblockdep biblioteka je uklonjena iz kernela i sada će se održavati odvojeno od kernela.
  • Mrežni podsistem
    • Za sokete je implementirana nova opcija SO_RESERVE_MEM, sa kojom možete rezervisati određenu količinu memorije za socket, koja će uvijek ostati dostupna za socket i neće biti uklonjena. Korištenje ove opcije vam omogućava da postignete povećane performanse smanjenjem dodjeljivanja memorije i operacija vraćanja u mrežni stog, posebno kada se u sistemu javljaju uvjeti niske memorije.
    • Dodata podrška za protokol Automatic Multicast Tunneling (RFC 7450), koji omogućava isporuku multicast saobraćaja sa mreža koje podržavaju Multicast do primaoca na mrežama bez Multicast. Protokol radi kroz enkapsulaciju u UDP pakete.
    • Poboljšana enkapsulacija IOAM (In-situ operacije, administracija i održavanje) podataka u tranzitnim paketima.
    • Mogućnost kontrole režima potrošnje energije primopredajnika dodata je ethtool netlink API-ju.
    • Podsistem netfilter implementira mogućnost klasifikacije paketa na izlaznom nivou, tj. u fazi kada drajver prima paket iz mrežnog stoga kernela. U nftables, podrška za odgovarajuće filtere pojavila se u verziji 1.0.1. Netfilter je dodao mogućnost upoređivanja i promjene internih zaglavlja i podataka za UDP i TCP (unutrašnje zaglavlje / korisni teret) koji dolaze nakon transportnog zaglavlja.
    • Dodati novi sysctl parametri arp_evict_nocarrier i ndisc_evict_nocarrier, kada su postavljeni, ARP keš i tabela ndisc (otkrivanje susjeda) će biti obrisani u slučaju neuspjeha veze (NOCARRIER).
    • Načini niske latencije, malih gubitaka i skalabilnog protoka (L4S) dodani su fq_codel (kontroliranom kašnjenju) mehanizmu upravljanja mrežnim redovima.
  • Oprema
    • Amdgpu drajver pruža početnu podršku za DP 2.0 specifikaciju (DisplayPort 2.0) i DisplayPort tuneliranje preko USB4. Za Cyan Skillfish APU (opremljene GPU Navi 1x) dodata je podrška za kontrolere ekrana. Podrška za Yellow Carp APU (Ryzen 6000 “Rembrandt” mobilni procesori) je proširena.
    • i915 drajver stabilizuje podršku za Intel Alderlake S čipove i implementira podršku za Intel PXP (Protected Xe Path) tehnologiju, koja vam omogućava da organizujete hardverski zaštićenu grafičku sesiju na sistemima sa Intel Xe čipovima.
    • Posao je obavljen u nouveau drajveru da se isprave greške i poboljša stil koda.
    • Dodata podrška za x86-kompatibilne Vortex procesore (Vortex86MX). Linux je ranije radio na sličnim procesorima, ali je bila potrebna eksplicitna identifikacija specificiranih CPU-a da bi se onemogućila zaštita od Spectre/Meltdown napada, koji nisu primjenjivi na navedene čipove.
    • Dodata početna podrška za x86 platforme za Surface Pro 8 i Surface Laptop Studio.
    • Dodan drajver za podršku zvučnim čipovima koji se koriste u AMD Yellow Carp, Van Gogh APU-ovima, takođe je dodata podrška za zvučne sisteme i kodeke Cirrus CS35L41, Maxim MAX98520/MAX98360A, Mediatek MT8195, Nuvoton NAU8821, NVIDIA Tegra210, NXP Realekl8m Audio, i. ALC5682I-VS, RT5682S, RT9120, Rockchip RV1126 i RK3568.
    • Dodan drajver ishtp_eclite za pristup ugrađenim kontrolerima Intel PSE (Programmable Service Engine) koji koriste ISHTP (Integratd Sensor Hub Transport Protocol), kao što su baterija, temperatura i UCSI (USB Type-C Connector System Software) povezani interfejs sa informacijama).
    • Dodan drajver za Nintendo Switch kontrolere za igre koji podržavaju Switch Pro i Joy-Cons. Dodata 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. Dodata podrška za Xiaomi Mi bočne tipke miša.
    • Dodan RT89 drajver sa podrškom za Realtek 802.11ax bežične čipove, kao i drajveri za Asix AX88796C-SPI Ethernet adaptere i Realtek RTL8365MB-VC prekidače.
    • Dodani su drajveri za PCI i PASEmi i1c za Apple M2 čipove.
    • Dodata 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, 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, MOCH110EMXBIN7040P Global, Netgear32G2 , Ren esas R8A779M*, Xilinx Kria, Radxa Zero, JetHub D1/H1, Netronix E70K02.

izvor: opennet.ru

Dodajte komentar