Izdaja jedra Linuxa 6.12 s podporo za način v realnem času

Po dveh mesecih razvoja je Linus Torvalds predstavil izdajo jedra Linux 6.12. Med najbolj opaznimi spremembami: možnost omogočanja načina v realnem času, sched_ext za ustvarjanje razporejevalnikov CPU prek eBPF, izpis kode QR v izrednih razmerah, mehanizem TCP za pomnilnik naprave, mehanizem za rezervacijo virov, strežnik SCHED_DEADLINE, izboljšava razporejevalnika opravil EEVDF, modul IPE za nastavitev politike integritete.

Nova različica vključuje 14607 popravkov 2167 razvijalcev, velikost popravka je 37 MB (spremembe so vplivale na 13087 datotek, dodanih je bilo 507913 vrstic kode, izbrisanih je bilo 234083 vrstic). Zadnja izdaja je imela 15130 popravkov od 2078 razvijalcev, velikost popravka je bila 85 MB (v jedru 6.10 je bil popravek velik 41 MB). Približno 45 % vseh sprememb, uvedenih v 6.12, je povezanih z gonilniki naprav, približno 12 % sprememb je povezanih s posodabljanjem kode, specifične za arhitekture strojne opreme, 13 % je povezanih z omrežnim skladom, 6 % je povezanih z datotečnimi sistemi in 3 % so povezani z notranjimi podsistemi jedra.

