Lansarea kernelului Linux 7.0

După două luni de dezvoltare, Linus Torvalds a prezentat lansarea nucleului Linux 7.0. Printre cele mai notabile schimbări se numără: reguli de aplicare a asistenților AI, includerea Rust în funcțiile de bază ale nucleului, îmbunătățirea performanței memoriei swap, activarea implicită a modului PREEMPT_LAZY, suport pentru filtre în operațiile io_uring, noul sistem de fișiere Nullfs, infrastructura fserror, instrumente de monitorizare XFS, suport pentru remapare în Btrfs, activarea implicită a versiunii NFS 4.1, integrarea algoritmului criptografic post-quantum ML-DSA și activarea AccECN în subsistemul de rețea, precum și suport inițial pentru WiFi 8.

Numărul 7.0 a fost atribuit deoarece în ramura 6.x s-au acumulat suficiente versiuni pentru a schimba prima cifră a numărului de versiune (la acel moment, versiunea 6.0 a fost generată după 5.19). Schimbarea numerotării se face din motive estetice și reprezintă un pas formal, eliminând disconfortul generat de acumularea unui număr mare de versiuni în serie.

Noua versiune conține 15624 de corecturi de la 2477 de dezvoltatori, mărimea patch-ului fiind de 56 MB (modificările au afectat 18053 de fișiere, au fost adăugate 704060 de linii de cod și eliminate 278132 de linii). În lansarea anterioară, au fost 15657 de corecturi de la 2237 de dezvoltatori, iar mărimea patch-ului era de 52 MB. Aproximativ 51% din toate modificările aduse în 7.0 sunt legate de driverele de dispozitive, aproximativ 11% se referă la actualizarea codului specific arhitecturilor hardware, 14% la stiva de rețea, 5% la sistemele de fișiere și 3% la subsistemele interne ale nucleului.

