Nakon dva mjeseca razvoja, Linus Torvalds je predstavio izdanje jezgre Linux 5.16. Među najznačajnijim promjenama su: sistemski poziv futex_waitv za poboljšanje performansi Windows igara u Wineu, praćenje grešaka u datotečnom sustavu putem fanotify, koncept fasikula u sustavu upravljanja memorijom, podrška za procesorske instrukcije AMX, mogućnost rezervacije memorije za mrežne sokete, podrška u netfilteru za klasifikaciju paketa u fazi „egress“, angažiranje podsustava DAMON za proaktivno izbacivanje neiskorištenih područja memorije, poboljšano upravljanje preopterećenjima pri velikom obujmu operacija zapisivanja, te podrška za višediskovne tvrde diskove.
U novu verziju je uključeno 15415 ispravki od 2105 programera, veličina zakrpe je 45 MB (promjene su se odrazile na 12023 datoteka, dodano je 685198 linija koda, uklonjeno 263867 linija). Oko 44% svih promjena predstavljenih u 5.16 vezano je za upravljačke programe uređaja, otprilike 16% promjena se odnosi na ažuriranje koda specifičnog za hardverske arhitekture, 16% se odnosi na mrežni stog, 4% na datotečne sustave, a 4% na unutarnje podsustave jezgre.
Glavne novosti u jezgri 5.16:
- Sistem diska, ulaz/izlaz i datotečni sustavi
- U mehanizam fanotify dodana su sredstva za praćenje stanja datotečnog sustava i detekciju grešaka. Informacije o greškama šalju se pomoću novog tipa događaja — FAN_FS_ERROR, koji se može presresti u aktivnim sustavima praćenja korisničkog prostora za pravovremeno obavještavanje administratora ili pokretanje procesa oporavka. U slučaju kaskadnog nastanka serije grešaka, fanotify osigurava dostavu poruke o prvoj grešci zajedno s ukupnim brojačem problema, radi pojednostavljenja kasnijeg razmatranja uzroka kvara. Podrška za praćenje grešaka zasad je implementirana samo za datotečni sustav Ext4.
- Poboljšana obrada preopterećenja tijekom izvršenja operacija pisanja (write congestion), koja se javlja kada obim operacija pisanja premašuje propusnost uređaja za pohranu i sustav je prisiljen blokirati zahtjeve procesa za pisanje do završetka izvršenja već poslanih zahtjeva. U novoj verziji potpuno je redizajniran mehanizam jezgre koji se koristi za dobivanje informacija o nastanku preopterećenja i blokiranja zadataka, jer su u staroj implementaciji zabilježeni problemi s usklađivanjem obrade preopterećenja pisanja s izbacivanjem stranica memorije u swap prostor pri nedostatku memorije u sustavu.
- U Btrfs implementirana je podrška za tehnologiju zoniranja uređaja (Zoned Namespace), koja se koristi u tvrdim diskovima ili NVMe SSD-ima za dijeljenje prostora za pohranu na zone, koje čine grupe blokova ili sektora, u koje je dopušteno samo sekvencijalno dodavanje podataka uz ažuriranje cijele grupe blokova. Osim toga, izvršene su male optimizacije logiranja inode, što je omogućilo povećanje propusnosti u dbench testu za 3% i smanjenje latencije za 11%. Redizajniran je mehanizam logiranja direktorija, u kojem je smanjen broj operacija pretraživanja i blokiranja u stablu radi povećanja učinkovitosti. Ubrzana je umetanja elemenata u strukturu btree u paketnom modu (vrijeme masovnog umetanja elemenata smanjeno je za 4%, a brisanja za 12%). Dodana je ograničena podrška za korištenje kompresije prilikom pisanja nepunih stranica, kao i mogućnost defragmentacije podstranica (subpage). Pripremljen je put za uključivanje podrške druge verzije protokola za naredbu «send».
- U datotečnom sustavu XFS smanjena je potrošnja memorije korištenjem zasebnih slab cache-ova za često korištene elemente i smanjenjem određenih struktura podataka.
- U datotečnom sustavu Ext4 zabilježene su samo ispravke grešaka i točnije izračunavanje parametara odgođenog inicijaliziranja Inode tablice.
- Na razini blokovnih uređaja implementirane su optimizacije koje značajno povećavaju učinkovitost vezivanja operacija uz CPU jezgri.
- Dodana je početna podrška za tvrde diskove s višestrukim neovisnim uređajima (multi-actuator), što omogućuje istovremeni pristup više sektora u različitim zonama magnetske ploče.
- Dodana je nova ioctl komanda CDROM_TIMED_MEDIA_CHANGE za prepoznavanje događaja promjene medija u optičkom pogonu.
- Sustavu datoteka EROFS (Enhanced Read-Only File System) dodana je mogućnost rada preko više uređaja za pohranu. Različiti uređaji mogu biti prikazani unutar jednog 32-bitnog adresnog prostora blokova. Također je dodana podrška za kompresiju pomoću LZMA algoritma.
- U F2FS datotečnom sustavu dodane su opcije montaže za upravljanje fragmentacijom datoteka prilikom pohrane (npr. za otklanjanje pogrešaka u optimizaciji rada s fragmentiranim pohranjivanjem).
- U CEPH su prema zadanim postavkama uključene operacije stvaranja i brisanja direktorija u asinkronom režimu (za vraćanje starog ponašanja prilikom montaže koristite opciju ‘-o wsync’). Dodano je prikupljanje metrika koje prate operacije kopiranja vanjskih objekata.
- U CIFS je dodana opcija montaže tcpnodelay, koja za mrežni soket postavlja način tcp_sock_set_nodelay, onemogućavajući čekanje na popunjavanje reda u TCP steku. Također je dodana podrška za ugniježdene DFS Link (Distributed File System) prilikom ponovno montaže.
- Dodana je podrška za završavanje zahtjeva na blok uređaju u paketnom režimu. Testiranje promjene pokazalo je povećanje intenziteta izvođenja operacija nasumičnog čitanja s Optane uređaja s 6.1 na 6.6 milijuna IOPS na jednom CPU jezgru.
- Memorija i sistemske usluge
- Dodana je nova sistemska funkcija futex_waitv koja omogućuje praćenje stanja više futexa jednim sistemskim pozivom. Ova mogućnost podsjeća na funkcionalnost WaitForMultipleObjects dostupnu u Windowsu, a emulacija iste putem futex_waitv može biti korisna za poboljšanje performansi Windows igara pokretnih pod Wine ili Proton. Dodatno, istovremeno čekanje na futexe može se koristiti i za optimizaciju performansi domaćih verzija igara za Linux.
- Implementirana je koncepcija memorijskih stranica (page folios), čija će upotreba u nekim podsistemima jezgre omogućiti brže upravljanje memorijom pod standardnim opterećenjima. Trenutno je glavna podsistem za upravljanje memorijom u jezgri već prevedena na folio, kao i implementacija stranice predmemorije, dok je u budućnosti planirana konverzija datotečnih sistema. Također, planira se dodati podrška za višestruke folio stranice u jezgru.
Foliji podsjećaju na spojene memorijske stranice (compound pages), ali se razlikuju poboljšanom semantikom i jasnijom organizacijom rada. Za upravljanje sistemskom memorijom, dostupni RAM se dijeli na memorijske stranice čija veličina ovisi o arhitekturi, ali se na x86 sistemima obično mjeri u kilobajtima (obično 4096 bajtova). Savremeni sistemi dolaze sa desetinama gigabajta RAM-a, što otežava upravljanje memorijom zbog potrebe obrade ogromnog broja memorijskih stranica. Da bi se smanjio broj stranica, ranije je u jezgru implementirana koncepcija spojenih stranica (compound pages) sa strukturama koje obuhvataju više od jedne fizičke memorijske stranice. Međutim, API za manipulaciju spojenim memorijskim stranicama ostavljao je mnogo želja i dovodio do dodatnih troškova.
- U planifikator zadataka dodan je procesor koji uzima u obzir klasterizaciju keša u CPU-u. U nekim procesorima, kao što su Kunpeng 920 (ARM) i Intel Jacobsville (x86), određeni broj CPU jezgri, obično 4, može dijeliti L3 ili L2 keš. Uzimanje u obzir ovakvih topologija može značajno povećati efikasnost raspodjele zadataka među CPU jezgrama u planifikatoru zadataka, jer premještanje zadataka unutar jednog klastera CPU omogućava povećanje propusnosti pristupa memoriji i smanjenje konkurencije u kešu.
- Dodana je podrška za AMX (Advanced Matrix Extensions) u nadolazećim server procesorima Intel Xeon Scalable, koji se razvijaju pod kodnim imenom Sapphire Rapids. AMX nudi nove prilagodljive registre TMM "TILE" i upute za manipulaciju podacima u tim registrima, poput TMUL (Tile matrix MULtiply) za množenje matrica.
- Implementirano je nekoliko novih funkcionalnosti temeljenih na dodanom DAMON (Monitoring pristupa podacima) sustavu iz prošlog izdanja, koji omogućava praćenje pristupa podacima u radnoj memoriji, vezano uz odabrani proces koji radi u korisničkom prostoru. Na primjer, sustav omogućava analizu koje su to točno memorijske oblasti proces koristio tijekom svog rada, a koje su ostale neiskorištene.
- DAMON_RECLAIM za identifikaciju i isključivanje memorijskih područja koja nisu korištena. Mehanizam se može koristiti za proaktivno blago isključivanje stranica memorije u uvjetima približavanja iscrpljenju slobodne memorije.
- DAMOS (Operacijski shemi temeljeni na praćenju pristupa podacima) za primjenu zadanih operacija madvise(), poput oslobađanja dodatne slobodne memorije, na memorijskim područjima procesa za koje se bilježi određena učestalost pristupa memoriji. Konfiguracija parametara DAMOS-a provodi se preko debugfs.
- Mogućnost praćenja fizičkog adresnog prostora memorije (ranije se moglo pratiti samo virtualne adrese).
- Implementacija zstd algoritma kompresije ažurirana je na verziju 1.4.10, što je omogućilo značajno povećanje performansi različitih podsustava jezgre koji koriste kompresiju (na primjer, dekompresija kernel slike ubrzana je za 35%, performanse dekompresije komprimiranih podataka u Btrfs i SquashFS povećane su za 15%, a u ZRAM-u za 30%). U početku je u jezgri bila korištena posebna implementacija zstd, temeljena na verziji 1.3.1, izdanoj prije više od tri godine i koja nije uključivala mnoge važne optimizacije. Osim prelaska na aktualnu verziju, dodani patch također pojednostavljuje sinkronizaciju s upstream granom zstd, omogućavajući generiranje koda za uključivanje u jezgru izravno iz glavnog repozitorija zstd. U budućnosti se planira redovito ažuriranje zstd koda u jezgri prema izlasku novih verzija zstd biblioteke.
- Unaprijeđeno je puno funkcionalnosti u eBPF podsustavu. Dodana je mogućnost pozivanja funkcija modula jezgre iz BPF programa. Implementirana je funkcija bpf_trace_vprintk(), koja, za razliku od bpf_trace_printk(), omogućuje ispis više od tri argumenta odjednom. Dodana je nova struktura za pohranu podataka (BPF mapa) bloom filter, koja omogućuje korištenje istog nazivnog probabilističkog podatkovnog tipa za određivanje postojanja elementa u skupu. Dodana je nova oznaka BTF_KIND_TAG koja se može koristiti u BPF programima za vezivanje oznaka uz parametre funkcija, na primjer, za jednostavnije otkrivanje grešaka u korisničkim programima. U libbpf je omogućeno kreiranje vlastitih sekcija .rodata.* / .data.*, implementirana je podrška za uprobe i kprobe praćenje događaja, dodan je API za kopiranje svih tipova BTF iz jednog objekta u drugi. Podrška za AF_XDP je odvojena iz libbpf u biblioteku libxdp. Za MIPS arhitekturu implementiran je JIT kompajler za BPF virtualnu mašinu.
- Za ARM64 arhitekturu implementirana je podrška za ARMv8.6 ekstenzije za tajmer, uključujući one koje omogućavaju samosinkronizaciju prikaza sistemskih registara bez upotrebe ISB instrukcija.
- Za PA-RISC arhitekturu omogućena je upotreba KFENCE mehanizma za otkrivanje grešaka pri radu s memorijom, kao i dodana podrška za detektor stanja utrke KCSAN.
- Omogućeno je podešavanje prava pristupa tracefs na nivou pojedinačnih korisnika i grupa; na primjer, sada se može dozvoliti pristup alatima za praćenje samo članovima određenih grupa.
- Virtualizacija i sigurnost
- U io_uring i device-mapper podsustavima implementirana je podrška za generisanje revizijskih događaja. U io_uring je omogućeno upravljanje pristupom putem LSM modula. Dodana je mogućnost revizije sistemskih poziva openat2().
- Kod jezgre je potpuno očišćen od neprekinutih izraza case u switchu (bez return ili break nakon svakog case bloka). Pri kompilaciji jezgre sada se može primijeniti mod "-Wimplicit-fallthrough".
- Uključene su izmjene za strože provjere granica pri izvršavanju memcpy() funkcije.
- U asinkronom ulazno/izlaznom sučelju io_uring omogućena je primjena sigurnosnih politika definiranih od strane SELinux i Smack modula na operacijama ulaz/izlaz.
- U podsustavu IMA (Integrity Measurement Architecture), koja omogućuje vanjskoj usluzi verifikaciju stanja podsustava jezgre kako bi se osigurala njihova autentičnost, implementirana je mogućnost primjene pravila temeljenih na identifikatoru grupe (GID) kojoj pripada datoteka ili u koju ulazi korisnik koji pristupa datoteci.
- Neki napredni mehanizmi zaštite prijenosa seccomp() od napada klase Spectre su po defaultu onemogućeni, smatrajući ih suvišnima i neznatno poboljšavajući sigurnost, ali negativno utječu na performanse. Pregledana je primjena zaštite Retpoline.
- Uklonjena je implementacija mehanizma cryptoloop, koji je 2004. godine zamijenjen dm-cryptom i podupire iste algoritme ako je potrebno.
- Upravljački pristup podsustavu eBPF je po defaultu zabranjen. Ova promjena je uvedena kako bi se spriječila upotreba BPF programa za zaobilaženje zaštite od napada preko bočnih kanala. Administratori mogu vratiti mogućnost korištenja eBPF-a za neprivilegirane korisnike ako je potrebno.
- Hiper VIZOR ACRN, dizajniran za izvođenje zadataka u stvarnom vremenu i korištenje u kritičnim sustavima, dobio je podršku za stvaranje/brisanje virtualnih uređaja i prosljeđivanje MMIO uređaja.
- U kriptografskom motoru dodana je podrška za definicije KPP (Key-agreement Protocol Primitives), koje pojednostavljuju logiku razvoja drajvera za kriptosustave.
- Za hiper VIZOR Hyper-V implementirana je podrška za način izolacije virtualnih mašina, koji podrazumijeva šifriranje sadržaja memorije.
- U hiper VIZORU KVM dodana je podrška za RISC-V arhitekturu. Implementirana je mogućnost migracije unutar host-okruženja virtualnih masina koje se izvode koristeći AMD SEV i SEV-ES ekstenzije. Dodan je API za live-migraciju gostujućih sustava, šifriranih pomoću AMD SEV (Secure Encrypted Virtualization).
- Za PowerPC arhitekturu po defaultu je uključen način STRICT_KERNEL_RWX, koji blokira korištenje stranica memorije koje su istovremeno dostupne za pisanje i izvršenje.
- Na 32-bitnim x86 sustavima ukinuta je podrška za vruće povezivanje memorije (Memory hotplug), koja više od godine nije bila u funkciji.
- Iz jezgre je isključena biblioteka liblockdep, koja će se sada održavati odvojeno od jezgre.
- Mrežni subsistem
- Za socket-e je implementirana nova opcija SO_RESERVE_MEM, koja omogućuje rezervaciju određenog volumena memorije za socket, koja će uvijek ostati dostupna za socket i neće biti oduzeta. Korištenje ove opcije omogućuje poboljšanje performansi smanjenjem operacija dodjeljivanja i vraćanja memorije u mrežnom stogu, osobito u uvjetima nestašice memorije u sustavu.
- Dodana je podrška za protokol automatskog tuneliranja multicast prometa (Automatic Multicast Tunneling, RFC 7450), koji omogućuje isporuku multicast prometa iz mreža koje podržavaju multicast primateljima u mrežama bez multicast-a. Protokol radi putem enkapsulacije unutar UDP paketa.
- Poboljšana je enkapsulacija podataka IOAM (In-situ Operations, Administration, and Maintenance) u prijenosne pakete.
- U ethtool netlink API dodana je mogućnost upravljanja načinima potrošnje energije prijemnika.
- U sustavu netfilter implementirana je mogućnost klasifikacije paketa na razini egress, tj. u fazi kada vozač prima paket iz mrežnog stoga jezgre. U nftables je podrška za odgovarajuće filtre uvedena u verziji 1.0.1. U netfilteru je dodana mogućnost usporedbe i izmjene unutarnjih zaglavlja i podataka za UDP i TCP (inner header / payload) koji dolaze nakon transportnog zaglavlja.
- Dodani su novi sysctl parametri arp_evict_nocarrier i ndisc_evict_nocarrier, pri čemu će se pri postavljanju ovih parametara ARP cache i ndisc tablica (neighbor discovery) brišu u slučaju gubitka veze (NOCARRIER).
- U mehanizmu upravljanja mrežnim redovima fq_codel (Controlled Delay) dodani su načini Low Latency, Low Loss i Scalable Throughput (L4S).
- Oprema
- U vozaču amdgpu implementirana je osnovna podrška za specifikaciju DP 2.0 (DisplayPort 2.0) i mogućnost tuneliranja DisplayPort-a putem USB4. Za APU Cyan Skillfish (opremljene GPU-om Navi 1x) dodana je podrška za kontrolere zaslona. Proširena je podrška za APU Yellow Carp (mobilni procesori Ryzen 6000 „Rembrandt“).
- U vozaču i915 stabilizirana je podrška za Intel Alderlake S čipove i implementirana je podrška za Intel PXP tehnologiju (Protected Xe Path), koja omogućava rad hardverski zaštićenog grafičkog sesije na sustavima s Intel Xe čipovima.
- U vozaču nouveau obavljena su poboljšanja u ispravljanju grešaka i stilu oblikovanja koda.
- Dodana je podrška za x86-kompatibilne CPU Vortex (Vortex86MX). Linux na sličnim procesorima radio je i ranije, ali je jasna identifikacija spomenutih CPU-a bila potrebna za isključivanje zaštite od napada Spectre/Meltdown, koja se ne primjenjuje na navedene čipove.
- Dodana je osnovna podrška za x86 platforme Surface Pro 8 i Surface Laptop Studio.
- Dodani su drajveri za podršku audio čipovima korištenim u APU AMD Yellow Carp, Van Gogh; također je dodana podrška za audio sisteme 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 je drajver ishtp_eclite za pristup ugrađenim kontrolerima Intel PSE (Programmable Service Engine) putem ISHTP protokola (Integrated Sensor Hub Transport Protocol), na primjer, za dobivanje podataka o bateriji, temperaturi i informacijama povezanima s UCSI (USB Type-C Connector System Software Interface).
- Dodan je drajver za igračke kontrolere Nintendo Switch koji podržava uređaje Switch Pro i Joy-Cons. Dodana je podrška za Wacom Intuos BT tablete (CTL-4100WL/CTL-6100WL) i Apple 2021 Magic Keyboard. Poboljšana je podrška za kontrolere Sony PlayStation DualSense. Dodana je podrška za bočne dugmadi miša Xiaomi Mi.
- Dodan je drajver RT89 s podrškom za bežične čipove Realtek 802.11ax, kao i drajveri za Ethernet adaptere Asix AX88796C-SPI i switcheve Realtek RTL8365MB-VC.
- Za Apple M1 čipove dodani su drajveri za PCI i PASemi i2c.
- Dodana je podrška za ARM SoC, 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, Renesas R8A779M*, Xilinx Kria, Radxa Zero, JetHub D1/H1, Netronix E70K02.
Izvor: opennet.ru
