Lansarea nucleului Linux 5.3

După două luni de dezvoltare, Linus Torvalds a prezentat lansarea nucleului Linux 5.3. Printre cele mai notabile modificări se numără: suport pentru GPU AMD Navi, procesoare Zhaoxi și tehnologia de gestionare a consumului de energie Intel Speed Select, posibilitatea de a utiliza instrucțiuni umwait pentru a aștepta fără a folosi cicluri,
modul 'utilization clamping' care crește interactivitatea pentru CPU asimetrice, apelul de sistem pidfd_open, capacitatea de a utiliza adrese IPv4 din subnetul 0.0.0.0/8, posibilitatea de accelerare hardware pentru nftables, suport HDR în subsistemul DRM, integrarea hipervizorului ACRN.

În anunț Noua versiune a lui Linus a reamintit tuturor dezvoltatorilor despre regula principală în dezvoltarea nucleului - menținerea invariabilității comportamentului pentru componentele din spațiul utilizatorului. Modificările din nucleu nu trebuie să afecteze aplicațiile existente și să ducă la regresii la nivel de utilizator. Totuși, schimbarea comportamentului poate provoca nu doar modificări ABI, eliminarea codului vechi sau apariția de erori, ci și influențarea indirectă a îmbunătățirilor utile care funcționează corect. Ca exemplu vizibil, a fost respinsă o optimizare utilă în codul Ext4, care reduce numărul de accesări la stocare prin dezactivarea citirii anticipative a tabelului inode pentru cereri mici de intrare/ieșire.

Optimizarea a condus la faptul că, din cauza reducerii activității de disc, entropia pentru generatorul de numere aleatoare getrandom() a început să se acumuleze mai lent și, în anumite configurații, în condiții specifice, puteau apărea blocări în timpul încărcării până când pușca de entropie era plină. Deoarece optimizarea este într-adevăr utilă, a apărut o discuție printre dezvoltatori, în care s-a propus rezolvarea problemei prin dezactivarea modului blocant pentru apelul getrandom() ca setare implicită, adăugând un indicator opțional pentru a aștepta entropia, dar o astfel de modificare ar afecta calitatea numerelor aleatoare în stadiile inițiale de încărcare.

În noua versiune au fost acceptate 15794 de corecturi de la 1974 de dezvoltatori,
dimensiunea patch-ului este de 92 MB (modificările au afectat 13986 de fișiere, au fost adăugate 258419 de linii de cod,
s-au eliminat 599137 de linii). Aproximativ 39% din toate modificările incluse în 5.3
sunt legate de driverele de dispozitive, aproximativ 12% din modificări au
legătură cu actualizarea codului specific arhitecturii hardware, 11%
legat de stiva de rețea, 3% — de sistemele de fișiere și 3% de interne
interne ale nucleului.

