Izdanje jezgre Linuxa 5.18

Nakon dva mjeseca razvoja, Linus Torvalds predstavio je izdanje Linux kernela 5.18. Među najznačajnijim promjenama: provedeno je veliko čišćenje zastarjele funkcionalnosti, Reiserfs FS je proglašen zastarjelim, implementirani su događaji praćenja korisničkih procesa, dodana je podrška za mehanizam za blokiranje Intel IBT eksploatacija, omogućen je način detekcije prekoračenja međuspremnika kada pomoću funkcije memcpy(), dodan je mehanizam za praćenje poziva funkcije fprobe, poboljšana je izvedba planera zadataka na AMD Zen CPU-ima, uključen je upravljački program za upravljanje funkcionalnošću Intel CPU-a (SDS), integrirane su neke zakrpe za restrukturiranje datoteka zaglavlja, a odobrena je i uporaba standarda C11.

Nova verzija uključuje 16206 popravaka od 2127 programera (u prošlom izdanju bilo je 14203 popravka od 1995 programera), veličina zakrpe je 108 MB (promjene su utjecale na 14235 datoteka, dodano je 1340982 redaka koda, 593836 redaka je izbrisano). Oko 44% svih promjena uvedenih u 5.18 odnosi se na upravljačke programe uređaja, približno 16% promjena odnosi se na ažuriranje koda specifičnog za hardverske arhitekture, 11% se odnosi na mrežni stog, 3% se odnosi na sustave datoteka, a 3% povezani su s unutarnjim podsustavima jezgre.

