Lansarea kernelului Linux 6.12 cu suport în timp real

După două luni de dezvoltare, Linus Torvalds a lansat kernelul. Linux 6.12. Printre cele mai notabile modificări: posibilitatea de a activa modul Realtime, sched_ext pentru crearea de planificatoare CPU prin eBPF, afișarea codului QR în condiții de urgență, mecanismul Device Memory TCP, mecanismul de rezervare a resurselor serverului SCHED_DEADLINE, îmbunătățirea planificatorului de activități EEVDF, modulul IPE pentru setarea politicilor de integritate.

Noua versiune include 14607 corecții de la 2167 de dezvoltatori, dimensiunea patch-ului este de 37 MB (modificările au afectat 13087 fișiere, au fost adăugate 507913 linii de cod, 234083 linii au fost șterse). Ultima versiune a avut 15130 de corecții de la 2078 de dezvoltatori, dimensiunea patch-ului a fost de 85 MB (în kernel-ul 6.10 patch-ul avea o dimensiune de 41 MB). Aproximativ 45% din toate modificările introduse în 6.12 sunt legate de driverele de dispozitiv, aproximativ 12% dintre modificări sunt legate de actualizarea codului specific arhitecturilor hardware, 13% sunt legate de stiva de rețea, 6% sunt legate de sistemele de fișiere și 3% sunt legate de subsistemele interne ale nucleului.

