Po dveh mesecih razvoja je Linus Torvalds predstavil izdajo jedra Linux 5.12. Med najbolj opaznimi spremembami so: podpora za zonske blokovne naprave v Btrfs, možnost preslikovanja identifikatorjev uporabnikov za FS, čiščenje zastare arhitektur ARM, način 'najnežnega' zapisovanja v NFS, mehanizem LOOKUP_CACHED za določanje pot do datotek iz predpomnilnika, podpora atomskim ukazom v BPF, sistem za odpravljanje napak KFENCE za odkrivanje napak pri delu s pomnilnikom, delovanje v ločenem procesu jedra način NAPI polling-a v omrežnem skladu, hipervizor ACRN, možnost dinamične spremembe preempt-modela v načrtovalniku opravil ter podpora LTO-optimizacijam pri sestavljanju v Clang.
V novo različico je sprejetih 14170 (v prejšnji izdaji 15480) popravkov od 1946 (1991) razvijalcev, velikost popravka je 38 MB (spremembe so zajemale 12102 (12090) datotek, dodanih je bilo 538599 (868025) vrstic kode, odstranjeno 333377 (261456) vrstic). Približno 43 % vseh sprememb, predstavljenih v 5.12, je povezanih z gonilniki naprav, približno 17 % sprememb se nanaša na posodobitev kode, specifične za strojne arhitekture, 12 % je povezanih z omrežnim skladom, 5 % z datotečnimi sistemi in 4 % z notranjimi podskladi jedra.
Glavne novosti:
- Дисковая подсистема, ввод/вывод и файловые системы
- Izvedena je bila možnost preslikovanja identifikatorjev uporabnikov za pritrjene datotečne sisteme (možno je preslikati datoteke enega uporabnika na pritrjenem tujem razdelku z drugim uporabnikom v trenutnem sistemu). Preslikava je podprta za FS FAT, ext4 in XFS. Predlagana funkcionalnost omogoča poenostavitev skupne rabe datotek med različnimi uporabniki in na različnih računalnikih, vključno s tem, da se preslikava uporablja v mehanizmu prenosnih domačih katalogov systemd-homed, kar uporabnikom omogoča, da premikajo svoje domače kataloge na zunanje nosilce in jih uporabljajo na različnih računalnikih, kjer se razporeditev identifikatorjev uporabnikov ne ujema. Drug pomemben namen je organizacija skupne uporabe datotek z zunanjega gostitelja, brez dejanskega spreminjanja podatkov o lastnikih datotek v FS.
- V jedro so bili sprejeti popravki LOOKUP_CACHED, ki omogočajo izvajanje operacij določanja poti datotek iz uporabniškega prostora brez zaklepanja, samo na podlagi podatkov, ki so na voljo v predpomnilniku. Način LOOKUP_CACHED se aktivira pri klicu openat2() s prenosom zastavice RESOLVE_CACHED, pri čemer se podatki vrnejo samo iz predpomnilnika, in če določitev poti zahteva dostop do pomnilnika, se vrne napaka EAGAIN.
- V datotečnem sistemu Btrfs je bila dodana začetna podpora za zonirane blokovne naprave (naprave na trdih diskih ali NVMe SSD, kjer je prostor za shranjevanje razdeljen na cone, ki sestavljajo skupine blokov ali sektorjev, v katere je dovoljeno le zaporedno dodajanje podatkov z posodobitvijo celotne skupine blokov). V načinu samo za branje je bila implementirana podpora za bloke z metapodatki in podatki, manjšimi od strani (subpage).
- V datotečnem sistemu F2FS je bila dodana možnost izbire algoritma in ravni stiskanja. Dodana je bila podpora za visoko raven stiskanja za algoritme LZ4. Implementirana je bila možnost montaže checkpoint_merge.
- Implementirana je nova ioctl-ukaz FS_IOC_READ_VERITY_METADATA za branje metapodatkov iz datotek, zaščitenih s fs-verity.
- V odjemalcu NFS je bil implementiran način 'navajajoče' pisanja (writes=eager), pri katerem se operacije pisanja v datoteko takoj prenesejo na strežnik, mimo straničnega predpomnilnika. Ta način omogoča zmanjšanje porabe pomnilnika, zagotavlja takojšnje informacije o zaključku prostega prostora v datotečnem sistemu in v nekaterih situacijah omogoča povečanje zmogljivosti.
- V CIFS (SMB) so bile dodane nove možnosti montaže: acregmax za upravljanje predpomnjenja datotek in acdirmax za upravljanje predpomnjenja metapodatkov map.
- V XFS je bil vključen način večnitnega preverjanja kvot, pospešeno izvajanje fsync, opravljen je bil pripravek kode growfs za implementacijo funkcije zmanjšanja velikosti datotečnega sistema.
- Pomnilnik in sistemske storitve
- Dodana je bila podpora DTMP (Dynamic Thermal Power Management), ki omogoča dinamično prilagajanje porabe energije različnih naprav na podlagi določenih skupnih omejitev temperature.
- Zmožnost sestavljanja jedra s prevajalnikom Clang z vključitvijo optimizacij med povezovanjem (LTO, optimizacija časa povezovanja) je bila uresničena. LTO optimizacije upoštevajo stanje vseh datotek, ki sodelujejo v procesu sestavljanja, medtem ko tradicionalni načini optimizacije optimizirajo vsako datoteko posebej in ne upoštevajo pogojev, ki jih določajo funkcije v drugih datotekah. Na primer, pri LTO je za funkcije iz drugih datotek mogoče inline širjenje, v izvršni datoteki se ne vključuje neuporabljena koda, preverjajo se tipi in izvaja se skupna optimizacija na ravni projekta kot celote. Podpora LTO je trenutno omejena na arhitekture x86 in ARM64.
- Omogočeno je izbiro načinov prekinjanja (PREEMPT) v načrtovalniku nalog med nalaganjem (preempt=none/voluntary/full) ali med delovanjem preko debugfs (/debug/sched_debug), če je bila pri sestavljanju jedra določena nastavitev PREEMPT_DYNAMIC. Prej je bilo možno način prekinjanja določiti le na ravni parametrov sestavljanja. Sprememba omogoča distribucijam, da dobavijo jedra z vključenim načinom PREEMPT, ki zagotavlja minimalne zakasnitve za delovne postaje, pri čemer je cena majhno zmanjšanje propustnosti, in po potrebi preklopi na načine PREEMPT_VOLUNTARY (prehodni način za delovne postaje) ali PREEMPT_NONE (maximalna propustnost). strežnikov).
- Podsystem BPF je dodal podporo za atomske operacije BPF_ADD, BPF_AND, BPF_OR, BPF_XOR, BPF_XCHG in BPF_CMPXCHG.
- BPF programi so dobili dostop do podatkov na skladu preko kazalnikov z spremenljivo zamudo. Na primer, če je bilo prej za dostop do tabele na skladu možno uporabiti samo stalni indeks elementa, je zdaj možno uporabiti spremenljivega. Nadzor dostopa znotraj obstoječih meja izvaja BPF overitelj. Možnost je na voljo le privilegiranim programom zaradi strahu pred izkoriščanjem ranljivosti, povezanih s spekulativnim izvajanjem kode.
- Dodana je možnost pripenjanja BPF programov na ‘gole’ točke sledenja (bare tracepoints), ki niso povezane z vidnimi dogodki sledenja v uporabniškem prostoru (za take točke sledenja ni zagotovljena ohranitev ABI).
- Implementirana je podrška za CXL 2.0 (Compute Express Link), koja se koristi za organizaciju visok brzi interakcije CPU-a sa uređajima za skladištenje (omogućava korišćenje spoljašnjih uređaja za skladištenje kao deo RAM-a ili trajne memorije, kao da je ta memorija povezana preko standardnog kontrolera memorije u CPU-u).
- Dod driver nvmem za dobijanje podataka iz rezervisanih oblasti memorije, koje su direktno nedostupne Linux-u (na primer, EEPROM memorija, koja je fizički dostupna samo firmveru, ili podaci koji su dostupni samo u ranoj fazi pokretanja).
- Uklonjena je podrška za sistem profilisanja „oprofile“, koji nije dobio široku primenu i zamenjen je savremenijim mehanizmom perf.
- U interfejsu asinkronog ulaza/izlaza io_uring obezbeđena je integracija sa cgroup, koje kontrolišu korišćenje memorije.
- Za arhitekturu RISC-V implementirana je podrška za NUMA sisteme, kao i mehanizme kprobes i uprobes.
- Dodata je mogućnost korišćenja sistemskog poziva kcmp() nezavisno od funkcionalnosti snimaka stanja procesa (checkpoint/restore).
- Uklonjeni su makroi EXPORT_UNUSED_SYMBOL() i EXPORT_SYMBOL_GPL_FUTURE(), koji se već dugo ne koriste u praksi.
- Virtualizacija in varnost
- Dodata je KFence (Kernel Electric Fence) zaštita, koja otkriva greške pri radu sa memorijom, kao što su prelazak granica bafera i pristup nakon oslobađanja memorije. Za razliku od KASAN debuggerskog mehanizma, KFence podski sistema karakteriše visoka brzina rada i niske režijske troškove, što omogućava otkrivanje grešaka u radu sa memorijom koje se manifestuju samo na radnim sistemima ili tokom dugotrajnog rada.
- Dodata je podrška za hipervizor ACRN, koji je razvijen uzimajući u obzir spremnost za obavljanje zadataka u realnom vremenu i pogodnost za korišćenje u kritičnim sistemima. ACRN obezbeđuje minimalne režijske troškove, garantuje niske latencije i adekvatnu reaktivnost pri interakciji sa hardverom. Podržava virtuelizaciju CPU resursa, ulaza/izlaza, mrežnih sistema, grafičkih i zvučnih operacija. ACRN se može koristiti za pokretanje više izolovanih virtualnih naprav v elektronskih krmilnih enotah, merilnih ploščah, avtomobilskih informacijskih sistemih, potrošniških IoT napravah in drugi vgrajeni tehniki. ACRN podpira dva tipo gostujočih sistemov — privilegirani Service VM, ki se uporabljajo za upravljanje virov sistema (CPU, pomnilnik, vhod/izhod itd.), in uporabniške User VM, v katerih se lahko izvajajo distribucije Linuxa, Android in Windows.
- V podsystemu IMA (Integrity Measurement Architecture), ki zagotavlja vzdrževanje baze hash za preverjanje celovitosti datotek in povezanih metapodatkov, je bila dodana možnost preverjanja celovitosti podatkov jedra samega, na primer za sledenje spremembam pravil SELinux.
- V hipervizor KVM je bila dodana možnost prestrezanja hipervizijskih klicev Xen in njihovo preusmeritev v emulator, ki deluje v uporabniškem prostoru.
- Dodana je bila možnost uporabe Linuxa kot korenskega okolja za hipervizor Hyper-V. Korensko okolje ima neposreden dostop do strojne opreme in se uporablja za zagon gostujočih sistemov (podobno Dom0 v Xen). Hyper-V (Microsoft Hypervisor) je doslej podpiral Linux le v gostujočih okoljih, samo hipervizor pa je bil upravljan iz okolja, ki temelji na Windows.
- Dodana je podpora za inline šifriranje za kartice eMMC, kar omogoča uporabo mehanizmov šifriranja, vgrajenih v nadzorni čip, ki izvajajo prosojno šifriranje in dešifriranje vhod/izhod.
- Iz kripto podistema je bila odstranjena podpora za neuporabljene v jedru hashe RIPE-MD 128/256/320 in Tiger 128/160/192, prav tako pa tudi za pretokovni šifrirnik Salsa20, ki mu je zamenjal algoritem ChaCha20. Algoritem blake2 je bil posodobljen na implementacijo blake2s.
- Mrežna podsistem
- Dodana je bila možnost premika NAPI obdelovalca polnjenja (polling) omrežnih naprav v ločeno jedro, kar omogoča povečanje zmogljivosti za nekatere vrste obremenitev. Pred tem je bil polling opravljen v okviru softirq in ni bil obravnavan s strani načrtovalnika nalog, kar je otežilo fino optimizacijo za dosego največje zmogljivosti. Izvedba v ločenem jedru omogoča opazovanje obdelovalca polnjenja iz uporabniškega prostora, pritrditev na posamezna jedra CPU in upoštevanje pri načrtovanju preklapljanja nalog. Za omogočanje novega načina je v sysfs predlagan parameter /sys/class/net//threaded.
- Integracija u MPTCP jezgru (MultiPath TCP) je nastavljena, proširenje TCP protokola za organizaciju rada TCP veze s isporukom paketa istovremeno preko više ruta kroz različite mrežne interfejse povezane s različitim IP adresama. Nova verzija omogućava pridruživanje prioriteta određenim tokovima, što omogućava, na primjer, organizaciju rezervnih tokova koji se aktiviraju samo kada dođe do problema s primarnim tokom.
- U IGMPv3 je dodana podrška za mehanizam EHT (Explicit Host Tracking).
- U mehanizmu filtriranja paketa netfilter implementirana je mogućnost vlasništva nad određenim tabelama za dobijanje ekskluzivne kontrole (na primer, pozadinski proces vatrozida može da zadrži određene tabele, zabranjujući nekom drugom da se uključi u njih).
- Oprema
- Obavljena je čišćenje zastarelih ARM platformi koje nisu podržane. Uklonjeni su kodovi platformi efm32, picoxcell, prima2, tango, u300, zx i c6x, kao i povezani drajveri.
- U amdgpu drajveru implementirana je mogućnost overclockinga (OverDrive) kartica temeljenih na GPU Sienna Cichlid (Navi 22, Radeon RX 6xxx). Dodata je podrška za pixel format FP16 za DCE (display controller engine) od 8. do 11. generacije. Za GPU Navy Flounder (Navi 21) i APU Van Gogh omogućena je opcija resetovanja GPU.
- U i915 drajveru za Intel grafičke karte implementirana je opcija i915.mitigations za isključivanje mehanizama izolacije i zaštite u korist povećanja performansi. Za čipove počevši od Tiger Lake uključena je podrška za VRR (Variable Rate Refresh) mehanizam, koji omogućava adaptivnu promenu frekvencije osvežavanja monitora radi osiguravanja glatkog prikaza bez trzanja tokom igara. Uključena je podrška za Intel Clear Color tehnologiju za poboljšanje tačnosti reprodukcije boja. Dodata je podrška za DP-HDMI 2.1. Omogućena je kontrola osvetljenja eDP panela. Za GPU Gen9 sa podrškom LSPCON (Level Shifter and Protocol Converter) uključena je podrška za HDR.
- U nouveau drajveru dodata je osnovna podrška za NVIDIA GPU zasnovane na GA100 arhitekturi (Ampere).
- U msm drajveru dodana je podrška za GPU Adreno 508, 509 i 512, koji se koriste u SDM (Snapdragon) čipovima 630, 636 i 660.
- Dodata je podrška za zvučne kartice Sound BlasterX AE-5 Plus, Lexicon I-ONIX FW810s i Pioneer DJM-750. Dodata je podrška za zvučnu podsklop Intel Alder Lake PCH-P. Implementirana je podrška za softversku simulaciju povezivanja i isključivanja audio priključka za debagovanje obrtnika u korisničkom prostoru.
- Dodana je podrška za Nintendo 64 igraće konzole, koje su se proizvodile od 1996. do 2003. godine (prethodni pokušaji portiranja Linux-a za Nintendo 64 nisu uspeli do kraja i imali su status Vaporware). Kao motiv za stvaranje novog porta za ovu zastarjelu platformu, koja se ne proizvodi skoro dvadeset godina, navodi se želja da se podstakne razvoj emulacija i pojednostavi prenos igara.
- Dodani su drajveri za igraću kontroler Sony PlayStation 5 DualSense.
- Dodana je podrška za ARM platforme, uređaje i sisteme: PineTab, Snapdragon 888 / SM8350, Snapdragon MTP, Two Beacon EmbeddedWorks, Intel eASIC N5X, Netgear R8000P, Plymovent M2M, Beacon i.MX8M Nano, NanoPi M4B.
- Dodana je podrška za pametne telefone Purism Librem5 Evergreen, Xperia Z3+/Z4/Z5, ASUS Zenfone 2 Laser, BQ Aquaris X5, OnePlus6, OnePlus6T, Samsung GT-I9070.
- Dodan je bcm-vk drajver za Broadcom VK akceleratorske ploče (npr. PCIe ploče Valkyrie i Viper), koje se mogu koristiti za prebacivanje operacija obrade zvuka, videa i slika, kao i aktivnosti vezane za šifrovanje na poseban uređaj.
- Dodana je podrška za Lenovo IdeaPad platformu s mogućnošću upravljanja stalnim punjenjem i osvetljenjem tastature. Takođe je obezbeđena podrška za ACPI profil ThinkPad platforme s mogućnošću upravljanja režimima potrošnje energije. Dodan je drajver za HID podsystem Lenovo ThinkPad X1 Tablet Gen 2.
- Dodan je ov5647 drajver s podrškom za kameru modul za Raspberry Pi.
- Dodana je podrška za RISC-V SoC FU740 i ploče HiFive Unleashed. Takođe je dodat novi drajver za čip Kendryte K210.
Izvor: opennet.ru
