După două luni de dezvoltare, Linus Torvalds a lansat versiunea kernelului Linux 6.7. Printre cele mai notabile schimbări se numără: integrarea sistemului de fișiere Bcachefs, încetarea suportului pentru arhitectura Itanium, capacitatea de operare a Nouvea cu firmware-urile GSP-R, suport pentru criptarea TLS în NVMe-TCP, posibilitatea utilizării excepțiilor în BPF, suport pentru futex în io_uring, optimizarea performanței planificatorului fq (Fair Queuing), suport pentru extensia TCP-AO (TCP Authentication Option) și capacitatea de a limita conexiunile de rețea în mecanismul de protecție Landlock, adăugând gestionarea accesului la namespace-ul utilizator și io_uring prin AppArmor.
Noua versiune include 18405 corecturi din partea a 2066 de dezvoltatori, dimensiunea patch-ului fiind de 72 MB (modificările au vizat 13467 de fișiere, au fost adăugate 906147 de linii de cod și eliminate 341048 de linii). În ultima lansare s-au înregistrat 15291 de corecturi din partea a 2058 de dezvoltatori, cu o dimensiune a patch-ului de 39 MB. Aproape 45% din toate modificările prezentate în 6.7 se referă la driverele de dispozitive, aproximativ 14% din modificări sunt legate de actualizarea codului specific arhitecturilor hardware, 13% se referă la stiva de rețea, 5% la sistemele de fișiere și 3% la subsystemele interne ale kernelului.
Inovațiile principale din kernelul 6.7:
- Subsistemul de disc, I/O și sistemele de fișiere
- În cadrul kernelului a fost acceptat codul sistemului de fișiere Bcachefs, în care s-a încercat atingerea unui nivel de performanță, fiabilitate și scalabilitate, specific sistemului XFS, combinat cu elemente de funcționalitate extinsă, întâlnite în Btrfs și ZFS. De exemplu, Bcachefs suportă funcționalități precum includerea mai multor dispozitive în aceleași partiții, layout-uri multilayer ale dispozitivelor de stocare (stratul de bază cu date utilizate frecvent pe SSD-uri rapide, iar stratul superior cu date mai rar accesate de pe hard disk-uri), replicare (RAID 1/10), caching, compresie transparentă a datelor (modurile LZ4, gzip și ZSTD), snapshot-uri, verificarea integrității prin checksum-uri, posibilitatea de a stoca coduri de corecție a erorilor Reed-Solomon (RAID 5/6), stocarea informațiilor într-o formă criptată (folosind ChaCha20 și Poly1305). În ceea ce privește performanța, Bcachefs depășește Btrfs și alte sisteme de fișiere bazate pe mecanismul Copy-on-Write și arată viteze de lucru apropiate de Ext4 și XFS.
- În sistemul de fișiere Btrfs a fost introdus un mod simplificat de gestionare a cotelor, care permite obținerea unei performanțe mai ridicate prin urmărirea extinctorilor doar în subdirectorul în care acestea sunt create, ceea ce simplifică semnificativ calculele și îmbunătățește performanța, dar nu permite contabilizarea extinctorilor folosiți în comun în mai multe subdirectoare.
- Btrfs a adăugat o nouă structură de date numită „stripe tree”, adecvată pentru maparea logică a extinctorilor în situațiile în care maparea fizică nu coincide pe diferite dispozitive. Această structură este deja utilizată în implementările RAID0 și RAID1 pentru dispozitivele de bloc cu zonare. În viitor, se preconizează că această structură va fi utilizată și în RAID-uri de nivel superior, ceea ce va permite rezolvarea unor probleme existente în implementarea curentă.
- În sistemul de fișiere Ceph a fost implementată suportul pentru maparea identificatorilor utilizatorilor în sistemele de fișiere montate, folosit pentru a corela fișierele unui anumit utilizator pe o partiție montată din altă parte cu un alt utilizator din sistemul curent.
- În efivarfs a fost adăugată posibilitatea de a specifica uid și gid în timpul montării pentru a permite modificarea variabilelor UEFI de către procesele care nu au privilegii root.
- În exFAT au fost adăugate apeluri ioctl pentru citirea și modificarea atributelor sistemului de fișiere. A fost adăugată suportul pentru directoare de dimensiune zero.
- În F2FS a fost implementată posibilitatea de a utiliza blocuri de dimensiune de 16K.
- Mecanismul de automontare autofs a fost adaptat pentru a utiliza noul API de montare a partițiilor.
- În OverlayFS au fost propuse opțiunile de montare „lowerdir+” și „datadir+”. A fost adăugată suportul pentru montarea încrucișată OverlayFS cu xattrs.
- În XFS a fost optimizată încărcătura pe CPU în codul pentru distribuirea blocurilor în timp real. A fost asigurată posibilitatea efectuării simultane a operațiunilor de citire și FICLONE.
- Codul EXT2 a fost adaptat pentru a folosi folii de pagină (page folios).
- Memorie și servicii de sistem
- Suportul pentru arhitectura ia64, utilizată în procesoarele Intel Itanium, a fost suspendat, vânzările fiind complet oprite în 2021. Procesoarele Itanium au fost introduse de Intel în 2001, dar arhitectura ia64 nu a rezistat competiției cu AMD64, în principal din cauza performanțelor superioare ale AMD64 și a tranziției mai ușoare de la procesoarele x86 pe 32 de biți. În consecință, interesele Intel s-au orientat către procesoarele x86-64, lăsând arhitectura Itanium. servere HP Integrity, comenzile pentru care au fost suspendate acum trei ani. Codul pentru suportul ia64 a fost eliminat din nucleu, în principal din cauza lipsei prelungite de suport pentru această platformă, deși Linus Torvalds a exprimat disponibilitatea de a readuce suportul ia64 în nucleu, dar doar dacă va fi găsit un dezvoltator care să demonstreze un suport de calitate pentru această platformă, în afara nucleului principal, timp de cel puțin un an.
- A fost adăugat un parametru în linia de comandă a nucleului „ia32_emulation”, permițând activarea și dezactivarea suportului pentru emularea modului pe 32 de biți în nucleele compilate pentru arhitectura x86-64. Din punct de vedere practic, noul parametru permite compilarea nucleului cu suport pentru aplicații pe 32 de biți, dar dezactivează acest mod în mod implicit pentru a reduce vectorul de atac asupra nucleului, deoarece API-ul pentru asigurarea compatibilității este mai puțin testat decât interfețele principale ale nucleului.
- Continuarea transferului modificărilor din ramura Rust-for-Linux, legate de utilizarea limbajului Rust ca al doilea limbaj pentru dezvoltarea driverelor și modulelor nucleului (suportul Rust nu este activat implicit și nu duce la includerea Rust ca dependență obligatorie de compilare a nucleului). În noua versiune, a fost realizat transferul la versiunea Rust 1.73 și a fost propus un set de legături pentru lucrul cu cozi de muncă (workqueues).
- A fost oferită posibilitatea utilizării mecanismului binfmt_misc pentru adăugarea suportului pentru noi formate de fișiere executabile (de exemplu, pentru rularea aplicațiilor compilate în Java sau Python) în interiorul unor spații de nume (namespace) neprivilegiate.
- În controlerul cgroup cpuset, care permite gestionarea utilizării nucleelor CPU în timpul execuției unei sarcini, este asigurată o separare între secționarea locală și cea remote (remote partition), care diferă prin faptul că cgroup-ul părinte este o secțiune rădăcină corectă sau nu. De asemenea, în cpuset au fost adăugate noi setări „cpuset.cpus.exclusive” și „cpuset.cpus.exclusive.effective” pentru legarea exclusivă la CPU.
- În subsistemul BPF a fost implementat suportul pentru excepții, care sunt tratate ca o ieșire urgentă din programul BPF cu posibilitatea de desfășurare sigură a cadrelor stivei. În plus, utilizarea pointerelor kptr este permisă în programele BPF legate de CPU.
- În subsistemul io_uring a fost adăugat suport pentru operații cu futex-uri, iar de asemenea, noi operații au fost implementate: IORING_OP_WAITID (versiunea asincronă a waitid), SOCKET_URING_OP_GETSOCKOPT (varianța getsockoptand), SOCKET_URING_OP_SETSOCKOPT (varianța setsockopt) și IORING_OP_READ_MULTISHOT (operații de citire repetate, care nu se opresc atâta timp cât există date sau bufferul nu este plin).
- A fost adăugată o implementare a cozilor FIFO unidirecționale ușoare, care necesită blocaj pe spin doar pentru eliminarea din coadă în contextul procesului și care nu necesită blocaj pe spin pentru adăugarea atomică în coadă în orice context.
- A fost adăugat un buffer circular „objpool” cu o implementare scalabilă a unei cozi de înaltă performanță pentru alocarea și returnarea obiectelor.
- A fost adăugată o parte inițială a modificărilor pentru implementarea noului API futex2, care are o performanță mai ridicată pe sistemele NUMA, suportă dimensiuni diferite de 32 de biți și poate fi utilizat în locul apelului de sistem multiplexat futex().
- Pentru arhitecturile ARM32 și S390x a fost adăugat suportul pentru setul actual de instrucțiuni BPF (cpuv4).
- Pentru arhitectura RISC-V a fost implementată posibilitatea utilizării modului de verificare Shadow-Call Stack disponibil în Clang 17, destinat protecției împotriva suprascrierii adreselor de returnare din funcție în caz de depășire a bufferului în stivă. Esența protecției constă în salvarea adresei de returnare după ce controlul a fost predat funcției, într-o „stivă umbroasă” separată și extragerea acestei adrese înainte de a ieși din funcție.
- În mecanismul de fuzionare a paginilor de memorie identice (KSM: Kernel Samepage Merging) a fost adăugat un nou mod inteligent de scanare a paginilor de memorie, care urmărește paginile scanate eșuat și reduce intensitatea re-scanării acestora. Pentru a activa noul mod, a fost adăugată o setare /sys/kernel/mm/ksm/smart_scan.
- A fost adăugată o nouă comandă ioctl PAGEMAP_SCAN, care, atunci când este utilizată cu userfaultfd(), permite identificarea scrierilor în anumite zone de memorie. Această nouă capacitate poate fi utilizată, de exemplu, în sistem pentru salvarea și restaurarea stării proceselor CRIU sau în sistemele anti-cheat pentru jocuri.
- În sistemul de construire, cu compilatorul Clang activat, se va face construcția exemplarelor de utilizare a subsistemului perf, implementate sub formă de programe BPF.
- A fost eliminat vechiul strat videobuf, folosit pentru gestionarea cadrelor de buffer în subsistemul media și înlocuit cu mai mult de 10 ani în urmă cu o nouă implementare videobuf2.
- Virtualizare și securitate
- În subsistemul fscrypt a fost adăugată capacitatea de a cripta date în blocuri mai mici decât dimensiunea blocului în sistemul de fișiere. Aceasta poate fi necesară pentru a utiliza mecanismele hardware de criptare care sprijină doar blocuri mici (de exemplu, controlerele UFS care suportă numai dimensiunea de bloc 4096 pot fi utilizate cu un FS cu dimensiunea de bloc 16K).
- În subsistemul «iommufd», care permite gestionarea tabelor de pagini de memorie de intrare/ieșire IOMMU (I/O Memory-Management Unit) prin descriptorii de fișiere din spațiul utilizatorului, a fost adăugat un mecanism de urmărire a datelor murdare (dirty) care nu au fost șterse din cache pentru operațiile DMA, ceea ce este necesar pentru a determina memoria cu date murdare în timpul migrației proceselor.
- În mecanismul Landlock, care permite limitarea interacțiunii unui grup de procese cu mediul extern, a fost adăugată suportul pentru stabilirea regulilor de gestionare a accesului la socketurile TCP. De exemplu, este posibil să creați o regulă care permite accesul doar prin portul de rețea 443 pentru a stabili conexiuni HTTPS.
- În subsistemul AppArmor a fost adăugată capacitatea de a gestiona accesul la mecanismul io_uring și de a crea namespace-uri pentru identificatorii utilizatorului (user namespaces), ceea ce permite autorizarea selectivă a accesului la aceste capabilități doar pentru anumite procese.
- A fost adăugat un API de certificare mașini virtuale pentru a confirma integritatea procesului de încărcare.
- Pe sistemele LoongArch a fost implementat suport pentru virtualizare cu ajutorul hypervisorului KVM.
- Odată cu utilizarea hypervisorului KVM pe sistemele RISC-V, a apărut suportul pentru extensia Smstateen, care blochează accesul mașinii virtuale la registele CPU care nu sunt explicit acceptate de hypervisor. De asemenea, a fost adăugat suport pentru utilizarea extensiei Zicond în sistemele gazdă, care permite realizarea unor operații condiționale întregi.
- În sistemele gazdă care rulează sub KVM pe baza arhitecturii x86, este permisă utilizarea a până la 4096 CPU virtuali.
- Subsystema de rețea
- În driverul NVMe-TCP (NVMe peste TCP), care permite accesarea unităților NVMe prin rețea (NVM Express over Fabrics), a fost adăugată suport pentru criptarea canalului de transmitere a datelor cu ajutorul TLS (folosind KTLS și un proces în spațiul utilizatorului tlshd pentru negocierea conexiunii).
- A fost realizată o optimizare a performanței planificatorului de pachete fq (Fair Queuing), care a permis creșterea lățimii de bandă cu 5% la sarcini mari în testul tcp_rr (TCP Request/Response) și cu 13% la un flux nelimitat de pachete UDP.
- În protocolul TCP a fost adăugată opțiunea de a utiliza mărci de timp (TCP TS) cu o precizie de microsecunde (RFC 7323), ceea ce permite o evaluare mai precisă a întârzierilor și crearea unor module de control al suprasarcinilor mai avansate. Pentru a activa această funcție, se poate folosi comanda „ip route add 10/8 … features tcp_usec_ts”.
- În stiva TCP a fost adăugat suport pentru extensia TCP-AO (TCP Authentication Option, RFC 5925), care permite verificarea antetelor TCP prin MAC-uri (Message Authentication Code), utilizând algoritmi mai moderni HMAC-SHA1 și CMAC-AES-128 în locul opțiunii TCP-MD5 bazate pe algoritmul învechit MD5.
- A fost adăugat un nou tip de dispozitive de rețea virtuale „netkit”, logica de transmitere a datelor fiind definită printr-un program BPF.
- În KSMBD, care funcționează la nivel de nucleu ca un server SMB, a fost adăugat suport pentru conversia numelui fișierelor care conțin perechi surrogate de caractere compuse.
- În NFS a fost îmbunătățită implementarea fluxurilor cu servicii RPC. A fost adăugat suport pentru delegarea scrierii (pentru NFSv4.1+). În NFSD a fost adăugat suport pentru procesatorul netlink rpc_status. A fost îmbunătățit suportul pentru clienții NFSv4.x la re-exportarea în knfsd.
- Echipament
- Modulul nucleului Nouveau a adăugat suport inițial pentru firmware GSP-RM, folosit în GPU-urile NVIDIA RTX 20+ pentru delegarea operațiunilor de inițializare și gestionare a GPU-ului către un microcontroler distinct GSP (GPU System Processor). Suportul GSP-RM permite driverului Nouveau să funcționeze prin apelarea firmware-ului, în loc de programarea directă a operațiunilor de interacțiune cu hardware-ul, ceea ce simplifică considerabil adăugarea suportului pentru noi GPU-uri NVIDIA prin utilizarea apelurilor deja existente pentru inițializare și gestionarea consumului de energie.
- Driverul AMDGPU a implementat suport pentru GC 11.5, NBIO 7.11, SMU 14, SMU 13.0 OD, DCN 3.5, VPE 6.1 și DML2. A fost îmbunătățit suportul pentru încărcarea fără întreruperi (fără pâlpâire la schimbarea modului de video).
- Driverul i915 a implementat suport pentru cipurile Intel Meteor Lake și a adăugat o implementare inițială pentru Intel LunarLake (Xe 2).
- A fost adăugat suport pentru canalele de transmitere asimetrice, incluse în specificațiile USB4 v2 (120/40G).
- A fost adăugat suport pentru ARM SoC: Qualcomm Snapdragon 720G (utilizat în smartphone-urile Xiaomi), AMD Pensando Elba, Renesas, R8A779F4 (R-Car S4-8), USRobotics USR8200 (utilizat în routere și NAS).
- A fost adăugat suport pentru smartphone-ul Fairphone 5 și plăcile ARM Orange Pi 5, QuartzPro64, Turing RK1, Variscite MX6, BigTreeTech CB1, Freescale LX2162, Google Spherion, Google Hayato, Genio 1200 EVK, RK3566 Powkiddy RGB30.
- A fost adăugat suport pentru plăcile RISC-V Milk-V Pioneer și Milk-V Duo.
- A fost adăugat suport pentru interfețele audio ale laptopurilor HUAWEI echipate cu CPU AMD. A fost adăugat suport pentru difuzoare suplimentare montate pe laptopurile Dell Oasis 13/14/16. A fost adăugat suport pentru difuzoarele integrate ASUS K6500ZC. A fost adădat suport pentru indicatorul de dezactivare a sunetului pe laptopurile HP 255 G8 și G10. A fost adăugat suport pentru driverele audio acp6.3. A fost adăugat suport pentru interfețele profesionale de înregistrare audio Focusrite Clarett+ 2Pre și 4Pre.
În același timp, Fondul Latino-American pentru Software Liber a elaborat o variantă complet liberă a nucleului 6.7 — Linux-libre 6.7-gnu, curățată de elemente de firmware și drivere care conțin componente ne-libere sau porțiuni de cod a căror utilizare este limitată de producător. În versiunea 6.7, a fost actualizat codul de curățare a blob-urilor în diverse drivere și subsisteme, de exemplu, în driverele amdgpu, nouveau, adreno, mwifiex, mt7988, ath11k, avs și btqca. Codul de curățare a driverelor localtalk și rtl8192u a fost eliminat din cauza excluderii acestora din nucleu. Au fost eliminate componentele inutile de curățare a driverelor xhci-pci, rtl8xxxu și rtw8822b, adăugate anterior din greșeală. A fost efectuată o curățare a numelui blob-urilor în fișierele dts pentru arhitectura Aarch64. Blob-urile din noile drivere mt7925, tps6598x, aw87390 și aw88399 au fost eliminate.
Sursa: opennet.ro
