Izdaja jezgra Linux 6.17

Nakon dva mjeseca razvoja, Linus Torvalds je predstavio izdanje jezgra Linux 6.17. Među najistaknutijim promjenama su: poboljšanje performansi Btrfs, sistemski pozivi file_getattr() i file_setattr(), unifikacija jednoprocesorskih i višenamjenskih konfiguracija u planerima zadataka, modul DAMON_STAT za statistiku pristupa memoriji, podrška za Live zakrpe na ARM64 sistemima, slanje core dumpova putem AF_UNIX soketa, ograničenje SCHED_EXT putem cgroup, pojednostavljena konfiguracija zaštite od ranjivosti u CPU-u, izgradnja u Clang-u s inicijalizacijom varijabli na steku, zaštita od zamjene /proc, proširenje podsystema RV (Runtime Verification), ograničenje AF_UNIX soketa putem AppArmor-a, algoritam kontrole opterećenja TCP DualPI2.

U novu verziju je uključeno 14334 ispravki od 2118 developera, veličina zakrpe iznosi 46 MB (promjene su obuhvatile 12841 datoteka, dodano je 646654 linija koda, a 398782 linije su uklonjene). U prethodnom izdanju bilo je 15924 ispravki od 2145 developera, veličina zakrpe bila je 50 MB. Oko 43% svih promjena predstavljenih u 6.17 vezano je za upravljačke programe uređaja, otprilike 12% promjena odnosi se na ažuriranje koda specifičnog za hardverske arhitekture, 14% se odnosi na mrežni stek, 4% na datotečne sisteme i 3% na unutrašnje podsysteme jezgra.

