Izid jedra Linux 6.9

Po dveh mesecih razvoja je Linus Torvalds predstavil izdajo jedra Linux 6.9. Med najbolj opaženimi spremembami so: modul dm-vdo za deduplikacijo in stiskanje blokovnih naprav, način neposrednega dostopa do datotek v FUSE, podpora za ustvarjanje pidfd za posamezne niti, mehanizem BPF-žetonov, podpora za Rust na sistemih ARM64, prehod datotečnega sistema Ext2 v razred zastare, odstranitev starega gonilnika NTFS in podpora mehanizmu Intel FRED.

V novo različico je bilo sprejetih 15680 popravkov od 2106 razvijalcev, velikost popravka pa znaša 54 MB (spremembe so zajele 11825 datotek, dodanih je 687954 vrstic kode, odstranjeno 225344 vrstic). V prejšnji izdaji je bilo 15641 popravek od 2018 razvijalcev, velikost popravka pa je znašala 44 MB. Približno 42 % vseh predstavljenih sprememb v 6.9 se nanaša na gonilnike naprav, približno 17 % sprememb se nanaša na posodobitev kode, specifične za strojne arhitekture, 13 % se nanaša na omrežno infrastrukturo, 7 % na datotečne sisteme in 4 % na notranje pod sisteme jedra.

