Lansarea nucleului Linux 5.3

După două luni de dezvoltare, Linus Torvalds a prezentat eliberarea nucleului Linux 5.3. Printre cele mai notabile modificări: suport pentru GPU-uri AMD Navi, procesoare Zhaoxi și tehnologia Intel Speed ​​​​Select de gestionare a energiei, capacitatea de a utiliza instrucțiuni umwait pentru a aștepta fără a utiliza cicluri,
modul „utilization clamping” crește interactivitatea pentru procesoarele asimetrice, apelul de sistem pidfd_open, capacitatea de a utiliza adrese IPv4 din subrețeaua 0.0.0.0/8, posibilitatea de accelerare hardware nftables, suport HDR în subsistemul DRM, integrarea ACRN hipervizor.

В anunţ noua versiune, Linus le-a reamintit tuturor dezvoltatorilor regula principală a dezvoltării nucleului - menținerea aceluiași comportament pentru componentele spațiului utilizator. Modificările aduse nucleului nu ar trebui în niciun fel să distrugă aplicațiile care rulează deja sau să conducă la regresii la nivel de utilizator. În acest caz, o încălcare a comportamentului poate provoca nu numai o modificare a ABI, eliminarea codului învechit sau apariția unor erori, ci și impactul indirect al îmbunătățirilor utile care funcționează corect. Ca exemplu ilustrativ a existat aruncat util optimizare în codul Ext4, care reduce numărul de accesări la unități prin dezactivarea citirii prealabile a tabelului de inoduri pentru cererile I/O mici.

Optimizarea a condus la faptul că, din cauza scăderii activității discului, entropia pentru generatorul de numere aleatoare getrandom() a început să se acumuleze mai lent și în unele configurații, în anumite circumstanțe, s-au putut observa înghețari în timpul încărcării până când pool-ul de entropie a fost umplut. Deoarece optimizarea este cu adevărat utilă, a apărut o discuție între dezvoltatori în care s-a propus să se rezolve problema prin dezactivarea modului implicit de blocare a apelului getrandom() și adăugarea unui flag opțional pentru a aștepta entropie, dar o astfel de modificare ar afecta calitatea numerelor aleatoare în stadiul inițial de încărcare.

Noua versiune include 15794 de corecții de la 1974 de dezvoltatori,
dimensiunea patch-ului - 92 MB (modificările au afectat 13986 fișiere, au adăugat 258419 linii de cod,
599137 rânduri eliminate). Aproximativ 39% din toate prezentate în 5.3
modificările sunt legate de driverele de dispozitiv, aproximativ 12% dintre modificări sunt
atitudine față de actualizarea codului specific arhitecturilor hardware, 11%
legate de stiva de rețea, 3% la sistemele de fișiere și 3% la interne
subsisteme kernel.

