Izdanje kernela Linux 5.19

Nakon dva mjeseca razvoja, Linus Torvalds je predstavio izdanje Linux kernela 5.19. Među najznačajnijim promjenama: podrška za arhitekturu procesora LoongArch, integracija "BIG TCP" zakrpa, način rada na zahtjev u fscache, uklanjanje koda za podršku a.out formata, mogućnost korištenja ZSTD za kompresiju firmvera, sučelje za upravljanje izbacivanjem memorije iz korisničkog prostora, povećanje pouzdanosti i performansi generatora pseudo-slučajnih brojeva, podrška za Intel IFS (In-Field Scan), AMD SEV-SNP (Secure Nested Paging), Intel TDX (Trusted Domain Extensions) i ARM SME (Scalable Matrix Extension) ekstenzije.

U najavi, Linus je rekao da će najvjerovatnije sljedeće izdanje kernela biti označeno brojem 6.0, pošto je grana 5.x akumulirala dovoljno izdanja da promijeni prvi broj u broju verzije. Promjena numeracije se vrši iz estetskih razloga i predstavlja formalni korak koji ublažava nelagodu zbog gomilanja velikog broja izdanja u seriji.

Linus je takođe spomenuo da je koristio Apple laptop baziran na ARM64 arhitekturi (Apple Silicon) sa Linux okruženjem baziranim na Asahi Linux distribuciji za kreiranje izdanja. To nije Linusova primarna radna stanica, ali on je koristio platformu da testira njenu prikladnost za rad kernela i da osigura da može proizvesti izdanja kernela dok putuje sa laganim laptopom pri ruci. Prethodno, prije mnogo godina, Linus je imao iskustva u korištenju Apple opreme za razvoj - jednom je koristio PC baziran na ppc970 CPU-u i Macbook Air laptop.

Nova verzija uključuje 16401 popravku od 2190 programera (u prošlom izdanju je bilo 16206 popravki od 2127 programera), veličina zakrpe je 90 MB (promjene su uticale na 13847 datoteka, dodano je 1149456 linija koda, 349177 linija je izbrisano). Oko 39% svih promjena uvedenih u 5.19 odnosi se na drajvere uređaja, otprilike 21% promjena se odnosi na ažuriranje koda specifičnog za hardverske arhitekture, 11% se odnosi na mrežni stog, 4% se odnosi na sistem datoteka i 3% odnose se na interne podsisteme kernela.

