Lansarea nucleului Linux 6.12 cu suport pentru modul Realtime

După două luni de dezvoltare, Linus Torvalds a prezentat lansarea nucleului Linux 6.12. Printre cele mai notabile modificări se numără: posibilitatea activării modulului Realtime, sched_ext pentru crearea planificatorilor CPU prin eBPF, generarea unui cod QR în condiții de avarie, mecanismul Device Memory TCP, mecanismul de rezervare a resurselor SCHED_DEADLINE server, îmbunătățirea planificatorului de sarcini EEVDF, modulul IPE pentru definirea politicilor de protecție a integrității.

Noua versiune a inclus 14607 corecții de la 2167 dezvoltatori, dimensiunea patch-ului fiind de 37 MB (modificările au vizat 13087 fișiere, adăugând 507913 linii de cod și eliminând 234083 linii). În ediția precedentă au fost 15130 de corecții de la 2078 de dezvoltatori, iar dimensiunea patch-ului a fost de 85 MB (în nucleul 6.10, patch-ul avea 41 MB). Aproximativ 45% din toate modificările prezentate în 6.12 sunt legate de driverele de dispozitiv, aproximativ 12% din modificări se referă la actualizarea codului specific arhitecturilor hardware, 13% sunt legate de stiva de rețea, 6% de sistemele de fișiere și 3% de subsistemele interne ale nucleului.