Principalul inovații:

  • Servicii de memorie și sistem
    • Dezvoltarea continuă a funcționalității „pidfd” pentru a ajuta la gestionarea situațiilor de reutilizare a PID (pidfd este asociat cu un anumit proces și nu se modifică, în timp ce un PID poate fi asociat cu un alt proces după terminarea procesului curent asociat cu acel PID). A fost adăugat anterior la nucleu
      apelul de sistem pidfd_send_signal() și flag-ul CLONE_PIDFD din apelul clone() pentru a obține un pidfd pentru utilizare în idfd_send_signal(). Folosirea clone() cu indicatorul CLONE_PIDFD ar putea cauza probleme cu managerii de servicii sau cu sistemul de terminare forțat fără memorie al platformei Android. În acest caz, un apel la fork() sau clone() fără CLONE_PIDFD este folosit pentru a porni.

      Kernel 5.3 a introdus apelul de sistem pidfd_open(), care vă permite să obțineți un pidfd verificabil pentru un proces existent arbitrar care nu a fost creat prin apelarea clone() cu flag CLONE_PIDFD. De asemenea, a adăugat suport pentru sondajul pidfd folosind poll() și epoll(), care le permite managerilor de proces să urmărească terminarea proceselor arbitrare fără teama de o condiție de cursă dacă un PID este atribuit unui nou proces. Mecanismul de notificare când un proces asociat cu pidfd s-a încheiat este similar cu notificarea când procesul său fiu s-a încheiat;

    • Suport pentru mecanismul de fixare a încărcării a fost adăugat la programatorul de activități (Prindere de utilizare), permițându-vă să respectați intervalele de frecvență minime sau maxime, în funcție de sarcinile active pe CPU. Mecanismul prezentat accelerează sarcinile care afectează direct calitatea experienței utilizatorului, rulând aceste sarcini cel puțin la capătul inferior al frecvenței „solicitate”. Sarcinile cu prioritate scăzută care nu afectează munca utilizatorului sunt lansate folosind limita superioară a frecvenței „permise”. Limitele sunt stabilite 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 management al energiei Intel Speed ​​​​Select, disponibil pe anumite servere cu procesoare Intel Xeon. Această tehnologie vă permite să setați setări de performanță și de debit de partiție pentru diferite nuclee CPU, ceea ce vă permite să prioritizați performanța pentru sarcinile efectuate pe anumite nuclee, sacrificând performanța pe alte nuclee;
    • Procese în spațiul utilizatorului furnizat capacitatea de a aștepta un timp scurt fără a utiliza bucle folosind instrucțiunea umwait. Această instrucțiune, împreună cu instrucțiunile umonitor și tpause, vor fi oferite în viitoarele cipuri Intel „Tremont” și vor permite implementarea de întârzieri eficiente din punct de vedere energetic și care nu afectează performanța altor fire atunci când utilizați Hyper Threading;
    • Pentru arhitectura RISC-V, a fost adăugat suport pentru pagini de memorie mari;
    • Mecanismul de urmărire kprobes a adăugat capacitatea de a dereferenția pointerii kernel la spațiul utilizatorului, care poate fi folosit, de exemplu, pentru a evalua conținutul structurilor transmise apelurilor de sistem. A fost adăugată și capacitatea de a instala verificări în faza de pornire.
    • S-a adăugat opțiunea PREEMPT_RT la fișierul de configurare pentru operare în timp real. Codul în sine pentru a suporta modul în timp real nu a fost încă adăugat la nucleu, dar apariția opțiunii este un semn bun că epopeea pe termen lung integrări Patch-urile Preempt în timp real se apropie de finalizare;
    • S-a adăugat apelul de sistem clone3() cu implementarea unei versiuni mai extensibile a interfeței clone(), care permite specificarea unui număr mai mare de steaguri;
    • S-a adăugat un handler bpf_send_signal(), permițând programelor BPF să trimită semnale către procese arbitrare;
    • Pentru evenimentele perf din mediul hypervisor KVM, a fost adăugat un nou mecanism de filtrare a evenimentelor, permițând administratorului să determine tipurile de evenimente care sunt permise sau nu pentru monitorizare pe partea sistemului oaspete;
    • Abilitatea de a procesa programe cu bucle a fost adăugată mecanismului de verificare a aplicației eBPF dacă execuția buclei este limitată și nu poate duce la depășirea limitei numărului maxim de instrucțiuni;
  • Subsistem de disc, I/O și sisteme de fișiere
    • Sistemul de fișiere XFS acceptă acum ocolirea inodelor cu mai multe fire (de exemplu, la verificarea cotelor). Au fost adăugate noi ioctls BULKSTAT și INUMBERS, oferind acces la caracteristicile apărute în cea de-a cincea ediție a formatului FS, cum ar fi ora de naștere a inodului și capacitatea de a seta parametrii BULKSTAT și INUMBERS pentru fiecare grup AG (Grupuri de alocare);
    • În Ext4 suport adăugat goluri în directoare (blocuri nelegate).
      Prelucrare asigurată flag „i” (imuabil) pentru fișierele deschise (scrierea este interzisă în situația în care flag-ul a fost setat la un moment în care fișierul era deja deschis);

    • Btrfs oferă o definiție a implementării rapide a crc32c pe toate arhitecturile;
    • În CIFS, codul pentru suportul smbdirect a fost eliminat ca dezvoltare experimentală. SMB3 a adăugat capacitatea de a utiliza algoritmi criptografici în modul GCM. S-a adăugat o nouă opțiune de montare pentru a extrage parametrii de mod din intrările ACE (Access Control Entry). Optimizarea performanței apelului open();
    • S-a adăugat o opțiune la F2FS pentru a limita colectorul de gunoi atunci când rulează în modul punct de control = dezactivare. S-a adăugat ioctl pentru a elimina intervalele de blocuri din F2FS, permițând ajustări ale dimensiunii partiției din mers. S-a adăugat posibilitatea de a plasa un fișier de schimb în F2FS pentru a oferi I/O direct. S-a adăugat suport pentru fixarea unui fișier și alocarea de blocuri pentru fișiere similare pentru toți utilizatorii;
    • S-a adăugat suport pentru operațiuni asincrone sendmsg() și recvmsg() la interfață pentru io_uring de intrare/ieșire asincronă;
    • Suport pentru compresie folosind algoritmul zstd și capacitatea de a verifica imaginile FS semnate au fost adăugate sistemului de fișiere UBIFS;
    • Ceph FS acceptă acum 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 dintre aceste conexiuni va fi distribuit prin echilibrarea sarcinii. În plus, serverul NFSv4 creează acum un director /proc/fs/nfsd/clients cu informații despre clienții actuali, inclusiv informații despre fișierele pe care le-au deschis;
  • Virtualizare și securitate
    • Nucleul include un hypervisor pentru dispozitivele încorporate ACRN, care este scris cu privire la pregătirea pentru sarcini în timp real și adecvarea pentru utilizare în sisteme critice pentru misiune. ACRN oferă o suprasarcină minimă, garantează o latență scăzută și o capacitate de răspuns adecvată atunci când interacționează cu echipamentul. Suportă virtualizarea resurselor CPU, I/O, subsistemul de rețea, grafică și operațiuni de sunet. ACRN poate fi folosit pentru a rula mai multe mașini virtuale izolate în unități de control electronice, tablouri de bord, sisteme de informații auto, dispozitive IoT pentru consumatori și alte tehnologii încorporate;
    • În modul utilizator Linux adăugat Modul de călătorie în timp, care vă permite să încetiniți sau să accelerați timpul într-un mediu UML virtual pentru a facilita depanarea codului legat de timp. În plus, a fost adăugat un parametru
      time-travel-start, care permite ceasului sistemului să pornească dintr-un moment specificat în format epoch;

    • Au fost adăugate noi opțiuni de linie de comandă a nucleului „init_on_alloc” și „init_on_free”, atunci când sunt specificate, este activată repunerea la zero a zonelor de memorie alocate și eliberate (completarea cu zerouri pentru malloc și free), ceea ce permite o securitate sporită datorită supraîncărcării suplimentare de inițializare;
    • S-a adăugat un șofer nou virtio-iommu cu implementarea unui dispozitiv paravirtualizat care vă permite să trimiteți cereri IOMMU precum ATTACH, DETACH, MAP și UNMAP prin transportul virtio fără a emula tabelele de pagini de memorie;
    • S-a adăugat un șofer nou virtio-pmem, reprezentând accesul la dispozitivele de stocare mapate la spațiul de adrese fizice, cum ar fi NVDIMM-urile;
    • S-a implementat capacitatea de a atașa chei criptografice unui utilizator sau unui spațiu de nume de rețea (cheile devin inaccesibile în afara spațiului de nume selectat), precum și de a proteja cheile folosind ACL-uri;
    • Spre subsistemul cripto adăugat suport pentru un algoritm de hashing non-criptografic foarte rapid xxhash, a cărui viteză depinde de performanța memoriei;
  • Subsistemul de rețea
    • S-a activat procesarea adreselor IPv4 în intervalul 0.0.0.0/8, care anterior nu era disponibil pentru utilizare. Introducerea acestei subrețele va permite distribuie încă 16 milioane de adrese IPv4;
    • În Netfilter pentru nftables adăugat suport pentru mecanismele de accelerare hardware pentru filtrarea pachetelor prin utilizarea driverelor adăugate API-ul Flow Block. Tabelele întregi de reguli cu toate lanțurile pot fi plasate pe partea adaptoarelor de rețea. Activarea se face prin legarea steagului NFT_TABLE_F_HW la tabel. Suportă metadate simple ale protocoalelor Layer 3 și Layer 4, acțiuni de acceptare/respingere, mapări după IP și porturi de rețea de expeditor/receptor și tip de protocol;
    • Adăugat suport încorporat de urmărire a conexiunii pentru podurile de rețea, care nu necesită utilizarea stratului de emulare br_netfilter;
    • În nf_tables adăugat De asemenea, este implementată suport pentru modulul SYNPROXY, care reproduce funcționalități similare din iptables și capacitatea de a verifica reguli pentru opțiuni individuale în antetul IPv4;
    • S-a adăugat posibilitatea de a atașa programe BPF la apelurile de sistem setsockopt() și getsockopt(), ceea ce, de exemplu, vă permite să atașați propriile handlere de acces la aceste apeluri. În plus, a fost adăugat un nou punct de apel (hook), cu care puteți organiza un apel către programul BPF o dată pentru fiecare interval RTT (dus-întors, timp de ping);
    • Pentru IPv4 și IPv6 adăugat noul mecanism de stocare a datelor de rutare nexthop care vizează creșterea scalabilității tabelelor de rutare. Testele au arătat că la utilizarea noului sistem, un set de 743 de mii de rute a fost încărcat în nucleu în doar 4.3 secunde;
    • Pentru Bluetooth implementate funcționalitate necesară pentru a suporta ping-ul LE;
  • Оборудование
    • Adăugat suport pentru procesoarele compatibile x86 ale companiei Zhaoxin, dezvoltat ca urmare a unui proiect comun între VIA Technologies și municipalitatea din Shanghai. Familia CPU ZX este construită pe arhitectura x86-64 Isaiah, continuând dezvoltarea tehnologiei VIA Centaur;
    • Subsistemul DRM (Direct Rendering Manager), precum și driverele grafice amdgpu și i915 au adăugat suport pentru analizarea, procesarea și trimiterea metadatelor HDR (gamă dinamică înaltă) prin portul HDMI, permițând utilizarea panourilor și ecranelor HDR capabile să afișarea unor intervale suplimentare de luminozitate;
    • Driverul amdgpu a adăugat suport inițial pentru AMD NAVI GPU (RX5700), care include driverul de bază, codul de interacțiune cu ecranul (DCN2), GFX și suportul de calcul (GFX10),
      SDMA 5 (System DMA0), managementul energiei și codificatoare/decodore multimedia (VCN2). amdgpu îmbunătățește, de asemenea, suportul pentru cardurile bazate pe GPU-uri Vega12 și Vega20, pentru care au fost adăugate capacități suplimentare de memorie și de gestionare a energiei;

    • S-a adăugat suport pentru carduri bazate pe GPU-uri VegaM la driverul amdkfd (pentru GPU-uri discrete, cum ar fi Fiji, Tonga, Polaris);
    • În driverul DRM pentru plăcile video Intel pentru cipuri Icelake implementate nou mod de corecție gamma cu mai multe segmente. S-a adăugat capacitatea de a ieși prin DisplayPort în formatul YCbCr4:2:0. Firmware nou adăugat GuC pentru SKL, BXT, KBL, GLK și ICL. A fost implementată capacitatea de a opri alimentarea ecranului în modul asincron. Adăugat suport pentru salvarea și restabilirea contextului de randare pentru cipurile Ironlake (gen5) și gen4 (Broadwater - Cantiga), care vă permite să restabiliți starea GPU din spațiul utilizatorului atunci când treceți de la o operațiune batch la alta;
    • Driverul Nouveau oferă detectarea chipset-ului NVIDIA Turing TU116;
    • Capacitățile driverului DRM/KMS pentru acceleratoarele de ecran ARM Komeda (Mali D71) au fost extinse, suportul pentru scalare, straturi împărțite/imbinate, rotație, scriere amânată, AFBC, SMMU și formatele de codare a culorilor Y0L2, P010, YUV420_8/10BIT are fost adăugată;
    • Driverul MSM adaugă suport pentru seria A540 GPU Adreno folosită în procesoarele Qualcomm, precum și suport pentru controlerul MSM8998 DSI pentru Snapdragon 835;
    • S-au adăugat 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 instrumentelor de accelerare de decodare
      videoclipuri disponibile în Amlogic Meson SoC;

    • În driverul v3d (pentru GPU-ul Broadcom Video Core V folosit în Raspberry Pi) a apărut sprijini distribuirea compute shaders;
    • Adăugat driver pentru tastaturi și trackpad-uri SPI utilizate în modelele moderne de laptopuri Apple MacBook și MacBookPro;
    • Adăugat protecție suplimentară pentru apelurile ioctl asociate cu driverul de dischetă, iar driverul însuși este marcat ca neîntreținut
      („orfani”), ceea ce implică încetarea testării acestuia. Driverul este încă stocat în nucleu, dar funcționarea sa corectă nu este garantată. Driverul este considerat învechit, deoarece este dificil să găsești echipament de lucru pentru testarea acestuia - toate unitățile externe actuale, de regulă, folosesc interfața USB.

    • Adăugat driver cpufreq pentru plăcile Raspberry Pi, care vă permite să controlați dinamic modificările frecvenței procesorului;
    • S-a adăugat suport pentru noul 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 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, Fundația Latino-Americană pentru Software Liber format
opțiune kernel complet gratuit 5.3 - Linux-libre 5.3-gnu, eliminate de elemente de firmware și drivere care conțin componente sau secțiuni de cod care nu sunt gratuite, al căror domeniu de aplicare este limitat de producător. În noua versiune, încărcarea blob-urilor este dezactivată în driverele qcom, hdcp drm, allegro-dvt și meson-vdec.
Cod de curățare blob actualizat în drivere și subsisteme amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, driver de sunet pentru Skylake, precum și în documentația microcodului.

Sursa: opennet.ru

Adauga un comentariu