Lansarea nucleului Linux 5.1

După două luni de dezvoltare, Linus Torvalds a prezentat lansarea nucleului Linux 5.1. Printre cele mai notabile schimbări se numără: o nouă interfață pentru input/output asincron io_uring, posibilitatea 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, posibilitatea de a configura nivelurile de compresie Zstd în Btrfs, un nou handler cpuidle TEO, implementarea apelurilor de sistem pentru a rezolva problema anului 2038, posibilitatea de a boota de pe dispozitive device-mapper fără initramfs, modul LSM SafeSetID, suport pentru patch-uri live combinate.

Principalele noutăți:

  • Subsistemul de disc, I/O și sistemele de fișiere
    • A fost implementată o nouă interfață pentru input/output asincron — io_uring, care se remarcă prin suportul pentru polling-ul input/output și posibilitatea de a lucra atât cu bufferizare, cât și fără bufferizare. Să ne amintim că mecanismul de input/output asincron „aio” propus anterior nu avea suport pentru input/output bufferizat, putea funcționa doar în modul O_DIRECT (fără bufferizare și ocolind cache-ul), avea probleme cu blocajele din cauza așteptării disponibilității metadatelor și prezenta costuri ridicate din cauza copiei de date în memorie.

      În cadrul API-ului
      io_uring, dezvoltatorii au încercat să elimine dezavantajele vechii interfețe aio. Conform performanță io_uring este foarte apropiat de SPDK și depășește semnificativ libaio în ceea ce privește utilizarea cu polling activat. Pentru utilizarea io_uring în aplicațiile finale, care funcționează în spațiul utilizatorului, a fost pregătită o bibliotecă liburing, care oferă un wrapper de nivel înalt peste interfața kernel-ului;

    • În mecanismul de urmărire a evenimentelor în sistemul de fișiere fanotify() a fost adăugată suport pentru monitorizarea situațiilor de modificare a superblock-ului și structurii dirent (evenimente de creare, ștergere și mutare a directoarelor). Funcționalitățile prezentate ajută la rezolvarea problemelor de scalabilitate care apar în timpul creării de monitorizări recursive ale modificărilor în sisteme de fișiere foarte mari folosind mecanismul inotify (modificările dirent anterioare puteau fi urmărite doar prin inotify, dar
      eficiența în condiții de monitorizare recursivă a unor directoare foarte înfășurate lăsa de dorit). Acum, o astfel de monitorizare poate fi efectuată eficient prin fanotify;
    • În sistemul de fișiere Btrfs a fost adăugată posibilitatea de a seta nivelul de compresie pentru algoritmul zstd, care poate fi văzut ca un compromis optim între lz4, rapid dar ineficient, și xz, lent dar cu o compresie bună. Similar cu modul în care înainte puteai seta nivelul de compresie atunci când foloseai zlib pentru zstd, a fost adăugată suport pentru opțiunea de montare „-o compress=zstd:level”. În teste, primul nivel minim a asigurat o compresie de 2.658 ori cu o viteză de compresie de 438.47 MB/s, o viteză de decompresie de 910.51 MB/s și un consum de memorie de 780 MB, iar nivelul maxim 15 – de 3.126 ori, dar cu o viteză de compresie de 37.30 MB/s, o viteză de decompresie de 878.84 MB/s și un consum de memorie de 2547 MB;
    • Adăugat posibilitatea de a porni de pe un sistem de fișiere găzduit pe dispozitivul device-mapper, fără a folosi initramfs. Începând cu versiunea curentă a nucleului, dispozitivul device-mapper poate fi folosit direct în procesul de pornire, de exemplu, ca un partaj principal cu FS rădăcină. Configurarea partajului se face prin parametrul de boot „dm-mod.create”. Modulele device-mapper permise la pornire includ: „crypt”, „delay”, „linear”, „snapshot-origin” și „verity”;
    • În sistemul de fișiere orientat pe stocare Flash F2FS a fost adăugat flagul F2FS_NOCOW_FL, care permite dezactivarea modului copy-on-write pentru un fișier specific;
    • Din nucleu a fost eliminat sistemul de fișiere Exofs, care reprezenta o variantă ext2, adaptată pentru lucru cu dispozitivele de stocare pe obiecte OSD (Object-based Storage Device). De asemenea, a fost eliminată suportul pentru protocolul SCSI pentru astfel de dispozitive de stocare pe obiecte;
  • Virtualizare și securitate
    • În prctl() a fost adăugată opțiunea PR_SPEC_DISABLE_NOEXEC pentru controlul execuției speculative a instrucțiunilor pentru procesul ales. Noua opțiune permite dezactivarea selectivă a execuției speculative pentru procesele care pot fi atacate prin metode de tip Spectre. Blocarea este activă până la prima apelare exec();
    • A fost implementat modul LSM 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 privilegiile utilizatorului root. Atribuirea privilegiilor se face prin definirea in securityfs a unor reguli bazate pe o lista albă a legăturilor permise (în forma „UID1:UID2”);
    • S-au adăugat modificări la nivel de bază necesare pentru organizarea stivei de încărcare a modulelor de securitate (LSM). A fost introdusă opțiunea de încărcare a nucleului „lsm”, care permite gestionarea modulelor care sunt încărcate și în ce ordine;
    • Subsystema de audit a primit suport pentru spațiile de nume ale fișierelor;
    • Extinse capacitățile pluginului GCC structleak, care permite blocarea potențialelor scurgeri de conținut din memorie. A fost asigurată inițializarea oricăror variabile care sunt utilizate în cod prin referință în stivă;
  • Subsystema de rețea
    • Pentru socket-uri, a fost implementată a fost introdusă o nouă opțiune „SO_BINDTOIFINDEX”, similară cu
      „SO_BINDTODEVICE”, dar care acceptă ca argument numărul de index al interfeței de rețea în loc de numele interfeței;
    • În stiva mac80211 a fost adăugată opțiunea de a atribui unui dispozitiv mai multe BSSID (adrese MAC). Ca parte a proiectului de optimizare a performanței WiFi, în stiva mac80211 a fost adăugată contabilizarea distribuției timpului de acces și posibilitatea de a distribui timpul de acces între mai multe stații (în modul de acces, se alocă un timp mai mic pentru transmisia stațiunilor wireless mai lente, în loc de o distribuție uniformă a timpului între toate stațiile);
    • A fost adăugat un mecanism „devlink healthcare oferă notificări atunci când apar probleme cu interfața de rețea;
  • Memorie și servicii de sistem
    • Implementată livrarea sigură a semnalelor, ținând cont de posibilitatea reutilizării PID-ului. De exemplu, la executarea apelului kill, anterior putea apărea o situație în care, imediat după trimiterea semnalului, PID-ul țintă putea fi eliberat din cauza terminării procesului și ocupat de un alt proces, iar în cele din urmă, semnalul era trimis altui proces. Pentru a exclude astfel de situații, a fost adăugat un nou apel de sistem pidfd_send_signal, care utilizează descriptorii de fișiere din /proc/pid pentru a asigura o legătură stabilă cu procesul. Chiar dacă PID-ul va fi reutilizat în timpul procesării apelului de sistem, descriptorul de fișier nu se va schimba și poate fi utilizat în siguranță pentru a trimite semnale procesului;
    • Adăugat posibilitatea utilizării dispozitivelor de memorie persistentă (persistent-memory, de exemplu NVDIMM.) ca memorie RAM. Până acum, astfel de dispozitive erau utilizate doar ca unități de stocare, dar acum pot fi folosite și ca memorie RAM suplimentară. Această posibilitate a fost implementată ca răspuns la dorințele utilizatorilor care sunt dispuși să tolereze o scădere a performanței și doresc să utilizeze API-ul standard de gestionare a memoriei din nucleul Linux, în loc să folosească sistemele existente de distribuție a memoriei în spațiul utilizatorului, care funcționează deasupra mmap pentru fișierul dax;
    • A fost adăugat un nou handler pentru idle CPU (cpuidle, care stabilește când poate fi transferat CPU în moduri adânci de economisire a energiei, cu cât modul este mai profund — cu atât mai mare este economisirea, dar și mai mult timp este necesar pentru a ieși din modul) — TEO (Timer Events Oriented Governor). Până acum, au fost oferite două handler-e cpuidle — „menu” și „ladder”, care se diferențiază prin heuristicile lor. Handler-ul „menu” are probleme cunoscute în luarea deciziilor heuristice, motiv pentru care s-a decis dezvoltarea unui nou handler. TEO este poziționat ca o alternativă la handler-ul „menu”, permițând obținerea unor performanțe mai ridicate menținând același nivel de consum de energie.
      Activarea noului handler se poate face prin parametrul de boot „cpuidle.governor=teo”;
    • În cadrul lucrărilor de eliminare problema anului 2038, cauzată de depășirea tipului 32-biți time_t, au fost incluse apeluri de sistem care oferă pentru arhitecturile de 32 biți contori de timp de 64 biți. Drept urmare, structura time_t de 64 biți poate fi acum utilizată pe toate arhitecturile. Modificări similare au fost implementate și în subsistemul de rețea pentru opțiunile timestamp socket-urilor de rețea;
    • În sistemul de patching live al nucleului a fost adăugată posibilitatea de „Atomic Replace” pentru aplicarea atomică a unei serii de modificări într-o singură funcție. Această funcționalitate permite distribuirea de patch-uri sumare care acoperă mai multe modificări simultan, în locul unui proces relativ complicat de aplicare etapizată a patch-urilor live într-o ordine strict definită. Dacă în trecut fiecare modificare ulterioară trebuia să se bazeze pe starea funcției după ultima modificare, acum este posibilă distribuirea simultană a mai multor modificări legate de o singură stare inițială (adică întreținătorii pot sprijini un singur patch sumar în raport cu nucleul de bază în loc de o succesiune de patch-uri interdependente);
    • Anunțată neactualizată asistența pentru formatul fișierelor executabile a.out și
      eliminată codul pentru generarea fișierelor core în format a.out, care a fost abandonat. Formatul a.out nu mai este utilizat pe sistemele Linux, iar generarea fișierelor a.out nu mai este suportată de instrumentele moderne în configurațiile Linux implicite. De asemenea, încărcătorul pentru fișierele a.out poate fi implementat complet în spațiul utilizatorului;
    • Mecanismul de verificare a programelor BPF a fost extins cu posibilitatea de a determina și elimina codul neutilizat. De asemenea, patch-uri cu suport pentru spinlock pentru subsistemul BPF au fost incluse în nucleu, oferind capacități suplimentare de gestionare a execuției paralele a programelor BPF;
  • Echipament
    • În driverul Nouveau a fost adăugată suport pentru gestionarea heterogenă a memoriei, care asigură accesul CPU și GPU la 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 blocuri de gestionare a memoriei (MMU, memory management unit), care pot accesa memoria principală. De asemenea, prin intermediul HMM se poate organiza un spațiu de adresare comun între GPU și CPU, în care GPU-ul poate accesa memoria principală a procesului. Suportul SVM este momentan activat doar pentru GPU-urile din familia Pascal, deși suportul este asigurat și pentru GPU-urile Volta și Turing. În plus, în Nouveau adăugat un nou ioctl pentru gestionarea migrației zonelor de memorie ale proceselor în memoria GPU;
    • În driver-ul DRM Intel pentru GPU Skylake și mai noi (gen9+) inclus Modul fastboot este activat implicit, excluzând schimbările inutile de moduri în timpul încărcării. Adăugate noi Identificatorii dispozitivelor bazate pe microarhitecturile Coffelake și Ice Lake. Pentru cipurile Coffelake a fost adăugată suport GVT (virtualizare GPU). Pentru GPU-uri virtuale a fost implementată suport VFIO EDID. Pentru panourile LCD MIPI/DSI a fost adăugată suport pentru elementele ACPI/PMIC. Au fost implementate noi moduri TV 1080p30/50/60 TV;
    • În driverul amdgpu a fost adăugat suport pentru GPU Vega10/20 BACO. Au fost implementate măsuri de gestionare a energiei pentru Vega 10/20 și tabele de control pentru ventilator pentru Vega 10. Au fost adăugate noi identificatori PCI pentru dispozitive GPU Picasso. Adăugat interfață de gestionare a dependențelor planificate pentru a preveni blocajele reciproce;
    • Adăugat driver DRM/KMS pentru accelerația operațiunilor de ecran ARM Komeda (Mali D71);
    • A fost adăugat suport pentru panourile de ecran Toppoly TPG110, Sitronix ST7701, PDA 91-00156-A0, LeMaker BL035-RGB-002 3.5 și Kingdisplay kd097d04;
    • A fost adăugat suport pentru codec-urile audio Rockchip RK3328, Cirrus Logic CS4341 și CS35L36, MediaTek MT6358, Qualcomm WCD9335 și Ingenic JZ4725B, precum și pentru platforma audio Mediatek MT8183;
    • A fost adăugat suport pentru controlerele NAND Flash STMicroelectronics FMC2, Amlogic Meson;
    • A fost adăugat suport pentru acceleratoare pentru sistemele de hardware Habana AI;
    • A fost adăugat suport pentru controlere Ethernet gigabit NXP ENETC și interfețele fără fir MediaTek MT7603E (PCIe) și MT76x8.

În același timp, Fondul Latino-American pentru Software Liber a formulat
o variantă nucleu complet liber 5.1 — Linux-libre 5.1-gnu, curățat de elementele firmware-ului și driverelor care conțin componente sau segmente de cod ne-libere, a căror utilizare este limitată de producător. În noua versiune a fost dezactivată încărcarea blob-urilor în driverele mt7603 și goya. Codul de curățare a blob-urilor din driverele și subsistemele wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifiex, btmrvl, btmtk și touchscreen_dmi a fost actualizat. Curățarea blob-urilor în bootloaderul firmware lantiq xrx200 a fost oprită din cauza eliminării sale din nucleu.

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