Lansarea nucleului Linux 5.19

După două luni de dezvoltare, Linus Torvalds a prezentat lansarea nucleului Linux 5.19. Printre cele mai notabile modificări: suport pentru arhitectura procesorului LoongArch, integrarea patch-urilor „BIG TCP”, modul la cerere în fscache, eliminarea codului pentru a suporta formatul a.out, posibilitatea de a utiliza ZSTD pentru compresia firmware, o interfață pentru gestionarea evacuării memoriei din spațiul utilizatorului, creșterea fiabilității și performanței generatorului de numere pseudo-aleatoare, suport pentru Intel IFS (In-Field Scan), AMD SEV-SNP (Secure Nested Paging), Intel TDX (Trusted Domain Extensions) și ARM Extensii SME (Scalable Matrix Extension).

În anunț, Linus a spus că, cel mai probabil, următoarea lansare a nucleului va fi numerotată 6.0, deoarece ramura 5.x a acumulat suficiente versiuni pentru a schimba primul număr din numărul versiunii. Schimbarea numerotării este efectuată din motive estetice și este un pas formal care ameliorează disconfortul din cauza acumulării unui număr mare de probleme în serie.

Linus a mai menționat că a folosit un laptop Apple bazat pe arhitectura ARM64 (Apple Silicon) cu un mediu Linux bazat pe distribuția Asahi Linux pentru a crea lansarea. Nu este stația de lucru principală a lui Linus, dar a folosit platforma pentru a-i testa adecvarea pentru lucrul cu kernel și pentru a se asigura că poate produce versiuni de kernel în timp ce călătorește cu un laptop ușor la îndemână. Anterior, cu mulți ani în urmă, Linus avea experiență în utilizarea echipamentelor Apple pentru dezvoltare - a folosit odată un PC bazat pe procesorul ppc970 și un laptop Macbook Air.

Noua versiune include 16401 de corecții de la 2190 de dezvoltatori (în ultima ediție au fost 16206 de remedieri de la 2127 de dezvoltatori), dimensiunea patch-ului este de 90 MB (modificările au afectat 13847 de fișiere, s-au adăugat 1149456 de linii de cod, 349177 de linii au fost șterse). Aproximativ 39% din toate modificările introduse în 5.19 sunt legate de driverele de dispozitiv, aproximativ 21% dintre modificări sunt legate de actualizarea codului specific arhitecturilor hardware, 11% sunt legate de stiva de rețea, 4% sunt legate de sistemele de fișiere și 3% sunt legate de subsistemele interne ale nucleului.