Glavne novosti v jedru 6.12:

  • Pomnilniške in sistemske storitve
    • Jedro je mogoče zgraditi z možnostjo PREEMPT_RT brez dodatnih popravkov za delovanje v realnem času. Zadnja funkcija, ki je manjkala v jedru in je preprečevala omogočanje PREEMPT_RT, je bila podpora za neblokirni atomski izhod prek funkcije printk, ki je prav tako vključena v jedro. Podpora za PREEMPT_RT je na voljo za arhitekture x86, x86_64, ARM64 in RISC-V. Do sedaj je bila izvedba načina PREEMPT_RT dostavljena v obliki zunanjih popravkov, na podlagi katerih so nekatere distribucije, kot so RHEL, SUSE in Ubuntu, ustvarile ločene Realtime izdaje svojih izdelkov, ki so povpraševane na področjih, kot so finančni sistemi. , naprave za obdelavo zvoka in videa ter sistemi letalstva, medicine, robotike, telekomunikacij in industrije, v katerih je treba zagotoviti predvidljive čase obdelave dogodkov.
    • Dodan je bil mehanizem »sched_ext« (SCX), ki omogoča uporabo eBPF za ustvarjanje razporejevalnikov procesorjev, ki pokrivajo praktično vse vidike razporejanja opravil in dodeljevanja virov procesorja. Takšne razporejevalnike je mogoče dinamično naložiti in izvesti znotraj jedra Linuxa. virtualni stroj eBPF. Mehanizem sched_ext poenostavlja ustvarjanje razporejevalnikov, specifičnih za naloge, omogoča eksperimentiranje z različnimi tehnikami in strategijami razporejanja ter omogoča hitro ustvarjanje delujočih prototipov in sprotno zamenjavo razporejevalnikov v produkcijskih infrastrukturah. Na primer, z uporabo sched_ext lahko ustvarite razporejevalec, ki upošteva posebnosti določene aplikacije in dinamično spreminja svojo strategijo razporejanja glede na stanje sistema in druge dejavnike.
    • Sestava vključuje preostali del popravkov, ki so potrebni za delovanje strežniškega mehanizma SCHED_DEADLINE, ki rešuje problem premajhne izkoriščenosti CPU virov pri običajnih opravilih, ko je CPU monopoliziran z visoko prioritetnimi (realnočasovnimi) opravili. Da bi preprečili monopolizacijo procesorja, je jedro prej uporabljalo mehanizem za dušenje v realnem času, ki je poskušal rezervirati 5 % za opravila z nizko prioriteto, pri čemer je 95 % časa ostalo za opravila v realnem času. Ta mehanizem je pustil veliko želenega, saj običajna opravila v mnogih situacijah niso prejela dovolj procesorskega časa. Strežnik SCHED_DEADLINE izvaja učinkovitejši mehanizem rezervacije virov.
    • Integracija razporejevalnika opravil EEVDF (Earliest Eligible Virtual Deadline First) je bila dokončana, ki je nadomestil razporejevalnik CFS (Completely Fair Scheduler), ki je bil na voljo od jedra 2.6.23 naprej. Novi razporejevalnik pri izbiri naslednjega procesa za prenos izvedbe upošteva procese, ki niso prejeli dovolj procesorskih virov ali pa so prejeli nezasluženo veliko procesorskega časa. V prvem primeru je prenos nadzora na proces prisilen, v drugem pa se, nasprotno, odloži. Stari razporejevalnik CFS je uporabljal hevristiko in natančno nastavitev za prepoznavanje procesov, ki so zahtevali posebno pozornost, medtem ko jim novi razporejevalnik sledi bolj eksplicitno in ne zahteva natančne nastavitev. Pričakuje se, da bo EEVDF zmanjšal zamude pri opravilih, pri katerih je imel CFS težave z razporejanjem.
    • V upravljalniku za nujne primere jedra - DRM Panic, ki uporablja podsistem DRM (Direct Rendering Manager) za prikaz vizualnega poročila v slogu "modrega zaslona smrti", možnost prikaza logotipa in kode QR s poročilom kmsg na dodan je zaslon ob izrednem stanju. Ker se v kodo QR prilega samo 2953 bajtov, je na voljo možnost DRM_PANIC_SCREEN_QR_CODE_URL, pri kateri je poročilo kmsg stisnjeno z uporabo zliba in priloženo kot parameter URL-ju, kar omogoča prenos približno 40 bajtov prek kode V7500 QR. Pri gradnji paketov z jedrom lahko distribucije nastavijo osnovni URL za URL, ki jim bo omogočil navigacijo do strani za poročanje o težavi. Za izbiro oblike kode QR je na voljo nastavitev DRM_PANIC_SCREEN_QR_VERSION.
    • Dodana podpora za ARM POE (Permission Overlay Extension), ki omogoča nastavitev pravic dostopa do pomnilniških območij. Z uporabo te razširitve je na sistemih s procesorji ARM64 mogoče implementirati mehanizem Memory Protection Keys, ki se uporablja za omejevanje dostopa do pomnilniških strani brez spreminjanja tabele pomnilniških strani.
    • Za arhitekture Loongarch, ARM64, PowerPC in s390 je bila implementacija sistemskega klica getrandom() premaknjena, optimizirana z uporabo mehanizma vDSO (virtualni dinamični skupni objekt), ki omogoča premik upravljalnika sistemskega klica iz jedra v uporabniški prostor in se izogibajte preklapljanju konteksta. Optimizacija omogoča pospešitev generiranja naključnih števil do 15-krat.
    • V asinhroni vhodno/izhodni podsistem io_uring je bila dodana možnost uporabe absolutnih časovnih omejitev, ki se sprožijo, ko je na sistemski uri dosežen določen čas (prej je bilo mogoče nastaviti samo relativne časovne omejitve, ki so označevale trajanje od začetka operacije ).
    • Dodane datoteke za generiranje vezav za knjižnico libcpupower s pomočjo kompleta orodij SWIG, ki omogoča generiranje vezav iz kode C/C++ za različne programske jezike. Vezave vam omogočajo ustvarjanje skriptov v Pythonu in drugih jezikih ter njihovo uporabo za razširitev funkcionalnosti knjižnice libcpupower, ki ponuja API za upravljanje cpufreq in gonilnikov iz uporabniškega prostora.
    • Pripomoček cpuidle prikaže vrednost »prebivanja« v stanju mirovanja, ki se uporablja za sisteme v realnem času in upošteva najmanjši čas, ko mora biti procesor v mirovanju, da upraviči stroške energije za prehod v to stanje in iz njega.
    • Dodana možnost uporabe prevajalnika Clang za izdelavo standardne knjižnice C nolibc, ki je vključena v izvorno kodo jedra Linuxa in zagotavlja ogrodje za osnovne sistemske klice. Pri gradnji nolibc v Clangu je dovoljena optimizacija časa povezave (LTO).
    • Nekateri vmesniki cgroup1 so bili opuščeni, na primer obračunavanje TCP, mehka omejitev različice XNUMX in upravljanje izčrpanosti pomnilnika. Podpora za te funkcije za zdaj ostaja polna, opozorilo pa je namenjeno preučitvi števila uporabnikov, ki še naprej uporabljajo te funkcije.
    • Dodana možnost konfiguracije medpomnilnika za sledenje obroča za shranjevanje zbranih podatkov po ponovnem zagonu, kar vam bo omogočilo, da ne izgubite zbranih informacij o odpravljanju napak v primeru zrušitve jedra. Podatki so shranjeni v pomnilniku. Omogočanje se izvede s parametrom ukazne vrstice jedra trace_instance, na primer nastavitev »trace_instance=boot_map@0x285400000:12M« bo rezervirala 12 MB pomnilnika pri 0x285400000 za medpomnilnik »boot_map«, ki bo dostopen prek datoteke /sys/kernel /tracing/instances/boot_map.
    • Nadaljevanje selitve sprememb iz veje Rust-for-Linux v zvezi z uporabo jezika Rust kot drugega jezika za razvoj gonilnikov in modulov jedra (podpora za Rust privzeto ni aktivna in ne vodi k vključitvi Rusta med zahtevane odvisnosti sestava za jedro). Dodana modula 'list' in 'rbtree' za delo z dvosmerno povezanimi seznami in rdeče-črnimi drevesi. Zmogljivosti modulov 'init', 'sync', 'types' in 'error' so bile razširjene. Kodo Rust je mogoče uporabiti pri gradnji jedra z zaščito pred napadi Spectre (možnosti MITIGATION_{RETHUNK,RETPOLINE,SLS}), z uporabo sistema za odpravljanje napak KASAN, kCFI (kernel Control Flow Integrity) in zaščitnih mehanizmov Shadow Call ter pri uporabi dodatnih vtičnikov GCC. Dodan gonilnik za krmilnik Applied Micro QT2025 PHY Ethernet, napisan v Rust. Pripravljeno je bilo ločeno spletno mesto z dokumentacijo - rust.docs.kernel.org.
    • Pripomoček xdrgen je bil dodan izvorni kodi jedra za pretvorbo specifikacij XDR (eXternal Data Representation) v funkcije kodiranja in dekodiranja XDR, napisane s slogom C, sprejetim v jedru Linuxa.
    • Jedro je sprejelo spremembo za implementacijo mehanizma maskiranja kazalca za zmanjšanje števila počasnih klicev barrier_nospec() v 64-bitni funkciji copy_from_user(), ki se uporablja za kopiranje podatkov v jedro iz uporabniškega prostora. Uporaba maskiranja pospeši test »per_thread_ops«, ki ocenjuje število operacij, ki jih je mogoče izvesti v eni niti, za 2.6 %.
    • Dodan je bil nov gonilnik USB, ki vam omogoča uporabo protokola 9pfs kot transporta za pošiljanje in prejemanje podatkov iz naprave USB, ko nameščate datotečni sistem 9p prek USB (na primer, »mount -t 9p -o trans=usbg, ime=/pot/do/ fs /mnt/9"). Primer uporabe novega gonilnika je uporaba NFS namesto organiziranja zagona korenske particije pri razvoju vgrajenih naprav.
  • Diskovni podsistem, V/I in datotečni sistemi
    • V podsistem VFS je bila dodana možnost dela s pomnilniškimi napravami, katerih velikost bloka je večja od velikosti pomnilniške strani v sistemu. V datotečnih sistemih je ta funkcija trenutno podprta samo v XFS.
    • Podsistem FUSE, ki omogoča ustvarjanje implementacij datotečnih sistemov, ki delujejo v uporabniškem prostoru, ima dodano podporo za preslikavo uporabniških identifikatorjev nameščenih datotečnih sistemov, ki se uporabljajo za ujemanje datotek določenega uporabnika na nameščeni tuji particiji z drugim uporabnikom na trenutni particiji. sistem.
    • Izvedena je bila nova operacija fcntl, F_CREATED_QUERY, ki aplikaciji omogoča, da ugotovi, ali je bila datoteka, odprta z zastavico O_CREAT, ustvarjena ali pa je že obstajala.
    • Sistemskemu klicu name_to_handle_at() je bila dodana možnost uporabe edinstvenih 64-bitnih ID-jev točk namestitve, da bi se izognili tekmovalnim pogojem pri razčlenjevanju /proc/mountinfo.
    • Velikost strukture "datoteke" v jedru je bila zmanjšana z 232 na 184 bajtov, kar zmanjša porabo pomnilnika v sistemih, ki aktivno delajo z datotekami.
    • Pripenjanje datotečnih sistemov na točke priklopa v hierarhiji /proc, kot je /proc/PID/fd, je bilo prepovedano, kar je povzročilo morebitne varnostne težave.
    • Psevdo-FS NSFS (NameSpace FS), ki se uporablja za delo z imenskimi prostori, nudi dodatne informacije o imenskih prostorih točk priklopa.
    • Datotečni sistem EROFS (Extendable Read-Only File System), zasnovan za uporabo na particijah samo za branje, zdaj podpira pripenjanje datotečnih sistemov neposredno iz slik diska, shranjenih kot datoteke.
    • V XFS sta bila dodana nova ukaza ioctl XFS_IOC_START_COMMIT in XFS_IOC_COMMIT_RANGE za izmenjavo vsebine med dvema datotekama.
    • NFS ima dodano podporo za protokol “LOCALIO”, ki vam omogoča, da ugotovite, ali sta odjemalec in strežnik NFS na istem gostitelju, da omogočite ustrezne optimizacije.
    • V datotečnem sistemu Btrfs so bile predlagane optimizacije zmogljivosti, koda je bila preoblikovana, območje zaklepanja obsega med operacijami branja je bilo zmanjšano, delo se je nadaljevalo pri pretvorbi pomnilniških strani za uporabo folij strani in samodejna sprostitev pomnilnika implementiran za strukturo btrfs_path.
    • V datotečnem sistemu Ext4 so bile odpravljene napake, povezane z dodeljevanjem blokov, upravljanjem obsegov, hitro potrditvijo in beleženjem.
  • Virtualizacija in varnost
    • Dodan modul LSM IPE (Integrity Policy Enforcement), ki ga je razvil Microsoft za razširitev obstoječega obveznega sistema za nadzor dostopa. Modul vam omogoča, da določite splošno politiko integritete za celoten sistem, ki navaja, katere operacije so dovoljene in kako naj se preveri pristnost komponent. Z uporabo IPE lahko na primer določite, katere izvedljive datoteke se smejo izvajati, ob upoštevanju njihove skladnosti z referenčno različico z uporabo kriptografskih zgoščenj, ki jih zagotavlja sistem dm-verity.
    • Na stopnji prevajanja jedra je mogoče ločeno omogočiti razpoložljive metode zaščite pred različnimi ranljivostmi razreda Spectre v CPU. Kconfig ponuja nove parametre: MITIGATE_MDS (zaščita pred ranljivostjo Microarchitectural Data Sampling), MITIGATE_TAA (zaščita pred ranljivostjo TSX Asynchronous Abort), MITIGATE_MMIO_STALE_DATA (zaščita pred ranljivostjo MMIO Stale Data), MITIGATE_L1TF (zaščita pred ranljivostjo L1 Terminal Fault), MITIGATE_RETBLEED (zaščita pred ranljivostmi Retbleed), MITIGATE_SPECTRE_V1, MITIGATE_SPECTRE_V2 (zaščita pred ranljivostmi Spectre), MITIGATE_SRBDS (zaščita pred ranljivostjo Special Register Buffer Data Sampling), MITIGATE_SSB (zaščita pred ranljivostjo Speculative Store Bypass).
    • Dodana možnost ukazne vrstice proc_mem.force_override in niz nastavitev gradnje v Kconfig (PROC_MEM_FORCE_ALWAYS, PROC_MEM_FORCE_PTRACE in PROC_MEM_FORCE_NEVER), da preprečite spremembe pomnilnika prek /proc/pid/mem.
    • Podsistem LSM (Linux security module) je bil preklopljen na uporabo statičnih klicev, kar je izboljšalo varnost in izboljšalo delovanje.
    • Možna je uporaba standardnih jeder za arhitekturo ARM64 v gostujočih okoljih, ki se izvajajo v sistemih Android s spremenjenim hipervizorjem KVM (protected KVM).
    • Modul Landlock LSM, ki vam omogoča, da omejite interakcijo skupine procesov z zunanjim okoljem, izvaja koncept »IPC scoping« za selektivno omejevanje interakcije z okolji peskovnika z uporabo vtičnic in signalov Unix. Na primer, lahko prepoveste povezave z uporabo vtičnic Unix iz okolja peskovnika do procesov, ki nimajo uporabljene izolacije, vendar dovoljujejo povezave do procesov v istem obsegu.
    • V hipervizorju KVM je CPUID za sisteme za goste dodana zastavica, ki označuje podporo za razširitve AVX10.1.
  • Omrežni podsistem
    • Dodan je bil mehanizem TCP za pomnilnik naprave, ki omogoča uporabo omrežnih vtičnic za neposredno pošiljanje vsebine pomnilnika perifernih naprav po omrežju (način brez kopiranja) in neposredno postavitev vsebine omrežnih paketov v območje pomnilnika naprave na stran prejemnika. Podatki, poslani v paketih, se prenesejo iz omrežne kartice v pomnilnik periferne naprave ali iz pomnilnika naprave neposredno v omrežno kartico, mimo CPE, glave paketov pa končajo v običajnih medpomnilnikih jedra.
    • Zmogljivosti številnih ethernetnih in brezžičnih gonilnikov so bile razširjene. Na primer, gonilnik Intel iwlwifi je dodal podporo za premikanje operacij RLC/SMPS na stran vdelane programske opreme, gonilnik RealTek rtw89 je povečal zmogljivost in dodal podporo za čipe RTL8852BT/8852BE-VT (WiFi 6), gonilnik za mikročip Ethernet je dodal podporo za IEEE 802.3 bw (100BASE) specifikacije -T1) in implementacije IEEE 802.3bp, Microsoft vNIC in IBM veth virtual Ethernet so bile izboljšane. Dodani novi gonilniki za čipe Realtek RTL9054, RTL9068, RTL9072, RTL9075, RTL9068, RTL9071 in Microchip LAN8650/1 10BASE-T1S MAC-PHY.
    • V MPTCP (MultiPath TCP), razširitvi protokola TCP za organizacijo dostave paketov TCP hkrati po več poteh prek različnih omrežnih vmesnikov, je velikost uteži, uporabljenih pri usmerjanju, povečana z 8 na 16 bitov. Implementirano zaznavanje izgubljenega (blackhole) prometa in za nekaj časa zaustavitev poskusov vzpostavitve povezav s sistemi, ki vodijo do izgube prometa.
    • Za IPv6 je implementirana podpora za zastavico »p« v PIO (Možnost informacij o predponi), ki se uporablja v oglasih RA (Oglasi usmerjevalnika IPv6) za izbiro modela uvajanja odjemalca prek DHCPv6-PD (Delegiranje predpone DHCPv6, RFC9663) namesto dodelitve posamezne naslove na podlagi predpon z uporabo SLAAC (Stateless Address Autoconfiguration). IPv6 IOAM6 dodaja podporo za nov način enkapsulacije tunsrc za izboljšano zmogljivost.
    • Izboljšana zmogljivost za obdelavo kontrolnih paketov IPsec.
    • Izboljšana zmogljivost izpiranja velikih nizov pravil nftables. nfnetlink_queue ima izboljšano podporo SCTP.
    • API ethtool je dodal podporo za vezavo več omrežnih kartic na en omrežni vmesnik.
  • Оборудование
    • V gonilniku AMDGPU se nadaljuje delo za implementacijo podpore za grafične procesorje AMD RDNA4 (»GFX12«). Dodana možnost ponastavitve posameznih čakalnih vrst opravil brez ponastavitve celotne GPE.
    • Nadaljevalo se je delo na gonilniku Xe drm (Direct Rendering Manager) za grafične procesorje, ki temeljijo na arhitekturi Intel Xe, ki se uporablja v grafičnih karticah družine Intel Arc in integrirani grafiki, začenši s procesorji Tiger Lake. Nova različica vključuje podporo za grafične procesorje, ki temeljijo na mikroarhitekturah Battlemage in Lunar Lake. Podpora za modifikatorje CCS (Color Control Surface) Xe2 je bila uvedena za nadzor parametrov integriranih in diskretnih grafičnih procesorjev.
    • Gonilnik i915 izvaja zmožnost izhoda informacij o hitrosti ventilatorja prek vmesnika HWMON ali sysfs (atribut »fan1_input«). Parameter "i915.modeset" je opuščen; namesto "i915.modeset=0" je treba uporabiti parameter "i915.nomodeset".
    • Dodana podpora za grafične procesorje A615, A306 in A621 gonilniku msm DRM (GPU Qualcomm Adreno).
    • Voznik Nouveau je imel predelano in očiščeno notranjo strukturo.
    • Gonilnik intel_pstate, ki nadzoruje parametre porabe energije (P-state) v sistemih s procesorji Intel, ima dodano podporo za hibridne sisteme z asimetričnimi (različnimi lastnostmi) procesorji ter podporo za upravljanje porabe energije procesorjev, ki temeljijo na Granite Rapids in Sierra Forest. mikroarhitekture. Gonilniku intel_idle je dodana podpora za procesor Xeon Granite Rapids. Gonilnik intel_rapl omogoča prepoznavanje procesov družine AMD 1Ah in procesorjev Intel ArrowLake-U.
    • Nadaljnje vključevanje sprememb za podporo ARM SoC Snapdragon X Elite, ki uporablja Qualcommov lasten 12-jedrni CPE Oryon in Qualcomm Adreno GPE. Čip je namenjen uporabi v prenosnih in osebnih računalnikih in je pred čipoma Apple M3 in Intel Core Ultra 155H v številnih testih zmogljivosti.
    • Dodana podpora za plošče ARM, SoC in naprave: Broadcom bcm2712 (Raspberry Pi 5), Renesas R9A09G057 (RZ/V2H), Qualcomm Snapdragon 414 (MSM8929), Lenovo ThinkPad T14s Gen 6, Lenovo A6000/A6010, Surface Laptop 7, Anbernic RG35XXSP , Firefly Core-PX30-JD4, Lunzn Fastrhino R68S, Aspeed Riser, AGX Orin, Rockchip Qnap-TS433, Huashan Pi, Meta Catalina, BeagleY-AI, NanoPi R2S Plus, ExynosAuto v920, SOPHGO SG2002, Qualcomm IPQ5332, LG G4 (h815) ), Cool Pi CM5 GenBook, Anbernic RG35XXSP, GameForce Ace, IBM P11, Kontron i.MX93 OSM-S, NanoPC-T6
    • Dodana podpora za zaslonske plošče Anbernic RG28XX, On Tat Industrial Company KD50G21-40NT-A1, Innolux G070ACE-LH3, Melfas lmfbx101117480, Densitron DMT028VGHMCMI-1D, Microchip AC40T08A, AOU B116XTN02.3, AUO B116XAN06.1 .116, B04.1XAT101, BOE TV2WUM -LL140, BOE NV41WUM-N133, BOE NV63WUM-N116, BOE NV4WHM-A140D, BOE NE6WUM-N116G, CMN N2BCA-EA116, CMN N2BCP-EA601, CSW MNB1LS4-88577, Starry erXNUMX.
    • Zvočni podsistem je dodal podporo za čipe in kodeke RME Digiface USB, AMD ACP 7.1, Mediatek MT6367, MT8365, Realtek RTL1320, C-Media CM9825. Stari zvočni gonilniki za Intel ASoC so bili razglašeni za zastarele, zato je priporočljiva uporaba gonilnikov AVS. Veliko izboljšav je bilo narejenih v gonilniku SoundWire.

Vir: opennet.ru

Dodaj komentar