Glavne novosti v jedru 6.9:

  • Дисковая подсистема, ввод/вывод и файловые системы
    • V Device Mapper (DM) je bil dodan nov obdelovalnik dm-vdo (virtualni optimizator podatkov), ki omogoča na osnovi obstoječih blokovnih naprav ustvarjanje virtualne blokovne naprave z možnostmi, kot so deduplikacija ponavljajočih se podatkov, stiskanje podatkov, izključitev praznih blokov in povečanje velikosti blokovne naprave po potrebi (tanek provisioning). Omenjene možnosti se izvajajo na ravni blokovne naprave in niso odvisne od uporabljene datotečne sistema (na primer, z dm-vdo je mogoče avtomatsko združiti podvojene podatke in shraniti informacije v stisnjeni obliki za katero koli FS). Podpira se uporaba dm-vdo za fizična skladišča velikosti do 256 TB in ustvarjanje logičnih volumov velikosti do 4 PB. Za upravljanje z odseki vdo se priporoča uporaba lvm. Tehnologija VDO je bila razvita s strani podjetja Permabit in je bila odprta po njegovem prevzemu s strani Red Hat leta 2017.
    • V podsystemi FUSE, koja se koristi za implementaciju datotečnih sustava u korisničkom prostoru, dodana je inicijalna implementacija načina "passthrough", koja omogućava izravno na razini jezgre pristup podacima datoteka, zaobilazeći proces koji radi u korisničkom prostoru, što može značajno poboljšati performanse u određenim situacijama. Na primjer, FUSE-implementacije FS koje rade u režimu samo za čitanje i ograničavaju pristup datotekama mogu davati sadržaj datoteka iz izvorne FS bez prijenosa istih u FUSE proces.
    • U kategoriju zastarjelih (deprecated) prebačen je upravljački program s implementacijom datotečnog sustava Ext2. Kao razlog navodi se podrška u upravljačkom programu samo za 32-bitne brojače vremena u inode-ou, koji će preplaviti 19. siječnja 2038. godine. Umjesto upravljačkog programa ext2, preporučuje se korištenje upravljačkog programa ext4, koji podržava rad s datotečnim sustavom Ext2 i u potpunosti je kompatibilan s njim, ali može koristiti vremenske oznake u ext2-particijama koje nisu podložne problemu 2038. godine, ako je FS stvoren s inode-ima većim od 255 bajta (u upravljačkom programu ext2 32-bitni brojači vremena korišteni su neovisno o veličini inode-a).
    • Stari upravljački program datotečnog sustava NTFS je uklonjen, a na njegovo mjesto od izdanja 5.15 došao je novi upravljački program NTFS3. Isporuka u jezgru dva upravljačka programa s implementacijom NTFS smatra se nerazmjernom, s obzirom na to da stari upravljački program nije ažuriran već dugi niz godina, u lošem je stanju i može raditi samo u režimu čitanja.
    • U datotečne sustave zonefs i hugetlbfs dodana je podrška za mapiranje identifikatora korisnika montiranih datotečnih sustava, koja se koristi za usklađivanje datoteka određenog korisnika na montiranoj stranoj particiji s drugim korisnikom u trenutnom sustavu.
    • U NFSv4 administratorima je pružena mogućnost čišćenja stanja otvaranja i zaključavanja datoteka.
    • Za datotečni sustav Ext4 zabilježeno je samo ispravak grešaka i ažuriranje kunit-testova.
    • U Btrfs-u nastavlja se prebacivanje funkcija na korištenje foloa stranica memorije (page folios).
    • 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 sistemski klic pwritev2() je dodana zastavica RWF_NOAPPEND, ki omogoča določanje pomika za zapis, tudi če je bil datoteka odprta v načinu le za dodajanje podatkov na konec datoteke.
    • Dodane so nove ioctl-ukaze: FS_IOC_GETUUID — vrača UUID-identifikator določenega datotečnega sistema, in FS_IOC_GETFSSYSFSPATH — določa lokacijo v /sys/fs določene montirane FS.
    • Datotečni sistemi efs, qnx4 in coda so prevedeni na uporabo novega API-ja za montažo delov.
    • Izboljšana je implementacija operacij z datotekami, ki se izvajajo v načinu brez upoštevanja velikih in malih črk. Povečana je učinkovitost zaradi prvega primerjanja z upoštevanjem velikih črk in nato povratka na iskanje brez upoštevanja velikih črk. Rešeni so problemi pri montaži overlayfs nad mapami, ki so v načinu brez upoštevanja velikih in malih črk.
  • Pomnilnik in sistemske storitve
    • Izvedena je podpora za mehanizem Intel FRED (Flexible Return and Event Delivery), ustvarjen za povečanje učinkovitosti in zanesljivosti dostave informacij o nizko nivojskih dogodkih, v primerjavi z obstoječim mehanizmom IDT (Interrupt Descriptor Table). Povečanje učinkovitosti in zmanjšanje zamud je omogočeno z vračanjem dogodkov s procesorsko navodilo IRET namesto prenosa dogodkov preko IDT tabele. Povečana zanesljivost je dosežena zaradi ločene obdelave prihodka dogodka v kontekstu jedra in kontekstu uporabnika, zaščita pred vgrajenim NMI izvajanjem in shranjevanje vseh registrov CPU, povezanih z izjemo, v razširjenem okviru sklada.
    • Dodana je možnost optimizacije dostopa do podatkov posameznih jeder CPU preko uporabe poimenovanih naslovnih prostorov (Named Address Spaces) v jedrskem kodu, realiziranih v GCC v obliki razširitve GNU C.
    • V funkcijo pidfd_open() je dodana zastavica PIDFD_THREAD, ki omogoča ustvarjanje pidfd za posamezne niti, ne le za uporabo pidfd v kontekstu vodje skupine niti. Prav tako je predlagana implementacija psevdodatotečnega sistema za dostop do pidfd preko virtualnega datotečnega sistema. V nasprotju z identifikacijo procesov preko pid-a je identifikator pidfd povezan s konkretnim procesom in se ne spreminja, medtem ko se lahko po končanju trenutnega procesa PID veže na drug proces.
    • V podsystem BPF je přidán mechanismus BPF tokenů, který umožňuje selektivně delegovat aplikacím práva přístupu k privilegovaným BPF operacím. Například je možné poskytnout neoprávněné aplikaci přístup k jednotlivým podsystemům BPF, aniž by byla poskytnuta plná práva CAP_BPF.
    • Do podsystemu BPF byl přidán nový typ sdílené paměti bpf_arena, který definuje oblast přístupnou pro sdílení mezi programy BPF a procesy ve uživatelském prostoru. Byla přidána instrukce may_goto, která umožňuje organizovat cykly, které mohou být přerušeny verifikátorem. Byla přidána možnost generovat z BPF programů libovolné TCP SYN cookie a vytvářet BPF obslužné rutiny pro boj se SYN floodem.
    • Pokračuje přenos změn z větve Rust-for-Linux, které se týkají použití jazyka Rust jako druhého jazyka pro vývoj ovladačů a modulů jádra (podpora Rustu není ve výchozím stavu aktivována a nevede k zahrnutí Rustu mezi povinné závislosti pro sestavení jádra). Byla přidána podpora pro použití jazyka Rust na 64bitových procesorech ARM. Bylo přejato použití vydání Rust 1.76. Byl přidán makro 'container_of!'. Místo nestabilní funkčnosti 'ptr_metadata' byl použit stabilní způsob 'byte_sub'. Byl přidán modul 'time' s funkcí převodu času 'msecs_to_jiffies()'.
    • Do podsystemu io_uring byla přidána možnost zkracování souborů (ftruncate_file).
    • Byl přidán nový typ pracovních front WQ_BH (workqueue Bottom Halves) pro asynchronní vykonávání kódu v kontextu softwarových přerušení, zaměřený na použití místo zastaralých taskletů.
    • Podsystem práce s časovačem byl významně přepracován, kdy byla zlepšena logika výběru aktivního jádra CPU pro vykonání spuštěného časovače, aby se neprobudily nečinné jádra.
    • Byla implementována možnost aktualizace modelu spotřeby energie jádra (EM, Energy Model) během provozu, což může být využito například pro zohlednění vlivu pracovní teploty na energetickou účinnost CPU. Výkon funkce em_cpu_energy() byl výrazně zvýšen; v testech na stacionárním systému se nyní provádí rychleji 1,43krát, a na desce RockPi 4B dokonce 1,69krát.
    • Dodana je podpora za zagon sistemov na osnovi arhitekture ARM64 v načinu LPA2 z 52-bitnim virtualnim naslovnim prostorom.
    • Za sisteme ARM64 je bila uvedena podpora za neprekinjene zapise PTE (Entry tabele strani), ki omogočajo povečanje zmogljivosti z izboljšanjem učinkovitosti uporabe TLB (Translation Lookaside Buffer).
    • Sprejeti so bili popravki za povečanje zmogljivosti podsystema za upravljanje pomnilnika s skrajšanjem pojava konkurirajočih blokad v vmalloc().
    • Za arhitekturo LoongArch je bil uveden mehanizem vročega nanašanja popravkov na jedro (live patching), ki omogoča uporabo popravkov v jedru brez ponovnega zagona.
    • Za sisteme RISC-V je bila uvedena podpora za sistemski klic membarrier(), ki zagotavlja postavitev barier v pomnilniku za niti, ki delujejo v sistemu.
    • Povišane so zahteve za različico LLVM/Clang, ki jo je mogoče uporabiti za gradnjo jedra. Za gradnjo je zdaj potrebna najmanj različica LLVM 13.0.1 (prej je bila podprta gradnja z LLVM 11+).
    • V mehanizem „User trace events“, ki omogoča ustvarjanje dogodkov sledenja iz uporabniških procesov za spremljanje aktivnosti v uporabniškem prostoru, je bila dodana podpora za izvoz informacij o dogodku v različnih formatih (USER_EVENT_REG_MULTI_FORMAT).
    • V mehanizem sledenja klicem funkcij je bila dodana možnost spremljanja stanja vhodnih argumentov funkcije pri sledenju izstopu iz funkcije. Vrednosti operatorja return je zdaj mogoče povezati z argumenti, uporabljenimi pri klicu funkcije.
    • V orodje perf je bila dodana podpora za način agregacije izpisa „cluster“ („perf stat -a —per-cluster“) za združevanje statistike razdeljenih virov. Uvedena je bila možnost uporabe knjižnice libcapstone za deasembliiranje procesorskih navodil („perf script -F disasm“). Izvedene so optimizacije porabe pomnilnika pri izvajanju ukazov perf report in perf annotate.
  • Virtualizacija in varnost
    • Dodana je zaštita od ranjivosti RFDS (Register File Data Sampling) u Intel Atom procesorima, koja omogućava izvlačenje preostale informacije iz registarskih fajlova (RF, Register File) procesora, koji se koriste za zajedničko skladištenje sadržaja registara u svim zadacima na istom jezgru CPU-a. Da bi se ranjivost blokirala, potrebno je ažurirati mikrokod i koristiti instrukciju VERW za čišćenje sadržaja mikroarhitektonskih bafera u trenutku povratka iz jezgra u korisnički prostor. Za aktivaciju zaštite prilikom pokretanja jezgra može se navesti zastavica "reg_file_data_sampling=on". Informacije o podložnosti ranjivosti i postojanju potrebnog mikrokoda za zaštitu mogu se ocenjivati u fajlu "\/sys\/devices\/system\/cpu\/vulnerabilities\/reg_file_data_sampling".
    • Dodana je osnovna podrška za zaštitu gostujućih sistema pomoću proširenja AMD SEV-SNP (Secure Nested Paging), koje obezbeđuje sigurni rad s ugnježdenim tabelama stranica memorije i štiti od napada "undeSErVed" i "SEVerity" na AMD EPYC procesorima, koji omogućavaju zaobilaženje mehanizma zaštite AMD SEV (Secure Encrypted Virtualization). KVM Neophodne promene za korišćenje SNP planiraju se dodati u grani 6.10.
    • Moduli sa implementacijom tehnologija IMA (Integrity Measurement Architecture) i EVM (Extended Verification Module) su prebačeni na korišćenje LSM (Linux Security Modules) okvira, što bez gubitka funkcionalnosti omogućava znatno pojednostavljen kod, spajanje duplicirane funkcionalnosti i korišćenje standardnih mogućnosti dostupnih putem LSM-a. IMA modul je namenjen proveri integriteta komponenti operativnog sistema putem digitalnih potpisa i hešova. EVM modul omogućava zaštitu proširenih atributa fajlova (xattrs) od napada usmerenih na narušavanje njihovog integriteta (EVM neće dozvoliti offline napad, pri kojem napadač može promeniti metapodatke, na primer, podižući se sa svog uređaja).
    • Sistemski pozivi lsm_list_modules(), lsm_get_self_attr() i lsm_set_self_attr() su redizajnirani za veću kompatibilnost s 32-bitnim okruženjima, a namenjeni su za ispis liste učitanih LSM-modula (Linux Security Modules) i dobijanje/postavljanje atributa LSM-modula. Promena narušava unazad kompatibilnost, ali pošto su novi sistemski pozivi dodati u prošloj verziji jezgra i još nisu korišćeni u aplikacijama, Linus Torvalds je smatrao da je promena prihvatljiva.
    • Poskusili smo ponovno vzpostaviti uporabo mehanizma UBSAN (Undefined Behavior Sanitizer). Težava je v tem, da različni prevajalniki različno obravnavajo prelite vrednosti celih števil, tako znakih kot brez znakov. Znakovna prelitja in prelitja kazalcev spadajo v kategorijo nedoločenega vedenja, medtem ko se brezznakovna prelitja obravnavajo po modulu 2n, pri čemer se ohranijo samo najnižji biti rezultata ("wrap-around") in ne spadajo pod nedoločeno vedenje. Da bi se izognili situacijam, kjer pride do nedoločenega vedenja, se jedro sestavi z možnostjo "-fno-strict-overflow", kar povzroča uporabo "wrap-around" za vsa prelitja celih števil. GCC in Clang ne moreta pravilno diagnosticirati nekaterih težav pri uporabi zastavice "-fno-strict-overflow" in vključitev UBSAN ima za cilj sodelovanje z razvijalci prevajalnikov za odpravo lažnih pozitivnih rezultatov in odkrivanje prelitij celih števil, kjer ni jasnih preverjanj.

      Za preverjanje morebitnih prelitij v jedru se uporabljajo konstrukcije, kot je "var + offset PAGE_SHIFT) < pgoff){..}"), ki so odvisne od prevajanja s zastavico "-fno-strict-overflow" in ne pokrivajo vsega kode, kjer lahko pride do prelitja. Težava je v tem, da so takšne preveritve pri uporabi UBSAN povzročile veliko lažnih opozoril, zato je bilo leta 2021 UBSAN treba onemogočiti. V posodobljeni različici je predlagano, da se uporabljajo posebne anotacije __signed_wrap in __unsigned_wrap, pa tudi pripravljeni makri s preverjanjem add_would_overflow(a, b) in add_wrap(a, b), ki omogočajo ločevanje med predvidenimi uporabljenimi celimi številskimi prelitji in naključnimi prelitji, ki lahko vodijo do ranljivosti. Predlog za obsežnejšo preureditev jedra z uvedbo dodatnih definicij tipov je bil zavrnjen s strani Linusa Torvaldsa.

  • Mrežna podsistem
    • V omrežni podskupini so bila izvedena dela za zmanjšanje pojava konkurenčnega zaklepanja ("lock contention", poskus pridobitve zaklepa, ki ga zaseda drug tok). Zmanjšana je bila uporaba zaklepov RTNL.
    • Dodana je mogućnost uključivanja podrške za aktivno polling soketa (busy polling) u kontekstu pojedinačnih poziva epoll. Veličina bazena i parametri budžeta mogu se postaviti odvojeno od sistemskih podrazumevanih parametara.
    • Implementirana je struktura net_hotdata za povećanje efikasnosti keširanja najčešće korišćenih varijabli mrežne konfiguracije.
    • U MPTCP dodana je podrška za postavljanje opcije TCP_NOTSENT_LOWAT za sokete, koja omogućava ograničavanje veličine bafera za slanje. U API za sokete MCTP dodana je podrška za identifikatore mreže („network ID“), što omogućava korišćenje više nepreklapajućih MCTP mreža na jednom hostu.
    • U IPSec dodana je podrška za preusmeravanje ICMP poruka sa informacijama o greškama (RFC 4301).
    • Ubrzan je proces skeniranja ruta sa isteklim vremenom života.
    • Ubrzan je rad XDP-a, zahvaljujući strožem izbegavanju alociranja velikih blokova memorije.
    • Dodana je mogućnost pridruživanja metapodataka porukama netconsole.
    • U Netfilter-u omogućeno je definisanje tabela iz prostora korisnika, koje se vežu za kontrolni pozadinski proces i ne brišu se automatski nakon završetka korisničke aplikacije.
    • U nftables-u ubrzano je dodavanje elemenata u set-grupe sa objednjenim opsezima.
  • Oprema
    • U i915 drajveru nastavljena je implementacija podrške za Intel LunarLake (Xe 2) čipove. Dodati su novi PCI identifikatori za uređaje zasnovane na Intel Arrow Lake i Alder Lake N čipovima. Za DisplayPort dodata je podrška za tunelovanje (DP tunneling) i dodelu propusnosti (bandwidth allocation). Za sve platforme uključen je fastboot režim. Dodata je podrška za debag izlaz vezan za pojedinačne uređaje.
    • U AMDGPU drajveru pripremljena je implementacija podrške za GPU AMD RDNA3.5 i RDNA4. Dodata je podrška za ATHUB 4.1, LSDMA 7.0, JPEG DPG, IH 7.0, HDP 7.0, VCN 5.0, SMU 13.0.6, NBIO 7.11, SDMA 6.1, MMHUB 3.3, DCN 3.5.1, NBIF 6.3.1, VPE 6.1.1 i RAS ACA framework. U modul jezgra dodat je parametar freesync_video za uključivanje eksperimentalne podrške optimizacije prebacivanja video režima uz korišćenje tehnologije adaptivne sinhronizacije FreeSync.
    • U Nouveau drajveru, kod upravljanja ekranom prebačen je na korišćenje funkcije kmemdup().
    • Pcontinued work on the drm driver (Direct Rendering Manager) Xe for GPUs based on the Intel Xe architecture, which is used in Intel Arc graphics cards and integrated graphics, starting with Tiger Lake processors.
    • The DRM driver for Mediatek MT8188 VDOSYS1 chips has been added.
    • Kernel settings related to video subsystems have been moved to the CONFIG_VIDEO section.
    • Support for ARM64 SoC has been added: Mediatek MT7981B (Filogic 820), MT7988A (Filogic 880), NXP i.MX8DXP, Renesas R8A779G2 (R-Car V4H ES2.0), R8A779H0 (R-Car V4M), TI J722S.
    • Support for ARM platforms and devices has been added: Android phones based on Tegra30 chips, Chromebook models based on Mediatek MT8186, NAS, tablets, and gaming consoles based on Rockchips RK35xx, White Hawk boards based on Renesas SoC, boards based on Qualcomm SM8550 (Snapdragon 8 Gen 2), Apalis Evaluation Board, Sielaff i.MX6 Solo Board, Samsung Galaxy Tab 4 10.1 LTE.
    • The ALSA sound subsystem code has been refactored. Support for Microchip SAM9x7, NXP i.MX95, and Qualcomm WCD939x sound systems has been added. The SoundWire driver has added ASoC support for AMD ACP 6.3 audio coprocessors, and a DSPless mode has been implemented for Intel systems. Additional sound codec support for Cirrus HD has been added. The virtio driver has improved management of sound devices.
    • Support for Marvell Octeon PCI Endpoint NIC VF and Intel E825-C 100G Ethernet controllers has been added.

At the same time, the Latin American Free Software Foundation has formed a fully free kernel variant 6.9 — Linux-libre 6.9-gnu, cleaned of firmware and driver elements containing non-free components or code snippets restricted by the manufacturer. In release 6.9, the blob cleaning code in the amdgpu, ath12k, adreno, btusb, and r8169 drivers has been updated. New driver ptp_fc3 has been cleaned. Blob names in dts files (devicetree) for Aarch64 architecture have been cleaned up. Issues with cleaning the i915 driver that led to freezing during initialization have been resolved. Changes related to the handling of blobs supplied in the form of hexadecimal dumps have been made.

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