Izid jedra Linux 6.11

Po dveh mesecih razvoja je Linus Torvalds predstavil izid jedra Linux 6.11. Med najbolj opaznimi spremembami so: podpora za atomske operacije zapisovanja na blokovni ravni, podpora za operacije bind() in listen() v io_uring, nov mehanizem za blokiranje programske obdelave prekinitev, možnost zapisovanja v v pomnilnik odražene izvajalne datoteke, podpora pisanja gonilnikov blokovnih naprav v jeziku Rust ter optimizacija klica getrandom(), nova implementacija AES-GCM.

Nova različica vključuje 15130 popravkov od 2078 razvijalcev, velikost popravka je 85 MB (spremembe so zajele 13282 datotek, dodanih je bilo 985857 vrstic kode, odstranjenih 268915 vrstic). V prejšnji izdaji je bilo 14564 popravkov od 1989 razvijalcev, velikost popravka pa je bila 41 MB (dvakrat manj kot popravek za jedro 6.11). Približno 46% vseh sprememb v 6.11 je povezanih z gonilniki naprav, okoli 17% sprememb se nanaša na posodobitev kode, specifične za strojne arhitekture, 10% je povezanih z omrežno skladbo, 5% z datotečnimi sistemi in 3% z notranjimi podsystemi jedra.