Inovații cheie în nucleul 5.19:

  • Subsistem de disc, I/O și sisteme de fișiere
    • Sistemul de fișiere EROFS (Enhanced Read-Only File System), destinat utilizării pe partițiile de doar citire, a fost convertit pentru a utiliza subsistemul fscache, care oferă stocarea în cache a datelor. Schimbarea a îmbunătățit semnificativ performanța sistemelor în care un număr mare de containere sunt lansate dintr-o imagine bazată pe EROFS.
    • La subsistemul fscache a fost adăugat un mod de citire la cerere, care este utilizat pentru a optimiza EROFS. Noul mod vă permite să organizați memorarea în cache de citire din imaginile FS situate în sistemul local. Spre deosebire de modul de operare disponibil inițial, care se concentrează pe stocarea în cache în sistemul de fișiere local a datelor transferate prin sistemele de fișiere din rețea, modul „la cerere” deleagă funcțiile de preluare a datelor și de scriere a acestora în cache într-un alt sistem separat. proces de fundal care rulează în spațiul utilizatorului.
    • XFS oferă capacitatea de a stoca miliarde de atribute extinse într-un i-node. Numărul maxim de extensii pentru un fișier a fost crescut de la 4 miliarde la 247. A fost implementat un mod pentru actualizarea atomică a mai multor atribute de fișier extinse simultan.
    • Sistemul de fișiere Btrfs a optimizat lucrul cu blocări, ceea ce a permis o creștere de aproximativ 7% a performanței atunci când scrieți direct în modul nowait. Performanța operațiunilor în modul NOCOW (fără copy-on-write) este crescută cu aproximativ 3%. Încărcarea din memoria cache a paginii la rularea comenzii „trimite” a fost redusă. Dimensiunea minimă a subpaginilor a fost redusă de la 64K la 4K (pot fi utilizate subpagini mai mici decât paginile kernel). S-a făcut o tranziție de la utilizarea unui arbore radix la algoritmul XArrays.
    • Un mod a fost adăugat la serverul NFS pentru a extinde păstrarea stării de blocare stabilite de un client care a încetat să mai răspundă la solicitări. Noul mod vă permite să întârziați ștergerea blocării cu până la o zi, cu excepția cazului în care un alt client solicită o blocare concurentă. În modul normal, blocarea este ștearsă la 90 de secunde după ce clientul nu mai răspunde.
    • Subsistemul de urmărire a evenimentelor din fanotify FS implementează indicatorul FAN_MARK_EVICTABLE, cu care puteți dezactiva fixarea nodurilor i-țintă în cache, de exemplu, pentru a ignora sub-ramurile fără a fixa părțile lor în cache.
    • Driverul pentru sistemul de fișiere FAT32 a adăugat suport pentru obținerea de informații despre momentul creării fișierului prin apelul de sistem statx cu implementarea unei versiuni mai eficiente și funcționale a stat(), care returnează informații extinse despre fișier.
    • Au fost făcute optimizări semnificative driverului exFAT pentru a permite ștergerea simultană a unui grup de sectoare atunci când modul „dirsync” este activ, în loc de ștergerea secvențială sector cu sector. Prin reducerea numărului de solicitări de blocare după optimizare, performanța creării unui număr mare de directoare pe cardul SD a crescut cu peste 73-85%, în funcție de dimensiunea clusterului.
    • Nucleul include prima actualizare corectivă a driverului ntfs3. De când ntfs3 a fost inclus în kernelul 5.15 în octombrie anul trecut, driverul nu a fost actualizat și comunicarea cu dezvoltatorii s-a pierdut, dar dezvoltatorii au reluat acum publicarea modificărilor. Patch-urile propuse au eliminat erorile care duceau la scurgeri de memorie și blocări, au rezolvat probleme cu execuția xfstests, au curățat codul neutilizat și au remediat greșelile de scriere.
    • Pentru OverlayFS, a fost implementată capacitatea de a mapa ID-urile de utilizator ale sistemelor de fișiere montate, care este folosită pentru a potrivi fișierele unui anumit utilizator de pe o partiție străină montată cu alt utilizator de pe sistemul curent.
  • Servicii de memorie și sistem
    • S-a adăugat suport inițial pentru arhitectura setului de instrucțiuni LoongArch utilizată în procesoarele Loongson 3 5000, care implementează noul RISC ISA, similar cu MIPS și RISC-V. Arhitectura LoongArch este disponibilă în trei variante: 32 de biți redus (LA32R), 32 de biți obișnuit (LA32S) și 64 de biți (LA64).
    • Cod eliminat pentru a accepta formatul de fișier executabil a.out, care a fost depreciat în versiunea 5.1. 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.
    • Suportul pentru opțiunile de pornire specifice x86 a fost întrerupt: nosp, nosmap, nosmep, noexec și noclflush).
    • Suportul pentru arhitectura învechită a procesorului h8300 (Renesas H8/300), care a rămas mult timp fără suport, a fost întrerupt.
    • Capacități extinse legate de răspunsul la detectarea blocajelor divizate („blocări divizate”) care apar la accesarea datelor nealiniate din memorie, datorită faptului că atunci când se execută o instrucțiune atomică, datele traversează două linii cache a CPU. Astfel de blocaje duc la o scădere semnificativă a performanței. Dacă anterior, în mod implicit, nucleul emitea un avertisment cu informații despre procesul care a provocat blocarea, acum procesul problematic va fi încetinit și mai mult pentru a păstra performanța restului sistemului.
    • S-a adăugat suport pentru mecanismul IFS (In-Field Scan) implementat în procesoarele Intel, care vă permite să rulați teste de diagnosticare a CPU de nivel scăzut care pot identifica probleme care nu sunt detectate de instrumentele standard pe baza codurilor de corectare a erorilor (ECC) sau a biților de paritate. . Testele efectuate sunt sub formă de firmware descărcabil, proiectat similar actualizărilor de microcod. Rezultatele testelor sunt disponibile prin sysfs.
    • S-a adăugat posibilitatea de a încorpora un fișier bootconfig în kernel, care permite, pe lângă opțiunile din linia de comandă, să se determine parametrii nucleului printr-un fișier de setări. Încorporarea se realizează utilizând opțiunea de asamblare „CONFIG_BOOT_CONFIG_EMBED_FILE="/PATH/TO/BOOTCONFIG/FILE"'. Anterior, bootconfig a fost determinat prin atașarea la imaginea initrd. Integrarea în nucleu permite ca bootconfig să fie folosit în configurații fără initrd.
    • A fost implementată capacitatea de a descărca firmware comprimat folosind algoritmul Zstandard. Un set de fișiere de control /sys/class/firmware/* a fost adăugat la sysfs, permițându-vă să inițiați încărcarea firmware-ului din spațiul utilizatorului.
    • Interfața I/O asincronă io_uring oferă un nou indicator, IORING_RECVSEND_POLL_FIRST, care, atunci când este setat, va trimite mai întâi o operațiune de rețea pentru a fi procesată prin sondaj, ceea ce poate economisi resurse în situațiile în care procesarea operației cu o anumită întârziere este acceptabilă. io_uring a adăugat, de asemenea, suport pentru apelul de sistem socket(), a propus noi steaguri pentru a simplifica gestionarea descriptorilor de fișiere, a adăugat un mod „multi-shot” pentru acceptarea mai multor conexiuni simultan în apelul accept() și a adăugat operațiuni pentru redirecționarea NVMe comenzi direct către dispozitiv.
    • Arhitectura Xtensa oferă suport pentru instrumentul de depanare KCSAN (Kernel Concurrency Sanitizer), conceput pentru a detecta dinamic condițiile de cursă din nucleu. De asemenea, a adăugat suport pentru modul de repaus și coprocesoare.
    • Pentru arhitectura m68k (Motorola 68000), a fost implementată o mașină virtuală (simulator de platformă) bazată pe emulatorul Android Goldfish.
    • Pentru arhitectura AArch64, a fost implementat suport pentru extensiile Armv9-A SME (Scalable Matrix Extension).
    • Subsistemul eBPF permite stocarea indicatorilor tipați în structurile hărților și, de asemenea, adaugă suport pentru pointerii dinamici.
    • Este propus un nou mecanism proactiv de recuperare a memoriei care acceptă controlul spațiului utilizator folosind fișierul memory.reclaim. Scrierea unui număr în fișierul specificat va încerca să elimine numărul corespunzător de octeți din setul asociat cgroup.
    • Precizie îmbunătățită a utilizării memoriei la comprimarea datelor în partiția de swap folosind mecanismul zswap.
    • Pentru arhitectura RISC-V, este oferit suport pentru rularea executabilelor pe 32 de biți pe sisteme pe 64 de biți, este adăugat un mod pentru a lega atribute restrictive la paginile de memorie (de exemplu, pentru a dezactiva stocarea în cache) și este implementată funcția kexec_file_load() .
    • Implementarea suportului pentru sistemele Armv32T și Armv4 pe 5 de biți este adaptată pentru utilizarea în build-uri universale de nucleu multiplatformă, potrivite pentru diferite sisteme ARM.
  • Virtualizare și securitate
    • Subsistemul EFI implementează capacitatea de a transfera confidențial informații secrete către sistemele oaspeților fără a le dezvălui sistemului gazdă. Datele sunt furnizate prin directorul security/coco din securityfs.
    • Modul de protecție de blocare, care restricționează accesul utilizatorului root la kernel și blochează căile de ocolire UEFI Secure Boot, a eliminat o lacună care permitea ocolirea protecției prin manipularea depanatorului nucleului.
    • Sunt incluse patch-uri menite să îmbunătățească fiabilitatea și performanța generatorului de numere pseudo-aleatoare.
    • Când construiți folosind Clang 15, suportul pentru mecanismul de randomizare a structurilor nucleului este implementat.
    • Mecanismul Landlock, care vă permite să limitați interacțiunea unui grup de procese cu mediul extern, oferă suport pentru reguli care vă permit să controlați execuția operațiunilor de redenumire a fișierelor.
    • Subsistemul IMA (Integrity Measurement Architecture), conceput pentru a verifica integritatea componentelor sistemului de operare folosind semnături digitale și hash-uri, a fost trecut la utilizarea modulului fs-verity pentru verificarea fișierelor.
    • Logica acțiunilor la dezactivarea accesului neprivilegiat la subsistemul eBPF a fost schimbată - anterior toate comenzile asociate cu apelul de sistem bpf() erau dezactivate, iar începând cu versiunea 5.19, accesul la comenzile care nu duc la crearea de obiecte este lăsat. . Acest comportament necesită un proces privilegiat pentru a încărca un program BPF, dar apoi procesele neprivilegiate pot interacționa cu programul.
    • S-a adăugat suport pentru extensia AMD SEV-SNP (Secure Nested Paging), care oferă lucru în siguranță cu tabele de pagini de memorie imbricate și protejează împotriva atacurilor „undeSERVed” și „SEVerity” asupra procesoarelor AMD EPYC, care permit ocolirea AMD SEV (Secure Encrypted Virtualization). ) mecanism de protecţie.
    • S-a adăugat suport pentru mecanismul Intel TDX (Trusted Domain Extensions), care vă permite să blocați încercările terților de a accesa memoria criptată a mașinilor virtuale.
    • Driverul virtio-blk, folosit pentru a emula dispozitivele blocate, a adăugat suport pentru I/O folosind sondaj, care, conform testelor, a redus latența cu aproximativ 10%.
  • Subsistemul de rețea
    • Pachetul include o serie de patch-uri BIG TCP care vă permit să măriți dimensiunea maximă a unui pachet TCP la 4 GB pentru a optimiza funcționarea rețelelor interne de centre de date de mare viteză. O creștere similară a dimensiunii pachetului cu o dimensiune a câmpului antet de 16 biți este obținută prin implementarea pachetelor „jumbo”, a căror dimensiune în antetul IP este setată la 0, iar dimensiunea reală este transmisă într-un separat de 32 de biți. câmp într-un antet separat atașat. În testarea performanței, setarea dimensiunii pachetului la 185 KB a crescut debitul cu 50% și a redus semnificativ latența transferului de date.
    • S-au continuat lucrările de integrare a instrumentelor în stiva de rețea pentru a urmări motivele pentru care se elimină pachetele (coduri motiv). Codul motiv este trimis atunci când memoria asociată pachetului este eliberată și permite situații precum eliminarea pachetului din cauza erorilor de antet, detectarea falsificării rp_filter, sumă de control nevalidă, memorie lipsită, regulile IPSec XFRM declanșate, numărul de secvență invalid TCP etc.
    • S-a adăugat suport pentru retragerea conexiunilor MPTCP (MultiPath TCP) pentru a utiliza TCP obișnuit, în situațiile în care anumite caracteristici MPTCP nu pot fi utilizate. MPTCP este o extensie a protocolului TCP pentru organizarea funcționării unei conexiuni TCP cu livrarea de pachete simultan pe mai multe rute prin diferite interfețe de rețea asociate cu adrese IP diferite. S-a adăugat API pentru a controla fluxurile MPTCP din spațiul utilizatorului.
  • Оборудование
    • S-au adăugat peste 420 de linii de cod legate de driverul amdgpu, dintre care aproximativ 400 de linii sunt fișiere antet generate automat pentru datele registrului ASIC în driverul AMD GPU, iar alte 22.5k de linii asigură implementarea inițială a suportului pentru AMD SoC21. Dimensiunea totală a driverului pentru GPU-urile AMD a depășit 4 milioane de linii de cod. Pe lângă SoC21, driverul AMD include suport pentru SMU 13.x (System Management Unit), suport actualizat pentru USB-C și GPUVM și este pregătit să accepte următoarele generații de RDNA3 (RX 7000) și CDNA (AMD Instinct) platforme.
    • Driverul i915 (Intel) are capabilități extinse legate de gestionarea energiei. S-au adăugat identificatori pentru GPU-urile Intel DG2 (Arc Alchemist) utilizate pe laptopuri, au oferit suport inițial pentru platforma Intel Raptor Lake-P (RPL-P), au adăugat informații despre plăcile grafice Arctic Sound-M), au implementat ABI pentru motoarele de calcul, au fost adăugate pentru Suport carduri DG2 pentru formatul Tile4; pentru sistemele bazate pe microarhitectura Haswell, este implementat suportul DisplayPort HDR.
    • Driverul Nouveau a trecut la utilizarea handler-ului drm_gem_plane_helper_prepare_fb; alocarea de memorie statică a fost aplicată unor structuri și variabile. În ceea ce privește utilizarea modulelor kernel open source de către NVIDIA în Nouveau, munca de până acum se reduce la identificarea și eliminarea erorilor. În viitor, firmware-ul publicat este planificat să fie utilizat pentru a îmbunătăți performanța driverului.
    • S-a adăugat un driver pentru controlerul NVMe utilizat în computerele Apple bazate pe cipul M1.

În același timp, Latin American Free Software Foundation a format o versiune a nucleului complet gratuit 5.19 - Linux-libre 5.19-gnu, curățată de elemente de firmware și drivere care conțin componente sau secțiuni de cod non-libere, al căror scop este limitat de producător. Noua versiune curăță driverele pentru pureLiFi X/XL/XC și TI AMx3 Wkup-M3 IPC. Cod de curățare blob actualizat în Silicon Labs WFX, AMD amdgpu, Qualcomm WCNSS Peripheral Image Loader, Realtek Bluetooth, Mellanox Spectrum, Marvell WiFi-Ex, Intel AVS, IFS, drivere și subsisteme pu3-imgu. Procesarea fișierelor din arborele dispozitivelor Qualcomm AArch64 a fost implementată. S-a adăugat suport pentru noua schemă de denumire a componentelor Sound Open Firmware. S-a oprit curățarea șoferului ATM Ambassador, care a fost scos din nucleu. Gestionarea curățării bloburilor în HDCP și Mellanox Core a fost mutată în etichete kconfig separate.

Sursa: opennet.ru

Adauga un comentariu