Ključne inovacije u kernelu 5.18:

  • Diskovni podsustav, I/O i datotečni sustavi
    • Datotečni sustav Btrfs dodao je podršku za prosljeđivanje komprimiranih podataka prilikom izvođenja operacija slanja i primanja. Prethodno, kada se koristilo slanje/primanje, strana pošiljatelj dekomprimirala je podatke pohranjene u komprimiranom obliku, a strana primatelja ponovno ih je komprimirala prije nego što ih je zapisala. U jezgri 5.18, aplikacije korisničkog prostora koje koriste pozive za slanje/primanje dobile su mogućnost prijenosa komprimiranih podataka bez ponovnog pakiranja. Funkcionalnost je implementirana zahvaljujući novim ioctl operacijama BTRFS_IOC_ENCODED_READ i BTRFS_IOC_ENCODED_WRITE, koje vam omogućuju izravno čitanje i pisanje informacija u opsegu.

      Osim toga, Btrfs poboljšava performanse fsync. Dodana je mogućnost dedupliciranja i izvođenja reflinka (kloniranje metapodataka datoteke stvaranjem 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 ugrađenu enkripciju, u kojoj operacije šifriranja i dešifriranja obavlja upravljač pogona, a ne kernel. Uz redovitu enkripciju kernela, pristup šifriranim datotekama korištenjem Direct I/O još uvijek je nemoguć, jer se datotekama pristupa zaobilazeći mehanizam međuspremnika u kernelu.
    • NFS poslužitelj uključuje podršku za NFSv3 protokol prema zadanim postavkama, koji sada ne zahtijeva zasebno omogućavanje i dostupan je kada je NFS općenito 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. Učinkovitost čitanja sadržaja imenika značajno je poboljšana.
    • Datotečni sustav ReiserFS je zastario i očekuje se da će biti uklonjen 2025. Ukidanje ReiserFS-a smanjit će napor potreban za održavanje promjena na cijelom datotečnom sustavu koje se odnose na podršku za novi API za montiranje, iomap i tomove.
    • Za F2FS datotečni sustav implementirana je mogućnost mapiranja korisničkih ID-ova montiranih datotečnih sustava, što se koristi za usporedbu datoteka određenog korisnika na montiranoj stranoj particiji s drugim korisnikom na trenutnom sustavu.
    • Kôd za izračun statistike u rukovateljima Device-mapper je prerađen, što je značajno poboljšalo točnost računovodstva u rukovateljima kao što je dm-crypt.
    • NVMe uređaji sada podržavaju 64-bitne kontrolne zbrojeve za provjeru integriteta.
    • Za exfat datotečni sustav predložena je nova opcija montiranja "keep_last_dots", koja onemogućuje brisanje točaka na kraju naziva datoteke (u sustavu Windows, točke na kraju naziva datoteke uklanjaju se prema zadanim postavkama).
    • EXT4 poboljšava performanse načina rada fast_commit i povećava skalabilnost. Opcija montiranja “mb_optimize_scan”, koja omogućuje povećanje performansi u uvjetima velike fragmentacije datotečnog sustava, prilagođena je za rad s datotekama s ekstentima.
    • Podrška za tokove pisanja u podsustavu koji podržava blok uređaje je prekinuta. Ova je značajka predložena za SSD-ove, ali nije bila široko rasprostranjena i trenutno nema uređaja koji podržavaju ovaj način rada i malo je vjerojatno da će se pojaviti u budućnosti.
  • Memorija i usluge sustava
    • Počela je integracija skupa zakrpa, što omogućuje značajno smanjenje vremena ponovne izgradnje kernela restrukturiranjem hijerarhije datoteka zaglavlja i smanjenjem broja unakrsnih ovisnosti. Kernel 5.18 uključuje zakrpe koje optimiziraju strukturu datoteka zaglavlja planera zadataka (kernel/sched). U usporedbi s prethodnim izdanjem, potrošnja procesorskog vremena pri sastavljanju kernel/sched/koda smanjena je za 61%, a stvarno vrijeme za 3.9% (s 2.95 na 2.84 s).
    • Kodu kernela dopušteno je koristiti standard C11, objavljen 2011. Prethodno je kod dodan u kernel morao biti u skladu sa specifikacijom ANSI C (C89), formiranom davne 1989. godine. U skriptama za izgradnju jezgre 5.18 opcija '—std=gnu89' zamijenjena je s '—std=gnu11 -Wno-shift-negative-value'. Razmatrana je mogućnost korištenja C17 standarda, no u tom slučaju bi bilo potrebno povećati minimalno podržanu verziju GCC-a, dok se uključivanje C11 podrške uklapa u trenutne zahtjeve za GCC verziju (5.1).
    • Poboljšana izvedba raspoređivanja zadataka na AMD procesorima sa Zen mikroarhitekturom, koji pružaju višestruku predmemoriju zadnje razine (LLC) za svaki čvor s lokalnim memorijskim kanalima. Nova verzija eliminira LLC neravnotežu između NUMA čvorova, što je dovelo do značajnog povećanja performansi za neke vrste radnog opterećenja.
    • Alati za praćenje aplikacija u korisničkom prostoru su prošireni. Nova verzija kernela dodaje mogućnost korisničkim procesima da kreiraju korisničke događaje i zapisuju podatke u međuspremnik praćenja, koji se mogu vidjeti putem standardnih uslužnih programa za praćenje kernela kao što su ftrace i perf. Događaji praćenja korisničkog prostora izolirani su od događaja praćenja kernela. Status događaja moguće je vidjeti kroz datoteku /sys/kernel/debug/tracing/user_events_status, a registraciju događaja i snimanje podataka kroz datoteku /sys/kernel/debug/tracing/user_events_data.
    • Dodan mehanizam za praćenje (probe) poziva funkcija - fprobe. API fprobe temelji se na ftraceu, ali je ograničen samo sposobnošću pripajanja rukovatelja povratnim pozivima ulaznim točkama funkcija i točkama izlaza funkcija. Za razliku od kprobes i kretprobes, novi mehanizam vam omogućuje korištenje jednog rukovatelja za nekoliko funkcija odjednom.
    • Podrška za starije ARM procesore (ARMv4 i ARMv5) koji nisu opremljeni jedinicom za upravljanje memorijom (MMU) je prekinuta. Podrška za ARMv7-M sustave bez MMU-a je zadržana.
    • Podrška za NDS32 arhitekturu sličnu RISC-u koja se koristi u procesorima Andes Technologies je prekinuta. Kod je uklonjen zbog nedostatka održavanja i nedostatka podrške za NDS32 u glavnom Linux kernelu (preostali korisnici koriste specijalizirane verzije kernela proizvođača hardvera).
    • Prema zadanim postavkama, izgradnja kernela s podrškom za format izvršne datoteke a.out onemogućena je za alpha i m68k arhitekture, koje nastavljaju koristiti ovaj format. Vjerojatno će podrška za naslijeđeni format a.out uskoro biti potpuno uklonjena iz kernela. O planovima za uklanjanje a.out formata raspravlja se od 2019.
    • PA-RISC arhitektura pruža minimalnu podršku za mehanizam vDSO (virtualni dinamički dijeljeni objekti), koji pruža ograničen skup sistemskih poziva dostupnih u korisničkom prostoru bez prebacivanja konteksta. vDSO podrška omogućila je implementaciju mogućnosti pokretanja s neizvršnim stogom.
    • Dodana je podrška za mehanizam Intel HFI (Hardware Feedback Interface), koji omogućuje hardveru prijenos informacija jezgri o trenutnoj izvedbi i energetskoj učinkovitosti svakog CPU-a.
    • Dodan je upravljački program za mehanizam Intel SDSi (Software-Defined Silicon), koji vam omogućuje kontrolu uključivanja dodatnih značajki u procesor (na primjer, specijalizirane upute i dodatna predmemorija). Ideja je da se čipovi mogu isporučiti po nižoj cijeni sa zaključanim naprednim funkcijama, koje se zatim mogu "kupiti" i aktivirati dodatne mogućnosti bez hardverske zamjene čipa.
    • Dodan je upravljački program amd_hsmp za podršku AMD HSMP (Host System Management Port) sučelja, koje omogućuje pristup funkcijama upravljanja procesorom putem skupa posebnih registara koji su se pojavili u poslužiteljskim procesorima AMD EPYC 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 načine poboljšanja performansi i upravljati parametrima memorije.
    • Asinkrono I/O sučelje io_uring implementira opciju IORING_SETUP_SUBMIT_ALL za registriranje skupa deskriptora datoteka u međuspremniku prstena i operaciju IORING_OP_MSG_RING za slanje signala iz jednog međuspremnika prstena u drugi međuspremnik prstena.
    • DAMOS (Data Access Monitoring-based Operation Schemes) mehanizam, koji omogućuje oslobađanje memorije uzimajući u obzir učestalost pristupa memoriji, ima proširene mogućnosti za praćenje memorijskih operacija iz korisničkog prostora.
    • Treća serija zakrpa integrirana je s implementacijom koncepta folija stranica, koje nalikuju složenim stranicama, ali imaju poboljšanu semantiku i jasniju organizaciju rada. Korištenje tomova omogućuje vam da ubrzate upravljanje memorijom u nekim podsustavima jezgre. U predloženim zakrpama, funkcije upravljanja internom memorijom prevedene su u folije, uključujući varijacije funkcije get_user_pages(). Pružena podrška za stvaranje velikih volumena u kodu za čitanje unaprijed.
    • Asemblerski sustav sada podržava USERCFLAGS i USERLDFLAGS varijable okruženja, s kojima možete proslijediti dodatne oznake kompajleru i povezivaču.
    • U eBPF podsustavu, BTF (BPF Type Format) mehanizam, koji pruža informacije o provjeri tipa u BPF pseudokod, pruža mogućnost dodavanja komentara varijablama koje se odnose na memorijska područja u korisničkom prostoru. Bilješke pomažu sustavu provjere BPF koda da bolje identificira i provjeri pristupe memoriji.
    • Predložen je novi rukovatelj dodjelom memorije za pohranjivanje učitanih BPF programa, koji omogućuje učinkovitije korištenje memorije u situacijama kada se učitava veliki broj BPF programa.
    • Oznaka MADV_DONTNEED_LOCKED dodana je sistemskom pozivu madvise(), koji pruža alate za optimiziranje upravljanja procesnom memorijom, što nadopunjuje postojeću zastavu MADV_DONTNEED, putem koje se kernel može unaprijed obavijestiti o skorom 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 dopuštena je za memorijske stranice prikvačene u RAM-u, koje se, kada se pozove madvise, izbacuju bez promjene statusa prikvačenosti i, u slučaju naknadnog pristupa bloku i generiranja “stranice greška”, vraćaju se sa očuvanim uvezom. Dodatno, dodana je promjena koja omogućuje korištenje oznake MADV_DONTNEED s velikim memorijskim stranicama u HugeTLB-u.
  • Virtualizacija i sigurnost
    • Za arhitekturu x86 dodana je podrška za mehanizam zaštite tijeka naredbi Intel IBT (Indirect Branch Tracking), koji sprječava korištenje tehnika konstrukcije exploit-a koristeći tehnike povratno orijentiranog programiranja (ROP, Return-Oriented Programming), u kojima exploit 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). Bit implementirane metode zaštite je blokiranje neizravnih prijelaza na tijelo funkcije dodavanjem posebne ENDBR instrukcije na početku funkcije i dopuštanjem izvršenja neizravnog prijelaza samo u slučaju prijelaza na ovu instrukciju (neizravni poziv kroz JMP i CALL moraju uvijek pasti na ENDBR instrukciju, koja se nalazi na samom početku funkcije).
    • Omogućena je stroža provjera granica međuspremnika u funkcijama memcpy(), memmove() i memset(), koja se izvodi tijekom kompajliranja kada je omogućen način rada CONFIG_FORTIFY_SOURCE. Dodatna promjena svodi se na provjeru izlaze li elementi struktura čija je veličina poznata izvan granica. Napominje se da bi implementirana značajka omogućila blokiranje svih prekoračenja međuspremnika kernela povezanih s 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 poznata je po objedinjavanju rada /dev/random i /dev/urandom, dodavanju zaštite od pojavljivanja duplikata u nizu nasumičnih brojeva prilikom pokretanja virtualnih strojeva i prelasku na korištenje BLAKE2s hash funkcije umjesto SHA1 za operacije miješanja entropije. Promjena je poboljšala sigurnost generatora pseudoslučajnih brojeva uklanjanjem problematičnog SHA1 algoritma i uklanjanjem prepisivanja RNG inicijalizacijskog vektora. Budući da je algoritam BLAKE2s bolji od SHA1 u izvedbi, njegova je upotreba također imala pozitivan učinak na izvedbu.
    • Za arhitekturu ARM64 dodana je podrška za novi algoritam za autentifikaciju pokazivača - “QARMA3”, koji je brži od QARMA algoritma uz održavanje odgovarajuće razine sigurnosti. Tehnologija vam omogućuje korištenje specijaliziranih ARM64 instrukcija za provjeru povratnih adresa pomoću digitalnih potpisa koji su pohranjeni u neiskorištenim gornjim bitovima samog pokazivača.
    • Za arhitekturu ARM64 implementirana je podrška za sklapanje s uključivanjem u GCC 12 načina zaštite od prepisivanja povratne adrese iz funkcije u slučaju prekoračenja međuspremnika na stogu. Bit zaštite je spremiti povratnu adresu u zasebnu "sjenu" stog nakon prijenosa kontrole na funkciju i dohvaćanje te adrese prije izlaska iz funkcije.
    • Dodan je novi privjesak za ključeve - “stroj”, koji sadrži vlasničke ključeve sustava (MOK, Machine Owner Keys), podržane u podložnom pokretačkom programu. Ovi se ključevi mogu koristiti za digitalno potpisivanje komponenti jezgre učitanih u fazi nakon podizanja sustava (na primjer, moduli jezgre).
    • Uklonjena podrška za asimetrične privatne ključeve za TPM-ove, koji su bili ponuđeni u naslijeđenoj verziji TPM-a, imali su poznate sigurnosne probleme i nisu široko prihvaćeni u praksi.
    • Dodana zaštita podataka s tipom size_t od cjelobrojnih preljeva. Kod uključuje rukovatelje size_mul(), size_add() i size_sub(), koji vam omogućuju sigurno množenje, zbrajanje i oduzimanje veličina s tipom size_t.
    • Prilikom izgradnje kernela omogućene su zastavice “-Warray-bounds” i “-Wzero-length-bounds” koje prikazuju upozorenja kada indeks prijeđe granicu niza i kada se koriste nizovi nulte duljine.
    • Virtio-crypto uređaj ima dodatnu podršku za enkripciju pomoću RSA algoritma.
  • Mrežni podsustav
    • U implementaciji mrežnih mostova dodana je podrška za port binding mod (locked mode) u kojem korisnik može slati promet kroz port samo s autorizirane MAC adrese. Također je dodana mogućnost korištenja nekoliko struktura za procjenu stanja STP (Spanning Tree Protocol) protokola. Prije su se VLAN-ovi mogli mapirati samo izravno u STP (1:1), pri čemu se svakim VLAN-om upravljalo neovisno. Nova verzija dodaje parametar mst_enable, kada je omogućen, stanje VLAN-ova kontrolira MST (Multiple Spanning Trees) modul i vezanje VLAN-ova može odgovarati M:N modelu.
    • Nastavljen je rad na integraciji alata u mrežni skup za praćenje razloga za ispuštanje paketa (šifre razloga). Šifra razloga šalje se kada se memorija povezana s paketom oslobodi i dopušta situacije kao što je odbacivanje paketa zbog pogrešaka u zaglavlju, otkrivanje lažiranja rp_filterom, nevažeći kontrolni zbroj, nedostatak memorije, pokrenuta 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 BPF_PROG_RUN modu, u kojem se BPF programi izvršavaju u kernelu, ali vraćaju rezultat u korisnički prostor. Paketi se prenose pomoću podsustava XDP (eXpress Data Path). Podržan je način 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đer je moguće izraditi softverske generatore vanjskog prometa ili zamjenske 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ćuje prenošenje potpunijih informacija o razlozima blokiranja sistemskih poziva.
    • Podsustav XDP (eXpress Data Path) dodao je podršku za fragmentirane pakete smještene u više međuspremnika, što vam omogućuje obradu Jumbo okvira u XDP-u i korištenje TSO/GRO (TCP Segmentation Offload/Generic Receive Offload) za XDP_REDIRECT.
    • Značajno je ubrzan proces brisanja mrežnih imenskih prostora, što je bilo traženo na nekim velikim sustavima s velikim volumenom prometa.
  • Оборудование
    • Amdgpu upravljački program prema zadanim postavkama uključuje tehnologiju adaptivne sinkronizacije FreeSync, koja vam omogućuje podešavanje brzine osvježavanja informacija na zaslonu, osiguravajući glatke slike bez poderotina tijekom igranja igara i gledanja videa. Podrška za Aldebaran GPU najavljena je kao stabilna.
    • Upravljački program i915 dodaje podršku za Intel Alderlake N čipove i Intel DG2-G12 diskretne grafičke kartice (Arc Alchemist).
    • Nouveau upravljački program pruža podršku za veće brzine prijenosa za DP/eDP sučelja i podršku za lttprs (Link-Training Tunable PHY Repeaters) kabelske produživače.
    • U podsustavu drm (Direct Rendering Manager) u drajverima podrška za parametre armada, exynos, gma500, hyperv, imx, ingenic, mcde, mediatek, msm, omap, rcar-du, rockchip, sprd, sti, tegra, tilcdc, xen i vc4 je dodan nomodeset, koji vam omogućuje da onemogućite prebacivanje video modova na razini kernela i korištenje hardverskih alata za ubrzanje renderiranja, ostavljajući samo funkcionalnost povezanu sa međuspremnikom okvira sustava.
    • Dodana podrška za ARM SoS Qualcomm Snapdragon 625/632 (koristi se u pametnim telefonima LG Nexus 5X i Fairphone FP3), Samsung Exynos 850, Samsung Exynos 7885 (koristi se u Samsung Galaxy A8), Airoha (Mediatek/EcoNet) EN7523, Mediatek mt6582 (Prestigio PMT5008 tablet 3G), Microchip Lan966, Renesas RZ/G2LC, RZ/V2L, Tesla FSD, TI K3/AM62 i i.MXRTxxxx.
    • Dodana podrška za ARM uređaje i ploče iz Broadcoma (Raspberry Pi Zero 2 W), Qualcomma (Google Herobrine R1 Chromebook, SHIFT6mq, Samsung Galaxy Book2), Rockchipa (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 S6Q, ASRock ROMED8HM3), Marvell MVEBU / Armada (Ctera C200 V1 i V2 NAS), Mstar (DongShanPiOne, Miyoo Mini), NXP i.MX (Protonic PRT8MM, emCON-MX8M Mini, Toradex Verdin, Gateworks GW7903).
    • Dodana podrška za zvučne sustave i kodeke AMD PDM, Atmel PDMC, Awinic AW8738, i.MX TLV320AIC31xx, Intel CS35L41, ESSX8336, Mediatek MT8181, nVidia Tegra234, Qualcomm SC7280, Renesas RZ/V2L, Texas Instruments TAS585M. Dodana početna implementacija upravljačkog programa zvuka za Intel AVS DSP čip. Ažurirana je podrška za upravljačke programe za Intel ADL i Tegra234 i napravljene promjene za poboljšanje audio podrške na uređajima Dell, HP, Lenovo, ASUS, Samsung i Clevo.

    U isto vrijeme, Latinoamerička zaklada za slobodni softver formirala je verziju potpuno besplatnog kernela 5.18 - Linux-libre 5.18-gnu, očišćenog od elemenata firmvera i upravljačkih programa koji sadrže neslobodne komponente ili dijelove koda, čiji je opseg ograničen od strane proizvođača. Novo izdanje čisti upravljačke programe za MIPI DBI ploče, VPU Amphion, WiFi MediaTek MT7986 WMAC, Mediatek MT7921U (USB) i Realtek 8852a/8852c, Intel AVS i Texas Instruments TAS5805M zvučne čipove. DTS datoteke također su očišćene za različite Qualcomm SoC-ove s procesorima koji se temelje na AArch64 arhitekturi. Ažurirani kod za čišćenje mrlja u upravljačkim programima i podsustavima 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