Nakon dva mjeseca razvoja, Linus Torvalds predstavio je izdanje jezgre Linux 6.11. Među najistaknutijim promjenama su: podrška za atomičke operacije zapisivanja na razini blokova, podrška za bind() i listen() operacije u io_uring, novi mehanizam blokiranja programskih obrađivača prekida, mogućnost zapisivanja u izvršne datoteke koje su odraz u memoriji, podrška za pisanje drajvera blok uređaja na jeziku Rust, optimizacija poziva getrandom(), nova implementacija AES-GCM.
U novu verziju unijeto je 15130 ispravki od 2078 programera, veličina zakrpe iznosi 85 MB (promjene su pogodile 13282 datoteka, dodano je 985857 redaka koda, uklonjeno 268915 redaka). U prethodnom izdanju bilo je 14564 ispravki od 1989 programera, veličina zakrpe bila je 41 MB (dvostruko manje od zakrpe za jezgru 6.11). Oko 46% svih predstavljenih promjena u 6.11 odnosi se na drajvere uređaja, približno 17% promjena vezano je uz ažuriranje koda specifičnog za hardverske arhitekture, 10% je povezano s mrežnim stakom, 5% s datotečnim sustavima i 3% s unutarnjim podsustavima jezgre.
Glavne novine u jezgri 6.11:
- Sistem diska, ulaz/izlaz i datotečni sustavi
- Implementirana je podrška za atomske operacije zapisivanja na razini blokova, kod kojih se na pohranu zapisuje ili cijeli navedeni niz blokova, ili nijedan od blokova, što omogućava zaštitu od situacija kada se nakon kvara opreme zapisuje samo dio blokova, dok u drugom dijelu ostaje stara informacija. Za uključivanje atomske potrebe zapisivanja u sistemski poziv pwritev() dodana je zastavica RWF_ATOMIC. Informacije o podršci za atomsko zapisivanje (atomic_write_unit_min, atomic_write_unit_max i atomic_write_segments_max) u vezi s pojedinim datotekama mogu se dobiti uz pomoć funkcije statx().
- Omogućena je podrška za zapisivanje u izvršne datoteke povezane s aktivnim procesima. Ranije je, kao i u drugim Unix-sličnim sustavima, jezgra ispravila grešku prilikom pokušaja zapisivanja u izvršnu datoteku pokrenutog procesa. Ova ograničenja su uklonjena jer su bila besmislena.
- Implementirana je mogućnost razvoja drajvera blok uređaja na jeziku Rust. Kao primjer, u jezgru je dodan drajver rnull, koji predstavlja analog drajvera null_blk, napisanog na jeziku Rust.
- U Btrfs datotečnom sustavu opcija montiranja „rescue=” je implementirala podršku za nove načine „ignoremetacsums” i „ignoresuperflags”, koje je moguće koristiti za prenošenje određenih provjera u korisnički prostor tijekom oporavka FS-a nakon kvara. Implementacija operacije dinamičkog vraćanja grupa blokova je prepravljena kako bi se izbjegla situacija nedostatka slobodnog prostora u uvjetima nepotpunog popunjavanja FS-a.
- U ntfs3 datotečnom sustavu implementirana je podrška za atribute „compressed” i „immutable”, koji definiraju komprimirane i nepromjenjive datoteke.
- U FS-u F2FS i Ext4 obrada imena datoteka bez obzira na veliko ili malo slovo (casefold) pojednostavljena je preko pohrane imena u obliku qstr-stringova bez suvišnih promjena registra.
- U FS-u Ext4 funkcija jbd2_transaction_committed optimizirana je za poboljšanje performansi na vrlo brzim pohrambenim uređajima (u testovima je zabilježen porast obrađenih operacija u sekundi koji doseže 20%).
- U sistemskom pozivu statx() dopušteno je proslijediti NULL pokazivač umjesto praznog niza s putanjom datoteke, u slučaju da je postavljen zastavica AT_EMPTY_PATH.
- U sistemskom pozivu open_by_handle_at() ublažene su provjere prava pristupa datoteci, u slučaju nedostatka ovlaštenja CAP_DAC_READ_SEARCH za pretraživanje u početnom prostoru imena. Ranije, potreba za ovlaštenjima CAP_DAC_READ_SEARCH za početni prostor imena nije dopuštala korištenje sistemskog poziva open_by_handle_at() unutar kontejnera.
- Proširene su mogućnosti sistemskih poziva listmount() i statmount(). U listmount() je dodana zastavica LISTMOUNT_REVERSE za ispis sadržaja tablice točaka montiranja u obrnutom redoslijedu (najnoviji zapisi na vrhu). U statmount() je implementiran ispis opcija postavljenih prilikom montiranja FS-a. U oba sistemska poziva je dopušten rad u nedostatku pristupa početnom prostoru imena (kada je dostupan samo pristup lokalnom ili vanjskom prostoru imena).
- U FS-u Bcachefs implementirana je podrška za automatsko transparentno obnavljanje problematičnih podataka, koristeći kodove za oporavak pogrešaka — ako dođe do pogreške ulaz/izlaz tijekom čitanja ili je izračunato nesukladnost kontrolne sume, problematični blok podataka se automatski ponovno zapisuje uz prisutnost redundancije za njegovo obnavljanje.
- Memorija i sistemske usluge
- U skup su prihvaćeni zakrpe s implementacijom novog mehanizma blokiranja programskih rukovalaca prekida (BH, bottom-half), koji osigurava blokiranje korištenih struktura podataka, ali ne uzrokuje blokiranje paralelnog izvršavanja nekodiranog koda. Primjećuje se da je promjena omogućila ne samo smanjenje kašnjenja za jezgri koje rade u realnom vremenu, već i povećanje performansi običnih jezgri (na primjer, za neke vrste opterećenja zabilježeno je poboljšanje performansi mrežnog pod sustava od 14,5%).
- U pod sustav asinkronog ulaza/izlaza io_uring dodana je podrška za operacije za implementaciju funkcija bind() i listen(), koje se koriste za stvaranje servera za prihvaćanje mrežnih veza.
- Dodana je skupina ioctl-operacija za pseudo-FS NSFS (NameSpace FS), koja se koristi za rad s prostorima imena. Nove ioctl omogućuju pretvorbu identifikatora procesa i grupa niti između različitih prostora imena identifikatora procesa (PID namespace). Slični ioctl, koji omogućuju određivanje datotečnih deskriptora procesa u pojedinim prostorima imena na temelju pidfd identifikatora, također su dodani u pseudo-FS pidfd.
- Za BPF-programi dodana je podrška za novi iterator za rad s bitnim maskama, koji se može koristiti, na primjer, za prolazak kroz pojedine bitove u memorijskim područjima, kao što je cpumask. Dodan je mehanizam za slanje obavijesti procesima u prostoru korisnika o odspajanju (detach/unregister) objekta struct_ops. Proširen je spektar tipova koji se mogu koristiti u nizovima (na primjer, moguće je deklarirati nizove koji imaju elemente s tipovima kptr, bpf_rb_root i bpf_list_head). Predložen je pouzdaniji mehanizam Split BTF (BPF Type Format), koji se koristi za provjeru tipova u pseudokodu BPF.
- Dodana je pod sustav koja omogućava organiziranje napajanja uređaja prema određenom redoslijedu, u slučajevima kada jedan uređaj treba biti aktiviran prije drugog (na primjer, pri aktivaciji bežičnih čipova na Qualcomm platformama).
- Dodan je modul „Sloppy logic analyzer“, koji omogućava stvaranje jednostavnih logičkih analizatora signala, koji koriste GPIO i rade na zasebnoj jezgri CPU.
- Dodana je podrška za runtime konstante koje se mogu koristiti umjesto promenljivih inicijalizovanih samo jednom. Na primer, runtime konstante mogu se primenjivati umesto promenljivih koje čuvaju pokazivač i veličinu za dentry keš. Ove promenljive se postavljaju tokom učitavanja i nikada se ne menjaju. Ideja je da se vrednosti ovakvih promenljivih direktno ubace u instrukcije u kodu, isključujući troškove povezane s manipulacijom pokazivačima.
- Nastavljene su promene iz grane Rust-for-Linux koje se odnose na upotrebu jezika Rust kao drugog jezika za razvoj drajvera i modula jezgre (podrška za Rust nije aktivna po defaultu i ne dovodi do uključivanja Rust-a u obavezne gradivne zavisnosti jezgre). Dodata je podrška za izdanja Rust 1.80 (minimalna verzija koja se i dalje podržava je Rust 1.78). Osim ranije pomenutih alata za razvoj drajvera blok uređaja, nova verzija dodaje apstrakcije za učitavanje firmvera, pristup korisničkom prostoru (uaccess) i rad sa strukturom "page".
- Za sisteme x86-64 implementiran je novi sistemski poziv uretprobe(), koji optimizuje rad mehanizma praćenja uretprobe, omogućavajući praćenje vrednosti koje vraćaju funkcije u aplikacijama korisničkog prostora.
- Dodate su opcije komandne linije jezgre: "reserve_mem" za rezervaciju imenovane oblasti memorije tokom pokretanja i "ramoops.mem_name" za korišćenje u pstore oblasti memorije, stvorene preko reserve_mem.
- U kontroleru memorije zasnovanom na cgroup-u, u datoteku memory.reclaim, kroz koju se definišu postavke izbacivanja memorije, dodata je opcija "swappiness", koja omogućava promenu ravnoteže između izbacivanja anonimizovanih stranica memorije u swap i oslobađanja stranica memorije zauzetih pod fajlovskim kešom.
- Dodata je ioctl sučelje PROCMAP_QUERY za efikasnije pretraživanje virtuelnih oblasti memorije (Virtual Memory Area) u /proc/PID/maps.
- U sistemski poziv mmap() dodata je zastavica MAP_DROPPABLE za zahtev memorije koja nikada neće biti prebačena u swap, a u slučaju nedostatka memorije može biti uklonjena.
- Za arhitekturu ARM64 implementirana je podrška za vruće povezivanje (prebacivanje u online/offline načine) fizičkih i virtuelnih CPU na sistemima sa ACPI.
- Za RISC-V arhitekturu osigurana je podrška za hot-plug memoriju i dodana je podrška za GCC plugin STACKLEAK (koji inicijalizira sve varijable pohranjene na steku kako bi se spriječilo curenje informacija iz jezgre putem neinicijaliziranih varijabli koje mogu sadržavati ostatke prethodno pohranjenih podataka na steku).
- Uklonjen je mehanizam lažnog mapiranja memorije EFI (fake EFI memory map) tijekom pokretanja. Ovaj mehanizam se nije koristio u praksi i ometao je razvoj u području povjerljivog izvršavanja. virtualnih mašina.
- Podrška za PowerPC 40x platformu je obustavljena.
- Povećani su zahtjevi za verzijom GNU Make — za izgradnju jezgre potrebna je barem verzija GNU Make objavljena 2013. godine.
- Virtualizacija i sigurnost
- Integrirani su zakrpi koje značajno (do 15 puta) ubrzavaju dobivanje slučajnih brojeva putem sistemskog poziva getrandom(). Optimizacija se temelji na korištenju mehanizma vDSO (virtual dynamic shared object), koji omogućava premještanje obraditelja sistemskog poziva iz jezgre u prostor korisnika i izbjegavanje promjena konteksta. Učitavanje implementacije sistemskog poziva u adresni prostor procesa vrši sam kernel.
- Za x86-64 sustave uključena je nova implementacija algoritma šifriranja AES-GCM, koja podržava korištenje vektorskih instrukcija VAES, VPCLMULQDQ i AVX512/AVX10 za ubrzanje izračuna. U provedenim testovima, povećanje performansi nakon prelaska na novu implementaciju doseže do 156%. Assembler implementacija AES-GCM potpuno je ponovno napisana uzimajući u obzir ispravnost, performanse, veličinu i opsežno dokumentiranje koda.
- Provedena je mogućnost pokretanja jezgre kao gostujućeg sustava u virtualiziranim okruženjima koja koriste procesorsko proširenje AMD SEV-SNP (Secure Nested Paging), namijenjeno osiguravanju sigurnog rada s ugniježdenim tablicama stranica memorije. Za dodatnu izolaciju pristupa resursima iz virtualnih strojeva može se primijeniti modul SVSM (Linux Secure VM Service Module). U hipervizor je KVM dodana početna podrška za pokretanje gostujućih sustava zaštićenih pomoću AMD SEV-SNP.
- Dodijeljen je poseban bucket slab allocator, uključen putem opcije CONFIG_SLAB_BUCKETS i osigurava zaštitu od napada koristeći tehniku 'heap spraying'.
- U hipervizoru KVM dodan je ioctl poziv za proaktivno dodjeljivanje memorije gostujućem sustavu prije stvarnog pokretanja.
- Mrežni subsistem
- Dodana je sysctl opcija net.tcp_rto_min_us, koja omogućuje podešavanje minimalnog vremenskog ograničenja za ponovnu transmisiju (retransmission timeout) za TCP sokete.
- U alat ethtool dodana je mogućnost fine konfiguracije postavki prekida za mrežne sučelje koje koriste Net DIM sučelje.
- Oprema
- U AMDGPU upravljačkom programu uključena je osnovna podrška za AMD RDNA4 GPU («GFX12»). Dodana je podrška za tehnologije DCN 4.0.x, GC 12.0, GMC 12.0, SDMA 7.0, MES12 i MMHUB 4.1.
- Nastavljen je rad na drm upravljačkom programu (Direct Rendering Manager) Xe za GPU temeljen na Intel Xe arhitekturi, koja se koristi u grafičkim karticama Intel Arc obitelji i integriranoj grafici, počevši od procesora Tiger Lake. Poboljšana je podrška za GPU temeljen na mikroarhitekturama Battlemage, Arrow Lake i Lunar Lake.
- U DRM podudarnosti (Direct Rendering Manager) ponovno je napisan upravljač postavkama EDID (Extended Display Identification Data) koje postavlja monitor.
- U i915 upravljačkom programu dodana je podrška za GPU Battlemage Xe2 i uključeni su po defaultu CMRR (Content Match Refresh Rate) mod.
- U DRM upravljačkom programu msm (GPU Qualcomm Adreno) dodana je podrška za SM7150 platformu i GPU X185 i a505.
- Dodana je podrška za ekran LCD panela Lincoln Tech Sol LCD185-101CT, Microtips Technology 13-101HIEBCAF0-C, Microtips Technology MF-103HIEB0GA0, BOE nv110wum-l60, IVO t109nw41, WL-355608-A8, PrimeView PM070WL4, Lincoln Technologies LCD197, Ortustech COM35H3P70ULC, AUO G104STN01, K&d kd101ne3-40ti.
- U audio sustavu dodana je podrška za čipove i kodeke Intel Panther Lake, Asahi Kasei AK4619, Cirrus Logic CS530x, Everest Semiconductors ES8311, NXP i.MX95, LPC32xx, Qualcomm LPASS v2.5, WCD937x, Realtek RT1318, RT1320 i Texas Instruments PCM5242.
- Unesena je finalna serija promjena koje omogućuju podršku za ARM SoC Snapdragon X Elite, koji koristi vlastiti 12-jezgri CPU Qualcomm Oryon i GPU Qualcomm Adreno. Čip je usmjeren na upotrebu u prijenosnim računalima i računalima, te se u mnogočemu nadmašuje u testovima performansi od čipova Apple M3 i Intel Core Ultra 155H. Promjene dodane u jezgru 6.11 povezane su s podrškom za GPU Adreno X1-85 i upravljanje potrošnjom energije. Među uređajima temeljenim na SoC Snapdragon X Elite najavljuje se podrška za prijenosna računala ASUS Vivobook S15 i Lenovo Yoga Slim7x.
Istodobno, latinoamerička Zaklada slobodnog softvera je stvorila verziju potpuno slobodnog jezgra 6.11 — Linux-libre 6.10-gnu, očišćenog od elemenata firmwarea i drajvera koji sadrže neslobodne komponente ili dijelove koda čija je upotreba ograničena od strane proizvođača. U izdanju 6.11 ažuriran je kod za čišćenje blobova u drajverima mdgpu, adreno, vgxy61, atomisp, btnxpuart, prueth i tas2781. Očišćeni su novi drajveri amdgpu isp, tn40, rtl8192du, cs40l50, rt1320 i pcie-rcar-gen4. Očišćena su imena blobova u dts datotekama (devicetree) za arhitekturu Aarch64. Dodana je verzija primitivi za učitavanje firmwarea koja ne generira upozorenja i zahtjeve (nowait-nowarn). Dodan je kod za određivanje primitivi za učitavanje firmwarea u kodu napisanom u jeziku Rust.
Izvor: opennet.ru