Principalele noutăți:

  • Memorie și servicii de sistem
    • S-a continuat dezvoltarea funcționalității ‘pidfd’, care ajută la gestionarea situațiilor de reutilizare a PID (pidfd este legat de un anumit proces și nu se schimbă, în timp ce PID-ul poate fi asociat cu un alt proces după încheierea procesului curent asociat cu acest PID). Precedent, kernel-ul a fost deja îmbunătățit
      cu apelul de sistem pidfd_send_signal() și cu flagul CLONE_PIDFD în apelul clone(), care permite obținerea pidfd pentru utilizare în idfd_send_signal(). Atunci când se folosește apelul clone() cu flagul CLONE_PIDFD, puteau apărea probleme cu managerii de servicii sau cu sistemul de închidere forțată a proceselor în cazul lipsei de memorie pe platforma Android. În acest caz, se folosește apelul fork() sau clone() fără CLONE_PIDFD.

      În kernel-ul 5.3 a fost introdus apelul de sistem pidfd_open(), care permite obținerea unui pidfd valid pentru un proces existent, creat fără apelul clone() cu flagul CLONE_PIDFD. De asemenea, s-a adăugat suport pentru polling-ul pidfd prin poll() și epoll(), ceea ce permite managerilor de procese să urmărească finalizarea proceselor, fără a se teme de starea de competiție în cazul în care PID-ul este atribuit unui nou proces. Mecanismul de notificare a finalizării unui proces legat de pidfd este similar cu informarea despre finalizarea propriului său proces copil;

    • În programatorul de sarcini a fost adăugat suport pentru mecanismul de restrângere a utilizării (Utilization clamping), care permite respectarea intervalelor minime sau maxime de frecvență, în funcție de sarcinile active pe CPU. Mecanismul propus accelerează sarcinile care influențează direct calitatea interacțiunii cu utilizatorul, prin lansarea acestor sarcini cel puțin la limita inferioară a frecvenței „solicitate”. Sarcinile cu prioritate mică, care nu afectează utilizatorul, sunt lansate folosind limita superioară a frecvenței „permise”. Limitele sunt definite prin atributele sched_uclamp_util_min și sched_uclamp_util_max în apelul de sistem sched_setattr().
    • S-a adăugat suport pentru tehnologia de gestionare a consumului de energie Intel Speed Select, disponibilă pe unele servere cu procesoare Intel Xeon. Tehnologia menționată permite configurarea performanței și lățimii de bandă a secțiunilor pentru diferite nuclee CPU, astfel încât să se prioritizeze performanța pentru sarcinile executate pe nuclee specifice, sacrificând performanța pe alte nuclee;
    • Proceselor în spațiul utilizatorului a fost oferită posibilitatea de a aștepta pentru o perioadă scurtă de timp fără a utiliza cicluri prin instrucțiunea umwait. Această instrucțiune, împreună cu instrucțiunile umonitor și tpause, va fi inclusă în cipurile Intel „Tremont” care se pregătesc pentru lansare, permițând implementarea unor întârzieri eficiente din punct de vedere al consumului de energie și fără a afecta performanța altor fire în utilizarea Hyper Threading;
    • Pentru arhitectura RISC-V a fost adăugată suportul pentru pagini mari de memorie (huge pages);
    • În mecanismul de urmărire „kprobes” a fost adăugată capacitatea de dereferențiere a pointerilor kernel în spațiul utilizatorului, ceea ce poate fi folosit, de exemplu, pentru a evalua conținutul structurilor transmise în apeluri de sistem. De asemenea, a fost adăugată posibilitatea de a stabili verificări la etapa de încărcare.
    • În fișierul de configurare a fost adăugată opțiunea PREEMPT_RT pentru funcționarea în mod real. Codul pentru suportul modului real nu a fost deocamdată adăugat în kernel, dar apariția opțiunii este un semn bun că epopeea de lungă durată a posibilitatea patch-urilor Realtime-Preempt se apropie de final;
    • A fost adăugat apelul de sistem clone3() cu implementarea unei variante mai extensibile a interfeței clone(), care permite specificarea unui număr mai mare de mărci;
    • A fost adăugat handlerul bpf_send_signal(), permițând programelor BPF să trimită semnale către procese arbitrare;
    • Pentru evenimentele perf în mediu de hypervizor KVM a fost adăugată o nouă mecanism de filtrare a evenimentelor, permițând administratorului să definească tipurile de evenimente acceptate sau nu acceptate pentru monitorizare pe partea sistemului gazdă;
    • În mecanismul de verificare a aplicațiilor eBPF a fost adăugată capacitatea de a procesa programe cu bucle, dacă execuția buclei este limitată și nu poate duce la depășirea limitei maxime a numărului de instrucțiuni;
  • Subsistemul de disc, I/O și sistemele de fișiere
    • Pentru sistemul de fișiere XFS a fost implementată capacitatea de parcurgere a inode-urilor în mod multiplu (de exemplu, în timpul verificării cotelor). S-au adăugat noi ioctl BULKSTAT și INUMBERS, care oferă acces la funcționalitățile introduse în cea de-a cincea ediție a formatului FS, cum ar fi timpul de creare a inode-ului și posibilitatea specificării parametrilor BULKSTAT și INUMBERS pentru fiecare grup AG (Allocation Groups);
    • În Ext4 s-a adăugat suport pentru spații goale în directoare (blocuri neasociate).
      S-a asigurat procesarea flagra „i” (immutable) pentru fișierele deschise (interzicerea scrierii în situația în care flagul a fost setat în momentul în care fișierul a fost deja deschis);
    • În Btrfs s-a asigurat determinarea unei realizări rapide crc32c pe toate arhitecturile;
    • În CIFS, eticheta pentru suportul smbdirect a fost eliminată din codul de dezvoltare experimental. În SMB3 s-a adăugat posibilitatea utilizării algoritmilor criptografici în modul GCM. A fost adăugată o nouă opțiune de montare pentru extragerea parametrilor modului din înregistrările ACE (Access Control Entry). S-a optimizat performanța apelului open();
    • În F2FS a fost adăugată o opțiune pentru limitarea colectorului de gunoi în modul checkpoint=disable. A fost adăugat ioctl pentru eliminarea intervalelor de blocuri din F2FS, ceea ce permite ajustarea dimensiunii partiției în mod dinamic. A fost adăugată posibilitatea de a plasa un fișier de schimb în F2FS cu asigurarea unui input/output direct. Pentru toți utilizatorii s-a adăugat suport pentru fixarea fișierului și alocarea blocurilor pentru astfel de fișiere;
    • În interfața pentru input/output asincron io_uring a fost adăugat suport pentru operațiuni asincrone sendmsg() și recvmsg();
    • În sistemul de fișiere UBIFS a fost adăugat suport pentru compresia utilizând algoritmul zstd și posibilitatea de verificare a imaginilor FS semnate;
    • În FS Ceph a fost adăugat suport pentru etichetele de securitate SELinux pentru fișiere;
    • Pentru NFSv4 a fost implementată o nouă opțiune de montare „nconnect=”, care determină numărul de conexiuni stabilite cu serverul. Traficul între aceste conexiuni va fi distribuit folosind echilibrarea încărcării. În plus, serverul NFSv4 creează acum un director /proc/fs/nfsd/clients cu informații despre clienții curenți, inclusiv detalii despre fișierele deschise de aceștia;
  • Virtualizare și securitate
    • În miezul kernel-ului a fost inclus un hipervizor pentru dispozitive încorporate ACRN, care este scris având în vedere pregătirea pentru îndeplinirea sarcinilor în timp real și adecvarea utilizării în sisteme critice. ACRN asigură cheltuieli minime, garantează latențe scăzute și o reacție adecvată în interacțiunea cu hardware-ul. Este suportată virtualizarea resurselor CPU, intrărilor/ieșirilor, subsistemului rețelei, operațiunilor grafice și audio. ACRN poate fi utilizat pentru a rula mai multe mașini virtuale izolate în module electronice de control, panouri de instrumente, sisteme informaționale auto, dispozitive IoT de consum și alte echipamente integrate;
    • În User-mode Linux adăugat modulul „călătorie în timp”, care permite încetinirea sau accelerarea timpului în mediu virtual UML pentru simplificarea debbuging-ului codului legat de timp. De asemenea, a fost adăugat parametrul
      time-travel-start, care permite inițierea ceasurilor sistemului dintr-un anumit moment în format epoch;
    • Au fost adăugate noi opțiuni de linie de comandă ale nucleului „init_on_alloc” și „init_on_free”, la specificarea cărora se activează resetarea zonelor de memorie alocate și eliberate (umplerea cu zerouri la malloc și free), ceea ce permite sporirea securității prin costuri suplimentare de inițializare;
    • A fost adăugat un nou driver virtio-iommu , cu implementarea unui dispozitiv paravirtualizat care permite trimiterea cererilor IOMMU, cum ar fi ATTACH, DETACH, MAP și UNMAP, peste transportul virtio fără a emula tabelele de pagini de memorie;
    • A fost adăugat un nou driver virtio-pmem, care oferă acces la dispozitive de stocare reflectate în spațiul de adrese fizice, cum ar fi NVDIMM;
    • A fost implementată capacitatea de a atasa chei criptografice la spațiile de nume utilizator sau rețea (cheile devin indisponibile în afara spațiului de nume ales), precum și protecția cheilor prin ACL;
    • În subsistemul criptografic a fost adăugată suport pentru un algoritm foarte rapid de hashing non-criptografic xxhash, viteza căruia depinde de performanța memoriei;
  • Subsystema de rețea
    • A fost asigurată procesarea adreselor IPv4 în intervalul 0.0.0.0/8, care anterior nu era disponibil pentru utilizare. Introducerea acestei subrețele va permite distribuirea a încă 16 milioane de adrese IPv4;
    • În Netfilter pentru nftables a fost adăugată suport pentru mecanisme de accelerare hardware a filtrării pachetelor prin utilizarea celor adăugate în drivere Flux Block API. Tabele complete de reguli cu toate lanțurile pot fi mutate pe partea adaptatoarelor de rețea. Activarea se face prin asocierea semnului NFT_TABLE_F_HW la tabel. Sunt acceptate metadatele simple ale protocoalelor de niveluri 3 și 4, acțiunile acceptare/respingere, corespondența pe IP și porturile rețelei ale expeditorului/destinatarului și tipul de protocol;
    • Adăugat suport încorporat pentru urmărirea conexiunilor pentru podurile de rețea, fără a necesita utilizarea unui strat de emulare br_netfilter;
    • În nf_tables a fost adăugată suport pentru modulul SYNPROXY, care repetă funcționalitatea similară din iptables, precum și realizarea posibilității de verificare în reguli pe opțiuni separate din antetul IPv4;
    • A fost adăugată posibilitatea de a atașa programe BPF la apelurile de sistem setsockopt() și getsockopt(), ceea ce, de exemplu, permite atașarea propriilor manipulatoare de acces la aceste apeluri. În plus, a fost adăugată o nouă punct de apel (hook), prin care se poate organiza apelul programului BPF o singură dată pentru fiecare interval RTT (round-trip-time, timpul de ping);
    • Pentru IPv4 și IPv6 adăugat un nou mecanism de stocare a datelor de rutare nexthop, destinat creșterii scalabilității tabelelor de rutare. Testele efectuate au arătat că, folosind noul sistem, setul de 743 de mii de rute a fost încărcat în kernel în doar 4.3 secunde;
    • Pentru Bluetooth a fost implementată funcționalitatea necesară pentru a suporta LE ping;
  • Echipament
    • Adăugat suport pentru procesoare compatibile x86 de la Zhaoxin, dezvoltate în urma unui proiect comun între VIA Technologies și municipalitatea din Shanghai. Familia CPU ZX este construită pe baza arhitecturii x86-64 Isaiah, continuând dezvoltarea tehnologiilor VIA Centaur;
    • În subsistemul DRM (Direct Rendering Manager), precum și în driverii graficii amdgpu și i915, a fost adăugată suport pentru analiza, procesarea și trimiterea prin portul HDMI a metadatelor HDR (gama dinamică extinsă), permițând utilizarea panourilor HDR și a display-urilor capabile să afișeze game suplimentare de luminozitate;
    • În driverul amdgpu a fost adăugat suport inițial pentru GPU AMD NAVI (RX5700), care include driverul de bază, codul pentru interacțiunea cu display-urile (DCN2), suport pentru GFX și calcule (GFX10),
      SDMA 5 (System DMA0), instrumente de gestionare a energiei și codificatoare/decodificatoare multimedia (VCN2). De asemenea, în amdgpu a fost îmbunătățit suportul pentru plăcile bazate pe GPU Vega12 și Vega20, pentru care au fost adăugate funcționalități suplimentare de gestionare a memoriei și consumului de energie;
    • În driverul amdkfd (pentru GPU-uri discrete, cum ar fi Fiji, Tonga, Polaris) a fost adăugată suportul pentru plăcile bazate pe GPU VegaM;
    • În driverul DRM pentru GPU-urile Intel pentru cipurile Icelake a fost implementat un nou mod multisegment de corecție gamma. A fost adăugată posibilitatea de ieșire prin DisplayPort în format YCbCr4:2:0. Au fost adăugate noi firmware-uri GuC pentru SKL, BXT, KBL, GLK și ICL. A fost implementată posibilitatea de deconectare a alimentării ecranului în modul asincron. Adăugat suport pentru salvarea și restaurarea contextului de redare pentru cipurile Ironlake (gen5) și gen4 (Broadwater — Cantiga), ceea ce permite din spațiul utilizatorului restaurarea stării GPU-ului în timpul trecerii de la executarea unor operații de pachete la altele;
    • În driverul Nouveau a fost asigurată identificarea chipset-ului NVIDIA Turing TU116;
    • Au fost extinse capacitățile driverului DRM/KMS pentru acceleratoarele operațiunilor de ecran ARM Komeda (Mali D71), a fost adăugat suport pentru scalare, separare/fuzionare de straturi, rotație, scriere întârziată, AFBC, SMMU și formate de codare a culorii Y0L2, P010, YUV420_8/10BIT;
    • În driverul MSM a fost adăugat suport pentru seria A540 GPU Adreno, utilizat în procesoarele Qualcomm, precum și suport pentru controllerul DSI MSM8998 pentru Snapdragon 835;
    • Au fost adăugate drivere pentru panourile LCD Samsung S6E63M0, Armadeus ST0700, EDT ETM0430G0DH6, OSD101T2045-53TS,
      Evervision VGG804821, FriendlyELEC HD702E, KOE tx14d24vm1bpa, TFC S9700RTWV43TR-01B, EDT ET035012DM6 și VXT VL050-8048NT-C01;
    • Adăugat driver pentru activarea mijloacelor de accelerare a decodării
      video, disponibile în SoC Amlogic Meson;
    • În driverul v3d (pentru GPU-ul Broadcom Video Core V, utilizat în Raspberry Pi) a apărut suport pentru dispeceratul shader-elor de calcul;
    • Adăugat driver pentru tastaturi SPI și trackpad-uri, utilizate în modelele moderne de laptopuri Apple MacBook și MacBookPro;
    • Adăugat protecție suplimentară pentru apelurile ioctl, legate de driverul floppy, iar driverul în sine este marcat ca fiind abandonat
      („orphaned”), ceea ce implică încetarea testării acestuia. Driverul este păstrat în nucleu, dar funcționarea sa corectă nu este garantată. Driverul este considerat depășit, deoarece pentru testarea sa este greu de găsit echipament funcțional — toate unitățile externe actuale utilizează, în general, interfața USB.
    • Adăugat driver cpufreq pentru plăcile Raspberry Pi, care permite gestionarea dinamică a modificării frecvenței procesorului;
    • A fost adăugat suport pentru noi SoC ARM Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSP-uri + MMA) și Amlogic G12B (4x Cortex-A73 + 2x Cortex-A53), precum și pentru plăci:
      • Purism Librem5,
      • Aspeed BMC,
      • Microsoft Olympus BMC,
      • Kontron SMARC,
      • Novtech Meerkat96 (i.MX7),
      • ST Micro Avenger96,
      • Google Cheza (Qualcomm SDM845),
      • Qualcomm Dragonboard 845c (Qualcomm SDM845),
      • Hugsun X99 TV Box (Rockchip RK3399),
      • Khadas Edge/Edge-V/Captain (Rockchip RK3399),
      • HiHope RZ/G2M,
      • NXP LS1021A-TSN.

În același timp, Fondul Latino-American pentru Software Liber a formulat
o variantă nucleu complet liber 5.3 — Linux-libre 5.3-gnu, curățat de elemente ale firmware-ului și driverelor care conțin componente sau secțiuni de cod ne-libere, utilizarea cărora este limitată de producător. În noua versiune, a fost dezactivată încărcarea blob-urilor în driverele qcom, hdcp drm, allegro-dvt și meson-vdec.
Codul de curățare a blob-urilor în driverele și subsistemele amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, driverul audio pentru skylake, precum și în documentația microcodului a fost actualizat.

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