Izdanje kernela Linux 6.1

Nakon dva mjeseca razvoja, Linus Torvalds je predstavio izdanje Linux kernela 6.1. Među najznačajnijim promenama: podrška za razvoj drajvera i modula na Rust jeziku, modernizacija mehanizma za određivanje korišćenih memorijskih stranica, poseban menadžer memorije za BPF programe, sistem za dijagnostiku problema sa memorijom KMSAN, KCFI (Kernelk Control -Flow Integrity) mehanizam zaštite, uvođenje stabla strukture Maple.

Nova verzija uključuje 15115 popravki od 2139 programera, veličina zakrpe je 51 MB, što je otprilike 2 puta manje od veličine zakrpa iz kernela 6.0 i 5.19. Promjene su uticale na 13165 datoteka, dodano je 716247 linija koda, a 304560 linija je obrisano. Oko 45% svih promjena uvedenih u 6.1 odnosi se na drajvere uređaja, otprilike 14% promjena se odnosi na ažuriranje koda specifičnog za hardverske arhitekture, 14% 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 6.1:

  • Memorijski i sistemski servisi
    • Dodata je mogućnost korištenja Rusta kao drugog jezika za razvoj drajvera i modula kernela. Glavni razlog za podršku Rust-a je da se olakša pisanje sigurnih i visokokvalitetnih drajvera uređaja smanjenjem vjerovatnoće greške pri radu s memorijom. Podrška za Rust je onemogućena prema zadanim postavkama i ne dovodi do toga da Rust bude uključen kao obavezna ovisnost o izgradnji kernela. Kernel je do sada usvojio minimalnu, smanjenu verziju zakrpa, koja je smanjena sa 40 na 13 hiljada linija koda i pruža samo neophodan minimum, dovoljan za izgradnju jednostavnog modula kernela napisanog na Rust jeziku. U budućnosti se planira postepeno povećanje postojeće funkcionalnosti, prenoseći ostale promjene iz grane Rust-for-Linux. Paralelno, razvijaju se projekti za korištenje predložene infrastrukture za razvoj drajvera za NVMe diskove, 9p mrežni protokol i Apple M1 GPU na Rust jeziku.
    • Za sisteme zasnovane na arhitekturi AArch64, RISC-V i LoongArch sa EFI, implementirana je mogućnost direktnog učitavanja komprimovanih slika kernela. Dodati rukovaoci za učitavanje, pokretanje i istovar slika kernela, koji se pozivaju direktno iz EFI zboot-a. Dodati su i rukovaoci za instaliranje i brisanje protokola iz baze podataka EFI protokola. Ranije je raspakivanje obavljao poseban bootloader, ali sada to može učiniti rukovalac u samom kernelu - slika kernela se formira kao EFI aplikacija.
    • Sastav uključuje dio zakrpa s implementacijom modela upravljanja memorijom na više nivoa, koji vam omogućava da odvojite memorijske banke s različitim karakteristikama performansi. Na primjer, stranice koje se najčešće koriste mogu biti pohranjene u najbržoj memoriji, dok se stranice koje se najčešće koriste mogu biti pohranjene u relativno sporoj memoriji. Kernel 6.1 uvodi mehanizam za određivanje gdje se nalaze jako korištene stranice u sporoj memoriji kako bi se mogle unaprijediti u brzu memoriju, a također uvodi opći koncept memorijskih nivoa i njihove relativne performanse.
    • Uključuje MGLRU (Multi-Generational LRU) mehanizam, koji zamjenjuje staru LRU (Least Recently Used) implementaciju zasnovanu na dva reda s višestepenom strukturom koja bolje određuje koje su memorijske stranice zapravo u upotrebi, a koje se mogu izbaciti na swap particiju.
    • Dodata podrška za strukturu podataka "javorovo drvo" koju su predložili Oracle inženjeri, a koja je pozicionirana kao efikasnija zamjena za strukturu "crveno-crno drvo". Maple tree je varijanta B-stabla koje podržava indeksiranje opsega i dizajnirano je da efikasno koristi keš memoriju modernih procesora. Neki podsistemi za upravljanje memorijom su već prebačeni na javorovo drvo, što je pozitivno uticalo na njihove performanse. U budućnosti, javorovo drvo može se koristiti za implementaciju zaključavanja raspona.
    • Mogućnost kreiranja “destruktivnih” BPF programa posebno dizajniranih da iniciraju hitno gašenje putem poziva crash_kexec() dodata je BPF podsistemu. Takvi BPF programi mogu biti potrebni u svrhu otklanjanja grešaka kako bi se u određenom trenutku pokrenulo kreiranje dump-a. Da biste pristupili destruktivnim operacijama prilikom učitavanja BPF programa, morate specificirati oznaku BPF_F_DESTRUCTIVE, aktivirati sysctl kernel.destructive_bpf_enabled i imati CAP_SYS_BOOT prava.
    • Za BPF programe, moguće je nabrajati elemente cgroup, kao i nabrajati resurse (fajlovi, vma, procesi, itd.) određene niti ili zadatka. Implementiran je novi tip karte za kreiranje korisničkih prstenastih bafera.
    • Dodan je poseban poziv za dodjelu memorije u BPF programima (memory allocator), koji pruža sigurniju dodjelu memorije u BPF kontekstu od standardnog kmalloc().
    • Prvi dio izmjena je integrisan, pružajući mogućnost kreiranja drajvera za ulazne uređaje sa HID (Human Interface Device) interfejsom, implementiranim u obliku BPF programa.
    • Kernel je u potpunosti uklonio kod kako bi podržao format izvršne datoteke a.out, koji je zastario u izdanju 5.1 i onemogućen je za glavne arhitekture od verzija 5.18 i 5.19. 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.
    • Za sisteme bazirane na arhitekturi skupa instrukcija LoongArch koja se koristi u procesorima Loongson 3 5000 i implementira novi RISC ISA, sličan MIPS i RISC-V, implementirana je podrška za događaje mjerenja performansi (perf događaji), kexec, kdump i BPF JIT kompilaciju .
    • Io_uring asinhroni I/O sučelje nudi novi način rada, IORING_SETUP_DEFER_TASKRUN, koji omogućava da se rad vezan za prstenasti bafer privremeno odgodi dok se ne napravi zahtjev aplikacije, što se može koristiti za grupni rad i izbjegavanje problema s kašnjenjem zbog prednosti aplikacija pogrešno vrijeme.
    • Procesi u korisničkom prostoru imaju mogućnost da pokrenu konverziju niza normalnih memorijskih stranica u skup velikih memorijskih stranica (Transparent Huge-Pages).
    • Dodata implementacija /dev/userfaultfd uređaja, koji omogućava pristup funkcionalnosti sistemskog poziva userfaultfd() koristeći prava pristupa u FS. Userfaultfd funkcionalnost vam omogućava da kreirate rukovaoce za pristup nedodeljenim memorijskim stranicama (greške stranice) u korisničkom prostoru.
    • Zahtjevi za verziju uslužnog programa GNU Make su povećani - barem je verzija 3.82 sada potrebna za izgradnju kernela.
  • Diskovni podsistem, I/O i sistemi datoteka
    • Značajne optimizacije performansi su napravljene u sistemu datoteka Btrfs, između ostalog, performanse FIEMAP ioctl poziva su povećane za redove veličine. Dodata podrška za asinkrono upisivanje u bafer za aplikacije koje koriste io_uring. Dodata podrška za datoteke zaštićene fs-verity operaciji “send”.
    • Ext4 sistem datoteka je dodao optimizacije performansi koje se odnose na održavanje dnevnika i rad samo za čitanje.
    • Sistem datoteka EROFS (Enhanced Read-Only File System), dizajniran za upotrebu na particijama dostupnim u režimu samo za čitanje, implementira mogućnost deljenja podataka dupliranih u različitim sistemima datoteka.
    • Sistemski poziv statx() je dodat za prikaz informacija o tome da li se direktni I/O može primijeniti na datoteku.
    • Podsistemu FUSE (Filesystems in User Space) dodata je podrška za kreiranje privremenih datoteka sa oznakom O_TMPFILE.
  • Virtuelizacija i sigurnost
    • Implementacija CFI (Control Flow Integrity) zaštitnog mehanizma je zamijenjena, dodajući provjere prije svakog indirektnog poziva funkcije kako bi se otkrili neki oblici nedefiniranog ponašanja koji bi potencijalno mogli dovesti do kršenja normalnog naloga izvršenja (kontrolnog toka) kao rezultat korištenja exploit-a koji mijenjaju pokazivače na funkcije pohranjene u memoriji. Standardna implementacija CFI-a iz LLVM projekta zamijenjena je opcijom također zasnovanom na upotrebi Clang-a, ali posebno prilagođenom za zaštitu podsistema niskog nivoa i kernela operativnog sistema. U LLVM-u, nova implementacija će biti ponuđena u Clang 16 izdanju i biće omogućena sa "-fsanitize=kcfi" opcijom. Ključna razlika s novom implementacijom je u tome što nije vezana za optimizacije vremena veze (LTO) i ne rezultira zamjenom pokazivača funkcija vezama u tablici skokova.
    • Za LSM module (Linux Security Module), moguće je kreirati rukovaoce koji presreću operacije za kreiranje prostora imena.
    • Obezbeđeni su alati za verifikaciju PKCS#7 digitalnih potpisa u BPF programima.
    • Mogućnost otvaranja u neblokirajućem načinu (O_NONBLOCK), koja je nenamjerno uklonjena u kernelu 5.6, vraćena je u /dev/random.
    • Na sistemima sa x86 arhitekturom, dodato je upozorenje u slučaju mapiranja memorijskih stranica od strane podsistema kernela koji istovremeno dozvoljavaju izvršavanje i pisanje. U budućnosti se razmatra mogućnost potpune zabrane takvog memorijskog mapiranja.
    • Dodan KMSAN (Kernel Memory Sanitizer) mehanizam za otklanjanje grešaka za otkrivanje neinicijalizirane upotrebe memorije u kernelu, kao i neinicijalizirano curenje memorije između korisničkog prostora i uređaja.
    • Napravljena su poboljšanja u kripto-sigurnom CRNG generatoru pseudoslučajnih brojeva koji se koristi u getrandom pozivu. Promjene je pripremio Jason A. Donenfeld, autor VPN WireGuard, a imaju za cilj poboljšanje sigurnosti pseudo-slučajne ekstrakcije cijelog broja.
  • Mrežni podsistem
    • TCP stog pruža mogućnost (podrazumevano onemogućeno) da se posebno koriste heš tabele soketa za svaki prostor imena, što poboljšava performanse na sistemima sa velikim brojem imenskih prostora.
    • Uklonjen kod za podršku naslijeđenog DECnet protokola. Korisnički prostor API stubovi su ostavljeni na mjestu kako bi se omogućilo prevođenje aplikacija koje koriste DECnet, ali te aplikacije neće moći da se povežu na mrežu.
    • Netlink protokol je dokumentovan.
  • Oprema
    • Amdgpu drajver je dodao podršku za DSC (Display Stream Compression) prosljeđivanje za kompresiju podataka bez gubitaka prilikom razmjene informacija sa ekranima koji podržavaju vrlo visoke rezolucije. Nastavlja se rad na pružanju podrške za AMD RDNA3 (RX 7000) i CDNA (Instinct) platforme. Dodata podrška za DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x i GMC 11.x IP komponente. Amdkfd drajver (za diskretne AMD GPU-ove kao što je Polaris) pruža podršku za GFX 11.0.3.
    • i915 (Intel) drajver uključuje podršku za Meteor Lake GPU. Meteor Lake i noviji GPU-ovi podržavaju DP 2.0 (DisplayPort) interfejs. Dodati identifikatori za video kartice bazirane na Alder Lake S mikroarhitekturi.
    • Dodata podrška za audio podsisteme implementirane u Apple Silicon, Intel SkyLake i Intel KabyLake procesore. CS35L41 HDA audio drajver podržava režim mirovanja. Dodata podrška za ASoC (ALSA sistem na čipu) za integrisane audio čipove Apple Silicon, AMD Rembrant DSP, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake i Kaby Lake, Mediatek MT8186, NXP i.MX8ULP DSP, Qualcomm SC8280X, SC8250 SM8450 i Texas Instruments SRC4392
    • Dodata podrška za LCD panele Samsung LTL101AL01, B120XAN01.0, R140NWF5 RH, Densitron DMT028VGHMCMI-1A TFT, AUO B133UAN02.1, IVO M133NW4J-R3, Innolux N120ACA1B116ACA01.6 M -N116, INX N21BCA-EA116 , INX N2BCN-EA116, Multi-Inno Technology MI1FT-0800.
    • Dodata podrška za AHCI SATA kontrolere koji se koriste u Baikal-T1 SoC-u.
    • Dodata podrška za Bluetooth čipove MediaTek MT7921, Intel Magnetor (CNVi, integrisano povezivanje), Realtek RTL8852C, RTW8852AE i RTL8761BUV (Edimax BT-8500).
    • ath11k drajver za Qualcommove bežične module je dodao podršku za spektralno skeniranje u opsegu od 160 MHz, implementirao višenitnu NAPI i poboljšanu podršku za Qualcomm WCN6750 Wi-Fi čipove.
    • Dodati drajveri za PinePhone tastaturu, InterTouch touchpade (ThinkPad P1 G3), X-Box Adaptive Controller, PhoenixRC Flight Controller, VRC-2 Car Controller, DualSense Edge Controller, IBM Operation Panel, XBOX One Elite daljinske upravljače, tablete XP-PEN Deco Pro S i Intuos Pro Small (PTH-460).
    • Dodan drajver za Aspeed HACE (Hash i Crypto Engine) kriptografske akceleratore.
    • Dodata podrška za integrisane Thunderbolt/USB4 Intel Meteor Lake kontrolere.
    • Dodata podrška za Sony Xperia 1 IV, Samsung Galaxy E5, E7 i Grand Max, Pine64 Pinephone Pro pametne telefone.
    • Dodata podrška za ARM SoC i ploče: AMD DaytonaX, Mediatek MT8186, Rockchips RK3399 i RK3566, TI AM62A, NXP i.MX8DXL, Renesas R-Car H3Ne-1.7G, Qualcomm IPQ8064-v2.0, IPQ8062, IPQ8065 BL i.MX8MM OSM-S, MT8195 (Acer Tomato), Radxa ROCK 4C+, NanoPi R4S Enterprise Edition, JetHome JetHub D1p. Ažurirani drajveri za SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom i NXP.

Istovremeno, Latinoamerička fondacija za slobodni softver formirala je verziju potpuno besplatnog kernela 6.1 - Linux-libre 6.1-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 novi drajver rtw8852b i DTS datoteke za različite Qualcomm i MediaTek SoC-ove sa procesorima baziranim na AArch64 arhitekturi. Ažurirani kod za čišćenje mrlja u drajverima i podsistemima amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. Ispravljeno je čišćenje zastarjelih drajvera tm6000 TV kartice, cpia2 v4l, sp8870, av7110.

izvor: opennet.ru

Dodajte komentar