После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 6.15. Среди наиболее заметных изменений: механизм аудита в Landlock, режим закрепления маппинга памяти, подсистема fwctl, драйвер Nova для GPU NVIDIA, реализация хост-системы для гипервизора Hyper-V, поддержка зонированных устройств хранения в XFS, оптимизация сетевой подсистемы, scrub-проверка в Bcachefs, возможность контроля над операциями через io_uring.
В новую версию принято 15945 исправлений от 2154 разработчиков, размер патча — 59 МБ (изменения затронули 13596 файлов, добавлено 739608 строк кода, удалено 312168 строк). В прошлом выпуске было 12115 исправлений от 1984 разработчиков, размер патча — 39 МБ. Около 41% всех представленных в 6.15 изменений связаны с драйверами устройств, примерно 16% изменений имеют отношение к обновлению кода, специфичного для аппаратных архитектур, 13% связано с сетевым стеком, 5% — с файловыми системами и 4% c внутренними подсистемами ядра.
Основные новшества в ядре 6.15:
- Дисковая подсистема, ввод/вывод и файловые системы
- В механизм fanotify добавлена возможность отслеживания событий монтирования и отмонтирования.
- В XFS добавлена поддержка зонированных устройств хранения (разделение на зоны групп блоков или секторов, в которые допускается лишь последовательное добавление данных с обновлением целиком всей группы блоков). Добавлен флаг rwf_dontcache для отключения кэширования при записи. Реализована возможность атомарной записи сразу нескольких блоков данных.
- В Btrfs реализована возможность указания при монтировании отрицательных уровней сжатия zstd (от -15 до -1, например, «compress=zstd:-5»), обеспечивающих более высокую скорость работы ценой снижения эффективности сжатия. Улучшено кэширование файловых путей (в проведённом тесте выполнение операции «send» ускорилось на 30%). Добавлена поддержка блоков размером 2Кб.
- В EXT4 повышена производительность при воспроизведении журнала с очень большим числом отозванных записей (нагрузка, свойственная разделам под ФС Lustre). Реализован линейный поиск записей «dentry» (внутреннее представление элементов каталогов), решающий проблемы с доступом к некоторым файлам в режиме без учёта регистра символов. Налажена работа опции монтирования «errors=remount-ro». Повышена стойкость при обработке повреждённых ФС.
- V F2FS je implementiran ioctl za dobijanje informacija o prioritetu ulazno/izlazne operacije za određenu datoteku. Urađen je prelazak na korišćenje foloja stranica u memoriji (page folios).
- U Bcachefs je dodat režim „scrub“, u kojem se vrši provere ispravnosti čitanja svih podataka i metapodataka iz FS-a. U slučaju otkrivanja grešaka pokreće se procedura oporavka. U Bcachefs je takođe dodata podrška za rad sa FS-om čija je veličina bloka veća od veličine stranice u memoriji. Stabilizovan je format diskovnih struktura Bcachefs (dalji zahtevi za izmenu formata biće realizovani u obliku opcionih dodataka).
- U EROFS je dodata podrška za 48-bitnu adresaciju blokova.
- U FUSE podsistemu implementirani su sysctl default_request_timeout i max_request_timeout za postavljanje vremenskih ograničenja za izvršavanje zahteva, što omogućava praćenje zaglavljivanja FUSE komponenti koje rade u korisničkom prostoru. Maksimalna veličina imena datoteka u FUSE-u je povećana na 1024 karaktera.
- U sistemski poziv statmount() dodata je mogućnost dobijanja informacija o mapiranju identifikatora korisnika montiranih datotečnih sistema, koja se koristi za usklađivanje datoteka određenog korisnika na montiranom stranoj particiji sa drugim korisnikom u trenutnoj sistemu.
- Omogućeno je kreiranje tačke montiranja sa različitim mapiranjem identifikatora korisnika od onog kod izvorne montirane particije.
- U API-ju za upravljanje montiranjem izvršene su promene koje pojednostavljuju sastavljanje složenih hijerarhija datotečnih sistema bez otkrivanja pojedinačnih delova datotečnih sistema koje je potrebno ostaviti skrivenima.
- U podsistem za rad sa blok uređajima dodana je podrška za hardverske uređaje za zaštitu ključeva šifrovanja.
- U SMB datotečnom sistemu implementirana je opcija is_network_name_deleted i podrazumevano je uključen režim smb_server_kerberos5.
- Za OverlayFS dodata je opcija montiranja „override_creds“, pri čemu se za pristup donjim nivoima skladišta koriste kredencijali pozivatelja, a ne onoga ko je izvršio montiranje. Ova promena, na primer, omogućava da se pri montiranju OverlayFS zahteva korisnik sa ovlašćenjima CAP_SYS_ADMIN, ali koristi datotečni sistem sa kredencijalima bez ovog privilegija.
- V exFAT so pospešeni postopki brisanja datotek. Namesto da bi za vsak sproščeni kluster izbrisane datoteke posebej pošiljal zahteve „discard“, zdaj gonilnik skupno obdeluje zahteve. V izvedenem testu se je čas brisanja datoteke velikosti 80 GB skrajšal s 286 sekund na 1.6 sekunde.
- Vse pseudo-fs in fs EXT2 so prešli na novo API za montažo particij.
- Odstranjena je podpora za datotečne sisteme SYSV (SystemV/386, Xenix in Coherent), ki je od leta 2023 označena kot nedovoljena (orphaned).
- Pomnilnik in sistemske storitve
- Minimalna različica GCC, potrebna za sestavljanje jedra, je dvignjena na 8.1, Clang pa na 15.0.0.
- Dodana je pod sistem fwctl (Firmware Control), ki zagotavlja API za varno upravljanje z vdelanimi programi in izvajanje obdelovalcev na strani vdelanih programov iz uporabniškega prostora. Na podlagi fwctl so pripravljeni gonilniki za naprave CXL (Compute Express Link), Ethernet adapterje Mellanox ConnectX (mlx5) in servisne kartice AMD/Pensando.
- Razširjene so možnosti mehanizma pidfd, ki omogoča uporabo identifikatorjev, povezanih s specifičnimi procesi, in so za razliko od pid ponovno ne dodelitveni. Omogočeno je pridobivanje informacij o stanju zaključka procesa, identificiranega preko pidfd, po tem, ko je starševski proces prejel potrditev o zaključku otroškega procesa (reaped) in njegovi sredstva so bila sproščena. V sistemske klice je dodana zastavica PIDFD_SELF, s katero se lahko proces sklicuje na samega sebe.
- Za arhitekturo RISC-V je implementirana podpora za razširitve BFloat16, Zaamo (atomske operacije z pomnilnikom), Zalrsc (Load-Reserved/Store-conditional) in ZBKB (bitne operacije za kriptografijo).
- Pri sledenju je bila omogočena možnost shranjevanja argumentov klicanih funkcij in njihovega prikazovanja v dnevnikih sledenja.
- V sistem asinkronih vhodov/izhodov io_uring je dodana podpora za branje informacij o dogodkih epoll. Uporaba io_uring za obdelavo dogodkov epoll omogoča zmanjšanje števila preklopov kontekstov in omogoča obravnavo več dogodkov epoll hkrati.
- V podsystemu eBPF je bila izboljšana verifikacija programov z zankami. Dodane so nove instrukcije „timed_may_goto“, „load-acquire“ in „store-release“. Omogočena je sprememba razširjenih atributov datotek iz BPF programov. Dodana je funkcija try_alloc_pages(), namenjena dodeljevanju pomnilnika z visoko verjetnostjo neuspešnega izvajanja operacije (pri zagonu BPF programov v omejenih kontekstih).
Uvedena je nova ustanova zaklepanja — rqspinlock (Resilient Queued Spin Lock), ki med izvajanjem odkriva situacije, ki vodijo do medsebojnega zaklepanja. Nova ustanova omogoča nalaganje BPF programov, za katere verifikator ni zagotovil pravilne delovanja z zaklepanji.
- Zanesljivost dodeljevanja velikih pomnilniških strani (huge-page) je bila znatno izboljšana.
- Izračun kontrolnih vsot CRC64 je bil znatno pospešen na sistemih x86. Med drugim so za pospešitev uporabljene nove vektorske instrukcije iz nabora AVX-512. V nekaterih situacijah se je zmogljivost povečala za 100-krat.
- Prenos sprememb iz veje Rust-for-Linux, povezanih z uporabo jezika Rust kot drugega jezika za razvoj gonilnikov in modulov jedra, se je nadaljeval (podpora za Rust ni privzeto omogočena in ne povzroča vključitve Rust-a med obvezne odvisnosti za gradnjo jedra). Omogočena je uporaba makra v kodi jedra „#[kunit_tests()]“ za zagon enotnih testov. Dodana je podpora za arhitekturo ARMv7. Uvedena sta bila modula dma in hrtimer z Rust oblogo za DMA (dodana s strani Linusa mimo skrbnika, ki je po tem odstopil s svojega položaja) in visoko natančne časovnike. Razširjeni so moduli ‘list’, ‘str’, ‘sync’, ‘error’ in ‘alloc’. Dodana je podpora za nov sintaktični izraz ‘&raw’ (raw_ref_op).
- V podsystemu perf je bila omogočena profilacija zakasnitev z uporabo informacij z razporejevalnika opravil.
- Dodana je bila možnost ukaza jedra „traceoff_after_boot“, ki onemogoča sledenje po nalaganju jedra in zagonu procesa init. Možnost se lahko uporablja pri diagnosticiranju težav, povezanih z nalaganjem, saj zagotavlja, da se podatki sledenja, zbrani med nalaganjem, ne bodo prepisali.
- Podpora 32-bitnih sistemov x86, ki imajo več kot 8 CPU in 4 GB RAM, je prenehana. Takšna oprema se že dolgo ne proizvaja, sistemi, ki zahtevajo te vire, so bili preneseni na 64-bitne CPU.
- V izvedbo POSIX-timerjev so bile uvedene spremembe, ki omogočajo orodju CRIU (Checkpoint/Restore v uporabniškem prostoru), da shranjuje in obnavlja identifikatorje timerjev.
- Virtualizacija in varnost
- Dodana je možnost uporabe Linuxa kot osnovnega okolja (Dom0, root particija) za hipervisore Hyper-V (Microsoft Hypervisor). Gostišče upravlja hipervisor, organizira zagon gostujočih sistemov, dodeljuje vire in zagotavlja interakcijo virtualnih naprav z opremo. Upravljanje hipervisorja Hyper-V v Linuxu poteka preko naprave /dev/mshv.
- V modulu Landlock, ki neprivilegiranim programom omogoča omejevanje uporabe objektov jedra Linux (datotečne hierarhije, omrežni soketi, ioctl ipd.), je dodan mehanizem za revizijo. Revizija omogoča podrobno oceno razlogov za blokade dostopa, ki se zgodijo pri uporabi Landlocka, ter omogoča razumevanje, kdaj in katera operacija je bila blokirana, zakaj je bila blokada izvedena in katero pravilo se je uveljavilo.
- Dodana je možnost implementacije obdelovalcev v modulih LSM (Linux Security Modules), ki nadzorujejo dostop do sistema asinhronega vhodno/izhodnega sistema io_uring in omogočajo blokiranje uporabe io_uring za obhod omejitev dostopa do sistemskih klicev. Takšen obdelovalec je bil implementiran v LSM-modulu SELinux.
- V SELinux je bila omogočena uporaba politik na vseh vrstah podatkov, ki jih naloži jedro, vključno z mikroprogrami, varnostnimi politikami in potrdili.
- Dodana je bila funkcionalnost zaklepanja (seal) nekaterih operacij mapiranja pomnilnika, ki jih izvaja jedro v naslovnem prostoru procesa. Zaklepanje preklopi mapiranje v način samo za branje in preprečuje spremembo v primeru izkoriščanja ranljivosti. Ukrep se širi na mapiranje vDSO, vsyscall, vvar, sigpage in uprobes. Privzeti način je izključen, saj lahko moti delovanje nekaterih aplikacij. Za omogočanje je bila dodana gradbena nastavitev CONFIG_MSEAL_SYSTEM_MAPPINGS.
- Mrežna podsistem
- Delo na odstranitvi globalne zaklepanja omrežnega sklada RTNL (rtnl_lock) in njeni pretvorbi v zaklepe, vezane na posamezna omrežna imenska prostora, se nadaljuje.
- Dodana začetna možnost zajema omrežnih paketov preko io_uring s takojšnjim kopiranjem vsebine v pomnilnik programa v uporabniškem prostoru brez vmesnega predpomnjenja (zero-copy). V izvedenih testih je ta sprememba omogočila obvladovanje prometa preko 200 gigabitnega kanala, pri čemer se je uporabljalo eno jedro CPU.
- Implementirana sta sysctl tcp_rto_max_ms in možnost TCP-socketov TCP_RTO_MAX_MS, preko katerih je mogoče nastaviti največji čas med poskusi ponovnega prenosa paketov.
- V BPF je dodana serija povratnih klicev za pridobivanje informacij o času iz različnih delov omrežnega sklada, kar se lahko uporablja za diagnosticiranje težav z omrežnimi zamudami.
- Dodane so optimizacije zmogljivosti omrežnih operacij:
- Optimizacija GRO (Generic Receive Offload), ki združuje več manjših paketov v enega velikega, je zdaj vključena pri preklopu obdelave paketa na drug CPU (za ravnotežje obremenitve) pri uporabi podsystema XDP (eXpress Data Path), ki omogoča obdelavo paketov na ravni omrežnega gonilnika pred prenosom v omrežni sklad. Povečanje učinkovitosti obdelave TCP tokov z uporabo optimizacije lahko doseže dvakratnik.
- V pogojih velike obremenitve se zmogljivost funkcije connect() poveča do dvakrat s pomočjo zamenjave spin-blokade z mehanizmom sinhronizacije RCU (Read-Copy-Update) pri iskanju zapisov z informacijami o straneh povezave (izvorne in ciljne) in vratih. Dodatno je bila izvedena optimizacija nalaganja, ki je zagotovila povečanje učinkovitosti še za 229%. IP-naslove Izvedba MPTCP (Multipath TCP), razširitve protokola TCP za organizacijo dostave paketov hkrati po več poteh preko različnih omrežnih vmesnikov, povezanih z različnimi IP-naslovi, je bila pospešena. MPTCP v načinu z enim tokom je pospešen za 29%.
- V netfilterju, ob prisotnosti vtičnice, je bilo ustavljeno izvajanje iskalnih operacij poti v FIB (Forwarding Information Base). Zaradi te optimizacije se je učinkovitost povečala za 20%.
- Učinkovitost UDP v pogojih poplave (flood) se je povečala za 10%, zaradi izločanja odvečnih operacij s strukturo sk_tsflags pri prejemanju paketov.
- Zmogljivost UDP v pogojih poplave (flood) je povečana za 10 % zaradi izključitve odvečnih operacij s strukturo sk_tsflags pri prejemanju paketov.
- Dodan je gonilnik z implementacijo protokola MCTP-over-USB.
- Oprema
- V jedro je sprejeta začetna implementacija gonilnika Nova za GPU NVIDIA, opremljenih z GSP-programskimi opremami, ki se uporabljajo od serije NVIDIA GeForce RTX 2000, temelječe na mikroarhitekturi Turing. Gonilnik je napisan v jeziku Rust. V prvem koraku je dodana le osnova nova-core, ki šteje okoli 400 vrstic kode in izvaja osnovno raven abstrakcij nad programskimi vmesniki GSP. V naslednjem koraku načrtujejo vključitev DRM-gonilnika nova-drm (Direct Rendering Manager) v jedro za interakcijo z GPU iz uporabniškega prostora, kot tudi VFIO-gonilnika z upraviteljem vGPU, ki omogoča uporabo virtualnih GPU NVIDIA v sistemih virtualizacije.
- Nadaljuje se delo na drm-gonilniku (Direct Rendering Manager) Xe za GPU, temelječ na arhitekturi Intel Xe, ki se uporablja v grafičnih karticah Intel družine Arc in integrirani grafiki, od procesorjev Tiger Lake naprej. Dodana je podpora za SVM (Shared Virtual Memory), komponento okvira DRM, ki upravlja deljeno pomnilnik, skupno uporabljeno v CPU in GPU.
- V gonilniku i915 so dodani identifikatorji novih GPU.
- V gonilniku Nouveau je predelano GSP RPC in integriran vmesnik drm_slave_encoder.
- V gonilniku AMDGPU je implementirana podpora za arhitekturo DCN36 (Display Core Next). Dodana je možnost nastavljanja lastnih krivulj svetlosti, uporabljenih za korekcijo svetlosti zaslona.
- V gonilniku adreno je dodana podpora za GPU Qualcomm Adreno 623.
- Dodana je podpora za občutljive plošče Apple Touch Bar.
- Dodana je podpora za drugo različico vtičnika eUSB2 (eUSB2V2 — Embedded USB2 Version 2.0), ki omogoča znižanje napajalnega napetosti (do 1.2 volta) in povečanje zmogljivosti USB 2.0. Hitrost prenosa podatkov v eUSB2V2 lahko doseže 4.8 Gbit na sekundo, kar je 10-krat hitreje od običajnih 480 Mbit na sekundo, značilnih za USB 2.0. eUSB2V2 bo omogočil proizvajalcem prenosnih računalnikov, da opremijo svoje naprave z visokoločljivostnimi spletnimi kamerami, ob tem pa še naprej uporabljajo vodilo Embedded USB2.
- Dodana je podpora za ethernetne adapterje Intel Killer E5000 (RTL8126).
- Dodana je podpora za zaslonske panele Visionox RM692E5, Rockchip w552793dba-v10, kingdisplay-kd110n11-51ie in starry-2082109qfh040022-50e.
- Dodani so gonilniki za prenosne računalnike Samsung Galaxy Book.
- Dodana je podpora za zvočne sisteme Presonus Studio 1824c, Jabra Evolve 65. Dodana je podpora za DSP module AMD ACP 7.x, AWINC WM88166, Everest ES8388, Intel AVS PEAKVOL in GAIN. Izboljšana je podpora za zvok na prenosnih računalnikih ASUS, HP in Lenovo.
- Dodana je podpora za ARM platforme, SoC in naprave: Arm Morello, AMD (Xilinx) Versal NET, Google Pixel Pro 6, NetCube Kumquat, MYIR Remi Pi, Huawei Matebook E Go, Milk-V Jupiter ST STM32MP2, Mediatek MT8370, Apple T2, Skov (i.MX8MP), EVK (i.MX95), Rockchip RK35xx, Allwinner A523, 11 plošč Toradex na osnovi i.MX6.
Hkrati je latinskoameriška Fundacija prostega programske opreme oblikovala različico popolnoma prostega jedra 6.15 – Linux-libre 6.15-gnu, očiščenega od elementov programske opreme in gonilnikov, ki vsebujejo nesvobodne komponente ali kose kode, katerih uporaba je omejena od proizvajalca. V izdaji 6.15 je bila nevtralizirana nalaganje blobov v gonilnikih nova, Qualcomm iris v4l2, Airoha NPU, Tehuti Networks TN40xx 10G ethernet, Realtek 8814A wifi, Apple Silicon SoC zaslon na dotik, Renesas UFS in aw88166 audio. Čiščenje gonilnika Spider 1Gb ethernet je bilo končano, ta je bil odstranjen iz jedra. Odstranjene so povezave na tivoizirane binarne datoteke. Uvedena je blokada nalaganja blobov iz kode v jeziku Rust.
Izvor: opennet.ru
