Lansarea nucleului Linux 5.14

După două luni de dezvoltare, Linus Torvalds a prezentat lansarea nucleului Linux 5.14. Printre cele mai notabile modificări: noile apeluri de sistem quotactl_fd() și memfd_secret(), eliminarea driverelor ide și brute, noul controler de prioritate I/O pentru cgroup, modul de programare a sarcinilor SCHED_CORE, infrastructură pentru crearea încărcătoarelor de programe BPF verificate.

Noua versiune include 15883 de corecții de la 2002 dezvoltatori, dimensiunea patch-ului este de 69 MB (modificările au afectat 12580 de fișiere, s-au adăugat 861501 linii de cod, 321654 de linii au fost șterse). Aproximativ 47% din toate modificările introduse în 5.14 sunt legate de driverele de dispozitiv, aproximativ 14% dintre modificări sunt legate de actualizarea codului specific arhitecturilor hardware, 13% sunt legate de stiva de rețea, 3% sunt legate de sistemele de fișiere și 3% sunt legate de subsistemele interne ale nucleului.

Principalele inovații:

  • Subsistem de disc, I/O și sisteme de fișiere
    • Un nou controler de prioritizare I/O a fost implementat pentru cgroups, rq-qos, care poate controla prioritatea de procesare a cererilor de blocare a dispozitivelor generate de membrii fiecărui cgroup. Noul suport pentru controler prioritar a fost adăugat la planificatorul I/O mq-deadline.
    • Sistemul de fișiere ext4 implementează o nouă comandă ioctl, EXT4_IOC_CHECKPOINT, care forțează toate tranzacțiile în așteptare din jurnal și buffer-urile asociate acestora să fie spălate pe disc și, de asemenea, suprascrie zona utilizată de jurnal în stocare. Schimbarea a fost pregătită ca parte a unei inițiative de prevenire a scurgerilor de informații din sistemele de fișiere.
    • Optimizările de performanță au fost făcute pentru Btrfs: prin eliminarea înregistrării inutile a atributelor extinse în timpul execuției fsync, performanța operațiunilor intensive cu atribute extinse a crescut cu până la 17%. În plus, atunci când se efectuează operații de tăiere care nu afectează extensiile, sincronizarea completă este dezactivată, ceea ce a redus timpul de operare cu 12%. O setare a fost adăugată la sysfs pentru a limita lățimea de bandă I/O la verificarea FS. S-au adăugat apeluri ioctl pentru a anula operațiunile de redimensionare și ștergere a dispozitivului.
    • În XFS, implementarea cache-ului buffer a fost reproiectată, care a fost trecută la alocarea paginilor de memorie în modul batch. Eficiență îmbunătățită a memoriei cache.
    • F2FS adaugă o opțiune pentru a funcționa în modul numai citire și implementează un mod cache bloc comprimat (compress_cache) pentru a îmbunătăți performanța de citire aleatorie. A fost implementat suport pentru comprimarea fișierelor mapate pe memorie folosind operația mmap(). Pentru a dezactiva selectiv compresia fișierelor pe baza unei mască, a fost propusă o nouă opțiune de montare nocompress.
    • S-a lucrat în driverul exFAT pentru a îmbunătăți compatibilitatea cu unele stocări ale camerelor digitale.
    • S-a adăugat apelul de sistem quotactl_fd(), care vă permite să gestionați cotele nu printr-un fișier de dispozitiv special, ci prin specificarea unui descriptor de fișier asociat cu sistemul de fișiere pentru care este aplicată cota.
    • Vechile drivere pentru dispozitivele bloc cu interfață IDE au fost eliminate din nucleu; au fost de mult înlocuite de subsistemul libata.
    • Driverul „raw” a fost eliminat din kernel, oferind acces fără tampon la dispozitivele blocate prin interfața /dev/raw. Această funcționalitate a fost implementată de mult timp în aplicații care utilizează steag-ul O_DIRECT.
  • Servicii de memorie și sistem
    • Programatorul de sarcini implementează un nou mod de programare, SCHED_CORE, care vă permite să controlați ce procese pot fi executate împreună pe același nucleu CPU. Fiecărui proces i se poate atribui un identificator cookie care definește domeniul de încredere dintre procese (de exemplu, aparținând aceluiași utilizator sau aceluiași container). Atunci când organizează execuția codului, planificatorul se poate asigura că un nucleu CPU este partajat numai între procesele asociate aceluiași proprietar, care poate fi folosit pentru a bloca unele atacuri Spectre, împiedicând rularea sarcinilor de încredere și care nu sunt de încredere pe același fir SMT (Hyper Threading). .
    • Pentru cgroup, a fost implementat suport pentru operația de ucidere, ceea ce vă permite să omorâți simultan toate procesele asociate cu grupul (trimiteți SIGKILL) scriind „1” în fișierul virtual cgroup.kill.
    • Capacități extinse legate de răspunsul la detectarea blocajelor divizate („blocări divizate”) care apar la accesarea datelor nealiniate din memorie, datorită faptului că atunci când se execută o instrucțiune atomică, datele traversează două linii cache a CPU. O astfel de blocare duce la o scădere semnificativă a performanței, astfel încât anterior a fost posibilă oprirea forțată a aplicației care a provocat blocarea. Noua versiune adaugă un parametru de linie de comandă a nucleului „split_lock_detect=ratelimit:N”, care vă permite să definiți o limită la nivelul întregului sistem a ratei operațiunilor de blocare pe secundă, după depășirea căreia orice proces care a devenit sursa unei blocări divizate va fi forțat să se oprească timp de 20 ms în loc să se termine.
    • Controlerul de lățime de bandă cgroup CFS (controller de lățime de bandă CFS), care determină cât timp de procesor poate fi alocat fiecărui cgroup, implementează capacitatea de a defini limite limitate în timp, ceea ce permite o mai bună reglementare a sarcinilor de lucru sensibile la latență. De exemplu, setarea cpu.cfs_quota_us la 50000 și cpu.cfs_period_us la 100000 va permite unui grup de procese să irosească 100 ms de timp CPU la fiecare 50 ms.
    • S-a adăugat infrastructura inițială pentru crearea încărcătoarelor de programe BPF, care va permite în continuare încărcarea numai a programelor BPF semnate cu o cheie digitală de încredere.
    • S-a adăugat o nouă operațiune futex FUTEX_LOCK_PI2, care utilizează un temporizator monoton pentru a calcula un timeout care ia în considerare timpul petrecut de sistem în modul de repaus.
    • Pentru arhitectura RISC-V, sunt implementate suportul pentru pagini de memorie mari (Transparent Huge-Pages) și capacitatea de a utiliza mecanismul KFENCE pentru a detecta erorile atunci când lucrați cu memorie.
    • Apelul de sistem madvise(), care oferă un mijloc de optimizare a managementului memoriei unui proces, a adăugat steagurile MADV_POPULATE_READ și MADV_POPULATE_WRITE pentru a genera o „defecțiune de pagină” pe toate paginile de memorie mapate pentru operații de citire sau scriere, fără a efectua o citire sau scriere efectivă. (prefault). Utilizarea steagurilor poate fi utilă pentru reducerea întârzierilor în execuția programului, datorită execuției proactive a handler-ului „page fault” pentru toate paginile nealocate simultan, fără a aștepta accesul efectiv la acestea.
    • Sistemul de testare unitară kunit a adăugat suport pentru rularea testelor în mediul QEMU.
    • Au fost adăugate noi trasoare: „osnoise” pentru a urmări întârzierile aplicațiilor cauzate de gestionarea întreruperilor și „timerlat” pentru a afișa informații detaliate despre întârzierile la trezirea de la un semnal de cronometru.
  • Virtualizare și securitate
    • Apelul de sistem memfd_secret() a fost adăugat pentru a crea o zonă de memorie privată într-un spațiu de adrese izolat, vizibil numai pentru procesul deținător, nereflectat pentru alte procese și neaccesibil direct la kernel.
    • În sistemul de filtrare a apelurilor de sistem seccomp, atunci când se mută manipulatorii de blocare în spațiul utilizatorului, este posibil să se utilizeze o singură operație atomică pentru a crea un descriptor de fișier pentru o sarcină izolată și a-l returna atunci când se procesează un apel de sistem. Operația propusă rezolvă problema întreruperii unui handler în spațiul utilizatorului când sosește un semnal.
    • S-a adăugat un nou mecanism pentru gestionarea limitelor de resurse în spațiul de nume ID utilizator, care leagă contoarele rlimit individuale de un utilizator din „spațiul de nume de utilizator”. Modificarea rezolvă problema cu utilizarea contoarelor de resurse comune atunci când un utilizator rulează procese în containere diferite.
    • Hipervizorul KVM pentru sistemele ARM64 a adăugat posibilitatea de a utiliza extensia MTE (MemTag, Memory Tagging Extension) în sistemele oaspeți, care vă permite să legați etichete la fiecare operațiune de alocare a memoriei și să organizați verificarea utilizării corecte a pointerilor pentru a bloca exploatarea vulnerabilități cauzate de accesarea blocurilor de memorie deja eliberate, depășirea bufferului, accesări înainte de inițializare și utilizare în afara contextului curent.
    • Facilitățile de autentificare cu pointer ale platformei ARM64 pot fi acum configurate separat pentru spațiul kernel și utilizator. Tehnologia vă permite să utilizați instrucțiuni specializate ARM64 pentru a verifica adresele de returnare folosind semnături digitale care sunt stocate în biții superiori neutilizați ai indicatorului însuși.
    • Modul utilizator Linux a adăugat suport pentru utilizarea driverelor pentru dispozitivele PCI cu o magistrală PCI virtuală, implementată de driverul PCI-over-virtio.
    • Pentru sistemele x86, a adăugat suport pentru dispozitivul paravirtualizat virtio-iommu, permițând trimiterea cererilor IOMMU precum ATTACH, DETACH, MAP și UNMAP prin transportul virtio fără a emula tabelele de pagini de memorie.
    • Pentru procesoarele Intel, de la familia Skylake la Coffee Lake, utilizarea Intel TSX (Transactional Synchronization Extensions), care oferă instrumente pentru îmbunătățirea performanței aplicațiilor multi-threaded prin eliminarea dinamică a operațiunilor de sincronizare inutile, este dezactivată implicit. Extensiile sunt dezactivate din cauza posibilității atacurilor Zombieload care manipulează scurgerea de informații prin canale terță parte care are loc în timpul funcționării mecanismului TAA (TSX Asynchronous Abort).
  • Subsistemul de rețea
    • Integrare în nucleul MPTCP (MultiPath TCP), o extensie a protocolului TCP pentru organizarea funcționării unei conexiuni TCP cu livrarea de pachete simultan de-a lungul mai multor rute prin diferite interfețe de rețea asociate cu diferite adrese IP. Noua versiune adaugă un mecanism pentru setarea propriilor politici de hashing a traficului pentru IPv4 și IPv6 (politica hash cu mai multe căi), făcând posibilă determinarea din spațiul utilizatorului care câmpuri din pachete, inclusiv cele încapsulate, vor fi utilizate la calcularea hash-ului care determină alegerea căii pentru pachet.
    • Suportul pentru socket-urile SOCK_SEQPACKET (transmitere ordonată și fiabilă a datagramelor) a fost adăugat la transportul virtual virtio.
    • Capacitățile mecanismului de socket SO_REUSEPORT au fost extinse, ceea ce permite mai multor socluri de ascultare să se conecteze la un singur port simultan pentru a primi conexiuni cu distribuirea simultană a cererilor primite pe toate socket-urile conectate prin SO_REUSEPORT, ceea ce simplifică crearea de aplicații de server multi-threaded . Noua versiune adaugă instrumente pentru transferul controlului către un alt soclu în caz de eșec la procesarea unei solicitări de către priza selectată inițial (rezolvă problema cu pierderea conexiunilor individuale la repornirea serviciilor).
  • Оборудование
    • Driverul amdgpu oferă suport pentru noua serie de GPU-uri AMD Radeon RX 6000, cu numele de cod „Beige Goby” (Navi 24) și „Yellow Carp”, precum și suport îmbunătățit pentru GPU Aldebaran (gfx90a) și APU Van Gogh. S-a adăugat posibilitatea de a lucra simultan cu mai multe panouri eDP. Pentru APU Renoir, a fost implementat suport pentru lucrul cu buffer-uri criptate în memoria video (TMZ, Trusted Memory Zone). S-a adăugat suport pentru plăcile grafice hot-unplug. Pentru GPU-urile Radeon RX 6000 (Navi 2x) și GPU-urile AMD mai vechi, suportul ASPM (Active State Power Management) este activat în mod implicit, care era activat anterior numai pentru GPU-urile Navi 1x, Vega și Polaris.
    • Pentru cipurile AMD, a fost adăugat suport pentru memorie virtuală partajată (SVM, memorie virtuală partajată) pe baza subsistemului HMM (Heterogeneous memory management), care permite utilizarea dispozitivelor cu propriile unități de gestionare a memoriei (MMU, unitate de gestionare a memoriei), care poate accesa memoria principală. Î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.
    • S-a adăugat suport inițial pentru tehnologia AMD Smart Shift, care modifică dinamic setările de putere ale CPU și GPU pe laptop-urile cu chipset și placă grafică AMD pentru a crește performanța pentru jocuri, editare video și randare 3D.
    • Driverul i915 pentru plăcile grafice Intel include suport pentru cipurile Intel Alderlake P.
    • S-a adăugat driver drm/hyperv pentru adaptorul grafic virtual Hyper-V.
    • S-a adăugat suport pentru computerul all-in-one Raspberry Pi 400.
    • S-a adăugat driverul dell-wmi-privacy pentru a accepta comutatoarele hardware ale camerei și microfonului incluse în laptopurile Dell.
    • Pentru laptopurile Lenovo, a fost adăugată o interfață WMI pentru modificarea setărilor BIOS prin sysfs /sys/class/firmware-attributes/.
    • Suport extins pentru dispozitive cu interfață USB4.
    • S-a adăugat suport pentru plăcile de sunet și codecuri AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 și Texas Instruments TAS2505. Suport audio îmbunătățit pe laptopurile HP și ASUS. S-au adăugat corecții pentru a reduce întârzierile înainte ca sunetul să înceapă redarea pe dispozitivele USB.

Sursa: opennet.ru

Adauga un comentariu