Lansarea nucleului Linux 6.15

După două luni de dezvoltare, Linus Torvalds a prezentat versiunea kernelului Linux 6.15. Printre cele mai notabile schimbări se numără: mecanismul de audit în Landlock, modul de blocare a mapării memoriei, subsystemul fwctl, driverul Nova pentru GPU NVIDIA, implementarea sistemului gazdă pentru hypervisor-ul Hyper-V, suport pentru dispozitive de stocare zonate în XFS, optimizarea subsistemului de rețea, verificarea scrub în Bcachefs, și posibilitatea de control asupra operațiunilor prin io_uring.

Noua versiune include 15.945 corecții de la 2.154 de dezvoltatori, dimensiunea patch-ului fiind de 59 MB (modificările au afectat 13.596 de fișiere, s-au adăugat 739.608 linii de cod și s-au șters 312.168 linii). În versiunea anterioară erau 12.115 corecții de la 1.984 de dezvoltatori, cu un patch de 39 MB. Aproximativ 41% din toate modificările prezentate în 6.15 se referă la driverele de dispozitive, aproximativ 16% la actualizări ale codului specific arhitecturilor hardware, 13% la stiva de rețea, 5% la sisteme de fișiere și 4% la subsystemele interne ale kernelului.

Principalele noutăți în kernelul 6.15:

  • Subsistemul de disc, I/O și sistemele de fișiere
    • În mecanismul fanotify a fost adăugată posibilitatea de a urmări evenimentele de montare și demontare.
    • În XFS a fost adăugată suportul pentru dispozitive de stocare zonate (împărțirea în zone de grupuri de blocuri sau sectoare, în care este permisă doar adăugarea secvențială de date cu actualizarea întregului grup de blocuri). A fost adăugat un flag rwf_dontcache pentru dezactivarea caching-ului la scriere. A fost implementată posibilitatea de scriere atomică a mai multor blocuri de date simultan.
    • În Btrfs a fost implementată posibilitatea de a specifica niveluri negative de compresie zstd (de la -15 la -1, de exemplu, „compress=zstd:-5”), care asigură o viteză de lucru mai mare în detrimentul eficienței compresiei. A fost îmbunătățită caching-ul căilor de fișiere (în testul efectuat, executarea operațiunii „send” s-a accelerat cu 30%). A fost adăugat suport pentru blocuri de dimensiune de 2KB.
    • În EXT4 a fost îmbunătățită performanța la reproducerea jurnalului cu un număr foarte mare de înregistrări retrase (încărcare specifică partițiilor pentru FS Lustre). A fost implementată căutarea liniară a înregistrărilor „dentry” (reprezentare internă a elementelor din directoare), rezolvând problemele de acces la anumite fișiere în modul fără a ține cont de majuscule. Funcționarea opțiunii de montare „errors=remount-ro” a fost ajustată. A fost crescută rezistența la procesarea FS-urilor deteriorate.
    • F2FS a implementat un ioctl pentru a obține informații despre prioritatea operațiunilor de intrare/ieșire pentru un anumit fișier. S-au efectuat lucrări pentru a trece la utilizarea folianților de pagină (page folios).
    • În Bcachefs a fost adăugat modul «scrub», în care se verifică corectitudinea citirii tuturor datelor și metadatelor din FS. În cazul detectării de erori, se lansează o procedură de recuperare. De asemenea, în Bcachefs a fost adăugat suport pentru lucrul cu FS-uri care au dimensiunea blocului mai mare decât dimensiunea paginii de memorie. Formatul structurilor de disc Bcachefs a fost stabilizat (modificările ulterioare ale formatului vor fi realizate sub formă de extensii opționale).
    • În EROFS a fost adăugat suport pentru adresarea blocurilor pe 48 de biți.
    • În subsistemul FUSE au fost implementate sysctl pentru default_request_timeout și max_request_timeout pentru a seta timeout-uri pentru execuția cererilor, ceea ce permite monitorizarea blocajelor componentelor FUSE care funcționează în spațiul utilizatorului. Dimensiunea maximă a numelui fișierelor în FUSE a fost crescută la 1024 de caractere.
    • În apelul de sistem statmount() a fost adăugată posibilitatea de a obține informații despre maparea identificatorilor utilizatorilor sistemelor de fișiere montate, utilizată pentru a corela fișierele unui anumit utilizator pe un alt partaj montat cu un alt utilizator din sistemul curent.
    • A fost realizată posibilitatea de a crea un punct de montare cu o mapare diferită a identificatorilor utilizatorilor față de cel al partajului montat inițial.
    • În API-ul pentru gestionarea montării au fost aduse modificări care facilitează construirea ierarhiilor complexe de sisteme de fișiere fără a dezvălui părțile individuale ale sistemelor de fișiere care trebuie să rămână ascunse.
    • În subsistemul pentru lucrul cu dispozitivele de bloc a fost adăugat suport pentru dispozitive hardware de protecție a cheilor de criptare.
    • În sistemul de fișiere SMB a fost implementată opțiunea is_network_name_deleted și modul smb_server_kerberos5 a fost activat implicit.
    • Pentru FS OverlayFS a fost adăugată opțiunea de montare «override_creds», în care, pentru accesul la nivelurile inferioare ale stocării, vor fi utilizate acreditivele utilizatorului care a invocat, nu ale celui care a efectuat montarea. Această modificare, de exemplu, permite ca, în momentul montării OverlayFS, să fie necesari utilizatori cu privilegii CAP_SYS_ADMIN, dar să folosească FS cu acreditive fără această privilegiu.
    • În exFAT, operațiunile de ștergere a fișierelor au fost accelerate. În loc să trimită cereri „discard” individuale pentru fiecare cluster liberat al fișierului șters, driverul acum grupează cererile. Într-un test efectuat, timpul de ștergere al unui fișier de 80 GB a fost redus de la 286 de secunde la 1.6 secunde.
    • Toate pseudo-sistemele de fișiere, precum și sistemele de fișiere EXT2, au fost migrate la utilizarea noului API de montare a partițiilor.
    • Codul pentru suportul sistemelor de fișiere SYSV (SystemV/386, Xenix și Coherent) a fost eliminat, fiind marcat ca neacceptat (orphaned) începând din 2023.
  • Memorie și servicii de sistem
    • Versiunea minimă necesară pentru compilarea nucleului GCC a fost ridicată la 8.1, iar Clang la 15.0.0.
    • A fost adăugată subsystemul fwctl (Firmware Control), care oferă un API pentru gestionarea sigură a firmware-ului și execuția handlerelor din utilizator. Pe baza fwctl au fost pregătite drivere pentru dispozitivele CXL (Compute Express Link), adaptatoarele Ethernet Mellanox ConnectX (mlx5) și plăcile de servicii AMD/Pensando.
    • Funcționalitățile mecanismului pidfd au fost extinse, permițând utilizarea identificatorilor legați de procese specifice care, spre deosebire de pid, nu pot fi reasociați. A fost posibil să se extragă date despre starea finalizării unui proces identificat prin pidfd după ce procesul părinte a primit confirmarea finalizării procesului copil (reaped) și resursele acestuia au fost eliberate. Au fost adăugate un flag PIDFD_SELF în apelurile de sistem, permițând procesului să facă referire la sine.
    • Pentru arhitectura RISC-V a fost implementat suportul pentru extensiile BFloat16, Zaamo (operații atomice cu memorie), Zalrsc (Load-Reserved/Store-conditional) și ZBKB (operații pe biți pentru criptografie).
    • În timpul trasării a fost posibilă păstrarea argumentelor funcțiilor apelate și afișarea acestora în jurnalele de trasare.
    • În sistemul de intrare/ieșire asincron io_uring a fost adăugat suportul pentru citirea informațiilor despre evenimentele epoll. Utilizarea io_uring pentru procesarea evenimentelor epoll permite reducerea numărului de comutări de context și oferă posibilitatea de a gestiona simultan multiple evenimente epoll.
    • În subsistemul eBPF, a fost îmbunătățită verificarea programelor cu bucle. Au fost adăugate noi instrucțiuni „timed_may_goto”, „load-acquire” și „store-release”. S-a oferit posibilitatea de a modifica atributele extinse ale fișierelor din programele BPF. A fost adăugată funcția try_alloc_pages(), dedicată alocării memoriei în cazul unei probabilități mari de eșec (în timpul rulării programelor BPF în contexte restricționate).

      A fost implementat un nou primitiv de blocări — rqspinlock (Resilient Queued Spin Lock), care identifică în timpul execuției situațiile ce conduc la blocări reciproce. Acest primitiv nou permite încărcarea programelor BPF pentru care verificatorul nu a garantat corectitudinea funcționării cu blocările.

    • Fiabilitatea alocării paginilor mari de memorie (huge-page) a fost semnificativ crescută.
    • Calculul sumelor de verificare CRC64 pe sistemele x86 a fost semnificativ accelerat. Printre altele, pentru a spori viteza, au fost utilizate noi instrucțiuni vectoriale din setul AVX-512. În anumite situații, performanța a crescut de 100 de ori.
    • Continuarea transferului modificărilor din ramura Rust-for-Linux, legate de utilizarea limbajului Rust ca al doilea limbaj pentru dezvoltarea driverilor și modulelor nucleului (suportul pentru Rust nu este activat în mod implicit și nu duce la includerea Rust în lista de dependențe obligatorii pentru compilarea nucleului). A fost oferită posibilitatea utilizării în codul nucleului a macro-ului „#[kunit_tests()]” pentru a rula teste unitare. A fost adăugat suport pentru arhitectura ARMv7. Au fost implementate modulele dma și hrtimer cu legături Rust pentru DMA (adăugate de Linus prin ocolirea mângâitorului, care ulterior a părăsit funcția) și temporizatoare de mare precizie. Modulele ‘list’, ‘str’, ‘sync’, ‘error’ și ‘alloc’ au fost extinse. A fost adăugat suport pentru noul sintaxă ‘&raw’ (raw_ref_op).
    • În subsistemul perf a fost implementată posibilitatea de profilare a întârzierilor, folosind informații de la planificatorul de sarcini.
    • A fost adăugat parametrul din linia de comandă a nucleului „traceoff_after_boot”, care dezactivează trasarea după ce nucleul a fost încărcat și procesul init a fost lansat. Acest parametru poate fi utilizat la diagnosticarea problemelor legate de încărcare, asigurându-se că datele de trasare acumulate în timpul încărcării nu vor fi suprascrise.
    • Suportul pentru sistemele pe 32 de biți x86, care au mai mult de 8 CPU și 4 GB RAM, a fost întrerupt. Astfel de echipamente nu mai sunt produse demult, iar sistemele care necesită aceste resurse au fost migrate la CPU pe 64 de biți.
    • Implementarea timerelor POSIX a suferit modificări care permit instrumentului CRIU (Checkpoint/Restore in Userspace) să salveze și să restaureze identificatorii timerelor.
  • Virtualizare și securitate
    • S-a adăugat suport pentru a utiliza Linux ca mediu rădăcină (Dom0. root partition) pentru hypervisorul Hyper-V (Microsoft Hypervisor). Mediul de gazdă este responsabil pentru gestionarea hypervisorului, organizarea lansării sistemelor guest, alocarea resurselor și asigurarea interacțiunii mașini virtuale cu hardware-ul. Gestionarea hypervisorului Hyper-V în Linux se face prin dispozitivul /dev/mshv.
    • Modulul Landlock, care oferă programelor neprivilegiate instrumente pentru limitarea utilizării obiectelor nucleului Linux (ierarhii de fișiere, socket-uri de rețea, ioctl etc.), a fost suplimentat cu un mecanism de audit. Auditul permite evaluarea detaliată a motivelor blocajelor de acces, generate în timpul utilizării Landlock, oferind, de asemenea, posibilitatea de a înțelege când și ce operație a fost blocată, motivul blocării și ce regulă a fost activată.
    • S-a adăugat suport pentru implementarea în modulele LSM (Linux Security Modules) de controlere care monitorizează accesările sistemului de intrare/ieșire asincron io_uring și permit blocarea utilizării io_uring pentru a ocoli restricțiile de acces la apelurile de sistem. Un astfel de controler a fost implementat în modulul LSM SELinux.
    • În SELinux s-a implementat posibilitatea aplicării politicilor la orice tip de date încărcate în nucleu, inclusiv imagini de firmware, politici de securitate și certificate.
    • A fost adăugată o modalitate de sigilare (seal) pentru unele operațiuni de mapare a memoriei efectuate de nucleu în spațiul de adresare al procesului. Sigilarea trece maparea în modul doar pentru citire și nu permite modificarea în cazul exploatării unei vulnerabilități. Acțiunea se aplică pentru mapările vDSO, vsyscall, vvar, sigpage și uprobes. Modificarea implicită este dezactivată, deoarece poate afecta funcționarea anumitor aplicații. O opțiune de configurare CONFIG_MSEAL_SYSTEM_MAPPINGS a fost adăugată pentru a permite activarea acesteia.
  • Subsystema de rețea
    • S-au continuat eforturile de eliminare a blocării globale a stivei de rețea RTNL (rtnl_lock) și transformarea acesteia în blocări legate de spațiile de nume de rețea separate.
    • A fost adăugată o capacitate inițială de a obține pachete de rețea prin io_uring, copierea conținutului direct în memoria programului în spațiul utilizatorului fără bufferizare intermediară (zero-copy). Testele efectuate au demonstrat că această modificare a permis gestionarea traficului printr-un canal de 200 de gigabiți, folosind un singur nucleu CPU.
    • Au fost implementate sysctl tcp_rto_max_ms și opțiunea TCP-socket TCP_RTO_MAX_MS, prin care se poate stabili timpul maxim între încercările de retransmitere a pachetelor.
    • În BPF a fost adăugată o serie de apeluri callback pentru obținerea informațiilor de timp din diferite locații ale stivei de rețea, ce pot fi folosite pentru diagnosticarea problemelor de latență a rețelei.
    • Au fost adăugate optimizări ale performanței operațiunilor de rețea:
      • Optimizarea GRO (Generic Receive Offload), care combină mai multe pachete mici într-unul mare, este acum activă în timpul transferului de procesare a pachetelor pe un alt CPU (pentru echilibrarea încărcării) utilizând subsistemul XDP (eXpress Data Path), care permite procesarea pachetelor la nivelul driver-ului de rețea înainte de a fi transmise către stiva de rețea. Creșterea performanței în procesarea fluxurilor TCP datorită aplicării acestei optimizări poate atinge de două ori.
      • În condiții de sarcină mare, performanța funcției connect() a fost crescută de două ori prin înlocuirea blocării spin cu un mecanism de sincronizare RCU (Read-Copy-Update) în căutarea înregistrărilor cu informații despre părțile conexiunii (surse și destinații și porturi). De asemenea, s-a realizat o optimizare a hash-ului, care a adus o creștere a performanței cu 229%. adrese IP Implementarea MPTCP (Multipath TCP), o extensie a protocolului TCP pentru livrarea pachetelor simultan pe mai multe rute prin diferite interfete de rețea asociate cu adrese IP diferite, a fost accelerată cu 29% în modul cu un singur flux.
      • În netfilter, în prezența unui socket, s-a oprit executarea operațiunilor de căutare a rutelor în FIB (Forwarding Information Base). Datorită acestei optimizări, performanța a crescut cu 20%.
      • Performanța UDP în condiții de flood a crescut cu 10%, datorită eliminării operațiunilor inutile cu structura sk_tsflags la primirea pachetelor.
      • Performanța UDP în condiții de flood a fost crescută cu 10% prin eliminarea operațiunilor inutile cu structura sk_tsflags la primirea pachetelor.
    • A fost adăugat un driver cu implementarea protocolului MCTP-over-USB.
  • Echipament
    • În nucleu a fost acceptată o implementare inițială a driverului Nova pentru GPU NVIDIA, echipate cu firmware GSP, folosit pe seria NVIDIA GeForce RTX 2000 bazată pe microarhitectura Turing. Driverul este scris în Rust. În prima etapă a fost adăugat doar scheletul nova-core, care cuprinde aproximativ 400 de linii de cod și implementează un nivel de bază de abstractizare asupra interfețelor de programare ale firmware-urilor GSP. În etapa următoare, se planifică includerea în nucleu a driverului DRM nova-drm (Direct Rendering Manager) pentru interacțiunea cu GPU din spațiul utilizatorului, precum și a driverului VFIO cu managerul vGPU, permițând utilizarea GPU-urilor virtuale NVIDIA în sistemele de virtualizare.
    • A fost continuată lucrul asupra driverului drm (Direct Rendering Manager) Xe pentru GPU bazate pe arhitectura Intel Xe, utilizată în plăcile grafice Intel din familia Arc și în grafică integrată, începând cu procesoarele Tiger Lake. A fost adăugată suportul pentru SVM (Shared Virtual Memory), un component al framework-ului DRM care gestionează memoria partajată, utilizată atât de CPU, cât și de GPU.
    • În driverul i915 au fost adăugate identificatori pentru noile GPU-uri.
    • În driverul Nouveau a fost reproiectat GSP RPC și integrat interfața drm_slave_encoder.
    • În driverul AMDGPU a fost implementat suportul pentru arhitectura DCN36 (Display Core Next). A fost adăugată posibilitatea de a stabili propriile curbe de intensitate, utilizate pentru corectarea luminozității display-ului.
    • În driverul adreno a fost adăugat suportul pentru GPU Qualcomm Adreno 623.
    • A fost adăugat suport pentru panourile tactile Apple Touch Bar.
    • A fost adăugat suport pentru a doua versiune a extensiei eUSB2 (eUSB2V2 - Embedded USB2 Version 2.0), care permite reducerea tensiunii de alimentare (până la 1.2 volți) și îmbunătățirea performanței USB 2.0. Viteza de transfer a datelor în eUSB2V2 poate atinge 4.8 Gbps, de 10 ori mai rapidă decât cei obișnuiți 480 Mbps tipici pentru USB 2.0. eUSB2V2 va permite producătorilor de laptopuri să echipeze dispozitivele lor cu camere web de înaltă rezoluție, continuând să utilizeze magistrala Embedded USB2 pentru conectarea acestora.
    • A fost adăugat suport pentru adaptoare Ethernet Intel Killer E5000 (RTL8126).
    • A fost adăugat suport pentru panouri de ecran Visionox RM692E5, Rockchip w552793dba-v10, kingdisplay-kd110n11-51ie și starry-2082109qfh040022-50e.
    • A fost adăugat un driver pentru laptopurile Samsung Galaxy Book.
    • A fost adăugat suport pentru sisteme audio Presonus Studio 1824c, Jabra Evolve 65. A fost adăugat suport pentru module DSP AMD ACP 7.x, AWINC WM88166, Everest ES8388, Intel AVS PEAKVOL și GAIN. A fost îmbunătățit suportul audio pe laptopurile ASUS, HP și Lenovo.
    • A fost adăugat suport pentru plăci ARM, SoC și dispozitive: Arm Morello, AMD (Xilinx) Versal NET, Google Pixel Pro 6, NetCube Kumquat, MYIR Remi Pi, Huawei Matebook E Go, Milk-V Jupiter ST STM32MP2, Mediatek MT8370, Apple T2, Skov (i.MX8MP), EVK (i.MX95), Rockchip RK35xx, Allwinner A523, 11 plăci Toradex bazate pe i.MX6.

Între timp, Fondul Latin American pentru Software Liber a creat o variantă complet liberă a nucleului 6.15 - Linux-libre 6.15-gnu, curățat de elemente de firmware și drivere care conțin componente sau părți de cod nelibre, a căror utilizare este limitată de producător. În versiunea 6.15 a fost neutralizată încărcarea blob-urilor în driverele nova, Qualcomm iris v4l2, Airoha NPU, Tehuti Networks TN40xx 10G ethernet, Realtek 8814A wifi, Apple Silicon SoC touchscreen, Renesas UFS și aw88166 audio. A fost întreruptă curățarea driverului Spider 1Gb ethernet, care a fost eliminat din nucleu. Au fost eliminate linkurile către fișiere binare tivoizate. A fost implementată blocarea încărcării blob-urilor din codul în limbajul Rust.

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