Lansarea nucleului Linux 6.3

După două luni de dezvoltare, Linus Torvalds a prezentat versiunea kernel-ului Linux 6.3. Printre cele mai notabile schimbări se numără: curățarea platformelor ARM învechite și a driverelor grafice, continuarea integrării suportului pentru limbajul Rust, utilitarul hwnoise, suportul pentru structuri de tip arbore roșu-negru în BPF, modul BIG TCP pentru IPv4, testul de performanță integrat Dhrystone, posibilitatea de a interzice execuția în memfd, suportul pentru crearea driverelor HID folosind BPF, precum și modificările în Btrfs pentru reducerea fragmentării grupurilor de blocuri.

Noua versiune conține 15637 de corecții de la 2055 de dezvoltatori; dimensiunea patch-ului este de 76 MB (modificările au afectat 14296 de fișiere, au fost adăugate 1023183 de linii de cod și au fost șterse 883103 de linii). Spre comparație, în versiunea anterioară au fost propuse 16843 de corecții de la 2178 de dezvoltatori; dimensiunea patch-ului a fost de 62 MB. Aproximativ 39% din toate modificările din kernel-ul 6.3 sunt legate de driverele de dispozitive, aproximativ 15% sunt legate de actualizarea codului specific arhitecturilor hardware, 10% se referă la stiva de rețea, 5% la sistemele de fișiere, iar 3% la subsistemele interne ale kernel-ului.

