Lansarea kernel-ului Linux 6.1

După două luni de dezvoltare, Linus Torvalds a prezentat lansarea kernel-ului Linux 6.1. Printre cele mai notabile schimbări se numără: suport pentru dezvoltarea driver-elor și modulelor în limbajul Rust, modernizarea mecanismului de determinare a paginilor de memorie utilizate, un manager special de memorie pentru programele BPF, un sistem de diagnosticare a problemelor de memorie KMSAN, mecanismul de protecție KCFI (Kernel Control-Flow Integrity), implementarea structurii Maple tree.

Noua versiune include 15115 corecții de erori de la 2139 de dezvoltatori, dimensiunea patch-ului este de 51 MB, ceea ce este de aproximativ două ori mai mic decât dimensiunea patch-urilor de la kernel-urile 6.0 și 5.19. Schimbările au afectat 13165 de fișiere, au fost adăugate 716247 de linii de cod și au fost eliminate 304560 de linii. Aproximativ 45% din toate schimbările prezentate în 6.1 se referă la driverele de dispozitive, aproximativ 14% sunt legate de actualizarea codului specific arhitecturilor hardware, 14% sunt legate de stiva de rețea, 3% de sistemele de fișiere și 3% de subsistemele interne ale kernel-ului.

Principalele noutăți în kernel-ul 6.1:

  • Memorie și servicii de sistem
    • A fost adăugată posibilitatea de a utiliza limbajul Rust ca al doilea limbaj pentru dezvoltarea driver-elor și modulelor kernel. Principalul motiv pentru suportul Rust este simplificarea scrierii driver-elor de dispozitive sigure și de calitate, prin reducerea probabilității de a face erori în gestionarea memoriei. Suportul pentru Rust nu este activat implicit și nu duce la includerea Rust în lista dependențelor de construcție obligatorii pentru kernel. Până acum, a fost acceptată o versiune minimală a patch-urilor, redusă de la 40 la 13 mii de linii de cod, care asigură doar minimul necesar pentru construirea unui modul simplu de kernel scris în Rust. În continuare, se preconizează extinderea treptată a funcționalității existente, mutând și alte modificări din ramura Rust-for-Linux. În paralel, se dezvoltă proiecte pentru utilizarea infrastructurii propuse pentru dezvoltarea driver-elor NVMe, a protocolului de rețea 9p și a GPU-ului Apple M1.
    • Pentru sistemele bazate pe arhitecturi AArch64, RISC-V și LoongArch cu EFI, a fost implementată posibilitatea de încărcare directă a imaginilor de kernel comprimate. Au fost adăugate gestiuni pentru încărcarea, lansarea și descărcarea imaginilor de kernel, invocate direct din EFI zboot. De asemenea, au fost adăugate gestiuni pentru instalarea și eliminarea protocoalelor din baza de date a protocoalelor EFI. Anterior, decompresia se realiza cu un bootloader separat, iar acum acest lucru poate fi realizat de gestiunea din kernel – imaginea kernel-ului este formată ca o aplicație EFI.
    • În compunere au fost incluse o parte din patch-uri cu implementarea modelului de gestionare a memoriei multiliniar, care permite separarea băncilor de memorie cu caracteristici de performanță diferite. De exemplu, paginile cele mai intens utilizate pot fi plasate în memoria cea mai rapidă, în timp ce paginile rareori utilizate pot fi stocate în memorie relativ lentă. În kernelul 6.1 a fost acceptat un mecanism pentru a determina prezența paginilor intens utilizate în memorie lentă pentru a le promova în memoria rapidă, precum și o concept comun al nivelurilor de memorie și a performanței lor relative.
    • În compunere a fost inclus mecanismul MGLRU (Multi-Generational LRU), care a înlocuit vechea implementare LRU (Least Recently Used) bazată pe două cozi cu o structură multinațională, mai bine capabilă să determine care pagini de memorie sunt cu adevărat utilizate și care pot fi eliminate în zona de swap.
    • A fost adăugat suport pentru structura de date „maple tree” propusă de inginerii Oracle, care este poziționată ca o înlocuire mai eficientă a structurii „red-black tree”. Maple tree este o variantă de B-tree, care susține indexarea pe intervale de valori și este proiectată pentru utilizarea eficientă a cache-ului. procesorilor moderni. Pe maple tree au fost deja traduse unele subsisteme de gestionare a memoriei, ceea ce a avut un impact pozitiv asupra performanței lor. În viitor, maple tree ar putea fi utilizat pentru implementarea blocărilor pe intervale (range locking).
    • Subsystema BPF a fost extinsă cu funcționalitatea de a crea programe BPF „destructive”, special concepute pentru a iniția oprirea de urgență prin apelarea crash_kexec(). Astfel de programe BPF pot fi necesare în scopuri de depanare pentru a iniția crearea unui crash-dump într-un moment specific. Accesul la operațiunile destructive la încărcarea programului BPF necesită specificarea flag-ului BPF_F_DESTRUCTIVE, activarea sysctl kernel.destructive_bpf_enabled și deținerea drepturilor CAP_SYS_BOOT.
    • Pentru programele BPF a fost implementată posibilitatea de a itera prin elementele cgroup, precum și prin resursele (fișiere, vma, procese etc.) ale unui anumit fir de execuție sau sarcină. A fost realizat un nou tip de mapă pentru crearea buferelor circulare personalizate (user ring buffer).
    • A fost adăugat un apel special pentru alocarea memoriei în programele BPF (memory allocator), care asigură o distribuție mai sigură a memoriei în contextul BPF, în comparație cu kmalloc() standard.
    • A fost integrată prima parte a modificărilor care permit crearea de drivere pentru dispozitivele de intrare cu interfață HID (Human Interface Device), implementate sub formă de programe BPF.
    • Codul pentru suportul formatului de fișiere executabile a.out a fost complet eliminat din kernel, acesta fiind declarat învechit în versiunea 5.1, iar începând cu versiunile 5.18 și 5.19 a fost dezactivat pentru arhitecturile principale. Formatul a.out nu mai este utilizat pe sistemele cu Linux, iar generarea fișierelor a.out nu este susținută de uneltele moderne în configurațiile implicite pentru Linux. Încărcătorul pentru fișierele a.out poate fi implementat complet în spațiul utilizatorului.
    • Pentru sistemele bazate pe arhitectura setului de instrucțiuni LoongArch, utilizată în procesoarele Loongson 3 5000 și implementând un nou ISA RISC, similar cu MIPS și RISC-V, a fost implementat suportul pentru evenimentele de măsurare a performanței (perf event), kexec, kdump și compilarea JIT a BPF.
    • În interfața de intrare/ieșire asincronă io_uring a fost propus un nou mod IORING_SETUP_DEFER_TASKRUN, care permite amânarea temporară a executării sarcinilor legate de buferul circular până când se primește o solicitare din partea aplicației, ceea ce poate fi folosit pentru organizarea executării sarcinilor în mod de lot și prevenirea problemelor de întârziere cauzate de înlăturarea aplicației în momente nepotrivite.
    • Procesele din spațiul utilizatorului au fost dotate cu posibilitatea de a iniția transformarea intervalului de pagini de memorie obișnuite într-un set de pagini mari de memorie (Transparent Huge-Pages).
    • A fost adăugată implementarea dispozitivului /dev/userfaultfd, care permite accesarea funcționalității apelului de sistem userfaultfd() utilizând permisiunile din sistemul de fișiere. Funcționalitatea userfaultfd permite crearea de manipulatoare pentru accesări de pagini nealocate (page faults) în spațiul utilizatorului.
    • Cerințele pentru versiunea utilitarului GNU Make au fost ridicate - pentru a compila nucleul, acum este necesară cel puțin versiunea 3.82.
  • Subsistemul de disc, I/O și sistemele de fișiere
    • În sistemul de fișiere Btrfs au fost aduse optimizări semnificative ale performanței, printre care o creștere ordonată a performanței apelului ioctl FIEMAP. A fost adăugată suportul pentru scrierea bufferizată asincronă pentru aplicațiile care utilizează io_uring. În operația „send” a fost adăugat suportul pentru fișierele protejate prin fs-verity.
    • În sistemul de fișiere ext4 au fost aduse optimizări ale performanței legate de gestionarea jurnalului și de funcționarea în modul doar pentru citire.
    • În sistemul de fișiere EROFS (Enhanced Read-Only File System), destinat utilizării pe partiții accesibile în modul doar pentru citire, a fost implementată capacitatea de stocare comună a datelor care se duplică în diferite sisteme de fișiere.
    • În apelul de sistem statx() a fost adăugată posibilitatea de a emite informații despre capacitatea de aplicare a intrărilor/ieșirilor directe pentru fișiere.
    • În subsistemul FUSE (Filesystems in User Space) a fost adăugat suportul pentru crearea de fișiere temporare cu flagul O_TMPFILE.
  • Virtualizare și securitate
    • Implementarea mecanismului de protecție CFI (Control Flow Integrity) a fost înlocuită, adăugând înainte de fiecare apel indirect o verificare pentru a identifica anumite forme de comportament nedefinit care ar putea conduce la afectarea ordinii normale de execuție (control flow) din cauza utilizării exploit-urilor care modifică pointerii funcțiilor stocați în memorie. Implementarea standard CFI din proiectul LLVM a fost înlocuită cu o variantă, de asemenea bazată pe Clang, dar special adaptată pentru a proteja subsistemele de bază și nucleele sistemelor de operare. În LLVM, noua implementare va fi oferită în versiunea Clang 16 și va fi inclusă cu opțiunea „-fsanitize=kcfi”. Principala diferență a noii implementări este că nu este legată de optimizările la etapa de linking (LTO) și nu conduce la înlocuirea pointerilor funcțiilor cu referințe în tabela de tranziții.
    • Pentru modulele LSM (Linux Security Module) a fost oferită posibilitatea de a crea handleri care interceptă operațiile de creare a spațiilor de nume.
    • Au fost oferite instrumente pentru verificarea semnăturilor digitale PKCS#7 în programele BPF.
    • În /dev/random a fost restaurată posibilitatea de a deschide în mod neblocat (O_NONBLOCK), care a fost omisă din greșeală în nucleul 5.6.
    • Pe sistemele cu arhitectură x86 a fost adăugat un avertisment în cazul mapării de către subsistemele nucleului a paginilor de memorie, care permit simultan execuția și scrierea. Se analizează în continuare posibilitatea de a interzice complet o astfel de mapare a memoriei.
    • A fost adăugat un mecanism de depanare KMSAN (Kernel Memory Sanitizer) pentru a identifica utilizarea memoriei neinițializate în nucleu, precum și scurgerile de memorie neinițializată între spațiul utilizatorului și dispozitive.
    • Au fost aduse îmbunătățiri generatorului criptografic de numere pseudo-aleatoare CRNG, folosit în apelul getrandom. Modificările au fost pregătite de Jason Donenfeld, autorul WireGuard, și au ca scop creșterea siguranței extragerii numerele întregi pseudo-aleatoare. VPN În stiva TCP a fost implementată posibilitatea (dezgropată implicit) de utilizare separată a tabelelor de hash pentru socketuri pentru fiecare spațiu de nume, ceea ce permite îmbunătățirea performanței sistemelor cu un număr mare de spații de nume.
  • Subsystema de rețea
    • În stiva TCP a fost implementată posibilitatea (dezgropată implicit) de utilizare separată a tabelelor de hash pentru socketuri pentru fiecare spațiu de nume, ceea ce permite îmbunătățirea performanței sistemelor cu un număr mare de spații de nume.
    • Codul pentru suportul protocolului învechit DECnet a fost eliminat. Pentru spațiul utilizatorului, au fost păstrate stub-uri API care permit compilarea aplicațiilor ce utilizează DECnet, însă aceste aplicații nu vor putea să se conecteze la rețea.
    • Protocolul netlink a fost documentat.
  • Echipament
    • Driverul amdgpu a inclus suport pentru transmiterea DSC (Display Stream Compression) pentru comprimarea datelor fără pierderi în timpul schimbului de informații cu ecranele ce suportă rezoluții foarte mari. S-a continuat lucrul pe asigurarea suportului pentru platformele AMD RDNA3 (RX 7000) și CDNA (Instinct). Suport pentru componente IP DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x și GMC 11.x a fost adăugat. În driverul amdkfd (pentru GPU discrete AMD, precum Polaris) a fost implementat suport pentru GFX 11.0.3.
    • În driverul i915 (Intel) a fost inclus suport pentru GPU Meteor Lake. Pentru Meteor Lake și GPU-uri mai noi, a fost asigurat suport pentru interfața DP 2.0 (DisplayPort). Au fost adăugate identificatori pentru plăcile grafice bazate pe microarhitectura Alder Lake S.
    • Suportul pentru subsistemele audio implementate în procesoarele Apple Silicon, Intel SkyLake și Intel KabyLake a fost adăugat. În driverul audio CS35L41 HDA a fost implementat suport pentru trecerea în modul de somn. Suport ASoC (ALSA System on Chip) pentru cipurile audio integrate Apple Silicon, AMD Rembrant DSPs, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake și Kaby Lake, Mediatek MT8186, DSP-uri NXP i.MX8ULP, Qualcomm SC8280XP, SM8250, SM8450 și Texas Instruments SRC4392 a fost adăugat.
    • Suportul pentru panouri LCD Samsung LTL101AL01, B120XAN01.0, R140NWF5 RH, Densitron DMT028VGHMCMI-1A TFT, AUO B133UAN02.1, IVO M133NW4J-R3, Innolux N120ACA-EA1, AUO B116XAK01.6, BOE NT116WHM-N21, INX N116BCA-EA2, INX N116BCN-EA1, și Multi-Inno Technology MI0800FT-9 a fost adăugat.
    • Suportul pentru controlerele AHCI SATA utilizate în SoC Baikal-T1 a fost adăugat.
    • Suportul pentru cipurile Bluetooth MediaTek MT7921, Intel Magnetor (CNVi, Integrated Connectivity), Realtek RTL8852C, RTW8852AE și RTL8761BUV (Edimax BT-8500) a fost adăugat.
    • În driverul ath11k pentru modulele de wireless Qualcomm, suportul pentru scanarea spectrală în banda de 160 MHz a fost adăugat, fiind implementat NAPI multi-threaded și îmbunătățită suportul pentru cipurile Wi-Fi Qualcomm WCN6750.
    • Au fost adăugate drivere pentru tastaturi la PinePhone, touchpad-uri InterTouch (ThinkPad P1 G3), X-Box Adaptive Controller, PhoenixRC Flight Controller, VRC-2 Car Controller, DualSense Edge Controller, panouri de control IBM (IBM Operation Panel), controle XBOX One Elite, tablete XP-PEN Deco Pro S și Intuos Pro Small (PTH-460).
    • Un driver pentru acceleratoarele criptografice Aspeed HACE (Hash and Crypto Engine) a fost adăugat.
    • Suportul pentru controlerele integrate Thunderbolt/USB4 Intel Meteor Lake a fost adăugat.
    • Suportul pentru smartphone-uri Sony Xperia 1 IV, Samsung Galaxy E5, E7 și Grand Max, Pine64 Pinephone Pro a fost adăugat.
    • S-a adăugat suport pentru SoC-uri ARM și plăci: AMD DaytonaX, Mediatek MT8186, Rockchips RK3399 și RK3566, TI AM62A, NXP i.MX8DXL, Renesas R-Car H3Ne-1.7G, Qualcomm IPQ8064-v2.0, IPQ8062, IPQ8065, Kontron SL/BL i.MX8MM OSM-S, MT8195 (Acer Tomato), Radxa ROCK 4C+, NanoPi R4S Enterprise Edition, JetHome JetHub D1p. Au fost actualizate driverele pentru SoC-urile Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom și NXP.

În același timp, Fundația Latino-Americană pentru Software Liber a creat o versiune complet liberă a nucleului 6.1 — Linux-libre 6.1-gnu, curățată de elementele firmware-ului și driverelor care conțin componente sau porțiuni de cod proprietar, ale căror domenii de aplicare sunt restricționate de către producător. În noua versiune, a avut loc curățarea noului driver rtw8852b și a fișierelor DTS pentru diferite SoC-uri Qualcomm și MediaTek cu procesoare bazate pe arhitectura AArch64. A fost actualizat codul de curățare a bloburilor în drivere și subsisteme amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. A fost corectată curățarea driverelor vechi tm6000 pentru cardurile TV, cpia2 v4l, sp8870, av7110.

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