Lansarea nucleului Linux 6.17

După două luni de dezvoltare, Linus Torvalds a prezentat versiunea kernel-ului Linux 6.17. Printre cele mai notabile schimbări se numără: îmbunătățirea performanței Btrfs, apelurile de sistem file_getattr() și file_setattr(), unificarea configurațiilor uni- și multi-procesor în planificatorul de sarcini, modulul DAMON_STAT pentru statisticile de acces la memorie, suportul pentru live patch-uri pe sistemele ARM64, trimiterea core dump-urilor prin socket AF_UNIX, limitarea SCHED_EXT prin cgroup, simplificarea configurării protecției împotriva vulnerabilităților CPU, construcția în Clang cu inițializarea variabilelor în stivă, protecția împotriva substituției /proc, extinderea subsistemului RV (Runtime Verification), limitarea socket-urilor AF_UNIX prin AppArmor și algoritmii de control al suprasarcinilor TCP DualPI2.

Noua versiune a primit 14334 de corecții de la 2118 de dezvoltatori, dimensiunea patch-ului fiind de 46 MB (schimbările au vizat 12841 de fișiere, adăugând 646654 de linii de cod și ștergând 398782 de linii). În versiunea anterioară au fost 15924 de corecții de la 2145 de dezvoltatori, dimensiunea patch-ului fiind de 50 MB. Aproximativ 43% din toate schimbările prezentate în 6.17 sunt legate de driverele de dispozitive, aproximativ 12% se referă la actualizarea codului specific arhitecturilor hardware, 14% la stiva de rețea, 4% la sistemele de fișiere și 3% la subsistemele interne ale kernel-ului.

