Izdanje kernela Linux 5.18

Nakon dva mjeseca razvoja, Linus Torvalds je predstavio izdanje Linux kernela 5.18. Među najznačajnijim promjenama: izvršeno je veliko čišćenje zastarjele funkcionalnosti, Reiserfs FS je proglašen zastarjelim, implementirani su događaji praćenja korisničkih procesa, dodata je podrška za mehanizam za blokiranje Intel IBT eksploatacija, omogućen je način otkrivanja prekoračenja bafera kada koristeći memcpy() funkciju, dodat je mehanizam za praćenje poziva funkcije fprobe, poboljšane su performanse planera zadataka na AMD Zen CPU-ima, uključen je drajver za upravljanje Intelovom CPU funkcionalnošću (SDS), neke zakrpe su integrirane za restrukturiranje datoteka zaglavlja, a odobreno je korištenje standarda C11.

Nova verzija uključuje 16206 popravki od 2127 programera (u prošlom izdanju bilo je 14203 popravka od 1995 programera), veličina zakrpe je 108 MB (promjene su uticale na 14235 datoteka, 1340982 linije koda su dodane, 593836 linije su izbrisane). Oko 44% svih promjena uvedenih u 5.18 odnosi se na drajvere uređaja, otprilike 16% promjena se odnosi na ažuriranje koda specifičnog za hardverske arhitekture, 11% se odnosi na mrežni stog, 3% se odnosi na sistem datoteka i 3% odnose se na interne podsisteme kernela.

