După două luni de dezvoltare, Linus Torvalds a prezentat versiunea 7.1 a nucleului Linux. Printre cele mai notabile schimbări se numără: noul driver ntfsplus, prima etapă a încetării suportului pentru CPU i486, eliminarea adapterelor vechi Ethernet, eliminarea protocoalelor ISDN și AX.25, activarea implicită a mecanismului Intel FRED, suportul pentru gestionarii BPF în io_uring, optimizarea subsistemului de swap, suport pentru sub-schedulerii în sched_ext, intrare/ieșire în modul zero-copy în driverul ublk, operația ioctl „shutdown” în Btrfs, comutarea dinamică a modului de performanță în driverul amd-pstate și suport pentru xattr pentru sockets Unix.
Noua versiune include 17275 de corecții de la 2589 de dezvoltatori,
dimensiunea patch-ului este de 57 MB (modificările au afectat 13528 de fișiere, au fost adăugate 751785 de linii de cod, au fost șterse 405916 de linii). În versiunea anterioară au fost 15624 de corecții de la 2477 de dezvoltatori, dimensiunea patch-ului fiind 56 MB. Aproape 41% din toate modificările din 7.1 sunt legate de driverele de dispozitive, aproximativ 12% se referă la actualizarea codului specific arhitecturilor hardware, 14% sunt asociate cu stiva de rețea, 5% cu sistemele de fișiere și 3% cu subsistemele interne ale nucleului.
Inovațiile cheie în nucleul 7.1 (1, 2, 3):
- Subsistemul de disc, I/O și sistemele de fișiere
- A fost acceptată o nouă implementare a sistemului de fișiere NTFS — ntfsplus, bazată pe codul șters din nucleu al driverului clasic ntfs. Driverul vechi a fost reproiectat, extins pentru a permite scrierea datelor și adaptat pentru a sprijini funcționalitățile moderne, cum ar fi utilizarea foliilor de pagină de memorie (folios) în locul structurii buffer_head. Noua versiune a driverului implementează alocarea întârziată a blocurilor, ceea ce a dus la o performanță ridicată a operațiunilor de scriere și la o reducere a fragmentării. Pentru operațiunile de scriere/lectură bufferizate, intrare/ieșire directă, maparea extientelor și operațiile de scriere/lectură pe pagină a fost utilizată biblioteca iomap. În testele iozone, driverul ntfsplus s-a dovedit a fi cu 3-5% mai rapid decât ntfs3 în modul de scriere unisecvențial și între 35-110% mai rapid atunci când se folosesc 4 fire de execuție. Viteza de citire a driverului ntfsplus și a celui ntfs3 este aproximativ la același nivel. Driverul ntfs3 rămâne inclus în nucleu, iar acesta a suferit corecții și mici îmbunătățiri.
- A fost adăugată suportul pentru generarea și verificarea datelor de integritate T10 la nivelul sistemului de fișiere, și nu la nivelul dispozitivului de bloc, ceea ce permite îmbunătățirea performanței operațiunilor de citire.
- În driverul dispozitivelor de bloc ublk, care permite mutarea logicii specifice în spațiul utilizatorului, a fost adăugată suportul pentru intrare/ieșire prin memorie partajată, fără copierea datelor între buffer-uri (mod zero-copy).
- Pentru dispozitivele de bloc auto-criptate SED-OPAL, au fost adăugate ioctl-uri pentru gestionarea modului Single User și a fost implementată comanda STACK_RESET.
- În Btrfs a fost declarată stabilă suportul pentru operația ioctl «shutdown», care permite trecerea sistemului de fișiere într-o stare în care se încearcă finalizarea operațiunilor deja începute, dar se blochează toate operațiunile noi.
- În exfat a fost implementată posibilitatea rezervării de zone libere prin apelul fallocate().
- În sistemul de fișiere CIFS a fost adăugată suportul pentru crearea de fișiere temporare cu flagul O_TMPFILE.
- În apelul de sistem fsmount() a fost adăugată opțiunea FSMOUNT_NAMESPACE, care creează un nou spațiu de nume pentru punctele de montare pentru sistemul de fișiere montat. În apelurile de sistem clone3() și unshare() au fost adăugate flaguri pentru returnarea noului spațiu de nume pentru punctele de montare, conținând doar un sistem de fișiere gol montat bazat pe nullfs, driverul fs-dax cu interfața de sistem de fișiere pentru dispozitive DAX (Direct Access).
- În serverul NFS a fost adăugată protecția împotriva atacurilor prin ghicituri ale descriptorilor de fișiere, implementată prin semnarea criptografică a descriptorilor. Protecția se activează prin opțiunea de montare sign_fh.
- A fost adăugat driverul simbolic fs-dax, care oferă o interfață pentru interacțiunea cu dispozitivele DAX (Direct Access), care suportă funcționarea în afara cache-ului pe pagini. Această interfață este necesară pentru integrarea în nucleul sistemului de fișiere famfs, care este plasat în memoria RAM.
- În sistemul de fișiere Ceph a fost implementată colectarea metricilor de intrare/ieșire în funcție de subpartiții.
- Memorie și servicii de sistem
- A fost acceptat primul lot de modificări pentru încetarea suportului pentru procesoarele i486. Opțiunile pentru construirea nucleului cu suport pentru procesoarele 486DX, 486SX și AMD ELAN (CONFIG_M486, CONFIG_M486SX și CONFIG_MELAN) au fost eliminate din Kconfig, iar opțiunile de compilare pentru sistemele i486 (-march=i486) au fost excluse din Makefile. Codul pentru suportul efectiv al funcționării pe procesoarele i486 a fost păstrat în nucleu, dar compilarea pentru astfel de sisteme va necesita acum aplicarea de patch-uri pe fișierele de construire. Motivele pentru eliminarea suportului pentru procesoarele i486 sunt legate de dorința de a curăța nucleul de codul complex ce emula anumite operațiuni hardware, cum ar fi CX8 (comparare și schimbare a 8 octeți) și TSC (numărător de cicluri CPU, utilizat în programatorul de sarcini).
- În driverul amd-pstate, aplicat pentru gestionarea consumului de energie pe sistemele cu procesoare AMD, s-a implementat comutarea dinamică a setărilor de performanță și modificarea comportamentului de gestionare a energiei în funcție de utilizarea alimentării din rețea sau a bateriei. La conectarea la rețea, acum se activează modul „performance”, iar la utilizarea bateriei — „balance_performance”.
- Mecanismul Intel FRED (Flexible Return and Event Delivery) este activat implicit, permițând îmbunătățirea eficienței și fiabilității livrării informațiilor despre evenimentele de nivel scăzut. Creșterea performanței și reducerea întârzierilor sunt asigurate prin returnarea evenimentelor folosind instrucțiunea procesorului IRET în locul transmiterii evenimentelor prin tabelul IDT (Interrupt Descriptor Table). Îmbunătățirea fiabilității se realizează prin procesarea separată a veniturilor evenimentelor în contextul nucleului și contextul utilizatorului, protejându-se împotriva execuției încorporate NMI și păstrând în cadrul extins al stivei toate registrările CPU asociate cu excepția.
- În subsistemul perf a fost adăugată suportul pentru blocurile de monitorizare a performanței memoriei (PMU — Performance Monitoring Unit), utilizate în SoC NVIDIA Tegra410.
- Executarea operațiunilor futex pe sistemele ARM a fost accelerată datorită utilizării instrucțiunilor Arm 9.6 LSUI, care permit nucleului să acceseze memoria din spațiul utilizatorului fără a dezactiva prealabil modul de protecție PAN (Privileged Access Never).
- Pe sistemele cu procesoare ARM, suportul pentru extensia arhitecturii setului de instrucțiuni MPAM (Memory System Resource Partitioning and Monitoring) a fost îmbunătățit, și a fost adăugată posibilitatea utilizării acesteia în spațiul utilizatorului pentru gestionarea resurselor prin mecanismul resctrl. MPAM asigură marcarea fiecărei accesări la memorie cu un identificator de secțiune (PARTID, Partition ID) și un identificator de grup de monitorizare (PMG, Monitoring Group ID). În legătură cu PARTID, se pot restricționa consumurile de resurse, cum ar fi lățimea de bandă a memoriei sau dimensiunea cache-ului, pentru a împiedica o grupare de sarcini să ocupe toate resursele. În contextul monitorizării, combinația PMG și PARTID poate fi utilizată pentru a urmări consumul de resurse de memorie în anumite tipuri de sarcini.
- A fost adăugată posibilitatea utilizării modului în timp real (PREEMPT_RT) pe procesoarele ARM de 32 de biți. Anterior, suportul pentru PREEMPT_RT a fost asigurat pentru arhitecturile x86 și x86-64, ARM64, RISC-V și LoongArch.
- În apelul de sistem clone3() au fost adăugate noi flag-uri: CLONE_NNP — interzicerea obținerii de privilegii noi în procesul creat; CLONE_AUTOREAP — finalizarea automată a procesului în locul transformării acestuia într-un proces zombie până la executarea funcției wait() de către procesul părinte;
CLONE_PIDFD_AUTOKILL — finalizarea procesului fiu în cazul închiderii descriptorului asociat pidfd (de exemplu, la finalizarea procesului părinte). - Pentru fiecare modul de kernel în directorul /sys/module a fost adăugat fișierul import_ns, care conține lista spațiilor de nume de simboluri importate (symbol namespace).
- În sistemul de intrare/ieșire asincron io_uring a fost adăugat suportul pentru utilizarea subsistemului BPF pentru crearea de handler-e. De exemplu, ciclul principal de dispecer poate fi înlocuit cu un program BPF.
- În subsistemul BPF, analiza utilizării stivei a fost modernizată, ceea ce a accelerat semnificativ verificarea multor programe BPF de către verificator.
- Cu scopul de a optimiza performanța, subsistemul hrtimer (high resolution timer) a fost rescris. Planificatorul de sarcini poate acum utiliza timere de înaltă rezoluție fără a pierde performanța, în locul timer-elor mai puțin precise.
- 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 duce la includerea Rust ca una dintre dependențele de construire obligatorii pentru kernel). Până la versiunea 1.85 (livrată în Debian 13) au fost ridicate cerințele pentru versiunea Rust necesară pentru construirea componentelor kernel. A fost adăgată opțiunea experimentală Kconfig CONFIG_RUST_INLINE_HELPERS pentru integrarea straturilor C în codul Rust în timpul compilării (optimizarea a accelerat funcționarea driverului bloc null cu 2%). A fost adăugat macro-ul 'const_assert!'. Capacitățile modulelor 'sizes', 'clk', 'ptr', 'sync', 'error' au fost extinse.
- În mecanismul SCHED_EXT, care permite utilizarea BPF pentru a crea planificatori CPU, a fost adăugată o capacitate inițială de a crea planificatori înfășurați (sub-scheduler), prin care fiecare cgroup poate utiliza propriul planificator de sarcini.
- Optimizarea subsistemului de swap a fost continuată. A fost eliminată vechea structură swap_map, înlocuită cu mecanismul „Swap Table”. Această modificare a permis îmbunătățirea performanței și reducerea consumului de memorie în subsistemul de swap.
- În subsistemul DAMON (Data Access MONitor), care permite monitorizarea accesului procesului la datele din memoria RAM (de exemplu, se poate afla la ce zone de memorie a avut acces procesul și ce zone de memorie au rămas neutilizate), a fost adăugată suportul pentru diferite algoritmi de ajustare automată a cotelor.
- În subsistemul de trasare a fost implementată conceptul de buferelor circulare externe, care permite obținerea datelor de trasare din mașini virtuale. Capacitatea este utilizată în hipervizoare KVM și nVHE pentru a transmite datele de trasare din sistemul gazdă spre partea gazdă.
- În subsistemul RV (Runtime Verification), destinat verificării corectitudinii funcționării sistemelor de înaltă fiabilitate, au fost adăugate componente de monitorizare „stall” pentru a urmări sarcinile ale căror execuții sunt temporar suspendate sau blocate și „deadline” pentru analiza comportamentului planificatorului de sarcini.
- Virtualizare și securitate
- Implicit este setat flag-ul PROC_MEM_FORCE_PTRACE, care permite ocolirea drepturilor de acces la memoria procesului prin fișierul /proc/PID/mem doar pentru procese care aplică pentru depanare apelul de sistem ptrace().
- A fost adăugat un nou set de hook-uri pentru modulele LSM (Linux Security Module), facilitând implementarea politicilor pentru sistemele de fișiere stack, cum ar fi overlayfs. În LSM a fost, de asemenea, adăugat un hook pentru gestionarea accesului la socket-uri Unix, care este utilizat în modulul LSM Landlock pentru alocarea politicilor de acces la socket-uri Unix.
- În biblioteca de criptografie încorporată lib/crypto, care oferă funcții mai simple și mai rapide decât API-ul tradițional de criptografie, a fost adăugată suport pentru algoritmii AES-CMAC, AES-XCBC-MAC, AES-CBC-MAC, GHASH și SM3. A fost adăugată documentația pentru lib/crypto.
- A fost implementat modul pKVM (Protected KVM) pentru izolare strictă a memoriei anonime utilizând extensii de virtualizare pentru arhitectura AArch64. În acest mod, paginile de memorie ale mașinii gazdă sunt excluse din tabela adreselor virtuale a sistemului gazdă.
- În hypervizorul KVM a fost adăugat suport pentru a cincea versiune a controlerului virtual de întreruperi ARM (VGICv5 — ARM Virtual Generic Interrupt Controller v5).
- Subsystema de rețea
- Pentru socket-urile Unix create de funcția socket(), a fost implementat suport pentru atributele extinse ale fișierelor (xattr) „user.*”. În domeniile de aplicare se menționează etichetarea prin atribute extinse a socket-urilor Unix utilizate pentru IPC Varlink, cu scopul de a le distinge din masa generală pentru inspecție și depanare a funcționării IPC prin programele BPF. În systemd-journald, atributele extinse sunt destinate utilizării pentru a determina formatul jurnalului în legătură cu socket-ul /dev/log.
- A fost eliminat suportul pentru protocolul UDP-Lite (RFC 3828), care permite livrarea pachetelor cu un sumă de control incorectă, bazându-se pe faptul că, de exemplu, datele audio și video parțial corupte pot fi recuperate la nivel de codec. Protocolul a fost eliminat deoarece nu este utilizat de nimeni.
- A fost eliminată posibilitatea de a construi stiva IPv6 sub formă de modul al nucleului, care nu era aplicată în practică (IPv6 este fie integrat în nucleu, fie complet dezactivat), dar complica întreținerea, deoarece la construirea IPv6 ca modul al nucleului (CONFIG_IPV6=m), multe subsisteme erau obligate să adauge gestionari inutile în cazul descărcării modulului IPv6.
- Echipament
- În driverul AMDGPU a fost inclus un nou motor de afişare (DC) pentru APU AMD din seria HD 7000 (Sea Islands, GCN 1.1).
- În driverul Nouveau a fost adăugat suport inițial pentru GPU NVIDIA GA100 bazat pe microarhitectura Ampere.
- Continuarea lucrărilor la driverul drm (Direct Rendering Manager) Xe pentru GPU-uri bazate pe arhitectura Intel Xe, utilizate în plăcile grafice Intel Arc și în grafica integrată, începând cu procesoarele Tiger Lake. A fost adăugată suportul pentru subsystemul grafic al procesoarelor Intel Nova Lake-P. Au fost implementate obiecte de tip buffer care pot fi șterse (Purgeable Buffer Objects).
- Continuarea integrării 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. A fost adăugată suport inițial pentru GPU-urile bazate pe microarhitectura Turing.
- A fost adăugat driverul DRM corebootdrm pentru redarea graficii prin framebuffer-uri ale firmware-urilor bazate pe CoreBoot.
- A fost adăugat suport pentru audio ASoC AMD RPL DMIC, Cirrus Logic CS42L43, CS47L47, NVIDIA CPCAP și WM8962. A fost îmbunătățit suportul pentru dispozitive audio cu interfață USB: Huawei Headset, Focusrite Novation, MV-Silicon, Studio 1824, Arturia AF16Rig, Hotone Audio, Feaulle Rainbow,
PreSonus AudioBox, Moondrop Ju Jiu, Scarlett 18i20. - A fost adăugat driverul yogafan pentru monitorizarea vitezei de rotație a ventilatorului pe laptopurile Lenovo Yoga, Legion și IdeaPad.
- A fost adăugat suport pentru plăci ARM, SoC și dispozitive: Qualcomm Glymur, Qualcomm Mahua, Qualcomm Eliza, Qualcomm IPQ5210, Qualcomm apq8084 și ipq806x, Axis ARTPEC-9, ARM Zena, ARM corstone-1000-a320, Microchip LAN9691, Microchip PIC64GX, Rockchip RV1103B, Renesas RZ/G3L, NXP S32N79.
- A fost eliminat suportul pentru controalele AHCI SATA și PCIe utilizate în SoC Baikal-T1, precum și driverele pentru temporizator, memorie, physmap, bus, hwmon, dwc și bt1-rom. Motivul eliminării este lipsa întreținerii și integrarea incompletă a componentelor platformei Baikal în nucleu, producția căreia în Federația Rusă a fost suspendată în noiembrie 2025.
- Au fost eliminate 12 drivere pentru dispozitive Ethernet cu interfețe ISA și PCMCIA, produse înainte de 2002, pentru care nu au fost găsiți utilizatori care să le folosească în sistemele de lucru. De asemenea, din nucleu au fost excluse
subsystemul ISDN, implementările protocoalelor AX.25, CAIF și Bluetooth CMTP (Common ISDN Application Programming Interface Message Transport Protocol), driverele yellowfin (Yellowfin Gigabit-NIC), hamachi (Hamachi GNIC-II), hamradio (Radio amator), inport și logibm (busmouse). Motivul eliminării a fost lipsa întreținerii active în contextul creșterii numărului de erori identificate cu ajutorul syzbot și instrumentelor AI, pe care nimeni nu și le asumă să le remedieze, iar toată povara de rezolvare a problemelor grave se revarsă asupra celor care întrețin subsystemele de rețea principale ale nucleului. În total, au fost eliminate peste 140.000 de linii de cod.
Sursa: opennet.ro