Ključne inovacije u kernelu 5.19:

  • Diskovni podsistem, I/O i sistemi datoteka
    • EROFS (Enhanced Read-Only File System) sistem datoteka, namijenjen za korištenje na particijama samo za čitanje, konvertiran je da koristi fscache podsistem, koji obezbjeđuje keširanje podataka. Promena je značajno poboljšala performanse sistema u kojima se veliki broj kontejnera pokreće sa slike zasnovane na EROFS.
    • Mod čitanja na zahtjev je dodat u fscache podsistem, koji se koristi za optimizaciju EROFS-a. Novi režim vam omogućava da organizujete keširanje čitanja sa FS slika koje se nalaze u lokalnom sistemu. Za razliku od inicijalno dostupnog načina rada, koji je fokusiran na keširanje u lokalnom sistemu datoteka podataka koji se prenose kroz mrežne sisteme datoteka, način rada „na zahtjev“ delegira funkcije preuzimanja podataka i njihovog upisivanja u keš na poseban pozadinski proces koji se izvodi u korisničkom prostoru.
    • XFS pruža mogućnost pohranjivanja milijardi proširenih atributa u i-čvor. Maksimalni broj ekstenata za jedan fajl je povećan sa 4 milijarde na 247. Implementiran je način za atomsko ažuriranje nekoliko proširenih atributa datoteke odjednom.
    • Datotečni sistem Btrfs je optimizovao rad sa zaključavanjem, što je omogućilo približno 7% povećanje performansi kada se direktno piše u režimu rada sada. Performanse operacija u NOCOW modu (bez kopiranja na upisivanje) povećane su za približno 3%. Opterećenje keša stranice prilikom pokretanja naredbe “send” je smanjeno. Minimalna veličina podstranica je smanjena sa 64K na 4K (mogu se koristiti podstranice manje od kernel stranica). Napravljen je prijelaz sa korištenja radix stabla na XArrays algoritam.
    • NFS serveru je dodat način rada kako bi se produžilo očuvanje stanja zaključavanja koje je postavio klijent koji je prestao da odgovara na zahtjeve. Novi način vam omogućava da odgodite brisanje zaključavanja do jednog dana osim ako drugi klijent ne zatraži konkurentno zaključavanje. U normalnom načinu rada, blokiranje se briše 90 sekundi nakon što klijent prestane da odgovara.
    • Podsistem za praćenje događaja u fanotify FS implementira oznaku FAN_MARK_EVICTABLE, pomoću koje možete onemogućiti pričvršćivanje ciljnih i-čvorova u keš memoriju, na primjer, da ignorišete podgrane bez zakačenja njihovih dijelova u keš memoriju.
    • Drajver za sistem datoteka FAT32 je dodao podršku za dobijanje informacija o vremenu kreiranja datoteke putem statx sistemskog poziva uz implementaciju efikasnije i funkcionalnije verzije stat(), koja vraća proširene informacije o datoteci.
    • Značajne optimizacije su napravljene na exFAT drajveru kako bi se omogućilo istovremeno brisanje grupe sektora kada je aktivan 'dirsync' mod, umjesto sekvencijalnog brisanja sektor po sektor. Smanjenjem broja zahtjeva za blokiranje nakon optimizacije, performanse kreiranja velikog broja direktorija na SD kartici porasle su za više od 73-85%, ovisno o veličini klastera.
    • Kernel uključuje prvo korektivno ažuriranje ntfs3 drajvera. Pošto je ntfs3 uključen u 5.15 kernel prošlog oktobra, drajver nije ažuriran i komunikacija sa programerima je izgubljena, ali programeri su sada nastavili sa objavljivanjem promena. Predložene zakrpe su eliminisale greške koje su dovele do curenja memorije i rušenja, rešile probleme sa izvršavanjem xfstestova, očistile neiskorišteni kod i popravile greške u kucanju.
    • Za OverlayFS je implementirana mogućnost mapiranja korisničkih ID-ova montiranih sistema datoteka, koja se koristi za uparivanje datoteka određenog korisnika na montiranoj stranoj particiji sa drugim korisnikom na trenutnom sistemu.
  • Memorijski i sistemski servisi
    • Dodata početna podrška za arhitekturu skupa instrukcija LoongArch koja se koristi u procesorima Loongson 3 5000, koja implementira novi RISC ISA, sličan MIPS i RISC-V. Arhitektura LoongArch dostupna je u tri vrste: smanjena 32-bitna (LA32R), obična 32-bitna (LA32S) i 64-bitna (LA64).
    • Uklonjen je kod za podršku formatu izvršne datoteke a.out, koji je zastario u izdanju 5.1. Format a.out je dugo zastario na Linux sistemima, a generiranje a.out datoteka nije podržano od strane modernih alata u zadanim Linux konfiguracijama. Učitavač za a.out fajlove može se u potpunosti implementirati u korisnički prostor.
    • Podrška za opcije pokretanja specifične za x86 je ukinuta: nosp, nosmap, nosmep, noexec i noclflush).
    • Podrška za zastarjelu CPU h8300 arhitekturu (Renesas H8/300), koja je dugo ostala bez podrške, je ukinuta.
    • Proširene mogućnosti koje se odnose na reagovanje na detekciju podijeljenih zaključavanja („split locks“) koje se javljaju prilikom pristupa neusklađenim podacima u memoriji zbog činjenice da prilikom izvršavanja atomske instrukcije, podaci prelaze dvije CPU keš linije. Takve blokade dovode do značajnog pada performansi. Ako je ranije, po defaultu, kernel izdavao upozorenje s informacijama o procesu koji je izazvao blokiranje, sada će problematični proces biti dodatno usporen kako bi se očuvale performanse ostatka sistema.
    • Dodata podrška za IFS (In-Field Scan) mehanizam implementiran u Intel procesore, koji vam omogućava da pokrenete dijagnostičke testove niskog nivoa CPU-a koji mogu identificirati probleme koji nisu otkriveni standardnim alatima na osnovu kodova za ispravljanje grešaka (ECC) ili paritetnih bitova . Izvršeni testovi su u obliku firmvera koji se može preuzeti, dizajniran slično kao kod ažuriranja mikrokoda. Rezultati testa su dostupni putem sysfs-a.
    • Dodata mogućnost ugrađivanja bootconfig datoteke u kernel, što omogućava, pored opcija komandne linije, da se odrede parametri kernela kroz datoteku postavki. Ugrađivanje se vrši pomoću opcije montaže 'CONFIG_BOOT_CONFIG_EMBED_FILE="/PATH/TO/BOOTCONFIG/FILE"'. Prethodno je bootconfig određen prilaganjem initrd slike. Integracija u kernel omogućava da se bootconfig koristi u konfiguracijama bez initrd-a.
    • Implementirana je mogućnost preuzimanja firmvera komprimovanog pomoću Zstandardnog algoritma. Skup kontrolnih datoteka /sys/class/firmware/* je dodat u sysfs, omogućavajući vam da pokrenete učitavanje firmvera iz korisničkog prostora.
    • Io_uring asinhroni I/O sučelje nudi novu zastavicu, IORING_RECVSEND_POLL_FIRST, koja će, kada se postavi, prvo poslati mrežnu operaciju na obradu pomoću prozivanja, što može uštedjeti resurse u situacijama kada je obrada operacije s određenim kašnjenjem prihvatljiva. io_uring je također dodao podršku za socket() sistemski poziv, predložio nove zastavice za pojednostavljenje upravljanja deskriptorima datoteka, dodao "multi-shot" mod za prihvaćanje nekoliko veza odjednom u pozivu accept() i dodao operacije za prosljeđivanje NVMe komande direktno na uređaj.
    • Arhitektura Xtensa pruža podršku za KCSAN (Kernel Concurrency Sanitizer) alat za otklanjanje grešaka, dizajniran da dinamički detektuje uslove trke unutar kernela. Takođe je dodata podrška za režim mirovanja i koprocesore.
    • Za arhitekturu m68k (Motorola 68000) implementirana je virtuelna mašina (simulator platforme) zasnovana na Android Goldfish emulatoru.
    • Za arhitekturu AArch64 implementirana je podrška za Armv9-A SME (Scalable Matrix Extension) ekstenzije.
    • eBPF podsistem omogućava pohranjivanje ukucanih pokazivača u strukture mape, a također dodaje podršku za dinamičke pokazivače.
    • Predložen je novi proaktivni mehanizam povrata memorije koji podržava kontrolu korisničkog prostora pomoću datoteke memory.reclaim. Pisanjem broja u navedenu datoteku pokušat će se izbaciti odgovarajući broj bajtova iz skupa povezanog s cgroupom.
    • Poboljšana preciznost upotrebe memorije prilikom komprimiranja podataka u swap particiji pomoću zswap mehanizma.
    • Za RISC-V arhitekturu, omogućena je podrška za pokretanje 32-bitnih izvršnih datoteka na 64-bitnim sistemima, dodat je način za vezivanje restriktivnih atributa na memorijske stranice (na primjer, za onemogućavanje keširanja), a implementirana je funkcija kexec_file_load() .
    • Implementacija podrške za 32-bitne Armv4T i Armv5 sisteme je prilagođena za upotrebu u univerzalnim višeplatformskim kernelima koji su pogodni za različite ARM sisteme.
  • Virtuelizacija i sigurnost
    • EFI podsistem implementira mogućnost povjerljivog prijenosa tajnih informacija gostujućim sistemima bez njihovog otkrivanja host sistemu. Podaci se daju kroz security/coco direktorij u securityfs.
    • Režim zaštite od zaključavanja, koji ograničava pristup root korisniku kernelu i blokira UEFI Secure Boot putanje zaobilaženja, eliminisao je rupu koja je omogućavala zaobilaženje zaštite manipulisanjem debagerom kernela.
    • Uključene su zakrpe koje imaju za cilj poboljšanje pouzdanosti i performansi generatora pseudo-slučajnih brojeva.
    • Prilikom izgradnje koristeći Clang 15, implementirana je podrška za mehanizam za nasumične strukture kernela.
    • Landlock mehanizam, koji vam omogućava da ograničite interakciju grupe procesa sa spoljnim okruženjem, pruža podršku za pravila koja vam omogućavaju da kontrolišete izvršavanje operacija preimenovanja datoteka.
    • IMA (Integrity Measurement Architecture) podsistem, dizajniran za provjeru integriteta komponenti operativnog sistema korištenjem digitalnih potpisa i hashova, prebačen je na korištenje fs-verity modula za verifikaciju datoteka.
    • Promijenjena je logika radnji prilikom onemogućavanja neprivilegiranog pristupa eBPF podsistemu - ranije su sve naredbe povezane sa sistemskim pozivom bpf() bile onemogućene, a počevši od verzije 5.19, ostavljen je pristup naredbama koje ne dovode do kreiranja objekata . Ovo ponašanje zahtijeva privilegirani proces za učitavanje BPF programa, ali tada neprivilegirani procesi mogu komunicirati s programom.
    • Dodata podrška za AMD SEV-SNP (Secure Nested Paging) ekstenziju, koja pruža siguran rad sa tabelama stranica ugniježđene memorije i štiti od “undeSErVed” i “SEVerity” napada na AMD EPYC procesore, koji omogućavaju zaobilaženje AMD SEV (Secure Encrypted Virtualization) ) zaštitni mehanizam.
    • Dodata podrška za Intel TDX (Trusted Domain Extensions) mehanizam, koji vam omogućava da blokirate pokušaje treće strane da pristupe šifrovanoj memoriji virtuelnih mašina.
    • Virtio-blk drajver, koji se koristi za emulaciju blok uređaja, dodao je podršku za I/O koristeći prozivanje, što je, prema testovima, smanjilo kašnjenje za oko 10%.
  • Mrežni podsistem
    • Paket uključuje niz VELIKIH TCP zakrpa koje vam omogućavaju da povećate maksimalnu veličinu paketa TCP paketa na 4 GB kako biste optimizirali rad brzih internih mreža centara podataka. Slično povećanje veličine paketa sa 16-bitnom veličinom polja zaglavlja postiže se implementacijom "jumbo" paketa, čija je veličina u IP zaglavlju postavljena na 0, a stvarna veličina se prenosi u zasebnom 32-bitnom polje u posebnom priloženom zaglavlju. U testiranju performansi, postavljanje veličine paketa na 185 KB povećalo je propusnost za 50% i značajno smanjilo kašnjenje prijenosa podataka.
    • 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.
    • Dodata podrška za vraćanje MPTCP (MultiPath TCP) veza za korištenje regularnog TCP-a, u situacijama kada se određene MPTCP funkcije ne mogu koristiti. MPTCP je proširenje TCP protokola za organizovanje rada TCP veze sa isporukom paketa istovremeno duž nekoliko ruta kroz različita mrežna sučelja povezana sa različitim IP adresama. Dodan API za kontrolu MPTCP tokova iz korisničkog prostora.
  • Oprema
    • Dodato je preko 420 linija koda koji se odnose na amdgpu drajver, od kojih su oko 400 linija automatski generisane datoteke zaglavlja za podatke ASIC registra u AMD GPU drajveru, a još 22.5k linija pružaju početnu implementaciju podrške za AMD SoC21. Ukupna veličina drajvera za AMD GPU je premašila 4 miliona linija koda. Pored SoC21, AMD drajver uključuje podršku za SMU 13.x (System Management Unit), ažuriranu podršku za USB-C i GPUVM, i spreman je da podrži sljedeće generacije RDNA3 (RX 7000) i CDNA (AMD Instinct) platforme.
    • i915 drajver (Intel) ima proširene mogućnosti koje se odnose na upravljanje napajanjem. Dodati identifikatori za Intel DG2 (Arc Alchemist) GPU-ove koji se koriste na laptopima, obezbeđena početna podrška za Intel Raptor Lake-P (RPL-P) platforma, dodane informacije o Arctic Sound-M grafičkim karticama), implementiran ABI za računarske mašine, dodat za DG2 kartice podržavaju format Tile4, a za sisteme bazirane na Haswell mikroarhitekturi implementirana je DisplayPort HDR podrška.
    • Nouveau drajver je prešao na korištenje drm_gem_plane_helper_prepare_fb rukovatelja; statička alokacija memorije je primijenjena na neke strukture i varijable. Što se tiče upotrebe kernel modula otvorenog koda od strane NVIDIA u Nouveau-u, dosadašnji rad se svodi na identifikaciju i eliminaciju grešaka. U budućnosti se planira da se objavljeni firmver koristi za poboljšanje performansi drajvera.
    • Dodan drajver za NVMe kontroler koji se koristi u Apple računarima baziranim na M1 čipu.

Istovremeno, Latinoamerička fondacija za slobodni softver formirala je verziju potpuno besplatnog kernela 5.19 - Linux-libre 5.19-gnu, očišćenu od elemenata firmvera i drajvera koji sadrže neslobodne komponente ili delove koda, čiji je opseg ograničeno od strane proizvođača. Novo izdanje čisti drajvere za pureLiFi X/XL/XC i TI AMx3 Wkup-M3 IPC. Ažurirani kod za čišćenje mrlja u Silicon Labs WFX, AMD amdgpu, Qualcomm WCNSS perifernom učitavaču slike, Realtek Bluetooth, Mellanox Spectrum, Marvell WiFi-Ex, Intel AVS, IFS, pu3-imgu drajverima i podsistemima. Implementirana je obrada Qualcomm AArch64 datoteka stabla uređaja. Dodata podrška za novu šemu imenovanja komponenti Sound Open Firmware. Zaustavljeno je čišćenje ATM Ambassador drajvera, koji je uklonjen iz kernela. Upravljanje čišćenjem mrlja u HDCP-u i Mellanox Core-u je premješteno u zasebne kconfig oznake.

izvor: opennet.ru

Dodajte komentar