Ključne inovacije u kernelu 5.18:

  • Diskovni podsistem, I/O i sistemi datoteka
    • Btrfs sistem datoteka je dodao podršku za prosljeđivanje komprimiranih podataka prilikom izvođenja operacija slanja i primanja. Ranije, kada se koristi slanje/primanje, strana koja šalje dekomprimirala je podatke pohranjene u komprimiranom obliku, a strana primateljica ih je ponovo kompresovala prije nego što ih je zapisala. U kernelu 5.18, aplikacije korisničkog prostora koje koriste pozive za slanje/primanje dobile su mogućnost da prenose komprimirane podatke bez ponovnog pakovanja. Funkcionalnost je implementirana zahvaljujući novim ioctl operacijama BTRFS_IOC_ENCODED_READ i BTRFS_IOC_ENCODED_WRITE, koje vam omogućavaju da direktno čitate i pišete informacije u velikim količinama.

      Pored toga, Btrfs poboljšava performanse fsync. Dodata je mogućnost dedupliciranja i izvođenja reflinka (kloniranje metapodataka datoteke kreiranjem veze na postojeće podatke bez stvarnog kopiranja) za cijelu pohranu, ne ograničavajući se na točke montiranja.

    • U načinu Direct I/O, moguće je pristupiti šifriranim datotekama kada fscrypt koristi inline enkripciju, u kojoj operacije šifriranja i dešifriranja obavlja kontroler pogona, a ne kernel. Sa redovnom enkripcijom kernela, pristup šifrovanim datotekama korišćenjem Direct I/O je još uvek nemoguć, pošto se datotekama pristupa zaobilazeći mehanizam baferovanja u kernelu.
    • NFS server podrazumevano uključuje podršku za NFSv3 protokol, koji sada ne zahteva odvojeno omogućavanje i dostupan je kada je NFS generalno omogućen. NFSv3 se smatra glavnom i uvijek podržanom verzijom NFS-a, a podrška za NFSv2 može biti ukinuta u budućnosti. Efikasnost čitanja sadržaja direktorija je značajno poboljšana.
    • ReiserFS sistem datoteka je zastario i očekuje se da će biti uklonjen 2025. Ukidanje ReiserFS-a će smanjiti napor potreban da se održe promjene na cijelom sistemu datoteka koje se odnose na podršku za novi API za montiranje, iomap i tomove.
    • Za F2FS sistem datoteka implementirana je mogućnost mapiranja korisničkih ID-ova montiranih sistema datoteka, koja se koristi za poređenje datoteka određenog korisnika na montiranoj stranoj particiji sa drugim korisnikom na trenutnom sistemu.
    • Kod za izračunavanje statistike u Device-mapper rukovaocima je prerađen, što je značajno poboljšalo tačnost obračuna u rukovaocima kao što je dm-crypt.
    • NVMe uređaji sada podržavaju 64-bitne kontrolne sume za provjeru integriteta.
    • Za exfat sistem datoteka, predložena je nova opcija montiranja "keep_last_dots" koja onemogućuje brisanje tačaka na kraju naziva datoteke (u Windows-u se tačke na kraju naziva datoteke po defaultu uklanjaju).
    • EXT4 poboljšava performanse fast_commit moda i povećava skalabilnost. Opcija montiranja “mb_optimize_scan”, koja omogućava povećanje performansi u uslovima velike fragmentacije sistema datoteka, prilagođena je za rad sa datotekama sa ekstentima.
    • Podrška za tokove pisanja u podsistemu koji podržava blok uređaje je ukinuta. Ova funkcija je predložena za SSD, ali nije bila široko rasprostranjena i trenutno ne postoje uređaji koji podržavaju ovaj način rada i malo je vjerovatno da će se pojaviti u budućnosti.
  • Memorijski i sistemski servisi
    • Započela je integracija skupa zakrpa, što omogućava značajno smanjenje vremena rekonstrukcije kernela restrukturiranjem hijerarhije datoteka zaglavlja i smanjenjem broja unakrsnih ovisnosti. Kernel 5.18 uključuje zakrpe koje optimizuju strukturu datoteka zaglavlja planera zadataka (kernel/sched). U poređenju sa prethodnim izdanjem, potrošnja CPU vremena pri sastavljanju kernela/scheda/koda smanjena je za 61%, a stvarno vreme smanjeno za 3.9% (sa 2.95 na 2.84 sek).
    • Kodu kernela je dozvoljeno korištenje standarda C11, objavljenog 2011. godine. Ranije je kod dodan kernelu morao biti u skladu sa ANSI C (C89) specifikacijom, formiranom još 1989. godine. U skriptama za izgradnju kernela 5.18, opcija ‘—std=gnu89’ je zamijenjena sa ‘—std=gnu11 -Wno-shift-negative-value’. Razmatrana je mogućnost korištenja C17 standarda, ali bi u ovom slučaju bilo potrebno povećati minimalnu podržanu verziju GCC-a, dok se uključivanje C11 podrške uklapa u trenutne zahtjeve za GCC verziju (5.1).
    • Poboljšane performanse planiranja zadataka na AMD procesorima sa Zen mikroarhitekturom, koji obezbeđuju višestruki Last Level Cache (LLC) za svaki čvor sa lokalnim memorijskim kanalima. Nova verzija eliminiše LLC neravnotežu između NUMA čvorova, što je dovelo do značajnog povećanja performansi za neke vrste opterećenja.
    • Alati za praćenje aplikacija u korisničkom prostoru su prošireni. Nova verzija kernela dodaje mogućnost za korisničke procese da kreiraju korisničke događaje i zapišu podatke u bafer praćenja, koji se mogu videti kroz standardne uslužne programe za praćenje kernela kao što su ftrace i perf. Događaji praćenja korisničkog prostora su izolirani od događaja praćenja kernela. Status događaja može se vidjeti kroz datoteku /sys/kernel/debug/tracing/user_events_status, a registracija događaja i snimanje podataka kroz datoteku /sys/kernel/debug/tracing/user_events_data.
    • Dodan mehanizam za praćenje (probe) poziva funkcija - fprobe. fprobe API je baziran na ftrace-u, ali je ograničen samo mogućnošću pričvršćivanja rukovatelja povratnim pozivima na ulazne točke funkcije i izlazne točke funkcije. Za razliku od kprobes i kretprobes, novi mehanizam vam omogućava da koristite jedan rukovalac za nekoliko funkcija odjednom.
    • Podrška za starije ARM procesore (ARMv4 i ARMv5) koji nisu opremljeni jedinicom za upravljanje memorijom (MMU) je ukinuta. Podrška za ARMv7-M sisteme bez MMU je zadržana.
    • Podrška za NDS32 arhitekturu nalik RISC-u koja se koristi u procesorima Andes Technologies je ukinuta. Kôd je uklonjen zbog nedostatka održavanja i nedostatka potražnje za podrškom za NDS32 u glavnom Linux kernelu (preostali korisnici koriste specijalizirane verzije kernela od proizvođača hardvera).
    • Podrazumevano, izgradnja kernela sa podrškom za format izvršne datoteke a.out je onemogućena za alfa i m68k arhitekture, koje nastavljaju da koriste ovaj format. Vjerovatno će podrška za naslijeđeni a.out format uskoro biti potpuno uklonjena iz kernela. O planovima za uklanjanje a.out formata raspravlja se od 2019. godine.
    • PA-RISC arhitektura pruža minimalnu podršku za vDSO (virtuelni dinamički dijeljeni objekti) mehanizam, koji pruža ograničen skup sistemskih poziva dostupnih u korisničkom prostoru bez promjene konteksta. vDSO podrška je omogućila implementaciju mogućnosti pokretanja sa neizvršnim stekom.
    • Dodata podrška za Intel HFI (Hardware Feedback Interface) mehanizam, koji omogućava hardveru da prenosi informacije u kernel o trenutnim performansama i energetskoj efikasnosti svakog CPU-a.
    • Dodan drajver za mehanizam Intel SDSi (Software-Defined Silicon) koji vam omogućava da kontrolišete uključivanje dodatnih funkcija u procesor (na primer, specijalizovane instrukcije i dodatna keš memorija). Ideja je da se čipovi mogu isporučiti po nižoj cijeni sa zaključanim naprednim funkcijama, koje se onda mogu “kupiti” i aktivirati dodatne mogućnosti bez hardverske zamjene čipa.
    • Drajver amd_hsmp je dodat da podrži AMD HSMP (Host System Management Port) interfejs, koji omogućava pristup funkcijama upravljanja procesorom kroz skup specijalnih registara koji su se pojavili u AMD EPYC serverskim procesorima počevši od Fam19h generacije. Na primjer, putem HSMP-a možete dobiti podatke o potrošnji energije i temperaturi, postaviti ograničenja frekvencije, aktivirati različite modove poboljšanja performansi i upravljati parametrima memorije.
    • Asinhroni I/O interfejs io_uring implementira opciju IORING_SETUP_SUBMIT_ALL za registraciju skupa deskriptora datoteka u prstenasti bafer i operaciju IORING_OP_MSG_RING za slanje signala iz jednog prstenastog bafera u drugi prstenasti bafer.
    • DAMOS (Data Access Monitoring-based Operation Schemes) mehanizam, koji omogućava oslobađanje memorije uzimajući u obzir učestalost pristupa memoriji, ima proširene mogućnosti za praćenje operacija memorije iz korisničkog prostora.
    • Treća serija zakrpa je integrisana sa implementacijom koncepta listova stranica, koji podsećaju na složene stranice, ali imaju poboljšanu semantiku i jasniju organizaciju rada. Korištenje tomova vam omogućava da ubrzate upravljanje memorijom u nekim podsistemima kernela. U predloženim zakrpama, funkcije upravljanja internom memorijom su prevedene u folije, uključujući varijacije funkcije get_user_pages(). Obezbeđena podrška za kreiranje velikih količina u kodu za čitanje unapred.
    • Sistem asemblera sada podržava USERCFLAGS i USERLDFLAGS varijable okruženja, sa kojima možete proslijediti dodatne zastavice kompajleru i linkeru.
    • U eBPF podsistemu, mehanizam BTF (BPF Type Format), koji pruža informacije za provjeru tipa u BPF pseudokodu, pruža mogućnost dodavanja napomena varijablama koje se odnose na memorijska područja u korisničkom prostoru. Napomene pomažu sistemu za verifikaciju BPF koda da bolje identifikuje i verifikuje pristup memoriji.
    • Predložen je novi rukovatelj alokacije memorije za pohranjivanje učitanih BPF programa, koji omogućava efikasnije korištenje memorije u situacijama kada se učitava veliki broj BPF programa.
    • Zastavica MADV_DONTNEED_LOCKED dodata je sistemskom pozivu madvise() koji obezbjeđuje alate za optimizaciju upravljanja procesnom memorijom, što dopunjuje postojeću MADV_DONTNEED zastavicu, preko koje se kernel može unaprijed obavijestiti o predstojećem oslobađanju memorijskog bloka, tj. da ovaj blok više nije potreban i da ga kernel može koristiti. Za razliku od MADV_DONTNEED, upotreba oznake MADV_DONTNEED_LOCKED je dozvoljena za memorijske stranice ukačene u RAM, koje se, kada se pozove madvise, izbacuju bez promjene statusa zakačenog i, u slučaju naknadnog pristupa bloku i generiranja „stranice“ greška", vraćaju se sa očuvanim povezom. Dodatno, dodana je izmjena koja dozvoljava MADV_DONTNEED zastavicu da se koristi sa velikim memorijskim stranicama u HugeTLB.
  • Virtuelizacija i sigurnost
    • Za arhitekturu x86, dodata je podrška za mehanizam zaštite toka naredbi Intel IBT (Indirect Branch Tracking), koji onemogućava korištenje tehnika izgradnje eksploatacije korištenjem tehnika programiranja orijentiranih na povratak (ROP, Return-Oriented Programming), u kojima se eksploatacija formira se u obliku lanca poziva koji već postoje u memoriji dijelova strojnih instrukcija koji završavaju instrukcijom povratka kontrole (u pravilu su to krajevi funkcija). Suština implementirane zaštitne metode je blokiranje indirektnih prijelaza na tijelo funkcije dodavanjem posebne ENDBR instrukcije na početak funkcije i omogućavanjem izvršenja indirektnog prijelaza samo u slučaju prijelaza na ovu instrukciju (indirektna poziv preko JMP i CALL uvijek mora pasti na ENDBR instrukciju, koja se nalazi na samom početku funkcije).
    • Omogućena strožija provjera granica međumemorije u funkcijama memcpy(), memmove() i memset(), koja se izvodi u vrijeme kompajliranja kada je omogućen način rada CONFIG_FORTIFY_SOURCE. Dodatna promjena se svodi na provjeru da li elementi struktura čija je veličina poznata prelaze granice. Napominje se da bi implementirana funkcija omogućila blokiranje svih prekoračenja bafera kernela vezanih za memcpy() identificiranih u najmanje posljednje tri godine.
    • Dodan je drugi dio koda za ažuriranu implementaciju RDRAND generatora pseudoslučajnih brojeva, koji je odgovoran za rad /dev/random i /dev/urandom uređaja. Nova implementacija je značajna po objedinjavanju rada /dev/random i /dev/urandom, dodavanju zaštite od pojave duplikata u toku slučajnih brojeva pri pokretanju virtuelnih mašina i prelasku na korištenje BLAKE2s hash funkcije umjesto SHA1 za operacije miješanja entropije. Promjena je poboljšala sigurnost generatora pseudo-slučajnih brojeva eliminacijom problematičnog SHA1 algoritma i eliminacijom prepisivanja vektora inicijalizacije RNG-a. Budući da je BLAKE2s algoritam superiorniji od SHA1 u performansama, njegova upotreba je također imala pozitivan učinak na performanse.
    • Za ARM64 arhitekturu, dodata je podrška za novi algoritam za autentifikaciju pokazivača - “QARMA3”, koji je brži od QARMA algoritma uz održavanje odgovarajućeg nivoa sigurnosti. Tehnologija vam omogućava da koristite specijalizirane ARM64 instrukcije za provjeru povratnih adresa korištenjem digitalnih potpisa koji su pohranjeni u neiskorištenim gornjim bitovima samog pokazivača.
    • Za ARM64 arhitekturu, implementirana je podrška za asembler sa uključivanjem u GCC 12 zaštitnog režima protiv prepisivanja povratne adrese iz funkcije u slučaju prelivanja bafera na steku. Suština zaštite je da se povratna adresa sačuva u zasebnom steku „senka“ nakon prenosa kontrole na funkciju i preuzimanja ove adrese pre izlaska iz funkcije.
    • Dodan je novi prsten za ključeve - „mašina“, koji sadrži ključeve vlasnika sistema (MOK, Machine Owner Keys), podržane u shim bootloaderu. Ovi ključevi se mogu koristiti za digitalno potpisivanje komponenti kernela učitanih u fazi nakon pokretanja (na primjer, moduli kernela).
    • Uklonjena podrška za asimetrične privatne ključeve za TPM-ove, koji su bili ponuđeni u zastarjeloj verziji TPM-a, imali su poznate sigurnosne probleme i nisu bili široko prihvaćeni u praksi.
    • Dodata zaštita podataka sa tipom size_t od prekoračenja cijelih brojeva. Kod uključuje rukovaoce size_mul(), size_add() i size_sub(), koji vam omogućavaju sigurno množenje, dodavanje i oduzimanje veličina sa tipom size_t.
    • Prilikom izrade kernela, omogućene su zastavice “-Warray-bounds” i “-Wzero-length-bounds”, koje prikazuju upozorenja kada indeks prelazi granicu niza i kada se koriste nizovi nulte dužine.
    • Virtio-crypto uređaj je dodao podršku za enkripciju pomoću RSA algoritma.
  • Mrežni podsistem
    • U implementaciji mrežnih mostova dodana je podrška za mod povezivanja porta (locked mode) u kojem korisnik može slati promet kroz port samo sa ovlaštene MAC adrese. Dodata je i mogućnost korištenja nekoliko struktura za procjenu stanja protokola STP (Spanning Tree Protocol). Ranije su VLAN-ovi mogli biti direktno mapirani samo na STP (1:1), pri čemu se svaki VLAN upravljao nezavisno. Nova verzija dodaje parametar mst_enable, kada je omogućen, stanje VLAN-a kontroliše MST (Multiple Spanning Trees) modul i povezivanje VLAN-ova može odgovarati M:N modelu.
    • Nastavljen je rad na integraciji alata u mrežni stog za praćenje razloga za ispuštanje paketa (šifre razloga). Šifra razloga se šalje kada se memorija povezana s paketom oslobodi i dozvoljava situacije kao što je odbacivanje paketa zbog grešaka u zaglavlju, otkrivanje lažiranja rp_filter, nevažeće kontrolne sume, ponestalo memorije, aktivirana IPSec XFRM pravila, nevažeći redni broj TCP, itd.
    • Moguće je prenijeti mrežne pakete iz BPF programa pokrenutih iz korisničkog prostora u režimu BPF_PROG_RUN, u kojem se BPF programi izvršavaju u kernelu, ali vraćaju rezultat u korisnički prostor. Paketi se prenose pomoću podsistema XDP (eXpress Data Path). Podržan je režim obrade paketa uživo, u kojem XDP procesor može preusmjeriti mrežne pakete u hodu na mrežni stog ili na druge uređaje. Takođe je moguće kreirati softverske generatore eksternog saobraćaja ili zameniti mrežne okvire u mrežni stog.
    • Za BPF programe pripojene mrežnim cgrupama, predložene su pomoćne funkcije za eksplicitno postavljanje povratne vrijednosti sistemskih poziva, što omogućava prenošenje potpunijih informacija o razlozima blokiranja sistemskog poziva.
    • XDP (eXpress Data Path) podsistem je dodao podršku za fragmentirane pakete smještene u više bafera, što vam omogućava da obrađujete jumbo okvire u XDP-u i koristite TSO/GRO (TCP segmentacija Offload/Generic Receive Offload) za XDP_REDIRECT.
    • Proces brisanja mrežnih imenskih prostora je značajno ubrzan, što je bilo traženo na nekim velikim sistemima sa velikim obimom saobraćaja.
  • Oprema
    • Amdgpu drajver podrazumevano uključuje tehnologiju adaptivne sinhronizacije FreeSync, koja vam omogućava da prilagodite brzinu osvežavanja informacija na ekranu, obezbeđujući glatke slike bez suza tokom igranja igrica i gledanja video zapisa. Aldebaran GPU podrška je najavljena kao stabilna.
    • I915 drajver dodaje podršku za Intel Alderlake N čipove i Intel DG2-G12 diskretne grafičke kartice (Arc Alchemist).
    • Nouveau drajver pruža podršku za veće bitrate za DP/eDP interfejse i podršku za lttprs (Link-Training Tunable PHY Repeaters) kablovske produžetke.
    • U drm (Direct Rendering Manager) podsistem u drajverima armada, exynos, gma500, hyperv, imx, ingenic, mcde, mediatek, msm, omap, rcar-du, rockchip, sprd, sti, tegra, tilcdc, xen i vc4 podrška za parametre dodat je nomodeset, koji vam omogućava da onemogućite prebacivanje video režima na nivou kernela i upotrebu alata za ubrzanje hardverskog renderovanja, ostavljajući samo funkcionalnost koja se odnosi na sistemski framebuffer.
    • Dodata podrška za ARM SoS Qualcomm Snapdragon 625/632 (koristi se u LG Nexus 5X i Fairphone FP3 pametnim telefonima), Samsung Exynos 850, Samsung Exynos 7885 (koristi se u Samsung Galaxy A8), Airoha (Mediatek/EcoNet) EN7523, Mediatek6582Prestiti m5008 tablet 3G), Microchip Lan966, Renesas RZ/G2LC, RZ/V2L, Tesla FSD, TI K3/AM62 i i.MXRTxxxx.
    • Dodata podrška za ARM uređaje i ploče od Broadcom (Raspberry Pi Zero 2 W), Qualcomm (Google Herobrine R1 Chromebook, SHIFT6mq, Samsung Galaxy Book2), Rockchip (Pine64 PineNote, Bananapi-R2-Pro, STM32 Emtrion emSBS, Samsung Galaxy Tab S , Prestigio PMT5008 3G tablet), Allwinner (A20-Marsboard), Amlogic (Amediatek X96-AIR, CYX A95XF3-AIR, Haochuangy H96-Max, Amlogic AQ222 i OSMC Vero 4K+), Aspeed (Quanta S6ROMED8, ASHMBU) / Armada (Ctera C3 V200 i V1 NAS), Mstar (DongShanPiOne, Miyoo Mini), NXP i.MX (Protonic PRT2MM, emCON-MX8M Mini, Toradex Verdin, Gateworks GW8).
    • Dodata podrška za zvučne sisteme i kodeke AMD PDM, Atmel PDMC, Awinic AW8738, i.MX TLV320AIC31xx, Intel CS35L41, ESSX8336, Mediatek MT8181, nVidia Tegra234, Qualcomm SC7280/V, Renesas 2 Texas Instruments. Dodata početna implementacija drajvera za zvuk za Intel AVS DSP čip. Ažurirana podrška za drajvere za Intel ADL i Tegra585, i napravljene promjene za poboljšanje audio podrške na Dell, HP, Lenovo, ASUS, Samsung i Clevo uređajima.

    Istovremeno, Latinoamerička fondacija za slobodni softver formirala je verziju potpuno besplatnog kernela 5.18 - Linux-libre 5.18-gnu, očišćenu od elemenata firmvera i drajvera koji sadrže neslobodne komponente ili sekcije koda, čiji je opseg ograničen. od strane proizvođača. Novo izdanje čisti drajvere za MIPI DBI panele, VPU Amphion, WiFi MediaTek MT7986 WMAC, Mediatek MT7921U (USB) i Realtek 8852a/8852c, Intel AVS i Texas Instruments TAS5805M zvučne čipove. DTS fajlovi su takođe očišćeni za različite Qualcommove SoC-ove sa procesorima baziranim na AArch64 arhitekturi. Ažurirani kod za čišćenje mrlja u drajverima i podsistemima AMD GPU-a, MediaTek MT7915, Silicon Labs WF200+ WiFi, Mellanox Spectru Ethernet, Realtek rtw8852c, Qualcomm Q6V5, Wolfson ADSP, MediaTek HCI UART.

izvor: opennet.ru

Dodajte komentar