Izdaja jedra Linux 6.7

После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 6.7. Среди наиболее заметных изменений: интеграция ФС Bcachefs, прекращение поддержки архитектуры Itanium, возможность работы Nouvea с прошивками GSP-R, поддержка TLS-шифрования в NVMe-TCP, возможность использования исключений в BPF, поддержка futex в io_uring, оптимизация производительности планировщика fq (Fair Queuing), поддержка расширения TCP-AO (TCP Authentication Option) и возможность ограничения сетевых соединений в механизме защиты Landlock, добавлено управление доступом к user namespace и io_uring через AppArmor.

В новую версию принято 18405 исправлений от 2066 разработчиков, размер патча — 72 МБ (изменения затронули 13467 файлов, добавлено 906147 строк кода, удалено 341048 строк). В прошлом выпуске было 15291 исправлений от 2058 разработчиков, размер патча — 39 МБ. Около 45% всех представленных в 6.7 изменений связаны с драйверами устройств, примерно 14% изменений имеют отношение к обновлению кода, специфичного для аппаратных архитектур, 13% связано с сетевым стеком, 5% — с файловыми системами и 3% c внутренними подсистемами ядра.

Основные новшества в ядре 6.7:

  • Дисковая подсистема, ввод/вывод и файловые системы
    • В состав ядра принят код файловой системы Bcachefs, в которой предпринята попытка добиться уровня производительности, надёжности и масштабируемости, свойственного XFS, в сочетании с элементами расширенной функциональности, имеющейся в Btrfs и ZFS. Например, Bcachefs поддерживает такие возможности, как включение в раздел нескольких устройств, многослойные раскладки накопителей (нижний слой с часто используемыми данными на базе быстрых SSD, а верхний слой с менее востребованными данными из жестких дисков), репликация (RAID 1/10), кэширование, прозрачное сжатие данных (режимы LZ4, gzip и ZSTD), срезы состояния (снапшоты), верификация целостности по контрольным суммам, возможность хранения кодов коррекции ошибок Рида—Соломона (RAID 5/6), хранение информации в зашифрованном виде (используются ChaCha20 и Poly1305). По производительности Bcachefs опережает Btrfs и другие ФС на базе механизма Copy-on-Write, и демонстрирует скорость работы, близкую к Ext4 и XFS.
    • V datovem sistemu Btrfs je bil uveden poenostavljen način kvot, ki omogoča dosego višje zmogljivosti z sledenjem ekstentom le v podmapah, v katerih so bili ustvarjeni, kar bistveno poenostavi izračune in poveča zmogljivost, vendar ne omogoča upoštevanja ekstentov, ki se skupno uporabljajo v več podmapah.
    • V Btrfs je dodana nova struktura podatkov 'stripe tree', primerna za logično mapiranje ekstentov v situacijah, ko fizično mapiranje ne sovpada na različnih napravah. Struktura je za zdaj vključena v implementacije RAID0 in RAID1 za zonirane blokovne naprave. V prihodnje nameravajo to strukturo uporabiti tudi v RAID višjih stopenj, kar bo rešilo nekatera obstoječa vprašanja v trenutni implementaciji.
    • V datovem sistemu Ceph je bila implementirana podpora za mapiranje identifikatorjev uporabnikov zmontiranih datotečnih sistemov, uporabljeno za usklajevanje datotek določenega uporabnika na zmontiranem tujem oddelku z drugim uporabnikom v trenutnem sistemu.
    • V efivarfs je bila dodana možnost določanja uid in gid pri montaži, kar omogoča spremembo UEFI spremenljivk procesom, ki delujejo brez pravic root.
    • V exFAT so bili dodani ioctl-klici za branje in spreminjanje atributov datotečnega sistema. Dodana je obdelava map z ničelno velikostjo.
    • V F2FS je bila omogočena uporaba blokov velikosti 16K.
    • Mehanizem samodejnega montiranja autofs je bil prenesen na novo API za montažo oddelkov.
    • V OverlayFS so bile predlagane možnosti montaže 'lowerdir+' in 'datadir+'. Dodana je podpora za znotrajšnje montiranje OverlayFS z xattrs.
    • V XFS je bila optimizirana obremenitev CPU v kodi razporejanja blokov v realnem času. Omogočeno je hkratno izvajanje operacij branja in FICLONE.
    • Koda EXT2 je bila prenesena na uporabo foliantov strani pomnilnika (page folios).
  • Pomnilnik in sistemske storitve
    • Podpora arhitekture ia64, ki jo uporabljajo procesorji Intel Itanium, je bila prekinjena, saj so se prodaje teh procesorjev popolnoma ustavile leta 2021. Procesorje Itanium je predstavil Intel leta 2001, vendar arhitektura ia64 ni zdržala konkurence z AMD64 predvsem zaradi višje zmogljivosti AMD64 in gladkega prehoda z 32-bitnih procesorjev x86. Zaradi tega so se interesi Intela preusmerili v korist procesorjem x86-64, medtem ko so Itanium ostali. servere HP Integrity, naročila za katere so bila prekinjena pred tremi leti. Koda za podporo ia64 je bila odstranjena iz jedra predvsem zaradi dolgotrajne pomanjkljive podpore te platforme, pri čemer je Linus Torvalds izrazili pripravljenost, da vrne podporo ia64 v jedro, vendar le, če najdejo osebo, ki bo dokazala kakovostno podporo te platforme zunaj glavnega jedra vsaj eno leto.
    • Dodana je bila nova možnost ukazne vrstice jedra „ia32_emulation“, ki omogoča vključitev in izključitev podpore za emulacijo 32-bitnega načina med nalaganjem jedra, zgrajenega za arhitekturo x86-64. Z praktičnega vidika ta nova možnost omogoča gradnjo jedra s podporo za združljivost s 32-bitnimi aplikacijami, a je po privzetku ta način izključen za zmanjšanje vektorja napada na jedro, saj API za zagotavljanje združljivosti ni bil preizkušen tako kot glavni vmesniki jedra.
    • Nadaljuje se 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 aktivirana in ne privede do vključitve Rust med obvezne odvisnosti za gradnjo jedra). V novi različici je bil prehod na uporabo izdajanja Rust 1.73 in ponujen nabor povezav za delo s delovnimi čakalnimi vrstami (workqueues).
    • Omogočena je bila uporaba mehanizma binfmt_misc za dodajanje podpore novim oblikam izvršljivih datotek (na primer za zagon skompiliranih aplikacij v Javi ali Pythonu) znotraj ločenih nepovlaščenih prostorov imen (namespace).
    • V cgroup kontrolerju cpuset, ki omogoča upravljanje uporabe jeder CPU pri izvajanju naloge, je zagotovljeno ločevanje na lokalno in oddaljeno sekcioniranje (remote partition), ki se razlikujeta po tem, ali je nadrejeni cgroup veljavna korenska sekcija ali ne. V cpuset so dodane nove nastavitve „cpuset.cpus.exclusive“ in „cpuset.cpus.exclusive.effective“ za ekskluzivno vezavo na CPU.
    • V podsistemu BPF je bila implementirana podpora za izjeme, ki se obravnavajo kot nujno izstopanje iz BPF programa z možnostjo varnega razvitja okvirjev sklada. Poleg tega je v BPF programih dovoljeno uporabljati kazalce kptr v vezavi na CPU.
    • V podsistem io_uring je bila dodana podpora za operacije s futex-i, prav tako so bile implementirane nove operacije: IORING_OP_WAITID (asinhrona različica waitid), SOCKET_URING_OP_GETSOCKOPT (različica getsockopt) in SOCKET_URING_OP_SETSOCKOPT (različica setsockopt), ter IORING_OP_READ_MULTISHOT (večkratne operacije branja, ki se ne ustavijo, dokler so na voljo podatki ali dokler ni napolnjen predpomnilnik).
    • Dodana je bila implementacija lahkih enozveznih FIFO-čakal, ki zahtevajo spin-zaklepanje le za odstranjevanje iz čakalne vrste v kontekstu procesa in se obidejo brez spin-zaklepanja za atomsko dodajanje v čakalno vrsto v katerem koli kontekstu.
    • Dodana je bil obročasti predpomnilnik „objpool“ z razširljivo implementacijo visoko zmogljive čakalne vrste za dodelitev in vračanje objektov.
    • Dodana je bila začetna del sprememb za implementacijo novega API-ja futex2, ki se ponaša z višjo zmogljivostjo na NUMA sistemih, podpira velikosti, ki niso 32-bitne, in se lahko uporablja namesto multiplexiranega sistemskega klica futex().
    • Za arhitekture ARM32 in S390x je bila dodana podpora aktualnemu nabora (cpuv4) navodil BPF.
    • Za arhitekturo RISC-V je bila implementirana možnost uporabe razpoložljivega v Clang 17 načina preverjanja Shadow-Call Stack, namenjenega zaščiti pred prepisovanjem naslova vračanja iz funkcije v primeru prelivanja predpomnilnika v skladu. Bistvo zaščite je shranitev naslova vračanja v ločenem 'senčnem' skladu po prenosu nadzora na funkcijo in pridobitev tega naslova pred izstopom iz funkcije.
    • V mehanizem združevanja identičnih strani pomnilnika (KSM: Kernel Samepage Merging) je dodan nov pametni način skeniranja strani pomnilnika, ki spremlja neuspešno skenirane strani in zmanjšuje intenzivnost njihovega ponovnega skeniranja. Za omogočanje novega načina je bila dodana nastavitev /sys/kernel/mm/ksm/smart_scan.
    • Dodana je nova ioctl-komanda PAGEMAP_SCAN, ki ob uporabi z userfaultfd() omogoča določanje dejanj pisanja v določen razpon pomnilnika. Nova funkcionalnost se lahko na primer uporablja v sistemu za shranjevanje in obnovo stanja procesov CRIU ali v protokolih proti goljufijam v igrah.
    • V sistemu za gradnjo je ob prisotnosti prevajalnika Clang privzeto vključena gradnja primerov uporabe podsystema perf, napisanih v obliki BPF-programov.
    • Stari sloj videobuf, ki se je uporabljal za upravljanje s framebufferji v medijska podsystemu in je bil pred več kot 10 leti zamenjan z novo realizacijo videobuf2, je odstranjen.
  • Virtualizacija in varnost
    • V podsystem fscrypt je dodana možnost šifriranja podatkov v blokih, ki so manjši od velikosti bloka v datotečnem sistemu. To je lahko potrebno za aktiviranje strojnih mehanizmov šifriranja, ki podpirajo le majhne bloke (na primer, kontrolerji UFS, ki podpirajo le velikost bloka 4096, se lahko uporabijo z datotečnim sistemom z velikostjo bloka 16K).
    • V podsystem iommufd, ki omogoča upravljanje s tabelami strani pomnilnika vhod/izhod IOMMU (I/O Memory-Management Unit) preko datotečnih descriptorjev iz prostora uporabnika, je dodano sledenje še ne izbrisanih iz predpomnilnika podatkov (dirty) za operacije DMA, kar je nujno za določitev pomnilnika z neizbrisanimi podatki pri migraciji procesov.
    • V mehanizem Landlock, ki omogoča omejevanje interakcij skupine procesov z zunanjim okoljem, je dodana podpora za določanje pravil nadzora dostopa do TCP-socketov. Na primer, lahko ustvarite pravilo, ki omogoča le dostop preko omrežnega porta 443 za vzpostavitev HTTPS-povezav.
    • V podsystem AppArmor je dodana možnost upravljanja dostopa do mehanizma io_uring in ustvarjanja prostorskih imen identifikatorjev uporabnika (user namespaces), kar omogoča selektivno omogočanje dostopa do teh zmogljivosti le določenim procesom.
    • Dodano je API za potrjevanje virtualnih naprav za potrditev celovitosti procesov njihovih nalaganj.
    • Na sistemih LoongArch je bila implementirana podpora za virtualizacijo z uporabo hipervizorja KVM.
    • Pri uporabi hipervizorja KVM na sistemih RISC-V je prišla podpora za razširitev Smstateen, ki blokira dostop virtualnega stroja do registrov CPU, ki jih hipervizor izrecno ne podpira. Dodana je bila tudi podpora za uporabo razširitve Zicond v gostiteljskih sistemih, ki omogoča izvajanje nekaterih pogojnih celotnih številski operacij.
    • V gostiteljskih sistemih, ki delujejo pod hipervizorjem KVM na osnovi arhitekture x86, je dovoljeno uporabljati do 4096 virtualnih CPU.
  • Mrežna podsistem
    • V gonilniku NVMe-TCP (NVMe over TCP), ki omogoča dostop do NVMe pomnilnikov prek omrežja (NVM Express over Fabrics) z uporabo protokola TCP, je dodana podpora za šifriranje prenosa podatkov z uporabo TLS (uporablja se KTLS in ozadje v uporabniškem prostoru tlshd za usklajevanje povezave).
    • Izvedena je bila optimizacija zmogljivosti načrtovalnika paketov fq (Fair Queuing), ki je omogočila povečanje propustnosti za 5 % pri visokih obremenitvah v testu tcp_rr (TCP Request/Response) in za 13 % pri neomejenem toku UDP paketov.
    • V protokol TCP je bila dodana opcionalna možnost uporabe časovnih žigov (TCP TS) z mikrosekundno natančnostjo (RFC 7323), kar omogoča natančnejše ocenjevanje zakasnitev in ustvarjanje bolj naprednih modulov za upravljanje z obremenitvijo. Za vključitev lahko uporabite ukaz „ip route add 10/8 … features tcp_usec_ts”.
    • V TCP skladu je bila dodana podpora za razširitev TCP-AO (TCP Authentication Option, RFC 5925), ki omogoča verifikacijo TCP naslovov s MAC kode (Message Authentication Code), pri čemer se uporabljajo sodobnejši algoritmi HMAC-SHA1 in CMAC-AES-128 namesto prej razpoložljive možnosti TCP-MD5, ki temelji na zastarelem algoritmu MD5.
    • Dodana je bila nova vrsta virtualnih omrežnih naprav „netkit“, kjer se logika prenosa podatkov določa s pomočjo BPF programa.
    • V KSMBD, ki deluje na nivoju jedra kot implementacija SMB strežnika, je bila dodana podpora za pretvorbo imen datotek, ki vsebujejo surrogatne pare sestavljenih znakov.
    • V NFS je bila izboljšana implementacija niti z RPC storitvami. Dodana je podpora za delegacijo zapisov (za NFSv4.1+). V NFSD je bila dodana podpora za netlink obdelovalec rpc_status. Izboljšana je podpora za NFSv4.x odjemalce pri ponovnem izvažanju v knfsd.
  • Oprema
    • V jedru modula Nouveau je bila dodana začetna podpora za GSP-RM vdelavne programe, ki se uporabljajo v GPU NVIDIA RTX 20+, za prenos operacij inicializacije in upravljanja GPU na ločen mikrokrmilnik GSP (GPU System Processor). Podpora GSP-RM omogoča gonilniku Nouveau delovanje preko klica v vdelani programski opremi, namesto neposrednega programiranja interakcij s strojno opremo, kar bistveno poenostavi dodajanje podpore za nove GPU NVIDIA z uporabo že pripravljenih klicev za inicializacijo in upravljanje porabe energije.
    • Gonilnik AMDGPU je implementiral podporo za GC 11.5, NBIO 7.11, SMU 14, SMU 13.0 OD, DCN 3.5, VPE 6.1 in DML2. Poboljšana je bila podpora za brezšivno nalaganje (brez utripanja pri preklapljanju video načina).
    • Gonilnik i915 je implementiral podporo za čipe Intel Meteor Lake in dodal začetno izvedbo Intel LunarLake (Xe 2).
    • Dodana je podpora za asimetrične kanale prenosa, dodane v specifikacije USB4 v2 (120/40G).
    • Dodana je podpora za ARM SoC: Qualcomm Snapdragon 720G (uporablja se v pametnih telefonih Xiaomi), AMD Pensando Elba, Renesas, R8A779F4 (R-Car S4-8), USRobotics USR8200 (uporablja se v usmerjevalnikih in NAS).
    • Dodana je podpora za pametni telefon Fairphone 5 in ARM plošče Orange Pi 5, QuartzPro64, Turing RK1, Variscite MX6, BigTreeTech CB1, Freescale LX2162, Google Spherion, Google Hayato, Genio 1200 EVK, RK3566 Powkiddy RGB30.
    • Dodana je podpora za RISC-V plošče Milk-V Pioneer in Milk-V Duo.
    • Dodana je podpora za zvočne vmesnike prenosnikov HUAWEI, ki so opremljeni s CPU AMD. Dodana je podpora za dodatne zvočnike, nameščene na prenosnikih Dell Oasis 13/14/16. Dodana je podpora za vgrajene zvočnike ASUS K6500ZC. Dodana je podpora za indikator izklopa zvoka na prenosnikih HP 255 G8 in G10. Dodana je podpora za zvočne gonilnike acp6.3. Dodana je podpora za profesionalne zvočne vmesnike Focusrite Clarett+ 2Pre in 4Pre.

Hkrati je latinskoameriška Fundacija za prosto programsko opremo oblikovala različico popolnoma prostega jedra 6.7 — Linux-libre 6.7-gnu, očiščenega od elementov vdelanih sistemov in gonilnikov, ki vsebujejo neproste komponente ali odseke kode, katerih uporaba je omejena s strani proizvajalca. V izdaji 6.7 je bila posodobljena koda za čiščenje blobov v različnih gonilnikih in podsystemih, na primer v gonilnikih amdgpu, nouveau, adreno, mwifiex, mt7988, ath11k, avs in btqca. Odstranjena je bila koda za čiščenje gonilnikov localtalk in rtl8192u zaradi njune izločitve iz jedra. Odstranjeni so bili odvečni elementi čiščenja gonilnikov xhci-pci, rtl8xxxu in rtw8822b, ki so bili prej dodani po pomoti. Opravljeno je bilo čiščenje imen blobov v dts-datotekah za arhitekturo Aarch64. Odstranjeni so bili blobi v novih gonilnikih mt7925, tps6598x, aw87390 in aw88399.

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