Po dveh mesecih razvoja je Linus Torvalds predstavil izdajo jedra Linux 5.15. Med najbolj opaznimi spremembami so: nova voznika NTFS s podporo za pisanje, modul ksmbd z implementacijo strežnika SMB, podsistem DAMON za spremljanje dostopa do pomnilnika, primitivi zaklepanja za realnočasovni način, podpora fs-verity v Btrfs, sistemski klic process_mrelease za sisteme za odzivanje na pomanjkanje pomnilnika ter modul oddaljenega overjanja dm-ima.
V novo različico je bilo sprejetih 13499 popravkov od 1888 razvijalcev, velikost popravka pa je 42 MB (spremembe so zajele 10895 datotek, dodanih je bilo 632522 vrstic kode, odstranjeno 299966 vrstic). Približno 45 % vseh sprememb v 5.15 se nanaša na gonilnike naprav, približno 14 % sprememb se nanaša na posodobitev kode, specifične za strojno arhitekturo, 14 % je povezano s omrežnim steklom, 6 % z datotečnimi sistemi in 3 % z notranjimi podsistemi jedra.
Glavne novosti:
- Дисковая подсистема, ввод/вывод и файловые системы
- V jedro je bila sprejeta nova implementacija datotečnega sistema NTFS, ki jo je odprla družba Paragon Software. Nova voznika lahko deluje v načinu pisanja in podpira vse možnosti trenutne različice NTFS 3.1, vključno z razširjenimi atributi datotek, seznami dostopa (ACL), načinom stiskanja podatkov, učinkovitim delovanjem s praznimi prostori v datotekah (sparse) in obnovitvijo sprememb iz dnevnika za ohranjanje celovitosti po okvarah.
- V datotečnem sistemu Btrfs je bila uvedena podpora za mehanizem fs-verity, ki se uporablja za transparentno preverjanje celovitosti in pristnosti posameznih datotek po povezanih kriptografskih hashih ali ključih, shranjenih v meta podatkih. Prej je bil fs-verity na voljo samo za datotečne sisteme Ext4 in F2fs.
Btrfs je prav tako dodal podporo za mapiranje identifikatorjev uporabnikov za priključene datotečne sisteme (prej podprt za datotečne sisteme FAT, ext4 in XFS). Ta funkcionalnost omogoča povezovanje datotek določenega uporabnika na pritrjenem tujem razdelku z drugim uporabnikom v trenutnem sistemu.
Med drugimi spremembami v Btrfs: pospešitev dodajanja ključev v indeks imenika za izboljšano zmogljivost ustvarjanja datotek; možnost delovanja raid0 z enim napravom, in raid10 z dvema (na primer, med prekonfiguracijo array-a); možnost "rescue=ibadroots" za ignoriranje neustreznega drevesa ekstentov; pospešitev operacije "send"; zmanjšanje konfliktov zaklepanja med operacijami preimenovanja; možnost uporabe 4K sektorjev na sistemih z velikostjo strani pomnilnika 64K.
- V XFS je bila stabilizirana možnost uporabe v FŠ datumov po letu 2038. Uveden je bil mehanizem odložene deaktivacije inode in podpora za odloženo nastavitev in odstranjevanje atributov datotek. Z namenom odprave težav je bila odstranjena možnost onemogočanja diskovnih kvot za že nameščene particije (kvote je mogoče prisilno onemogočiti, vendar se bo s tem povezano štetje nadaljevalo, zato je za popolno onemogočenje potrebno ponovno namestiti).
- V EXT4 so bile izvedene izboljšave za povečanje zmogljivosti pisanja delalloc-buforov in obdelavo osirotelih (orphan) datotek, ki še vedno obstajajo, ker so odprte, vendar niso več povezane z imenikom. Obdelava operacij discard je bila odstranjena iz jbd2 toka kthread, da se izognemo blokadam operacij z metapodatki.
- V F2FS je bila dodana možnost "discard_unit=block|segment|section" za vezavo operacij discard (označevanje osvobojenih blokov, ki jih že ni mogoče fizično shraniti) na poravnanje glede na blok, sektor, segment ali sekcijo. Dodana je podpora za sledenje spremembam zakasnitev pri vhodu/izhodu.
- V datotečnem sistemu EROFS (Extendable Read-Only File System) je bila dodana podpora za neposredno vhod/izhod za datoteke, shranjene brez stiskanja, ter podpora fiemap.
- V OverlayFS je bila uvedena pravilna obdelava zastavic za montažo "immutable", "append-only", "sync" in "noatime".
- V NFS je bila izboljšana obdelava situacij, ko NFS strežnik ne odgovarja na zahteve. Dodana je možnost montiranja iz že uporabljenega strežnika, a dostopnega preko drugega omrežnega naslova.
- Začela se je priprava na prepisovanje podsistema FSCACHE.
- Dodana je podpora za EFI-particije z nestandardno postavitvijo tabel GPT.
- V mehanizmu fanotify je implementiran nov flag FAN_REPORT_PIDFD, ki omogoča vključitev pidfd med vrnjenimi metapodatki. Pidfd pomaga obravnavati situacije z večkratno uporabo PID za natančnejšo identifikacijo procesov, ki dostopajo do spremljanih datotek (pidfd je povezan s konkretnim procesom in se ne spreminja, medtem ko se PID lahko poveže z drugim procesom po zaključku trenutnega procesa, povezanega s tem PID-jem).
- V sistemski klic move_mount() je dodana možnost dodajanja točk montaže v obstoječe skupne skupine, kar rešuje težave s shranjevanjem in obnovo stanja procesov v orodju CRIU ob prisotnosti več montažnih prostorov, ki se uporabljajo v izoliranih vsebniki.
- Dodana je zaščita pred skritimi stanji tekmovanja, ki bi lahko potencialno vodila do poškodb datotek pri izvajanju branja iz predpomnilnika med obdelavo luknjic v datoteki.
- Podpora za obvezne (mandatory) blokade datotek, izvedene preko blokirnih sistemskih klicev, ki povzročajo spremembo datoteke, je ukinjena. Zaradi potencialnih stanj tekmovanja so bile te blokade obravnavane kot nezanesljive in so bile že pred mnogo leti razglašene za zastarele.
- Podsystem LightNVM, ki je omogočal neposreden dostop do SSD-pomnilnika, mimo sloja emulacije, je bil odstranjen. LightNVM je izgubil smisla po pojavu standardov NVMe, ki predvidevajo možnost zoniranja (ZNS, Zoned Namespace).
- Pomnilnik in sistemske storitve
- Implementiran je subsistem DAMON (Data Access MONitor), ki omogoča spremljanje aktivnosti, povezane z dostopom do podatkov v pomnilniku, v povezavi z izbranim procesom, ki deluje v uporabniškem prostoru. Subsistem omogoča analizo, do katerih točno področij pomnilnika je proces dostopal v času svojega delovanja, in katerih področij pomnilnika ni izkoristil. Med značilnostmi DAMON se izpostavljajo nizka obremenitev procesorja, majhna poraba pomnilnika, visoka natančnost in predvidljivi stalni stroški, neodvisni od velikosti. Subsistem se lahko uporablja tako v jedru za optimizacijo upravljanja pomnilnika kot tudi v orodjih v uporabniškem prostoru za razumevanje, kaj počne proces in optimizacijo rabe pomnilnika, na primer, sproščanje odvečne pomnilnika sistemu.
- Implementirana je sistemska pozivna funkcija process_mrelease koja omogućava brže oslobađanje memorije procesa koji završava svoju izvršnost. U običnim uslovima, oslobađanje resursa i završavanje procesa ne dešava se odmah i može biti odloženo iz raznih razloga, što ometa rad sistema za ranog reagovanja na nedostatak memorije, kao što su oomd (obezbeđen u systemd) i lmkd (koristi se u Androidu). Pomoću poziva process_mrelease takvi sistemi mogu predvidljivije inicirati vraćanje memorije od nužno završavanih procesa.
- Iz grane jezgra PREEMPT_RT, u kojoj se razvija podrška za rad u realnom vremenu, prenesene su varijante primitiva za organizaciju zaključavanja mutex, ww_mutex, rw_semaphore, spinlock i rwlock, zasnovane na podsistemu RT-Mutex. U SLUB slab alokator dodane su izmene koje poboljšavaju rad u režimu PREEMPT_RT i smanjuju uticaj na prekide.
- U cgroup je dodana podrška za atribut planera zadataka SCHED_IDLE, koja omogućava obeležavanje svih procesa u grupi koji pripadaju određenoj cgroup ovom karakteristikom. Dakle, ti procesi će biti pokrenuti samo kada u sistemu nema drugih zadataka koji čekaju izvršenje. Za razliku od postavljanja atributa SCHED_IDLE svakom procesu pojedinačno, pri dodeljivanju SCHED_IDLE cgroup-u uzima se u obzir relativna težina zadataka unutar grupe prilikom odabira zadatka za izvršenje.
- Mehanizam praćenja potrošnje memorije u cgroup je proširen mogućnošću praćenja dodatnih strukturnih podataka jezgra, uključujući one kreirane za poll-ovanje, obradu signala i prostorne nazive.
- Dodana je podrška za asimetrično planiranje dodele zadataka procesorskim jezgrima na arhitekturama gde neka CPU omogućavaju izvršavanje 32-bitnih zadataka, dok neki rade samo u 64-bitnom režimu (na primer, ARM). Novi režim omogućava da prilikom planiranja izvršenja 32-bitnih zadataka uzimaju u obzir samo CPU koji podržavaju 32-bitne zadatke.
- V vmesniku asinkronih vhodov/izhodov io_uring je bila dodana podpora za odpiranje datotek neposredno v indeksni tabeli fixed-file, brez uporabe deskriptorja datoteke, kar omogoča znatno pospešitev nekaterih vrst operacij, vendar se nepravilno ujema s tradicionalnim postopkom Unixa, ki uporablja deskriptorje datotek za odpiranje datotek.
V io_uring za podsistem BIO (Block I/O Layer) je bil implementiran nov mehanizem reciklaže BIO, ki zmanjšuje stroške pri upravljanju notranje pomnilnika in povečuje število obdelanih vhodno/izhodnih operacij na sekundo za približno 10%. V io_uring je bila dodana tudi podpora za sistemske klice mkdirat(), symlinkat() in linkat().
- Za BPF programe je bila uvedena možnost poizvedovanja in obravnave dogodkov časovnika. Dodan je bil iterátor za UNIX socket-e, prav tako pa je bila omogočena pridobitev in nastavitev možnosti socket-ov za setsockopt. V BTF dumper je bila dodana podpora za tipizirane podatke.
- Na NUMA sistemih z različnimi tipi pomnilnika, ki se medsebojno razlikujejo po zmogljivosti, je bila uvedena preselitev izgnanih strani pomnilnika iz dinamičnega pomnilnika (DRAM) v počasnejši trajni pomnilnik (Persistent Memory) namesto brisanja teh strani, ko je prosto mesto izčrpano. Testi so pokazali, da takšna taktika običajno izboljša zmogljivost na tovrstnih sistemih. Za NUMA je bila prav tako omogočena dodelitev strani pomnilnika za postopek iz izbranega sklopa NUMA vozlišč.
- Za arhitekturo ARC je bila uvedena podpora za tri- in štiristopenjske tabele strani pomnilnika, kar bo v prihodnje omogočilo podporo za 64-bitne procesorje ARC.
- Za arhitekturo s390 je bila uvedena možnost uporabe mehanizma KFENCE za odkrivanje napak pri delu s pomnilnikom, prav tako pa je bila dodana podpora za detektor stanj dirke KCSAN.
- Dodana je bila podpora za indeksiranje seznama sporočil, prikazanih preko printk(), kar omogoča, da se enkrat izvlečejo vsa podobna sporočila in spremljajo spremembe v uporabniškem prostoru.
- V mmap() je bila prenehana podpora za možnost VM_DENYWRITE, koda jedra pa je bila očiščena uporabe načina MAP_DENYWRITE, kar je zmanjšalo število situacij, ki vodijo do blokade zapisa v datoteko z napako ETXTBSY.
- V podsystemu sledenja je dodan nov tip preverjanj "Event probes", ki jih je mogoče pritrditi na obstoječe dogodke sledenja in določiti lastno obliko izhoda.
- Pri sestavljanju jedra z uporabo prevajalnika Clang je privzeto zdaj vključen vgrajeni assembler iz projekta LLVM.
- V okviru projekta za odstranjevanje kode iz jedra, ki povzroča opozorila prevajalnika, je bil izveden poskus z omogočanjem privzetega načina "-Werror", pri katerem se opozorila prevajalnika obravnavajo kot napake. Pri pripravi izdajanja 5.15 je Linus začel sprejemati le spremembe, ki ne povzročajo opozoril pri sestavljanju jedra in aktiviral sestavljanje z "-Werror", a je nato privolil v mnenje o prezgodnosti take odločitve in odložil privzeto vključitev "-Werror". Upravljanje vključitve oznake "-Werror" pri sestavljanju poteka preko parametra WERROR, ki je privzeto nastavljen na vrednost COMPILE_TEST, tj. zaenkrat se aktivira le pri testnih sestavah.
- Virtualizacija in varnost
- V Device Mapper (DM) je dodan nov obdelovalnik dm-ima z implementacijo mehanizma oddaljenega overjanja na osnovi podsystema IMA (Integrity Measurement Architecture), ki omogoča zunanjim storitvam potrditev stanja podsystemov jedra, da se prepriča o njihovi pristnosti. V praksi dm-ima omogoča ustvarjanje s pomočjo Device Mapper shranjevanja, povezanih z zunanjimi oblačnimi sistemi, kjer IMA potrjuje veljavnost zaželjene konfiguracije DM target.
- V prctl() je implementirana nova možnost PR_SPEC_L1D_FLUSH, pri čemer jedro pri vključitvi začne prazniti vsebino predpomnilnika prve ravni (L1D) vsakič pri preklopu konteksta. Ta način omogoča dodatno zaščito za najbolj pomembne procese pred napadi s stranskimi kanali, ki se izvajajo za določitev podatkov, ki so se zadrževali v predpomnilniku zaradi ranljivosti, ki jih povzroča spekulativno izvajanje navodil v CPU-ju. Cena vključitve PR_SPEC_L1D_FLUSH (privzeto ni aktivirana) je znatno zmanjšanje zmogljivosti.
- Implementirana je mogućnost izrade jezgra s dodavanjem GCC opcije „-fzero-call-used-regs=used-gpr“, koja osigurava nula svih registara prije vraćanja kontrole iz funkcije. Ova opcija omogućava zaštitu od curenja informacija iz funkcija i smanjuje broj blokova pogodnih za izradu ROP gadgeta (Return-Oriented Programming) u exploitima za 20%.
- Implementirana je mogućnost izrade jezgri za arhitekturu ARM64 u obliku klijenata za hipervizor Hyper-V.
- Predložen je novi okvir za razvoj drajvera „VDUSE“, koji omogućava implementaciju virtuelnih blok uređaja u prostoru korisnika i primenu Virtio kao transporta za pristup iz gostujućih sistema.
- Dodan je Virtio drajver za I2C magistralu, koji omogućava emulaciju I2C kontrolera u režimu paravirtualizacije koristeći posebne backend-e.
- Dodana je Virtio drajver gpio-virtio, koja omogućava gostujućim sistemima pristup GPIO linijama koje pruža host sistem.
- Dodana je mogućnost ograničavanja pristupa stranicama memorije za uređaje drajvere sa podrškom za DMA na sistemima bez I/O MMU (memory-management unit).
- U KVM hipervizoru implementirana je mogućnost ispisivanja statistike u obliku linearnih i logarithamskih histogram.
- Mrežna podsistem
- Uključena je ksmbd modul u jezgru s implementacijom datotečnog servera koji koristi SMB3 protokol. Ovaj modul dopunjuje ranije dostupnu implementaciju SMB klijenta u jezgru i, za razliku od SMB servera koji radi u prostoru korisnika, efikasniji je u pogledu performansi, potrošnje memorije i integracije s proširenim mogućnostima jezgra. Ksmbd se predstavlja kao visokoperformantno i spremno za upotrebu na ugrađenim uređajima proširenje za Samba, po potrebi integrisano s alatima i bibliotekama Samba. Od mogućnosti ksmbd ističe se poboljšana podrška tehnologiji distribucije predmemorije datoteka (SMB leases) na lokalnim sistemima, koja značajno smanjuje saobraćaj. U budućnosti planiraju dodati podršku za RDMA („smbdirect“) i proširenja protokola vezana za poboljšanu pouzdanost enkripcije i verifikaciju putem digitalnih potpisa.
- U CIFS klijentu obustavljena je podrška za NTLM i manje pouzdane algoritme autentifikacije temeljene na DES algoritmu i korišćene u SMB1 protokolu.
- V implementaciji mrežnih mostova za vlan dodana je podrška za multicast.
- U drivery bonding, koji se koristi za agregaciju mrežnih sučelja, dodana je podrška za XDP (eXpress Data Path) podsistem koji omogućava manipulaciju mrežnim paketima pre nego što ih obrade mrežni slojevi jezgra Linuxa.
- U bežičnom steku mac80211 implementirana je podrška za 6GHZ STA (Special Temporary Authorization) u režimima LPI, SP i VLP, kao i mogućnost postavljanja odvojenih TWT (Target Wake Time) u režimu pristupne tačke.
- Dodana je podrška za MCTP (Management Component Transport Protocol), koji se koristi za interakciju upravljačkih kontrolera i povezanih uređaja (host-procesori, periferni uređaji, itd.).
- Nastavljena je integracija u jezgru MPTCP (MultiPath TCP), ekstenziji TCP protokola koja omogućava rad TCP veze sa isporukom paketa istovremeno kroz više puteva preko različitih mrežnih sučelja vezanih za različite IP adrese. U novom izdanju dodana je podrška za adrese u fullmesh režimu.
- U netfilteru dodani su handleri za mrežne tokove, enkapsulirane u SRv6 (Segment Routing IPv6) protokolu.
- Dodana je podrška za sockmap za Unix sokete sa tokovima.
- Oprema
- U drivery amdgpu implementirana je podrška za APU Cyan Skillfish (opremljen GPU Navi 1x). Za APU Yellow Carp implementeda je podrška za video kodeke. Poboljšana je podrška za GPU Aldebaran. Dodani su novi identifikatori kartica zasnovanih na GPU Navi 24 'Beige Goby' i RDNA2. Predložena je poboljšana realizacija virtuelnih ekrana (VKMS). Implementirana je podrška za praćenje temperature čipova AMD Zen 3.
- U drivery amdkfd (za diskretne GPU, kao što je Polaris) implementiran je menadžer deljene virtuelne memorije (SVM, shared virtual memory) zasnovan na HMM (Heterogeneous memory management) podsistemu, koji omogućava korišćenje uređaja sa sopstvenim kontrolerima memorije (MMU, memory management unit) koji mogu pristupiti fizičkoj memoriji. Uključujući HMM može se organizovati zajednički adresni prostor između GPU i CPU, u kojem GPU može pristupiti fizičkoj memoriji procesa.
- U drivery i915 za Intel grafičke kartice proširena je primena menadžera za upravljanje grafičkom memorijom TTM i uključena je mogućnost upravljanja potrošnjom energije na osnovu GuC (Graphics micro Controller). Započeta je priprema za implementaciju podrške za Intel ARC Alchemist grafičku kartu i GPU Intel Xe-HP.
- V drajverju nouveau je bilo omogočeno upravljanje osvetlitve eDP panelov preko DPCD (Podatki o konfiguraciji DisplayPort).
- Drajver msm je dodal podporo za GPU Adreno 7c Gen 3 in Adreno 680.
- Za čip Apple M1 je bil razvit drajver IOMMU.
- Dodali smo zvočni drajver za sisteme na osnovi APU AMD Van Gogh.
- V veji staging je bil dodan drajver Realtek R8188EU, ki je zamenjal staro različico drajverja (rtl8188eu) za brezžične čipe Realtek RTL8188EU 802.11 b/g/n.
- V sestavo je bil sprejet drajver ocp_pt za PCIe kartico, ki jo razvija podjetje Meta (Facebook), z implementacijo miniaturnih atomskih ur in GNSS sprejemnika, ki se lahko uporabljata za organizacijo samostojne strežnikov synchronizacije natančnega časa.
- Dodana je podpora za pametne telefone Sony Xperia 10II (Snapdragon 665), Xiaomi Redmi 2 (Snapdragon MSM8916), Samsung Galaxy S3 (Snapdragon MSM8226), Samsung Gavini/Codina/Kyle.
- Dodana je podpora za ARM SoC in plate NVIDIA Jetson TX2 NX Developer Kit, Sancloud BBE Lite, PicoITX, DRC02, SolidRun SolidSense, SKOV i.MX6, Nitrogen8, Traverse Ten64, GW7902, Microchip SAMA7, Qualcomm Snapdragon SDM636/SM8150, Renesas R-Car H3e-2G/M3e-2G, Marvell CN913x, ASpeed AST2600 (strežnične plate Facebook Cloudripper, Elbert in Fuji), 4KOpen STiH418-b2264.
- Dodana je podpora za LCD panele Gopher 2b, EDT ETM0350G0DH6/ETMV570G2DHU, LOGIC Technologies LTTD800480070-L6WH-RT, Multi-Innotechnology MI1010AIT-1CP1, Innolux EJ030NA 3.0, ilitek ili9341, E Ink VB3300-KCA, Samsung ATNA33XC20, Samsung DB7430, WideChips WS2401.
- Dodali smo drajver LiteETH s podporo za Ethernet krmilnike, ki se uporabljajo v programski SoC LiteX (za FPGA).
- V drajver usb-audio je bila dodana možnost lowlatency za upravljanje delovanja v načinu minimalnih zakasnitev. Prav tako je bila dodana možnost quirk_flags za prenos nastavitev specifičnih za napravo.
Medtem ko je Latinskoameriška fundacija prostega programske opreme oblikovala različico popolnoma prostega jedra 5.15 — Linux-libre 5.15-gnu, očiščenega od elementov vdelane programske opreme in gonilnikov, ki vsebujejo neproste komponente ali odseke kode, katerih uporaba je omejena s proizvajalcem. V novem izdanju je implementiran izpis sporočila v log o zaključku čiščenja. Odpravljene so težave pri oblikovanju paketov z uporabo mkspec, izboljšana je podpora za pakete snap. Odstranjena so nekatera opozorila, ki so se izpisovala pri obdelavi glave datoteke firmware.h. Omogočen je izpis nekaterih vrst opozoril („format-extra-args“, komentarji, neuporabne funkcije in spremeljivke) pri gradnji v načinu „-Werror“. Dodano je čiščenje gonilnika gehc-achc. Posodobljena je koda za čiščenje blobov v gonilnikih in podsistemih adreno, btusb, btintel, brcmfmac, aarch64 qcom. Čiščenje gonilnikov prism54 (odstranjen) in rtl8188eu (zamenjan z r8188eu) je prenehalo.
Izvor: opennet.ru
