Po dveh mesecih razvoja je Linus Torvalds predstavil izdajo jedra Linux 5.16. Med najbolj opaznimi spremembami so: sistemski klic futex_waitv za izboljšanje zmogljivosti Windows iger v Wine, sledenje napakam v datotečnem sistemu preko fanotify, koncept foliantov v sistemu upravljanja pomnilnika, podpora procesorskih navodil AMX, možnost rezervacije pomnilnika za omrežne vtiče, podpora v netfilter za klasifikacijo paketov v fazi 'egress', vključitev podsystema DAMON za proaktivno izgonjenje neuporabljenih območij pomnilnika, izboljšana obdelava preobremenitev pri velikem številu zapisov, ter podpora za večdiskne trde diske.
V novo različico je bilo sprejetih 15415 popravkov od 2105 razvijalcev, velikost popravka pa je 45 MB (spremembe so se dotaknile 12023 datotek, dodanih je bilo 685198 vrstic kode, odstranjenih 263867 vrstic). Približno 44 % vseh sprememb, predstavljenih v 5.16, je povezanih z napravami gonilniki, približno 16 % sprememb se nanaša na posodobitev kode, specifične za strojno arhitekturo, 16 % pa je povezanih z omrežnim steklom, 4 % z datotečnimi sistemi in 4 % z notranjimi podsystemi jedra.
Glavne novosti v jedru 5.16:
- Дисковая подсистема, ввод/вывод и файловые системы
- V mehanizem fanotify so bila dodana sredstva za spremljanje stanja datotečnega sistema in sledenje nastanku napak. Informacije o napakah se prenašajo preko novega tipa dogodkov — FAN_FS_ERROR, ki jih lahko prekinjajo v izvajalnem uporabniškem prostoru monitorni sistemi za sprotno obveščanje skrbnika ali zagon obnovitvenih procesov. Pri kaskadnem pojavu serije napak fanotify zagotavlja dostavo sporočila o prvi napaki skupaj z skupnim števcem težav, da se poenostavi nadaljnje razjasnjevanje vzrokov okvare. Podpora za sledenje napakam je trenutno implementirana samo za datotečni sistem Ext4.
- Izboljšano upravljanje prenapolnitev pri izvajanju operacij pisanja (write congestion), ki se pojavijo, ko obseg pisnih operacij preseže pretočno kapaciteto pomnilnika, kar pomeni, da mora sistem blokirati pisne zahtevke do zaključka že predhodno poslanih zahtevkov. V novi različici je bil popolnoma predelan mehanizem jedra, ki se uporablja za pridobivanje informacij o nastanku prenapolnitev in blokiranju nalog, saj so bile v stari izvedbi opažene težave s usklajevanjem obdelave prenapolnitev pri pisanju s izmetom strani pomnilnika v swap, ko je sistemu primanjkovalo pomnilnika.
- V Btrfs je bila implementirana podpora za tehnologijo zoniranja naprav (Zoned Namespace), ki se uporablja pri trdih diskih ali NVMe SSD za razdelitev shranjevanja na cone, ki sestavljajo skupine blokov ali sektorjev, v katere je dovoljeno le zaporedno dodajanje podatkov s posodabljanjem celotne skupine blokov. Poleg tega so bile izvedene manjše optimizacije beleženja inode, ki so povečale pretočnost na testu dbench za 3% in zmanjšale zamude za 11%. Preurejen je bil mehanizem beleženja imenikov, pri čemer je bilo število iskalnih operacij in blokad v drevesu zmanjšano za izboljšanje učinkovitosti. Pospešena je bila vstavljanje elementov v strukturo btree v paketu (čas množične vstavljanja elementov se je skrajšal za 4%, medtem ko je bilo brisanje skrajšano za 12%). Dodana je bila omejena podpora za uporabo stiskanja pri pisanju nepopolnih strani, kot tudi možnost defragmentacije podstrani (subpage). Izvedena je bila priprava za vključitev podpore druge različice protokola za ukaz 'send'.
- V datotečnem sistemu XFS je bilo zmanjšano porabo pomnilnika z uporabo ločenih slab predpomnilnikov za pogosto uporabljene elemente in zmanjšanjem nekaterih podatkovnih struktur.
- V datotečnem sistemu Ext4 so bila zabeležena samo popravila napak in natančnejše izračunavanje parametrov odložene inicializacije tabele Inode.
- Na ravni blokovnih naprav so bile izvedene optimizacije, ki omogočajo znatno povečanje učinkovitosti vezave operacij na jedra CPU.
- Dodana je začetna podpora za trde diske z več neodvisnimi pogoni (multi-actuator), ki omogočajo hkrati dostop do več sektorjev v različnih conah magnetne plošče.
- Dodana nova ioctl-komanda CDROM_TIMED_MEDIA_CHANGE za prepoznavanje događaja promjene medija u optičkom pogonu.
- U datotečni sustav EROFS (Enhanced Read-Only File System) dodana je mogućnost rada preko više uređaja za pohranu. Različiti uređaji mogu biti odraz u jednom 32-bitnom adresnom prostoru blokova. Također je dodana podrška za kompresiju koristeći LZMA algoritam.
- U FS F2FS dodane su opcije montiranja za upravljanje fragmentacijom datoteka prilikom pohrane (na primjer, za otklanjanje grešaka u optimizacijama rada s fragmentiranim pohranjivanjem).
- U CEPH su po defaultu uključene operacije stvaranja i brisanja direktorija u asinkronom režimu (za vraćanje starog ponašanja treba prilikom montiranja koristiti zastavicu ‘-o wsync’). Dodano je praćenje metrika koje bilježe operacije kopiranja vanjskih objekata.
- U CIFS je dodana opcija montiranja tcpnodelay, koji postavlja način tc_sock_set_nodelay za mrežni soket, isključujući čekanje na ispunjenje reda u TCP stogu. Također je dodana podrška za ugniježdene DFS linkove (Distributed File System) prilikom ponovnog montiranja.
- Dodana je podrška za završavanje upita na blok uređaju u paketnom načinu. Testiranje promjene pokazalo je povećanje intenziteta izvršavanja operacija slučajnog čitanja sa Optane uređaja sa 6.1 na 6.6 milijuna IOPS na jednoj CPU jezgri.
- Pomnilnik in sistemske storitve
- Dodana je nova sistemska pozivna funkcija futex_waitv, koja omogućava praćenje stanja više futexa uz pomoć jednog sistemskog poziva. Ova mogućnost podsjeća na funkcionalnost WaitForMultipleObjects dostupnu u Windowsu, čija emulacija putem futex_waitv može biti korisna za povećanje performansi Windows igara pokrenutih pomoću Wine ili Proton. Osim toga, istovremeno čekanje na futexe može se koristiti i za optimizaciju performansi izvornih verzija igara za Linux.
- Uvedena je koncept stranica memorije (page folios), čija primjena u određenim podsistemima jezgra omogućava brže upravljanje memorijom pri tipičnim opterećenjima. Trenutno je glavni podsistem upravljanja memorijom u jezgru već prebačen na foliant, kao i realizacija stranica predmemorije, dok je u budućnosti planirana i migracija datotečnih sistema. Takođe se planira dodavanje podrške za višestruke foliantne stranice u jezgru.
Folianti su slični kombinovanim stranicama memorije (compound pages), ali se razlikuju poboljšanom semantikom i jasnijom organizacijom rada. Za upravljanje sistemskom memorijom dostupna RAM se deli na stranice memorije čija veličina zavisi od arhitekture, ali se na x86 sistemima meri u kilobajtima (obično 4096 bajtova). Savremeni sistemi dolaze sa desetinama gigabajta RAM-a, što komplikuje upravljanje memorijom zbog potrebe obrade ogromnog broja stranica memorije. Da bi se smanjio broj stranica, ranije je u jezgru implementiran koncept kombinovanih stranica (compound pages) sa strukturama koje obuhvataju više od jedne fizičke stranice memorije. Međutim, API za manipulaciju kombinovanim stranicama memorije nije bio zadovoljavajući i doveo je do dodatnih troškova.
- U planera zadataka je dodat obrtnik koji uzima u obzir klasterizaciju кеша u 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 deliti L3 ili L2 кеш. Uzimanje u obzir takvih topologija može značajno povećati efikasnost raspodelje zadataka među CPU jezgrama u planeru zadataka, jer premještanje zadataka unutar jednog klastera CPU može povećati propusnost pristupa memoriji i smanjiti konkurenciju u кешу.
- Dodana je podrška za AMX (Advanced Matrix Extensions) instrukcije, implementirane u nadolazećim server procesorima Intel Xeon Scalable, razvijenih pod kodnim imenom Sapphire Rapids. AMX nudi nove prilagodljive registre TMM „TILE“ i instrukcije za manipulaciju podacima u tim registrima, kao što je TMUL (Tile matrix MULtiply) za množenje matrica.
- Implemented several new features based on the DAMON (Data Access MONitor) subsystem added in the previous release, which allows tracking data access in memory associated with a chosen process operating in user space. For example, the subsystem enables analyzing which specific areas of memory the process accessed throughout its entire operation time and which memory areas remained unused.
- DAMON_RECLAIM for identifying and evicting memory areas that have not been accessed. The mechanism can be used for proactive soft eviction of memory pages as free memory approaches exhaustion.
- DAMOS (Data Access Monitoring-based Operation Schemes) for applying specified madvise() operations, such as releasing additional free memory, to memory areas of the process that have a certain access frequency recorded. DAMOS parameters are configured through debugfs.
- The capability to monitor the physical address space of memory (previously, only virtual addresses could be tracked).
- The zstd compression algorithm implementation has been upgraded to version 1.4.10, significantly boosting the performance of various kernel subsystems that utilize compression (for example, kernel image unpacking is sped up by 35%, unpacking of compressed data in Btrfs and SquashFS improved by 15%, and in ZRAM by 30%). Initially, the kernel used a separate implementation of zstd based on version 1.3.1, released over three years ago and lacking many important optimizations. In addition to updating to the current version, the added patch also simplifies synchronization with the upstream zstd branch, allowing the generation of code for direct inclusion in the kernel from the main zstd repository. In the future, the zstd code in the kernel is planned to be updated as new versions of the zstd library are released.
- Vseprva je bila uvedena velika serija izboljšav v podskladu eBPF. Dodana je možnost klicanja funkcij jedrskih modulov iz BPF programov. Uvedena je funkcija bpf_trace_vprintk(), ki omogoča izpis več kot treh argumentov hkrati, v nasprotju z bpf_trace_printk(). Dodana je nova struktura za shranjevanje podatkov (BPF map) bloom filter, ki omogoča uporabo istoimenskih verjetnostnih podatkovnih struktur za določanje prisotnosti elementa v množici. Dodan je nov atribut BTF_KIND_TAG, ki se lahko uporablja v BPF programih za vezavo oznak na parametre funkcij, na primer za poenostavitev odkrivanja napak v uporabniških programih. V libbpf je omogočeno ustvarjanje lastnih razdelkov .rodata.* / .data.*, uvedena je podpora za sledenje dogodkom uprobe in kprobe, dodan je API za kopiranje vseh vrst BTF iz enega objekta v drugega. Podpora AF_XDP je bila iz libbpf premaknjena v ločeno knjižnico libxdp. Za arhitekturo MIPS je bil implementiran JIT-kompajler za virtualni stroj BPF.
- Za arhitekturo ARM64 je bila uvedena podpora za razširitve ARMv8.6 za časovnik, ki med drugim omogočajo samosinkronizacijo predstavitve sistema registrov brez uporabe ISB ukazov.
- Za arhitekturo PA-RISC je bila omogućena uporaba mehanizma KFENCE za odkrivanje napak pri delu s pomnilnikom ter dodana podpora za detektor stanj dirke KCSAN.
- Omogočeno je prilagajanje pravic dostopa do tracefs na ravni posameznih uporabnikov in skupin, na primer, sedaj je mogoče omogočiti dostop do orodij za sledenje le članom določene skupine.
- Virtualizacija in varnost
- V podskladu io_uring in device-mapper je bila uvedena podpora za generiranje dogodkov revizije. V io_uring je omogočeno upravljanje dostopa prek modulov LSM. Dodana je možnost revizije sistemskega klica openat2().
- Koda jedra je bila popolnoma očiščena neprekinjenih izrazov case v switch (brez return ali break po vsakem bloku case). Pri sestavljanju jedra bo zdaj mogoče uporabiti način "-Wimplicit-fallthrough".
- Vključene so spremembe za zaostrovanje preverjanja meja med izvajanjem funkcije memcpy().
- V vmesniku asinhronega vhodno/izhodnega io_uring je bila uvedena možnost uporabe varnostnih politik, določenih z moduli SELinux in Smack, za vhodno/izhodne operacije.
- V podsystemu IMA (Integrity Measurement Architecture), který umožňuje externímu servisu ověřit stav podsystemů jádra, aby se ujistil o jejich pravosti, byla implementována možnost používat pravidla založená na identifikátoru skupiny (GID), ke které soubor patří, nebo do které patří uživatel, který k souboru přistupuje.
- Některé pokročilé mechanismy ochrany toků seccomp() proti útokům typu Spectre jsou ve výchozím nastavení zakázány, neboť byly považovány za nadbytečné a zásadně nezvyšovaly bezpečnost, přičemž negativně ovlivňovaly výkon. Byla přehodnocena aplikace ochrany Retpoline.
- Byla odstraněna implementace mechanismu cryptoloop, kterou v roce 2004 nahradil dm-crypt a v případě potřeby podporuje stejné algoritmy.
- Ve výchozím nastavení je zakázán nepřístupový přístup k podsystemu eBPF. Změna byla provedena za účelem zabránění používání BPF programů k obcházení ochrany proti útokům pomocí bočních kanálů. V případě potřeby může administrátor obnovit možnost používání eBPF nepřístupnými uživateli.
- Do hypervizora ACRN, určeného pro provádění úloh v reálném čase a použití v kritických systémech, byla přidána podpora pro vytváření/odstraňování virtuálních zařízení a pro průchod zařízení MMIO.
- Do kryptografického enginu byla přidána podpora definic KPP (Key-agreement Protocol Primitives), které zjednodušují logiku vývoje ovladačů pro kryptosystémy.
- Pro hypervizor Hyper-V byla implementována podpora režimu izolace virtualnih naprav, který zahrnuje šifrování obsahu paměti.
- V hipervizorju KVM byla přidána podpora architektury RISC-V. Byla implementována možnost migrace virtuálních strojů v rámci hostitelského prostředí, které běží s pomocí rozšíření AMD SEV a SEV-ES. Přidán API pro live migraci hostitelských systémů šifrovaných pomocí AMD SEV (Secure Encrypted Virtualization).
- Pro architekturu PowerPC je ve výchozím nastavení povolen režim STRICT_KERNEL_RWX, který blokuje použití stránek paměti, které jsou současně dostupné pro zápis a provádění.
- Na 32bitových systémech x86 byla ukončena podpora horkého připojení paměti (Memory hotplug), která byla více než rok nefunkční.
- Z jádra byla vyloučena knihovna liblockdep, která nyní bude sledována odděleně od jádra.
- Mrežna podsistem
- Za vtičnice je bila prevedena nova možnost SO_RESERVE_MEM, ki omogoča rezervacijo določenega obsega pomnilnika za vtičnice, ki bo vedno na voljo in ne bo odstranjena. Uporaba te možnosti povečuje zmogljivost s skrajšanjem operacij dodeljevanja in vračanja pomnilnika v omrežnem skladu, zlasti v pogojih pomanjkanja pomnilnika v sistemu.
- Dodana je podpora za protokol avtomatskega tuneliranja multicast prometa (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 z enkapsulacijo v UDP pakete.
- Izboljšana je enkapsulacija podatkov IOAM (In-situ Operations, Administration, and Maintenance) v prehodne pakete.
- V ethtool netlink API je bila dodana možnost upravljanja z načini porabe energije oddajnikov.
- V podsystems netfilter je bila uvedena možnost klasifikacije paketov na ravni egress, torej na stopnji, ko gonilnik prejme paket iz omrežnega sklada jedra. Podpora ustreznim filtrom v nftables je bila dodana v različici 1.0.1. V netfilter je bila dodana možnost ujemanja in spremembe notranjih naslovov in podatkov za UDP in TCP (inner header / payload), ki sledijo transportnemu naslovu (transport header).
- Dodani so novi sysctl parametri arp_evict_nocarrier in ndisc_evict_nocarrier, pri katerih se bo pri prekinitvi povezave (NOCARRIER) počistil ARP predpomnilnik in tabela ndisc (neighbor discovery).
- V mehanizem upravljanja omrežnih čakalnih vrst fq_codel (Controlled Delay) so bili dodani način Low Latency, Low Loss in Scalable Throughput (L4S).
- Oprema
- V gonilniku amdgpu je bila uvedena začetna podpora za specifikacijo DP 2.0 (DisplayPort 2.0) in možnost tuneliranja DisplayPort preko USB4. Za APU Cyan Skillfish (opremljene z GPU Navi 1x) je bila dodana podpora za nadzorne naprave. Razširjena je podpora za APU Yellow Carp (mobilni procesorji Ryzen 6000 'Rembrandt').
- V gonilniku i915 je bila stabilizirana podpora za čipe Intel Alderlake S in uvedena podpora za tehnologijo Intel PXP (Protected Xe Path), ki omogoča delovanje strojno zaščitenega grafičnega sejma na sistemih s čipi Intel Xe.
- V gonilniku nouveau so bile opravljene popravke napak in izboljšan slog oblikovanja kode.
- Dodana je podrška za x86-kompatibilne CPU Vortex (Vortex86MX). Linux na sličnim procesorima je već radio, ali je eksplicitna identifikacija navedenih CPU bila potrebna za isključivanje zaštite od napada Spectre/Meltdown, koji se ne primenjuju na navedene čipove.
- Dodana je osnovna podrška za x86 platforme Surface Pro 8 i Surface Laptop Studio.
- Dodan je drajver za podršku zvučnih čipova koji se koriste u APU AMD Yellow Carp, Van Gogh, kao i podrška za zvučne 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 (Integratd Sensor Hub Transport Protocol), na primer, za dobijanje podataka o bateriji, temperaturi i informacijama vezanim za UCSI (USB Type-C Connector System Software Interface).
- Dodan je drajver za gejmerske kontrolere Nintendo Switch, podržava uređaje Switch Pro i Joy-Cons. Takođe je dodata 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 sa podrškom za bežične čipove Realtek 802.11ax, kao i drajveri za Ethernet adaptore Asix AX88796C-SPI i switch-ove Realtek RTL8365MB-VC.
- Za Apple M1 čipove dodati 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
