După două luni de dezvoltare, Linus Torvalds a lansat versiunea nucleului Linux 5.19. Printre cele mai notabile schimbări se numără: suportul pentru arhitectura procesorului LoongArch, integrarea patch-urilor „BIG TCP”, modul „on-demand” în fscache, eliminarea codului pentru suportul formatului a.out, posibilitatea de a utiliza ZSTD pentru comprimarea firmware-urilor, o interfață pentru gestionarea eliminării memoriei din spațiul utilizatorului, creșterea fiabilității și performanței generatorului de numere pseudo-aleatorii, suportul pentru extensiile Intel IFS (In-Field Scan), AMD SEV-SNP (Secure Nested Paging), Intel TDX (Trusted Domain Extensions) și ARM SME (Scalable Matrix Extension).
În anunț, Linus a menționat că cel mai probabil următoarei versiuni a nucleului îi va fi atribuit numărul 6.0, deoarece în ramura 5.x s-au acumulat suficiente versiuni pentru a schimba primul număr din versiune. Schimbarea numerotării se realizează din motive estetice și este un pas formal care elimină disconfortul cauzat de acumularea unui număr mare de versiuni în serie.
De asemenea, Linus a 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 forma versiunea. Aceasta nu este stația de lucru principală a lui Linus, dar a folosit această platformă pentru a verifica adecvarea sa pentru lucrul la nucleu și pentru a fi sigur că poate forma versiuni ale nucleului în timpul călătoriilor, având la îndemână un laptop ușor. Cu mulți ani înainte, Linus a avut experiența utilizării echipamentului Apple pentru dezvoltare – odată folosea un computer bazat pe CPU ppc970 și un laptop Macbook Air.
Noua versiune include 16.401 corecturi de la 2.190 de dezvoltatori (în versiunea anterioară au fost 16.206 corecturi de la 2.127 de dezvoltatori), dimensiunea patch-ului este de 90 MB (modificările au afectat 13.847 de fișiere, au fost adăugate 1.149.456 de linii de cod, 349.177 de linii au fost șterse). Aproximativ 39% din toate modificările prezentate în 5.19 sunt legate de driverele de dispozitiv, aproximativ 21% din modificări sunt legate de actualizarea codului specific arhitecturilor hardware, 11% sunt legate de stiva de rețea, 4% de sisteme de fișiere și 3% de subsistemele interne ale nucleului.
Cele mai importante noutăți din nucleul 5.19:
- Subsistemul de disc, I/O și sistemele de fișiere
- Sistemul de fișiere EROFS (Enhanced Read-Only File System), destinat utilizării pe partiții accesibile în modul doar pentru citire, a fost adaptat pentru a utiliza sub-sistemul fscache, care asigură caching-ul datelor. Această modificare a crescut semnificativ performanța sistemelor din care se lansează un număr mare de containere dintr-o imagine bazată pe EROFS.
- În sub-sistemul fscache a fost adăugat un mod de citire la cerere („on-demand”), care este activat pentru a optimiza EROFS. Noua modalitate permite organizarea caching-ului citirii din imagini de FS, aflate în sistemul local. Spre deosebire de modul inițial disponibil, orientat spre cache-ul în sistemul de fișiere local al datelor transmise prin sisteme de fișiere de rețea, modul „on-demand” delegă funcțiile de extragere a datelor și scrierea lor în cache unui proces de fundal separat, care rulează în spațiul utilizatorului.
- În XFS este posibilă stocarea a miliarde de atribute extinse în i-node. Numărul maxim de extenturi pentru un singur fișier a fost crescut de la 4 miliarde la 247. A fost implementat un mod pentru actualizarea atomică a mai multor atribute extinse ale fișierului.
- În sistemul de fișiere Btrfs a fost optimizată gestionarea blocajelor, ceea ce a permis o creștere a performanței de aproximativ 7% în modul de scriere directă nowait. Performanța operațiunilor în modul NOCOW (fără copy-on-write) a fost crescută de aproximativ 3%. A fost redusă încărcătura pe cache-ul de pagini în timpul executării comenzii „send”. Dimensiunea minimă a sub-paginilor a fost redusă de la 64K la 4K (se pot utiliza sub-pagini de dimensiuni mai mici decât paginile nucleului). A fost realizată tranziția de la utilizarea arborelui de bază (radix tree) la algoritmul XArrays.
- În serverul NFS a fost adăugat un mod de extensie a menținerii stării de blocare, stabilită de client, care a încetat să răspundă la cereri. Noua modalitate permite întârzierea curățării blocării timp de până la o zi, dacă un alt client nu cere o blocare concurentă. În mod standard, blocarea este curățată la 90 de secunde după ce clientul a încetat să răspundă.
- În sub-sistemul de urmărire a evenimentelor în FS fanotify a fost implementat un flan FAN_MARK_EVICTABLE, prin care se poate dezactiva fixarea i-node-urilor țintă în cache, de exemplu, pentru a ignora ramificațiile fără a fixa părțile lor în cache.
- Driverul pentru FS FAT32 a fost îmbunătățit cu suport pentru obținerea informațiilor despre data creației fișierului prin apelul de sistem statx, implementând o variantă mai eficientă și funcțională a funcției stat(), care returnează informații extinse despre fișier.
- Au fost efectuate optimizări semnificative în driverul exFAT, legate de facilitarea curățării simultane a grupurilor de sectoare în modul activ ‘dirsync’, în loc de curățarea secvențială pe sectoare. Prin reducerea numărului de cereri de blocuri după optimizări, performanța creării unui număr mare de directoare pe cardul SD a crescut cu peste 73-85%, în funcție de dimensiunea cluster-ului.
- În nucleu a fost inclusă prima actualizare corectivă a driverului ntfs3. De la integrarea ntfs3 în nucleul 5.15 în octombrie anul trecut, driverul nu a fost actualizat și a fost pierdut contactul cu dezvoltatorii, dar acum aceștia au reluat publicarea modificărilor. În patch-urile oferite au fost corectate erori care duceau la scurgeri de memorie și terminări neașteptate, s-au rezolvat problemele cu executarea xfstests, s-a curățat codul neutilizat și s-au corectat greșelile tipografice.
- Pentru OverlayFS a fost implementată capacitatea de mapare a identificatorilor utilizatorilor pe sistemele de fișiere montate, folosită pentru a asocia fișierele unui anumit utilizator pe o partiție montată a unui alt utilizator din sistemul actual.
- Memorie și servicii de sistem
- A fost adăugată suportul inițial pentru arhitectura setului de comenzi LoongArch, utilizată în procesoarele Loongson 3 5000, care implementează un nou ISA RISC, similar cu MIPS și RISC-V. Arhitectura LoongArch este disponibilă în trei variante: 32 de biți restricționați (LA32R), 32 de biți standard (LA32S) și 64 de biți (LA64).
- Codul pentru suportul formatului de fișiere executabile a.out a fost eliminat, acesta fiind clasificat ca învechit în versiunea 5.1. Formatul a.out nu mai este utilizat pe sisteme cu Linux, iar generarea fișierelor a.out nu este suportată de instrumentele moderne în configurațiile pentru Linux în mod implicit. Bootloaderul pentru fișierele a.out poate fi realizat complet în spațiul utilizatorului.
- Suportul pentru opțiunile de boot specifice arhitecturii x86 a fost oprit: nosep, nosmap, nosmep, noexec și noclflush.
- Suportul pentru arhitectura CPU h8300 (Renesas H8/300) a fost oprit, aceasta fiind demult fără suport.
- Funcționalitățile legate de reacția la identificarea blocărilor de tip split lock au fost extinse, apariția acestora fiind cauzată de accesul la date nealiniate în memorie, deoarece, în timpul execuției unei instrucțiuni atomice, datele traversează două linii de cache ale CPU-ului. Astfel de blocări duc la o reducere semnificativă a performanței. Dacă anterior, în mod implicit, nucleul emitea un avertisment cu informații despre procesul care a generat blocarea, acum procesul problematic va fi de asemenea încetinit pentru a menține performanța restului sistemului.
- A fost adăugat suport pentru mecanismul IFS (In-Field Scan), implementat în procesoarele Intel, care permite executarea testelor de diagnosticare de nivel scăzut pentru CPU, capabile să identifice probleme care nu sunt detectate de instrumentele standard bazate pe coduri de corecție a erorilor (ECC) sau biți de paritate. Testele efectuate sunt prezentate sub formă de firmware ce poate fi încărcat, asemănător actualizărilor de microcod. Rezultatele testării sunt disponibile prin sysfs.
- A fost implementată posibilitatea de a încorpora în nucleu fișierul bootconfig, permițând, pe lângă opțiunile liniei de comandă, definirea parametrilor de funcționare a nucleului printr-un fișier de configurare. Includerea se face prin opțiunea de compilare ‘CONFIG_BOOT_CONFIG_EMBED_FILE=»/PATH/TO/BOOTCONFIG/FILE»‘. În trecut, bootconfig era definit prin atașarea la imaginea initrd. Încorporarea în nucleu permite utilizarea bootconfig în configurațiile fără initrd.
- A fost implementată posibilitatea de a încărca firmware-uri comprimate folosind algoritmul Zstandard. În sysfs a fost adăugat un set de fișiere de control /sys/class/firmware/*, permițând inițierea încărcării firmware-urilor din spațiul utilizatorului.
- În interfața de intrare/ieșire asincronă io_uring a fost introdusă o nouă flag IORING_RECVSEND_POLL_FIRST, care, atunci când este activată, permite ca operațiunea de rețea să fie inițial trimisă pentru procesare folosind polling, ceea ce poate economisi resurse în situațiile în care este acceptabilă prelucrarea operațiunii cu o anumită întârziere. Suportul pentru apelul de sistem socket() a fost, de asemenea, adăugat în io_uring, au fost propuse noi flaguri pentru simplificarea gestionării descriptorilor de fișiere, a fost adăugată o modalitate „multi-shot” pentru acceptarea mai multor conexiuni simultan în apelul accept(), fiind adăugate operațiuni pentru redirecționarea comenzilor NVMe direct către dispozitiv.
- Pentru arhitectura Xtensa este asigurată suportul pentru instrumentul de depanare KCSAN (Kernel Concurrency Sanitizer), destinat pentru identificarea dinamică a condițiilor de competiție în cadrul nucleului. De asemenea, a fost adăugat suport pentru modul de repaus și coprocesoare.
- Pentru arhitectura m68k (Motorola 68000) a fost implementat mașină virtuală (simulatorul platformei), bazat pe emulatorul Android Goldfish.
- Pentru arhitectura AArch64 a fost implementat suportul pentru extensiile Armv9-A SME (Scalable Matrix Extension).
- În subsistemul eBPF a fost permisă stocarea pointerilor tipizați în structurile map, iar de asemenea a fost adăugat suport pentru pointerii dinamici.
- A fost propus un nou mecanism proactiv de excludere a memoriei, care suportă gestionarea din spațiul utilizatorului prin intermediul fișierului memory.reclaim. Scrierea unui număr în fișierul specificat va încerca să excludă numărul corespunzător de octeți din setul asociat cu cgroup.
- A fost îmbunătățită precizia contabilizării utilizării memoriei în timpul compresiei datelor din secțiunea de swap prin intermediul mecanismului zswap.
- Pentru arhitectura RISC-V este asigurat suportul pentru rularea fișierelor executabile pe 32 de biți pe sisteme de 64 de biți, a fost adăugat un mod pentru legarea atributelor de restricție la paginile de memorie (de exemplu, pentru a interzice cache-ul) și a fost implementată funcția kexec_file_load().
- Implementarea suportului pentru sistemele de 32 de biți Armv4T și Armv5 a fost adaptată pentru utilizarea în compilările universale multi-platforme ale nucleului, potrivite pentru diferite sisteme ARM.
- Virtualizare și securitate
- În subsistemul EFI a fost implementată posibilitatea transmiterii confidențiale a informațiilor secrete către sistemele gazdă fără dezvăluirea acestora gazdei. Datele sunt furnizate prin intermediul directorului security/coco în securityfs.
- În modul de protecție Lockdown, care restricționează accesul utilizatorului root la nucleu și blochează modalitățile de ocolire a UEFI Secure Boot, a fost eliminată o breșă care permitea ocolirea protecției prin manipularea debugger-ului de nucleu.
- Au fost incluse patch-uri menite să îmbunătățească fiabilitatea și performanța generatorului de numere pseudo-aleatorii.
- La construirea cu ajutorul Clang 15 a fost implementat suportul pentru mecanismul de randomizare a structurilor nucleului.
- În mecanismul Landlock, care permite restricționarea interacțiunii unui grup de procese cu mediul extern, a fost adăugat suport pentru reguli care permit controlul efectuării operațiunilor de redenumire a fișierelor.
- Sub-sistemul IMA (Integrity Measurement Architecture), destinat verificării integrității componentelor sistemului de operare prin semnături digitale și hash-uri, a fost adaptat pentru a folosi modulul fs-verity pentru verificarea fișierelor.
- Logica acțiunilor la dezactivarea accesului neprivilegiat la sub-sistemul eBPF a fost modificată — anterior erau dezactivate toate comenzile legate de apelul de sistem bpf(), dar începând cu versiunea 5.19, accesul la comenzile care nu conduc la crearea de obiecte a fost păstrat. Cu un astfel de comportament, pentru a încărca un program BPF este necesar un proces privilegiat, dar ulterior procesele neprivilegiate pot interacționa cu acest program.
- A fost adăgata suportul pentru extensia AMD SEV-SNP (Secure Nested Paging), care asigură funcționarea sigură cu tabelele de pagini imbricate și protejează împotriva atacurilor «undeSErVed» și «SEVerity» pe procesoarele AMD EPYC, care permit ocolirea mecanismului de protecție AMD SEV (Secure Encrypted Virtualization).
- A fost adăgat suportul pentru mecanismul Intel TDX (Trusted Domain Extensions), care permite blocarea încercărilor de acces neautorizat la memoria criptată. mașini virtuale.
- În driverul virtio-blk, utilizat pentru emularea dispozitivelor bloc, a fost adăugat suportul pentru input/output utilizând polling, ceea ce, conform testelor efectuate, a permis reducerea întârzierilor cu aproximativ 10%.
- Subsystema de rețea
- A fost inclusă o serie de patch-uri BIG TCP care permit creșterea dimensiunii maxime a pachetului TCP la 4GB pentru optimizarea funcționării rețelelor interne de mare viteză ale centrelor de date. Această creștere a dimensiunii pachetului, cu un câmp de 16 biți în antet, se realizează prin implementarea pachetelor «jumbo», ale căror dimensiuni în antetul IP sunt setate la 0, iar dimensiunea reală este transmisă într-un câmp de 32 de biți separat în antetul atașat. În testele de performanță, setarea dimensiunii pachetului la 185 KB a permis creșterea lățimii de bandă cu 50% și a redus semnificativ întârzierile în transferul de date.
- A fost continuată munca de integrare în stiva de rețea a unor instrumente pentru monitorizarea cauzelor respingerii pachetelor (codes reason). Codul motivului este transmis în timpul eliberării memoriei asociate cu pachetul și permite luarea în considerare a unor situații, cum ar fi respingerea unui pachet din cauza erorilor de completare a câmpurilor din antet, detectarea spoofing-ului de către filtrul rp_filter, checksum invalid, lipsa de memorie, activarea regulilor IPSec XFRM, număr de secvență TCP greșit etc.
- A fost adăugat suport pentru revenirea conexiunilor MPTCP (MultiPath TCP) la utilizarea TCP obișnuit, în situațiile în care anumite capacități MPTCP nu pot fi folosite. MPTCP este o extensie a protocolului TCP pentru organizarea funcționării conexiunii TCP cu livrarea pachetelor simultan pe mai multe rute prin diferite interfețe de rețea asociate cu adrese IP diferite. A fost adăugat un API pentru gestionarea fluxurilor MPTCP din spațiul utilizatorului.
- Echipament
- Au fost adăugate mai mult de 420 de mii de linii de cod legate de driverul amdgpu, dintre care aproximativ 400 de mii de linii sunt dedicate fișierelor header generate automat care conțin date pentru registrii ASIC din driverul pentru GPU AMD, iar alte 22.5 mii de linii asigură implementarea inițială a suportului pentru AMD SoC21. Dimensiunea totală a driverului pentru GPU 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), a fost actualizat suportul pentru USB-C și GPUVM, și s-au făcut pregătiri pentru suportul generațiilor următoare de platforme RDNA3 (RX 7000) și CDNA (AMD Instinct).
- În driverul i915 (Intel) au fost extinse capacitățile legate de gestionarea consumului de energie. Au fost adăugate identificatoare GPU Intel DG2 (Arc Alchemist), utilizate pe laptopuri, a fost asigurat suport inițial pentru platforma Intel Raptor Lake-P (RPL-P), au fost adăugate informații despre plăcile grafice Arctic Sound-M), a fost implementată ABI pentru motoarele de calcul, pentru plăcile DG2 a fost adăugat suport pentru formatul Tile4, iar pentru sistemele bazate pe microarhitectura Haswell a fost implementat suport pentru DisplayPort HDR.
- În driverul Nouveau s-a realizat trecerea la utilizarea handlerului drm_gem_plane_helper_prepare_fb, pentru anumite structuri și variabile a fost aplicată alocarea statică a memoriei. În ceea ce privește utilizarea în Nouveau a codului sursă publicat de compania NVIDIA pentru modulele kernel, activitatea deocamdată se rezumă la identificarea și eliminarea erorilor. În viitor, firmware-ul publicat este planificat să fie utilizat pentru îmbunătățirea performanței driverului.
- A fost adăugat un driver pentru controllerul NVMe, folosit în calculatoarele Apple cu chip M1.
Între timp, Fondul Occidental de Software Liber din America Latină a creat o variantă complet liberă a nucleului 5.19 — Linux-libre 5.19-gnu, curățat de elemente de firmware și drivere care conțin componente sau porțiuni de cod neproprii, a căror utilizare este restricționată de producător. În acest nou release, s-a efectuat curățarea driverelor pentru pureLiFi X/XL/XC și TI AMx3 Wkup-M3 IPC. A fost actualizat codul de curățare a bloburilor în driverele și subsistemele Silicon Labs WFX, AMD amdgpu, Qualcomm WCNSS Peripheral Image Loader, Realtek Bluetooth, Mellanox Spectrum, Marvell WiFi-Ex, Intel AVS, IFS, driverele pu3-imgu. A fost implementată procesarea fișierelor devicetree pentru Qualcomm AArch64. A fost adăugată suport pentru noul sistem de numire a componentelor Sound Open Firmware. S-a oprit curățarea driverului ATM Ambassador, eliminat din nucleu. Gestionarea curățării bloburilor în HDCP și Mellanox Core a fost mutată în etichete separate kconfig.
Sursa: opennet.ro
