Linux 7.0

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ă: regulile de utilizare a asistenților AI, includerea Rust în funcționalitățile de bază ale nucleului, îmbunătățirea performanței swapping-ului, activarea în mod implicit a modului PREEMPT_LAZY, suportul pentru filtre în operațiuni io_uring, noul sistem de fișiere Nullfs, infrastructura fserror, instrumente de monitorizare XFS, suport pentru remaparea în Btrfs, activarea în mod implicit a versiunii NFS 4.1, integrarea algoritmului de criptare post-cuantic ML-DSA, activarea AccECN în subsistemul de rețea, 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.

În noua versiune au fost incluse 15624 de corecții de la 2477 de dezvoltatori, dimensiunea patch-ului fiind de 56 MB (modificările au afectat 18053 de fișiere, s-au adăugat 704060 de linii de cod, au fost șterse 278132 de linii). În versiunea anterioară au fost incluse 15657 de corecții de la 2237 de dezvoltatori, dimensiunea patch-ului fiind de 52 MB. Aproximativ 51% din toate modificările prezentate în 7.0 sunt legate de driverele de dispozitive, aproximativ 11% din modificări sunt legate de actualizarea codului specific arhitecturilor hardware, 14% sunt legate de stiva de rețea, 5% de sistemele de fișiere și 3% de subsistemele interne ale nucleului.

