Linux 6.14

Linux 6.14

După două luni de dezvoltare, Linus Torvalds a prezentat lansarea nucleului Linux 6.14. Cele mai notabile modificări includ: driverul ntsync cu primitive de sincronizare Windows NT, configurarea echilibrării operațiunilor de citire în Btrfs RAID1, suportul pentru reflink în XFS în modul realtime, posibilitatea de input/output bufferizat ne-cachabil, dmem cgroup pentru limitarea memoriei GPU, utilizarea io_uring în FUSE, delegarea atributelor în NFS, suport pentru scrierea atomică în Device mapper, accelerarea linkurilor simbolice, gestionarea capacității de execuție a scripturilor, suport pentru cipuri Qualcomm Snapdragon 8 Elite, driver pentru NPU AMD.

Noua versiune include 12115 corecții de la 1984 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 au fost șterse 235999 de linii). În versiunea anterioară au fost 14172 corecții de la 2086 dezvoltatori, iar dimensiunea patch-ului era de 46 MB. Aproape 41% din toate modificările din 6.14 sunt legate de driverele de dispozitive, aproximativ 13% se referă la actualizarea codului specific arhitecturii hardware, 14% sunt legate de stiva de rețea, 7% - de sistemele de fișiere și 4% - de subsistemele interne ale nucleului.