Principalele noutăți în nucleul 6.12:

  • Memorie și servicii de sistem
    • A fost oferită posibilitatea compilării nucleului cu opțiunea PREEMPT_RT fără patch-uri suplimentare pentru a funcționa în modul în timp real. Ultima capacitate care lipsea din nucleu și care nu permitea activarea modulului PREEMPT_RT era suportul pentru ieșirea atomică non-blocantă prin funcția printk, care a fost de asemenea inclusă în nucleu. Suportul PREEMPT_RT este disponibil pentru arhitecturile x86, x86_64, ARM64 și RISC-V. Până acum, implementarea modulului PREEMPT_RT era furnizată sub formă de patch-uri externe, pe baza cărora unele distribuții, cum ar fi RHEL, SUSE și Ubuntu, creau ediții separate Realtime ale produselor lor, cerute în domenii precum sistemele financiare, echipamentele de procesare a sunetului și video, aviația, medicina, robotică, telecomunicații și sisteme industriale, în care este necesară asigurarea unui timp de procesare a evenimentelor predictibil.
    • A fost adăugat mecanismul „sched_ext” (SCX), care permite utilizarea eBPF pentru crearea planificatorilor CPU, acoperind practic toate aspectele planificării execuției sarcinilor și distribuția resurselor CPU. Astfel de planificatori pot fi încărcați dinamic și executați în cadrul nucleului Linux. mașina virtuală eBPF. Mecanismul sched_ext simplifică crearea planificatorilor specifici pentru anumite sarcini, oferind posibilitatea de a experimenta cu diverse tehnici și strategii de planificare, precum și de a crea rapid prototipuri funcționale și de a înlocui planificatorii în timp real în infrastructurile de lucru. De exemplu, folosind sched_ext, se poate crea un planificator care ia în considerare specificul unei aplicații particulare și schimbă dinamic strategia de planificare a execuției sale în funcție de starea sistemului și de alți factori suplimentari.
    • Include restul patch-urilor necesare pentru funcționarea mecanismului SCHED_DEADLINE server, care rezolvă problema alocării necorespunzătoare a resurselor CPU de către sarcinile obișnuite în condițiile monopolizării CPU de către sarcinile de înaltă prioritate (realtime). Pentru a preveni monopolizarea CPU, anterior în nucleu s-a folosit mecanismul Realtime throttling, care încerca să rezerve 5% din resurse pentru sarcinile de prioritate joasă, lăsând 95% pentru sarcinile realtime. Acest mecanism a lăsat de dorit, deoarece sarcinile obișnuite în multe situații nu primeau suficient timp de procesor. SCHED_DEADLINE server implementează un mecanism mai eficient de rezervare a resurselor.
    • A fost finalizată integrarea planificatorului de sarcini EEVDF (Earliest Eligible Virtual Deadline First), care a înlocuit planificatorul CFS (Completely Fair Scheduler), livrat cu nucleul începând cu versiunea 2.6.23. Noua planificare ia în considerare procesele care nu au primit suficiente resurse CPU sau care au primit nejustificat prea mult timp de procesor atunci când alege următorul proces de executat. În primul caz, controlul este forțat să treacă la proces, iar în al doilea caz, este amânat. Vechiul planificator CFS folosea heuristici și ajustări fine pentru a determina procesele care necesitau o atenție specială, în timp ce noul planificator le urmărește mai explicit și nu necesită ajustări fine. Se anticipa că EEVDF va reduce întârzierile în execuția sarcinilor, cu care CFS a avut probleme de planificare.
    • În handlerul de urgență din kernel — DRM Panic, care folosește subsistemul DRM (Direct Rendering Manager) pentru a afișa un raport vizual de tip „ecran al morții”, a fost adăugată opțiunea de a afișa pe ecran un logo și un cod QR cu raportul kmsg în caz de stare de urgență. Deoarece în codul QR încap doar 2953 de octeți, este prevăzută opțiunea DRM_PANIC_SCREEN_QR_CODE_URL, prin care raportul kmsg este comprimat folosind zlib și atașat ca parametru la URL, ceea ce permite transmiterea prin codul QR V40 a aproximativ 7500 de octeți. La construirea pachetelor cu kernel, distribuțiile pot specifica un link de bază pentru URL, ceea ce va permite configurarea unei pagini pentru raportarea problemelor. Pentru alegerea formatului codului QR, este prevăzută setarea DRM_PANIC_SCREEN_QR_VERSION.
    • A fost adăugat suport pentru extensia ARM POE (Permission Overlay Extension), care permite stabilirea drepturilor de acces la regiunile de memorie. Prin intermediul acestei extensii, pe sistemele cu procesoare ARM64 poate fi implementat mecanismul Memory Protection Keys, folosit pentru a limita accesul la paginile de memorie fără a modifica tabela de pagini de memorie.
    • Pentru arhitecturile Loongarch, ARM64, PowerPC și s390 a fost mutată implementarea apelului de sistem getrandom(), optimizată cu ajutorul mecanismului vDSO (virtual dynamic shared object), care permite transferul handlerului apelului de sistem din kernel în spațiul utilizatorului, evitând astfel schimbările de context. Optimizarea permite accelerarea obținerii numerelor aleatoare de până la 15 ori.
    • În subsistemul de input/output asincron io_uring a fost adăugată opțiunea de utilizare a timeout-urilor absolute, care se activează la atingerea unui anumit timp pe ceasurile sistemului (anterior se puteau seta doar timeout-uri relative, în care se specifica durata de la începutul operației).
    • Au fost adăugate fișiere pentru generarea binding-urilor pentru biblioteca libcpupower folosind instrumentul SWIG, care permite formarea binding-urilor din cod C/C++ pentru diferite limbaje de programare. Binding-urile permit crearea de scripturi în Python și alte limbaje și utilizarea acestora pentru extinderea funcționalității bibliotecii libcpupower, care oferă API pentru gestionarea cpufreq și driverelor din spațiul utilizatorului.
    • În utilitarul cpuidle a fost implementată afișarea valorii stării de repaus „residency”, folosit pentru sistemele realtime și care ține cont de timpul minim pe care procesorul trebuie să-l petreacă în starea de repaus pentru a justifica consumul de energie pentru tranziția în și din această stare.
    • A fost adăugată posibilitatea de a utiliza compilatorul Clang pentru construirea bibliotecii standard C nolibc, care face parte din sursele nucleului Linux și oferă o interfață pentru apelurile de sistem de bază. Atunci când se construiește nolibc în Clang, este permisă utilizarea optimizării în etapa de legare (LTO).
    • Au fost declarate învechite anumite interfețe cgroup1, cum ar fi contabilizarea TCP, prima versiune a limitelor moi (soft limit) și gestionarea epuizării memoriei libere. Suportul pentru aceste funcții este menținut în totalitate pentru moment, iar avertizarea a fost emisă pentru a studia numărul de utilizatori care continuă să folosească aceste capacități.
    • A fost adăugată posibilitatea de configurare a bufferului circular de urmărire pentru a păstra datele acumulate după repornire, ceea ce va permite păstrarea informațiilor de depanare acumulate în cazul în care nucleul se oprește brusc. Datele sunt păstrate în memorie. Activarea se realizează prin parametrul din linia de comandă a nucleului trace_instance, de exemplu, setarea „trace_instance=boot_map@0x285400000:12M” va rezerva 12 MB de memorie la adresa 0x285400000 pentru bufferul „boot_map”, care va fi disponibil prin fișierul /sys/kernel/tracing/instances/boot_map.
    • Continuarea transferului de modificări din ramura Rust-for-Linux, legate de utilizarea limbajului Rust ca al doilea limbaj pentru dezvoltarea driverelor și modulelor kernel (suportul pentru Rust nu este activat în mod implicit și nu determină includerea Rust în lista obligatorie de dependențe de compilare pentru kernel). Au fost adăugate modulele ‘list’ și ‘rbtree’ pentru a lucra cu listele legate bidirecționale și arborii roșu-negru (red-black tree). Capacitățile modulelor ‘init’, ‘sync’, ‘types’ și ‘error’ au fost extinse. A fost oferită posibilitatea utilizării codului Rust în compilarea kernelului cu protecție împotriva atacurilor Spectre (opțiunile MITIGATION_{RETHUNK, RETPOLINE, SLS}), utilizarea sistemului de depanare KASAN, mecanismelor de protecție kCFI (kernel Control Flow Integrity) și Shadow Call, precum și utilizarea pluginurilor suplimentare GCC. A fost adăugat un driver pentru controlerul Ethernet Applied Micro QT2025 PHY, scris în Rust. A fost pregătit un site dedicat cu documentație – rust.docs.kernel.org.
    • În sursele kernelului a fost adăugată utilitarul xdrgen pentru transformarea specificațiilor XDR (eXternal Data Representation) în funcții de codificare și decodare XDR, scrise folosind stilul C utilizat în kernelul Linux.
    • În kernel a fost acceptată modificarea care implementează un mecanism de mască a pointerilor pentru a reduce numărul apelurilor lente barrier_nospec() în funcția de 64 de biți copy_from_user(), folosită pentru copierea datelor în kernel din spațiul utilizatorului. Aplicarea mascării accelerează cu 2.6% trecerea testului „per_thread_ops”, care evaluează numărul de operații care pot fi efectuate într-un singur fir.
    • A fost adăugat un nou driver USB, care permite utilizarea protocoalelor 9pfs ca transport pentru transmiterea și recepționarea datelor de la un dispozitiv USB, atunci când se montează sistemul de fișiere 9p peste USB (de exemplu, „mount -t 9p -o trans=usbg,aname=/path/to/fs /mnt/9”). Ca exemplu de aplicare a noului driver se menționează utilizarea sa în loc de NFS pentru organizarea încărcării root-ului în timpul dezvoltării dispozitivelor încorporate.
  • Subsistemul de disc, I/O și sistemele de fișiere
    • În subsistemul VFS a fost adăugată capacitatea de a lucra cu dispozitivele de stocare, a căror dimensiune a blocurilor este mai mare decât dimensiunea paginii de memorie din sistem. În sistemele de fișiere, această capacitate este momentan acceptată doar în XFS.
    • Subsystema FUSE, care permite crearea implementărilor de sisteme de fișiere care funcționează în spațiul utilizatorului, a fost adăugată suportul pentru maparea identificatorilor utilizatorilor sistemelor de fișiere montate, utilizat pentru a corela fișierele unui anumit utilizator pe o partiție montată cu un alt utilizator din sistemul curent.
    • A fost implementată o nouă operațiune fcntl F_CREATED_QUERY, oferind aplicației posibilitatea de a determina dacă un fișier deschis cu flagul O_CREAT a fost creat sau dacă exista deja anterior.
    • Apelul de sistem name_to_handle_at() a fost extins pentru a permite utilizarea identificatorilor unici de 64 de biți ai punctelor de montare pentru a evita condițiile de cursă în procesarea /proc/mountinfo.
    • Dimensiunea structurii „file” în nucleu a fost redusă de la 232 la 184 de octeți, ceea ce reduce consumul de memorie pe sistemele care lucrează activ cu fișiere.
    • Montarea sistemelor de fișiere în puncte de montare din interiorul ierarhiei /proc, de exemplu, în /proc/PID/fd, este interzisă, ceea ce crea probleme potențiale de securitate.
    • În pseudo-FS NSFS (NameSpace FS), utilizat pentru a lucra cu spațiile de nume, a fost implementată oferirea de informații suplimentare despre spațiile de nume ale punctelor de montare.
    • În sistemul de fișiere EROFS (Extendable Read-Only File System), destinat utilizării pe partiții disponibile în modul doar pentru citire, a apărut suportul pentru montarea sistemelor de fișiere direct din imagini de disc salvate sub formă de fișiere.
    • În XFS au fost adăugate noi comenzi ioctl XFS_IOC_START_COMMIT și XFS_IOC_COMMIT_RANGE pentru a schimba conținutul între două fișiere.
    • În NFS a fost adăugat suportul pentru protocolul „LOCALIO”, care permite determinarea dacă clientul și serverul NFS se află pe aceeași gazdă, pentru a utiliza optimizările corespunzătoare.
    • În sistemul de fișiere Btrfs au fost propuse optimizări ale performanței, codul a fost refactorizat, zona de blocare a extentelor a fost redusă în timpul operațiunilor de citire, continuându-se lucrările de migrare la utilizarea folianților de pagină (page folios), iar eliberarea automată a memoriei pentru structura btrfs_path a fost implementată.
    • În sistemul de fișiere Ext4 au fost corectate erorile legate de alocarea blocurilor, gestionarea extentelor, mecanismul „fast commit” și jurnalizarea.
  • Virtualizare și securitate
    • A fost adăugat modulul LSM IPE (Integrity Policy Enforcement), dezvoltat de Microsoft pentru a extinde sistemul existent de control al accesului mandat. Modulul permite definirea unei politici generale de asigurare a integrității pentru întreaga sistem, indicând ce operațiuni sunt permise și ce metodă trebuie utilizată pentru a verifica autenticitatea componentelor. De exemplu, prin intermediul IPE se poate specifica ce fișiere executabile pot fi rulate cu respectarea verificării conformității acestora cu versiunea de referință, utilizând hash-uri criptografice furnizate de sistemul dm-verity.
    • La etapa de compilare a nucleului, a fost oferită posibilitatea de a activa separat metodele de protecție împotriva diverselor vulnerabilități de tip Spectre în CPU. În Kconfig au fost propuse noi parametru: MITIGATE_MDS (protecție împotriva vulnerabilității Microarchitectural Data Sampling), MITIGATE_TAA (protecție împotriva vulnerabilității TSX Asynchronous Abort), MITIGATE_MMIO_STALE_DATA (protecție împotriva vulnerabilității MMIO Stale Data), MITIGATE_L1TF (protecție împotriva vulnerabilității L1 Terminal Fault), MITIGATE_RETBLEED (protecție împotriva vulnerabilității Retbleed), MITIGATE_SPECTRE_V1, MITIGATE_SPECTRE_V2 (protecție împotriva vulnerabilităților Spectre), MITIGATE_SRBDS (protecție împotriva vulnerabilității Special Register Buffer Data Sampling), MITIGATE_SSB (protecție împotriva vulnerabilității Speculative Store Bypass).
    • A fost adăugată parametrul de linie de comandă proc_mem.force_override și un set de opțiuni de configurare în Kconfig (PROC_MEM_FORCE_ALWAYS, PROC_MEM_FORCE_PTRACE și PROC_MEM_FORCE_NEVER), care permit interzicerea modificării memoriei prin /proc/pid/mem.
    • Subsystema LSM (modul de securitate Linux) a fost transformată pentru a utiliza apeluri statice, ceea ce a permis îmbunătățirea securității și creșterea performanței.
    • A fost asigurată utilizarea nucleelor standard pentru arhitectura ARM64 în medii virtualizate care rulează pe sisteme Android cu un hypervizor KVM modificat (KVM protejat).
    • În modulul LSM Landlock, care limitează interacțiunea unui grup de procese cu mediul extern, a fost implementată conceptul de „IPC scoping” pentru a restricționa selectiv interacțiunea cu mediile sandbox, folosind socketuri Unix și semnale. De exemplu, se poate interzice stabilirea de conexiuni utilizând socketuri Unix din mediul sandbox către procese care nu sunt supuse izolării, dar se pot permite conexiunile către procese din aceeași zonă de domeniu.
    • În hypervizorul KVM, în CPUID pentru sistemele guest, a fost adăugat un flag care semnalizează suportul pentru extensiile AVX10.1.
  • Subsystema de rețea
    • A fost adăugat mecanismul Device Memory TCP, care permite utilizarea socket-urilor de rețea pentru a trimite direct conținutul memoriei dispozitivelor periferice prin rețea (modul zero-copy) și plasarea directă a conținutului pachetelor de rețea în zona de memorie a dispozitivului de către receptor. Datele transmise în pachete sunt transferate de la placa de rețea la memoria dispozitivului periferic sau din memoria dispozitivului în placa de rețea direct, ocolind CPU-ul, iar anteturile pachetelor ajung în buferele de kernel obişnuite.
    • Funcționalitățile multor drivere Ethernet și wireless au fost extinse. De exemplu, în driverul Intel iwlwifi a fost adăugată suport pentru externalizarea operațiunilor RLC/SMPS la nivelul firmware-ului; în driverul RealTek rtw89 a fost îmbunătățită performanța și a fost adăugat suport pentru cipurile RTL8852BT/8852BE-VT (WiFi 6); în driverul Ethernet microchip a fost adăugat suport pentru specificațiile IEEE 802.3bw (100BASE-T1) și IEEE 802.3bp; au fost îmbunătățite implementările Ethernet virtual Microsoft vNIC și IBM veth. Au fost adăugate noi drivere pentru cipurile Ethernet Realtek RTL9054, RTL9068, RTL9072, RTL9075, RTL9068, RTL9071 și Microchip LAN8650/1 10BASE-T1S MAC-PHY.
    • În MPTCP (MultiPath TCP), extensia protocolului TCP pentru livrarea pachetelor TCP simultan prin mai multe rute prin diferite interfețe de rețea, dimensiunea coeficientului de ponderare utilizat în rutare a fost crescută de la 8 la 16 biți. A fost implementată detectarea traficului pierdut (blackhole) și suspendarea pentru o anumită perioadă a încercărilor de stabilire a conexiunilor cu sistemele care duc la pierderi de trafic.
    • Pentru IPv6, a fost implementat suportul pentru flagul „p” în PIO (Prefix Information Option), utilizat în anunțurile RA (IPv6 Router Advertisements) pentru a alege modelul de desfășurare a clienților prin DHCPv6-PD (DHCPv6 Prefix Delegation, RFC9663) în loc de alocarea de adrese separate pe baza prefixelor, utilizând SLAAC (Stateless Address Autoconfiguration). În IPv6 IOAM6 a fost adăugat suport pentru un nou mod de încapsulare tunsrc, permițând obținerea unei performanțe mai ridicate.
    • A fost îmbunătățită performanța procesării pachetelor de control IPsec.
    • A fost îmbunătățită performanța ștergerii (flush) seturilor mari de reguli nftables. În nfnetlink_queue, suportul protocolului SCTP a fost îmbunătățit.
    • În API-ul ethtool a fost adăugat suportul pentru legarea mai multor plăci de rețea la o singură interfață de rețea.
  • Echipament
    • În driverul AMDGPU, a continuat lucrul la implementarea suportului pentru GPU AMD RDNA4 („GFX12”). A fost adăugată posibilitatea de a șterge cozi individuale de sarcini fără a reseta starea întregului GPU.
    • S-a continuat lucrul la driverul drm (Direct Rendering Manager) Xe pentru GPU-uri bazate pe arhitectura Intel Xe, care este utilizată în cardurile grafice Intel din familia Arc și în grafica integrată, începând cu procesoarele Tiger Lake. Noua versiune include suport pentru GPU-uri bazate pe microarhitecturile Battlemage și Lunar Lake. A fost introdus suport pentru modificatorii CCS (Color Control Surface) Xe2 pentru gestionarea parametrilor GPU-urilor integrate și discrete.
    • În driverul i915 a fost implementată capacitatea de a afișa informații despre viteza de rotație a ventilatorului prin intermediul interfeței HWMON sau sysfs (atributul „fan1_input”). Parametrul „i915.modeset” a fost declarat învechit, iar în loc de „i915.modeset=0” ar trebui utilizat parametrul „i915.nomodeset”.
    • În driverul DRM msm (GPU Qualcomm Adreno) a fost adăugat suport pentru GPU-urile A615, A306 și A621.
    • În driverul Nouveau a fost efectuată o revizuire și curățare a structurilor interne.
    • În driverul intel_pstate, care gestionează parametrii de consum energetic (P-state) pe sistemele cu procesoare Intel, a fost adăugat suport pentru sisteme hibride cu CPU-uri asimetrice (diferențiate prin caracteristici), precum și suport pentru gestionarea energiei procesoarelor bazate pe microarhitecturile Granite Rapids și Sierra Forest. În driverul intel_idle a fost adăugat suport pentru CPU Xeon Granite Rapids. În driverul intel_rapl a fost asigurat recunoașterea procesoarelor AMD din familia 1Ah și a procesoarelor Intel ArrowLake-U.
    • S-a continuat integrarea modificărilor pentru suportul ARM SoC Snapdragon X Elite, care utilizează propriul CPU Qualcomm Oryon cu 12 nuclee și GPU Qualcomm Adreno. Chipul este destinat utilizării în laptopuri și PC-uri și depășește în multe teste de performanță chipurile Apple M3 și Intel Core Ultra 155H.
    • A fost adăugat suport pentru plăci ARM, SoC și dispozitive: Broadcom bcm2712 (Raspberry Pi 5), Renesas R9A09G057 (RZ/V2H), Qualcomm Snapdragon 414 (MSM8929), Lenovo ThinkPad T14s Gen 6, Lenovo A6000/A6010, Surface Laptop 7, Anbernic RG35XXSP, Firefly Core-PX30-JD4, Lunzn Fastrhino R68S, Aspeed Riser, AGX Orin, Rockchip Qnap-TS433, Huashan Pi, Meta Catalina, BeagleY-AI, NanoPi R2S Plus, ExynosAuto v920, SOPHGO SG2002, Qualcomm IPQ5332, LG G4 (h815), Cool Pi CM5 GenBook, Anbernic RG35XXSP, GameForce Ace, IBM P11, Kontron i.MX93 OSM-S, NanoPC-T6.
    • A fost adăugat suport pentru panourile de ecran Anbernic RG28XX, On Tat Industrial Company KD50G21-40NT-A1, Innolux G070ACE-LH3, Melfas lmfbx101117480, Densitron DMT028VGHMCMI-1D, Microchip AC40T08A, AOU B116XTN02.3, AUO B116XAN06.1, AOU B116XAT04.1, BOE TV101WUM-LL2, BOE NV140WUM-N41, BOE NV133WUM-N63, BOE NV116WHM-A4D, BOE NE140WUM-N6G, CMN N116BCA-EA2, CMN N116BCP-EA2, CSW MNB601LS1-4, Starry er88577.
    • În sistemul de sunet a fost adăugată suport pentru cipuri și codecuri RME Digiface USB, AMD ACP 7.1, Mediatek MT6367, MT8365, Realtek RTL1320, C-Media CM9825. Driverele de sunet vechi pentru ASoC Intel au fost declarate învechite, fiind recomandată utilizarea driverelor AVS. Au fost aduse multe îmbunătățiri driverului SoundWire.

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