Glavne novosti v jedru 6.11:

  • Дисковая подсистема, ввод/вывод и файловые системы
    • Implementirana je podpora za atomske operacije zapisovanja na blokovni ravni, pri katerih se na pomnilnik zapiše bodisi celoten določen niz blokov bodisi noben blok, kar ščiti pred situacijami, ko po okvari strojne opreme zapišemo le del blokov, druga polovica pa ostane stara informacija. Za omogočanje atomske načina zapisovanja je k sistemskemu klicu pwritev() dodana zastavica RWF_ATOMIC. Informacije o podpori za atomsko zapisovanje (atomic_write_unit_min, atomic_write_unit_max in atomic_write_segments_max) za posamezne datoteke je mogoče pridobiti s funkcijo statx().
    • Omogočena je podpora za zapisovanje v izvajalne datoteke, povezane z delujočimi procesi. Prej je jedro, kot v drugih Unix-podobnih sistemih, ob poskusu zapisovanja v izvajalno datoteko začetnega procesa vrnilo napako. To omejitev so odstranili, saj je bila brez praktičnega smisla.
    • Uvedena je možnost razvoja gonilnikov blokovnih naprav v jeziku Rust. Kot primer je v jedro dodan gonilnik rnull, ki predstavlja analog gonilniku null_blk, napisanemu v jeziku Rust.
    • V datotečnem sistemu Btrfs je bila v možnosti montaže „rescue=” vključena podpora za nove načine „ignoremetacsums” in „ignoresuperflags”, ki se lahko uporabljajo za izvajanje nekaterih preverjanj v uporabniškem prostoru med obnovitvijo FS po okvari. Izvedba operacije dinamičnega vračanja skupin blokov je bila predelana, da se prepreči nastanek situacije pomanjkanja prostega prostora v pogojih nepopolne izpolnjenosti FS.
    • V datotečnem sistemu ntfs3 je bila vključena podpora za lastnosti „compressed” in „immutable”, ki določata stisnjene in nespremenljive datoteke.
    • V FS F2FS in Ext4 je bila obdelava imen datotek brez upoštevanja velikih in malih črk (casefold) poenostavljena z shranjevanjem imen v obliki qstr-nizov brez nepotrebnih sprememb velikosti črk.
    • V FS Ext4 je bila izvedba funkcije jbd2_transaction_committed optimizirana za povečanje zmogljivosti na zelo hitrih pomnilnikih (v testih je bilo opaženo povečanje obdelanih operacij na sekundo do 20%).
    • V sistemskem klicu statx() je bilo dovoljeno posredovanje kazalca NULL namesto praznega niza s potjo do datoteke, če je nastavljena zastavica AT_EMPTY_PATH.
    • V sistemskem klicu open_by_handle_at() so bile olajšane preverbe pravic dostopa do datoteke, če ni bilo pooblastila CAP_DAC_READ_SEARCH za iskanje v začetnem prostoru imen. Pred tem je bila potreba po pooblastilu CAP_DAC_READ_SEARCH za začetni prostor imen onemogočila uporabo sistemskega klica open_by_handle_at() v kontejnerjih.
    • Možnosti sistemskih klicev listmount() in statmount() so bile razširjene. V listmount() je bila dodana zastavica LISTMOUNT_REVERSE za prikazovanje vsebine tabele točk montaže v obrnjenem vrstnem redu (najnovejši vnosi na vrhu). V statmount() je bila izvedena izhodna možnost, nastavljena pri montaži FS. V obeh sistemskih klicih je bilo omogočeno delovanje brez dostopa do začetnega prostora imen (ko je omogočen le dostop do lokalnega ali zunanjega prostora imen).
    • V FS Bcachefs je bila dodana podpora za samodejno prozorno obnovo problematičnih podatkov z uporabo kod za obnovo napak — če med branjem pride do napake pri vhodu/izhodu ali če je izračunana neskladnost kontrolne vsote, se problematični blok podatkov samodejno prepiše, če obstaja odvečnost za njegovo obnovo.
  • Pomnilnik in sistemske storitve
    • Vključeni so popravki, ki uvajajo nov mehanizem za blokiranje programski obdelovalcev prekinitev (BH, bottom-half), ki zagotavlja blokiranje uporabljenih podatkovnih struktur, ne da bi pri tem preprečevali vzporedno izvajanje s tem nepovezanega kode. Omeniti je treba, da je ta sprememba ne le zmanjšala zakasnitve za jedra, ki delujejo v realnem času, temveč tudi izboljšala zmogljivost običajnih jeder (na primer, pri nekaterih vrstah obremenitev je bila opazna izboljšava zmogljivosti omrežne podskupine za 14,5%).
    • V podsklop asinkrone vhodno/izhodne operacije io_uring je bila dodana podpora za operacije za izvajanje funkcij bind() in listen(), ki se uporabljajo za ustvarjanje sprejemnih povezav omrežnih soketov.
    • Dodana je bila zbirka ioctl-operacij za pseudo-FS NSFS (NameSpace FS), ki se uporablja za delo s prostori imen. Novi ioctl omogočajo pretvarjanje identifikatorjev procesov in skupin niti med različnimi prostori imen identifikatorjev procesov (PID namespace). Dodatne ioctl, ki omogočajo določanje datotečnih deskriptorjev procesov v različnih prostorih imen na podlagi pidfd identifikatorjev, so prav tako dodane v pseudo-FS pidfd.
    • Za BPF programe je bila dodana podpora za nov iterator za delo z bitnimi maskami, ki ga je mogoče uporabiti na primer za prečkanje posameznih bitov v pomnilniških območjih, kot je cpumask. Dodan je mehanizem za pošiljanje obvestil procesom v uporabniškem prostoru o odklopu (detach/unregister) objekta struct_ops. Razširjena je bila paleta tipov, ki jih je mogoče uporabiti v tabelah (na primer, dovoljeno je razglasiti tabele, ki imajo elemente s tipi kptr, bpf_rb_root in bpf_list_head). Predlagan je bil zanesljivejši mehanizem Split BTF (BPF Type Format), ki se uporablja za preverjanje tipov v pseudokodu BPF.
    • Dodana je bila podsklop, ki omogoča organizacijo napajanja naprav v določenem vrstnem redu, v primeru, ko je treba eno napravo aktivirati pred drugo (na primer pri aktivaciji brezžičnih čipov na platformah Qualcomm).
    • Dodan je bil modul „Sloppy logic analyzer“, ki omogoča ustvarjanje preprostih logičnih analizatorjev signalov, ki uporabljajo GPIO in delujejo na ločenem jedru CPU.
    • Dodana je podrška za runtime konstante koje se mogu koristiti umesto promenljivih inicijalizovanih jednom. Na primer, runtime konstante se mogu primenjivati umesto promenljivih koje čuvaju pokazivač i veličinu za dentry keš. Ove promenljive se postavljaju prilikom učitavanja i zatim se nikada ne menjaju. Ideja je da se direktno ubace vrednosti takvih promenljivih u instrukcije u kodu, isključujući troškove vezane za manipulaciju pokazivačima.
    • Nastavljena je migracija iz grane Rust-for-Linux, vezano za korišćenje jezika Rust kao drugog jezika za razvoj drajvera i modula jezgra (podrška za Rust nije aktivna po defaultu i ne dovodi do uključivanja Rusta među obavezne zavisnosti za kompajliranje jezgra). Dodata je podrška za Rust 1.80 (kao minimalna verzija, Rust 1.78 se i dalje podržava). Osim ranije pomenutih alata za razvoj drajvera blok uređaja, u novoj verziji su dodate apstrakcije za učitavanje firmvera, pristup korisničkom prostoru (uaccess) i rad sa strukturom „page“.
    • Za x86-64 sisteme implementiran je novi sistemski poziv uretprobe(), koji optimizuje rad mehanizma praćenja uretprobe, omogućavajući praćenje vrednosti koje funkcije vraćaju u aplikacijama korisničkog prostora.
    • Dodate su opcije komandne linije jezgra: „reserve_mem“ za rezervaciju imenovane oblasti memorije tokom podizanja i „ramoops.mem_name“ za korišćenje u pstore oblasti memorije, kreirane putem reserve_mem.
    • U kontroler memorije zasnovan na cgroup dodana je opcija „swappiness“ u fajl memory.reclaim, preko kojeg se definišu podešavanja za istiskivanje memorije, omogućavajući promenu ravnoteže između istiskivanja anonimnih strana memorije u swap i oslobađanja strana memorije koje se koriste za fajl keš.
    • Dodata je ioctl-interfejs PROCMAP_QUERY za efikasnije pretraživanje virtuelnih oblasti memorije (Virtual Memory Area) u /proc/PID/maps.
    • U sistemski poziv mmap() dodat je flag MAP_DROPPABLE za zahtev memorije koja nikada neće biti ispuštena u swap, a u slučaju nedostatka memorije može biti obrisana.
    • Za ARM64 arhitekturu implementirana je podrška za hot-plug (prebacivanje u online/offline režime) fizičkih i virtuelnih CPU na sistemima sa ACPI.
    • Za arhitekturo RISC-V je omogočeno vroče priključevanje pomnilnika in dodana podpora za GCC-plugin STACKLEAK (izvaja inicializacijo vseh spremenljivk, shranjenih na sklad, da se prepreči uhajanje informacij iz jedra prek neinicializiranih spremenljivk, ki lahko vsebujejo ostanke prejšnjih podatkov, shranjenih na skladu).
    • Odstranjena je bila mehanizem lažnega mapiranja pomnilnika EFI (fake EFI memory map) v fazi nalaganja. Ta mehanizem ni bil dejansko uporabljen in je oviral razvoj na področju zaupnega izvajanja. virtualnih naprav.
    • Podpora za platformo PowerPC 40x je prenehala.
    • Povečane so zahteve glede različice GNU Make — za sestavljanje jedra je potrebna vsaj različica GNU Make, objavljena leta 2013.
  • Virtualizacija in varnost
    • Integrirani so popravki, ki znatno (do 15-krat) pospešijo pridobivanje naključnih števil prek sistemskega klica getrandom(). Optimizacija temelji na uporabi mehanizma vDSO (virtual dynamic shared object), kar omogoča prenos obdelovalca sistemskega klica iz jedra v uporabniški prostor in izogibanje preklapljanju konteksta. Izvedba sistemskega klica se naloži v naslovni prostor procesa neposredno iz jedra.
    • Za sisteme x86-64 je vključena nova izvedba algoritma šifriranja AES-GCM, ki podpira uporabo vektorskih navodil VAES, VPCLMULQDQ in AVX512/AVX10 za pospešitev izračunov. V izvedenih testih se je rast zmogljivosti po prehodu na novo izvedbo povzpela do 156%. Assemblerna izvedba AES-GCM je bila popolnoma preklicana ob upoštevanju pravilnosti, zmogljivosti, velikosti in izčrpnega dokumentiranja kode.
    • Omogočen je zagon jedra kot gostujočega sistema v virtualiziranih okoljih, ki uporabljajo procesorsko širitev AMD SEV-SNP (Secure Nested Paging), namenjeno zagotavljanju varnega delovanja z vloženimi tabelami pomnilnika. Za dodatno izolacijo dostopa do virov iz virtualnih strojev se lahko uporablja modul SVSM (Linux Secure VM Service Module). V hipervizorju KVM je dodana začetna podpora za zagon gostujočih sistemov, zaščitenih z AMD SEV-SNP.
    • Dodan je bil ločen dodeljevalec slabov z vedri, ki se vključuje z nastavitvijo CONFIG_SLAB_BUCKETS in zagotavlja zaščito pred napadi z uporabo tehnike 'heap spraying'.
    • V hipervizor KVM je bila dodana ioctl klica za dodeljevanje pomnilnika gostiteljskemu sistemu pred njegovim dejanskim zagonom.
  • Mrežna podsistem
    • Dodana je sysctl nastavitev net.tcp_rto_min_us, preko katere lahko nastavite minimalni časovni limit ponovnega prenosa (retransmission timeout) za TCP odprte povezave.
    • V orodje ethtool je dodana možnost natančne nastavitve konfiguracije obdelovalnikov prekinitev za omrežne vmesnike, ki uporabljajo vmesnik Net DIM.
  • Oprema
    • V gonilniku AMDGPU je bila vključena začetna podpora za GPU AMD RDNA4 (»GFX12«). Dodana je podpora za tehnologije DCN 4.0.x, GC 12.0, GMC 12.0, SDMA 7.0, MES12 in MMHUB 4.1.
    • Nadaljuje se delo na drm-gonilniku (Direct Rendering Manager) Xe za GPU na osnovi arhitekture Intel Xe, ki se uporablja v grafičnih karticah Intel družine Arc in v integrirani grafiki, od procesorjev Tiger Lake naprej. Izboljšana je podpora za GPU na osnovi mikroarhitektur Battlemage, Arrow Lake in Lunar Lake.
    • V podsistemu DRM (Direct Rendering Manager) je bil predelano obdelovalno sredstvo, ki ga prenaša monitor, za parametre EDID (Extended Display Identification Data).
    • V gonilniku i915 je bila dodana podpora za GPU Battlemage Xe2 in privzeto vključen način CMRR (Content Match Refresh Rate).
    • V DRM-gonilniku msm (GPU Qualcomm Adreno) je bila dodana podpora za platformo SM7150 ter GPU X185 in a505.
    • Dodana je podpora za zaslonske panele 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.
    • V zvočni podsistemu je bila dodana podpora za čipe in 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 in Texas Instruments PCM5242.
    • Končana je zadnja serija sprememb, ki zagotavljajo podporo za ARM SoC Snapdragon X Elite, ki uporablja lastni 12-jedrni CPU Qualcomm Oryon in GPU Qualcomm Adreno. Čip je namenjen uporabi v prenosnih računalnikih in namiznih računalnikih ter v številnih testih zmogljivosti prekaša čipe Apple M3 in Intel Core Ultra 155H. Spremembe, dodane v jedro 6.11, so povezane s podporo za GPU Adreno X1-85 in upravljanjem porabe energije. Med napravami, temelječe na SoC Snapdragon X Elite, so napovedane prenosne računalnike ASUS Vivobook S15 in Lenovo Yoga Slim7x.

Hkrati je latinskoameriška Fundacija za prosto programsko opremo oblikovala različico popolnoma prostega jedra 6.11 – Linux-libre 6.10-gnu, očiščenega od elementov vdelanih programski oprem in gonilnikov, ki vsebujejo nesvobodne komponente ali odseke kode, katerih uporaba je omejena s strani proizvajalca. V izdaji 6.11 je bil posodobljen koda za čiščenje blobov v gonilnikih mdgpu, adreno, vgxy61, atomisp, btnxpuart, prueth in tas2781. Opravljeno je bilo čiščenje novih gonilnikov amdgpu isp, tn40, rtl8192du, cs40l50, rt1320 in pcie-rcar-gen4. Izvedeno je bilo tudi čiščenje imen blobov v dts-datotekah (devicetree) za arhitekturo Aarch64. Dodana je ne opozarjajoča in brez zahtev (nowait-nowarn) različica primitivov za nalaganje vdelanih programov. Dodana je koda za prepoznavanje primitivov nalaganja vdelanih programov v kodi v jeziku Rust.

Izvor: opennet.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster