Nakon dva mjeseca razvoja, Linus Torvalds predstavio je izdanje jezgre Linux 6.1. Među najistaknutijim promjenama su: podrška za razvoj upravljačkih programa i modula na jeziku Rust, modernizacija mehanizma određivanja korištenih stranica memorije, poseban upravitelj memorije za BPF programe, sustav dijagnostike problema s memorijom KMSAN, mehanizam zaštite KCFI (Kernel Control-Flow Integrity) i implementacija strukture Maple tree.
U novu verziju uključeno je 15115 ispravki od 2139 programera, veličina zakrpe iznosi 51 MB, što je otprilike dvostruko manje od veličine zakrpa jezgre 6.0 i 5.19. Promjene su zahvatile 13165 datoteka, dodano je 716247 redaka koda, a 304560 redaka je uklonjeno. Oko 45% svih promjena predstavljenih u 6.1 odnosi se na upravljačke programe uređaja, otprilike 14% promjena ima veze s ažuriranjem koda specifičnog za hardverske arhitekture, 14% se odnosi na mrežni stog, 3% na datotečne sustave i 3% na interne pod sustave jezgre.
Glavne novine u jezgri 6.1:
- Memorija i sistemske usluge
- Dodana je mogućnost korištenja jezika Rust kao drugog jezika za razvoj upravljačkih programa i modula jezgre. Glavna motivacija za podršku Rustu je pojednostavljenje pisanja sigurnih i kvalitetnih upravljačkih programa uređaja smanjenjem vjerojatnosti grešaka pri radu s memorijom. Podrška za Rust nije aktivna prema zadanim postavkama i ne dovodi do uključivanja Rusta u obavezne zavisnosti prilikom gradnje jezgre. U jezgru je za sada prihvaćen minimalni skraćeni niz zakrpa, smanjen sa 40 na 13 tisuća redaka koda, koji osigurava samo neophodni minimum dovoljan za izgradnju jednostavnog jezgrenog modula napisanog na jeziku Rust. U budućnosti se planira postupno povećavati postojeća funkcionalnost, prenoseći i druge promjene iz grane Rust-for-Linux. Paralelno se razvijaju projekti za korištenje predložene infrastrukture za razvoj upravljačkih programa za NVMe pohranu, mrežni protokol 9p i GPU Apple M1.
- Za sustave temeljene na arhitekturama AArch64, RISC-V i LoongArch s EFI, omogućena je direktna podizanje komprimiranih slika jezgre. Dodani su upravljački programi za učitavanje, pokretanje i ispuštanje slika jezgre, koji se pozivaju izravno iz EFI zboot-a. Također su dodani upravljački programi za instalaciju i uklanjanje protokola iz baze podataka protokola EFI. Ranije je dekompresija bila izvedena odvojeno putem učitavača, a sada to može učiniti upravljački program unutar same jezgre — slika jezgre se oblikuje kao EFI-aplikacija.
- Uključeni su dijelovi zakrpa s implementacijom višeslojne modele upravljanja memorijom, koji omogućava odvajanje memorijskih banaka s različitim karakteristikama performansi. Na primjer, najintenzivnije korištene stranice mogu se smjestiti u najbržu memoriju, dok se rijetko korištene stranice mogu čuvati u relativno sporoj memoriji. U jezgru 6.1 usvojen je mehanizam za određivanje prisutnosti intenzivno korištenih stranica u sporoj memoriji za njihovo premještanje u brzu memoriju, kao i općenita koncepcija razina memorije i njihove relativne performanse.
- Uključen je mehanizam MGLRU (Multi-Generational LRU), koji je zamijenio staru LRU (Least Recently Used) implementaciju temeljenu na dvjema redovima novom višestepenom strukturom, koja bolje određuje koje se stranice memorije stvarno koriste, a koje se mogu izbaciti u prostor stranica.
- Dodana je podrška za strukturu podataka "maple tree", koju su predložili inženjeri tvrtke Oracle, a koja se pozicionira kao učinkovitija zamjena za strukturu "red-black tree". Maple tree predstavlja varijantu B-stabla, koja podržava indeksaciju prema rasponima vrijednosti i dizajnirana je za učinkovitu upotrebu predmemorije. modernih procesoraNeke podsustave upravljanja memorijom već su prevedene na maple tree, što je pozitivno utjecalo na njihovu izvedbu. U budućnosti, maple tree bi se mogao koristiti za implementaciju zaključavanja prema rasponima (range locking).
- U BPF podsustavu dodana je mogućnost kreiranja "destruktivnih" BPF programa, posebno osmišljenih za iniciranje izvanrednog završetka rada putem poziva crash_kexec(). Ovi BPF programi mogu biti potrebni u svrhe debagiranja za iniciranje stvaranja crash-dumpa u određenom trenutku. Za pristup destruktivnim operacijama prilikom učitavanja BPF programa potrebno je postaviti oznaku BPF_F_DESTRUCTIVE, aktivirati sysctl kernel.destructive_bpf_enabled i posjedovati prava CAP_SYS_BOOT.
- Za BPF programe omogućena je iteracija elemenata cgroup, kao i iteracija resursa (datoteke, vma, procesi itd.) određenog toka ili zadatka. Implementiran je novi tip mape za kreiranje korisničkih prstenastih bafera (user ring buffer).
- Dodana je posebna funkcija za alokaciju memorije unutar BPF programa (memory allocator), koja osigurava sigurnije raspodjeljivanje memorije u kontekstu BPF, nego standardni kmalloc().
- Integrirana je prva faza promjena koja omogućava kreiranje drajvera za uređaje za unos s HID (Human Interface Device) sučeljem, realiziranih u obliku BPF programa.
- Iz jezgre je potpuno uklonjen kod za podršku formatu izvršnih datoteka a.out, koji je prozvan zastarjelim u izdanju 5.1, a od verzija 5.18 i 5.19 isključen je za glavne arhitekture. Format a.out dugo se ne koristi na sustavima s Linuxom, a generacija a.out datoteka nije podržana modernim alatima u Linux konfiguracijama po默认. Učitavač za a.out datoteke može biti u potpunosti realiziran u prostoru korisnika.
- Za sustave zasnovane na arhitekturi skupa naredbi LoongArch, korištenoj u Loongson 3 5000 procesorima koji implementiraju novi RISC ISA, sličan MIPS-u i RISC-V-u, implementirana je podrška za događaje mjerenja performansi (perf event), kexec, kdump i JIT kompajliranje BPF-a.
- U sučelju asinkronog ulaza/izlaza io_uring predložen je novi način IORING_SETUP_DEFER_TASKRUN, koji omogućava privremeno odgađanje izvršavanja radnji povezanih s prstenastim baferom do trenutka kada stigne zahtjev iz aplikacije, što se može koristiti za organizaciju izvršavanja radnji u paketnom režimu i sprječavanje problema s kašnjenjem zbog istiskivanja aplikacije u neprimjerenom trenutku.
- Procesima u korisničkom prostoru omogućeno je iniciranje pretvorbe raspona običnih stranica memorije u skup velikih stranica memorije (Transparent Huge-Pages).
- Dodana je implementacija uređaja /dev/userfaultfd, koji omogućuje pristup funkcionalnosti sistemskog poziva userfaultfd() koristeći prava pristupa u datotečnom sustavu. Funkcionalnost userfaultfd omogućava stvaranje handlera za pristupe nealokiranim stranicama memorije (page faults) u korisničkom prostoru.
- Povećani su zahtjevi za verziju alata GNU Make — za izgradnju jezgre sada je potrebna minimalno verzija 3.82.
- Sistem diska, ulaz/izlaz i datotečni sustavi
- U datotečni sustav Btrfs unesene su značajne optimizacije performansi, među ostalim, povećana je performansa ioctl poziva FIEMAP. Dodana je podrška za asinhrono baferirano pisanje za aplikacije koje koriste io_uring. U operaciju 'send' dodana je podrška za datoteke zaštićene pomoću fs-verity.
- U FS ext4 dodane su optimizacije performansi vezane uz održavanje dnevnika i rad u načinu samo za čitanje.
- U datotečnom sustavu EROFS (Enhanced Read-Only File System), namijenjenom za korištenje na particijama dostupnim u načinu samo za čitanje, implementirana je mogućnost zajedničkog skladištenja podataka koji se dupliciraju u različitim FS.
- U sistemski poziv statx() dodana je mogućnost izdavanja informacija o mogućnosti primjene izravnog ulaza/izlaza na datoteku.
- U podsustav FUSE (Datotečni sustavi u korisničkom prostoru) dodana je podrška za stvaranje privremenih datoteka s oznakom O_TMPFILE.
- Virtualizacija i sigurnost
- Zamijenjena je implementacija mehanizma zaštite CFI (Control Flow Integrity), koji dodaje provjeru prije svakog neizravnog poziva funkcije za otkrivanje nekih oblika neodređenog ponašanja koji mogu potencijalno dovesti do kršenja normalnog reda izvršavanja (control flow) uslijed korištenja eksploitacija koje mijenjaju pohranjene pokazivače na funkcije u memoriji. Izvorna implementacija CFI iz projekta LLVM zamijenjena je verzijom, također temeljenom na Clangu, ali posebno prilagođenom za zaštitu niskorazinskih pod sustava i jezgre operativnih sustava. U LLVM nova implementacija bit će ponuđena u izdanju Clang 16 i moći će se uključiti s opcijom "-fsanitize=kcfi". Ključna razlika nove implementacije je ta što nije vezana uz optimizacije na fazi povezivanja (LTO) i ne dovodi do zamjene pokazivača funkcija sa referencama u tablici prijelaza.
- Za LSM module (Linux Security Module) omogućena je mogućnost izrade handlera koji presreću operacije stvaranja prostora imena.
- Pruženi su alati za verifikaciju digitalnih potpisa PKCS#7 u BPF programima.
- U /dev/random vraćena je mogućnost otvaranja u neblokirajućem načinu (O_NONBLOCK), koja je nenamjerno uklonjena u jezgri 5.6.
- Na sustavima s arhitekturom x86 dodano je ispisivanje upozorenja u slučaju mapiranja pod sustavima jezgre stranica memorije koje istovremeno omogućuju izvršavanje i pisanje. U budućnosti se razmatra mogućnost potpunog zabrane takvog mapiranja memorije.
- Dodana je debuggerska metoda KMSAN (Kernel Memory Sanitizer) za otkrivanje korištenja neinicijalizirane memorije u jezgri, kao i curenja neinicijalizirane memorije između prostora korisnika i uređaja.
- Unaprijeđen je kriptografski pouzdan generator pseudoručnih brojeva CRNG, korišten u pozivu getrandom. Promjene je pripremio Jason A. Donenfeld, autor WireGuarda i usmjerene su na povećanje sigurnosti pri ekstrakciji pseudoručnih cijelih brojeva. VPN U TCP stacku implementirana je mogućnost (zamišljena kao isključena prema zadanim postavkama) odvojenog korištenja hash tablica soketa za svaki prostor imena, što omogućuje poboljšanje performansi sustava s velikim brojem prostora imena.
- Mrežni subsistem
- U TCP stogu implementirana je mogućnost (koja je prema zadanim postavkama isključena) odvojenog korištenja hash tablica soketa za svaki prostor imena, što omogućuje poboljšanje performansi sustava s velikim brojem prostora imena.
- Uklonjen kod za podršku zastarjelom protokolu DECnet. Za prostor korisnika ostavljene su zamjenske API funkcije koje omogućuju kompilaciju aplikacija koje koriste DECnet, ali te aplikacije neće moći povezati s mrežom.
- Dokumentiran je netlink protokol.
- Oprema
- U amdgpu drajveru dodana je podrška za propuštanje DSC (Display Stream Compression) za bezgubitno komprimiranje podataka tijekom razmjene informacija s ekranima koji podržavaju vrlo visoku rezoluciju. Nastavlja se rad na osiguranju podrške za AMD RDNA3 (RX 7000) i CDNA (Instinct) platforme. Dodana je podrška za IP komponente DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x i GMC 11.x. U amdkfd drajveru (za diskretne AMD GPU-ove, kao što su Polaris) implementirana je podrška za GFX 11.0.3.
- U i915 (Intel) drajveru uključena je podrška za Meteor Lake GPU. Za Meteor Lake i novije GPU-ove osigurana je podrška za DP 2.0 (DisplayPort) sučelje. Dodani su identifikatori za grafičke karte temeljene na mikroarhitekturi Alder Lake S.
- Dodana je podrška za audio podsklopove implementirane u Apple Silicon procesorima, Intel SkyLake i Intel KabyLake. U zvučnom drajveru CS35L41 HDA osigurana je podrška za prelazak u stanje mirovanja. Dodana je podrška za ASoC (ALSA System on Chip) za ugrađene audio čipove Apple Silicon, AMD Rembrandt DSPs, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake i Kaby Lake, Mediatek MT8186, NXP i.MX8ULP DSPs, Qualcomm SC8280XP, SM8250, SM8450 i Texas Instruments SRC4392.
- Dodana je podrška za LCD panele Samsung LTL101AL01, B120XAN01.0, R140NWF5 RH, Densitron DMT028VGHMCMI-1A TFT, AUO B133UAN02.1, IVO M133NW4J-R3, Innolux N120ACA-EA1, AUO B116XAK01.6, BOE NT116WHM-N21, INX N116BCA-EA2, INX N116BCN-EA1, Multi-Inno Technology MI0800FT-9.
- Dodana je podrška za AHCI SATA kontrolere korištene u SoC Baikal-T1.
- Dodana je podrška za Bluetooth čipove MediaTek MT7921, Intel Magnetor (CNVi, Integrirana povezanost), Realtek RTL8852C, RTW8852AE i RTL8761BUV (Edimax BT-8500).
- U ath11k drajveru za bežične module Qualcomm dodana je podrška za spektar skeniranja u rasponu od 160 MHz, implementiran je višedretveni NAPI, poboljšana je podrška za Wi-Fi čipove Qualcomm WCN6750.
- Dodani su drajveri za tipkovnicu PinePhone-a, dodirne pločice InterTouch (ThinkPad P1 G3), X-Box Adaptive Controller, PhoenixRC Flight Controller, VRC-2 Car Controller, DualSense Edge Controller, upravljačke panele IBM (IBM Operation Panel), daljinske upravljače XBOX One Elite, tablete XP-PEN Deco Pro S i Intuos Pro Small (PTH-460).
- Dodan je drajver za kriptografske akceleratore Aspeed HACE (Hash and Crypto Engine).
- Dodana je podrška za integrirane Thunderbolt/USB4 kontrolere Intel Meteor Lake.
- Dodana je podrška za pametne telefone Sony Xperia 1 IV, Samsung Galaxy E5, E7 i Grand Max, Pine64 Pinephone Pro.
- Dodana je 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, Kontron SL/BL i.MX8MM OSM-S, MT8195 (Acer Tomato), Radxa ROCK 4C+, NanoPi R4S Enterprise Edition, JetHome JetHub D1p. Ažurirani su drajveri za SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom i NXP.
Istovremeno je latinoamerička Fondacija slobodnog softvera formirala varijantu potpuno slobodnog jezgra 6.1 — Linux-libre 6.1-gnu, očišćenog od elemenata firmvera i drajvera koji sadrže neslobodne komponente ili delove koda čija je primena ograničena od strane proizvođača. U novom izdanju izvršena je čišćenje novog drajvera rtw8852b i DTS-fajlova za različite SoC Qualcomm i MediaTek sa procesorima zasnovanim na AArch64 arhitekturi. Ažuriran je kod čišćenja blobova u drajverima i podsistemima amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. Koregirana je čistoća zastarjelih drajvera tm6000 TV kartica, cpia2 v4l, sp8870, av7110.
Izvor: opennet.ru
