Lansarea nucleului Linux 6.16

După două luni de dezvoltare, Linus Torvalds a prezentat versiunea kernelului Linux 6.16. Printre cele mai notabile modificări: un driver pentru accelerarea OpenVPN, mecanismul Kexec HandOver, activarea implicită a tabelelor de pagini de memorie cu cinci niveluri pentru x86, eliminarea protocolului DCCP, driverul bloc zloop, capacitatea de a trimite core dump-uri prin socket UNIX, suport pentru scrierea atomică în XFS, procesare offload a sunetului pentru dispozitive USB, optimizări în Ext4, driverul virtual TPM (Trusted Platform Module), implementarea completă a Device Memory TCP, suport pentru canale fără nume în io_uring, pregătirea pentru integrarea driverului DRM Asahi, mecanismul „usermode queue” în driverul AMDGPU, suport pentru Intel TDE (Trusted Domain Extensions) și Intel APE (Advanced Performance Extensions).

În noua versiune au fost incluse 15924 de corecturi de la 2145 de dezvoltatori, dimensiunea patch-ului fiind de 50 MB (modificările au afectat 13793 de fișiere, fiind adăugate 655451 de linii de cod și șterse 316441 de linii). În versiunea anterioară au fost 15945 de corecturi de la 2154 de dezvoltatori, dimensiunea patch-ului fiind de 59 MB. Aproximativ 45% din toate modificările incluse în 6.16 sunt legate de driverele de dispozitive, în jur de 16% din modificări au o relevanță pentru actualizarea codului specific arhitecturilor hardware, 13% se leagă de stiva de rețea, 4% de sistemele de fișiere și 3% de subsistemele interne ale kernelului.

Principalele noutăți din kernelul 6.16:

  • Subsistemul de disc, I/O și sistemele de fișiere
    • A fost adăugat driverul zloop pentru crearea de dispozitive loopback zonate, montate în mod loop. Driverul emulează funcționarea dispozitivelor de bloc obișnuite, folosind mai multe fișiere din sistemul de fișiere existent (câte un fișier pentru fiecare zonă). Această funcționalitate poate fi utilă pentru testarea sistemelor de fișiere, a handlerelor de mapper de dispozitive și a aplicațiilor în ceea ce privește suportul pentru dispozitivele zonate care aplică divizarea în zone de grupuri de blocuri sau sectoare, în care se permite doar adăugarea secvențială de date cu actualizarea întregului grup de blocuri.
    • În sistemul de fișiere XFS a fost implementat suportul pentru scrierea atomică a unor porții mari de date — mai multe blocuri pot fi acum scrise în mod atomic (fie toate blocurile vor fi scrise cu succes, fie niciun bloc nu va fi scris).
    • În sistemul de fișiere Ext4, a fost îmbunătățită performanța mecanismului „fast commit”. A fost adăugată suportul pentru folii mari de pagini de memorie (large folios) pentru fișierele obișnuite, ceea ce a crescut performanța cu 37% în testele efectuate în condiții de I/O secvențial intensiv. A fost adăugată suportul pentru operațiuni atomice de scriere care acoperă mai multe blocuri.
    • În driverul pentru sistemul de fișiere ext2, suportul pentru mecanismul DAX, care asigură acces direct la FS fără a trece prin cache-ul de pagini, a fost declarat învechit. Eliminarea DAX din driverul ext2 este planificată pentru sfârșitul anului. Ca motiv se menționează considerarea driverului ext2 ca o implementare standard stabilă, în care utilizarea caracteristicilor specifice, care nu au fost suficient de răspândite, nu este acceptabilă.
    • Sistemele de fișiere OrangeFS, UFS, BFS și OMFS au fost migrate la utilizarea unei noi API de montare a partițiilor.
    • În sysctl a fost adăugată setarea vfs_cache_pressure_denom, pentru a controla numărul de înregistrări din cache-ul „dentry” (reprezentarea internă a elementelor directorului) în condiții de lipsă de memorie în sistem. Cu cât valoarea setată este mai mare, cu atât mai multe înregistrări pot fi eliminate din cache (mai puține vor rămâne în cache) în caz de lipsă de memorie.
    • În FS Bcachefs a fost adăugată opțiunea „rebalance_on_ac_only”, care interzice executarea operațiunilor de reechilibrare și compresie în fundal atunci când sistemul este alimentat de baterie. Operațiunile de ștergere a snapshot-urilor și dispozitivelor au fost accelerate. Consumul de memorie a fost redus la montarea în mod doar citire. A fost adăugată posibilitatea de a porni unele operațiuni de recuperare după o defecțiune în fundal, fără a opri lucrul cu FS.
    • Subsystemul de gestionare a energiei a fost autorizat să execute în mod autonom înghețarea sistemelor de fișiere și variabilelor EFI pentru modurile de așteptare și somn (dacă sistemele de fișiere au fost deja înghețate de gestionarul din spațiul utilizatorului, nu se face o reaplicare a înghețării).
    • A fost adăugată posibilitatea de a accelera performanța EROFS cu ajutorul acceleratorului încorporat în procesoarele Intel QAT (QuickAssist Technology), care oferă instrumente pentru accelerarea calculelor legate de compresie și criptare.
    • În NFS, dimensiunea maximă a porției de date pentru operațiunile de citire și scriere a fost crescută de la 1 la 4 MB (valoarea implicită este de 1 MB, deoarece nu toți clienții suportă o dimensiune mai mare).
    • Utilizatorii neprivilegiați care au drepturi CAP_SYS_ADMIN într-un spațiu de nume pentru identificatorul utilizatorului (user namespace), dar nu au drepturi extinse în spațiul de nume rădăcină, au posibilitatea de a utiliza mecanismul fanotify pentru a urmări modificările în sistemele de fișiere.
    • Pentru sistemele de fișiere care utilizează subsistemul FUSE, a fost introdusă funcționalitatea de a curăța toate înregistrările cache ale directorilor (dentries) dintr-o dată. Subsistemul FUSE a adăugat suport pentru pagini mari de memorie.
    • În sistemul de fișiere OverlayFS a fost implementat suportul pentru crearea de straturi cu date în spații de nume neprivilegiate, pentru care se utilizează controlul integrității bazat pe modulul dm-verity. Această capacitate permite combinarea stratelor de încredere cu metadate cu straturi de date care sunt procesate în spații de nume neprivilegiate.
  • Memorie și servicii de sistem
    • A fost adăugat mecanismul KHO (Kexec HandOver) pentru a lansa un nou nucleu dintr-un nucleu vechi fără a pierde starea sistemului. Înainte de a transfera controlul către noua versiune a nucleului, starea subsistemelor cheie ale nucleului poate fi serializată într-o zonă de memorie care nu va fi afectată de operațiunile ulterioare. Noul nucleu, odată ce primește controlul, restabilește starea serializată înapoi. Pe baza KHO se dezvoltă subsistemul Live Update Orchestrator (LUO), care permite repornirea nucleului fără a opri funcționarea dispozitivelor.
    • A fost adăugat parametru de compilare a nucleului CONFIG_X86_NATIVE, care permite utilizarea opțiunii „-march=native” la compilare pentru a optimiza în funcție de capacitățile procesorului din sistemul curent.
    • A fost adădat suport pentru extinderea arhitecturii setului de instrucțiuni Intel APX (Advanced Performance Extension), oferind 16 registre suplimentare de uz general (în plus față de cele 16 existente), ceea ce permite utilizarea mai puținor operații de citire și scriere în memorie pentru a îmbunătăți performanța și a reduce consumul de energie.
    • A fost adăugat un mod de ajustare automată a politicii de distribuție a memoriei în sistemele NUMA, în care toate greutățile nodurilor sunt recalculate atunci când apare o nouă informație despre lățimea de bandă în timpul încărcării sau la conectarea la cald a memoriei.
    • În implementarea futex-urilor a fost adăugată suport pentru tabla de hash locală a proceselor (local futex_hash_bucket), care, spre deosebire de tabla de hash generală susținută anterior pentru toate procesele, este locală pentru un singur proces și este utilizată în comun de toate firele acestui proces. Tabelele de hash locale sunt folosite doar pentru operațiunea futex PROCESS_PRIVATE. În plus, noul release a adăugat suport pentru opțiunile FUTEX2_NUMA și FUTEX2_MPOL, care permit influențarea amplasării futex-urilor în memorie, pentru a le aduce mai aproape de procesele care le utilizează.
    • Pentru sistemele x86_64 s-a inclus suport permanet pentru tabelele de pagini de memorie cu cinci niveluri (parametrul CONFIG_X86_5LEVEL, care controla activarea tabelelor cu cinci niveluri, a fost eliminat).
    • În driverul intel_pstate, care gestionează parametrii de consum de energie (P-state) pe sistemele cu procesoare Intel, a fost adăugat suport pentru programarea activităților ținând cont de consumul de energie (EAS — Energy Aware Scheduling) pe procesoarele hibride, care combină nuclee CPU de înaltă performanță și eficiente energetic, cum ar fi Intel Lunar Lake.
    • În sysfs au fost adăugate interfețele: "/sys/devices/system/cpu/cpuN/cpu_capacity" pentru a obține informații despre capacitățile diferitelor CPU în procesoarele hibride și "/sys/devices/system/cpu/cpuidle/intel_c1_demotion" pentru a controla posibilitatea de a menține CPU într-o stare mai performantă, chiar și atunci când nucleul încearcă să comute CPU într-o stare de consum mai scăzut (de exemplu, nucleul poate solicita trecerea într-o stare de consum C6, dar firmware-ul, în condiții de intensitate mare a trezirea CPU, poate să-l păstreze în starea C1).
    • Pentru arhitectura ARM64 a fost inclus suport pentru modul de preemptie leneș (PREEMPT_LAZY, lazy preemption), care corespunde modulului de preemptie completă ("full preemption") pentru sarcini realtime (RR/FIFO/DEADLINE), dar întârzie preemptia sarcinilor obișnuite (SCHED_NORMAL) până la marginea tic-tac-ului.
    • Pentru arhitectura ARM64 a fost adăugat suport pentru utilizarea extensiilor SME (Scalable Matrix Extension), care pot fi activate prin parametrul CONFIG_ARM64_SME.
    • Continuarea transferului modificărilor din ramura Rust-for-Linux, care sunt legate de utilizarea limbajului Rust ca a doua limbă pentru dezvoltarea driverelor și modului nucleului (suportul pentru Rust nu este activat implicit și nu determină includerea Rust în lista dependențelor de construcție obligatorii pentru nucleu). Pentru modulele scrise în Rust, este disponibil suportul pentru configfs. S-au adăugat abstracții necesare pentru dezvoltarea driverelor grafice. Au fost extinse funcționalitățile modulelor alloc, time, str, list, workqueue și page. A fost adăugat suportul pentru macro-ul „assert!” în testele bazate pe KUnit. A fost adăugată o suită de abstracții pentru gestionarea frecvenței CPU și utilizarea API-urilor asociate cu gestionarea consumului de energie. A fost adăugat suportul pentru structura de date 'xarray'.
    • Pentru arhitectura RISC-V, implementarea apelului de sistem getrandom() a fost transferată, optimizată prin mecanismul vDSO (virtual dynamic shared object), care permite mutarea handler-ului apelului de sistem din nucleu în spațiul utilizatorului pentru a evita schimbările de context. În teste, optimizarea a accelerat obținerea numerelor aleatoare de 17 ori. Suport pentru extensiile vectoriale Zicbop, Zabha și Svinval, utilizate în procesoarele SiFive, a fost, de asemenea, implementat pentru RISC-V.
    • Pentru arhitectura LoongArch, limita la numărul de CPU-uri din sistem a fost crescută de la 256 la 2048. A fost adăugat suport pentru planificatorul de sarcini SCHED_MC (Multi-core).
    • A fost adăugată posibilitatea utilizării socket-urilor Unix pentru transmiterea descriptorilor de fișiere. Pentru a dezactiva această opțiune, aplicațiile pot utiliza în setsockopt() flag-ul SO_PASSRIGHTS.
    • A fost oferită posibilitatea mapării buffer-ului circular utilizat pentru urmărirea funcționării nucleului în memoria spațiului utilizator.
    • Handler-ii crash-dump, utilizați pentru generarea unui raport de problemă după o închidere neașteptată a nucleului, pot acum utiliza cheile LUKS folosite de nucleul care a provocat eroarea pentru a salva crash-dump-urile în FS criptate.
    • În sistemul de input/output asincron io_uring, a fost adăugată operația IORING_OP_PIPE pentru crearea de canale neaterizate, similar cu apelul de sistem pipe2, cu excepția suportului pentru descriptoare fixe de fișiere.
    • A fost adăugată opțiunea din linia de comandă a nucleului „rt_group_sched” pentru a controla activarea planificatorului de execuție a grupurilor de sarcini realtime (SCHED_RR). Opțiunea este similară cu setarea RT_GROUP_SCHED din Kconfig.
    • Pentru dispozitivele bazate pe magistrala CXL (Compute Express Link), utilizată pentru organizarea unei interacțiuni cu viteză mare între CPU și dispozitivele de memorie, a fost implementat suport pentru extensiile RAS (Reliability, Availability, Serviceability), care permit realizarea diferitelor scheme de detectare și corectare a erorilor. CXL permite conectarea de noi domenii de memorie, furnizate de dispozitive externe de memorie, și utilizarea acestora ca resurse suplimentare în spațiul fizic de adresare pentru extinderea memoriei operaționale (DDR) sau a memoriei permanente (PMEM).
    • Versiunea minimă necesară pentru compilarea nucleului a fost ridicată la ramura GCC 8 pentru toate arhitecturile. Acum, este necesară cel puțin versiunea 2.30 a pachetului binutils pentru compilare.
    • Apelul de sistem uselib() a fost eliminat, acesta fiind considerat învechit de mult timp, iar în locul său, pentru accesul comun al programelor la bibliotecile partajate, se utilizează mmap().
  • Virtualizare și securitate
    • A fost adăugat suport inițial pentru utilizarea mecanismului Intel TDX (Trusted Domain Extensions) pentru a proteja sistemele oaspete care funcționează sub hipervizorul KVM împotriva intervenției și analizei din partea administratorului sistemului gazdă și a atacurilor fizice asupra hardware-ului. Protecția este asigurată prin criptarea memoriei. mașini virtuale.
    • A fost adăugat un driver virtual TPM (Trusted Platform Module), care permite mașinilor virtuale să interacționeze cu dispozitivele TPM (Trusted Platform Module), emulate de modulul SVSM (Secure VM Service Module).
    • A fost reinstituită posibilitatea utilizării pluginului GCC randstruct, care randomizează aranjamentul structurilor de date în etapa de compilare pentru a complica exploatarea vulnerabilităților.
    • A fost adăugată posibilitatea utilizării tehnologiei IMA (Integrity Measurement Architecture) pentru a verifica integritatea la inițierea de noi nuclee prin intermediul apelului de sistem kexec.
    • S-au efectuat lucrări pentru reducerea impactului utilizării SELinux asupra performanței. Pentru a accelera funcționarea, a fost adăugat un cache cu rezultatele verificărilor de acces la directoare. În regulile genfscon a fost adăugată posibilitatea utilizării măștilor.
    • În codul pentru interacțiunea cu EFI a fost oferită posibilitatea încorporării secțiunii SBAT (UEFI Secure Boot Advanced Targeting) cu metadate despre versiunile revocate ale componentelor de boot.
    • În modulele încărcate, a fost realizată trecerea secțiunii „.static_call_sites” în mod de citire după finalizarea inițializării.
    • Pentru sistemele ARM pe 64 de biți, hypervizorul KVM a implementat suportul pentru virtualizarea încorporată (dezactivat în mod implicit).
    • În hypervizorul KVM, suportul pentru arhitectura RISC-V a fost declarat stabil.
  • Subsystema de rețea
    • A fost acceptat driverul ovpn, care permite accelerarea semnificativă a performanței OpenVPN prin mutarea operațiunilor de criptare, procesare a pachetelor și gestionare a canalului de comunicație în nucleul Linux. Driverul reduce costurile asociate cu schimbările de context, optimizând funcționarea prin apeluri directe la API-urile interne ale nucleului și eliminând transferul lent de date între nucleu și spațiul utilizatorului (criptarea, decriptarea și rutarea sunt efectuate de modul fără a trimite traficul la handler-ul din spațiul utilizatorului).
    • În mecanismul Device Memory TCP, a fost adăugat suportul pentru trimiterea datelor din memoria dispozitivului (calea TX). Anterior, pentru a simplifica integrarea Device Memory TCP în nucleu, funcționalitatea era limitată doar la primirea datelor (calea RX). Device Memory TCP permite utilizarea socket-urilor de rețea pentru a trimite direct conținutul memoriei dispozitivului periferic prin rețea (mod zero-copy) și, de asemenea, pentru a plasa direct conținutul pachetelor de rețea în zona de memorie a dispozitivului de partea receptorului. Datele transmise în pachete sunt transferate de la placa de rețea în memoria dispozitivului periferic (DMABUF), de exemplu, în memoria video a GPU-ului, sau din memoria dispozitivului direct în placa de rețea, ocolind CPU-ul, iar capselele pachetelor ajung în bufferele normale ale nucleului.
    • A fost oferită posibilitatea de a trimite conținutul core-dumps prin socket AF_UNIX, ceea ce permite crearea unor handler-e de core-dumps mai sigure în spațiul utilizatorului, care nu depind de apelurile către procesele privilegiate ale nucleului.
    • Suportul pentru protocolul de rețea DCCP (Datagram Congestion Control Protocol) a fost eliminat, deoarece nu a câștigat popularitate și a rămas în nucleu fără suport timp de cinci ani. Eliminarea DCCP din nucleu va elimina obstacolele care împiedică restructurarea datelor inet_connection_sock pentru a spori eficiența funcționării stivei TCP. Suportul pentru modulele netfilter pentru filtrarea pachetelor DCCP a fost păstrat.
    • Pentru a simplifica gestionarea erorilor atunci când se utilizează socket-uri, SO_PEERPIDFD, kernelul poate acum să transmită pidfd pentru procesele deja terminate (pidfd este legat de procese specifice și, spre deosebire de pid, nu este atribuit din nou).
    • Cu ajutorul BPF, acum este posibil să se creeze gestionatori pentru controlul coada de pachete în stiva de rețea (qdiscs) pentru a influența ordinea procesării pachetelor de rețea.
    • În sistemul de fișiere de rețea AFS s-a implementat GSSAPI (Generic Security Services API) pentru a gestiona criptarea conexiunilor cu servers YFS și OpenAFS.
    • Au fost aduse o mare soție de optimizări. A fost reproiectată organizarea blocărilor pentru tabelele de rutare IPv6 (unele operații cu rute se realizează acum de până la 3 ori mai repede). A fost accelerat calculul programatic al sumelor de control crc32c. Motorul GRO pentru trafic UDP tunelat a fost îmbunătățit cu 10%. S-a optimizat auto-configurarea bufferului de primire pentru TCP și s-au crescut limitele implicite (în teste, lățimea de bandă pentru fluxurile individuale printr-un canal de 200Gbs a crescut cu 60%).
    • În Netfilter a fost adăugată posibilitatea de a utiliza măști în numele dispozitivelor de rețea folosite în netdev și flowtable. Infrastructura nft trace a integrat informații despre urmărirea conexiunilor (conntrack). A fost accelerată extragerea tabelelor de urmărire a conexiunilor (conntrack) prin procfs.
  • Echipament
    • S-a adăugat suport pentru externalizarea procesării fluxurilor audio pe partea dispozitivelor audio cu interfață USB (USB audio offload). Această modificare permite reducerea semnificativă a consumului de energie al dispozitivelor portabile, prin continuarea procesării fluxului audio în timp ce restul sistemului este în modul de somn. Anterior, în nucleele pentru platforma Android exista o implementare specifică a procesării offload a sunetului pentru dispozitive USB, iar acum în nucleul principal a apărut o implementare universală, pe care o pot folosi orice proiecte.
    • Integrarea componentelor driverului Nova pentru GPU NVIDIA, echipate cu firmware GSP, a fost continuată, utilizate începând cu seria NVIDIA GeForce RTX 2000 bazată pe microarhitectura Turing. Driverul este scris în Rust. Pe lângă componenta nova-core, adăugată în versiunea anterioară, care implementează nivelul de bază de abstracție asupra interfețelor de programare ale firmware-ului GSP, versiunea 6.16 include o implementare inițială a driverului DRM nova-drm (Direct Rendering Manager) pentru interacțiunea cu GPU-ul din spațiul utilizatorului.
    • A început procesul de promovare în kernel al driverului DRM Asahi pentru GPU Apple AGX, utilizate în cipurile Apple Silicon. Driverul este scris în Rust. În această etapă, în kernel au fost incluse doar fișierele de antet UAPI de la driverul Asahi, necesare pentru Mesa, iar codul principal al driverului Asahi va fi integrat ulterior.
    • Driverul Nouveau a adăugat suport pentru GPU NVIDIA din familia Hopper și Blackwell.
    • A fost continuată munca asupra driverului drm (Direct Rendering Manager) Xe pentru GPU bazate pe arhitectura Intel Xe, utilizată în plăcile video Intel din familia Arc și în grafica integrată, începând cu procesoarele Tiger Lake. A fost adăugată posibilitatea de a utiliza diferite fișiere firmware pentru diferite familii de GPU Intel.
    • Driverul AMDGPU a implementat suport pentru mecanismul „usermode queue”, permițând crearea propriilor cozi de sarcini în spațiul utilizatorului și trimiterea lor direct către GPU fără a apela la scheduler-ul din kernel. Suportul „usermode queue” a fost activat pentru GPU Navi 4X și GFX 12.
    • A fost adăugat suport pentru sistemele audio Intel WCL (Whiskey Lake), AMD ACP 7.x (Audio Co-Processor), Cirrus Logic CS35L63 și CS48L32, Everest Semiconductor ES8375 și ES8389, Pioneer DJM-V10, Longsoon-1 AC’97, NVIDIA Tegra264, Richtek ALC203, RT9123 și Rockchip SAI, precum și pentru noile platforme Intel AVS.
    • A fost adăugat suport pentru platformele ARM, SoC și dispozitivele: Samsung Exynos7870, Qualcomm Snapdragon X1P42100, Qualcomm MSM8926, RK3562, NXP i.MX94, Renesas RZ/V2N, Amlogic S6/S7/S7D, WonderMedia wm8950, Amlogic s805y, Allwinner A523, Toradex Verdin AM62P, ROCK 5B+, Nitrogen8M Plus, Retronix R-Car V4H Sparrow Hawk, MT8186 Ponyta Chromebook, VIA APC Rock/Paper, Renesas rz/t2h, ASUS Transformer Pad LTE TF300TL, LG Nexus 4, Google Pixel 4a, Raspberry Pi 2.
    • Driverul pentru plăcile de captură video pe cipurile STA2X11 a fost eliminat.

Între timp, Fundația Latino-Americană pentru Software Liber a creat o variantă complet liberă a nucleului 6.16 — Linux-libre 6.16-gnu, curățată de elemente de firmware și drivere care conțin componente nesigure sau părți de cod a căror utilizare este limitată de producător. În versiunea 6.16, a fost neutralizată încărcarea blob-urilor în noile drivere Intel qat 6xxx crypto, ST vd55g1 sensor, ath12k AHB wifi, Aeonsemi AS21xxx și MediaTek 25Gb Ethernet. Au fost curățate numele blob-urilor în fișierele dts (devicetree) pentru cipurile ARM Qualcomm și MediaTek. Codul de curățare a blob-urilor a fost actualizat în driverele Nova Core, Nouveau, Ethernet Realtek r8169, Qualcomm Iris, Venus, wifi Mediatek mt7996, Qualcomm ath11k și ath12k wifi, Texas Instruments tas2781 și Renesas R-Car gen4 PCIe.

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