După două luni de dezvoltare, Linus Torvalds a prezentat versiunea kernel-ului Linux 6.14. Printre cele mai notabile modificări se numără: driverul ntsync cu primitive de sincronizare Windows NT, configurarea echilibrării operațiunilor de citire în Btrfs RAID1, suport pentru reflink în XFS în modul realtime, posibilitatea de intrare/ieșire tamponizată necacheabilă, grupul cgroup dmem pentru limitarea memoriei GPU, utilizarea io_uring în FUSE, delegarea atributelor în NFS, suport pentru scrierea atomică în Device mapper, accelerarea legăturilor simbolice, gestionarea posibilității de executare a scripturilor, suport pentru cipuri Qualcomm Snapdragon 8 Elite și driver pentru NPU AMD.
Noua versiune include 12115 corecturi din partea a 1984 de dezvoltatori, dimensiunea patch-ului fiind de 39 MB (modificările au afectat 10170 de fișiere, au fost adăugate 531586 de linii de cod și șterse 235999 de linii). În versiunea anterioară, au fost 14172 de corecturi de la 2086 de dezvoltatori, iar dimensiunea patch-ului a fost de 46 MB. Aproximativ 41% din toate modificările aduse în 6.14 se referă la driverele de dispozitive, în jur de 13% la actualizarea codului specific arhitecturilor hardware, 14% sunt legate de stiva de rețea, 7% de sistemele de fișiere și 4% de subsistemele interne ale kernel-ului.
Principalele noutăți din kernel-ul 6.14:
- Subsistemul de disc, I/O și sistemele de fișiere
- În sistemul de fișiere Btrfs a fost adăugat suport pentru noi metode de echilibrare a operațiunilor de citire între unitățile incluse în array-ul RAID1. Pe lângă distribuția de sarcină pe baza identificatorilor de procese (pid) existent anterior, noua versiune oferă trei noi moduri de echilibrare: „rotation” (distribuție uniformă a sarcinii pe toate unitățile, mod activată implicit); „latency” (distribuția ținând cont de întârzieri, utilă în caz de defecțiuni sau funcționare instabilă a unităților); devid (gestionare manuală). Pentru a schimba modul de echilibrare, a fost adăugat interfața „/sys/fs/btrfs//read_policy”. Printre alte modificări în Btrfs se numără implementarea ioctl FS_IOC_READ_VERITY_METADATA.
- A fost adăugat modul de input/output bufferizat necacheat, în care datele sunt eliminate din cache-ul paginilor imediat după ce operațiile de citire sau scriere sunt finalizate. Această modificare poate fi utilă atunci când se folosesc dispozitive de stocare foarte rapide, cache-ul operațiunilor în memorie fiind redundant. Pentru astfel de dispozitive, noul mod permite eliminarea consumului excesiv de memorie al cache-ului de pagină fără a apela la API-ul complex de input/output direct (Direct I/O).
- În fsnotify, mecanismul de urmărire a modificărilor în sistemul de fișiere, a fost adăugat un nou eveniment FS_PRE_ACCESS, generat înainte de a accesa conținutul fișierului. Evenimentul este procesat în mod sincron, adică nucleul trimite evenimentul și așteaptă un răspuns. Dacă răspunsul este primit, operația se execută, iar în caz de eșec, apelul de sistem returnează un cod de eroare în spațiul utilizatorului. Prin FS_PRE_ACCESS, procesul din spațiul utilizatorului poate, de exemplu, organiza completarea fișierului pe măsură ce datele devin disponibile în stocarea lentă.
- În subsistemul FUSE, care permite crearea de implementări ale sistemelor de fișiere în spațiul utilizatorului, a fost adăugat suport pentru schimbul de date între nucleu și handlerul din spațiul utilizatorului folosind mecanismul de input/output io_uring. Această modificare permite îmbunătățirea performanței FUSE prin reducerea comutărilor de context între nucleu și spațiul utilizatorului.
- În sistemul de fișiere XFS a fost adăugată capacitatea de a utiliza reverse-mapping (rmap) în modul de lucru cu întârzieri predictibile ("dispozitiv în timp real"). Reverse-mapping permite identificarea fișierului pentru stocarea căruia este utilizat un anumit bloc pe dispozitivul de stocare. Prin rmap, în modurile în timp real din XFS, a fost implementat suportul pentru operația reflink, care permite crearea de copii ale fișierelor prin clonarea metadatelor fișierului și crearea unei legături către datele deja existente fără copierea lor efectivă.
- În VFS a fost implementat caching-ul dimensiunilor legăturilor simbolice, ceea ce a permis accelerarea cu 1.5% a execuției operației readlink (în testul cu /initrd.img în ext4). Caching-ul este activat în sistemele de fișiere ext4 și tmpfs.
- Implementarea NFSv4.2 a adus suport pentru delegarea atributelor fișierelor, permițând gestionarea unor astfel de atribute ale fișierelor, cum ar fi timpul modificării (mtime), pe partea clientului NFS, fără a fi necesară resetarea modificărilor pe server. De asemenea, în NFS a fost îmbunătățit suportul pentru protocolul „LOCALIO”, care determină dacă clientul și serverul NFS se află pe același host, pentru a activa optimizările corespunzătoare, cum ar fi utilizarea de către client a intrării/ieșirii directe (Direct I/O).
- Performanța operațiunilor de citire în sistemele de fișiere NETFS, CIFS și AFS (Andrew File System) a fost îmbunătățită.
- În Squashfs a fost inclus un mod de încărcare directă a blocurilor în memoria cache pe pagină (SQUASHFS_FILE_DIRECT), permițând evitarea utilizării unui cache separatat read_page. Această modificare a redus dimensiunea memoriei consumate în timpul funcționării Squashfs.
- În apelul de sistem statx() a fost implementat flagul STATX_DIO_READ_ALIGN, pentru a determina alinierea necesară pentru operațiile de citire din fișiere.
- În sistemul de fișiere Bcachefs, formatul structurilor de disc a fost actualizat și stabilizat. Orice modificări suplimentare ale formatului vor fi considerate opționale și vor fi implementate sub formă de extensii opționale. S-a îmbunătățit semnificativ viteza de verificare a integrității FS. De asemenea, în Bcachefs a fost îmbunătățită funcționarea în modul de citire, eliminând problemele care duceau la accesarea memoriei după ce aceasta a fost eliberată (use after free); au fost rezolvate problemele cu pointerele reflink în fsck; a fost corectată gestionarea reluării tranzacțiilor.
- Modulul md-linear, destinat combinării unităților de disc, a fost readus. Acest modul fusese anterior declarat învechit și eliminat din kernelul 6.8, dar, cum s-a dovedit, era necesar și, prin urmare, a fost recuperat.
- Sistemele de fișiere F2FS și SQUASHFS au fost migrate pentru a utiliza folio-uri de pagină (page folios).
- Sistemele de fișiere OCFS2 și DLMFS au fost migrate pentru a utiliza noul API de montare a partițiilor.
- În driverul null_blk a fost implementat atributul „rotational”, setat prin configfs și care permite simularea lucrului cu un dispozitiv bazat pe discuri rotative pentru a simplifica testarea funcțiilor kernelului.
- În sistemul Device mapper și în modulele dm-mirror, dm-io, dm-table, dm-linear, dm-stripe și dm-raid1 a fost implementat suportul pentru scrierea atomică.
- Memorie și servicii de sistem
- Integrarea în nucleul driverului ntsync, care implementează dispozitivul simbolic /dev/ntsync și un set de primitives pentru sincronizare utilizate în nucleul Windows NT, a fost finalizată. Implementarea unor astfel de primitives la nivel de nucleu permite o creștere semnificativă a performanței jocurilor Windows rulante prin intermediul Wine. Creșterea performanței este realizată prin eliminarea costurilor asociate cu utilizarea RPC în spațiul utilizatorului. Crearea unui driver separat pentru nucleul Linux este explicată prin dificultatea implementării corecte a API-ului de sincronizare NT deasupra primitives existente în nucleu.
- A fost adăugat un nou controler cgroup DMEM pentru contabilizarea separată a zonelor de memorie ale dispozitivelor, cum ar fi GPU-urile. DMEM permite crearea de cgroup-uri separate pentru diferite sarcini care lucrează cu GPU, astfel încât acestea să poată funcționa fără a se influența reciproc. Noua funcționalitate rezolvă problema închiderii forțate a operațiunilor cu GPU atunci când memoria disponibilă este epuizată, datorită contabilizării memoriei reflectate a GPU și a memoriei utilizate de driverele CPU în cgroup-uri separate.
- Au fost aduse optimizări pentru scalarea operației de resetare (flush) a cache-ului TLB (Translation Lookaside Buffer), utilizat pentru accelerarea conversiei adreselor virtuale în fizice. Optimizările adăugate constau în actualizarea întârziată a unor structuri de date în timpul schimbării contextului, ceea ce permite creșterea performanței în timpul efectuării anumitor teste.
- Performanța mecanismului MGLRU (Multi-Generational LRU), utilizat pentru a determina ce pagini de memorie sunt utilizate și care pot fi înlocuite în zona de swap, a fost îmbunătățită.
- Continuarea transferului modificărilor din ramura Rust-for-Linux, legate de utilizarea limbajului Rust ca al doilea limbaj pentru dezvoltarea driverelor și modulelor kernel (suportul pentru Rust nu este activat implicit și nu conduce la includerea Rust în lista dependențelor de construcție obligatorii pentru kernel). A fost oferită posibilitatea utilizării în codul kernel a macro-ului „derive(CoercePointee)”, care permite utilizarea pointerilor inteligenți cu obiecte trait. În cadrul kernelului au fost incluse wrapper-e Rust pentru PCI, platforme, Open Firmware, dispozitive simbolice și unele funcții de intrare/ieșire. Greg Kroah-Hartman, responsabil cu suportul pentru ramura stabilă a kernelului Linux, a caracterizat starea actuală ca „aproape pregătită pentru scrierea unui driver real în Rust”.
- În scenariile de compilare a fost propus un nou cod pentru generarea versiunilor simbolurilor de depanare pentru modulele încărcabile, care acum folosește informații din înregistrările de depanare în format DWARF, în loc să analizeze direct codul sursă. Modificarea permite aplicarea versiilor simbolurilor de depanare pentru module scrise în limbajul Rust. Vechea implementare a fost păstrată în kernel, iar alegerea generatorului se face la nivelul opțiunilor de compilare.
- Pentru arhitectura PowerPC a fost implementat suportul pentru modul de preemțiune leneșă a sarcinilor (PREEMPT_LAZY), care corespunde modului de preemțiune completă („full preemption”) pentru sarcini realtime (RR/FIFO/DEADLINE), dar amână preemțiunea sarcinilor normale (SCHED_NORMAL) până la limita tic-tac-ului.
- În subsistemul de profilare a performanței „perf” a fost adăugat suport pentru contoarele de energie ale procesoarelor AMD. A fost adăugată posibilitatea de a funcționa pe sisteme care au până la 2048 de nuclee CPU.
- A fost oferită posibilitatea utilizării parametrului sysctl pid_max cu spațiile de nume pentru identificatorii de procese (ID namespace). Parametrul pid_max este destinat limitării valorii maxime a identificatorilor de procese (PID) și poate fi acum utilizat pentru limitarea numărului maxim de procese care pot fi rulate în acel spațiu de nume. Procesarea parametrului se efectuează ierarhic, respectiv limitările din spațiile externe de nume se aplică spațiilor de nume înfășurate.
- Atunci când se lansează un proces folosind apelul de sistem execveat, numele fișierului pornit va fi acum afișat în sistemul de fișiere /proc, și nu numărul descriptorului de fișier.
- În cadrul codului sursă al nucleului (în catalogul samples/vfs) a fost adăugată utilitarul mountinfo, care demonstrează utilizarea apelurilor de sistem statmount() și listmount().
- În subsistemul BPF, au fost propuse noi funcții bpf_local_irq_save() și bpf_local_irq_restore() pentru dezactivarea temporară a întreruperilor pe CPU-ul local. Aceste funcții pot fi folosite pentru a implementa structuri pentru care procesarea nu este întreruptă.
- În apelul de sistem madvise(), utilizarea flag-urilor MADV_DONTNEED și MADV_FREE asigură eliberarea tabelelor de pagini de memorie asociate cu intervalul de adrese eliberat, deoarece în anumite situații, paginile de memorie goale pot ocupa o cantitate semnificativă de memorie.
- Pentru arhitectura OpenRISC, a fost implementat suportul pentru mecanismul de secvențe restartabile (rseq, restartable sequences), destinat executării atomice rapide a operațiunilor care, în cazul întreruperii de către un alt fir, sunt anulată și se încearcă din nou executarea.
- Codul a fost reorganizat cu implementarea algoritmilor CRC32 și CRC-T10DIF, care nu mai interacționează cu subsistemul crypto și sunt apelati direct din interfața de bibliotecă. Această modificare a permis simplificarea codului și îmbunătățirea eficienței acestuia.
- Sistemului de input/output asincron io_uring i-a fost adăugat un interface pentru transmiterea de metadate suplimentare despre integritate în timpul operațiunilor de citire și scriere.
- Virtualizare și securitate
- În apelul de sistem execveat a fost adăugat flag-ul AT_EXECVE_CHECK, care permite verificarea validității execuției unui fișier fără a-l rula efectiv, dar având în vedere politicile de securitate, drepturile de acces și modulele LSM active. Pentru utilizarea în combinație cu AT_EXECVE_CHECK, sunt propuse flag-urile securebit SECBIT_EXEC_RESTRICT_FILE și SECBIT_EXEC_DENY_INTERACTIVE, care pot fi folosite pentru a restricționa execuția fișierelor cu scripturi scrise în limbaje de programare interpretate. Flag-ul SECBIT_EXEC_RESTRICT_FILE impune link-urilor și interpretatorilor să utilizeze opțiunea AT_EXECVE_CHECK pentru a verifica validitatea execuției, iar flag-ul SECBIT_EXEC_DENY_INTERACTIVE interzice procesarea comenzilor interactive. Ideea principală a modificării este de a aplica politicile de securitate nu doar fișierelor executabile tradiționale, ci și fișierelor text cu scripturi care pot fi încărcate prin lansarea interpretatorului (adică interdicția de execuție poate fi implementată nu doar la rularea „./script.sh”, ci și la execuția sub forma „sh script.sh”).
- Pe sistemele x86 a fost implementat suport pentru contoare de timp protejate pentru sistemele virtuale, care nu permit modificarea ceasurilor sistemului virtual din mediu găzduit. Această capacitate a fost realizată pe baza mecanismului AMD SEV (Secure Encrypted Virtualization), utilizat în sistemele de virtualizare pentru protecție. mașini virtuale împotriva intervenției din partea hipervizorului sau a administratorului sistemului gazdă.
- În sistemul de control de acces mandatoriu SELinux a fost adăugată suport pentru reguli xperm, care permit legarea politicilor SELinux la anumite apeluri ioctl() sau mesaje netlink.
- Pentru semnarea modulelor kernel cu o semnătură digitală a fost utilizat algoritmul SHA512 în loc de SHA1, ca setare implicită.
- În driverele pentru sistemele virtuale VirtualBox a fost inclus suport pentru arhitectura ARM64.
- În hipervizor KVM s-a continuat lucrul la implementarea mecanismului Intel TDX (Trusted Domain Extensions) pentru criptarea memoriei sistemelor virtuale.
- În virtio_blk a fost adăugat suport pentru modul de recuperare în caz de eroare.
- Subsystema de rețea
- În implementarea protocolului RxRPC a fost posibilă utilizarea unor cadre UDP mari pentru a crește lățimea de bandă.
- Pentru TCP a fost adăugat suport pentru algoritmul RACK-TLP pentru determinarea pierderii pachetelor.
- A fost adăugat un nou parametru sysctl tcp_tw_reuse_delay, activ în legătură cu spațiul de nume (network namespace) și care permite definirea întârzierii înainte ca sistemul să poată reutiliza numărul portului de rețea după închiderea socket-ului TCP.
- A fost adăugată posibilitatea de a alege un furnizor de timp precis (PTP) pentru formarea timpurilor de marcaj la nivelurile PHY și MAC.
- Pentru IPsec, a fost implementat suportul pentru mecanismul de agregare și fragmentare a pachetelor IP încapsulate — IP-TFS/AGGFRAG (IP Traffic Flow Security/Aggregation and Fragmentation Mode for Encapsulating Security Payload).
- În sistemul de socket-uri de rețea a fost adăugat suportul pentru transmiterea informațiilor de prioritate (SO_PRIORITY) sub formă de mesaje de control (cmsg — control messages). Pentru socket-urile de rețea a fost adăugată opțiunea SO_RCVPRIORITY, care include în funcția recvmsg() transmiterea informațiilor despre prioritatea socket-ului.
- Echipament
- A fost adăugat driverul amdxdna pentru acceleratoarele NPU (Neural Processing Unit) integrate în CPU AMD, bazate pe arhitectura XDNA, destinate accelerării operațiunilor legate de învățarea automată. NPU bazat pe arhitectura XDNA este disponibil în seriile 7040 și 8040 ale procesoarelor AMD Ryzen, acceleratoarele AMD Alveo V70 și SoC AMD Versal.
- În driverul i915 au fost adăugate identificatoare pentru noile GPU-uri, a fost implementat un handler pentru erorile de inițializare HDMI, iar fiabilitatea resetării motoarelor GPU pe sistemele Haswell și mai vechi a fost îmbunătățită.
- A fost continuată lucrările la driverul drm (Direct Rendering Manager) Xe pentru GPU-urile bazate pe arhitectura Intel Xe, care sunt utilizate în plăcile video Intel din familia Arc și în grafică integrată, începând cu procesoarele Tiger Lake.
- În driverul Nouveau a fost adăugată posibilitatea de a transmis buferi cu jurnale GSP-RM prin debugfs.
- În driverul AMDGPU a fost implementat suportul pentru mecanismul DRM panic, care afișează un analog al 'ecranului albastru al morții' în caz de erori. Au continuat pregătirile pentru suportul viitoarei serii de plăci grafice Radeon RX 9000 bazate pe arhitectura RDNA4. Suportul pentru DCN 3.5, GG 9.5, IH 4.4, PSP 13.x, SMU 13.x, VCN 5.x, JPEG 5.x, GC 12.x, DC FAMS, RAS și ISP a fost actualizat.
- În driverul DRM msm (GPU Qualcomm Adreno) a fost adăugat suportul pentru platforma Qualcomm SM6150 (QCS615).
- În driverul DRM panfrost a fost adăugat suportul pentru SoC MediaTek MT8188 cu GPU Mali-G57.
- În driverul DRM vc4 a fost adăugat suportul pentru SoC Broadcom BCM2712 (Raspberry Pi 5).
- În driverul vfio nvgrace-gpu a fost adăugat suportul pentru cipurile NVIDIA Grace Blackwell 200.
- Pachetul include un driver pentru controlerele Intel THC (Touch Host Controller), utilizat pentru interacțiunea cu ecranele tactile și touchpad-urile de pe unele laptopuri. A fost adăugată suport pentru dispozitivele Wacom cu interfața PCI. A fost inclus suport pentru controlerele de jocuri QH Electronics.
- A fost adăugat suport pentru platformele ARM, SoC și dispozitive: Qualcomm Snapdragon 8 Elite (SM8750), Qualcomm Snapdragon AR2 (SAR2130P), Qualcomm IQ6/IQ8, Snapdragon 425 (MSM8917), Samsung Exynos 9810, Blaize BLZP1600, Microchip SAMA7D65, Renesas R-Car V4H ES3.0, Renesas RZ/G3E. A fost adăugat suport pentru SoC SpacemiT K1 bazat pe arhitectura RISC-V.
- În subsistemul audio ALSA pentru MIDI 2.0, API-urile rawmidi și sequencer au fost extinse. În API-ul pentru externalizarea operațiunilor de compresie pe placa de sunet, a fost adăugat suport pentru ASRC (Asynchronous Sample Rate Conversion).
- A fost adăugat suport pentru sistemele de sunet ale dispozitivelor Allwinner suinv F1C100s, Awinc AW88083, Realtek ALC5682I-VE, TAS2781, Focusrite Scarlett 4th Gen 16i16, 18i16 și 18i20. A fost inclus suport pentru căștile wireless SteelSeries Arctis 9.
Sursa: opennet.ro
