Po dveh mesecih razvoja je Linus Torvalds predstavil izdajo jedra Linux 6.1. Med najbolj opaznimi spremembami so: podpora za razvoj gonilnikov in modulov v jeziku Rust, posodobitev mehanizma za določanje uporabljenih strani pomnilnika, poseben upravitelj pomnilnika za programe BPF, sistem za diagnosticiranje težav s pomnilnikom KMSAN, mehanizem zaščite KCFI (Kernel Control-Flow Integrity) ter uvedba strukture Maple tree.
V novo različico je bilo vključenih 15115 popravkov od 2139 razvijalcev, velikost popravka pa znaša 51 MB, kar je približno polovica velikosti popravkov jedra 6.0 in 5.19. Spremembe so zajele 13165 datotek, dodanih je bilo 716247 vrstic kode, odstranjene pa 304560 vrstic. Približno 45% vseh sprememb v 6.1 se nanaša na gonilnike naprav, približno 14% sprememb se nanaša na posodobitev kode, specifične za strojne arhitekture, 14% se nanaša na omrežno infrastrukturo, 3% na datotečne sisteme in 3% na notranje pod sisteme jedra.
Glavne novosti v jedru 6.1:
- Pomnilnik in sistemske storitve
- Dodana je bila možnost uporabe jezika Rust kot drugega jezika za razvoj gonilnikov in modulov jedra. Glavni motiv za podporo jeziku Rust je poenostavitev pisanja varnih in kakovostnih gonilnikov naprav, kar zmanjša verjetnost napak pri upravljanju s pomnilnikom. Podpora jeziku Rust ni privzeto aktivirana in ne povzroči, da bi Rust postal obvezna odvisnost pri gradnji jedra. V jedro je zaenkrat sprejet minimalen, okrnjen različica popravkov, ki je skrajšana z 40 na 13 tisoč vrstic kode in zagotavlja le nujno potrebno, zadostno za sestavo enostavnega modula jedra, napisanega v jeziku Rust. V prihodnje je načrtovano postopno povečanje obstoječe funkcionalnosti, pri čemer se bodo prenesle tudi druge spremembe iz veje Rust-for-Linux. Hkrati se razvijajo projekti za uporabo ponujene infrastrukture za razvoj gonilnikov za naprave NVMe, omrežnega protokola 9p in GPU Apple M1.
- Za sisteme temeljene na arhitekturama AArch64, RISC-V i LoongArch s EFI implementirana je mogućnost direktnog pokretanja komprimovanih slika jezgra. Dodani su handleri za učitavanje, pokretanje i isključivanje slika jezgra, pozivani direktno iz EFI zboot-a. Takođe su dodani handleri za instalaciju i uklanjanje protokola iz baze podataka protokola EFI. Prethodno je dekompresija vršena odvojenim loader-om, a sada to može raditi handler u samom jezgru – slika jezgra se formira kao EFI-aplikacija.
- U sastav je prihvaćena deo zakrpa s implementacijom višeslojnog modela upravljanja memorijom, koji omogućava razdvajanje banki memorije s različitim karakteristikama performansi. Na primer, najintenzivnije korišćene stranice mogu se smeštati u najbržu memoriju, dok se retko korišćene stranice mogu čuvati u relativno sporijoj memoriji. U jezgru 6.1 usvojen je mehanizam za određivanje prisustva intenzivno korišćenih stranica u sporoj memoriji radi njihovog premještanja u brzu memoriju, kao i implementirana je zajednička koncepcija nivoa memorije i njihove relativne performanse.
- U sastav je uključen mehanizam MGLRU (Multi-Generational LRU), koji je zamenio staru implementaciju LRU (Least Recently Used) zasnovanu na dve kolone višeslojnom strukturom, bolje određujući koje stranice memorije se zaista koriste, a koje se mogu isključiti u deo za razmenu.
- Dodata je podrška za predloženu strukturu podataka «maple tree» koju su inženjeri Oracle-a predstavili, a koja se pozicionira kao efikasnija zamena za strukturu «red-black tree». Maple tree predstavlja varijaciju B-stabla, koja podržava indeksiranje po opsegu vrednosti i projektovana je za efikasno korišćenje keša. sodobnih procesorjev. Na maple tree već su prevedeni neki pod sistemi upravljanja memorijom, što je pozitivno uticalo na njihovu performansu. U budućnosti, maple tree bi mogao da se koristi za implementaciju zaključavanja po opsegu (range locking).
- V podsystemo BPF je bila dodana možnost ustvarjanja 'destruktivnih' BPF programov, ki so posebej zasnovani za sprožitev nujnega zaključka dela prek klica crash_kexec(). Takšni BPF programi so lahko potrebni za namene odpravljanja napak za sprožitev ustvarjanja crash-dumpa ob določenem času. Za dostop do destruktivnih operacij ob nalaganju BPF programa je potrebno navesti zastavo BPF_F_DESTRUCTIVE, aktivirati sysctl kernel.destructive_bpf_enabled in imeti pravice CAP_SYS_BOOT.
- Za BPF programe je omogočeno prečiščevanje elementov cgroup, pa tudi prečiščevanje virov (datoteke, vma, procesi itd.) določenega niti ali naloge. Implementirana je nova vrsta mape za ustvarjanje uporabniških obročastih pomnilnikov (user ring buffer).
- Dodana je posebna funkcija za dodeljevanje pomnilnika v BPF programih (memory allocator), ki zagotavlja varnejše dodeljevanje pomnilnika v okviru BPF kot privzeti kmalloc().
- Integriran je prvi del sprememb, ki omogočajo ustvarjanje gonilnikov za vhodne naprave z vmesnikom HID (Human Interface Device), ki so implementirani v obliki BPF programov.
- Iz jedra je bilo v celoti odstranjeno kodo za podporo formatu izvršnih datotek a.out, ki je bil razvrščen med zastarele v izdaji 5.1, od različic 5.18 in 5.19 pa onemogočen za glavne arhitekture. Format a.out se že dolgo ne uporablja v sistemih z Linuxom, generacija datotek a.out pa ni podprta z modernimi orodji v konfiguracijah za Linux privzeto. Naložnik za datoteke a.out lahko v celoti implementiramo v uporabniškem prostoru.
- Za sisteme, ki temeljijo na arhitekturi naborov ukazov LoongArch, uporabljeni v procesorjih Loongson 3 5000 in ki izvajajo nov RISC ISA, podoben MIPS in RISC-V, je bila izvedena podpora za dogodke merjenja zmogljivosti (perf event), kexec, kdump in JIT-kompilacijo BPF.
- V vmesniku asinhronih vhodov/izvoda io_uring je bil predlagan nov način IORING_SETUP_DEFER_TASKRUN, ki omogoča začasno odložitev izvajanja del povezanih z obročastim pomnilnikom, dokler ne pride zahteva iz aplikacije, kar se lahko uporablja za organizacijo izvajanja del v serijah in preprečevanje težav s zamudami zaradi izgonov aplikacije ob neprimernem trenutku.
- Procesom v uporabniškem prostoru je omogočeno, da iniciirajo pretvorbo območja običajnih strani pomnilnika v niz velikih strani pomnilnika (Transparent Huge-Pages).
- Dodana je implementacija naprave /dev/userfaultfd, ki omogoča dostop do funkcionalnosti sistemskega klica userfaultfd() z uporabo pravic dostopa v FS. Funkcionalnost userfaultfd omogoča ustvarjanje obdelovalcev klicev do nealokiranih strani pomnilnika (page faults) v uporabniškem prostoru.
- Povišani so zahteve glede različice orodja GNU Make — za sestavljanje jedra je zdaj potrebna najmanj različica 3.82.
- Дисковая подсистема, ввод/вывод и файловые системы
- V datotečni sistem Btrfs so bile uvedene pomembne optimizacije zmogljivosti, med drugim je bila zmogljivost klica ioctl FIEMAP povečana za več redov. Dodana je podpora za asinhrono predpomnjeno pisanje za aplikacije, ki uporabljajo io_uring. V operacijo 'send' je dodana podpora za datoteke, zaščitene z fs-verity.
- V FS ext4 so bile dodane optimizacije zmogljivosti, povezane z vzdrževanjem dnevnika in delovanjem v načinu samo za branje.
- V datotečnem sistemu EROFS (Enhanced Read-Only File System), namenjenem za uporabo na particijah, dostopnih v načinu samo za branje, je bila implementirana možnost skupne shranitve podatkov, ki se podvajajo v različnih FS.
- V sistemski klic statx() je dodana možnost izhoda informacij o možnosti uporabe neposrednega vnosa/izvoda na datoteki.
- V podsistem FUSE (Filesystems in User Space) je dodana podpora za ustvarjanje začasnih datotek s flagom O_TMPFILE.
- Virtualizacija in varnost
- Zamenjena je implementacija mehanizma zaštite CFI (Control Flow Integrity), koji dodaje provjeru za svaku neizravnu funkcionalnu pozivnicu kako bi se otkrili neki oblici neodređenog ponašanja, koji potencijalno mogu dovesti do kršenja normalnog reda izvršenja (control flow) uslijed korištenja eksploata koji mijenjaju pokazivače na funkcije pohranjene u memoriji. Standardna implementacija CFI iz projekta LLVM zamijenjena je varijantom, koja se također temelji na korištenju Clanga, ali je posebno prilagođena za zaštitu niskorazinskih sustava i jezgre operativnih sustava. U LLVM će nova implementacija biti ponuđena u izdanju Clang 16 i uključivat će se opcijom "-fsanitize=kcfi". Ključna razlika nove implementacije je ta što nije vezana uz optimizacije u fazi povezivanja (LTO) i ne dovodi do zamjene pokazivača funkcija s referencama u tablici prijelaza.
- Za LSM module (Linux Security Module) omogućena je izrada handlera koji presreću operacije stvaranja prostora imena.
- Pružena su sredstva za verifikaciju digitalnih potpisa PKCS#7 u BPF programima.
- U /dev/random vraćena je mogućnost otvaranja u neblokirajućem modu (O_NONBLOCK), koja je iz nepažnje uklonjena u kernelu 5.6.
- Na sustavima s arhitekturom x86 dodato je ispisivanje upozorenja u slučaju mapiranja od strane jezgrenih pod-sustava memorijskih stranica, koje istovremeno dopušta izvršavanje i pisanje. U budućnosti se razmatra mogućnost potpunog zabrane takvog mapiranja memorije.
- Dodana je mehanizacija za ispravljanje 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đeni su kripto-nadzorni generator pseudonasumičnih brojeva CRNG, korišten u pozivu getrandom. Promjene su pripremili Jason Donenfeld, autor. VPN WireGuard i usmjerene su na povećanje sigurnosti dobivanja pseudonasumičnih cijelih brojeva.
- Mrežna podsistem
- U TCP steku implementirana je mogućnost (po defaultu isključena) odvojenog korištenja hash-tablica soketa za svaki prostor imena, što omogućuje povećanje performansi sustava s velikim brojem prostora imena.
- Код для поддержки устаревшего протокола DECnet удалён. Для пространства пользователя оставлены заглушки API, позволящие компилировать приложения, использующие DECnet, но эти приложения не смогут подключиться к сети.
- Документирован протокол netlink.
- Oprema
- В драйвере amdgpu добавлена поддержка проброса DSC (Display Stream Compression) для сжатия данных без потерь при обмене информацией с экранами, поддерживающими высокое разрешение. Продолжается работа по обеспечению поддержки платформ AMD RDNA3 (RX 7000) и CDNA (Instinct). Добавлена поддержка IP-компонентов DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x и GMC 11.x. В драйвере amdkfd (для дискретных GPU AMD, таких как Polaris) реализована поддержка GFX 11.0.3.
- В драйвере i915 (Intel) включена поддержка GPU Meteor Lake. Для Meteor Lake и более новых GPU обеспечена поддержка интерфейса DP 2.0 (DisplayPort). Добавлены идентификаторы для видеокарт на базе микроархитектуры Alder Lake S.
- Добавлена поддержка звуковых подсистем, реализованных в процессорах Apple Silicon, Intel SkyLake и Intel KabyLake. В звуковом драйвере CS35L41 HDA обеспечена поддержка перехода в спящий режим. Добавлена поддержка ASoC (ALSA System on Chip) для встроенных звуковых чипов Apple Silicon, AMD Rembrant DSPs, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake и Kaby Lake, Mediatek MT8186, NXP i.MX8ULP DSPs, Qualcomm SC8280XP, SM8250, SM8450 и Texas Instruments SRC4392.
- Добавлена поддержка LCD-панелей 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.
- Добавлена поддержка AHCI SATA-контроллеров, используемых в SoC Baikal-T1.
- Добавлена поддержка Bluetooth-чипов MediaTek MT7921, Intel Magnetor (CNVi, интегрированная связь), Realtek RTL8852C, RTW8852AE и RTL8761BUV (Edimax BT-8500).
- В драйвере ath11k для беспроводных модулей Qualcomm добавлена поддержка спектрального сканирования в диапазоне 160 MHz, реализован многопоточный NAPI, улучшена поддержка Wi-Fi чипов Qualcomm WCN6750.
- Добавлены драйверы для клавиатуры к PinePhone, тачпадов InterTouch (ThinkPad P1 G3), X-Box Adaptive Controller, PhoenixRC Flight Controller, VRC-2 Car Controller, DualSense Edge Controller, управляющих панелей IBM (IBM Operation Panel), пультов XBOX One Elite, планшетов XP-PEN Deco Pro S и Intuos Pro Small (PTH-460).
- Добавлен драйвер для криптографических ускорителей Aspeed HACE (Hash and Crypto Engine).
- Добавлена поддержка интегрированных Thunderbolt/USB4 контроллеров Intel Meteor Lake.
- Добавлена поддержка смартфонов Sony Xperia 1 IV, Samsung Galaxy E5, E7 и Grand Max, Pine64 Pinephone Pro.
- Dodana je podpora za ARM SoC in plošče: AMD DaytonaX, Mediatek MT8186, Rockchips RK3399 in 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. Posodobljeni so gonilniki za SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom in NXP.
Hkrati je latinskoameriška Fundacija prostega programska oprema oblikovala različico popolnoma prostega jedra 6.1 — Linux-libre 6.1-gnu, očiščenega elementov programske opreme in gonilnikov, ki vsebujejo neproste komponente ali dele kode, katerih področje uporabe je omejeno s strani proizvajalca. V novi izdaji je bila izvedena čiščenje novega gonilnika rtw8852b in DTS-datotek za različne SoC Qualcomm in MediaTek s procesorji, temelječimi na arhitekturi AArch64. Posodobljen je bil koda čiščenja blobov v gonilnikih in podsystemih amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. Popravljena je bila čistilna funkcija za zastarele gonilnike tm6000 TV kartic, cpia2 v4l, sp8870, av7110.
Izvor: opennet.ru