Principalele noutăți în nucleul 7.0 (kernelnewbies.org, lwn.net, OpenNET):

  • Subsistemul de disc, I/O și sistemele de fișiere
    • A fost implementată infrastructura fserror și adăugat API pentru obținerea informațiilor despre erorile de I/O și deteriorarea metadatelor la lucrul cu fișiere. Infrastructura propusă unify transferul informațiilor despre erori în sistemele de fișiere în 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ă o operație ioctl XFS_IOC_HEALTH_MONITOR, care returnează un descriptor de fișier prin care pot fi obtinute informații despre defecțiunile legate de deteriorarea metadatelor sau apariția de erori la I/O, precum și monitorizarea schimbării stărilor FS, cum ar fi demontarea și oprirea. În plus, a fost propus un proces de fundal gestionat prin systemd, xfs_healer, care gestionează evenimentele de stare ale FS din spațiul utilizatorului și, dacă este necesar, îl pornește automat. proceduri de recuperare.
    • În sistemul de fișiere Btrfs a fost adăugată suport experimental pentru structura „arbore de remapare” (arbore remapare), care poate fi utilizată în viitor ca un strat intermediar în timpul operațiunilor de intrare-ieșire. Esența acestei funcționalități adăugate este că, după relocarea datelor pe dispozitiv, în loc de actualizarea tuturor structurilor asociate acestor date, în structura suplimentară „arbore de remapare” sunt păstrate adresele vechi și noi ale datelor, după care, la accesarea datelor, adresele sunt înlocuite. Noua abordare este prezentată ca fiind mai fiabilă și mai flexibilă, facilitând, de asemenea, extinderea ulterioară a funcționalităților Btrfs.
    • În Btrfs a fost implementată suport direct pentru intrare-ieșire în situații în care dimensiunea blocului depășește dimensiunea paginii de memorie din sistem.
    • Include sistemul de compozitare un nou sistem de fișiere Nullfs, care poate fi utilizat ca un placeholder pentru sistemul de fișiere rădăcină. Sistemul de fișiere Nullfs este întotdeauna gol, nu conține date și nu suportă modificări. Scopul Nullfs este utilizarea ca FS inițial pentru a simplifica procesul de bootare a sistemului – deasupra Nullfs sunt apoi montate alte FS-uri, iar apelul de sistem pivot_root() este utilizat pentru a schimba sistemul de fișiere rădăcină în loc să se curețe conținutul initramfs și să se utilizeze sistemul de fișiere rădăcină asociat.
    • Implementat actualizarea informațiilor despre timpul de modificare a fișierelor în mod neblocat. Anterior, apelul file_update_time_flags() cu flagul IOCB_NOWAIT returna o eroare -EAGAIN, ceea ce împiedica utilizarea operațiunilor de scriere direct în mod neblocat.
    • În sistemele de fișiere, în categoria opțiunilor inclusă separat transformată suport pentru blocările de notificare (leasing). În mod implicit, acest mecanism nu este acum activat din cauza problemelor cu sistemele de fișiere care inițial nu erau concepute pentru aplicarea acestuia. De exemplu, nu este suportat de sistemele de fișiere 9p și cephfs.
    • În sistemul de fișiere EROFS (Extendable Read-Only File System), destinat utilizării pe partiții accesibile în modul doar citire, algoritmul LZMA este folosit implicit pentru comprimare. Algoritmii DEFLATE și Zstandard sunt disponibili opțional și nu mai sunt marcați ca experimentali. A fost implementată partajarea înregistrărilor în cache-ul pe pagină (page-cache) pentru fișiere identice în diferite FS EROFS.
    • Eliminat modulul laptop_mode, economisind energie prin amânarea și combinarea operațiunilor de scriere pe hard disk pentru a prelungi timpul de funcționare al discului în modul de așteptare și a reduce numărul de treziri. Modul a pierdut relevanță, deoarece în dispozitivele mobile moderne hard disk-urile au fost înlocuite de unități SSD.
    • Sistemul de fișiere F2FS a fost adaptat pentru a folosi pagini mari folii mari de memorie (large folios).
    • A fost reluată lucrul la driverul ntfs3, dezvoltat de compania Paragon Software. A fost adăugată suportul operațiunilor cu fișiere bazate pe iomap, implementate opțiunile llseek SEEK_DATA/SEEK_HOLE, a fost introdus modul delalloc pentru alocarea întârziată a blocurilor. Între timp, în lista de discuții a dezvoltatorilor kernel-ului s-a discutat în februarie aprobat includerea într-una dintre versiunile viitoare ale kernel-ului a unei noi implementări NTFS — ntfsplus, dezvoltată pentru a înlocui ntfs3.
    • În mod implicit, în timpul construcției sistemul de compozitare versiunea protocolului NFS 4.1 (CONFIG_NFS_V4_1). Asigurată blocarea exportului prin NFS de sisteme de fișiere pseudo-specializate, cum ar fi pidfs și nsfs. În NFSD a fost implementată există o opțiune experimentală de utilizare a ACL-urilor POSIX și a fost adăugată suport pentru modificarea dinamică a pool-ului de fire (thread-pool) în funcție de sarcină.
  • Memorie și servicii de sistem
    • Au fost aprobate regulile oficiale de utilizare a asistenților AI și includerea în kernel a conținutului generat automat. Atunci când se transmite cod generat, se impune etichetarea acestuia prin indicarea asistentului AI utilizat prin tag-ul Assisted-by. Asistenților AI le este interzis să adauge tag-ul Signed-off-by – persoana care a trimis patch-ul este considerată autorul acestuia, asumându-și responsabilitatea pentru modificarea transmisă și garantând calitatea acesteia. Se impune dezvoltatorilor să efectueze o revizuire manuală a codului obținut prin AI și să verifice conformitatea rezultatului cu cerințele legale.

    • Suportul pentru Rust transformată a fost transferat din experimental în funcționalitățile de bază ale kernel-ului.

    • Integrarea în kernel a mecanismului „ Swap Table” a fost finalizată, permițând creșterea performanței swap-ului. Accelerarea este realizată prin reducerea competiției pentru accesul la cache-ul de swap, căutarea mai eficientă în cache și reducerea fragmentării. Backend-ul bazat pe Swap Table este folosit pentru a realiza caching-ul swap-ului în locul backend-ului XArray și a permis în testul redis-benchmark cu BGSAVE creșterea numărului de cereri procesate cu 22%.A fost adăugat suportul pentru extensia apărută în Clang 22

    • Analiza Securității Firelor Analiza Siguranței Firelor, care permite la identificarea, în etapa de compilare, a stărilor de concurență potențiale și a erorilor generate de setarea incorectă a blocajelor. Expansia oferă o serie de atribute, cum ar fi GUARDED_BY(…), REQUIRES(…), RELEASE(…) și ACQUIRE(…), care permit etichetarea funcțiilor acoperite de blocaje și delimitarea domeniului de aplicare al blocajelor (definirea contextului). În etapa de compilare, se efectuează o verificare a corectitudinii aplicării primitivelor de sincronie, cum ar fi mutexurile, pe baza evaluării activității sau inactivității contextului asociat.

    • În apelul de sistem open_tree adăugat flagul OPEN_TREE_NAMESPACE pentru simplificarea configurării containerelor izolate și accelerarea lansării containerelor pe sisteme cu un număr mare de puncte de montare. Similar cu OPEN_TREE_CLONE, noul flag copiază doar arborele de montare specificat, dar în loc de un descriptor de fișier local, returnează un descriptor de fișier într-un nou spațiu de nume de puncte de montare, în care arborele copiat este montat deasupra unei copii a sistemului de fișiere rădăcină real. Flagul OPEN_TREE_NAMESPACE este necesar pentru a evita execuția separată a operațiunilor unshare(CLONE_NEWNS) și pivot_root(), utilizate la crearea containerelor.

    • În apelul de sistem rseq adăugat mecanismul de extindere a quantum-urilor de timp (time slice), care permite obținerea de timp suplimentar de procesor pentru executarea neîntreruptă a unei secțiuni critice. Ideea este de a evita întreruperea secțiunii critice cu blocaj, cauzată de planificatorul de sarcini, ceea ce duce la transferul controlului către alte fire care utilizează resursa, pe care blocajul rămâne activ. Extinderea cuvantului de timp se efectuează fără cheltuieli suplimentare, dar și fără garanții stricte furnizate printr-o reglementare completă a priorităților.

    • Pentru arhitecturile arm64, loongarch, powerpc, riscv, s390 și x86, modul de preemptie în planificator este, în mod implicit modificat de la PREEMPT_NONE la PREEMPT_LAZY. Numărul modurilor posibile a fost redus de la patru la două – PREEMPT_FULL și PREEMPT_LAZY (modurile PREEMPT_NONE și PREEMPT_VOLUNTARY sunt lăsate doar pentru arhitecturi care nu suportă PREEMPT_FULL și PREEMPT_LAZY). Modului PREEMPT_LAZY îi aplică modelul de preemptare completă (PREEMPT_FULL) pentru sarcinile realtime (RR/FIFO/DEADLINE), dar întârzie preemptarea sarcinilor normale (SCHED_NORMAL) până la limita ticăitului. Întârzierea adusă reduce cazurile de preemptare a deținătorilor de blocaje, ceea ce permite apropierea performanței de configurațiile care folosesc modelul de preemptare voluntară (voluntary preemption), adică PREEMPT_LAZY permite menținerea capabilităților de preemptare completă în ceea ce privește sarcinile realtime, dar minimizează scăderea performanței pentru sarcinile normale.

      Activarea PREEMPT_LAZY a dus la o regresie serioasă, care reduce performanța PostgreSQL pe sistemele ARM64 cu 50%. Pentru a elimina scăderea performanței, dezvoltatorii PostgreSQL o soluție pentru problema prin extragerea certificatului din trebuie să activeze opțiunea PR_RSEQ_SLICE_EXTENSION pentru a reduce probabilitatea preemptării deținătorului de blocaj.

    • Continuat transferul modificărilor din ramura Rust-for-Linux, legate de utilizarea limbajului Rust ca al doilea limbaj pentru dezvoltarea driverelor și modulelor nucleului (suportul pentru Rust nu este activat implicit și nu duce la includerea Rust în lista dependențelor de construire obligatorii pentru nucleu). Datorită bibliotecii integrate anterior „syn (crates.io)”, care simplifică scrierea de macro-uri complexe, s-a reușit reducerea dimensiunii codului Rust în nucleu 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 pentru utilizarea cozii de trimitere non-circulare (non-circular submission queue), mai eficient cache-uită în situația în care execuția cererii se finalizează înainte de revenirea din apelul de sistem.

    • În subsistemul eBPF în mecanismul BTF (BPF Type Format), care oferă 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 apelarea kfunc (funcții ale nucleului disponibile pentru utilizare în programele BPF), definite cu firul KF_IMPLICIT_ARGS.

    • Eliminat cod pentru suportul inițial al RAM-disk-ului (initrd) pe bază de linuxrc, a fost declarat învechit de mult. Implementările rămase ale initrd sunt planificate pentru a fi eliminate în 2027. În loc de initrd, ar trebui folosit initramfs (diferența este că initrd plasează mediul de boot inițial în imaginea disk, iar initramfs - în sistemul de fișiere).

    • în dispozitivul bloc zram, utilizat pentru stocarea comprimată a segmentului de swap în memorie, schimbată logica de funcționare cu paginile de memorie comprimate în cazul mutării opționale a datelor în stocarea permanentă în cazul umplerii memoriei RAM disponibile. Anterior, paginile de memorie erau dezarchivate înainte de a fi scrise pe suportul fizic, iar acum sunt salvate așa cum sunt în formă comprimată, ceea ce reduce încărcarea pe CPU și economisește energie în timpul funcționării autonome.

    • În utilitarul timerlat, destinat măsurării întârzierei în funcționarea planificatorului de sarcini, a fost adăugată opțiunea —bpf-action pentru a rula programe BPF în caz de depășire a pragului stabilit.

    • În sistemul de trasare ftrace a fost adăugată setarea bitmask-list pentru a afișa măștile de biți într-o formă lizibilă (sub formă de listă de biți, nu de număr hexazecimal). În tracefs au fost adăugate funcționalități pentru audit filtrelor și triggere. Adăugat comanda perf sched stats pentru colectarea și afișarea statisticilor despre funcționarea planificatorului de sarcini.

    • Adăugate opțiunile 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 locul logo-ului standard cu pinguinul Tux.

  • Virtualizare și securitate
    • În sistemul de I/O asincron io_uring a fost implementată posibilitatea de a atașa programe BPF cu filtre care controlează ce pot face anumite operațiuni SQE (Submissio Queue Entry) (similar cu apelurile de sistem în io_uring). Posibilitatea adăugată este analogică filtrelor apelurilor de sistem. Filtrele pot fi atașate anumitor sarcini și sunt moștenite la crearea altor procese după apelul fork(). În cazul existenței filtrelor active, filtrele adăugate deasupra pot doar atașa restricții suplimentare, dar nu pot dezactiva filtrele existente. Posibilitatea implementată va permite blocarea metode o ocolire a filtrării apelurilor de sistem în medii sandbox, bazate pe executarea, în loc de apeluri de sistem, a unor operațiuni similare furnizate în io_uring.
    • În SELinux a fost adăugată posibilitatea de a gestiona accesul la tokenurile BPF, permițând procesele neprivilegiate să efectueze unele operațiuni privilegiate cu BPF, de exemplu, să încarce programe BPF în nucleu și să creeze structuri map.
    • Adăugat suport pentru algoritmul de creare a semnăturilor digitale ML-DSA (CRYSTALS-Dilithium), bazat pe teoria rețelelor și rezistent la atacuri pe computere cuantice. A fost adăugată posibilitatea de a utiliza ML-DSA pentru autentificarea modulelor nucleului.
    • A fost eliminat posibilitatea de a utiliza schemele de creare a semnăturilor digitale cu algoritmul SHA-1 pentru certificarea modulelor nucleului (suportul pentru încărcarea modulelor semnate este menținut).
    • În înregistrarea de audit NETFILTER_PKT au fost adăugate câmpurile sport și dport pentru inspectarea numerelor de porturi de rețea, nu doar a adreselor IP.
    • Pentru sistemele cu arhitectură RISC-V a fost implementată suport 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 (flux de control) ca urmare a exploatărilor care modifică pointerii de funcții stocați în memorie.
    • În hypervisorul KVM a fost implementată posibilitatea de a transmite în sistemele virtuale informații despre suportul procesorului pentru extensia ERAPS (Enhanced Return Address Predictor Security), care permite evitarea unor operațiuni de resetare a stării CPU atunci când se revine controlul de la sistemul virtual la gazda. În plus, a fost adăugată suport pentru asocierea echipamentelor cu sistemele virtuale pentru monitorizarea performanței (PMU, Performance Monitoring Unit), ceea ce permite îmbunătățirea preciziei profilării în comparație cu utilizarea PMU emulati.
    • În driverul pentru hypervisorul Hyper-V a fost adăugată suport pentru interfața debugfs pentru vizualizarea statisticilor de funcționare a hypervisorului.
  • Subsystema de rețea
    • Activat implicit, extensia AccECN (Notificarea explicită precisă a congestionării), care implementează o variantă îmbunătățită a extensiei ECN (wikipedia.org), permițând gazdelor să marcheze pachetele IP în caz de suprasarcină în loc să le piardă, oferind astfel posibilitatea de a detecta apariția unei stadii incipiente a congestionării în canalele de comunicare fără pierderi de pachete. Extensia inițială ECN are o limitare care permite emiterea doar a unui singur semnal de suprasarcină pe un ciclu de transmitere TCP (RTT, Round-Trip Time, trimiterea unei solicitări și primirea unui răspuns). AccECN elimină această limitare și permite receptorului să transmită expeditorului mai multe etichete de suprasarcină în antetul pachetului TCP. Algoritmii de control al suprasarcinii pot utiliza informațiile obținute pentru a reacționa mai precis la congestii fără a recurge la o reducere bruscă a intensității trimiterii pachetelor în cazul apariției unei suprasarcini minore.
    • În implementarea algoritmului de control al cozii de rețea Cake a fost adăugată capacitatea de a gestiona mai multe cozi pentru a distribui încărcătura pe mai multe nuclee CPU. Algoritmul CAKE este aplicat pentru a reduce impactul negativ al intermedierii buffer-ului pachetelor pe echipamentele de rețea de bord și vizează atingerea celei mai mari lățimi de bandă posibile și a unui nivel minim de întârzieri chiar și pe canale de comunicare lente.
    • În socket-uri VSOCK, utilizate pentru a interacționa cu mașinile virtuale, a fost adăugată suport pentru spațiile de nume de rețea (network namespace).
    • Adăugat implementarea inițială a viitorului standard WiFi 8 (802.11bn, WiFi de ultra fiabilitate).
    • Adăugate optimizări care au permis creșterea performanței procesării pachetelor UDP în intrare cu 12% în timpul testării de stres în rețele de 100 Gbps.
  • Echipament
    • În driverul AMDGPU a fost implementată suport pentru blocuri IP, utilizate în noile GPU AMD, cum ar fi 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 și JPEG 5.3.
    • În driverul Nouveau a fost îmbunătățită gestionarea frecvenței pe sistemele Tegra 186+.
    • În driverul i915 a fost adăugată suport inițial pentru blocul IP de afișare Xe3p_LPD, utilizat în procesoarele Intel Nova Lake-P.
    • Continuarea lucrări la driverul drm (Direct Rendering Manager) Xe pentru GPU-urile bazate pe arhitectura Intel Xe, care sunt utilizate î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. Adăugate componentele necesare pentru diagnosticarea blocărilor GPU în Mesa. Adăugat suport pentru mecanismul MERT pentru gestionarea accesului la memoria GPU.
    • Continuarea integrarea componentelor driverului Nova pentru GPU NVIDIA, echipat 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-a realizat pregătirea pentru implementarea suportului GPU bazat pe microarhitectura Turing și au fost efectuate diverse modificări interne.
    • Adăugat suport pentru controloare și periferice cu interfață multi-canal SPI (Serial Peripheral Interface), care permite transmiterea datelor în mai multe fluxuri paralele.
    • Adăugat driver pentru conectori combinați Type-C, utilizați pe dispozitive cu cipuri Apple Silicon și care combină interfețele USB3, DP-AltMode și Thunderbolt/USB4.
    • S-a adăugat suport pentru subsistemele audio ale chip-urilor Tegra238, Minisforum V3 SE, iBasso DC04U, Intel Nova Lake, Nova Lake S și Focusrite Forte.
    • S-a adăugat suport pentru plăci ARM, SoC ș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.

În același timp, fundația latino-americană a software-ului liber a formulat o variantă kernel complet liber 7.0 – Linux-libre 7.0-gnu, curățat de elemente de firmware și drivere care conțin componente sau segmente de cod ne-liber, iar utilizarea cărora este limitată de producător. În versiunea 7.0, s-a realizat curățarea de blob-urile driverului iwlwifi. Codul de curățare a fost actualizat în driverele amdgpu, adreno, TI PRUeth, air_en8811h, ath12k, TI VPE, rtw8852b, rt1320, rt5575 SPI, tas2783, Intel catpt. S-a realizat curățarea numelui blob-urilor în fișierele dts (devicetree) pentru cipurile ARM.

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