Lansarea nucleului Linux 6.1

După două luni de dezvoltare, Linus Torvalds a prezentat lansarea nucleului Linux 6.1. Printre cele mai notabile modificări: suport pentru dezvoltarea de drivere și module în limbajul Rust, modernizarea mecanismului de determinare a paginilor de memorie utilizate, un manager de memorie special pentru programele BPF, un sistem de diagnosticare a problemelor de memorie KMSAN, KCFI (Kernelk Control). -Flow Integrity) mecanism de protecție, introducerea arborelui structurii Maple.

Noua versiune include 15115 corecții de la 2139 de dezvoltatori, dimensiunea patch-urilor este de 51 MB, care este de aproximativ 2 ori mai mică decât dimensiunea patch-urilor din nucleele 6.0 și 5.19. Modificările au afectat 13165 de fișiere, au fost adăugate 716247 de linii de cod și 304560 de linii au fost șterse. Aproximativ 45% din toate modificările introduse în 6.1 sunt legate de driverele de dispozitiv, aproximativ 14% dintre modificări sunt legate de actualizarea codului specific arhitecturilor hardware, 14% sunt legate de stiva de rețea, 3% sunt legate de sistemele de fișiere și 3% sunt legate de subsistemele interne ale nucleului.

Inovații cheie în nucleul 6.1:

  • Servicii de memorie și sistem
    • S-a adăugat posibilitatea de a utiliza Rust ca a doua limbă pentru dezvoltarea driverelor și modulelor kernelului. Motivul principal pentru care este susținut Rust este acela de a facilita scrierea de drivere sigure și de înaltă calitate, reducând probabilitatea de a face erori atunci când lucrați cu memorie. Suportul Rust este dezactivat în mod implicit și nu are ca rezultat includerea Rust ca dependență necesară pentru construirea nucleului. Nucleul a adoptat până acum o versiune minimă, redusă a patch-urilor, care a fost redusă de la 40 la 13 mii de linii de cod și oferă doar minimul necesar, suficient pentru a construi un modul simplu de nucleu scris în limbajul Rust. În viitor, este planificată creșterea treptată a funcționalității existente, transferând alte modificări din ramura Rust-for-Linux. În paralel, sunt dezvoltate proiecte pentru a utiliza infrastructura propusă pentru a dezvolta drivere pentru unitățile NVMe, protocolul de rețea 9p și GPU-ul Apple M1 în limbajul Rust.
    • Pentru sistemele bazate pe arhitecturi AArch64, RISC-V și LoongArch cu EFI, a fost implementată capacitatea de a încărca direct imagini de kernel comprimate. S-au adăugat handlere pentru încărcarea, rularea și descărcarea imaginilor kernelului, apelate direct din EFI zboot. Au fost adăugate și handlere pentru instalarea și ștergerea protocoalelor din baza de date de protocoale EFI. Anterior, dezambalarea era efectuată de un bootloader separat, dar acum acest lucru poate fi făcut de un handler din nucleul însuși - imaginea nucleului este formată ca o aplicație EFI.
    • Compoziția include o parte din patch-uri cu implementarea unui model de gestionare a memoriei pe mai multe niveluri, care vă permite să separați băncile de memorie cu diferite caracteristici de performanță. De exemplu, paginile cele mai utilizate pot fi stocate în cea mai rapidă memorie, în timp ce paginile cele mai rar utilizate pot fi stocate în memorie relativ lentă. Kernel 6.1 introduce un mecanism pentru a determina unde sunt situate paginile foarte utilizate în memoria lentă, astfel încât acestea să poată fi promovate la memorie rapidă și, de asemenea, introduce un concept general de niveluri de memorie și performanța lor relativă.
    • Include mecanismul MGLRU (Multi-Generational LRU), care înlocuiește vechea implementare LRU (Least Recently Used) bazată pe două cozi, cu o structură în mai multe etape care determină mai bine ce pagini de memorie sunt de fapt în uz și care pot fi trimise la exterior. partiția de swap.
    • S-a adăugat suport pentru structura de date „arțar” propusă de inginerii Oracle, care este poziționată ca un înlocuitor mai eficient pentru structura „arborele roșu-negru”. Arțarul este o variantă a arborelui B care acceptă indexarea intervalului și este conceput pentru a utiliza eficient memoria cache a procesoarelor moderne. Unele subsisteme de gestionare a memoriei au fost deja transferate în arborele de arțar, ceea ce a avut un efect pozitiv asupra performanței lor. În viitor, arțarul poate fi folosit pentru a implementa blocarea intervalului.
    • Abilitatea de a crea programe BPF „distructive” special concepute pentru a iniția o oprire de urgență prin apelul crash_kexec() a fost adăugată la subsistemul BPF. Asemenea programe BPF pot fi necesare în scopuri de depanare pentru a iniția crearea unui depozit de blocare la un anumit moment în timp. Pentru a accesa operațiuni distructive la încărcarea unui program BPF, trebuie să specificați indicatorul BPF_F_DESTRUCTIVE, să activați sysctl kernel.destructive_bpf_enabled și să aveți drepturi CAP_SYS_BOOT.
    • Pentru programele BPF, este posibilă enumerarea elementelor cgroup, precum și enumerarea resurselor (fișiere, vma, procese etc.) ale unui anumit fir sau sarcini. Un nou tip de hartă a fost implementat pentru a crea buffer-uri de apel pentru utilizator.
    • S-a adăugat un apel special pentru alocare de memorie în programele BPF (allocator de memorie), care oferă o alocare de memorie mai sigură în contextul BPF decât kmalloc() standard.
    • Prima parte a modificărilor a fost integrată, oferind posibilitatea de a crea drivere pentru dispozitivele de intrare cu o interfață HID (Human Interface Device), implementată sub formă de programe BPF.
    • Nucleul a eliminat complet codul pentru a suporta formatul de fișier executabil a.out, care a fost depreciat în versiunea 5.1 și a fost dezactivat pentru arhitecturile majore începând cu versiunile 5.18 și 5.19. Formatul a.out a fost de mult depreciat pe sistemele Linux, iar generarea de fișiere a.out nu este acceptată de instrumentele moderne în configurațiile Linux implicite. Încărcătorul pentru fișierele a.out poate fi implementat în întregime în spațiul utilizatorului.
    • Pentru sistemele bazate pe arhitectura setului de instrucțiuni LoongArch utilizată în procesoarele Loongson 3 5000 și care implementează noul RISC ISA, similar cu MIPS și RISC-V, este implementat suport pentru evenimentele de măsurare a performanței (evenimente perf), kexec, kdump și compilarea BPF JIT. .
    • Interfața I/O asincronă io_uring oferă un nou mod, IORING_SETUP_DEFER_TASKRUN, care permite amânarea temporară a lucrărilor legate de buffer-ul de inel până când se face o solicitare a aplicației, care poate fi utilizată pentru a lucra în lot și pentru a evita problemele de latență din cauza aplicațiilor de preempțiune Momentul nepotrivit.
    • Proceselor din spațiul utilizatorului li se oferă capacitatea de a iniția conversia unei game de pagini de memorie normale într-un set de pagini mari de memorie (Transparent Huge-Pages).
    • S-a adăugat implementarea dispozitivului /dev/userfaultfd, care permite accesul la funcționalitatea apelului de sistem userfaultfd() folosind drepturi de acces în FS. Funcționalitatea userfaultfd vă permite să creați handlere pentru accesarea paginilor de memorie nealocate (defecțiuni de pagină) în spațiul utilizatorului.
    • Cerințele pentru versiunea utilitarului GNU Make au fost crescute - acum este necesară cel puțin versiunea 3.82 pentru a construi nucleul.
  • Subsistem de disc, I/O și sisteme de fișiere
    • Au fost realizate optimizări semnificative ale performanței sistemului de fișiere Btrfs, printre altele, performanța apelului FIEMAP ioctl a fost crescută cu ordine de mărime. S-a adăugat suport pentru scrierile în buffer asincrone pentru aplicații care utilizează io_uring. S-a adăugat suport pentru fișierele protejate cu fs-verity la operația de „trimitere”.
    • Sistemul de fișiere ext4 a adăugat optimizări de performanță legate de întreținerea jurnalului și operarea numai în citire.
    • Sistemul de fișiere EROFS (Enhanced Read-Only File System), conceput pentru a fi utilizat pe partiții accesibile în modul doar citire, implementează capacitatea de a partaja date duplicate în diferite sisteme de fișiere.
    • Apelul de sistem statx() a fost adăugat pentru a afișa informații despre dacă I/O directă poate fi aplicată unui fișier.
    • Suport pentru crearea de fișiere temporare cu steag O_TMPFILE a fost adăugat la subsistemul FUSE (Filesystems in User Space).
  • Virtualizare și securitate
    • Implementarea mecanismului de protecție CFI (Control Flow Integrity) a fost înlocuită, adăugând verificări înainte de fiecare apel indirect al unei funcții pentru a detecta unele forme de comportament nedefinit care ar putea duce la încălcarea ordinului normal de execuție (flux de control) ca un rezultat al utilizării exploit-urilor care schimbă pointerii către funcții stocate în memorie. Implementarea standard a CFI din proiectul LLVM a fost înlocuită cu o opțiune bazată tot pe utilizarea Clang, dar special adaptată pentru a proteja subsistemele de nivel scăzut și nucleele sistemului de operare. În LLVM, o nouă implementare va fi oferită în versiunea Clang 16 și va fi activată cu opțiunea „-fsanitize=kcfi”. Diferența esențială cu noua implementare este că nu este legată de optimizările timpului de legătură (LTO) și nu are ca rezultat înlocuirea indicatorilor de funcție cu legături în tabelul de salt.
    • Pentru modulele LSM (Linux Security Module), este posibil să se creeze handlere care interceptează operațiuni pentru a crea spații de nume.
    • Sunt furnizate instrumente pentru verificarea semnăturilor digitale PKCS#7 în programele BPF.
    • Abilitatea de a deschide în modul neblocant (O_NONBLOCK), care a fost eliminată din greșeală în kernel-ul 5.6, a fost returnată la /dev/random.
    • Pe sistemele cu arhitectură x86 a fost adăugat un avertisment în cazul mapării paginilor de memorie de către subsisteme kernel care permit simultan execuția și scrierea. În viitor, se ia în considerare posibilitatea de a interzice complet o astfel de mapare a memoriei.
    • S-a adăugat un mecanism de depanare KMSAN (Kernel Memory Sanitizer) pentru a detecta utilizarea memoriei neinițializate în nucleu, precum și scurgerile de memorie neinițializate între spațiul utilizatorului și dispozitive.
    • Au fost aduse îmbunătățiri la generatorul de numere pseudoaleatoare CRNG cripto-securizat utilizat în apelul getrandom. Modificările au fost pregătite de Jason A. Donenfeld, autorul cărții VPN WireGuard și au ca scop îmbunătățirea securității extragerii numere întregi pseudoaleatoare.
  • Subsistemul de rețea
    • Stiva TCP oferă capacitatea (dezactivată implicit) de a utiliza tabele hash socket separat pentru fiecare spațiu de nume, ceea ce îmbunătățește performanța pe sistemele cu un număr mare de spații de nume.
    • Cod eliminat pentru a accepta protocolul DECnet vechi. Stub-urile API ale spațiului utilizator sunt lăsate în loc pentru a permite compilarea aplicațiilor care folosesc DECnet, dar aceste aplicații nu se vor putea conecta la rețea.
    • Protocolul netlink este documentat.
  • Оборудование
    • Driverul amdgpu a adăugat suport pentru redirecționarea DSC (Display Stream Compression) pentru comprimarea datelor fără pierderi atunci când se schimbă informații cu ecrane care acceptă rezoluții foarte înalte. Lucrările continuă pentru a oferi suport pentru platformele AMD RDNA3 (RX 7000) și CDNA (Instinct). S-a adăugat suport pentru componentele DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x și GMC 11.x IP. Driverul amdkfd (pentru GPU-uri AMD discrete, cum ar fi Polaris) oferă suport pentru GFX 11.0.3.
    • Driverul i915 (Intel) include suport pentru GPU Meteor Lake. Meteor Lake și GPU-urile mai noi acceptă interfața DP 2.0 (DisplayPort). S-au adăugat identificatori pentru plăcile video bazate pe microarhitectura Alder Lake S.
    • S-a adăugat suport pentru subsistemele audio implementate în procesoarele Apple Silicon, Intel SkyLake și Intel KabyLake. Driverul audio CS35L41 HDA acceptă modul de repaus. S-a adăugat suport ASoC (ALSA System on Chip) pentru cipuri audio integrate Apple Silicon, AMD Rembrant DSP, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake și Kaby Lake, Mediatek MT8186, NXP i.MX8ULP DSP, Qualcomm SC8280XP, SM8250 SM8450 și Texas Instruments SRC4392
    • S-a adăugat suport pentru panouri LCD Samsung LTL101AL01, B120XAN01.0, R140NWF5 RH, Densitron DMT028VGHMCMI-1A TFT, AUO B133UAN02.1, IVO M133NW4J-R3, Innolux N120ACA-WH1N -B116ACA-WH01.6 116, INX N21BCA-EA116 , INX N2BCN-EA116, Tehnologie Multi-Inno MI1FT-0800.
    • S-a adăugat suport pentru controlerele AHCI SATA utilizate în SoC Baikal-T1.
    • S-a adăugat suport pentru cipurile Bluetooth MediaTek MT7921, Intel Magnetor (CNVi, conectivitate integrată), Realtek RTL8852C, RTW8852AE și RTL8761BUV (Edimax BT-8500).
    • Driverul ath11k pentru modulele wireless Qualcomm a adăugat suport pentru scanarea spectrală în intervalul de 160 MHz, a implementat NAPI cu mai multe fire și a îmbunătățit suportul pentru cipurile Wi-Fi Qualcomm WCN6750.
    • S-au adăugat drivere pentru tastatura PinePhone, touchpad-uri InterTouch (ThinkPad P1 G3), controler adaptiv X-Box, controler de zbor PhoenixRC, controler auto VRC-2, controler Edge DualSense, panou de operare IBM, telecomenzi XBOX One Elite, tablete XP-PEN Deco Pro S și Intuos Pro Small (PTH-460).
    • S-a adăugat driver pentru acceleratoarele criptografice Aspeed HACE (Hash and Crypto Engine).
    • S-a adăugat suport pentru controlerele integrate Thunderbolt/USB4 Intel Meteor Lake.
    • S-a adăugat suport pentru smartphone-urile Sony Xperia 1 IV, Samsung Galaxy E5, E7 și Grand Max, Pine64 Pinephone Pro.
    • S-a adăugat suport pentru ARM SoC ș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, IPQ8 BL i.MX8195MM OSM-S, MT4 (Acer Tomato), Radxa ROCK 4C+, NanoPi R1S Enterprise Edition, JetHome JetHub DXNUMXp. Drivere actualizate pentru SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom și NXP.

În același timp, Latin American Free Software Foundation a format o versiune a nucleului complet gratuit 6.1 - Linux-libre 6.1-gnu, curățată de elemente de firmware și drivere care conțin componente sau secțiuni de cod nelibere, al căror domeniu de aplicare este limitat de producător. Noua versiune curăță noul driver rtw8852b și fișierele DTS pentru diferite SoC Qualcomm și MediaTek cu procesoare bazate pe arhitectura AArch64. Cod de curățare blob actualizat în drivere și subsisteme amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. Curățarea driverelor învechite plăci TV tm6000, cpia2 v4l, sp8870, av7110 a fost corectată.

Sursa: opennet.ru

Adauga un comentariu