Inovațiile principale din nucleul 7.0 (1, 2, 3):

  • Subsistemul de disc, I/O și sistemele de fișiere
    • A fost implementată infrastructura fserror și a fost adăugat un API pentru obținerea informațiilor despre erorile de intrare/ieșire și deteriorarea metadatelor în timpul lucrului cu fișiere. Infrastructura propusă unifică în sistemele de fișiere transmiterea informațiilor despre erori către spațiul utilizatorului prin mecanismul fsnotify.
    • În XFS au fost adăugate noi funcționalități pentru monitorizarea stării sistemului de fișiere din spațiul utilizatorului. A fost propusă operația ioctl XFS_IOC_HEALTH_MONITOR, care returnează un descriptor de fișier prin intermediul căruia se pot obține informații despre erori legate de deteriorarea metadatelor sau apariția erorilor în operațiile de intrare/ieșire, precum și pentru a urmări schimbările de stări ale FS, cum ar fi demontarea și închiderea. În plus, a fost propus un proces în fundal gestionat prin systemd, numit xfs_healer, care procesează evenimentele de stare FS din spațiul utilizatorului și lansează automat proceduri de recuperare, dacă este necesar.
    • În sistemul de fișiere Btrfs a fost adăugată o suport experimental pentru structura «arbore de remapare» (remap tree), care în viitor ar putea fi utilizată ca un strat intermediar în efectuarea operațiunilor de intrare-ieșire. Esența acestei funcționalități adăugate constă în faptul că, după mutarea datelor pe suport, în loc de actualizarea tuturor structurilor asociate cu aceste date, în structura suplimentară «remap tree» sunt salvate adresele vechi și noi ale datelor, după care, la accesarea datelor, adresele sunt înlocuite. Noua abordare este prezentată ca fiind mai fiabilă și flexibilă, simplificând în același timp extinderea ulterioară a funcționalității Btrfs.
    • În Btrfs a fost implementat suport pentru intrare/ieșire directă în situații în care dimensiunea blocului depășește dimensiunea paginii de memorie din sistem.
    • A fost inclus un nou sistem de fișiere «Nullfs», care poate fi folosit ca un substitut pentru sistemul de fișiere rădăcină. Sistemul de fișiere Nullfs este mereu gol, nu conține date și nu suportă modificări. Scopul Nullfs este de a fi utilizat ca sistem de fișiere inițial pentru simplificarea procesului de încărcare a sistemului — deasupra Nullfs sunt apoi montate alte sisteme de fișiere și se utilizează apelul de sistem pivot_root() pentru a comuta sistemul de fișiere rădăcină, în loc de a curăța conținutul initramfs și de a folosi sistemul de fișiere rădăcină asociat.
    • A fost implementată actualizarea informațiilor despre timpul de modificare a fișierelor în mod neblocat. Anterior, apelul file_update_time_flags() cu flag-ul IOCB_NOWAIT returna eroarea «-EAGAIN», ceea ce împiedica utilizarea operațiunilor de scriere directă în mod neblocat.
    • În sistemele de fișiere, a fost mutat în categoria opțiunilor separate suportul pentru blocajele de notificare (lease). În mod implicit, acest mecanism nu este activat din cauza problemelor cu sisteme de fișiere care, inițial, nu au fost concepute pentru utilizarea sa. De exemplu, sistemele de fișiere 9p și cephfs nu îl suportă.
    • În sistemul de fișiere EROFS (Extendable Read-Only File System), destinat utilizării pe partiții accesibile în modul doar citire, pentru comprimare este folosit, în mod implicit, algoritmul LZMA. Algoritmii DEFLATE și Zstandard sunt disponibili opțional, care nu mai sunt marcați ca fiind experimenali. A fost implementată partajarea înregistrărilor în cache-ul paginilor (page-cache) pentru fișiere identice în diferite sisteme de fișiere EROFS.
    • Modul laptop_mode, care economisea consumul de energie prin amânarea și combinarea operațiunilor de scriere pe hard disk pentru a prelungi timpul de inactivitate al acestuia și a reduce numărul de treziri, a fost eliminat. Modul nu mai este relevant, având în vedere că în dispozitivele mobile moderne hard disk-urile au fost înlocuite de unități SSD.
    • Sistemul de fișiere F2FS a fost adaptat pentru a utiliza folii mari de pagini de memorie (large folios).
    • A fost reluată dezvoltarea driverului ntfs3, dezvoltat de Paragon Software. A fost adăugată suportul pentru operațiunile cu fișiere bazate pe iomap, implementate opțiunile llseek SEEK_DATA/SEEK_HOLE, a fost adăugat modul delalloc pentru alocarea întârziată a blocurilor. Între timp, pe lista de discuții a dezvoltatorilor de kernel s-a aprobat în februarie includerea unei noi implementări NTFS - ntfsplus, dezvoltată pentru a înlocui ntfs3, în viitoarele versiuni ale kernelului.
    • Versiunea protocolului NFS 4.1 (CONFIG_NFS_V4_1) este activată implicit la compilare. A fost asigurată blocarea exportului prin NFS pentru sisteme de fișiere pseudo-specializate, cum ar fi pidfs și nsfs. A fost implementată o funcționalitate experimentală în NFSD pentru utilizarea ACL-urilor POSIX și a fost adăugată suport pentru modificarea dinamică a grupului de fire (thread-pool) în funcție de încărcătură.
  • Memorie și servicii de sistem
    • Regulile oficiale pentru utilizarea asistenților AI și includerea conținutului generat automat în kernel au fost aprobate. La transmiterea codului generat, se preconizează marcarea sa prin indicarea asistentului AI utilizat prin eticheta „Assisted-by”. Asistenții AI nu au voie să adauge eticheta „Signed-off-by” - persoana care a trimis patch-ul este considerată autorul său, asumându-și responsabilitatea pentru modificarea trimisă și garantând calitatea acesteia. Dezvoltatorii sunt obligați să efectueze revizuiri manuale ale codului obținut prin AI și să verifice conformitatea rezultatului cu cerințele de licențiere.
    • Suportul pentru Rust a fost transferat din funcționalitățile experimentale în cele de bază ale kernelului. Suportul pentru Rust nu este activat implicit și nu contează ca parte a dependențelor de compilare necesare pentru kernel.
    • Integrarea în nucleul mecanismului „Swap Table” a fost finalizată, permițând creșterea performanței de swapping. Accelerarea este obținută prin reducerea concurenței pentru accesul la cache-ul de swapping, cercetarea mai eficientă în cache și reducerea fragmentării. Backendul bazat pe Swap Table este utilizat pentru cache-ul de swapping în locul backendului XArray și a permis în testul redis-benchmark cu BGSAVE creșterea numărului de cereri procesate cu 22%.
    • A fost adăugat suport pentru extinderea Thread Safety Analysis apărută în Clang 22, care permite identificarea stărilor de competiție potențiale și a erorilor cauzate de setarea incorectă a blocărilor în timpul compilării. Extinderea oferă o serie de atribute, cum ar fi GUARDED_BY(…), REQUIRES(…), RELEASE(…) și ACQUIRE(…), care permit marcarea funcțiilor acoperite de blocări și separarea domeniilor de aplicare a blocărilor (definirea contextului). În timpul compilării se efectuează o verificare a corectitudinii aplicării primitivele de sincronizare, cum ar fi mutexurile, pe baza evaluării activității sau inactivității contextului asociat.
    • În apelul de sistem open_tree a fost adăugat un flag OPEN_TREE_NAMESPACE pentru simplificarea configurării containerelor izolate și accelerarea lansării containerelor pe sistemele cu un mare număr de puncte de montare. La fel ca OPEN_TREE_CLONE, noul flag copiază doar arborele specificat de puncte de montare (mount tree), dar în loc de un descriptor de fișier local returnează un descriptor de fișier în noul spațiu de nume al punctelor de montare, în care arborele copiat este montat deasupra copiei sistemului de fișiere rădăcină reale. Flagul OPEN_TREE_NAMESPACE este cerut pentru a evita executarea separată a operațiunilor unshare(CLONE_NEWNS) și pivot_root() aplicate la crearea containerelor.
    • În apelul de sistem rseq a fost adăugat un mecanism de extindere a feliilor de timp (time slice), permițând obținerea unui timp suplimentar de procesor pentru execuția neîntreruptă a secțiunii critice. Ideea este de a evita întreruperea secțiunii critice cu blocaj activată de către planificatorul de sarcini, care duce la transferul controlului către alte fire care folosesc resursa, pe care rămâne activată blocarea. Extinderea feliilor de timp se face fără costuri suplimentare, dar fără garanții stricte oferite de reglementarea completă a prioritatei.
    • Pentru arhitecturile arm64, loongarch, powerpc, riscv, s390 și x86, modul de preempție al sarcinilor în planificatorul implicit a fost modificat din PREEMPT_NONE în PREEMPT_LAZY. Numărul de moduri posibile a fost redus de la patru la două — PREEMPT_FULL și PREEMPT_LAZY (modurile PREEMPT_NONE și PREEMPT_VOLUNTARY sunt păstrate doar pentru arhitecturile care nu suportă PREEMPT_FULL și PREEMPT_LAZY). Modul PREEMPT_LAZY aplică modelul de completă preempție (PREEMPT_FULL) pentru sarcinile realtime (RR/FIFO/DEADLINE), dar întârzie preempția sarcinilor obișnuite (SCHED_NORMAL) până la limita tic-tac-ului. Întârzierea introdusă duce la o reducere a cazurilor de preempție a deținătorilor de blocări, permițând apropierea performanței de configurațiile care utilizează modelul de preempție voluntară, adică PREEMPT_LAZY permite menținerea capacităților de completă preempție în raport cu sarcinile realtime, dar minimizează scăderea performanței pentru sarcinile obișnuite.

      Activarea PREEMPT_LAZY a dus la o regresie severă, reducând performanța PostgreSQL cu 50% pe sistemele ARM64. Pentru a remedia scăderea performanței, dezvoltatorii PostgreSQL au fost sfătuiți să activeze opțiunea PR_RSEQ_SLICE_EXTENSION pentru a reduce probabilitatea de preempție a deținătorului de blocare.

    • Continuă transferul modificărilor din ramura Rust-for-Linux, legate de utilizarea limbajului Rust ca al doilea limbaj pentru dezvoltarea driverelor și modulelor kernel. Datorită bibliotecii anterioare integrate „syn”, care facilitează scrierea de macro-uri complexe, a fost posibilă reducerea dimensiunii codului Rust în kernel prin simplificarea definițiilor macro-urilor procedurale existente. Capacitățile bibliotecilor kernel, macros și pin-init au fost extinse.
    • În sistemul de intrare/ieșire asincron io_uring a fost adăugată opțiunea de a utiliza cozi de trimitere non-circulare (non-circular submission queue), care sunt mai eficient cache-uibile în situații în care execuția unei cereri se finalizează înainte de returnarea din apelul sistemului.
    • În subsistemul eBPF, în mecanismul BTF (BPF Type Format), care furnizează informații pentru verificarea tipurilor în pseudocodul BPF, pentru căutarea informațiilor de depanare a fost utilizată căutarea binară, ceea ce a crescut eficiența încărcării programelor BPF. În eBPF a fost adăugată suport pentru argumente implicite la apelul kfunc (funcții kernel disponibile pentru utilizare în programele BPF), definite cu flag-ul KF_IMPLICIT_ARGS.
    • Codul de suport pentru RAM disk inițial (initrd) bazat pe linuxrc a fost eliminat, fiind declarat învechit de mult timp. Implementările rămase ale initrd sunt planificate pentru eliminare în 2027. În loc de initrd, se recomandă utilizarea initramfs (diferența constă în faptul că initrd plasează mediul inițial de boot într-o imagine de disc, pe când initramfs îl plasează în sistemul de fișiere).
    • În dispozitivul de bloc zram, utilizat pentru stocarea comprimată a secțiunii de swap în memorie, a fost modificată logica de gestionare a paginilor de memorie comprimate în cazul opțional al mutării datelor în stocare permanentă în cazul umplerii memoriei RAM disponibile. Anterior, paginile de memorie erau decompresate înainte de a fi scrise pe suportul fizic, dar acum sunt păstrate așa cum sunt, în formă comprimată, ceea ce reduce încărcătura pe CPU și economisește energie în modul autonom.
    • În utilitarul timerlat, destinat măsurării întârzierilor în activitatea planificatorului de sarcini, a fost adăugată opțiunea „—bpf-action” pentru a rula programe BPF în caz de depășire a pragului prestabilit.
    • În sistemul de trasare ftrace a fost adăugată configurația „bitmask-list” pentru a afișa măștile de biți într-un format lizibil (sub formă de listă de biți, nu număr hexazecimal). În tracefs, au fost adăugate funcții pentru auditarea filtrilor și declanșatoarelor. A fost adăugată comanda „perf sched stats” pentru a colecta și a afișa statistici privind activitatea planificatorului de sarcini.
    • Au fost adăugate opțiuni de compilare LOGO_LINUX_MONO_FILE, LOGO_LINUX_VGA16_FILE și LOGO_LINUX_CLUT224_FILE pentru a defini fișierul cu imaginea logo-ului care va fi afișată la bootarea nucleului, în loc de logo-ul standard cu pinguinul Tux.
  • Virtualizare și securitate
    • În sistemul de intrare/ieșire asincronă io_uring, a fost implementată posibilitatea de a atașa programe BPF cu filtre care controlează ce pot face operațiile SQE (Submission Queue Entry) specifice (similar apelurilor de sistem din io_uring). Funcționalitatea adăugată este echivalentă cu filtrele apelurilor de sistem. Filtrele pot fi atașate la sarcini specifice și sunt moștenite la crearea altor procese după apelul fork(). Atunci când filtrele active sunt prezente, filtrele adăugate ulterior pot doar să impună restricții suplimentare, fără a dezactiva cele existente. Implementarea acestei funcționalități va permite blocarea metodelor de ocolire a filtrării apelurilor de sistem în medii sandbox bazate pe executarea unor operații similare în locul apelurilor de sistem, disponibile în io_uring.
    • În SELinux a fost adăugată posibilitatea de a gestiona accesul la tokenii BPF, permițând proceselor neprivilegiate să efectueze anumite operațiuni privilegiate cu BPF, cum ar fi încărcarea programelor BPF în kernel și crearea de structuri map.
    • A fost adăugată suportul pentru algoritmul de generare a semnăturilor digitale ML-DSA (CRYSTALS-Dilithium), bazat pe teoria grilelor și rezistent la atacuri pe computere cuantice. S-a oferit posibilitatea utilizării ML-DSA pentru autentificarea modulelor kernel.
    • A fost eliminată posibilitatea utilizării schemelor de generare a semnăturilor digitale cu algoritmul SHA-1 pentru certificarea modulelor kernel (suportul pentru încărcarea modulelor semnate a fost păstrat).
    • În înregistrarea auditului NETFILTER_PKT au fost adăugate câmpurile ‘sport’ și ‘dport’ pentru inspectarea numerelor de porturi de rețea, nu doar a acestora. adreselor IP.
    • Pentru sistemele cu arhitectură RISC-V a fost implementat suportul pentru extensiile Zicfiss și Zicfilp, care oferă capacități hardware pentru aplicarea protecției CFI (Control Flow Integrity), blocând încălcările ordinii normale de execuție a instrucțiunilor (control flow) ca urmare a exploatărilor care modifică pointerele funcțiilor stocate în memorie.
    • În hipervizor KVM a fost implementată posibilitatea de a transmite către sistemele gazdă informații despre suportul procesorului pentru extensia ERAPS (Enhanced Return Address Predictor Security), permițând evitarea unor operațiuni de resetare a stării CPU la revenirea controlului gazdei de către sistemul oaspete. De asemenea, s-a adăugat suportul pentru alocarea echipamentelor pentru sistemele oaspete pentru monitorizarea performanței (PMU, Performance Monitoring Unit), ceea ce permite îmbunătățirea preciziei profilării comparativ cu utilizarea PMU emulabile.
    • În driverul pentru hipervizorul Hyper-V a fost adăugată suportul pentru interfața debugfs pentru vizualizarea statisticilor despre activitatea hipervizorului.
  • Subsystema de rețea
    • Extension AccECN (Accurate Explicit Congestion Notification) is enabled by default, implementing an enhanced version of the ECN extension, which allows hosts to mark IP packets instead of dropping them in case of congestion. This enables the identification of the onset of congestion in communication channels without packet loss. The original ECN extension has a limitation that permits only one congestion signal within a single TCP round-trip time (RTT). AccECN removes this limitation and allows the receiver to send more than one congestion mark to the sender in the TCP packet header. Congestion control algorithms can use the received information for more precise responses to congestion without resorting to drastic reductions in packet transmission during minor congestion.
    • The Cake queuing algorithm implementation has added support for handling multiple queues to distribute the load across several CPU cores. The CAKE algorithm is used to reduce the negative impact of intermediate packet buffering on boundary network equipment and aims to achieve the highest possible throughput and minimal latency, even on slow communication channels.
    • Support for network namespaces has been added to VSOCK sockets, which are used for interaction with virtual machines.
    • An initial implementation of the upcoming WiFi 8 standard (802.11bn, Ultra High Reliability WiFi) has been added.
    • Optimizations have been added that increased the performance of incoming UDP packet processing by 12% during stress testing in a 100-gigabit network.
  • Echipament
    • The AMDGPU driver has implemented support for IP blocks used in new AMD GPUs, such as SMUIO 15.x, PSP 15.x, IH 6.1.1/7.1, MMHUB 3.4/4.2, GC 11.5.4/12.1, SDMA 6.1.4/7.1/7.11.4, and JPEG 5.3.
    • În driverul Nouveau a fost îmbunătățită gestionarea frecvenței pe sistemele Tegra 186+.
    • The i915 driver has added initial support for the Xe3p_LPD display IP block used in Intel Nova Lake-P processors.
    • A fost continuată lucrul la driverul drm (Direct Rendering Manager) Xe pentru GPU-uri bazate pe arhitectura Intel Xe, folosit în plăcile grafice Intel din familia Arc și în grafica integrată, începând cu procesoarele Tiger Lake. A fost adăugat modul Multi Queue. Au fost adăugate componente necesare pentru diagnosticarea blocărilor GPU în Mesa. A fost adăugată suportul pentru mecanismul MERT pentru gestionarea accesului la memoria GPU.
    • A fost continuată integrarea componentelor driverului Nova pentru GPU-urile NVIDIA echipate cu firmware GSP utilizate începând cu seria NVIDIA GeForce RTX 2000 bazată pe microarhitectura Turing. Driverul este scris în limbajul Rust. În noua versiune s-au făcut pregătiri pentru implementarea suportului GPU bazat pe microarhitectura Turing și au fost aduse diverse modificări interne.
    • A fost adăugată suportul pentru controlere și dispozitive periferice cu interfață multipunct SPI (Serial Peripheral Interface), permițând transferul de date prin mai multe fluxuri paralele.
    • A fost adăugat driverul pentru conectorii combinați Type-C, utilizați pe dispozitivele cu cipuri Apple Silicon, care combină interfețele USB3, DP-AltMode și Thunderbolt/USB4.
    • A fost adăugată suportul pentru subsistemele audio ale chip-urilor Tegra238, Minisforum V3 SE, iBasso DC04U, Intel Nova Lake, Nova Lake S și Focusrite Forte.
    • A fost adăugată suportul pentru platformele ARM, SoC-uri și dispozitive: Arduino UnoQ, OrangePi 6 Plus, OrangePi CM5, Anbernic RG-DS, Realtek Kent, Qualcomm Kaanapali, Mediatek Ezurio, Facebook Anacapa, Microchip LAN9668, Khadas VIM1S, QNAP TS133, i.MX952, i.MX93, i.MX94, VHIP4 EvalBoard, TQ-Systems MBLS1028A, Agilex5, Radxa CM3J, Glymur.
    • S-a adăugat suport pentru smartphone-uri și tablete: Fairphone Gen 6 (SoC Qualcomm Milos/Snapdragon 7s Gen 3), Pixel 3/3 xl, Microsoft Surface Pro 11.

Între timp, Fundația pentru Software Liber din America Latină a creat o variantă complet liberă a nucleului 7.0 — Linux-libre 7.0-gnu, curățată de elemente de firmware și drivere ce conțin componente sau părți de cod nevoind, a căror utilizare este restricționată de către producător. În versiunea 7.0 a fost efectuată curățarea de blob-urile driverului iwlwifi. Codul de curățare în driverele amdgpu, adreno, TI PRUeth, air_en8811h, ath12k, TI VPE, rtw8852b, rt1320, rt5575 SPI, tas2783, Intel catpt a fost actualizat. Au fost curățate numele blob-urilor în fișierele dts (devicetree) pentru chip-urile ARM.

Sursa: opennet.ro

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