Izdaja jedra Linuxa 6.1

Po dveh mesecih razvoja je Linus Torvalds predstavil izdajo jedra Linux 6.1. Med najbolj opaznimi spremembami: podpora za razvoj gonilnikov in modulov v jeziku Rust, posodobitev mehanizma za določanje uporabljenih pomnilniških strani, poseben upravljalnik pomnilnika za programe BPF, sistem za diagnosticiranje težav s pomnilnikom KMSAN, KCFI (Kernelk Control). -Flow Integrity) zaščitni mehanizem, uvedba drevesne strukture Maple.

Nova različica vključuje 15115 popravkov od 2139 razvijalcev, velikost popravka je 51 MB, kar je približno 2-krat manj od velikosti popravkov iz jeder 6.0 in 5.19. Spremembe so vplivale na 13165 datotek, dodanih je bilo 716247 vrstic kode in izbrisanih 304560 vrstic. Približno 45 % vseh sprememb, uvedenih v različici 6.1, je povezanih z gonilniki naprav, približno 14 % sprememb je povezanih s posodabljanjem kode, specifične za arhitekture strojne opreme, 14 % je povezanih z omrežnim skladom, 3 % je povezanih z datotečnimi sistemi in 3 % so povezani z notranjimi podsistemi jedra.

Glavne novosti v jedru 6.1:

  • Pomnilniške in sistemske storitve
    • Dodana možnost uporabe Rust kot drugega jezika za razvoj gonilnikov in modulov jedra. Glavni razlog za podporo Rust je olajšati pisanje varnih in visokokakovostnih gonilnikov naprav z zmanjšanjem verjetnosti napak pri delu s pomnilnikom. Podpora za Rust je privzeto onemogočena in ne pomeni, da je Rust vključen kot zahtevana odvisnost gradnje jedra. Jedro je doslej sprejelo minimalno, okrnjeno različico popravkov, ki je bila zmanjšana s 40 na 13 tisoč vrstic kode in zagotavlja le nujni minimum, ki zadostuje za izdelavo preprostega modula jedra, napisanega v jeziku Rust. V prihodnosti je načrtovano postopno povečanje obstoječe funkcionalnosti s prenosom drugih sprememb iz veje Rust-for-Linux. Vzporedno se razvijajo projekti za uporabo predlagane infrastrukture za razvoj gonilnikov za pogone NVMe, omrežni protokol 9p in grafični procesor Apple M1 v jeziku Rust.
    • Za sisteme, ki temeljijo na arhitekturah AArch64, RISC-V in LoongArch z EFI, je implementirana možnost neposrednega nalaganja stisnjenih slik jedra. Dodani upravljalniki za nalaganje, izvajanje in razkladanje slik jedra, klicanih neposredno iz EFI zboot. Dodani so bili tudi upravljalniki za nameščanje in brisanje protokolov iz baze protokolov EFI. Prej je razpakiranje izvajal ločen zagonski nalagalnik, zdaj pa lahko to stori upravljalnik v samem jedru - slika jedra je oblikovana kot aplikacija EFI.
    • Sestava vključuje del popravkov z implementacijo večnivojskega modela upravljanja pomnilnika, ki vam omogoča ločevanje pomnilniških bank z različnimi lastnostmi delovanja. Na primer, najbolj pogosto uporabljene strani so lahko shranjene v najhitrejšem pomnilniku, medtem ko so najbolj redko uporabljene strani lahko shranjene v relativno počasnem pomnilniku. Jedro 6.1 uvaja mehanizem za določanje, kje v počasnem pomnilniku se nahajajo zelo rabljene strani, da jih je mogoče povišati v hiter pomnilnik, in uvaja tudi splošen koncept pomnilniških nivojev in njihovo relativno zmogljivost.
    • Vključuje mehanizem MGLRU (Multi-Generational LRU), ki nadomešča staro izvedbo LRU (Least Recently Used), ki temelji na dveh čakalnih vrstah z večstopenjsko strukturo, ki bolje določa, katere pomnilniške strani so dejansko v uporabi in katere je mogoče potisniti ven v izmenjalno particijo.
    • Dodana podpora za podatkovno strukturo »maple tree«, ki so jo predlagali Oraclovi inženirji, ki je postavljena kot učinkovitejša zamenjava za strukturo »rdeče-črnega drevesa«. Javorjevo drevo je različica B-drevesa, ki podpira indeksiranje obsega in je zasnovano za učinkovito uporabo predpomnilnika sodobnih procesorjev. Nekateri podsistemi za upravljanje pomnilnika so že bili preneseni na maple tree, kar je pozitivno vplivalo na njihovo delovanje. V prihodnosti bo javorjevo drevo mogoče uporabiti za izvajanje zaklepanja obsega.
    • V podsistem BPF je bila dodana možnost ustvarjanja "destruktivnih" programov BPF, ki so posebej zasnovani za sprožitev zaustavitve v sili prek klica crash_kexec(). Takšni programi BPF bodo morda potrebni za namene odpravljanja napak, da v določenem trenutku sprožijo ustvarjanje izpisa zrušitve. Za dostop do destruktivnih operacij pri nalaganju programa BPF morate podati zastavico BPF_F_DESTRUCTIVE, aktivirati sysctl kernel.destructive_bpf_enabled in imeti pravice CAP_SYS_BOOT.
    • Za programe BPF je mogoče oštevilčiti elemente cgroup, pa tudi oštevilčiti vire (datoteke, vma, procese itd.) določene niti ali opravila. Implementiran je bil nov tip zemljevida za ustvarjanje uporabniških medpomnilnikov obroča.
    • Dodan poseben klic za dodelitev pomnilnika v programih BPF (memory allocator), ki zagotavlja varnejšo dodelitev pomnilnika v kontekstu BPF kot standardni kmalloc().
    • Integriran je bil prvi del sprememb, ki omogoča ustvarjanje gonilnikov za vhodne naprave z vmesnikom HID (Human Interface Device), implementiranim v obliki programov BPF.
    • Jedro je v celoti odstranilo kodo za podporo formata izvedljive datoteke a.out, ki je bil opuščen v izdaji 5.1 in je bil onemogočen za večje arhitekture od različic 5.18 in 5.19. Format a.out je že dolgo opuščen v sistemih Linux in sodobna orodja v privzetih konfiguracijah Linuxa ne podpirajo ustvarjanja datotek a.out. Nalagalnik za datoteke a.out je mogoče v celoti implementirati v uporabniški prostor.
    • Za sisteme, ki temeljijo na arhitekturi nabora navodil LoongArch, ki se uporablja v procesorjih Loongson 3 5000 in izvajajo nov RISC ISA, podoben MIPS in RISC-V, je implementirana podpora za dogodke merjenja zmogljivosti (perf dogodki), kexec, kdump in BPF JIT prevajanje .
    • Asinhroni V/I vmesnik io_uring ponuja nov način, IORING_SETUP_DEFER_TASKRUN, ki omogoča začasno odložitev dela, povezanega z vmesnim pomnilnikom obroča, dokler ni podana zahteva aplikacije, kar je mogoče uporabiti za paketno delo in izogibanje težavam z zakasnitvijo zaradi preprečevanja. napačen čas.
    • Procesi v uporabniškem prostoru imajo možnost sprožiti pretvorbo niza običajnih pomnilniških strani v nabor velikih pomnilniških strani (transparentne velike strani).
    • Dodana implementacija naprave /dev/userfaultfd, ki omogoča dostop do funkcionalnosti sistemskega klica userfaultfd() z uporabo pravic dostopa v FS. Funkcionalnost userfaultfd vam omogoča ustvarjanje upravljavcev za dostop do nedodeljenih pomnilniških strani (napake strani) v uporabniškem prostoru.
    • Zahteve za različico pripomočka GNU Make so bile povečane - za gradnjo jedra je zdaj potrebna vsaj različica 3.82.
  • Diskovni podsistem, V/I in datotečni sistemi
    • V datotečnem sistemu Btrfs so bile narejene znatne optimizacije zmogljivosti; med drugim se je zmogljivost klica FIEMAP ioctl povečala za stopnje velikosti. Dodana podpora za asinhrono pisanje v medpomnilnik za aplikacije, ki uporabljajo io_uring. Operaciji »pošlji« je dodana podpora za datoteke, zaščitene s fs-verity.
    • Datotečni sistem ext4 ima dodane optimizacije delovanja v zvezi z vzdrževanjem dnevnika in delovanjem samo za branje.
    • Datotečni sistem EROFS (Enhanced Read-Only File System), zasnovan za uporabo na particijah, ki so dostopne v načinu samo za branje, omogoča skupno rabo podatkov, podvojenih v različnih datotečnih sistemih.
    • Sistemski klic statx() je bil dodan za prikaz informacij o tem, ali je za datoteko mogoče uporabiti neposredni V/I.
    • V podsistem FUSE (datotečni sistemi v uporabniškem prostoru) je bila dodana podpora za ustvarjanje začasnih datotek z oznako O_TMPFILE.
  • Virtualizacija in varnost
    • Implementacija zaščitnega mehanizma CFI (Control Flow Integrity) je bila zamenjana z dodanimi preverjanji pred vsakim posrednim klicem funkcije za odkrivanje nekaterih oblik nedefiniranega vedenja, ki bi lahko vodilo do kršitve običajnega vrstnega reda izvajanja (pretoka nadzora) kot rezultat uporabe podvigov, ki spreminjajo kazalce na funkcije, shranjene v pomnilniku. Standardno implementacijo CFI iz projekta LLVM je zamenjala možnost, ki prav tako temelji na uporabi Clanga, vendar je posebej prilagojena za zaščito nizkonivojskih podsistemov in jeder operacijskega sistema. V LLVM bo nova izvedba na voljo v izdaji Clang 16 in bo omogočena z možnostjo "-fsanitize=kcfi". Ključna razlika pri novi implementaciji je, da ni vezana na optimizacijo časa povezave (LTO) in ne povzroči zamenjave funkcijskih kazalcev s povezavami v tabeli skokov.
    • Za module LSM (varnostni modul Linux) je mogoče ustvariti upravljalnike, ki prestrežejo operacije za ustvarjanje imenskih prostorov.
    • Na voljo so orodja za preverjanje digitalnih podpisov PKCS#7 v programih BPF.
    • Možnost odpiranja v načinu brez blokiranja (O_NONBLOCK), ki je bila nehote odstranjena v jedru 5.6, je bila vrnjena v /dev/random.
    • Na sistemih z arhitekturo x86 je dodano opozorilo v primeru preslikave pomnilniških strani s strani podsistemov jedra, ki hkrati omogočajo izvajanje in pisanje. V prihodnosti se razmišlja o možnosti popolne prepovedi takšnega preslikave spomina.
    • Dodan mehanizem za odpravljanje napak KMSAN (Kernel Memory Sanitizer) za odkrivanje neinicializirane uporabe pomnilnika v jedru ter uhajanja neinicializiranega pomnilnika med uporabniškim prostorom in napravami.
    • Izboljšave so bile narejene v kripto varnem generatorju psevdonaključnih števil CRNG, ki se uporablja v klicu getrandom. Spremembe je pripravil Jason A. Donenfeld, avtor VPN WireGuard, in so namenjene izboljšanju varnosti psevdo-naključnega pridobivanja celih števil.
  • Omrežni podsistem
    • Sklad TCP omogoča (privzeto onemogočeno) uporabo zgoščenih tabel vtičnic ločeno za vsak imenski prostor, kar izboljša zmogljivost v sistemih z velikim številom imenskih prostorov.
    • Odstranjena koda za podporo podedovanega protokola DECnet. Zareze API uporabniškega prostora ostanejo na mestu, da se omogoči prevajanje aplikacij, ki uporabljajo DECnet, vendar se te aplikacije ne bodo mogle povezati z omrežjem.
    • Protokol netlink je dokumentiran.
  • Оборудование
    • Gonilnik amdgpu je dodal podporo za posredovanje DSC (Display Stream Compression) za stiskanje podatkov brez izgub pri izmenjavi informacij z zasloni, ki podpirajo zelo visoke ločljivosti. Nadaljuje se delo za zagotavljanje podpore za platformi AMD RDNA3 (RX 7000) in CDNA (Instinct). Dodana podpora za komponente IP DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x in GMC 11.x. Gonilnik amdkfd (za ločene grafične procesorje AMD, kot je Polaris) nudi podporo za GFX 11.0.3.
    • Gonilnik i915 (Intel) vključuje podporo za Meteor Lake GPE. Meteor Lake in novejši grafični procesorji podpirajo vmesnik DP 2.0 (DisplayPort). Dodani identifikatorji za video kartice, ki temeljijo na mikroarhitekturi Alder Lake S.
    • Dodana podpora za zvočne podsisteme, implementirane v procesorje Apple Silicon, Intel SkyLake in Intel KabyLake. Zvočni gonilnik CS35L41 HDA podpira način mirovanja. Dodana podpora ASoC (ALSA System on Chip) za integrirane zvočne čipe Apple Silicon, AMD Rembrant DSP, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake in Kaby Lake, Mediatek MT8186, NXP i.MX8ULP DSP, Qualcomm SC8280XP, SM8250, SM8450 in Texas Instruments SRC4392
    • Dodana podpora za LCD plošče Samsung LTL101AL01, B120XAN01.0, R140NWF5 RH, Densitron DMT028VGHMCMI-1A TFT, AUO B133UAN02.1, IVO M133NW4J-R3, Innolux N120ACA-EA1, AUO B116XAK01.6, BOE NT116W H M-N21, INX N116BCA- EA2 , INX N116BCN-EA1, tehnologija Multi-Inno MI0800FT-9.
    • Dodana podpora za krmilnike AHCI SATA, ki se uporabljajo v SoC Baikal-T1.
    • Dodana podpora za čipe Bluetooth MediaTek MT7921, Intel Magnetor (CNVi, integrirana povezljivost), Realtek RTL8852C, RTW8852AE in RTL8761BUV (Edimax BT-8500).
    • Gonilnik ath11k za brezžične module Qualcomm ima dodano podporo za spektralno skeniranje v območju 160 MHz, implementiran večnitni NAPI in izboljšano podporo za čipe Qualcomm WCN6750 Wi-Fi.
    • Dodani gonilniki za tipkovnico PinePhone, sledilne ploščice InterTouch (ThinkPad P1 G3), X-Box Adaptive Controller, PhoenixRC Flight Controller, VRC-2 Car Controller, DualSense Edge Controller, IBM Operation Panel, daljinske upravljalnike XBOX One Elite, tablice XP-PEN Deco Pro S in Intuos Pro Small (PTH-460).
    • Dodan gonilnik za kriptografske pospeševalnike Aspeed HACE (Hash and Crypto Engine).
    • Dodana podpora za integrirane krmilnike Thunderbolt/USB4 Intel Meteor Lake.
    • Dodana podpora za pametne telefone Sony Xperia 1 IV, Samsung Galaxy E5, E7 in Grand Max, Pine64 Pinephone Pro.
    • Dodana podpora za ARM SoC in plošče: AMD DaytonaX, Mediatek MT8186, Rockchips RK3399 in RK3566, TI AM62A, NXP i.MX8DXL, Renesas R-Car H3Ne-1.7G, Qualcomm IPQ8064-v2.0, IPQ8062, IPQ8065, Kontron SL/ BL i.MX8MM OSM-S, MT8195 (Acer Tomato), Radxa ROCK 4C+, NanoPi R4S Enterprise Edition, JetHome JetHub D1p. Posodobljeni gonilniki za SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom in NXP.

Istočasno je Latinskoameriška fundacija za prosto programsko opremo oblikovala različico popolnoma brezplačnega jedra 6.1 - Linux-libre 6.1-gnu, očiščeno elementov vdelane programske opreme in gonilnikov, ki vsebujejo neproste komponente ali dele kode, katere obseg je omejen s strani proizvajalca. Nova izdaja čisti nov gonilnik rtw8852b in datoteke DTS za različne Qualcomm in MediaTek SoC s procesorji, ki temeljijo na arhitekturi AArch64. Posodobljena koda za čiščenje blob v gonilnikih in podsistemih amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. Čiščenje zastarelih gonilnikov tm6000 TV kartic, cpia2 v4l, sp8870, av7110 je bilo popravljeno.

Vir: opennet.ru

Dodaj komentar