После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 6.8. Среди наиболее заметных изменений: драйвер Xe для GPU Intel, режим защиты блочных устройств с примонтированными ФС, механизм планировщика задач Deadline server, автоматическая оптимизация слияния идентичных страниц памяти, первый драйвер на языке Rust, системные вызовы listmount и statmount, удаление bpfilter и SLAB, механизм guest_memfd в KVM, профилирование обращения к данным.
В новую версию принято 15641 исправлений от 2018 разработчиков, размер патча — 44 МБ (изменения затронули 12212 файлов, добавлено 663864 строк кода, удалено 339094 строк). В прошлом выпуске было 18405 исправлений от 2066 разработчиков, размер патча — 72 МБ. Около 42% всех представленных в 6.8 изменений связаны с драйверами устройств, примерно 15% изменений имеют отношение к обновлению кода, специфичного для аппаратных архитектур, 14% связано с сетевым стеком, 6% — с файловыми системами и 3% c внутренними подсистемами ядра.
В Git-репозитории с ядром 6.8 присутствует 9.996 млн. объектов, что свидетельствует о том, что следующее ядро 6.9 преодолеет знаковый рубеж в 10 млн git-объектов. Ранее смена номеров веток 3.x и 4.x хорошо коррелировала с числом git-объектов в репозитории — ядро 3.0 было выпущено, когда в репозитории находилось примерно 2 млн объектов, а ядро 4.0 — 4 млн объектов. При этом в 2019 году выпуск 5.0 разорвал данную логическую цепочку, так как в при его формировании репозиторий включал примерно 6.5 млн git-объектов.
Основные новшества в ядре 6.8:
- Дисковая подсистема, ввод/вывод и файловые системы
- Добавлен режим блокирования прямой записи на блочные устройства, на которых имеются примонтированные файловые системы (после включения режима, пользователь root не сможет внести изменения в ФС через манипуляции на уровне блочного устройства). По умолчанию режим отключён и требует указания параметра BLK_DEV_WRITE_MOUNTED при сборке. Для разделов с Btrfs блокировка пока не работает, так как в код Btrfs ещё не приняты необходимые изменения.
- Добавлены системные вызовы listmount() и statmount(), позволяющие из пространства пользователя получить детальную информацию о примонтированных файловых системах.
- U datotečnom sustavu XFS nastavlja se rad na implementaciji mogućnosti primjene alata fsck za provjeru i ispravljanje otkrivenih problema u online-režimu, bez odmontiranja datotečnog sustava.
- V Ext4 je bila za bloke manjše velikosti od spomina uvedena funkcija dioread_nolock, ki omogoča boljšo zmogljivost z odpravo nepotrebnih zaklepov. Nekatere funkcije so bile prevedene na uporabo folio strani spomina.
- V Btrfs je bila dodana podpora za montažno zastavico 'nospace_cache', ki onemogoča predpomnjenje prostih blokov. Nekatere funkcije so bile preusmerjene na uporabo folio strani spomina.
- V datotečnem sistemu EROFS (Extendable Read-Only File System), namenjenem za uporabo na razdelkih, dostopnih v načinu samo za branje, je bila dodana podpora za stiskanje sub-strani in izboljšano delovanje v pogojih pomanjkanja spomina.
- V datotečnem sistemu F2FS je bila izboljšana podpora za zaščitene pomnilniške naprave (razdelitev v cone, kjer so dovoljeni le po zaporedni dodaji podatkov z obnovitvijo celotne skupine blokov).
- Za FS SMB je bila omogočena možnost ustvarjanja blokovnih in simbolnih datotek naprav.
- V Bcachefs je bila uvedena parcialna podpora za preverjanje in obnovo celovitosti pritrjenih datotečnih sistemov.
- V podsklopu device-mapper je bila prenehana podpora za obdelovalce MD_LINEAR, MD_MULTIPATH in MD_FAULTY, ki so bili razglašeni za zastarele leta 2021.
- Pomnilnik in sistemske storitve
- V podsklopu Zswap je bila dodana možnost prisilnega nalaganja 'hladnih' strani spomina v resnični pomnilniški del, aktivirana ob pomanjkanju pomnilnika. Zswap izvaja predpomnjenje izgnanih strani, shranjuje jih v pomnilniku v stisnjeni obliki, kolikor je mogoče, brez preliva v pravi nestisnjeni del na disku. Spremembe ob pomanjkanju pomnilnika omogočajo zmanjšanje velikosti shranjenega v RAM Zswap skladišča in sprostitev pomnilnika sistemu.
- V Zswap je bil predlagan nov način, ki popolnoma onemogoča zamudo pri pisanju (writeback) v pravi pomnilniški del, če pisanje ni bilo uspešno, in ne prepisuje že obstoječih strani v Zswap skladišču v del podaljšanja.
- V načrtovalnik nalog je bila dodana mehanizem SCHED_DEADLINE strežnika, ki rešuje problem nepridobivanja virov CPU s strani običajnih nalog v pogojih monopolizacije CPU s strani nalog visoke prioritete (realnočasovne). Za preprečevanje monopolizacije CPU se je v jedru prej uporabljal mehanizem Real-time throttling, ki je poskušal rezervirati 5% za naloge nizke prioritete, kar je pustilo 95% časa realnočasovnim nalogam. Ta mehanizem je pustil veliko želja, saj običajne naloge v mnogih situacijah niso prejemale procesorskega časa. SCHED_DEADLINE strežnik omogoča bolj učinkovit mehanizem rezervacije virov.
- V podsystems DAMON (Data Access MONitor), ki omogoča spremljanje dostopa procesa do podatkov v pomnilniku (na primer, možno je ugotoviti, katerim območjem pomnilnika je proces dostopal, in katera območja pomnilnika so ostala neizkoriščena), je bil dodan mehanizem samodejnega nastavljanja agresivnosti porabe pomnilnika na podlagi določenih kvot.
- Dodana je podpora za večdimenzionalne velike strani pomnilnika (mTHP — multi-size Transparent Huge Pages), ki omogoča dodelitev pomnilnika v blokih, ki so večji od osnovne strani, vendar manjši od tradicionalne THP-strani.
- Dodana je podpora za velike fole (page folios, združene strani pomnilnika) za anonimni pomnilnik (nepovezan s FS, na primer dodeljen s funkcijo malloc). Sprememba je usmerjena v povečanje zmogljivosti s sprostitvijo večjih kosov pomnilnika med dostopom do neodklenjenih strani pomnilnika (page faults). Na primer, uporaba velikih folov je omogočila 5% zmanjšanje časa ponovne gradnje jedra (ob zmanjšanju časa porabljenega na ravni jedra za 40%).
- V konfiguracijsko datoteko jedra je dodan parameter TRANSPARENT_HUGEPAGE_NEVER, ki omogoča izklop uporabe velikih strani pomnilnika (Transparent Huge Pages).
- V sistemski klic userfaultfd(), ki omogoča ustvarjanje obdelovalcev za dostop do neodklenjenih strani pomnilnika (page faults) v uporabniškem prostoru, je bila dodana operacija UFFDIO_MOVE, ki omogoča prenos strani pomnilnika v virtualnem naslovnem prostoru brez izvajanja operacije dodelitve strani pomnilnika med pakiranjem kupa (heap compaction). V izvedenih testih je uporaba UFFDIO_MOVE omogočila 40% znižanje časa pakiranja v primerjavi z uporabo operacije UFFDIO_COPY.
- Dodana je funkcija „KSM advisor“, koja omogućava automatsku optimizaciju parametara podsistema spajanja identičnih stranica memorije (KSM – Kernel Samepage Merging).
- Nastavljen je prenos promena iz grane Rust-for-Linux, vezanih za korišćenje jezika Rust kao drugog jezika za razvoj drajvera i modula jezgra (podrška za Rust nije aktivirana po defaultu i ne dovodi do uključivanja Rust-a u obavezne zavisnosti pri gradnji jezgra). U novoj verziji uključene su promene koje dodaju Rust-biblioteku preko apstrakcionog nivoa phylib i koriste ovu biblioteku drajver ax88796b_rust, koji obezbeđuje podršku za PHY-interface Ethernet kontrolera Asix AX88772A (100MBit). Što se funkcionalnosti tiče, drajver na Rust-u je potpuno ekvivalentan starom drajveru ax88796b, napisanom na jeziku C, i može se koristiti sa mrežnim karticama X-Surf 100, opremljenim čipom AX88796B. Za arhitekturu LoongArch omogućeno je pisanje modula na jeziku Rust. Vršen je prelaz na korišćenje verzije Rust 1.74.1.
- Dodana je funkcija BPF token, koja omogućava selektivno delegiranje obrade pojedinačnih mogućnosti BPF, kao što su učitavanje BPF programa ili kreiranje BPF mapa, privilegovanim procesima u korisničkom prostoru, čija je pouzdanost potvrđena posebnim tokenom.
- Proširena je funkcionalnost verifikatora BPF programa.
- U utilitar perf dodata je podrška za profilisanje podataka, koja omogućava praćenje čitanja i pisanja u strukture podataka, korišćene za identifikaciju najaktivnije modifikovanih polja u strukturama. Na sistemima sa procesorima koji podržavaju prikupljanje informacija o operacijama sa memorijom (Intel, AMD, ARM), za prikupljanje statistike treba koristiti komandu „perf mem record“, a za izlaz izveštaja o pristupima strukturama podataka – „perf annotate —data-type“.
- Optimizovana je efikasnost obrade sistemskih poziva na arhitekturi s390 (IBM Z), što je dovelo do ubrzanja ulaska u sistemski poziv za otprilike 11% u testovima.
- Omogućena je promena veličine bafera za praćenje, korišćenih za baferisanje informacija o događajima praćenja, koje se šalju u korisnički prostor.
- Prej kratkim je bil odstranjen zastarel mehanizem razporejanja pomnilnika SLAB, nadomeščen z le SLUB, ki se sedaj uporablja v jedru. Kot razlog so navedene težave s vzdrževanjem, težave v kodi in podvajanje funkcionalnosti s sodobnejšim allocatorjem SLUB.
- Pri sestavljanju jedra je vključena oznaka „-Wmissing-prototypes“, ki generira opozorila za klice globalnih funkcij, ki nimajo opredeljenega prototipa.
- Za arhitekturo RISC-V na sistemih s podporo razširitvi SUSP SBI je bila implementirana podpora za prehod v stanje mirovanja s shranjevanjem stanja v RAM-u. Omogočena je uporaba sistemskega klica riscv_hwprobe() za pridobivanje informacij o podprtih razširitvah arhitekture RISC-V.
- Virtualizacija in varnost
- Dodani so novi sistemski klici lsm_list_modules(), lsm_get_self_attr() in lsm_set_self_attr() za izpis seznama naloženih LSM modulov (Linux Security Modules) ter pridobitev/nastavitev atributov LSM modula. Dodana je nova struktura lsm_ctx za komunikacijo v kontekstu LSM med uporabniškim prostorom in jedrom.
- Podsystem AppArmor je bil preusmerjen na uporabo algoritma SHA-256 za preverjanje pravil, namesto hashe SHA-1.
- Iz jedra je bila odstranjena implementacija funkcije strlcpy(), ki je bila poleti vključena v knjižnico C Glibc 3.38. Strlcpy je alternativa funkciji strncpy(), ki zagotavlja zaščito pred prelivanjem pomnilnika in obvezno doda zaključno ničelno bajto.
- V hipervizor KVM Dodana je podpora za podsystem guest_memfd (guest-first memory), ki omogoča funkcije upravljanja s pomnilnikom, kar omogoča funkcionalnosti in optimizacije, ki jih ni mogoče doseči z uporabo skupnega sistema upravljanja pomnilnika. Na primer, guest_memfd omogoča dodeljevanje in odražanje območja pomnilnika v gostujočem sistemu, ki je nedosegljivo za gostiteljsko okolje, kar se lahko uporablja za izvajanje zaupa vrednih izračunov.
- Za gostujoče sisteme, ki delujejo pod nadzorom hipervizorja KVM, je bila vključena podpora za način LAM (Linear Address Masking), ki ga zagotavljajo Intelovi procesorji, kar omogoča uporabo dela bitov 64-bitnih kazalcev (od 57. do 62. bit) za shranjevanje metapodatkov, ki niso povezani z naslavljanjem.
- V hipervizorju KVM za sisteme, ki temeljijo na arhitekturi ARM64, je bila dodana podpora za 52-bitne (LPA2) fizične naslove. Za sisteme z arhitekturo x86 je bila omogočena gradnja brez emulacije hipervizorjev Hyper-V, kar zmanjšuje velikost jedra.
- Dodana je bila naprava iaa (IAA Compression Accelerator) za pospeševanje operacij stiskanja in razpakiranja podatkov z metodo DEFLATE, ki izkorišča možnosti kriptoakceleratorjev Intel Analytics Accelerator (IAA).
- Na strani gostiteljskega okolja je bila implementirana podpora za mehanizem Intel TDX (Trusted Domain Extensions), ki omogoča, da pri uporabi hipervizorja KVM ustvarimo zaščitena gostujoča okolja, v katerih se uporablja šifriranje pomnilnika. virtualnih naprav.
- V SELinux je bil dodan SID-identifikator 'init', ki omogoča prepoznavanje procesov, ki se izvajajo na začetku postopka nalaganja, še preden se uporabljajo politike SELinux. Izboljšano je bilo vmesnik /sys/fs/selinux za upravljanje SELinux.
- Mrežna podsistem
- Izvedena je bila nizkozložna reorganizacija osnovnih omrežnih podatkovnih struktur, izvedena za povečanje učinkovitosti predpomnjenja. Prej so bila polja v strukturah omrežnega sklada socks, netdev, netns in mibs razporejena po dodajanju, kar je omejevalo uporabo procesorskega predpomnilnika. Pregled postavitve spremenljivk v strukturah je privedel do opaznega povečanja hitrosti delovanja TCP, zahvaljujoč zmanjšanju uporabe vrstic pomnilnika v fazi prenosa podatkov in optimizaciji dostopa do spremenljivk. V primerih obdelave več paralelnih TCP-povezav lahko pospešek doseže 40%.
- Odstranjena je bila podsistem bpfilter, ki je uporabljal BPF za filtriranje paketov. Bpfilter je bil na voljo od različice 4.18, a nikoli ni bil dosežen nivo, primeren za široko uporabo. V zadnjih letih se koda bpfilter v jedru ni razvijala, razvoj pa se je nadaljeval v podjetju Facebook v ločenem repozitoriju.
- Oprema
- V sestavi je vključen nov drm gonilnik (Direct Rendering Manager) Xe za GPU, ki temelji na arhitekturi Intel Xe, ki se uporablja v grafičnih karticah Intel družine Arc in integrirani grafiki, ki izhajajo iz procesorjev Tiger Lake. Gonilnik Xe je pozicioniran kot temelj za delovanje novih čipov, ki ni odvisen od kode za podporo starejših platform. Gonilnik je zgrajen z uporabo nove arhitekture, pri kateri se bolj aktivno uporabljajo obstoječe komponente podskupine DRM in tipične komponente gonilnika i915, ki niso vezane na točno določene GPU, na primer koda za interakcijo z zasloni, model pomnilnika in izvedba execbuf. V Mesu je delo OpenGL in Vulkan nad gonilnikom Xe реализirano na ravni sprememb, ki so bile vnesene v obstoječe Mesa gonilnike Iris in ANV.
- V gonilniku i915 se nadaljuje delo na implementaciji podpore za čipe Intel LunarLake (Xe 2). Izboljšana je podpora za čipe Intel Meteor Lake.
- V gonilniku Nouveau je implementirana nastavitev za privzeto uporabo funkcij programske opreme GSP za delo z GPU NVIDIA, ki temelji na mikroarhitekturah Turing in Ampere, kjer se operacije inicializacije in upravljanja GPU izvajajo z ločenim mikrokrmilnikom GSP (GPU System Processor). Ob aktivaciji nastavitve bo gonilnik deloval prek dostopa do programske opreme, namesto neposrednega programiranja operacij za interakcijo z strojno opremo.
- V gonilniku AMDGPU je implementirana podpora za ACPI WBRF in VPE DPM, spremenjeno je obravnavanje hitrosti kanala PCIe, v uporabljenih za sinhronizacijo vrstah so aktivirani 64-bitni zaporedni številčki, dodana je podpora mehanizmov upravljanja barv, specifičnih za AMD, rešena je težava s prehodom v stanje spanja.
- Dodana je začetna implementacija gonilnika za GPU Broadcom VideoCore 7.1, ki se uporablja na karticah Raspberry Pi 5.
- Dodan je gonilnik za GPU serije PowerVR 6 na osnovi mikroarhitekture Rogue podjetja Imagination Technologies.
- Dodana je podpora za krmilnike Thunderbolt/USB4, integrirane v čipe, ki temelje na mikroarhitekturi Intel Lunar Lake.
- Dodani so gonilniki za kamere, uporabljene v SoC Starfive, GalaxyCore GC2145/GC0308, Chips&Media Wave in THine THP7312.
- Dodana je podpora za igralne krmilnike NSO (Nintendo Switch Online) — različice starih krmilnikov SNES (Super Nintendo), Genesis in N64 (Nintendo 64), prilagojene za Nintendo Switch. Dodan je gonilnik za igralne plošče Adafruit Seesaw. V gonilniku xpad je dodana podpora za krmilnike Lenovo Legion Go.
- V gonilniku dts je bila dodana podpora za igralne naprave Powkiddy RK2023, Powkiddy X55 in Anbernic RG351V.
- Dodana je podpora za avdio sisteme, uporabljene v čipih NXP i.MX8m MICFIL, Qualcomm SM8250, AMD ACP5x, Intel Arrow Lake, SM8550, SM8650 in X1E80100.
- Podjetje AMD je izvedlo spremembe, povezane s podporo za prihodnjo serijo procesorjev, temelječih na novi mikroarhitekturi Zen 5.
- Dodana je podpora za ARM64 SoC: Qualcomm SM8650 (Snapdragon 8 Gen 3), Qualcomm X1E80100 (Snapdragon X Elite), Samsung Exynos Auto v920, Google GS101 (Tensor G1), MediaTek MT8188 in Unisoc UMS9620 (Tanggula 7).
- Dodana je podpora za ARM-platforme in naprave: Huashan Pi, Microsoft Lumia, HTC One Mini 2, Motorola MotoG 4G, Huawei Honor 5X/GR5, Anbernic RG351V, Powkiddy RK2023, Powkiddy X55, ComXpress na osnovi Marvell CN913x, Chromebook Lenovo, Asus in Acer na osnovi Mediatek MT8183, Toradex Verdin AM62, plošče na osnovi Allwinner H616/H618.
- Prenehana je podpora za procesorje ARM11 ARMv6K SMP.
Hkrati je Latinska fundacija prostega programska oprema oblikovala različico popolnoma prostega jedra 6.8 — Linux-libre 6.8-gnu, očiščenega od elementov programske opreme in gonilnikov, ki vsebujejo neproste komponente ali dele kode, katerih razširitev je omejena s strani proizvajalca. V izdaji 6.8 je bil posodobljen koda čistilcev blobov v različnih gonilnikih in podsistemih. Opravljena je bila čiščenje gonilnikov Intel qat_420xx, Imagination PowerVR, Intel Xe, Chips&Media Wave5, Intel VSC, Aquantia PHY in Realtek rtw8922a. V povezavi z odstranitvijo iz jedra je bila prenehana čiščenje gonilnikov atmel, hermes, orinoco_usb, libertas_cs in zd1201. Opravljena je bila čistitev imen blobov v dts-datotekah (devicetree) za arhitekture ARM in Aarch64. Odpravljene so bile težave s čiščenjem gonilnika i915.
Izvor: opennet.ru