Glavna novina u jezgru 6.17 (1, 2, 3):

  • Дисковая подсистема, ввод/вывод и файловые системы
    • U Btrfs je dodana eksperimentalna podrška za velike folije stranica memorije (large folios), što smanjuje troškove i povećava performanse niza operacija. Implementirano je keširanje upita za bitmapu slobodnog prostora, zahvaljujući kojem je performansa kreiranja praznih datoteka porasla za 20%. Poboljšano je predčitanje u sistemima koji koriste kompresiju podataka. Osigurano je gušće postavljanje ključeva u strukturi XArray, što je povećalo kompaktnost skladištenja čvorova drveća ekstenta i omogućilo smanjenje broja terminalnih čvorova za 50-70%. Pružene su dodatne postavke korištenja kompresije u defragmentiranim ekstentima.
    • U ext4 datotečnom sistemu uvedena je podrška za keširani ulaz/izlaz s oznakom RWF_DONTCACHE, pri čemu se podaci uklanjaju iz kaširanja stranica odmah nakon završetka operacije.
    • U EROFS datotečnom sistemu implementirana je podrška za kompresiju metapodataka.
    • NFS-server zdaj lahko delegira operacije zapisovanja strankam, ki odpirajo datoteke v načinu samo za zapis.
    • K sistemskemu klicu fallocate() je dodana zastavica FALLOC_FL_WRITE_ZEROES, ki omogoča nalaganje določenega obsega v datoteki z ničlami, pri čemer se uporablja ukaz WRITE_ZERO, ki ga podpirajo nekateri SSD-ji, in se izvaja brez operacij vnosa/izvoda. Možnost je trenutno na voljo le v datotečnem sistemu ext4.
    • Dodani so sistemski klici file_getattr() in file_setattr() za manipulacijo z atributi inode določene datoteke.
    • Odstranjen je gonilnik «pktcdvd» za delo z optičnimi mediji v paketnem načinu, ki je bil označen za zastarelo leta 2016.
    • Datotečni sistem Bcachefs v jedru Linux je prešel v režim zunanjega vzdrževanja, kar pomeni, da sprejemanje sprememb za Bcachefs v glavno jedro preneha, medtem ko ostaja ta datotečni sistem v kodni bazi jedra. Razvoj Bcachefs se bo izvajal zunaj kodne baze jedra, dokler Kent Overstreet ne dokaže zmožnosti pravilnega sodelovanja z drugimi razvijalci jedra in sposobnosti, da sledi ustaljenim pravilom razvoja.
  • Pomnilnik in sistemske storitve
    • Iz načrtovalnika nalog je odstranjena podpora za enoprocesorske konfiguracije. Na sistemih z enim procesorjem je zdaj treba uporabljati jedra, zbrane za večprocesorske sisteme (SMP). Koda za enoprocesorske in večprocesorske sisteme je poenotena in znebila se je odvečnih vezav na parameter jedra CONFIG_SMP.
    • Dodan je modul jedra DAMON_STAT (Statistika rezultatov spremljanja dostopa do podatkov), ki omogoča spremljanje dostopa do pomnilnika z uporabo podsystema DAMON (Spremljanje dostopa do podatkov). Modul zagotavlja statistiko o neaktivnosti (memory_idle_ms_percentiles) in predvideni propustnosti pomnilnika (estimated_memory_bandwidth).
    • Na sistemih z arhitekturo ARM64 je bila uvedena podpora za Live-patch-e, ki omogočajo uporabo popravkov v jedru Linux brez ponovnega zagona in ustavljanja sistema.
    • V minimalistični C knjižnici nolibc, vključeni v izvorne kode jedra Linux in zagotavljajoči ovijanje osnovnih sistemskih klicev, je bila uvedena podpora za arhitekture SuperH, x32, MIPS n32 in MIPS n34.
    • Razširjena je možnost pošiljanja vsebine core-dumpov prek socket-a AF_UNIX, kar omogoča ustvarjanje varnejših obdelovalcev core-dumpov v uporabniškem prostoru, ki niso odvisni od klicev jedra privilegiranih postopkov. V novi različici je dodan protokol za ustvarjanje strežnikov, ki lahko upravljajo obdelavo core-dumpov na ravni posameznih nalog. Na primer, za nekatere procese je mogoče ignorirati core-dumpe, za druge pa jih posredovati prek socket-a. Pripravljena je bila tudi prototipna strežnik za upravljanje core-dumpov.
    • Dodana je možnost ukazne vrstice jedra „crashkernel=size,cma“ za rezervacijo prostora v pomnilniku za shranjevanje crash-dumpov jedra prek CMA (Contiguous Memory Allocator).
    • Razširjene so možnosti mehanizma pidfd, ki omogoča uporabo identifikatorjev, povezanih s posebnimi procesi in se v nasprotju s pid-ji ne dodeljujejo ponovno. Dodana je možnost vezave k pidfd razširjenih atributov iz uporabniškega prostora. Dovoljeno je odpiranje datotečnih descriptorjev za pidfd prek funkcije open_by_handle_at() brez vezave na datotečni sistem. Notranje informacije, ki jih ustvari jedro skupaj s pidfd, so zdaj vezane na proces, ne na pidfd, in se shranijo med ponovnim odpiranjem istega procesa.
    • V podsystem BPF je dodana funkcija bpf_cgroup_read_xattr() za branje razširjenih atributov datotek. Ponujena je možnost uporabe v BPF-programih tipičnih nizov operacij, kot so bpf_strcmp, bpf_strnchr, bpf_strchrnul, bpf_strlen in bpf_strspn, ki delujejo v načinu samo za branje. Dodana je možnost uporabe standardnih tokov stdout in stderr za interakcijo s komponentami v uporabniškem prostoru. Za sisteme, ki temeljijo na arhitekturi LoongArch, je v BPF realizirana možnost dinamične modifikacije kode, mehanizma „BPF trampoline“ (zmanjšuje stroške pri prenosu klicev med jedrom in programi BPF) ter zagon programov, ki uporabljajo struct_ops za ustvarjanje obdelovalcev funkcij jedra prek BPF.
    • V sistemu za sledenje času je bila uvedena podpora za pomožne ure (auxiliary), ki niso povezane z običajnimi sistemskimi urami in tečejo po svojem ritmu (prej so vse ure delovale z enakim ritmom in se razlikovale le v zamiku).
    • Dodana je začetna podpora za proxy izvrševanje (Proxy Execution), da se ublažijo težave z inverzijo prioritet. Proxy izvrševanje omogoča nalogi, ki čaka na sprostitev zaklepa, da prenese svoj izvršilni kontekst nalogi, ki drži zaklep, da se ta zaklep hitreje sprosti.
    • Nadaljujte prenos sprememb iz veje Rust-for-Linux, povezanih z uporabo jezika Rust kot drugega jezika za razvoj gonilnikov in modulov jedra (podpora za Rust ni privzeto aktivna in ne privede do vključitve Rušta med obvezne odvisnosti za sestavljanje jedra). Dodane so abstrakcije za upravljanje regulatorjev napetosti in toka, lastnostmi programske opreme, viri vhod/izhod in spomina vhod/izhod. Uveljavljen je makro „warn_on!()“. Dodan je tip UserPtr za kazalce v uporabniškem prostoru. Razširjena je funkcionalnost modulov workqueue, uaccess, dma, time in list. Dodan je modul ‘bits’ s funkcijama ‘bit’ in ‘genmask’.
    • Preklican je koda za izračun kontrolnih vsot CRC in dodani novi klici za generacijo hashev SHA-1 in SHA-2. Dodane so optimizacije specifične za strojne arhitekture. Povečana je zmogljivost funkcije crc32c() na novih CPU-ju x86_64, ki podpirajo razširitev VPCLMULQDQ (Vector Carry-Less Multiplication of Quadwords).
    • Za sisteme S390 je realizirana podpora za izgon v swap prostor in migracijo velikih strani pomnilnika (transparent huge page).
    • Dodana je možnost nastavitve agresivnosti sproščanja strani pomnilnika (proactive-reclaim) ob pomanjkanju le-teh na posameznih NUMA vozliščih, kar omogoča dodelitev NUMA vozliščem, za katera bo uporabljeno bolj aktivno sproščanje pomnilnika. Na primer, „echo „512M swappiness=10″ > /sys/devices/system/node/node1/reclaim“.
    • V mehanizem SCHED_EXT, ki omogoča uporabo BPF za ustvarjanje CPU načrtovalnikov, je dodana možnost upravljanja prepustnosti prek cgroup. Na primer, lahko uporabite parameter cpu.max za omejevanje obremenitve CPU.
    • Obogatitev samodejnega nameščanja virtualnega FS tracefs v imenik /sys/kernel/debug/tracing, namesto tega bi morali uporabiti /sys/kernel/tracing.
  • Virtualizacija in varnost
    • Dodana je možnost vključitve zaščite pred ranljivostmi v CPU preko izbire blokiranih napadalnih vektorjev namesto navajanja v nastavitvah posebnih ranljivosti. Metode blokiranja se izbirajo glede na vrsto kršitve izolacije: med uporabnikom in jedrom (user-kernel), med uporabnikom in drugim uporabnikom (user-user), med gostujočim sistemom in gostiteljsko okolje (guest-host), med različnimi gostujočimi sistemi (guest-guest) ter med različnimi nitmi (cross-thread). Predlagan pristop omogoča aktivacijo zaščite samo proti tistim razredom ranljivosti, ki resnično skrbijo uporabnika. Na primer, lastniki oblačnih okolij lahko omogočijo načine guest-host in guest-guest, po katerih bodo aktivirane metode zaščite pred ranljivostmi BHI, GD, L1TF, MDS, MMIO, Retbleed, RFDS, Spectre_v2, SRBDS, SRSO in TAA.
    • Dodana podpora za sestavljanje s C++ kompilatorjem Clang z aktiviranim načinom sledenja globini stoga, pri čemer se inicializirajo vse spremenljivke, shranjene na stogu. Inicializacija se izvede za preprečevanje uhajanja informacij iz jedra prek neiničializiranih spremenljivk, ki lahko vsebujejo ostanke prej shranjenih podatkov na stogu. Do sedaj je bila podobna možnost podprta pri uporabi GCC vtičnika STACKLEAK.
    • Dodana zaščita pred zamenjavami napadalcev v datotečnem sistemu /proc prek montaže v načinu "bind". Inode številka korena /proc je zdaj fiksna (PROCFS_ROOT_INO) in jo lahko preveri postopek v uporabniškem prostoru.
    • V podsklop RV (Runtime Verification), namenjen preverjanju pravilnosti delovanja visoko zanesljivih sistemov, je dodana komponenta za spremljanje rtapp (Real-time application monitor) za sledenje tipičnih težav v aplikacijah, ki delujejo v realnem času, ter komponente rp, sssw in opid za testiranje načrtovalnika nalog. Uresničena je možnost ustvarjanja komponent spremljanja, ki za določanje modela obnašanja uporabljajo linearno temporalno logiko namesto determinističnega avtomata. Preverjanje se izvaja med izvajanjem prek pritrjevanja obravnavalcev na točke sledenja, ki preverjajo dejanski potek izvajanja z vnaprej določenim referenčnim modelom, ki določa pričakovano obnašanje sistema.
    • V sistem AppArmor je dodana podpora za upravljanje dostopa do sockets AF_UNIX.
    • V hipervizorju KVM na sistemih ARM je realizirana podpora za kontroler prekinitev GICv5.
    • Dodana je nastavka CONFIG_KVM_IOAPIC, koja omogućava isključivanje podrške za emulaciju APIC, PIC i PIT u KVM-u.
    • Dodana je zaštita od ranjivosti VMSCAPE.
    • Dodana je ioctl komanda FS_IOC_GETLBMD_CAP za dobijanje informacija o primeni sredstava za zaštitu integriteta na datoteci iz korisničkog prostora.
    • Interfejs /sys/fs/selinux/user je proglašen zastarjelim, pri čemu se sada uvodi petosekundna kašnjenja i upozorenje u dnevniku prilikom pristupa.
  • Mrežna podsistem
    • U implementaciju tehnologije PSE (Power Sourcing Equipment), koja se koristi za napajanje uređaja preko Ethernet-a kao što su IP kamere i bežične tačke pristupa, dodana je podrška za prilagodljive strategije procene budžeta napajanja (ukupne dostupne snage). Ove strategije omogućavaju određivanje kojih portova treba prvo isključiti kako bi se sprečilo opterećenje.
    • U implementaciju protokola MCTP (Management Component Transport Protocol) dodana je podrška za rutiranje paketa ka spoljnim čvorovima putem posredničkih čvorova (gateway-routing). Na primer, sledeće pravilo omogućava usmeravanje paketa ka čvoru sa identifikatorom 10 (Endpoint ID 10) kroz uređaj mctpi2c0, koristeći adresu 0x1d, koja je direktno povezana sa čvorom sa identifikatorom 9. mctp route add 9 via mctpi2c0 mctp neigh add 9 dev mctpi2c0 lladdr 0x1d mctp route add 10 gw 9
    • Za UNIX sokete (AF_UNIX) implementirana je opcija SO_INC, a za adresni prostor VSOCK opcija SIOCINQ. Implementirane opcije su slične opciji TCP_INQ za TCP i omogućavaju dobijanje informacija o broju bajtova dostupnih za čitanje u soketu putem upravljačke poruke.
    • Za TCP je uključeno strogo poštovanje deklarisanog veličine prijemnog okna, koje definiše veličinu podataka koji se smeju slati pre nego što se primi ACK potvrda od druge strane. Ranije je jezgro nastavilo obrađivati podatke koji su pristizali iznad deklarisanog prijemnog okna, ali sada će to prestati.
    • U MPTCP (Multipath TCP) dodana je mogućnost korišćenja opcije soketa TCP_MAXSEG za ograničavanje maksimalne veličine slanih segmenata. MPTCP je proširenje TCP protokola koje omogućava isporuku paketa istovremeno preko više ruta putem različitih mrežnih interfejsa, vezanih za različite IP adrese.
    • Dodana je podpora za algoritem nadzora obremenitev TCP DualPI2 (RFC 9332), ki omogoča uporabo razširljivih nadzornikov obremenitev za prometa z visokimi zahtevami glede kakovosti storitev (na primer, TCP-Prague in DCTCP), brez zmanjšanja zmogljivosti klasičnega prometa, za katerega se uporabljajo nadzorniki obremenitev, kot sta Reno in Cubic.
    • Dodana je sysctl nastavitev »force_forwarding«, preko katere lahko aktivirate preusmerjanje prometa na izbranih omrežnih vmesnikih z IPv6.
    • Podpora za algoritem za določanje izgube paketov SACK (Selective Acknowledgment), opisan v RFC 6675, je odstranjena. Ta algoritem je bil razglašen za zastarelega leta 2018. Za določanje izgube TCP paketov se priporoča uporaba algoritma RACK-TLP.
  • Oprema
    • Opravljeno je nadaljnje 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. V novi različici je privzeto vključena podpora za čipe, temelječe na mikroarhitekturi Panthor Lake, ter je dodana podpora za mikroarhitekturo WildCat Lake.
    • V gonilniku AMDGPU za GPU GFX9.x je implementirana podpora za mehanizem Cleaner Shader, ki zagotavlja čiščenje pomnilnika GPU pred njegovo ponovno uporabo, da se prepreči uhajanje podatkov, ki so ostali po delu drugega procesa. Izboljšana je podpora za način spanja. Dodana je možnost prehoda v način spanja v okoljih z AMD SR-IOV. Izboljšano je upravljanje osvetlitve.
    • V gonilniku i915 je implementirana podpora za mehanizem drm_panic, ki ob napakah prikaže podobno »modremu zaslonu smrti«. Dodana je podpora za prikazni krmilnik, ki se uporablja v čipih družine Wildcat Lake.
    • Nadaljuje se integracija komponent gonilnika Nova za GPU NVIDIA, opremljene z GSP-firmware, ki se uporablja od serije NVIDIA GeForce RTX 2000 na osnovi mikroarhitekture Turing. Gonilnik je napisan v jeziku Rust. V novi različici je dodana abstraktna raven za upravljanje z DMA, implementiran je parser VBIOS, dodana je koda za nastavitev framebufferja in zagotovljena je podpora za pospešeno nalaganje v načinu Falcon.
    • V gonilniku adreno je dodana podpora za GPU Qualcomm Adreno x1-45 in x1-85.
    • V gonilniku msm je dodana podpora za GPU Adreno SM8750 in mapiranje video pomnilnika (VM_BIND).
    • V gonilniku panfrost je dodana podpora za GPU Mali, uporabljene v SoC Mediatek mt8370.
    • V gonilniku lima je dodana podpora za GPU, uporabljene v SoC Rockchip RK3528.
    • Dodano je gonilo mtd (Memory Technology Devices) za dostop do NVM pomnilnika, vgrajenega v GPU Intel.
    • Dodana je podpora za zvočne sisteme ASoC IMX WM8524, AMD ACP7.2, SoundWire ACP 7.1, Fairphone 4 & 5, Qualcomm QCS8275, Framework Laptop 13 (AMD Ryzen AI 300), CS35L41 HDA (uporablja se v prenosnikih ASUS), Richtek RTQ9124, TI TAS5753, HP EliteBook x360 830 G6, EliteBook 830 G6, LG 16Z90R-A, HP 15-fc000. Izvedena je reorganizacija kode HD-avdio.
    • Dodana je podpora za ARM platforme, SoC in naprave: NVIDIA Tegra264, Marvell PXA1908 (prvi 64-bitni čip Marvella za pametne telefone), CIX P1, Axiado AX3000, Sophgo SG2000 (združuje jedra ARM in RISC-V), Mediatek mt6572, exynos2200 (uporablja se v Samsung Galaxy S22), Renesas R-Car V4M-7, TI am62d2 in Sophgo sg2042, prenosniki na osnovi Mediatek mt8186 in Qualcomm Snapdragon X1, pametni telefoni in tablice na osnovi SoC mt6572, tegra30 in msm8976.

Hkrati je latinoameriški Sklad svobodnega programske opreme oblikoval različico popolnoma svobodnega jedra 6.17 — Linux-libre 6.17-gnu, očiščenega od elementov prenosa in gonilnikov, ki vsebujejo nesvobodne komponente ali odseke kode, katerih uporaba je omejena s strani proizvajalca. V izdaji 6.17 je posodobljena koda čiščenja blobov v gonilnikih amdgpu, prueth, iwlwifi, btusb, pci mhi host, adreno a6xx, nova-core in Intel AVS. Opravljeno je čiščenje imen blobov v dts datotekah (devicetree) za ARM čipe in Intel IPU7. Naložitev blobov v novih gonilnikih pci hda je bila nevtralizirana. Čiščenje blobov v gonilniku QLogic infiniband je bilo prekinjeno, odstranjenemu iz jedra.

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