Principalele noutăți din kernel 6.3:

  • Memorie și servicii de sistem
    • A fost efectuată o curățare semnificativă a codului legat de plăcile ARM vechi și neutilizate, ceea ce a permis reducerea dimensiunii textelor sursă ale kernel-ului cu 150 de mii de linii. Peste 40 de platforme ARM vechi au fost șterse.
    • A fost implementată posibilitatea de a crea drivere pentru dispozitive de intrare cu interfața HID (Dispozitiv de Interfață Umană), implementate sub formă de programe BPF.
    • A fost continuat transferul de funcționalitate suplimentară din ramura Rust-for-Linux, legată de utilizarea limbajului Rust ca al doilea limbaj pentru dezvoltarea driverelor și modulelor kernel-ului. Suportul pentru Rust nu este activ pe deplin și nu conduce la includerea Rust în lista dependențelor de compilare obligatorii pentru kernel. Funcționalitatea propusă în versiunile anterioare a fost extinsă cu suport pentru tipuri precum Arc (implementarea pointerilor cu contor de referințe), ScopeGuard (care efectuează curățarea la ieșirea din domeniu) și ForeignOwnable (asigură mutarea pointerilor între codul scris în C și Rust). Din pachetul 'alloc' a fost eliminat modul 'borrow' (tipul 'Cow' și tipul 'ToOwned'). Se observă că starea suportului Rust în kernel este deja aproape de a începe acceptarea primelor module scrise în Rust.
    • În User-mode Linux (rularea nucleului ca proces de utilizator) pe sistemele x86-64 a fost implementat suportul pentru cod scris în limbajul Rust. A fost adăugat suportul pentru compilarea User-mode Linux cu ajutorul clang, incluzând optimizări în timpul legării (LTO).
    • A fost adăugată utilitarul hwnoise pentru a monitoriza întârzierile cauzate de specificitatea hardware-ului. Se determină abaterile în timpul execuției operațiunilor (jitter) atunci când procesarea întreruperilor este dezactivată, depășind o micros eundă la fiecare 10 minute de calcul.
    • A fost adăugat un modul de nucleu cu implementarea testului de performanță Dhrystone, care poate fi utilizat pentru a evalua performanța CPU în configurații fără componente de spațiu utilizator (de exemplu, în etapa de portare pentru noi SoC-uri, pe care este implementat doar nucleul).
    • A fost adăugat parametrul de linie de comandă a nucleului „cgroup.memory=nobpf”, care dezactivează contabilizarea consumului de memorie pentru programele BPF, ceea ce poate fi util pentru sistemele cu containere izolate.
    • Pentru programele BPF s-a propus implementarea unei structuri de date arbori roșu-negru, folosind kfunc + kptr (bpf_rbtree_add, bpf_rbtree_remove, bpf_rbtree_first) în locul adăugării unui nou tip de mapare.
    • În mecanismul secvențelor restartabile (rseq, restartable sequences) a fost adăugată capacitatea de a transmite procesoarelor identificatori pentru execuția paralelă (memory-map concurrency ID), identificați cu numărul CPU. Rseq oferă mijloace pentru executarea rapidă și atomică a operațiunilor, care, în cazul întreruperii de către un alt fir, sunt curățate și se face o nouă încercare de execuție.
    • Pe procesoarele ARM a fost asigurat suportul pentru instrucțiunile SME 2 (Scalable Matrix Extension).
    • Pentru arhitecturile s390x și RISC-V RV64 a fost implementat suportul pentru mecanismul „BPF trampoline”, care permite minimizarea cheltuielilor de transfer pentru apelurile între nucleu și programele BPF.
    • Pe sistemele cu procesoare bazate pe arhitectura RISC-V a fost implementată utilizarea instrucțiunilor „ZBB” pentru accelerarea operațiunilor cu șiruri.
    • Pentru sistemele bazate pe arhitectura setului de comenzi LoongArch (utilizată în procesoarele Loongson 3 5000 și implementând un nou RISC ISA, similar cu MIPS și RISC-V) a fost implementat suportul pentru randomizarea spațiului de adrese al nucleului (KASLR), modificarea amplasamentului nucleului în memorie (relocation), puncte de oprire hardware și mecanismul kprobe.
    • În mecanismul DAMOS (Schemes de Operare bazate pe Monitorizarea Accesului la Date), care permite eliberarea memoriei în funcție de frecvența de acces la aceasta, a fost implementat suport pentru filtrele ce exclud din procesare anumite zone de memorie în DAMOS.
    • În biblioteca standard C minimă Nolibc a fost implementat suport pentru arhitectura s390 și setul de instrucțiuni Arm Thumb1 (pe lângă suportul pentru ARM, AArch64, i386, x86_64, RISC-V și MIPS).
    • A fost efectuată o optimizare a objtool pentru a accelera construirea nucleului și a reduce consumul maxim de memorie în timpul compilării (în modul de compilare "allyesconfig" nu mai apar probleme cu terminarea forțată a proceselor pe sistemele cu 32 GB RAM).
    • S-a întrerupt suportul pentru compilarea nucleului cu compilatorul Intel ICC, care a fost nefuncțional de o lungă perioadă de timp și nimeni nu a manifestat dorința de a rezolva problema.
  • Subsistemul de disc, I/O și sistemele de fișiere
    • În tmpfs a fost implementat suport pentru maparea identificatorilor utilizatorilor pe sistemele de fișiere montate, utilizat pentru a asocia fișierele unui anumit utilizator pe o partiție montată de alt utilizator cu un alt utilizator din sistemul curent.
    • În Btrfs, pentru a reduce fragmentarea grupurilor de blocuri, s-a asigurat separarea extintelor în funcție de dimensiune la alocarea blocurilor, adică orice grup de blocuri este acum limitat la extinte mici (până la 128KB), medii (până la 8 MB) și mari. A fost refactorizat codul implementării raid56. A fost reproiectat codul pentru verificarea sumelor de control. Au fost efectuate optimizări de performanță, care au permis accelerarea operației de trimitere de până la 10 ori prin cache-uirea utime pentru directoare și executarea comenzilor doar atunci când este necesar. Execuția operațiunilor fiemap a fost accelerată de trei ori prin omisiunea verificărilor de referință pentru datele partajate (snapshot-uri). Operațiile cu metadate au fost accelerate cu 10% prin optimizarea căutării cheilor în structurile b-tree.
    • Performanța FS ext4 a fost îmbunătățită datorită posibilității de a efectua simultan operațiuni de intrare/ieșire directă din mai multe procese în blocuri pre-alocate, folosind blocări comune de inode în loc de blocări exclusive.
    • În f2fs s-au realizat lucrări pentru îmbunătățirea lizibilității codului. Au fost rezolvate probleme importante legate de scrierea atomică și de noul cache de extinte.
    • În sistemul de fișiere EROFS (Enhanced Read-Only File System), destinat utilizării în partiții accesibile în modul doar citire, a fost implementată posibilitatea de a lega operațiunile de decompresie a conținutului fișierelor de CPU pentru a reduce întârzierile la accesarea datelor.
    • În programul de planificare a inputului/outputului BFQ a fost adăugată suportul pentru unități avansate de stocare pe discuri rotative, cum ar fi cele care folosesc mai multe capete de citire/scriere gestionate separat (Multi Actuator).
    • În implementarea clientului și server NFS a fost adăugată suportul pentru criptarea datelor utilizând algoritmul AES-SHA2.
    • În subsistemul FUSE (Filesystems In User Space) a fost adăugată suportul pentru un mecanism de extindere a cererilor, care permite includerea de informații suplimentare în cerere. Pe baza acestei posibilități a fost implementată adăugarea identificatorilor de grup în cererea de FS, necesară pentru gestionarea drepturilor de acces la crearea obiectelor în FS (create, mkdir, symlink, mknod).
  • Virtualizare și securitate
    • În hipervizorul KVM pentru sisteme x86 a fost adăugată suportul pentru apeluri avansate de hipervizor Hyper-V și asigurarea trecerii acestora către un handler care funcționează în mediul host în spațiul utilizatorului. Această modificare a permis implementarea suportului pentru rularea înnodată a hipervizorului Hyper-V.
    • În KVM a fost simplificată restricționarea accesului sistemului gazdă la evenimentele PMU (Performance Monitor Unit) legate de măsurarea performanței.
    • În mecanismul memfd, care permite identificarea unei zone de memorie printr-un descriptor de fișier transmis între procese, a fost adăugată posibilitatea de creare a zonelor în care execuția codului este interzisă (memfd neexecutabil) și unde nu este posibilă în viitor setarea drepturilor de execuție.
    • A fost adăugată o nouă operațiune prctl PR_SET_MDWE, care blochează încercările de a activa drepturile de acces la memorie, care permit simultan scrierea și execuția.
    • A fost adăugată și activată implicit protecția împotriva atacurilor de tip Spectre, implementată pe baza modului automat IBRS (Enhanced Indirect Branch Restricted Speculation) propus în procesoarele AMD Zen 4, care permite aprobarea și interzicerea executării speculative a instrucțiunilor în timpul gestionării întreruperilor, apelurilor sistem și schimbărilor de context. Protecția propusă conduce la costuri reduse în comparație cu protecția Retpoline.
    • A fost remediată o vulnerabilitate care permitea ocolirea protecției împotriva atacurilor Spectre v2 atunci când se utiliza tehnologia multithreading simultan (SMT sau Hyper-Threading) și provocată de dezactivarea mecanismului STIBP (Single Thread Indirect Branch Predictors) atunci când era selectat modul de protecție IBRS.
    • Pentru sistemele bazate pe arhitectura ARM64, a fost adăugată o nouă țintă de compilare „virtconfig”, activând un set minim de componente nucleu necesar pentru boot în sistemele de virtualizare.
    • Pentru arhitectura m68k a fost adăugată suport pentru filtrarea apelurilor de sistem prin intermediul mecanismului seccomp.
    • A fost adăugat suport pentru dispozitivele CRB TPM2 (Command Response Buffer) integrate în procesoarele AMD Ryzen, bazate pe tehnologia Microsoft Pluton.
  • Subsystema de rețea
    • A fost adăugat un interfață netlink pentru configurarea subnivelului de prevenire a coliziunilor PLCA (Physical Layer Collision Avoidance), definit în specificația IEEE 802.3cg-2019 și utilizat în rețele Ethernet 802.3cg (10Base-T1S), optimizate pentru conectarea dispozitivelor internet-of-things și a sistemelor industriale. Utilizarea PLCA permite creșterea performanței în rețele Ethernet cu mediu partajat.
    • Suportul pentru API-ul „wireless extensions” pentru gestionarea interfețelor wireless WiFi 7 (802.11be) a fost întrerupt, deoarece acest API nu include toate setările necesare. Atunci când se încearcă utilizarea API-ului „wireless extensions”, care continuă să fie suportat ca un strat emulator, pentru majoritatea dispozitivelor actuale va fi acum generat un avertisment.
    • A fost pregătită o documentație detaliată pentru API-ul netlink (pentru dezvoltatorii kernel și pentru dezvoltatorii de aplicații în spațiul utilizatorului). A fost implementată utilitarul ynl-gen-c pentru generarea de cod C pe baza specificațiilor YAML ale protocolului Netlink.
    • Suportul pentru opțiunea IP_LOCAL_PORT_RANGE a fost adăugat în sockets rețea pentru simplificarea configurării conexiunilor de ieșire prin traductori de adrese fără utilizarea SNAT. Atunci când se utilizează una adrese IP pe mai multe gazde, IP_LOCAL_PORT_RANGE oferă posibilitatea de a utiliza pe fiecare gazdă propriul interval de porturi rețea de ieșire, iar pe gateway pachetele fiind redirecționate pe baza numerelor de port.
    • Pentru MPTCP (MultiPath TCP) a fost implementată capacitatea de a gestiona fluxuri mixte, care utilizează protocoale IPv4 și IPv6. MPTCP este o extindere a protocolului TCP pentru organizarea functionării conexiunii TCP cu livrarea pachetelor simultan pe mai multe rute, prin diferite interfețe de rețea, asociate cu adrese IP diferite.
    • Pentru IPv4 a fost implementată capacitatea de a utiliza extensia BIG TCP, care permite creșterea dimensiunii maxime a pachetului TCP până la 4GB pentru optimizarea funcționării rețelelor interne de mare viteză ale centrelor de date. O astfel de creștere a dimensiunii pachetului, având un câmp de 16 biți în antet, este obținută prin implementarea pachetelor „jumbo”, dimensiunea din antetul IP fiind setată la 0, iar dimensiunea efectivă fiind transmisă într-un câmp separat de 32 de biți într-un antet atașat.
    • A fost adăugat un nou parametru sysctl default_rps_mask, prin care se poate stabili configurația implicită RPS (Receive Packet Steering), responsabilă pentru distribuția procesării traficului de intrare pe nucleele CPU la nivelul manipulării întreruperilor.
    • A fost încetată suportul disciplinelor de procesare a coadelor pentru limitarea traficului CBQ (class-based queuing), ATM (circuite virtuale ATM), dsmark (marker de serviciu diferențiat), tcindex (index de control al traficului) și RSVP (protocol de rezervare a resurselor). Aceste discipline au fost abandonate de mult timp și nu s-au găsit doritori să continue suportul lor.
  • Echipament
    • Toate driverele grafice bazate pe DRI1 au fost eliminate: i810 (vechi plăci video integrate Intel 8xx), mga (GPU Matrox), r128 (GPU ATI Rage 128, inclusiv plăcile Rage Fury, XPERT 99 și XPERT 128), savage (GPU S3 Savage), sis (GPU Crusty SiS), tdfx (3dfx Voodoo) și via (VIA IGP), care au fost declarate învechite în 2016 și nu mai sunt suportate în Mesa din 2012.
    • Au fost eliminate driverele de frame buffer (fbdev) învechite: omap1, s3c2410, tmiofb și w100fb.
    • A fost adăugat un driver DRM pentru unitățile VPU (Versatile Processing Unit) integrate în CPU Intel Meteor Lake (a 14-a generație), destinate accelerării operațiunilor legate de viziune computerizată și învățare automată. Driverul a fost implementat folosind subsistemul „accel”, destinat suportului acceleratoarelor de calcul, care pot fi furnizate atât sub formă de ASIC separate, cât și sub formă de blocuri IP integrate în SoC și GPU.
    • În driverul i915 (Intel) a fost extins suportul pentru plăcile grafice discrete Intel Arc (DG2/Alchemist), s-a implementat suportul preliminar pentru GPU Meteor Lake și s-a inclus suportul pentru GPU Intel Xe HP 4tile.
    • Driverul amdgpu a adăugat suport pentru tehnologia AdaptiveSync și posibilitatea de a utiliza modul de protecție a datelor afişate pe ecran (Secure Display) cu mai multe monitoare. Suportul pentru DCN 3.2 (Display Core Next), SR-IOV RAS, VCN RAS, SMU 13.x și DP 2.1 a fost actualizat.
    • Driverul msm (GPU Qualcomm Adreno) a adăugat suport pentru platformele SM8350, SM8450, SM8550, SDM845 și SC8280XP.
    • Driverul Nouveau a oprit suportul pentru apelurile vechi ioctl.
    • Driverul etnaviv a adăugat suport experimental pentru NPU VerSilicon (VeriSilicon Neural Network Processor).
    • A fost implementat driverul pata_parport pentru unități IDE conectate prin port paralel. Driverul adăugat a permis eliminarea vechiului driver PARIDE din kernel și modernizarea subsistemului ATA. O limitare a noului driver este imposibilitatea de a conecta simultan o imprimantă și un disc prin portul paralel.
    • Driverul ath12k a fost adăugat pentru plăcile wireless cu cipuri Qualcomm care suportă Wi-Fi 7. Suportul pentru plăcile wireless cu cipuri RealTek RTL8188EU a fost adăugat.
    • A fost adăugat suport pentru 46 de plăci cu procesoare bazate pe arhitectura ARM64, printre care Samsung Galaxy Tab A (2015), Samsung Galaxy S5, BananaPi R3, Debix Model A, EmbedFire LubanCat 1/2, Facebook Greatlakes, Orange Pi R1 Plus, Tesla FSD, precum și dispozitive bazate pe SoC Qualcomm MSM8953 (Snapdragon 610), SM8550 (Snapdragon 8 Gen 2), SDM450 și SDM632, Rockchips RK3128 TV box, RV1126 Vision, RK3588, RK3568, RK3566, RK3588 și RK3328, TI K3 (AM642/AM654/AM68/AM69).

În același timp, Fondul Latino-American pentru Software Liber a creat o variantă complet liberă a kernelului 6.3 - Linux-libre 6.3-gnu, curățată de elemente de firmware și drivere care conțin componente sau porțiuni de cod neprietenoase, ale căror domenii de aplicare sunt limitate de producător. În versiunea 6.3, au fost curățate bloburile din noile drivere ath12k, aw88395 și peb2466, precum și din noile fișiere devicetree pentru dispozitive qcom bazate pe arhitectura AArch64. Codul de curățare a bloburilor din driverele și subsistemele amdgpu, xhci-rcar, qcom-q6v5-pas, sp8870, av7110, precum și din driverele pentru plăcile DVB cu decodare software și din fișierele BPF precompilate a fost actualizat. Curățarea în driverele mga, r128, tm6000, cpia2 și r8188eu a fost oprită, deoarece acestea au fost eliminate din kernel. Curățarea din driverul i915 a fost îmbunătățită.

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