Lansarea nucleului Linux 5.1

După două luni de dezvoltare, Linus Torvalds a prezentat eliberarea nucleului Linux 5.1. Printre cele mai notabile modificări: o nouă interfață pentru io_uring I/O asincron, capacitatea de a utiliza NVDIMM ca RAM, suport pentru memorie virtuală partajată în Nouveau, suport pentru monitorizarea scalabilă a sistemelor de fișiere foarte mari prin fanotify, capacitatea de a configura compresia Zstd niveluri în Btrfs, un nou handler cpuidle TEO, implementare a apelurilor de sistem pentru a rezolva problema 2038, capacitatea de a porni de pe dispozitive de cartografiere a dispozitivelor fără initramfs, modul SafeSetID LSM, suport pentru corecții live combinate.

Principalul inovații:

  • Subsistem de disc, I/O și sisteme de fișiere
    • Implementarea unei noi interfețe pentru I/O asincron - io_uring, care este remarcabil pentru suportul pentru sondarea I/O și capacitatea de a lucra cu sau fără buffering. Să reamintim că mecanismul I/O asincron propus anterior „aio” nu a suportat I/O tamponat, putea funcționa doar în modul O_DIRECT (fără stocare în buffer și ocolirea memoriei cache), a avut probleme cu blocarea din cauza așteptării disponibilității metadatelor și a prezentat costuri generale mari din cauza copierii datelor în memorie.

      În cadrul API-ului
      Dezvoltatorii io_uring au încercat să elimine deficiențele vechii interfețe aio. De productivitate io_uring este foarte aproape de SPDK și este semnificativ înaintea libaio atunci când lucrează cu sondajul activat. A fost pregătită o bibliotecă pentru utilizarea io_uring în aplicațiile finale care rulează în spațiul utilizatorului liburare, care oferă un cadru de nivel înalt peste interfața kernelului;

    • În mecanismul de urmărire a evenimentelor în FS fanotify() adăugat suport pentru urmărirea situațiilor de schimbare a superblocului și a structurii dirent (evenimente de creare, ștergere și mutare a directoarelor). Caracteristicile prezentate ajută la rezolvarea problemelor de scalabilitate care apar la crearea urmăririi recursive a modificărilor în sisteme de fișiere foarte mari folosind mecanismul inotify (modificările directe puteau fi urmărite anterior doar prin inotify, dar
      performanța în condiții de urmărire recursivă a directoarelor imbricate mari lăsat de dorit). Acum o astfel de monitorizare poate fi realizată eficient prin fanotify;

    • Pe sistemul de fișiere Btrfs adăugat capacitatea de a personaliza nivelul de compresie pentru algoritmul zstd, care poate fi considerat un compromis optim între lz4 rapid, dar ineficient și compresia lentă, dar bună, xz. Prin analogie cu modul în care era posibil anterior setarea nivelului de compresie când se folosea zlib, a fost adăugat suport pentru opțiunea de montare „-o compress=zstd:level” pentru zstd. În timpul testării, primul nivel minim a furnizat compresia datelor de 2.658 ori cu o viteză de compresie de 438.47 MB/s, viteza de decompresie de 910.51 MB/s și un consum de memorie de 780 MB, iar nivelul maxim 15 asigurat de 3.126 de ori, dar cu o compresie. viteza de 37.30 MB/s. despachetare 878.84 MB/s si consum de memorie 2547 MB;
    • Adăugat capacitatea de a porni dintr-un sistem de fișiere situat pe dispozitivul de cartografiere a dispozitivului, fără a utiliza initramfs. Începând cu versiunea curentă a nucleului, dispozitivele de cartografiere a dispozitivelor pot fi utilizate direct în timpul procesului de pornire, de exemplu, ca o partiție cu sistemul de fișiere rădăcină. Partiția este configurată folosind parametrul de boot „dm-mod.create”. Modulele de cartografiere a dispozitivelor permise pentru încărcare includ: „criptă”, „întârziere”, „liniară”, „origine instantanee” și „veritate”;
    • Indicatorul F2FS_NOCOW_FL a fost adăugat la sistemul de fișiere F2FS orientat către unitățile Flash, ceea ce vă permite să dezactivați modul copiere la scriere pentru un anumit fișier;
    • Sistemul de fișiere a fost eliminat din kernel Exofs, care este o variantă a ext2, adaptată pentru lucrul cu stocări de obiecte OSD (Object-based Storage Device). Suportul pentru protocolul SCSI pentru astfel de dispozitive de stocare a obiectelor a fost de asemenea eliminat;
  • Virtualizare și securitate
    • S-a adăugat opțiunea PR_SPEC_DISABLE_NOEXEC la prctl() pentru a controla execuția speculativă a instrucțiunilor pentru procesul selectat. O nouă opțiune vă permite să dezactivați selectiv execuția speculativă pentru procesele care ar putea fi atacate de un atac Spectre. Blocarea durează până la primul apel la exec();
    • Modul LSM implementat SafeSetID, care permite serviciilor de sistem să gestioneze în siguranță utilizatorii fără a crește privilegiile (CAP_SETUID) și fără a obține privilegii root. Privilegiile sunt atribuite prin definirea regulilor în securityfs pe baza unei liste albe de legături valide (sub forma „UID1:UID2”);
    • S-au adăugat modificări de nivel scăzut necesare pentru încărcarea pe bază de stivă a modulelor de securitate (LSM). A introdus opțiunea de pornire a nucleului „lsm” pentru a controla ce module sunt încărcate și în ce ordine;
    • Suportul pentru spațiile de nume de fișiere a fost adăugat la subsistemul de audit;
    • Extins capabilitățile pluginului GCC structleak, care vă permite să blocați potențialele scurgeri de conținut de memorie.Este furnizată inițializarea oricăror variabile care sunt utilizate în cod prin accesul de referință pe stivă;
  • Subsistemul de rețea
    • Pentru prize implementate opțiune nouă „SO_BINDTOIFINDEX” similară cu
      „SO_BINDTODEVICE”, dar luând ca argument numărul de index al interfeței de rețea în loc de numele interfeței;

    • Stiva mac80211 a adăugat capacitatea de a atribui mai multe BSSID-uri (adrese MAC) unui dispozitiv. Ca parte a unui proiect de optimizare a performanței WiFi, stiva mac80211 a adăugat contabilizarea timpului de antenă și capacitatea de a distribui timpul de antenă între mai multe stații (când funcționează în modul punct de acces, alocând mai puțin timp de transmisie stațiilor wireless lente, în loc să distribuie timpul uniform între toate stații);
    • Mecanism adăugat "sănătatea devlink„, care oferă notificări atunci când apar probleme cu interfața de rețea;
  • Servicii de memorie și sistem
    • Implementat livrarea securizată a semnalului care permite reutilizarea PID. De exemplu, la apelarea kill anterior, ar putea apărea o situație în care, imediat după trimiterea unui semnal, PID-ul țintă ar putea fi eliberat din cauza încheierii procesului și ocupat de un alt proces, iar semnalul ar ajunge să fie transmis unui alt proces. Pentru a elimina astfel de situații, a fost adăugat un nou apel de sistem pidfd_send_signal, care utilizează descriptori de fișiere din /proc/pid pentru a asigura legarea stabilă a procesului. Chiar dacă PID-ul este reutilizat în timpul procesării apelului de sistem, descriptorul de fișier nu se va schimba și poate fi folosit în siguranță pentru a trimite un semnal către proces;
    • Adăugat capacitatea de a utiliza dispozitive de memorie permanentă (memorie persistentă, de exemplu NVDIMM-uri) ca RAM. Până acum, nucleul suporta astfel de dispozitive ca dispozitive de stocare, dar acum pot fi folosite și ca RAM suplimentară. Caracteristica este implementată ca răspuns la dorințele utilizatorilor care sunt dispuși să suporte o întârziere de performanță și doresc să utilizeze API-ul nativ de gestionare a memoriei kernelului Linux în loc să utilizeze sistemele existente de alocare a memoriei spațiului utilizatorului care rulează pe mmap pentru dax. fişier;
    • S-a adăugat un nou procesor de inactivitate (cpuidle, decide când procesorul poate fi pus în moduri de economisire profundă a energiei; cu cât modul este mai profund, cu atât economiile sunt mai mari, dar și cu atât durează mai mult pentru a ieși din modul) - TEO (Timer Events Oriented Governor) ). Până acum, au fost propuși doi handler de cpuidle - „meniu” și „scara”, care diferă în euristică. Handler-ul „meniu” are probleme cunoscute cu luarea deciziilor euristice, pentru a le elimina, s-a decis pregătirea unui nou handler. TEO este poziționat ca o alternativă la manipulatorul „meniu”, permițând performanțe mai mari, menținând în același timp același nivel de consum de energie.
      Puteți activa noul handler folosind parametrul de boot „cpuidle.governor=teo”;

    • Ca parte a lucrării de eliminare problemele anului 2038, cauzată de o depășire de tip time_t pe 32 de biți, include apeluri de sistem care oferă contoare de timp pe 32 de biți pentru arhitecturi pe 64 de biți. Ca rezultat, structura time_t pe 64 de biți poate fi acum utilizată pe toate arhitecturile. Modificări similare au fost implementate și în subsistemul de rețea pentru opțiuni timestamp-ul prize de rețea;
    • În sistemul de corecție la cald pentru nucleu (patching live) adăugat Caracteristica „Înlocuire atomică” pentru aplicarea atomică a unei serii de modificări unei singure funcții. Această caracteristică vă permite să distribuiți patch-uri rezumate care acoperă mai multe modificări simultan, în loc de procesul de aplicare etapă cu etapă a patch-urilor live într-o ordine strict definită, care este destul de dificil de întreținut. În timp ce anterior fiecare modificare ulterioară trebuia să se bazeze pe starea funcției după ultima modificare, acum este posibil să se propage mai multe modificări legate de o stare inițială simultan (adică, întreținerii pot menține un patch consolidat în raport cu nucleul de bază în schimb). a unui lanț de petice care depind unul de celălalt);
    • Anunțat suport depreciat pentru formatul de fișier executabil a.out și
      îndepărtat cod pentru generarea fișierelor de bază în format a.out, care este într-o stare abandonată. Formatul a.out nu a fost folosit pe sistemele Linux de mult timp, iar generarea de fișiere a.out a fost mult timp nesuportată de instrumentele moderne în configurațiile implicite Linux. În plus, încărcătorul pentru fișierele a.out poate fi implementat în întregime în spațiul utilizatorului;

    • Capacitatea de a identifica și elimina codul neutilizat a fost adăugată mecanismului de verificare a programului BPF. Nucleul include și patch-uri cu suport spinlock pentru subsistemul BPF, oferind capabilități suplimentare pentru gestionarea execuției paralele a programelor BPF;
  • Оборудование
    • În Nouveau driver adăugat suport pentru gestionarea eterogenă a memoriei, permițând CPU și GPU să acceseze zone comune de memorie sincronizată. Sistemul de memorie virtuală partajată (SVM, shared virtual memory) este implementat pe baza subsistemului HMM (Heterogeneous memory management), care permite utilizarea dispozitivelor cu propriile unități de gestionare a memoriei (MMU, memory management unit), care pot accesa memoria principala. În special, folosind HMM, puteți organiza un spațiu de adrese partajat între GPU și CPU, în care GPU-ul poate accesa memoria principală a procesului. Suportul SVM este în prezent activat numai pentru GPU-urile din familia Pascal, deși suportul este oferit și pentru GPU-urile Volta și Turing. Mai mult, în Nouveau adăugat nou ioctl pentru a controla migrarea zonelor de memorie de proces la memoria GPU;
    • În driverul Intel DRM pentru GPU Skylake și mai târziu (gen9+) pornit În mod implicit, modul fastboot elimină modificările inutile ale modului în timpul pornirii. Adăugat новые identificatori de dispozitiv bazați pe microarhitecturile Coffelake și Ice Lake. Pentru chipsuri Coffelake adăugat Suport GVT (Virtualizare GPU). Pentru GPU-uri virtuale implementate Suport VFIO EDID. Pentru panouri LCD MIPI/DSI adăugat suport pentru elemente ACPI/PMIC. Implementat noi moduri TV 1080p30/50/60 TV;
    • S-a adăugat suport pentru Vega10/20 BACO GPU la driverul amdgpu. S-au implementat gestionarea energiei Vega 10/20 și mesele de control al răcitorului Vega 10. S-au adăugat noi identificatori de dispozitiv PCI pentru GPU-urile Picasso. Adăugat interfață pentru gestionarea dependențelor programabile pentru a evita blocajele;
    • Adăugat Driver DRM/KMS pentru acceleratoare de ecran ARM Komeda (Mali D71);
    • S-a adăugat suport pentru panourile de ecran Toppoly TPG110, Sitronix ST7701, PDA 91-00156-A0, LeMaker BL035-RGB-002 3.5 și Kingdisplay kd097d04;
    • S-a adăugat suport pentru codecuri audio Rockchip RK3328, Cirrus Logic CS4341 și CS35L36, MediaTek MT6358, Qualcomm WCD9335 și Ingenic JZ4725B, precum și platforma audio Mediatek MT8183;
    • S-a adăugat suport pentru controlerele NAND Flash STMicroelectronics FMC2, Amlogic Meson;
    • S-a adăugat suport accelerator pentru sistemele hardware Habana AI;
    • S-a adăugat suport pentru controlerele NXP ENETC gigabit Ethernet și interfețele wireless MediaTek MT7603E (PCIe) și MT76x8.

În același timp, Fundația Latino-Americană pentru Software Liber format
opțiune kernel complet gratuit 5.1 - Linux-libre 5.1-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 este dezactivată în driverele mt7603 și goya. Cod de curățare blob actualizat în drivere și subsisteme wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifiex, btmrvl, btmtk și touchscreen_dmi. Curățarea blob în încărcătorul de firmware lantiq xrx200 a fost oprită din cauza înlăturării sale din nucleu.

Sursa: opennet.ru

Adauga un comentariu