Lansarea nucleului Linux 5.15

După două luni de dezvoltare, Linus Torvalds a prezentat versiunea nucleului Linux 5.15. Printre cele mai notabile modificări se numără: un nou driver NTFS cu suport pentru scriere, modulul ksmbd pentru implementarea unui server SMB, subsistemul DAMON pentru monitorizarea accesului la memorie, primitive de blocare pentru modul în timp real, suport pentru fs-verity în Btrfs, apelul de sistem process_mrelease pentru sistemele de reacție la lipsa de memorie, modulul pentru atestarea la distanță dm-ima.

Noua versiune include 13499 de corecții de la 1888 de dezvoltatori, dimensiunea patch-ului fiind de 42 MB (modificările au afectat 10895 de fișiere, au fost adăugate 632522 de linii de cod și au fost șterse 299966 de linii). Aproximativ 45% din toate modificările aduse în 5.15 sunt legate de driverele de dispozitive, aproximativ 14% se referă la actualizarea codului specific arhitecturilor hardware, 14% sunt legate de stiva de rețea, 6% de sistemele de fișiere și 3% de subsistemele interne ale nucleului.

Noutăți principale:

  • Subsistemul de disc, I/O și sistemele de fișiere
    • O nouă implementare a sistemului de fișiere NTFS, deschisă de compania Paragon Software, a fost acceptată în nucleu. Noul driver poate funcționa în modul de scriere și suportă toate funcționalitățile versiunii actuale NTFS 3.1, inclusiv atributele extinse ale fișierelor, listele de control al accesului (ACL), modul de compresie a datelor, gestionarea eficientă a spațiilor libere în fișiere (sparse) și redarea modificărilor din jurnal pentru restaurarea integrității după eșecuri.
    • În sistemul de fișiere Btrfs a fost implementat suportul pentru mecanismul fs-verity, utilizat pentru controlul transparent al integrității și autenticității fișierelor individuale prin hash-uri criptografice asociate fișierelor sau chei stocate în zona de metadate. Anterior, fs-verity era disponibil doar pentru sistemele de fișiere Ext4 și F2fs.

      În Btrfs a fost adăugat și suportul pentru maparea identificatorilor utilizatorilor pentru sistemele de fișiere montate (anterior era suportat pentru sistemele de fișiere FAT, ext4 și XFS). Această funcționalitate permite asocierea fișierelor unui anumit utilizator pe o partiție montată de un alt utilizator cu un alt utilizator în sistemul curent.

      Printre alte modificări în Btrfs: accelerarea adăugării cheilor în indexul directorului pentru a îmbunătăți performanța creării fișierelor; posibilitatea de a folosi raid0 cu un singur dispozitiv și raid10 cu două (de exemplu, în timpul reconfigurării matricei); opțiunea „rescue=ibadroots” pentru a ignora un copac de extenturi incorect; accelerarea operației „send”; reducerea conflictelor de blocare în timpul operațiunilor de redenumire; posibilitatea utilizării sectorilor de 4K pe sisteme cu dimensiunea paginii de memorie de 64K.

    • În XFS, a fost stabilizată utilizarea în FS a datelor după 2038. A fost implementat un mecanism de dezactivare întârziată a inode-urilor și suport pentru instalarea și ștergerea întârziată a atributelor fișierelor. Pentru a evita problemele, a fost eliminată posibilitatea dezactivării cotelor de disc pentru partițiile deja montate (cotele pot fi dezactivate forțat, dar numărătoarea asociată va continua, deci pentru o dezactivare completă este necesară remontarea).
    • În EXT4, s-a lucrat la îmbunătățirea performanței scrierii bufferelor delalloc și a gestionării fișierelor orfane (orphan) care continuă să existe deoarece sunt deschise, dar au rămas nefăcute legături cu un director. Gestionarea operațiunilor discard a fost mutată din fluxul jbd2 kthread pentru a evita blocările operațiunilor cu metadatele.
    • În F2FS, a fost adăugată opțiunea „discard_unit=block|segment|section” pentru a lega operațiunile discard (marcarea blocurilor eliberate care nu mai trebuie păstrate fizic) de alinierea față de bloc, sector, segment sau secțiune. A fost adăugat suportul pentru urmărirea modificării întârzierea la intrare/ieșire.
    • În sistemul de fișiere EROFS (Extendable Read-Only File System) a fost adăugat suport pentru input/output direct pentru fișierele salvate fără compresie, precum și suport pentru fiemap.
    • În OverlayFS, a fost implementată gestionarea corectă a flagurilor de montare „immutable”, „append-only”, „sync” și „noatime”.
    • În NFS, a fost îmbunătățită gestionarea situațiilor în care serverul NFS a încetat să răspundă la cereri. A fost adăugată posibilitatea de a monta de pe un dispozitiv deja utilizat server, dar disponibil printr-o altă adresă de rețea.
    • A început pregătirea pentru rescrierea subsistemului FSCACHE.
    • A fost adăugat suportul pentru partțiile EFI cu plasarea non-standard a tabelelor GPT.
    • Mecanismul fanotify a fost implementat cu un nou flag FAN_REPORT_PIDFD, care permite specificarea pidfd în metadatele returnate. Pidfd ajută la gestionarea situațiilor de reutilizare a PID pentru identificarea mai precisă a proceselor care accesează fișierele urmărite (pidfd este legat de un proces specific și nu se schimbă, în timp ce PID poate fi asociat cu un alt proces după finalizarea procesului curent asociat cu acest PID).
    • Apelului de sistem move_mount() i s-a adăugat posibilitatea de a adăuga puncte de montare în grupuri comune existente, ceea ce rezolvă problemele legate de salvarea și restaurarea stării proceselor în instrumentele CRIU în prezența mai multor spații de montare, folosite în containere izolate.
    • A fost adăugată protecția împotriva stărilor de competiție ascunse, care ar putea duce la deteriorarea fișierelor în timpul citirii din cache în timpul procesării golurilor din fișier.
    • A fost oprit suportul pentru blocările obligatorii ale fișierelor, implementate prin apeluri de sistem care duc la modificarea fișierului. Din cauza posibilelor stări de competiție, aceste blocări erau considerate nesigure și au fost declarate învechite cu mulți ani în urmă.
    • A fost eliminată subsistemul LightNVM, care permitea accesul direct la SSD, ocolind stratul de emulare. LightNVM și-a pierdut relevanța după apariția standardelor NVMe care prevăd posibilitatea zonării (ZNS, Zoned Namespace).
  • Memorie și servicii de sistem
    • A fost implementat subsistemul DAMON (Data Access MONitor), care permite urmărirea activității legate de accesul la date în memoria RAM, legată de un proces selectat care rulează în spațiul utilizatorului. Subsistemul permite analiza căror zone de memorie a accesat procesul pe parcursul întregii sale funcționări și care zone de memorie au rămas neutilizate. Printre caracteristicile DAMON se numără încărcarea redusă a CPU-ului, consumul mic de memorie, precizia ridicată și cheltuielile constante previzibile, care nu depind de dimensiune. Subsistemul poate fi utilizat atât de kernel pentru optimizarea gestionării memoriei, cât și de utilitare în spațiul utilizatorului pentru a înțelege exact ce face procesul și pentru a optimiza utilizarea memoriei, de exemplu, eliberarea memoriei excesive sistemului.
    • A fost implementată o apelare de sistem process_mrelease, care permite accelerarea procesului de eliberare a memoriei pentru procesele care își finalizează execuția. În condiții normale, eliberarea resurselor și încheierea unui proces nu se realizează instantaneu și, din diferite motive, poate fi întârziată, ceea ce îngreunează activitatea sistemelor de răspuns precoce la lipsa de memorie din spațiul utilizatorului, cum ar fi oomd (furnizat în systemd) și lmkd (folosit în Android). Prin apelul process_mrelease, aceste sisteme pot iniția mai predictibil returnarea memoriei de la procesele încheiate forțat.
    • Din ramura kernelului PREEMPT_RT, unde se dezvoltă suportul pentru funcționarea în timp real, au fost transferate variantele primitivului pentru organizarea blocajelor mutex, ww_mutex, rw_semaphore, spinlock și rwlock, bazate pe subsistemul RT-Mutex. În allocatorul SLUB slab, au fost aduse modificări care îmbunătățesc funcționarea în modul PREEMPT_RT și reduc influența asupra întreruperilor.
    • În cgroup a fost adăugat suportul pentru atributul planificatorului de sarcini SCHED_IDLE, care permite furnizarea acestui semn pentru toate procesele dintr-un anumit cgroup. Adică, aceste procese vor fi lansate doar atunci când în sistem nu există alte sarcini așteptând execuția. Spre deosebire de setarea atributului SCHED_IDLE pentru fiecare proces în parte, legarea SCHED_IDLE la cgroup ia în considerare greutatea relativă a sarcinilor din interiorul grupului atunci când se alege o sarcină pentru execuție.
    • Mecanismul de contabilizare a consumului de memorie în cgroup a fost extins prin posibilitatea de a urmări structuri de date suplimentare din kernel, inclusiv cele create pentru poll-ing, procesarea semnalelor și spațiile de nume.
    • A fost adăugat suport pentru planificarea asimetrică a legării sarcinilor la nucleele procesorului pe arhitecturi care permit unor CPU să execute sarcini de 32 de biți, în timp ce altele funcționează doar în modul de 64 de biți (de exemplu, ARM). Noua modalitate permite, la planificarea execuției sarcinilor de 32 de biți, să se ia în considerare doar CPU-urile care suportă sarcini de 32 de biți.
    • În interfața de intrare/ieșire asincronă io_uring a fost implementat suportul pentru deschiderea fișierelor direct în tabela de index fixed-file, fără a folosi descriptor de fișier, ceea ce permite accelerarea semnificativă a unor tipuri de operațiuni, însă contravine procesului tradițional Unix de utilizare a descriptorilor de fișier pentru deschiderea fișierelor.

      În io_uring pentru subsistemul BIO (Block I/O Layer) a fost implementat un nou mecanism de reciclare a BIO („BIO recycling”), care reduce overhead-ul în procesul de gestionare a memoriei interne și crește cu aproximativ 10% numărul operațiunilor de intrare/ieșire procesate pe secundă. De asemenea, în io_uring a fost adăugat suport pentru apelurile de sistem mkdirat(), symlinkat() și linkat().

    • Pentru programele BPF a fost implementată posibilitatea de a solicita și procesa evenimente ale unui timer. A fost adăugat un iterator pentru socket-urile UNIX, precum și capacitatea de a obține și seta opțiunile socket-urilor pentru setsockopt. În dumperul BTF a fost adăugat suport pentru date tipizate.
    • Pe sistemele NUMA cu diferite tipuri de memorie, care diferă prin performanță, în situația epuizării spațiului liber, a fost implementat transferul paginilor de memorie expulzate din memoria dinamică (DRAM) în memoria persistentă (Persistent Memory) în loc de ștergerea acestor pagini. Testele au arătat că o astfel de tactică îmbunătățește de obicei performanța pe aceste sisteme. De asemenea, pentru NUMA a fost implementată posibilitatea alocării paginilor de memorie pentru un proces dintr-un set selectat de noduri NUMA.
    • Pentru arhitectura ARC a fost implementat suport pentru tabele de pagini de memorie cu trei și patru niveluri, ceea ce va permite în viitor suportul pentru procesoare ARC pe 64 de biți.
    • Pentru arhitectura s390 a fost implementată posibilitatea utilizării mecanismului KFENCE pentru identificarea erorilor de manipulare a memoriei și a fost adăugat suport pentru detectorul de stări de competiție KCSAN.
    • A fost adăugat suport pentru indexarea listei de mesaje, afișate prin printk(), ceea ce permite extragerea tuturor acestor mesaje deodată și urmărirea modificărilor în spațiul utilizatorului.
    • În mmap() a fost suspendat suportul pentru opțiunea VM_DENYWRITE, iar codul kernel-ului a fost eliminat din utilizarea modului MAP_DENYWRITE, reducând numărul de situații care duc la blocarea scrierii în fișier cu eroarea ETXTBSY.
    • În subsistemul de trasare a fost adăugat un nou tip de verificări „Event probes”, care pot fi atașate la Evenimentele existente de trasare, definind propriul format de ieșire.
    • Atunci când se compilă nucleul cu ajutorul compilatorului Clang, assemblerul încorporat din proiectul LLVM este acum activat implicit.
    • În cadrul proiectului de eliminare a codului din nucleu care generează avertizări din partea compilatorului, a fost efectuat un experiment cu activarea implicită a modului „-Werror”, în care avertizările compilatorului sunt tratate ca erori. În timpul pregătirii versiunii 5.15, Linus a început să accepte doar modificări care nu generau avertizări în timpul compilării nucleului și a activat compilarea cu „-Werror”, însă a fost de acord cu opinia că această decizie a fost prematură și a amânat activarea implicită a „-Werror”. Gestionarea activării flag-ului „-Werror” la compilare se face prin parametrul WERROR, care este setat implicit la valoarea COMPILE_TEST, adică este activat doar pentru compilări de test.
  • Virtualizare și securitate
    • În Device Mapper (DM) a fost adăugat un nou handler dm-ima cu implementarea mecanismului de atestare la distanță bazat pe subsistemul IMA (Integrity Measurement Architecture), care permite unui serviciu extern să verifice starea subsistemelor nucleului pentru a se asigura de autenticitatea lor. În practică, dm-ima permite crearea, cu ajutorul Device Mapper, a unor stocări legate de sisteme externe în cloud, în care IMA verifică veridicitatea configurației DM target care este activată.
    • În prctl() a fost implementată o nouă opțiune PR_SPEC_L1D_FLUSH, care, atunci când este activată, face ca nucleul să șteargă conținutul cache-ului de nivelul 1 (L1D) de fiecare dată când se schimbă contextul. Acest mod permite realizarea unei protecții suplimentare împotriva atacurilor prin canal secundar pentru cele mai importante procese, atacuri efectuate pentru a determina datele depozitate în cache ca urmare a vulnerabilităților cauzate de execuția speculativă a instrucțiunilor în CPU. Prețul activării PR_SPEC_L1D_FLUSH (care, implicit, nu este activat) este o scădere semnificativă a performanței.
    • A fost implementată posibilitatea de a compila nucleul adăugând în GCC flagul „-fzero-call-used-regs=used-gpr”, care asigură resetarea tuturor registrelor înainte de a returna controlul din funcție. Opțiunea specificată permite protejarea împotriva scurgerii de informații din funcții și reduce cu 20% numărul de blocuri potrivite pentru construirea gadget-urilor ROP (Return-Oriented Programming) în exploate.
    • A fost implementată posibilitatea de a compila nuclee pentru arhitectura ARM64 sub formă de clienți pentru hypervisorul Hyper-V.
    • A fost propus un nou cadru pentru dezvoltarea driverelor „VDUSE”, care permite implementarea dispozitivelor de bloc virtuale în spațiul utilizatorului și utilizarea Virtio ca transport pentru accesul din sisteme invitate.
    • A fost adăugat driverul Virtio pentru magistrala I2C, care permite emularea controlerelor I2C în modul paravirtualizat folosind backend-uri separate.
    • A fost adăugat driverul Virtio gpio-virtio, care permite sistemelor invitate accesul la liniile GPIO furnizate de sistemul gazdă.
    • A fost adăugată posibilitatea de a restricționa accesul la paginile de memorie pentru driverele de dispozitive cu suport DMA pe sisteme fără I/O MMU (unitate de gestionare a memoriei).
    • În hypervisorul KVM a fost implementată posibilitatea de a exporta statistici sub formă de histograme liniare și logaritmice.
  • Subsystema de rețea
    • În cadrul nucleului a fost adăugat modulul ksmbd cu implementarea unui server de fișiere care utilizează protocolul SMB3. Modulul completează implementarea clientului SMB disponibil anterior în nucleu și, spre deosebire de serverul SMB care funcționează în spațiul utilizatorului, este mai eficient din punct de vedere al performanței, consumului de memorie și integrării cu funcționalitățile extinse ale nucleului. Ksmbd este prezentat ca o extensie de înaltă performanță și gata de utilizare pe dispozitive încorporate, integrabilă cu instrumentele și bibliotecile Samba, după cum este necesar. Între caracteristicile sale, ksmbd se remarcă prin îmbunătățirea suportului pentru tehnologia de caching distribuit al fișierelor (SMB leases) pe sistemele locale, ceea ce permite reducerea semnificativă a traficului. În viitor, se preconizează adăugarea suportului RDMA („smbdirect”) și extensiilor protocolului legate de îmbunătățirea fiabilității criptării și verificării semnăturilor digitale.
    • În clientul CIFS a fost întreruptă suportul pentru NTLM și algoritmi de autentificare mai puțin fiabili, bazați pe algoritmul DES și utilizați în protocolul SMB1.
    • În implementarea podurilor de rețea pentru VLAN, a fost adăugată suport pentru multicast.
    • În driverul bonding, utilizat pentru agregarea interfețelor de rețea, s-a adăugat suport pentru subsistemul XDP (eXpress Data Path), care permite manipularea pachetelor de rețea înainte ca acestea să fie procesate de stiva de rețea a nucleului Linux.
    • În stiva wireless mac80211 a fost implementat suport pentru 6GHZ STA (Special Temporary Authorization) în modurile LPI, SP și VLP, precum și posibilitatea de a seta TWT (Target Wake Time) separate în modul punct de acces.
    • A fost adăugat suport pentru protocolul MCTP (Management Component Transport Protocol), folosit pentru interacțiunea între controlerele de gestionare și dispozitivele corelate (procesori gazdă, dispozitive periferice etc.).
    • Continuarea integrării în nucleul MPTCP (MultiPath TCP), o extensie a protocolului TCP pentru organizarea conexiunilor TCP cu livrarea pachetelor simultan pe mai multe căi prin diferite interfețe de rețea legate de adrese IP diferite. În noua versiune, a fost adăugat suport pentru adrese în modul fullmesh.
    • În netfilter au fost adăugate manipulatoare de fluxuri de rețea încapsulate în protocolul SRv6 (Segment Routing IPv6).
    • A fost adăugat suport sockmap pentru socket-uri Unix pentru streaming.
  • Echipament
    • În driverul amdgpu a fost implementat suport pentru APU Cyan Skillfish (echipat cu GPU Navi 1x). Pentru APU Yellow Carp a fost implementat suport pentru codec-uri video. Suportul pentru GPU Aldebaran a fost îmbunătățit. Au fost adăugate noi identificatoare pentru plăcile bazate pe GPU Navi 24 „Beige Goby” și RDNA2. A fost propusă o implementare îmbunătățită a ecranelor virtuale (VKMS). A fost realizat suport pentru monitorizarea temperaturii cipurilor AMD Zen 3.
    • În driverul amdkfd (pentru GPU discrete, cum ar fi Polaris) a fost implementat un manager de memorie virtuală partajată (SVM, shared virtual memory) pe baza subsistemului HMM (Heterogeneous Memory Management), care permite utilizarea dispozitivelor cu blocuri proprii de gestionare a memoriei (MMU, memory management unit) ce pot accesa memoria principală. De asemenea, prin intermediul HMM poate fi organizat un spațiu de adresare comun între GPU și CPU, în care GPU poate accesa memoria principală a procesului.
    • În driverul i915 pentru plăcile grafice Intel, s-a extins utilizarea managerului de gestionare a memoriei video TTM și s-a inclus posibilitatea de gestionare a consumului de energie pe baza GuC (Graphics micro Controller). A început pregătirea pentru implementarea suportului pentru placa grafică Intel ARC Alchemist și GPU Intel Xe-HP.
    • Driverul nouveau implementa controlul iluminării panourilor eDP folosind DPCD (Date de Configurare DisplayPort).
    • În driverul msm a fost adăugată suportul pentru GPU Adreno 7c Gen 3 și Adreno 680.
    • Pentru cipul Apple M1 a fost implementat driverul IOMMU.
    • A fost adăugat driverul audio pentru sistemele bazate pe APU AMD Van Gogh.
    • În ramura staging a fost adăugat driverul Realtek R8188EU, care a înlocuit versiunea veche a driverului (rtl8188eu) pentru chipseturile wireless Realtek RTL8188EU 802.11 b/g/n.
    • În compunerea sa, a fost acceptat driverul ocp_pt pentru placa PCIe dezvoltată de compania Meta (Facebook) cu implementarea ceasurilor atomice miniaturale și a receptorului GNSS, care pot fi utilizate pentru organizarea lucrului separat servere sincronizarea timpului precis.
    • A fost adăugată suportul pentru smartphone-urile Sony Xperia 10II (Snapdragon 665), Xiaomi Redmi 2 (Snapdragon MSM8916), Samsung Galaxy S3 (Snapdragon MSM8226), Samsung Gavini/Codina/Kyle.
    • A fost adăugată suportul pentru ARM SoC și plăcile NVIDIA Jetson TX2 NX Developer Kit, Sancloud BBE Lite, PicoITX, DRC02, SolidRun SolidSense, SKOV i.MX6, Nitrogen8, Traverse Ten64, GW7902, Microchip SAMA7, Qualcomm Snapdragon SDM636/SM8150, Renesas R-Car H3e-2G/M3e-2G, Marvell CN913x, ASpeed AST2600 (plăci server Facebook Cloudripper, Elbert și Fuji), 4KOpen STiH418-b2264.
    • A fost adăugat suportul pentru panourile LCD Gopher 2b, EDT ETM0350G0DH6/ETMV570G2DHU, LOGIC Technologies LTTD800480070-L6WH-RT, Multi-Innotechnology MI1010AIT-1CP1, Innolux EJ030NA 3.0, ilitek ili9341, E Ink VB3300-KCA, Samsung ATNA33XC20, Samsung DB7430, WideChips WS2401.
    • A fost adăugat driverul LiteETH cu suport pentru controlerele Ethernet utilizate în SoC-uri programabile LiteX (pentru FPGA).
    • În driverul usb-audio a fost adăugată opțiunea lowlatency pentru a controla activarea funcționării în mod de latență minimă. De asemenea, a fost adăugată opțiunea quirk_flags pentru a transmite setările specifice dispozitivului.

În același timp, Fondul Latin American pentru Software Liber a lansat o variantă complet liberă a nucleului 5.15 — Linux-libre 5.15-gnu, curățată de elemente de firmware și drivere care conțin componente sau cod nesigure, a căror utilizare este limitată de producător. În noua versiune, a fost implementat un mesaj de logare pentru finalizarea curățării. Au fost remediate problemele în formarea pachetelor folosind mkspec, și a fost îmbunătățită suportul pentru pachetele snap. S-au eliminat unele avertismente generate în timpul procesării fișierului de antet firmware.h. Au fost permise afișarea unor tipuri de avertismente („format-extra-args”, comentarii, funcții și variabile neutilizate) în timpul compilării în modul „-Werror”. A fost adăugată curățarea driverului gehc-achc. Codul de curățare a blob-urilor din drivere și subsisteme adreno, btusb, btintel, brcmfmac, aarch64 qcom a fost actualizat. Curățarea driverelor prism54 (eliminat) și rtl8188eu (înlocuit cu r8188eu) a fost oprită.

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