Principalele noutăți din kernel-ul 6.17 (1, 2, 3):

  • Subsistemul de disc, I/O și sistemele de fișiere
    • În Btrfs a fost adăugat suport experimental pentru paginile mari de memorie (large folios), care permit reducerea costurilor și îmbunătățirea performanței unor operațiuni. A fost implementată memorizarea în cache a solicitărilor către bitmap-urile de distribuție a spațiului liber, ceea ce a crescut performanța creării fișierelor goale cu 20%. A fost îmbunătățită funcționarea citirii anticipate în sistemele care aplică compresia datelor. S-a realizat o plasare mai compactă a cheilor în structura XArray, ceea ce a crescut compactitatea stocării nodurilor arborelui de extent-uri și a redus numărul de noduri finale cu 50-70%. Au fost furnizate opțiuni suplimentare pentru utilizarea compresiei în extent-uri defragmentate.
    • În FS ext4 a fost adăugat suport pentru operațiuni de intrare/ieșire în buffer cu flag-ul RWF_DONTCACHE, prin care datele sunt șterse din cache-ul paginilor imediat după finalizarea operațiunii.
    • În FS EROFS a fost implementat suport pentru compresia metadatelor.
    • Serverul NFS poate acum să delege operațiunile de scriere către clienții care deschid fișiere în modul doar pentru scriere.
    • În apelul de sistem fallocate() a fost adăugată opțiunea FALLOC_FL_WRITE_ZEROES, care permite umplerea cu zerouri a unui interval specificat în fișier, folosind comanda WRITE_ZERO, suportată de unele SSD-uri, care efectuează anularea fără operații de intrare/ieșire. Opțiunea este disponibilă momentan doar pentru sistemul de fișiere ext4.
    • Au fost adăugate apeluri de sistem file_getattr() și file_setattr() pentru manipularea atributelor inode-ului unui fișier dat.
    • Driverul „pktcdvd” pentru lucrul cu suporturi optice în modul pachet a fost eliminat, fiind marcat ca învechit în 2016.
    • Sistemul de fișiere Bcachefs din kernelul Linux a fost trecut la un mod de întreținere externă, ceea ce presupune oprirea acceptării modificărilor pentru Bcachefs în compunerea principală a kernelului, păstrând acest sistem de fișiere în baza de cod a kernelului. Dezvoltarea Bcachefs va avea loc în afara bazei de cod a kernelului până când Kent Overstreet va demonstra efectiv capacitatea de a interacționa corect cu alți dezvoltatori ai kernelului și abilitatea de a respecta regulile stabilite de dezvoltare.
  • Memorie și servicii de sistem
    • Suportul pentru configurații cu un singur procesor a fost eliminat din planificatorul de sarcini. Pe sistemele cu un singur procesor, acum ar trebui să se folosească kerneluri compilate pentru sisteme multiprocesor (SMP). Codul pentru sisteme uniprocesor și multiprocesor a fost unificat și eliberat de legăturile inutile cu parametrul kernel CONFIG_SMP.
    • A fost adăugat modulul kernel DAMON_STAT (Statistica Rezultatelor Monitorizării Accesului la Date), care permite monitorizarea accesului la memoria RAM, folosind subsistemul DAMON (Data Access MONitor). Modulul oferă statistici despre inactivitate (memory_idle_ms_percentiles) și lățimea de bandă de memorie estimată (estimated_memory_bandwidth).
    • Pe sistemele cu arhitectură ARM64 a fost implementat suportul pentru patch-uri Live, care permit aplicarea de corecții asupra kernelului Linux în timp real, fără repornire și oprirea sistemului.
    • În biblioteca minimală C nolibc, furnizată în cadrul codurilor sursă ale kernelului Linux și care oferă un wrapper pentru apelurile sistemice de bază, a fost implementat suportul pentru arhitecturile SuperH, x32, MIPS n32 și MIPS n34.
    • A fost extinsă capacitatea de a trimite conținutul core-dump-urilor prin socket AF_UNIX, permițând crearea unor manipulatoare de core-dump-uri mai sigure în spațiul utilizatorului, fără a depinde de apelurile kernelului către procese privilegiate. În noua versiune a fost adăugat un protocol pentru crearea servere, capabile să gestioneze procesarea core dump-urilor la nivelul sarcinilor individuale. De exemplu, unele procese pot ignora core dump-urile, iar altele le pot transmite prin socket. A fost pregătit un prototip de server pentru gestionarea core dump-urilor.
    • A fost adăugată opțiunea de linie de comandă a kernel-ului „crashkernel=size,cma” pentru a rezerva prin CMA (Contiguous Memory Allocator) memorie pentru salvarea crash dump-ului kernel-ului.
    • S-au extins capacitățile mecanismului pidfd, care permite utilizarea identificatorilor legați de anumite procese și, spre deosebire de pid, nu pot fi reconstruiți. A fost adăugată posibilitatea de a asocia atribute extinse la pidfd din spațiul utilizatorului. S-a permis deschiderea descriptorilor de fișiere pentru pidfd prin funcția open_by_handle_at() fără legătura cu sistemul de fișiere. Informațiile interne create de kernel împreună cu pidfd sunt acum asociate cu procesul, nu cu pidfd, și sunt păstrate între reaprinderea aceluiași proces.
    • A fost adăugată funcția bpf_cgroup_read_xattr() în subsistemul BPF pentru a citi atributele extinse ale fișierelor. A fost oferită posibilitatea utilizării în programele BPF a operațiunilor funcționale de tip string, cum ar fi bpf_strcmp, bpf_strnchr, bpf_strchrnul, bpf_strlen și bpf_strspn, care funcționează în mod de citire. A fost adăugată posibilitatea utilizării fluxurilor standard stdout și stderr pentru interacțiunea cu componentele din spațiul utilizatorului. Pentru sistemele bazate pe arhitectura LoongArch, în BPF a fost implementată capacitatea de modificare dinamică a codului, mecanismul „BPF trampoline” (reduce suprasarcina în transmiterea apelurilor între kernel și programele BPF) și lansarea programelor care utilizează struct_ops pentru a crea manipulatoare de funcții kernel prin BPF.
    • În sistemul de contabilitate a timpului, a fost implementat suportul pentru ceasuri auxiliare (auxiliary), care nu sunt legate de ceasurile sistemului obișnuite și funcționează într-un ritm propriu (anterior, toate ceasurile funcționau cu același ritm și se deosebeau doar prin offset).
    • A fost adăugat suportul inițial pentru execuția proxy (Proxy Execution) pentru a atenua problemele de inversare a priorităților. Execuția proxy permite sarcinii, care așteaptă eliberarea unei blocări, să transmită contextul său de execuție sarcinii care păstrează blocarea, pentru a accelera eliberarea acestei blocări.
    • Continuarea transferului modificărilor din ramura Rust-for-Linux, legate de utilizarea limbajului Rust ca a doua limbă pentru dezvoltarea driverelor și modulelor de kernel (suportul Rust nu este activat în mod implicit și nu conduce la includerea Rust în lista obligatorie de dependențe de compilare a kernel-ului). Au fost adăugate abstracții pentru gestionarea controlerelor de tensiune și curent, caracteristicilor firmware-ului, resurselor de intrare/ieșire și memoriei de intrare/ieșire. A fost implementat macro-ul „warn_on!()”. A fost adăugat tipul UserPtr pentru pointere în spațiul utilizatorului. Funcționalitatea modulelor workqueue, uaccess, dma, time și list a fost extinsă. A fost adăugat modul ‘bits’ cu funcțiile ‘bit’ și ‘genmask’.
    • Codul pentru calcularea sumelor de control CRC a fost reproiectat și au fost adăugate noi apeluri pentru generarea hash-urilor SHA-1 și SHA-2. Au fost adăugate optimizări specifice arhitecturilor hardware. Performanța funcției crc32c() a fost îmbunătățită pe noile CPU x86_64 care suportă extensia VPCLMULQDQ (Vector Carry-Less Multiplication of Quadwords).
    • Pentru sistemele S390 a fost implementat suportul pentru executarea în zona de memorie de swap și migrarea paginilor mari de memorie (transparent huge page).
    • S-a adăugat posibilitatea de a configura agresivitatea eliberării paginilor de memorie (proactive-reclaim) în caz de insuficiență legată de nodurile NUMA individuale, ceea ce permite dedicarea nodurilor NUMA pentru care va fi aplicată o eliberare mai activă a memoriei. De exemplu, „echo „512M swappiness=10″ > /sys/devices/system/node/node1/reclaim”.
    • În mecanismul SCHED_EXT, care permite utilizarea BPF pentru crearea planificatorilor CPU, a fost adăugată posibilitatea de a gestiona lățimea de bandă prin cgroup. De exemplu, se poate utiliza parametrul cpu.max pentru a limita sarcina pe CPU.
    • A fost declarat învechit montajul automat al FS-ului virtual tracefs în directorul /sys/kernel/debug/tracing, acesta fiind înlocuit cu /sys/kernel/tracing.
  • Virtualizare și securitate
    • A fost adăugată posibilitatea de activare protecție împotriva vulnerabilităților în CPU prin selectarea vectorilor de atac blocați în locul specificării în setările vulnerabilităților concrete. Metodele de blocare sunt alese în funcție de tipul încălcării izolației: între utilizator și kernel (user-kernel), între utilizator și alt utilizator (user-user), între sistemul guest și mediul host (guest-host), între diferite sisteme guest (guest-guest) și între diferite fire de execuție (cross-thread). Abordarea propusă oferă posibilitatea de a activa doar protecția împotriva acelora clase de vulnerabilități care îi preocupă realmente pe utilizatori. De exemplu, proprietarii de medii cloud pot activa modurile guest-host și guest-guest, după care vor fi activate metodele de protecție împotriva vulnerabilităților BHI, GD, L1TF, MDS, MMIO, Retbleed, RFDS, Spectre_v2, SRBDS, SRSO și TAA.
    • A fost adăugată suport pentru compilatorul Clang cu activarea modului de urmărire a adâncimii stivei, în care toate variabilele stocate în stivă sunt inițializate. Inițializarea se face pentru a preveni scurgerea informațiilor din kernel prin intermediul variabilelor neinițializate, care pot conține resturi ale datelor stocate anterior în stivă. Până acum, o posibilitate similară era suportată prin utilizarea pluginului GCC STACKLEAK.
    • A fost adăugată protecție împotriva atacurilor de substituție a sistemului de fișiere /proc prin montare în modul „bind”. Numărul inode-ului rădăcinii /proc este acum fixat (PROCFS_ROOT_INO) și poate fi verificat de proces în spațiul utilizatorului.
    • În subsistemul RV (Verificarea În Executare), destinat verificării corectitudinii funcționării sistemelor de înaltă fiabilitate, a fost adăugat un component de monitorizare rtapp (Real-time application monitor) pentru a urmări problemele tipice în aplicațiile care funcționează în timp real, precum și componentele rp, sssw și opid pentru testarea planificatorului de sarcini. A fost implementată posibilitatea de a crea componente de monitorizare care folosesc logica temporală liniară pentru a defini modelul de comportament, în locul unui automat determinist. Verificarea se face în timpul execuției prin atașarea handlerelor la punctele de urmărire, care compară parcursul efectiv cu un model de referință predefinit, care definește comportamentul așteptat al sistemului.
    • În sistemul AppArmor a fost adăugată suport pentru gestionarea accesului la socket-urile AF_UNIX.
    • În hypervisorul KVM pe sistemele ARM a fost implementat suport pentru controllerul de întreruperi GICv5.
    • A fost adăugată setarea CONFIG_KVM_IOAPIC, care permite dezactivarea suportului pentru emularea APIC, PIC și PIT în KVM.
    • A fost adăugată protecția împotriva vulnerabilității VMSCAPE.
    • A fost adăugată comanda ioctl FS_IOC_GETLBMD_CAP pentru obținerea din spațiul utilizatorului a informațiilor despre aplicarea măsurilor de protecție a integrității asupra fișierului.
    • Interfața /sys/fs/selinux/user a fost declarată ca fiind învechită; accesarea acesteia va introduce acum o întârziere de cinci secunde și va genera un avertisment în jurnal.
  • Subsystema de rețea
    • A fost adăugată suportul pentru strategii configurabile de evaluare a bugetului de alimentare în implementarea tehnologiei PSE (Power Sourcing Equipment), folosită pentru alimentarea prin Ethernet a dispozitivelor precum camere IP și puncte de acces wireless. Aceste strategii permit determinarea porturilor care ar trebui dezactivate în primul rând pentru a preveni suprasarcina.
    • A fost adăugată suportul pentru rutarea pachetelor către noduri externe prin noduri intermediare (gateway-routing) în implementarea protocolului MCTP (Management Component Transport Protocol). De exemplu, regulile următoare permit direcționarea pachetelor către nodul cu identificatorul 10 (Endpoint ID 10) prin dispozitivul mctpi2c0, folosind adresa 0x1d, conectată direct la nodul cu identificatorul 9. mctp route add 9 via mctpi2c0 mctp neigh add 9 dev mctpi2c0 lladdr 0x1d mctp route add 10 gw 9
    • Pentru socket-urile UNIX (AF_UNIX) a fost implementată opțiunea SO_INC, iar pentru familia de adrese VSOCK opțiunea SIOCINQ. Opțiunile implementate sunt similare cu opțiunea TCP_INQ pentru TCP și permit obținerea informațiilor despre numărul de octeți disponibili în socket pentru citire printr-un mesaj de control.
    • Pentru TCP a fost activat respectarea strictă a dimensiunii feronice (window) declarate, care determină dimensiunea datelor permise a fi trimise înainte de a primi confirmarea ACK de la cealaltă parte. În trecut, nucleul continua să proceseze datele care depășeau feronicele declarate, dar acum nu va mai face acest lucru.
    • În MPTCP (Multipath TCP) a fost adăugată posibilitatea utilizării opțiunii socket TCP_MAXSEG pentru a limita dimensiunea maximă a segmentelor trimise. MPTCP reprezintă o extensie a protocolului TCP pentru a permite livrarea pachetelor simultan pe mai multe rute prin diferite interfețe de rețea, legate de diferite adrese IP.
    • A fost adăugat suport pentru algoritmul de control al congestionării TCP DualPI2 (RFC 9332), care permite utilizarea controlerelor de congestie scalabile pentru traficul cu cerințe ridicate de calitate a serviciului (de exemplu, TCP-Prague și DCTCP), fără a provoca degradarea performanței traficului clasic, pentru care se aplică astfel de controlere de congestie precum Reno și Cubic.
    • A fost adăugat sysctl «force_forwarding», prin care se poate activa redirecționarea traficului pe interfețele de rețea selectate cu IPv6.
    • A fost eliminat suportul pentru algoritmul de determinare a pierderii pachetelor SACK (Selective Acknowledgment), descris în RFC 6675. Acest algoritm a fost declarat învechit în 2018. Pentru determinarea pierderii pachetelor TCP, se recomandă utilizarea algoritmului RACK-TLP.
  • Echipament
    • Continuă lucrările la driverul drm (Direct Rendering Manager) Xe pentru GPU-uri bazate pe arhitectura Intel Xe, care este utilizată în plăcile video Intel din familia Arc și grafica integrată, începând cu procesoarele Tiger Lake. În noua versiune a fost inclusă în mod implicit suportul pentru cipurile bazate pe microarhitectura Panthor Lake și a fost adăugat suportul pentru microarhitectura WildCat Lake.
    • În driverul AMDGPU pentru GPU-uri GFX9.x a fost implementat suportul pentru mecanismul Cleaner Shader, care asigură curățarea memoriei GPU înainte de a fi reutilizată pentru a preveni scurgerile de date rămase după execuția altui proces. A fost îmbunătățit suportul pentru modul de așteptare. A fost adăugată posibilitatea de a trece în modul de repaus în medii cu AMD SR-IOV. A fost îmbunătățită gestionarea iluminării.
    • În driverul i915 a fost implementat suportul pentru mecanismul drm_panic, care afișează la erori un aspect similar „ecranului albastru al morții”. A fost adăugat suport pentru controllerul de afișare utilizat în cipurile din familia Wildcat Lake.
    • Continuă integrarea componentelor driverului Nova pentru GPU-uri NVIDIA echipate cu firmware GSP, utilizate începând cu seria NVIDIA GeForce RTX 2000 bazată pe microarhitectura Turing. Driverul este scris în limbajul Rust. În noua versiune a fost adăugat un nivel de abstractizare pentru a lucra cu DMA, a fost implementat un parser VBIOS, a fost adăugat cod pentru configurarea frame buffer-ului și a fost asigurat suportul pentru încărcarea accelerată în modul Falcon.
    • În driverul adreno a fost adăugat suport pentru GPU-urile Qualcomm Adreno x1-45 și x1-85.
    • În driverul msm a fost adăugat suport pentru GPU Adreno SM8750 și maparea memoriei video (VM_BIND).
    • În driverul panfrost a fost adăugat suport pentru GPU Mali, utilizate în SoC Mediatek mt8370.
    • Driverul lima a adăugat suport pentru GPU-urile utilizate în SoC Rockchip RK3528.
    • A fost adăugat driverul mtd (Dispozitive de Tehnologie a Memoriei) pentru accesul la memoria NVM integrată în GPU-ul Intel.
    • A fost adăugat suport pentru sistemele audio ASoC IMX WM8524, AMD ACP7.2, SoundWire ACP 7.1, Fairphone 4 & 5, Qualcomm QCS8275, Framework Laptop 13 (AMD Ryzen AI 300), CS35L41 HDA (utilizat în laptopurile ASUS), Richtek RTQ9124, TI TAS5753, HP EliteBook x360 830 G6, EliteBook 830 G6, LG 16Z90R-A, HP 15-fc000. A fost reorganizat codul HD-audio.
    • A fost adăugat suport pentru plăci ARM, SoC-uri și dispozitive: NVIDIA Tegra264, Marvell PXA1908 (prima chip de 64 de biți de la Marvell pentru smartphone-uri), CIX P1, Axiado AX3000, Sophgo SG2000 (combină nuclee ARM și RISC-V), Mediatek mt6572, exynos2200 (utilizat în Samsung Galaxy S22), Renesas R-Car V4M-7, TI am62d2 și Sophgo sg2042, laptopuri bazate pe Mediatek mt8186 și Qualcomm Snapdragon X1, smartphone-uri și tablete bazate pe SoC mt6572, tegra30 și msm8976.

În același timp, Fundația Latin-Americană pentru Software Liber a format o versiune complet liberă a nucleului 6.17 — Linux-libre 6.17-gnu, curățată de elemente de firmware și drivere care conțin componente nesigure sau porțiuni de cod a căror utilizare este limitată de producător. În versiunea 6.17 a fost actualizat codul de curățare a blob-urilor în driverele amdgpu, prueth, iwlwifi, btusb, pci mhi host, adreno a6xx, nova-core și Intel AVS. A fost realizată curățarea denumirilor blob-urilor în fișierele dts (devicetree) pentru cipurile ARM și Intel IPU7. A fost neutralizată încărcarea blob-urilor în noile drivere pci hda. A fost oprită curățarea blob-urilor în driverul QLogic infiniband, eliminat din nucleu.

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