Linux 7.1

După două luni de dezvoltare, Linus Torvalds a prezentat lansarea nucleului Linux 7.1. Dintre cele mai evidente schimbări: un nou driver ntfsplus, prima etapă de încetare a suportului pentru CPU i486, eliminarea vechilor adaptoare Ethernet, eliminarea protocoalelor ISDN și AX.25, activarea implicită a mecanismului Intel FRED, suport pentru procesatori BPF în io_uring, optimizarea subsistemului de swap, suport pentru sub-planificatori în sched_ext, input/output în modul zero-copy în driverul ublk, operația ioctl shutdown în Btrfs, comutarea dinamică a modului de performanță în driverul amd-pstate, suport xattr pentru socket-uri Unix.

Noua versiune include 17275 de corecții de la 2589 de dezvoltatori, dimensiunea patch-ului fiind de 57 MB (modificările au afectat 13528 de fișiere, s-au adăugat 751785 de linii de cod și s-au eliminat 405916 linii). În versiunea anterioară au fost 15624 de corecții de la 2477 de dezvoltatori, dimensiunea patch-ului fiind de 56 MB. Aproape 41% din toate modificările aduse în 7.1 sunt legate de driverele de dispozitive, aproximativ 12% sunt legate de actualizarea codului specific pentru arhitecturile hardware, 14% se referă la stiva de rețea, 5% la sistemele de fișiere și 3% la subsistemele interne ale nucleului.

Principalele noutăți din nucleul 7.1 (kernelnewbies.org, lwn.net, opennet):

Subsistemul de disc, I/O și sistemele de fișiere
  • Au fost acceptate o nouă implementare a sistemului de fișiere NTFS — ntfsplus, bazată pe codul driverului clasic ntfs, eliminat din nucleu. Vechiul driver a fost refăcut, extins cu capacitatea de a scrie date și adaptat pentru a susține funcționalitățile moderne, cum ar fi utilizarea folii mari de memorie (folios) în locul structurii buffer_head. În noul driver a fost implementată alocarea amânată a blocurilor, care a permis obținerea unor performanțe ridicate în operațiunile de scriere și reducerea fragmentării. Pentru operațiunile de scriere/lectură în buffer, input/output direct, maparea extensiilor și operațiunile de scriere/lectură pe pagini, este utilizată biblioteca iomap. În testele iozone, driverul ntfsplus s-a dovedit cu 3-5% mai rapid decât ntfs3 în modul de scriere unifurcat și cu 35-110% când sunt folosite 4 firuri. Viteza de citire a ntfsplus și ntfs3 este aproximativ la același nivel. Driverul ntfs3 rămâne în nucleu și primește s-au adus corecții și îmbunătățiri minore.
  • A fost adăugat suport pentru generarea și verificarea datelor de integritate T10 (deepwiki.com) la nivel de sistem de fișiere, nu la nivel de dispozitiv bloc, ceea ce permite creșterea performanței operațiunilor de citire.
  • În driverul dispozitivelor bloc ublk, care permite mutarea logicii specifice pe partea procesului în spațiul utilizatorului, a fost adăugată suport pentru intrare/ieșire prin memorie partajată fără copierea datelor între buffer-uri (mod zero-copy).
  • Pentru dispozitivele de bloc auto-criptante SED-OPAL au fost adăugate ioctl pentru gestionarea modului Utilizator unic și a fost implementată comanda STACK_RESET.
  • În Btrfs a fost declarată stabilă suportul pentru operația ioctl shutdown, care permite tranziția FS-ului într-o stare în care se încearcă finalizarea operațiunilor deja pornite, însă toate operațiunile noi sunt blocate.
  • În exfat a fost implementată posibilitatea rezervării zonelor goale prin apelul fallocate().
  • În FS CIFS a fost adăugat suportul pentru crearea de fișiere temporare cu flagul O_TMPFILE.
  • În apelul sistemic fsmount() a fost adăugată opțiunea FSMOUNT_NAMESPACE, care creează un nou spațiu de nume pentru punctele de montare ale sistemului de fișiere montat. În apelurile de sistem clone3() și unshare() au fost adăugate flaguri pentru returnarea unui nou spațiu de nume pentru punctele de montare care conține doar un FS de placeholder gol bazat pe nullfs, driverul fs-dax cu interfața FS pentru dispozitive DAX (Direct Access).
  • În serverul NFS a fost adăugată protecție împotriva atacurilor de tip brute-force asupra descriptorilor de fișiere, implementată prin certificarea descriptorilor cu o semnătură criptografică. Protecția este activată prin opțiunea de montare sign_fh.
  • Adăugat driverul simbolic fs-dax, care oferă o interfață pentru interacțiunea cu dispozitivele DAX (kernel.org) (Direct Access), care suportă funcționarea prin oholarea cache-ului de pagini. Interfața specificată este necesară pentru integrarea în nucleul sistemului de fișiere famfs, plasată în memoria operațională.
  • În sistemul de fișiere Ceph a fost implementat colectarea metricilor de intrare/ieșire legate de subunități.
Memorie și servicii de sistem
  • A fost acceptată prima serie de modificări pentru a întrerupe suportul pentru procesoarele i486. Opțiunile din Kconfig pentru construirea nucleului cu suport pentru procesoarele 486DX, 486SX și AMD ELAN (CONFIG_M486, CONFIG_M486SX și CONFIG_MELAN) au fost eliminate, iar opțiunile de compilare pentru sistemele i486 (-march=i486) au fost excluse din Makefile. Codul pentru sprijinul efectiv al funcționării pe procesoarele i486 a fost lăsat în continuare în nucleu, dar construirea pentru astfel de sisteme va necesita acum aplicarea de patch-uri asupra fișierelor de construire. Motivele pentru eliminarea suportului pentru procesoarele i486 sunt legate de dorința de a scăpa nucleul de codul complicat care emulează anumite operații hardware, cum ar fi CX8 (compară și schimbă 8 octeți) și TSC (contorul ciclurilor CPU, utilizat în programatorul de sarcini).
  • În driverul amd-pstate, utilizat pentru gestionarea consumului de energie în sistemele cu procesoare AMD, a fost implementat se realizează comutarea dinamică a setărilor de performanță și modificarea comportamentului managementului energiei în funcție de alimentarea de la rețea sau de la acumulator. În cazul conectării la rețea, se activează acum modul de performanță, iar pentru functionarea de la acumulator - balance_performance.
  • Mecanismul este activat implicit Intel FRED (Flexible Return and Event Delivery), care permite î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 prin instrucțiunea procesorului IRET în loc de transmiterea evenimentelor prin tabela IDT (Interrupt Descriptor Table). Creșterea fiabilității este realizată prin procesarea separată a sosirii evenimentului în contextul nucleului și al contextului utilizatorului, protecția împotriva execuției înăuntrului a NMI și păstrarea în cadrul extins al stivei a tuturor registrelor CPU legate de excepție.
  • În subsistemul perf a fost adăugată sunt suportate blocurile de monitorizare a performanței memoriei (PMU - Performance Monitoring Unit), utilizate în SoC NVIDIA Tegra410.
  • Execuția operațiunilor futex pe sistemele ARM a fost accelerată, datorită utilizării instrucțiunilor Arm 9.6 LSUI, care permit nucleului să acceseze memoria spațiului utilizator fără a dezactiva în prealabil modul de protecție. PAN (arm.com) (Privileged Access Never).
  • Pe sistemele cu procesoare ARM, suportul pentru extensia arhitecturii setului de comenzi a fost îmbunătățit MPAM (Memory System Resource Partitioning and Monitoring) și a fost adăugată posibilitatea de utilizare în spațiul utilizator pentru gestionarea resurselor prin intermediul mecanismului resctrl. MPAM oferă 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 poate limita consumul resurselor, cum ar fi lățimea de bandă a memoriei sau dimensiunea cache-ului, pentru a evita ca un anumit grup de sarcini să ocupe toate resursele. În contextul monitorizării, combinația PMG și PARTID poate fi utilizată pentru a urmări consumul resurselor de memorie în anumite tipuri de încărcări.
  • Adăugat posibilitatea utilizării modului în timp real (PREEMPT_RT) pe procesoarele ARM de 32 de biți. Anterior, suportul pentru PREEMPT_RT era asigurat pentru arhitecturile x86 și x86-64, ARM64, RISC-V și LoongArch.
  • În apelul sistemic clone3() au fost adăugate noi flaguri: CLONE_NNP — interdicție de a obține privilegii noi în procesul creat; CLONE_AUTOREAP — terminarea automată a procesului în loc de transformarea acestuia într-un proces zombie până la executarea funcției wait() de către procesul părinte; CLONE_PIDFD_AUTOKILL — terminarea procesului fiu în cazul închiderii descriptorului pidfd asociat (de exemplu, la terminarea procesului părinte).
  • Pentru fiecare modul al kernelului, în directorul /sys/module a fost adăugat un fișier import_ns, care conține lista spațiilor de nume de simboluri importate (numele simbolului).
  • În sistemul de intrare/ieșire asincron io_uring a fost adăugată suportul pentru utilizarea subsistemului BPF pentru a crea gestionari. De exemplu, se poate înlocui bucla principală de gestionare cu un program BPF.
  • În subsistemul BPF a fost modernizat analiza utilizării stivei, ceea ce a accelerat semnificativ verificarea de către verificator a multor programe BPF.
  • Cu scopul de a optimiza performanța rescrisă subsistemul hrtimer (high resolution timer). Planificatorul de sarcini poate acum folosi temporizatoare cu rezoluție înaltă fără pierderi de performanță în loc de temporizatoare mai puțin precise.
  • Continuat transferul modificărilor din ramura Rust-for-Linux, legate de utilizarea limbajului Rust ca al doilea limbaj pentru dezvoltarea de drivere și module de kernel (suportul pentru Rust nu este activat implicit și nu duce la includerea Rust în lista dependențelor de compilare obligatorii ale kernelului). Până la versiunea 1.85 (distribuită în Debian 13) au fost crescut cerințele pentru versiunea Rust necesară pentru a compila componentele kernelului. A fost adăugată opțiunea experimentală Kconfig CONFIG_RUST_INLINE_HELPERS pentru încorporarea 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!’. Au fost extinse capacitățile modulelor sizes, clk, ptr, sync, error.
  • În mecanismul SCHED_EXT, permițându-le utilizatorilor să folosească BPF pentru a crea planificatori CPU, a fost adăugată capabilitatea inițială de a crea planificatori înfășurați (sub-scheduler), prin care pentru fiecare cgroup se poate utiliza propriul planificator de sarcini.
  • S-a continuat optimizarea subsistemului de swap. A fost eliminată vechea structură swap_map, înlocuită cu mecanismul „” 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%.”. Schimbarea a permis îmbunătățirea performanței și reducerea consumului de memorie în subsistemul de swap.
  • În subsistemul DAMON (Data Access MONitor), care permite urmărirea accesului procesului la datele din memorie (de exemplu, se poate verifica la ce zone de memorie a avut acces procesul și ce zone de memorie au rămas neutilizate), a fost adăugată suport pentru diferite algoritme automate de tuning cote.
  • În subsistemul de trasare a fost implementată conceptul de bucle externe, care permite obținerea datelor de trasare din mașinile virtuale. Această funcționalitate este disponibilă în hipervizorii KVM și nVHE pentru transmiterea datelor de trasare din sistemul gazdă.
  • În subsistemul RV (kernel.org) (Runtime Verification), destinată verificării corectitudinii funcționării sistemelor cu înaltă fiabilitate, au fost adăugate componentele de monitorizare „stall” pentru urmărirea sarcinilor care sunt temporar suspendate sau blocate, și „deadline” pentru analiza comportamentului planificatorului de sarcini.
Virtualizare și securitate
  • Implicit, este setată flagul PROC_MEM_FORCE_PTRACE, care permite ocolirea drepturilor de acces la memoria procesului prin intermediul fișierului /proc/PID/mem doar pentru procesele care folosesc apelul de sistem ptrace() pentru depanare.
  • Adăugat un nou set de hook-uri pentru modulele LSM (Linux Security Module), care simplifică implementarea politicilor pentru sistemele fișierelor stivale, cum ar fi overlayfs. În LSM, de asemenea adăugat hook pentru gestionarea accesului la Unix sockets, care a fost utilizat în modulul LSM Landlock pentru atribuirea politicilor de acces la Unix sockets.
  • În biblioteca criptografică încorporată lib/crypto, care oferă funcții mai simple și mai rapide decât în API-ul criptografic tradițional, a fost adăugată suport pentru algoritmii AES-CMAC, AES-XCBC-MAC, AES-CBC-MAC, GHASH și SM3. A fost adăugată documentația prin lib/crypto.
  • A fost implementat modul pKVM (Protected KVM) pentru o izolare strictă a memoriei anonime folosind extensii de virtualizare pentru arhitectura AArch64. În acest mod, paginile de memorie ale gazdei sunt excluse din tabela adreselor virtuale.
  • În hipervizorul KVM a fost adăugat suport pentru a cincea versiune a controlerului virtual de intreruperi ARM (VGICv5 — ARM Virtual Generic Interrupt Controller v5).
Subsystema de rețea
  • Pentru unix sockets, create de funcția socket(), a fost implementată suport pentru atributele extinse ale fișierelor (xattr) user.*. Printre aplicațiile notabile se regăsește etichetarea prin atributele extinse pentru Unix sockets, utilizate pentru IPC Varlink, cu scopul de a le distinge din masa comună pentru inspectarea și depanarea IPC cu ajutorul programelor BPF. În systemd-journald, atributele extinse sunt prevăzute pentru a determina formatul jurnalului legat de socketul /dev/log.
  • A fost eliminat suport pentru protocolul UDP-Lite (RFC 3828), care permite livrarea pachetelor cu sumă de control incorectă, presupunând că, de exemplu, datele audio și video parțial deteriorate pot fi recuperate la nivel de codec. Protocolul a fost eliminat deoarece nu este utilizat de nimeni.
  • Eliminată posibilitatea de a construi un stack IPv6 sub formă de modul kernel, care nu a fost implementat practic (IPv6 fiind fie integrat în kernel, fie complet dezactivat), dar a complicat întreținerea, deoarece la construirea IPv6 ca modul kernel (CONFIG_IPV6=m), multe subsisteme au fost nevoite să adauge handlers inutile pentru cazul încărcării modulului IPv6.
Echipament
  • În driverul AMDGPU inclus un nou motor de redare (DC) pentru APU AMD seria HD 7000 (Sea Islands, GCN 1.1).
  • În driverul Nouveau a fost adăugată suport inițial pentru GPU NVIDIA GA100 bazat pe arhitectura Ampere.
  • S-a continuat lucrul asupra driverului drm (Direct Rendering Manager) Xe pentru GPU bazat pe arhitectura Intel Xe, folosit în plăcile grafice Intel din familia Arc și în grafica integrată, începând de la procesoarele Tiger Lake. A fost adăugat suport pentru subsistemul grafic al procesoarelor Intel Nova Lake-P. Au fost implementate obiecte de tampon purgabile (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.
  • Adăugat driver DRM corebootdrm pentru redarea grafică prin framebuffer-uri ale firmware-urilor bazate pe CoreBoot.
  • Adăugat suport pentru sunete 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.
  • Adăugat driver yogafan pentru monitorizarea vitezei de rotație a ventilatorului pe laptopurile Lenovo Yoga, Legion și IdeaPad.
  • 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 suport pentru controlerele AHCI SATA și PCIe utilizate în SoC Baikal-T1, precum și pentru driverele de timer, memorie, physmap, bus, hwmon, dwc și bt1-rom. Ca motiv pentru eliminare este menționată lipsa întreținerii și integrarea incompletă în kernel a componentelor platformei Baikal, producția căreia în RF a fost încheiată în noiembrie 2025.
  • Au fost eliminate 12 drivere pentru dispozitive Ethernet cu interfețe ISA și PCMCIA, fabricate înainte de anul 2002, pentru care nu s-au găsit utilizatori care să le aplice în sistemele de lucru. De asemenea, din kernel au fost excluse subsistemele 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 (Amateur Radio), inport și logibm (busmouse). Motivul ștergerii a fost lipsa acompaniatorilor activi pe fondul creșterii numărului de erori identificate cu ajutorul syzbot și instrumentelor AI, pe care nimeni nu se ocupă să le remedieze, iar întreaga povară a soluționării problemelor grave revine acompaniatorilor sistemelor de rețea de bază ale nucleului. Au fost șterse peste 140 de mii de linii de cod.

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