Inovații cheie în nucleul 6.12:

  • Servicii de memorie și sistem
    • Acum este disponibilă posibilitatea de a construi kernelul cu opțiunea PREEMPT_RT fără patch-uri suplimentare pentru funcționare în timp real. Ultima caracteristică lipsă a kernelului care a împiedicat activarea modului PREEMPT_RT a fost suportul pentru ieșirea atomică neblocantă prin funcția printk, care este, de asemenea, inclusă în kernel. Suportul PREEMPT_RT este disponibil pentru arhitecturile x86, x86_64, ARM64 și RISC-V. Până acum, implementarea modului PREEMPT_RT a fost furnizată sub formă de patch-uri externe, pe care unele distribuții, cum ar fi RHEL, SUSE și Ubuntu, au creat ediții separate Realtime ale produselor lor, solicitate în domenii precum sistemele financiare, dispozitivele de procesare audio și video, aviația, medicina, robotica, telecomunicațiile și sistemele industriale, unde este necesar să se asigure un timp previzibil de procesare a evenimentelor.
    • A fost adăugat mecanismul „sched_ext” (SCX), care permite utilizarea eBPF pentru a crea planificatoare CPU care acoperă practic toate aspectele planificării sarcinilor și alocării resurselor CPU. Astfel de planificatoare pot fi încărcate dinamic și executate în cadrul kernelului. Linux в mașină virtuală eBPF. Mecanismul sched_ext simplifică crearea de planificatoare specifice sarcinilor, permite experimentarea cu diverse tehnici și strategii de planificare și permite crearea rapidă de prototipuri funcționale și înlocuirea din mers a planificatoarelor în infrastructurile de producție. De exemplu, folosind sched_ext, puteți crea un planificator care ia în considerare specificul unei anumite aplicații și își modifică dinamic strategia de planificare în funcție de starea sistemului și de alți factori.
    • Compoziția include partea rămasă a patch-urilor necesare funcționării mecanismului serverului SCHED_DEADLINE, care rezolvă problema subutilizarii resurselor CPU de către sarcini obișnuite atunci când CPU este monopolizat de sarcini cu prioritate înaltă (în timp real). Pentru a preveni monopolizarea CPU, nucleul a folosit anterior mecanismul de limitare în timp real, care a încercat să rezerve 5% pentru sarcini cu prioritate scăzută, lăsând 95% din timp pentru sarcini în timp real. Acest mecanism a lăsat mult de dorit, deoarece sarcinile obișnuite în multe situații nu au primit suficient timp de procesor. Serverul SCHED_DEADLINE implementează un mecanism de rezervare a resurselor mai eficient.
    • Integrarea programatorului de sarcini EEVDF (Earliest Eligible Virtual Deadline First) a fost finalizată, care a înlocuit programatorul CFS (Completely Fair Scheduler), furnizat începând cu nucleul 2.6.23. Atunci când alege următorul proces pentru a transfera execuția, noul planificator ia în considerare procesele care nu au primit suficiente resurse de procesor sau au primit o cantitate nemeritat de mare de timp de procesor. În primul caz, transferul controlului către proces este forțat, iar în al doilea, dimpotrivă, este amânat. Vechiul programator CFS a folosit euristica și reglarea fină pentru a identifica procesele care necesitau o atenție specială, în timp ce noul planificator le urmărește mai explicit și nu necesită reglare fină. Se așteaptă ca EEVDF să reducă întârzierile în sarcinile cu care CFS a avut probleme de programare.
    • În gestionarea de urgență a nucleului - DRM Panic, care utilizează subsistemul DRM (Direct Rendering Manager) pentru a afișa un raport vizual în stilul „ecranului albastru al morții”, capacitatea de a afișa un logo și un cod QR cu un raport kmsg a fost adăugat pe ecran când apare o situație de urgență. Întrucât doar 2953 de octeți încap într-un cod QR, este furnizată opțiunea DRM_PANIC_SCREEN_QR_CODE_URL, în care raportul kmsg este comprimat folosind zlib și atașat ca parametru la URL, ceea ce permite transferul a aproximativ 40 de octeți prin codul QR V7500. Când construiesc pachete cu nucleul, distribuțiile pot seta o adresă URL de bază pentru adresa URL, care le va permite să navigheze la o pagină pentru raportarea unei probleme. Pentru a selecta formatul de cod QR, este furnizată setarea DRM_PANIC_SCREEN_QR_VERSION.
    • S-a adăugat suport pentru ARM POE (Permission Overlay Extension), care vă permite să setați drepturi de acces la zonele de memorie. Folosind această extensie, pe sistemele cu procesoare ARM64, poate fi implementat mecanismul Memory Protection Keys, care este folosit pentru a limita accesul la paginile de memorie fără a modifica tabelul de pagini de memorie.
    • Pentru arhitecturile Loongarch, ARM64, PowerPC și s390, implementarea apelului de sistem getrandom() a fost mutată, optimizată folosind mecanismul vDSO (virtual dynamic shared object), care face posibilă mutarea handler-ului de apel de sistem de la kernel la spațiu pentru utilizator și evitați schimbările de context. Optimizarea vă permite să accelerați generarea numerelor aleatorii de până la 15 ori.
    • Capacitatea de a utiliza timeout-uri absolute, declanșate când se atinge un anumit timp pe ceasul sistemului, a fost adăugată subsistemului de intrare/ieșire asincron io_uring (anterior, puteau fi setate doar timeout-uri relative, care indicau durata de la începutul operațiunii). ).
    • S-au adăugat fișiere pentru generarea de legături pentru biblioteca libcpupower folosind setul de instrumente SWIG, care vă permite să generați legături din codul C/C++ pentru diferite limbaje de programare. Legăturile vă permit să creați scripturi în Python și în alte limbi și să le utilizați pentru a extinde funcționalitatea bibliotecii libcpupower, care oferă un API pentru gestionarea cpufreq și driverele din spațiul utilizatorului.
    • Utilitarul cpuidle afișează valoarea „reședinței” stării de inactivitate, utilizată pentru sistemele în timp real și ținând cont de timpul minim pe care procesorul trebuie să fie inactiv pentru a justifica costurile energetice ale tranziției în și din această stare.
    • A fost adăugată posibilitatea de a utiliza compilatorul Clang pentru a construi biblioteca C standard nolibc, care este inclusă în codul sursă al kernelului. Linux și oferă o modalitate de a încadra apelurile de sistem de bază. La construirea nolibc în Clang, optimizarea timpului de legătură (LTO) este activată.
    • Unele interfețe cgroup1 au fost depreciate, cum ar fi contabilitatea TCP, versiunea XNUMX a soft limit și gestionarea epuizării memoriei. Suportul pentru aceste funcții rămâne deocamdată complet, iar avertismentul este făcut pentru a studia numărul de utilizatori care continuă să folosească aceste funcții.
    • S-a adăugat posibilitatea de a configura un buffer de urmărire a inelului pentru a salva datele acumulate după o repornire, ceea ce vă va permite să nu pierdeți informațiile de depanare acumulate în cazul unei blocări a nucleului. Datele sunt stocate în memorie. Activarea se face prin intermediul parametrului de linie de comandă a nucleului trace_instance, de exemplu, setarea „trace_instance=boot_map@0x285400000:12M” va rezerva 12 MB de memorie la 0x285400000 pentru buffer-ul „boot_map”, care va fi accesibil prin fișierul / kernel. /tracing/instances/boot_map.
    • Migrarea continuă a modificărilor din ramura Rust-for-Linux, legat de utilizarea Rust ca al doilea limbaj pentru dezvoltarea de drivere și module kernel (suportul pentru Rust nu este activ în mod implicit și nu include Rust printre dependențele de compilare necesare ale kernelului). Au fost adăugate modulele „list” și „rbtree” pentru lucrul cu liste dublu înlănțuite și arbori de căutare roșu-negru. Au fost extinse capacitățile modulelor „init”, „sync”, „types” și „error”. A fost adăugată posibilitatea de a utiliza cod Rust la construirea unui kernel cu protecție împotriva atacurilor Spectre (opțiunile MITIGATION_{RETHUNK,RETPOLINE,SLS}), utilizând sistemul de depanare KASAN, mecanismele de protecție kCFI (kernel Control Flow Integrity) și Shadow Call și la utilizarea pluginurilor GCC suplimentare. A fost adăugat un driver pentru controlerul Ethernet Applied Micro QT2025 PHY, scris în Rust. A fost pregătit un site web separat cu documentație: rust.docs.kernel.org.
    • Utilitarul xdrgen a fost adăugat la codul sursă al kernelului pentru convertirea specificațiilor XDR (eXternal Data Representation) în funcții de codare și decodare XDR scrise folosind stilul C adoptat de kernel. Linux.
    • Nucleul a fost modificat pentru a implementa un mecanism de mascare a pointerului pentru a reduce numărul de apeluri lente către barrier_nospec() în funcția copy_from_user() pe 64 de biți, folosită pentru a copia datele în nucleu din spațiul utilizatorului. Utilizarea mascării accelerează testul „per_thread_ops”, care evaluează numărul de operații care pot fi efectuate într-un fir, cu 2.6%.
    • A fost adăugat un nou driver USB care vă permite să utilizați protocolul 9pfs ca transport pentru trimiterea și primirea datelor de pe un dispozitiv USB atunci când montați sistemul de fișiere 9p prin USB (de exemplu, „mount -t 9p -o trans=usbg, aname=/cale/spre/ fs /mnt/9"). Un exemplu de utilizare a noului driver este utilizarea NFS în loc de organizarea pornirii partiției rădăcină atunci când se dezvoltă dispozitive încorporate.
  • Subsistem de disc, I/O și sisteme de fișiere
    • Abilitatea de a lucra cu dispozitive de stocare a căror dimensiune bloc este mai mare decât dimensiunea paginii de memorie din sistem a fost adăugată la subsistemul VFS. În sistemele de fișiere, această caracteristică este în prezent acceptată numai în XFS.
    • Subsistemul FUSE, care vă permite să creați implementări ale sistemelor de fișiere care funcționează în spațiul utilizatorului, a adăugat suport pentru maparea identificatorilor de utilizator ai sistemelor de fișiere montate, utilizate pentru a potrivi fișierele unui anumit utilizator pe o partiție străină montată cu alt utilizator de pe cea curentă. sistem.
    • O nouă operațiune fcntl, F_CREATED_QUERY, a fost implementată, oferind unei aplicații capacitatea de a determina dacă un fișier deschis folosind steag-ul O_CREAT a fost creat sau dacă a existat deja înainte.
    • S-a adăugat posibilitatea de a utiliza ID-uri unice de puncte de montare pe 64 de biți la apelul de sistem name_to_handle_at() pentru a evita condițiile de cursă atunci când se analizează /proc/mountinfo.
    • Dimensiunea structurii „fișier” din 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 pentru punctele de montare din ierarhia /proc, cum ar fi /proc/PID/fd, a fost interzisă, ceea ce a creat potențiale probleme de securitate.
    • Pseudo-FS NSFS (NameSpace FS), folosit pentru lucrul cu spații de nume, oferă informații suplimentare despre spațiile de nume ale punctelor de montare.
    • Sistemul de fișiere EROFS (Extendable Read-Only File System), conceput pentru a fi utilizat pe partiții numai în citire, acceptă acum montarea sistemelor de fișiere direct de pe imaginile de pe disc salvate ca fișiere.
    • Noi comenzi ioctl XFS_IOC_START_COMMIT și XFS_IOC_COMMIT_RANGE au fost adăugate la XFS pentru schimbul de conținut între două fișiere.
    • NFS a adăugat suport pentru protocolul „LOCALIO”, care vă permite să determinați dacă clientul și serverului NFS pe aceeași gazdă pentru a activa optimizările corespunzătoare.
    • În sistemul de fișiere Btrfs, s-au propus optimizări de performanță, codul a fost refactorizat, aria de blocare a gradului de blocare în timpul operațiunilor de citire a fost redusă, s-au continuat lucrările de conversie a paginilor de memorie pentru a utiliza foile de pagini și a fost eliberată automată de memorie. implementat pentru structura btrfs_path.
    • În sistemul de fișiere Ext4, erorile legate de alocarea blocurilor, gestionarea extinderii, comiterea rapidă și jurnalizarea au fost remediate.
  • Virtualizare și securitate
    • S-a adăugat modulul LSM IPE (Integrity Policy Enforcement), dezvoltat de Microsoft pentru a extinde sistemul de control al accesului obligatoriu existent. Modulul vă permite să definiți o politică generală de integritate pentru întregul sistem, indicând ce operațiuni sunt permise și cum trebuie verificată autenticitatea componentelor. De exemplu, folosind IPE, puteți specifica ce fișiere executabile au voie să ruleze, ținând cont de conformitatea acestora cu versiunea de referință folosind hashuri criptografice furnizate de sistemul dm-verity.
    • În etapa de compilare a nucleului, este posibilă activarea separată a metodelor disponibile de protecție împotriva diferitelor vulnerabilități din clasa Spectre în CPU. Kconfig oferă noi parametri: 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, MITIGATE_L1TF (protecție împotriva vulnerabilității Terminal FIGATE_ED1TF) (protecție împotriva vulnerabilităților Retbleed), MITIGATE_SPECTRE_V2, MITIGATE_SPECTRE_VXNUMX (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).
    • S-a adăugat opțiunea de linie de comandă proc_mem.force_override și un set de setări de compilare în Kconfig (PROC_MEM_FORCE_ALWAYS, PROC_MEM_FORCE_PTRACE și PROC_MEM_FORCE_NEVER) pentru a preveni modificările de memorie prin /proc/pid/mem.
    • Subsistem LSM (Linux modulul de securitate) a fost trecut la utilizarea apelurilor statice, ceea ce a îmbunătățit securitatea și performanța.
    • Capacitatea de a utiliza nuclee standard pentru arhitectura ARM64 în medii guest care rulează pe Android-sisteme cu un hipervizor KVM modificat (KVM protejat).
    • Modulul Landlock LSM, care vă permite să limitați interacțiunea unui grup de procese cu mediul extern, implementează conceptul „IPC scoping” pentru a limita selectiv interacțiunea cu mediile sandbox folosind socket-uri și semnale Unix. De exemplu, puteți interzice conexiunile folosind socket-uri Unix dintr-un mediu sandbox la procese care nu au izolarea aplicată, dar permit conexiuni la procese din același domeniu.
    • În hypervisorul KVM, a fost adăugat un semnalizator la CPUID pentru sistemele oaspeți care indică suportul pentru extensiile AVX10.1.
  • Subsistemul de rețea
    • A fost adăugat mecanismul Device Memory TCP, permițând utilizarea soclurilor de rețea pentru a trimite direct conținutul memoriei dispozitivelor periferice prin rețea (modul zero-copy) și a plasa direct conținutul pachetelor de rețea în zona de memorie a dispozitivului pe partea destinatarului. Datele transmise în pachete sunt transferate de pe cardul de rețea în memoria unui dispozitiv periferic sau din memoria dispozitivului pe cardul de rețea direct, ocolind CPU-ul, iar antetele pachetelor ajung în buffer-uri obișnuite ale nucleului.
    • Capacitățile multor drivere Ethernet și wireless au fost extinse. De exemplu, driverul Intel iwlwifi a adăugat suport pentru mutarea operațiunilor RLC/SMPS în partea de firmware, driverul RealTek rtw89 a crescut performanța și a adăugat suport pentru cipuri RTL8852BT/8852BE-VT (WiFi 6), driverul pentru microcip Ethernet a adăugat suport pentru IEEE 802.3 Specificațiile bw (100BASE) -T1) și IEEE 802.3bp, Microsoft vNIC și IBM veth virtual Ethernet implementările au fost îmbunătățite. S-au adăugat noi drivere pentru cipurile Ethernet Realtek RTL9054, RTL9068, RTL9072, RTL9075, RTL9068, RTL9071 și Microchip LAN8650/1 10BASE-T1S MAC-PHY.
    • În MPTCP (MultiPath TCP), o extensie a protocolului TCP pentru organizarea livrării de pachete TCP simultan de-a lungul mai multor rute prin diferite interfețe de rețea, dimensiunea greutăților utilizate în rutare este mărită de la 8 la 16 biți. Implementarea detectării traficului pierdut (găuri negre) și suspendarea pentru o perioadă de timp a încercărilor de a stabili conexiuni cu sistemele care conduc la pierderea traficului.
    • Pentru IPv6, suportul este implementat pentru marcajul „p” în PIO (Prefix Information Option), utilizat în reclamele RA (IPv6 Router Advertisements) pentru a selecta un model de implementare a clientului prin DHCPv6-PD (DHCPv6 Prefix Delegation, RFC9663) în loc să aloce adrese individuale bazate pe prefixe folosind SLAAC (Stateless Address Autoconfiguration). IPv6 IOAM6 adaugă suport pentru un nou mod de încapsulare tunsrc care permite o performanță mai bună.
    • Performanță îmbunătățită pentru procesarea pachetelor de control IPsec.
    • Performanță îmbunătățită a spălării seturilor mari de reguli nftables. nfnetlink_queue are suport îmbunătățit pentru protocolul SCTP.
    • API-ul ethtool a adăugat suport pentru legarea mai multor plăci de rețea la o singură interfață de rețea.
  • Оборудование
    • În driverul AMDGPU, se lucrează în continuare pentru implementarea suportului pentru GPU-urile AMD RDNA4 (“GFX12”). S-a adăugat posibilitatea de a reseta cozile de sarcini individuale fără a reseta întregul GPU.
    • Au continuat lucrările la driverul Xe drm (Direct Rendering Manager) pentru GPU-uri bazate pe arhitectura Intel Xe, care este utilizat în plăcile video din familia Intel Arc și 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 a controla parametrii GPU-urilor integrate și discrete.
    • Driverul i915 implementează capacitatea de a scoate informații despre viteza ventilatorului prin interfața HWMON sau sysfs (atributul „fan1_input”). Parametrul „i915.modeset” a fost depreciat; ar trebui folosit parametrul „i915.modeset” în loc de „i0.modeset=915”.
    • S-a adăugat suport pentru GPU-urile A615, A306 și A621 la driverul msm DRM (GPU Qualcomm Adreno).
    • Structurile interne ale șoferului Nouveau au fost reluate și curățate.
    • Driverul intel_pstate, care controlează parametrii de consum de energie (P-state) pe sistemele cu procesoare Intel, a adăugat suport pentru sisteme hibride cu procesoare asimetrice (caracteristici diferite), precum și suport pentru gestionarea energiei procesoarelor bazate pe Granite Rapids și Sierra Forest microarhitecturi. S-a adăugat suport pentru procesorul Xeon Granite Rapids la driverul intel_idle. Driverul intel_rapl oferă recunoaștere a proceselor din familia AMD 1Ah și a procesoarelor Intel ArrowLake-U.
    • Includerea continuă a modificărilor pentru a susține ARM SoC Snapdragon X Elite, care utilizează propriul procesor Oryon cu 12 nuclee de la Qualcomm și GPU Qualcomm Adreno. Cipul este destinat utilizării în laptopuri și PC-uri și este înaintea chipurilor Apple M3 și Intel Core Ultra 155H în multe teste de performanță.
    • S-a adăugat suport pentru plăci ARM, SoC-uri și dispozitive: Broadcom bcm2712 (Raspberry Pi 5), Renesas R9A09G057 (RZ/V2H), Qualcomm Snapdragon 414 (MSM8929), Lenovo ThinkPad T14s Gen 6, Lenovo A6000/A6010/A7pnictop 35, Surface AnXX30SP4 , Firefly Core-PX68-JD433, Lunzn Fastrhino R2S, Aspeed Riser, AGX Orin, Rockchip Qnap-TS920, Huashan Pi, Meta Catalina, BeagleY-AI, NanoPi R2002S Plus, ExynosAuto v5332, SOPHGO SG4, (815 Qualcomh5) ), Cool Pi CM35 GenBook, Anbernic RG11XXSP, GameForce Ace, IBM P93, Kontron i.MX6 OSM-S, NanoPC-TXNUMX
    • S-a adăugat suport pentru panouri de ecran Anbernic RG28XX, On Tat Industrial Company KD50G21-40NT-A1, Innolux G070ACE-LH3, Melfas lmfbx101117480, Densitron DMT028VGHMCMI-1D, Microchip AC40T08A, AOU B.O.116 02.3XAT116, BOE TV06.1WUM -LL116, BOE NV04.1WUM-N101, BOE NV2WUM-N140, BOE NV41WHM-A133D, BOE NE63WUM-N116G, CMN N4BCA-EA140, CMN N6BCP-EA116, CSW MNB2LS116-2.
    • Subsistemul audio a adăugat suport pentru cipuri și codecuri RME Digiface USB, AMD ACP 7.1, Mediatek MT6367, MT8365, Realtek RTL1320, C-Media CM9825. Vechile drivere de sunet pentru Intel ASoC au fost declarate învechite și se recomandă utilizarea driverelor AVS. Au fost aduse multe îmbunătățiri driverului SoundWire.

Sursa: opennet.ru

Cumpărați găzduire de încredere pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără găzduire web fiabilă cu protecție DDoS, servere VPS VDS | ProHoster