Principalele noutăți:

  • Subsistemul de disc, I/O și sistemele de fișiere
    • În sistemul de fișiere Btrfs, a apărut suport pentru noi metode de echilibrare a operațiunilor de citire între dispozitivele incluse în array-ul RAID1. Pe lângă distribuția existentă a sarcinii bazată pe identificatorii proceselor (pid), noua versiune oferă trei noi moduri de echilibrare: „rotation” (distribuția uniformă a sarcinii pe toate dispozitivele, activat implicit); „latency” (distribuția având în vedere întârzierile, utilă în cazul defectelor sau funcționării instabile a dispozitivelor); devid (control manual). Pentru schimbarea modului de echilibrare, adăugat interfața /sys/fs/btrfs//read_policy. Printre alte modificări în Btrfs – specificației CSI prin sidecar-uri nu corespunde acestor cerințe: ioctl FS_IOC_READ_VERITY_METADATA.
    • Adăugat modul de input/output bufferizat ne-cachabil, în care datele sunt șterse din cache-ul paginilor imediat după ce operațiunile de citire sau scriere sunt finalize. Această modificare poate fi utilă atunci când se utilizează dispozitive de stocare foarte rapide, pentru care cache-ul operațiunilor în memoria RAM este redundant. Pentru aceste dispozitive, noul mod permite evitarea consumului excesiv de memorie de către cache-ul de pagini fără a recurge la utilizarea unui API complex de input/output direct (Direct I/O).
    • În fsnotify, mecanismul de urmărire a modificărilor în FS, adăugat evenimentul nou FS_PRE_ACCESS, generat în etapa anterioară accesării conținutului fișierului. Evenimentul este procesat în modul sincron, adică nucleul trimite evenimentul și așteaptă primirea unui răspuns. Dacă răspunsul este primit, operația este executată, iar dacă apare o eroare, apelul sistemului returnează un cod de eroare în spațiul utilizatorului. Prin intermediul FS_PRE_ACCESS, procesul din spațiul utilizatorului poate organiza, de exemplu, completarea fișierului pe măsură ce datele sunt disponibile în stocarea lentă.
    • subsistemul FUSE, care permite crearea de implementări ale sistemelor de fișiere în spațiul utilizatorului, a fost adăugat suport pentru schimbului de date între nucleu și handler în spațiul utilizatorului folosind mecanismul de I/O io_uring. Modificarea permite creșterea performanței FUSE prin reducerea context-switch-urilor între nucleu și spațiul utilizatorului.
    • sistemului de fișiere XFS a fost adăugată posibilitatea utilizarea reverse-mapping (rmap) în modul de funcționare cu întârzieri previzibile („dispozitiv în timp real”). Reverse-mapping permite determinarea pentru care fișier este utilizat un anumit bloc pe dispozitivul de stocare. Prin intermediul rmap, XFS a implementat pentru modul în timp real suport 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 efectivă a acestora.
    • În VFS a fost implementat caching-ul dimensiunilor link-urilor simbolice, permițând o îmbunătățire de 1.5% a execuției operației readlink (în testul cu /initrd.img în ext4). Caching-ul este activat în FS ext4 și tmpfs.
    • În implementarea NFSv4.2 a fost adăugată suport pentru delegarea atributelor fișierelor, care permite gestionarea atributelor fișierelor, cum ar fi timpul de modificare (mtime), pe partea clientului NFS, fără a fi nevoie să se reseteze modificările pe server. De asemenea, în NFS a fost îmbunătățit suportul pentru protocolul „LOCALIO”, care permite determinarea dacă clientul și serverul NFS se află pe același host, pentru a activa optimizările corespunzătoare, cum ar fi utilizarea I/O direct de către client.
    • Îmbunătățită performanța operațiilor de citire în sistemele de fișiere NETFS, CIFS și AFS (Andrew File System).
    • În Squashfs inclus modul de încărcare directă a blocurilor în cache-ul paginilor (SQUASHFS_FILE_DIRECT), care permite evitarea unui cache separat read_page. Modificarea 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țiunile de citire dintr-un fișier.
    • În sistemul de fișiere Bcachefs a fost actualizat și stabilizat formatul structurilor de disc. Orice modificări ulterioare ale formatului vor fi considerate opționale și vor fi implementate sub formă de suplimente opționale. Viteza de verificare a integrității FS a fost semnificativ crescută. În plus, la Bcachefs s-a îmbunătățit funcționarea în modul doar citire; au fost rezolvate problemele care duceau la accesarea memoriei după eliberare (use after free); au fost abordate problemele legate de indicii reflink în fsck; a fost corectată procesarea repornirii tranzacției.
    • Restabilit modul md-linear, destinat combinării dispozitivelor de bloc. Acest modul a fost anterior declarat învechit și eliminat din nucleul 6.8, dar s-a dovedit a fi cerut și, prin urmare, acum a fost recuperat.
    • Sistemele de fișiere F2FS și SQUASHFS au fost transferate la utilizarea folii mari de memorie (pagina folios).
    • În driverul null_blk a fost implementat atributul „rotational”, setat prin configfs și care permite simularea funcționării unui dispozitiv pe bază de discuri rotative pentru simplificarea testării funcțiilor nucleului.
    • În sistemul Device mapper și în modulele dm-mirror, dm-io, dm-table, dm-linear, dm-stripe și dm-raid1 a fost implementată suport pentru scriere atomică.
  • Memorie și servicii de sistem
    • Integrarea în kernel a mecanismului „ integrarea în nucleul driverului ntsync, care implementează dispozitivul simbolic /dev/ntsync și un set de primitive pentru sincronizare, utilizate în nucleul Windows NT. Implementarea acestor primitive la nivelul nucleului permite îmbunătățirea semnificativă a performanței jocurilor Windows care rulează folosind Wine. Creșterea performanței se datorează eliminării cheltuielilor asociate cu utilizarea RPC în spațiul utilizatorului. Crearea unui driver separat pentru nucleul Linux se justifică prin dificultatea implementării corecte a API-ului de sincronizare NT pe baza primitivului existent în nucleu.
    • A fost adăugat un nou controler cgroup DMEM pentru contabilizarea separată a domeniilor de memorie ale dispozitivelor, cum ar fi GPU. DMEM permite crearea de cgroup-uri separate pentru diferite sarcini care lucrează cu GPU, astfel încât acestea să poată rula fără a se influența reciproc. Noua funcționalitate rezolvă problema finalizării forțate a operațiunilor cu GPU atunci când memoria disponibilă este epuizată, datorită contabilizării memoriei reflectate GPU și a memoriei CPU utilizate de drivere în cgroup-uri separate.
    • Au fost aduse optimizări pentru scalarea operațiunii de resetare (flush) a cache-ului TLB (Translation Lookaside Buffer), utilizat pentru accelerarea conversiei adreselor virtuale în fizice. Optimizarile adăugate constau în actualizarea întârziată a unor structuri de date în timpul comutării contextului, ceea ce permite îmbunătățirea performanței în timpul parcurgerii unor teste.
    • Îmbunătățită performanța mecanismului MGLRU (Multi-Generational LRU), utilizat pentru a determina care pagini de memorie sunt utilizate și care pot fi evacuate în zona de swap.
    • Continuat transferul modificărilor din ramura Rust-for-Linux, legate de utilizarea limbajului Rust ca al doilea limbaj pentru dezvoltarea driverelor și modulelor kernel (suportul Rust nu este activat implicit și nu duce la includerea Rust în lista dependențelor obligatorii pentru compilarea kernel-ului). A fost oferită posibilitatea de a utiliza în codul kernel-ului macro-ul "derive(CoercePointee)", care permite utilizarea ptr-urilor inteligente cu obiectele trait. În cadrul kernel-ului sunt incluse legăturile Rust pentru PCI, platforme, Open Firmware, dispozitive simbolice și unele funcții de intrare/ieșire. Greg Kroah-Hartman, responsabil cu suportul ramurii stabile a kernel-ului Linux, a caracterizat starea actuală ca fiind "aproape gata pentru scrierea unui driver real în Rust".
    • În scenariile de compilare sub licența MIT. Instrumentul utilizează metode de învățare automată, împreună cu analiza statică și dinamică a codului JavaScript. Se afirmă că utilizarea învățării automate a permis îmbunătățirea semnificativă a preciziei în identificarea codului pentru identificarea ascunsă și a identificat cu 26% mai multe scripturi problematice un nou cod pentru generarea versiunilor simbolurilor de depanare pentru modulele încărcabile, care acum utilizează informații din înregistrările de depanare în format DWARF, nu analizează direct codul sursă. Modificarea permite aplicarea versiilor simbolurilor de depanare pentru modulele scrise în limbajul Rust. Implementarea veche este, de asemenea, păstrată în kernel, iar alegerea generatorului se face la nivelul opțiunilor de compilare.
    • Pentru arhitectura PowerPC a fost implementată suport pentru modul de preemțiune leneșă a sarcinilor (PREEMPT_LAZY, preemțiune leneșă), care corespunde modului de preemțiune completă („full preemption”) pentru sarcini în timp real (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 consum de energie ale procesorului AMD. Adăugat posibilitatea de a opera pe sisteme cu până la 2048 de nuclee CPU.
    • A fost adăugată posibilitatea de a folosi parametrii 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 acum poate fi folosit pentru a limita numărul maxim de procese care pot fi rulate în spațiul de nume specificat. Tratarea parametrului se face ierarhic, adică restricțiile din spațiile de nume externe se aplică și spațiilor de nume încorporate.
    • Când este utilizată pentru a lansa un proces sistemul de apel de execveat în sistemul de fișiere /proc acum va afișa numele fișierului lansat, nu numărul descriptorului de fișier.
    • În codul sursă al nucleului (în directorul samples) a fost adaugată utilitarul mountinfo, care demonstrează utilizarea apelurilor sistemului statmount() și listmount().
    • În subsistemul BPF sunt oferite noi funcții bpf_local_irq_save() și bpf_local_irq_restore() pentru a dezactiva temporar întreruperile pe CPU-ul local. Funcțiile pot fi folosite pentru a implementa structuri a căror procesare nu este întreruptă.
    • În apelul sistemului madvise() când se folosesc flag-urile MADV_DONTNEED și MADV_FREE asigurat eliberarea tabelelor de pagini de memorie asociate cu intervalul de adrese eliberat, deoarece în anumite situații paginile de memorie goale pot ocupa destul de multă memorie.
    • Pentru arhitectura OpenRISC a fost implementat suportul pentru mecanismul secvențelor reîncărcabile (rseq, restartable sequences), destinat pentru a executa rapid operațiuni atomice, care, în cazul întreruperii de către un alt fir, sunt curățate și se reîncercă 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.
    • În sistemul de intrare/ieșire asincron io_uring adăugat interfață pentru a transmite metadate suplimentare despre integritatea în timpul operațiunilor de citire și scriere.
  • Virtualizare și securitate
    • În apelul sistemic execveat adăugat flag-ul AT_EXECVE_CHECK, care permite efectuarea verificării posibilitățile de execuție a fișierului fără a-l lansa efectiv, dar având în vedere politicile de securitate, drepturile de acces și modulele LSM active. Pentru utilizarea împreună cu AT_EXECVE_CHECK, sunt propuse steagurile securebit SECBIT_EXEC_RESTRICT_FILE și SECBIT_EXEC_DENY_INTERACTIVE, care pot fi folosite pentru a restricționa execuția fișierelor cu scripturi în limbaje de programare interpretate. Steagul SECBIT_EXEC_RESTRICT_FILE impune legătorilor și interpreților să folosească opțiunea AT_EXECVE_CHECK pentru a verifica posibilitatea execuției, iar steagul SECBIT_EXEC_DENY_INTERACTIVE interzice procesarea comenzilor interactive. Ideea principală a modificării este capacitatea de aplicare a politicilor de securitate nu doar la fișierele executabile tradiționale, ci și la fișierele text cu scripturi care pot fi încărcate prin lansarea interpretului (de exemplu, interdicția de execuție poate fi implementată nu doar prin rularea „./script.sh” ci și prin executarea în formă „sh script.sh”).
    • Pe sistemele x86 este implementat suportul pentru contoare de timp protejate pentru sistemele guest, care nu permit modificarea ceasului sistemului guest din mediul host. Această capacitate este realizată pe baza mecanismului AMD SEV (Secure Encrypted Virtualization), utilizat în sistemele de virtualizare pentru a proteja mașinile virtuale de intervenții din partea hypervisor-ului sau a administratorului sistemului host.
    • În sistemul de control de acces mandatar SELinux a fost adăugată suport pentru regulile xperm, care permit legarea politicilor SELinux la apeluri specifice ioctl() sau mesaje netlink.
    • Pentru semnarea modulelor kernel cu o semnătură digitală, algoritmul implicit este a fost utilizat algoritmul SHA512.
    • În driverele pentru sistemele guest VirtualBox sistemul de compozitare suport pentru arhitectura ARM64.
    • În hypervisorul KVM a fost continuată la folosind mecanismul Intel TDX (Trusted Domain Extensions) pentru criptarea memoriei sistemelor guest.
    • În virtio_blk a fost adăugată suport pentru modul de recuperare a erorilor.
  • Subsystema de rețea
    • În implementarea protocolului RxRPC a apărut posibilitatea utilizării cadrelor mari UDP pentru creșterea capacității de transmisie.
    • Pentru TCP, a fost adăugat suport pentru algoritmul RACK-TLP pentru determinarea pierderii de pachete.
    • Adăugat un nou parametru sysctl tcp_tw_reuse_delay, care acționează în legătură cu spațiul de nume (network namespace) și permite definirea întârzierii înainte ca sistemul să poată reutiliza numărul portului de rețea după închiderea socket-ului TCP.
    • Adăugat posibilitatea de a alege un furnizor de timp precis (PTP) pentru generarea de timpi la nivelurile PHY și MAC.
    • Pentru IPsec a fost implementată suport pentru mecanismul de agregare și fragmentare a pachetelor IP încapsulate – IP-TFS/AGGFRAG (IP Traffic Flow Security/Mode de Agregare și Fragmentare pentru Încapsularea Sarcinii de Securitate).
    • În sistemul de socket-uri de rețea a fost adăugată suport pentru transmiterea informațiilor despre 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
    • Adăugat un motor amdxdna pentru acceleratoarele NPU (Unitate de Procesare Neurală) integrate în CPU AMD pe baza arhitecturii XDNA, destinate accelerării operațiunilor legate de învățarea automată. NPU pe baza arhitecturii 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 identificatorii noilor GPU, a fost implementat un handler pentru erorile de inițializare HDMI, fiabilitatea resetării motoarelor GPU a fost crescută pe sistemele Haswell și cele anterioare.
    • Continuarea lucrările la driverul drm (Direct Rendering Manager) Xe pentru GPU pe baza arhitecturii Intel Xe, utilizată în plăcile video Intel din familia Arc și grafica 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 mesaj similar „ecranului albastru al morții” în cazul erorilor. S-a continuat pregătirea pentru suportul viitoarelor serii de plăci grafice Radeon RX 9000 pe baza arhitecturii 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ă suport pentru cipurile NVIDIA Grace Blackwell 200.
    • Include inclus driver pentru controlerele Intel THC (Touch Host Controller), folosit pentru interacțiunea cu ecranele tactile și touchpad-urile pe unele laptopuri. A fost adăugat suport pentru dispozitivele Wacom cu interfață PCI. Adăugat suport pentru controlerele de jocuri QH Electronics.
    • Adăugat suport pentru platfome ARM, SoC-uri ș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. Suportul pentru SoC SpacemiT K1 pe baza arhitecturii RISC-V.
    • În subsistemul audio ALSA pentru MIDI 2.0 extinse API rawmidi și sequencer. În API-ul pentru externalizarea operațiunilor de compresie pe placa de sunet a fost adăugat suport pentru ASRC (Conversia Asincronă a Frecvenței de Eșantionare).
    • A fost adăugat suport pentru sistemele audio ale dispozitivelor Allwinner suinv F1C100s, Awinc AW88083, Realtek ALC5682I-VE, TAS2781, Focusrite Scarlett 4th Gen 16i16, 18i16 și 18i20. Adăugat suport pentru căștile wireless SteelSeries Arctis 9.

Sursa: linux.org.ru

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster