După două luni de dezvoltare, Linus Torvalds a lansat kernelul. Linux 7.2. Printre cele mai notabile modificări: mecanismul de streaming de date USB4STREAM, optimizările de performanță btrfs, xfs și ext4, eliminarea continuă a codului pentru suportul CPU i486, capacitatea de a crea planificatoare SCHED_EXT imbricate, consum redus de memorie în subsistemul swap, pipe-uri nedenumite accelerate, suport pentru extensiile Intel MBEC și AMD GMET în KVM, eliminarea protocolului AppleTalk, suport inițial pentru HDMI 2.1 FRL în driverul AMDGPU.
Principalele caracteristici noi din kernelul 7.2 (1, 2, 3):
- Subsistem de disc, I/O și sisteme de fișiere
- În mecanismul iomap, a fost eliminat un apel suplimentar către funcția memset pentru iterațiile deja finalizate în funcția iomap_iter(), care, cu o intensitate mare de I/O pe unitățile NVMe rapide, a crescut numărul de operațiuni de intrare/ieșire pe secundă (IOPS) cu 5% în testele efectuate atunci când s-au utilizat sistemele de fișiere ext4 și xfs.
- XFS a fost declarat stabil pentru suportul dispozitivelor de stocare zonate (împărțirea grupurilor de blocuri sau sectoare în zone, în care sunt permise doar adăugări secvențiale de date, actualizând întregul grup de blocuri).
- Btrfs acceptă acum în mod implicit foliouri mari, reducând cheltuielile generale și îmbunătățind performanța în timpul operațiunilor I/O secvențiale intensive. A fost adăugat suport experimental pentru foliouri mari (până la 2 MB). A fost adăugat un nou ioctl, GET_CSUMS, pentru recuperarea informațiilor despre suma de control în spațiul utilizatorului, de exemplu, pentru utilitarul mkfs și optimizarea deduplicării. Performanța de scriere secvențială a fost crescută cu 15%, iar performanța I/O directă cu 59%.
- Mecanismul de „commit rapid” al sistemului de fișiere Ext4 a fost reproiectat semnificativ pentru a elimina conflictele și blocajele. Exportul statisticilor de instantanee ale inode-urilor a fost adăugat prin /proc/fs/ext4/*/fc_info. Performanța calculului hash al directorului a fost optimizată (aproape dublându-se viteza pentru numele de 255 de caractere, 27% pentru numele de 64 de caractere și 11% pentru numele de 32 de caractere).
- F2FS acceptă acum returnarea erorii fserror, permițând monitorizarea problemelor sistemului de fișiere din spațiul utilizatorului. Timpul petrecut cu gestionarea întreruperilor a fost redus.
- Un nou handler dm-inlinecrypt a fost adăugat la Device Mapper (DM) pentru criptarea și decriptarea transparentă a dispozitivelor bloc folosind dispozitive hardware cu funcționalitate de criptare inline.
- A fost furnizată documentația privind adăugarea de noi sisteme de fișiere la kernel.
- În NFS, dimensiunea implicită a blocului a fost mărită la 4 MB pe sistemele cu cel puțin 16 GB de RAM (puteți folosi /proc/fs/nfsd/max_block_size pentru a modifica manual dimensiunea blocului). A fost adăugat suport pentru delegarea directoarelor, permițând efectuarea operațiunilor cu un anumit director pentru o anumită perioadă de timp fără a verifica modificările de stare pe Server.
- Serverul SMB acceptă acum fișiere stocate în formă comprimată, precum și compresia datelor în timpul transmisiei prin rețea.
- Noua implementare NTFS (ntfsplus) adaugă suport pentru legături simbolice. Windows și este asigurată gestionarea corectă a multor tipuri de corupere a metadatelor.
- Backend-ul fscache pentru stocarea în cache a datelor EROFS (Enhanced Read-Only File System), care a fost depreciat acum doi ani, a fost eliminat.
- Ceph FS acceptă acum resetarea manuală a sesiunilor client.
- Sistemul de fișiere 9P a fost optimizat pentru a îmbunătăți performanța în scenarii precum construirea de proiecte.
- La apelul sistem file_getattr() au fost adăugate semnalizatoare pentru recuperarea informațiilor despre sensibilitatea la majuscule/minuscule în sistemul de fișiere. Semnalizorul FS_XFLAG_CASEFOLD indică faptul că verificarea numelui fișierului se efectuează fără a ține cont de majuscule/minuscule, iar semnalizatorul FS_XFLAG_CASENONPRESERVING indică faptul că informațiile despre majuscule/minuscule nu sunt păstrate la crearea de noi nume de fișiere. Aceste semnalizatoare pot fi utilizate în clienții NFS fără a ține cont de majuscule/minuscule.
- Indicatorul O_EMPTYPATH a fost adăugat la apelul de sistem openat2(), permițând transmiterea unei căi de fișier goale. În acest caz, calea către fișierul care este deschis este determinată pe baza descriptorului de fișier transmis.
- Indicatorul OPENAT2_REGULAR a fost adăugat la apelul de sistem openat2(), care permite deschiderea doar a fișierelor obișnuite (se va returna o eroare EFTYPE dacă se încearcă deschiderea unui fișier special, cum ar fi un socket, un pipe sau un dispozitiv).
- Servicii de memorie și sistem
- Mecanismul USB4STREAM a fost implementat pentru transmiterea de date în flux între computere conectate prin porturi USB4. A fost adăugat dispozitivul /dev/tbstreamX, care vă permite să citiți și să scrieți date folosind funcțiile standard read() și write(), similar cu citirea și scrierea fișierelor. De exemplu, pe o gazdă, puteți trimite informații folosind comanda „echo hello > /dev/tbstream0”, iar pe alta, le puteți citi folosind comanda „cat /dev/tbstream0”. Mecanismul USB4STREAM poate fi combinat cu posibilitatea de a stabili o conexiune de rețea printr-un cablu USB4 (thunderbolt_net) sau utilizat separat pentru a transfera date între aplicații care nu acceptă socket-uri de rețea.
- A fost inclusă a doua serie de modificări pentru eliminarea suportului pentru procesoarele i486. Peste 13 linii de cod legate de emularea unităților în virgulă mobilă pentru procesoarele fără FPU au fost eliminate. Suportul pentru procesoarele i486 fără operațiunile hardware CX8 (comparare și schimb de 8 octeți) și TSC (contorul de cicluri al CPU utilizat în planificatorul de activități) a fost eliminat, deoarece codul de emulare pentru acestea a fost eliminat.
- Suportul pentru procesoarele AMD Geode utilizate în computerul OLPC XO-1 a fost anunțat ca fiind orfan.
- S-a adăugat suport pentru actualizarea implementării TDX (Trusted Domain Extensions) de la Intel, un mecanism utilizat pentru criptarea memoriei RAM a sistemului oaspete. TDX este implementat ca un modul special de execuție software, care este transferat din memoria flash în RAM de către BIOS în timpul pornirii. Nucleul include acum capabilități pentru gestionarea acestui modul și înlocuirea acestuia cu o versiune mai nouă pe un sistem care rulează, fără a fi necesară o repornire.
- A fost implementat un nou planificator de alocare a resurselor GPU (Fair GPU scheduler). Acesta este utilizat pentru a determina ordinea în care lucrările trimise de procesele care utilizează GPU sunt executate pe GPU. În loc să utilizeze coada tradițională FIDO pentru solicitările GPU, noul planificator utilizează mecanisme de alocare echitabilă a resurselor bazate pe planificatorul de sarcini Completely Fair Scheduler (CFS), care utilizează un plan de lansare cu un timp de tranziție pentru următorul proces. Cel mai vizibil efect al noului planificator se observă în timpul executării în paralel a sarcinilor interactive care utilizează intens GPU-ul. În ultimul moment înainte de lansarea kernelului 7.2, planificatorul Fair GPU a fost dezactivat, iar vechiul planificator FIFO a fost revenit la normal din cauza necesității de a depana regresia, care cauza degradarea performanței și utilizarea GPU de 100% la rularea anumitor jocuri în Proton.
- Modificări în subsistemul eBPF: Adăugată posibilitatea de a atașa un singur program BPF la mai multe puncte de urmărire. Programele BPF atașate la punctele de urmărire pot accesa acum memoria componentelor din spațiul utilizatorului, cu gestionarea corectă a paginilor de memorie nealocate (defecțiuni de pagină). Apelul de sistem bpf() acceptă acum atribute standard (log_buf, log_size, log_level și log_true_size), ceea ce permite transferul unificat de metadate în toate comenzile BPF, fără a se limita la BPF_PROG_LOAD, BPF_BTF_LOAD și BPF_MAP_CREATE. A fost eliminată limitarea de a transmite maximum 5 parametri către funcțiile BPF. Adăugată posibilitatea de a accesa în siguranță memoria partajată bpf_arena fără teama de a accesa pagini de memorie nealocate (defecțiuni de pagină). A fost implementată o nouă versiune a structurii hărții hash BPF, permițând redimensionarea dinamică.
- Generarea ieșirii „/proc/interrupts” cu statistici de întrerupere a fost optimizată, structurile pentru stocarea contoarelor de întreruperi au fost modernizate și s-a adăugat memorarea în cache.
- Generarea fișierului „/proc/filesystems” utilizat în libselinux a fost accelerată.
- Planificatorul de activități acceptă acum echilibrarea încărcării între nucleele procesorului, ținând cont de starea memoriei cache interne a procesorului. Planificatorul încearcă acum să grupeze procesele folosind resurse partajate, cum ar fi firele de execuție dintr-un singur proces, pentru a partaja aceeași memorie cache de nivel înalt, îmbunătățind eficiența accesului la date prin creșterea probabilității ca datele necesare să fie găsite în memorie cache.
- Mecanismul SCHED_EXT, care permite utilizarea BPF pentru a crea planificatoare CPU, a continuat să implementeze capacitatea de a crea planificatoare imbricate (sub-planificatoare), care permit fiecărui cgroup să utilizeze propriul planificator de activități.
- Migrarea continuă a modificărilor din ramura Rust-for-Linux, legat de utilizarea Rust ca al doilea limbaj pentru dezvoltarea de drivere și module kernel (suportul pentru Rust nu este activat în mod implicit și nu include Rust ca dependență obligatorie de compilare a kernelului). Suportul pentru Rust în kernel a fost implementat pentru arhitectura s390. Pachetul „zerocopy”, care oferă primitive de memorie rapidă pentru codul în modul „nesigur”, este inclus.
- Versiunea minimă a setului de instrumente LLVM necesară pentru construirea kernelului a fost mărită la 17.0.1.
- În biblioteca minimalistă C nolibc, furnizată împreună cu codul sursă al kernelului Linux și oferă un cadru pentru apeluri de sistem de bază, suportând arhitecturile OpenRISC și PA-RISC pe 32 de biți.
- Subsistemul swap a fost optimizat pentru a îmbunătăți performanța și a reduce consumul de memorie în cadrul subsistemului, eliminând supraîncărcările la stocarea metadatelor statice și unificând memoria anonimă și partajată la utilizarea tomurilor. Reducerea memoriei este destul de semnificativă; de exemplu, montarea unei partiții swap de 1 TB reduce consumul de memorie cu aproximativ 512 MB.
- Performanța mecanismului de evictare a memoriei, care șterge sau mută memoria în spațiul de swap pentru a elibera memorie atunci când sistemul este sub presiune, a fost îmbunătățită. În anumite sarcini de lucru, cum ar fi la testarea MongoDB folosind YCSB (Yahoo! Cloud Serving Benchmark), s-au observat creșteri de performanță de până la 30%.
- Comanda „make sbom” a fost adăugată sistemului de compilare pentru a genera liste SBOM (Software Bill Of Materials - Lista de materiale software) care reflectă componentele, bibliotecile și dependențele utilizate în compilarea curentă a kernelului, precum și informațiile despre licența acestora obținute din anteturile SPDX din fișierele de cod.
- Implementarea conductelor fără nume a fost optimizată pentru gestionarea blocărilor (operațiunile de alocare a memoriei sunt mutate în afara domeniului de aplicare al blocării), ceea ce a crescut debitul conductelor fără nume cu 21-48% și a redus latența cu 17-33%.
- Virtualizare și securitate
- Alocatorul slab acceptă acum utilizarea jetoanelor de alocare, implementate în compilatorul Clang 22. Jetoanele permit identificatori unici pentru operațiunile de alocare a memoriei și alocarea separată a diferitelor tipuri de obiecte pentru a complica exploatarea vulnerabilităților de tip buffer overflow (cu separare, un buffer overflow într-un tip de obiect nu este ușor de exploatat pentru a deteriora alte tipuri de obiecte).
- Mecanismul AF_ALG, exploatat în vulnerabilitatea Copy Fail pentru a modifica datele din memoria cache a paginii, a fost depreciat și este programat să fie eliminat într-o versiune viitoare. AF_ALG activează acceleratoare hardware pentru calcule criptografice în API-ul Crypto al kernelului, dar este utilizat în situații destul de specifice. În kernelul 7.2, suportul pentru I/O asincron, driverele legacy și mecanismul zero-copy în implementările skcipher și aead a fost eliminat din AF_ALG. Doar implementările software ale algoritmilor criptografici sunt păstrate, iar suportul pentru acceleratoarele criptografice hardware în API-ul Crypto al kernelului a fost eliminat, deoarece AF_ALG extinde semnificativ suprafața de atac, dar nu oferă niciun beneficiu de performanță în comparație cu implementările criptografiei în spațiul utilizatorului. AF_ALG a fost utilizat în setul de instrumente Cryptsetup, dar suportul său a fost eliminat în recenta versiune 2.8.7.
- Mecanismul IMA (Integrity Measurement Architecture), care permite unui serviciu extern să verifice starea subsistemelor kernelului pentru a le asigura autenticitatea, a fost suplimentat cu suport pentru exportarea tabelelor interne cu rezultatele măsurătorilor în spațiul utilizatorului și ștergerea acestora din bufferele kernelului pentru a economisi memorie.
- În modulul Landlock, care oferă programelor neprivilegiate mijloacele de a restricționa utilizarea obiectelor kernel Linux (ierarhii de fișiere, socketuri de rețea, ioctl etc.), a fost adăugat suport pentru controlul accesului la socketurile UDP, precum și posibilitatea de a dezactiva selectiv afișarea informațiilor de blocare a obiectelor în jurnal pentru a preveni aglomerarea jurnalului cu informații irelevante.
- Nucleul a fost depreciat de la utilizarea funcției strncpy(), care copiază un număr specificat de octeți dintr-un șir de intrare. Utilizarea funcției strncpy() crea riscul de erori din cauza lipsei unui caracter nul la sfârșitul șirului sau a umplerii suplimentare cu zerouri. În loc de strncpy(), se recomandă utilizarea funcțiilor strscpy() și strscpy_pad() pentru copierea șirurilor terminate în nul, precum și a funcțiilor strtomem_pad(), memcpy_and_pad() și memcpy() pentru copierea șirurilor de o dimensiune fixă cunoscută. Lucrările de depreciere a utilizării funcției strncpy() în kernel au început în 2020 și au necesitat 362 de commit-uri de la 70 de dezvoltatori.
- În hipervizor KVM S-a adăugat suport pentru extensiile Intel MBEC (Mode-Based Execution Control) și AMD GMET (Guest-Mode Execution Trap), care permit gestionarea separată a drepturilor de execuție în kernel și în spațiul utilizatorului în sistemele guest în tabelele de traducere a memoriei. Anterior, extensiile de virtualizare hardware Intel și AMD permiteau marcarea paginilor de memorie ca executabile cu un singur bit, cu separare bazată pe software a drepturilor în kernel și în spațiul utilizatorului la nivel de hipervizor. Utilizarea MBEC și GMET elimină verificările de permisiuni la nivelul hipervizorului și reduce semnificativ transferurile de control care consumă multe resurse de la sistemul guest la hipervizorul VMexit.
- Subsistemul de rețea
- Extensia TCP-AO (TCP Authentication Option, RFC 5925) a fost migrată către noua bibliotecă criptografică libcrypto, simplificând codul și îmbunătățindu-i performanța. TCP-AO permite verificarea antetelor TCP folosind codurile MAC (Message Authentication Code), folosind algoritmii mai moderni HMAC-SHA-1-96 și AES-128-CMAC-96, înlocuind opțiunea TCP-MD5 disponibilă anterior, care se baza pe algoritmul MD5 învechit.
- Numărul de subfluxuri acceptate pentru conexiunile Multipath TCP (MPTCP) a fost mărit de la 8 la 64.
- Au continuat lucrările pentru reducerea utilizării blocării globale rtnl_lock în stiva de rețea a kernelului.
- Nucleul a eliminat implementarea stivei de protocoale AppleTalk, care a fost utilizată în computerele Apple din 1985 și a fost înlocuită în anii 1990 de TCP/IPÎn plus, componentele tehnologiei de transfer de date ATM care nu au legătură cu PPPoATM au fost eliminate, precum și interfețele de rețea ARCnet bazate pe magistrale ISA și PCMCIA, adaptoarele Bluetooth cu interfață PCMCIA, acceleratoarele Chelsea TLS, codul pentru integrarea TLS cu sockmap și suportul pentru benzile de frecvență de 5/10 MHz în stiva wireless cfg80211/mac80211. Din cauza problemelor de blocare nerezolvate și a lipsei de mentenatori, o implementare specifică a accelerării procesării TLS bazată pe TCP Offload Engine a fost eliminată (implementarea mai comună a offload-ului TLS este păstrată). Codul de compatibilitate cu x_tables pe 32 de biți pe sistemele pe 64 de biți a fost dezactivat și este programat pentru eliminare.
- Driverul pppoe acceptă acum mecanismele GRO (Generic Receive Offload) și GSO (Generic Segmentation Offload) pentru accelerarea hardware a reasablării și segmentării pachetelor. Utilizarea GRO și GSO crește semnificativ debitul traficului de intrare. De exemplu, pe dispozitivele MediaTek MT7621 configurate cu un traducător de adrese, debitul maxim a crescut de la 130 Mbit/s la 630 Mbit/s.
- Оборудование
- Driverul AMDGPU include acum suport inițial pentru tehnologia HDMI 2.1 FRL (Fixed Rate Link), permițând transmiterea de videoclipuri necomprimate la 4K/120Hz și 8K/60Hz. Suportul HDMI 2.1 era anterior imposibil de utilizat în driverele open-source din cauza cerințelor de licențiere HDMI Forum, dar AMD a obținut acum o implementare similară.
- Driverul i915 acceptă acum setarea culorii de fundal pentru controlerul de afișare. Parametrul pin_params.needs_low_address a fost implementat.
- Lucrările au continuat la driverul Xe DRM (Direct Rendering Manager) pentru GPU-uri bazate pe arhitectura Intel Xe, care este utilizată în plăcile grafice din seria Intel Arc și în grafica integrată, începând cu procesoarele Tiger Lake. A fost adăugat suport inițial pentru platforma CRI (Crescent Island). A fost implementat un controler de sistem pentru platformele Xe3p dGPU.
- Driverul Nouveau rezolvă problemele cu placa grafică NVIDIA GA100.
- Driverul v3d a fost actualizat pentru a include capacitatea de a gestiona consumul de energie al GPU-ului v3D pe plăcile Raspberry Pi.
- Am continuat să integrăm componentele driverelor Nova pentru GPU-urile NVIDIA echipate cu firmware GSP, utilizate încă de la seria NVIDIA GeForce RTX 2000, bazată pe microarhitectura Turing. Driverul este scris în Rust. A fost adăugat suport pentru GPU-urile din seriile NVIDIA GA100, Hopper și Blackwell.
- S-a adăugat suport pentru plăci de bază ARM, SoC și dispozitive: Apple t8122 (M3), Motorola Edge 30, Nothing Phone 3a, Google Pixel 3a XL, Qualcomm Dragonwing IPQ9650, Huawei Hawi, ZTE zx297520v3, Renesas R-Car M3Le, ASPEED AST27xx, Cortina Gemini, NXP i.MX6/8/9, NXP LX2160A, TI K3 AM62x.
În același timp, Fundația Latino-Americană pentru Software Liber a creat o versiune complet gratuită a kernelului 7.2 - Linux-libre 7.2-gnu, curățat de elementele de firmware și driver care conțin componente nelibere sau secțiuni de cod cu domeniu de aplicare limitat de către producător. Versiunea 7.2 include o curățare a blob-urilor pentru noile drivere rt722-sdca și tac5xx2. Codul de curățare pentru driverele amdgpu, nova core, qcom iris, q6v5, iwlwifi, amdxnda, adreno, r8152 și mt792x a fost actualizat. Interfețele pentru încărcarea firmware-ului au fost ajustate. Numele blob-urilor din fișierele devicetree (dts) pentru cipurile ARM au fost curățate.
Sursa: opennet.ru
