Lansarea nucleului Linux 5.14

După două luni de dezvoltare, Linus Torvalds a lansat versiunea core-ului Linux 5.14. Printre cele mai notabile schimbări se numără: noi apeluri de sistem quotactl_fd() și memfd_secret(), eliminarea driverelor ide și raw, un nou controler de priorități pentru I/O pentru cgroup, modul de planificare a sarcinilor SCHED_CORE, infrastructura pentru crearea de boot-loadere verificate cu programe BPF.

Noua versiune conține 15883 de corecții de la 2002 de dezvoltatori, dimensiunea patch-ului fiind de 69 MB (schimbările au afectat 12580 de fișiere, au fost adăugate 861501 de linii de cod și au fost șterse 321654 de linii). Aproximativ 47% din toate modificările din 5.14 sunt legate de driverele de dispozitive, aproximativ 14% se referă la actualizări de cod specific arhitecturilor hardware, 13% sunt legate de stiva de rețea, 3% de sistemele de fișiere și 3% de subsistemele interne ale kernel-ului.

Noutăți principale:

  • Subsistemul de disc, I/O și sistemele de fișiere
    • Pentru cgroup a fost implementat un nou controler de prioritizare a I/O-ului — rq-qos, care poate gestiona prioritatea procesării cererilor de la dispozitivele de bloc generate de participanții fiecărui cgroup. Suportul pentru noul controler de priorități a fost adăugat în planificatorul de I/O mq-deadline.
    • În sistemul de fișiere ext4 a fost implementată o nouă comandă ioctl EXT4_IOC_CHECKPOINT, care forțează scrierea pe disc a tuturor tranzacțiilor așteptate din jurnal și a bufferelor aferente, precum și rescrierea zonei utilizate de jurnal în stocare. Modificarea a fost pregătită ca parte a inițiativei de prevenire a scurgerilor de informații din sistemele de fișiere.
    • În Btrfs au fost realizate optimizări de performanță: prin excluderea jurnaliză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, în timpul operațiunilor de trunchiere care nu afectează extentiile, execuția unei sincronizări complete a fost dezactivată, reducând timpul de execuție al operației cu 12%. În sysfs a fost adăugată o setare pentru limitarea lățimii de bandă a I/O-ului în timpul verificării FS. Au fost adăugate apeluri ioctl pentru anularea operațiunilor de redimensionare și eliminare a dispozitivului.
    • În XFS a fost revizuită implementarea cache-ului tampon, care a fost transferată la alocarea paginilor de memorie în mod lot. Eficiența funcționării cache-ului a fost îmbunătățită.
    • În F2FS a fost adăugată o opțiune pentru funcționarea în modul doar citire și implementat un mod de кешare a blocurilor comprimate (compress_cache) pentru a îmbunătăți performanța citirii aleatorii. A fost implementat suport pentru comprimarea fișierelor reflectate în memorie prin operația mmap(). Pentru dezactivarea selectivă a comprimării fișierelor pe bază de mască, a fost propusă o nouă opțiune de montare nocompress.
    • În driverul exFAT s-au efectuat lucrări pentru îmbunătățirea compatibilității cu stocătoarele unor camere digitale.
    • A fost adăugat apelul de sistem quotactl_fd(), care permite gestionarea cotelor nu printr-un fișier de dispozitiv special, ci prin specificarea descriptorului de fișier asociat cu sistemul de fișiere pentru care se aplică cota.
    • Din kernel au fost eliminate driverele vechi pentru dispozitivele de bloc cu interfața IDE, fiind înlocuite demult de subsistemul libata.
    • Din kernel a fost eliminat driverul «raw», care oferă acces nebufferizat la dispozitivele de bloc prin interfața /dev/raw. Funcționalitatea specificată este de mult implementată în aplicații prin utilizarea flagului O_DIRECT.
  • Memorie și servicii de sistem
    • În planificatorul de sarcini a fost implementat un nou mod de planificare SCHED_CORE, care permite gestionarea proceselor ce pot fi executate împreună pe un singur nucleu CPU. Fiecărui proces i se poate atribui un identificator cookie, care determină domeniul de încredere între procese (de exemplu, apartenența unui singur utilizator sau container). La organizarea execuției codului, planificatorul poate asigura partajarea unui nucleu CPU doar pentru procesele asociate cu un singur proprietar, ceea ce poate fi utilizat pentru a bloca anumite atacuri din clasa Spectre prin prevenirea executării în același fir SMT (Hyper Threading) a sarcinilor de încredere și a celor care nu sunt încredere.
    • Pentru cgroup a fost implementat suportul pentru operația kill, care permite închiderea simultană a tuturor proceselor legate de grup (trimiterea SIGKILL), prin scrierea «1» în fișierul virtual cgroup.kill.
    • Funcțiile legate de reacția la detectarea blocajelor „split lock”, care apar atunci când se accesează date nealiniate în memorie din cauza faptului că, în timpul executării unei instrucțiuni atomice, datele trec peste două linii de cache CPU, au fost extinse. Aceste blocaje duc la o scădere semnificativă a performanței, de aceea anterior era oferită posibilitatea de a forța închiderea aplicației care a cauzat blocajul. În noua versiune a fost adăugat parametrul de linie de comandă a nucleului „split_lock_detect=ratelimit:N”, care permite stabilirea unui limită generală sistemică a intensității operațiunilor de blocare pe secundă, după depășirea căreia orice proces care a devenit sursa blocajului split va fi închis forțat timp de 20 ms.
    • În controlerul de grupuri cgroup CFS (CFS bandwidth controller), care determină cât de mult timp de procesor poate fi alocat fiecărei cgroup, a fost implementată capacitatea de a stabili limitele restricționate de un timp de valabilitate dat, ceea ce permite o mai bună reglementare a sarcinilor sensibile la întârzieri. De exemplu, setarea valorii cpu.cfs_quota_us la 50000 și cpu.cfs_period_us la 100000 va permite grupului de procese să își folosească timpul CPU timp de 50 ms la fiecare 100 ms.
    • A fost adăugată infrastructura inițială pentru crearea încărcătoarelor de programe BPF, care va permite în continuare să se permită încărcarea numai a programelor BPF semnate cu o cheie digitală de încredere.
    • A fost adăugată o nouă operație futex FUTEX_LOCK_PI2, care utilizează un temporizator monoton pentru a calcula timeout-ul, care ține cont de timpul petrecut de sistem în stare de inactivitate.
    • Pentru arhitectura RISC-V a fost implementat suportul pentru pagini mari de memorie (Transparent Huge-Pages) și posibilitatea aplicării mecanismului KFENCE pentru detectarea erorilor în gestionarea memoriei.
    • În apelul de sistem madvise(), au fost adăugate flag-uri MADV_POPULATE_READ și MADV_POPULATE_WRITE pentru generarea de «page fault» pe toate paginile de memorie, reflectate pentru operațiuni de citire sau scriere, fără a efectua citiri sau scrieri efective (prefault). Utilizarea flag-urilor poate fi utilă pentru a reduce întârzierile în procesul de execuție al programului, datorită executării proactive a handler-ului „page fault” pentru toate paginile nealocate, fără a aștepta accesul efectiv la acestea.
    • Sistemul de testare unitate kunit a adăugat suport pentru rularea testelor în mediul QEMU.
    • Au fost adăugați noi trace-uri: „osnoise” pentru a urmări întârzierile în aplicații cauzate de procesarea întreruperilor și „timerlat” pentru a oferi informații detaliate despre întârzierile la trezirea prin semnalul temporizatorului.
  • Virtualizare și securitate
    • A fost adăugat apelul de sistem memfd_secret(), care permite crearea unei zone de memorie private în spațiul de adrese izolat, vizibilă doar procesului deținător, care nu este reflectată în alte procese și accesibilă direct nucleului.
    • În sistemul de filtrare a apelurilor de sistem seccomp, la mutarea handler-elor de blocare în spațiul utilizatorului, a fost oferită posibilitatea de a utiliza o singură operație atomică pentru a crea un descriptor de fișier pentru sarcina izolată și a-l returna atunci când se procesează apelul de sistem. Operația propusă rezolvă problema întreruperii handler-ului în spațiul utilizatorului la primirea unui semnal.
    • A fost admechanism nou pentru gestionarea restricționării resurselor în spațiul de nume al identificatorilor de utilizatori, care leagă contoare rlimit individuale de utilizator în „user namespace”. Modificarea rezolvă problema aplicării contoarelor de resurse comune atunci când un utilizator lansează procese în diferite containere.
    • În hypervisor KVM pentru sistemele ARM64 a fost adăugată capacitatea de a utiliza în sistemele gazdă extensia MTE (MemTag, Memory Tagging Extension), care permite asocierea de etichete cu fiecare operațiune de alocare a memoriei și organizează verificarea corectitudinii utilizării pointerilor pentru a bloca exploatarea vulnerabilităților cauzate de accesarea blocurilor de memorie deja eliberate, suprascrierilor de buffer, accesărilor înainte de inițializare și utilizării în afara contextului curent.
    • Instrumentele de autentificare a pointer-ilor (Pointer Authentication) oferite de platforma ARM64 pot fi acum configurate separat pentru nucleu și spațiul utilizatorului. Tehnologia permite utilizarea unor instrucțiuni speciale ARM64 pentru a verifica adresele de returnare cu ajutorul semnăturilor digitale, care sunt stocate în biții superiori neutilizați ai pointer-ului.
    • În User-mode Linux a fost adăugată suport pentru utilizarea driverelor cu dispozitive PCI pe un autobuz virtual PCI, realizat de driverul PCI-over-virtio.
    • Pentru sistemele x86 a fost adăugat suport pentru dispozitivul para-virtualizat virtio-iommu, care permite trimiterea cererilor IOMMU, precum ATTACH, DETACH, MAP și UNMAP, peste transportul virtio fără a emula tabelele de pagină a memoriei.
    • Pentru CPU-urile Intel, începând cu familia Skylake și până la Coffee Lake, utilizarea extensiilor Intel TSX (Transactional Synchronization Extensions) este dezactivată implicit, aceste extensii oferind mijloace pentru a îmbunătăți performanța aplicațiilor multi-threaded prin excluderea dinamică a operațiunilor de sincronizare inutile. Extensiile sunt dezactivate din cauza posibilității de atacuri Zombieload, care manipulează scurgerile de informații prin canale laterale, apărute în timpul funcționării mecanismului de întrerupere asincron al operațiunilor (TAA, TSX Asynchronous Abort).
  • Subsystema de rețea
    • Continua integrarea în nucleu a MPTCP (MultiPath TCP), extensia protocolului TCP pentru organizarea funcționării conexiunii TCP cu livrarea pachetelor simultan pe mai multe rute prin diferite interfete de rețea, legate de diferite. adrese IP.În noua versiune a fost adăugat un mecanism pentru definirea propriilor politici de hash pentru traficul IPv4 și IPv6 (multipath hash policy), permițând din spațiul utilizatorului să definească care dintre câmpurile din pachete, inclusiv cele încapsulate, vor fi utilizate pentru calcularea hash-ului, determinând astfel calea de selecție pentru pachet.
    • În transportul virtual virtio a fost adăugat suport pentru socket-uri SOCK_SEQPACKET (transmitere ordonată și fiabilă a datagramelor).
    • Funcționalitățile mecanismului de socket-uri SO_REUSEPORT au fost extinse, permițând mai multor socket-uri în ascultare să se conecteze la un singur port pentru a primi conexiuni, distribuind cererile primite simultan între toate socket-urile conectate prin SO_REUSEPORT, ceea ce simplifică crearea aplicațiilor server multi-threaded. În noua versiune au fost adăugate instrumente pentru transferul controlului către un alt socket în caz de eșec al procesării cererii de către socket-ul ales inițial (rezolvă problema pierderii unor conexiuni la repornirea serviciilor).
  • Echipament
    • Driverul amdgpu a implementat suport pentru noile serii GPU AMD Radeon RX 6000, dezvoltate sub denumirile de cod „Beige Goby” (Navi 24) și „Yellow Carp”, iar suportul pentru GPU Aldebaran (gfx90a) și APU Van Gogh a fost îmbunătățit. A fost adăugată posibilitatea de a lucra simultan cu mai multe panouri eDP. Pentru APU Renoir, a fost implementat suport pentru a lucra cu buferi criptati în memoria video (TMZ, Trusted Memory Zone). A fost adăugat suport pentru deconectarea la cald a plăcilor grafice (hot-unplug). Pentru GPU Radeon RX 6000 (Navi 2x) și GPU-urile AMD mai vechi, a fost activat în mod implicit suportul pentru mecanismul de gestionare a energiei ASPM (Active State Power Management), care anterior fusese activat doar pentru GPU Navi 1x, Vega și Polaris.
    • Pentru cipurile AMD, a fost adăugat suport pentru memoria virtuală partajată (SVM, shared virtual memory) bazată pe subsistemul HMM (Heterogeneous memory management), care permite utilizarea dispozitivelor cu propriile unități 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 poate accesa memoria principală a procesului.
    • A fost adăugat suport inițial pentru tehnologia AMD Smart Shift, care modifică dinamic parametrii de consum de energie ai CPU și GPU în laptopurile cu chipset și placă grafică AMD, pentru a forța performanța în timpul jocurilor, editării video și 3D-renderingului.
    • În driverul i915 pentru plăcile grafice Intel, a fost adăugat suport pentru cipurile Intel Alderlake P.
    • A fost adăugat driverul drm/hyperv pentru adaptorul grafic virtual Hyper-V.
    • A fost adăugat suport pentru computerul all-in-one Raspberry Pi 400.
    • A fost adăugat driverul dell-wmi-privacy pentru a sprijini comutatoarele hardware ale camerelor și microfoanelor furnizate în laptopurile Dell.
    • Pentru laptopurile Lenovo, a fost adăugat un interfață WMI pentru a modifica parametrii BIOS prin sysfs /sys/class/firmware-attributes/.
    • Suportul pentru dispozitive cu interfață USB4 a fost extins.
    • A fost adăugat suport pentru plăcile de sunet și codec-uri AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 și Texas Instruments TAS2505. Suportul pentru sunet pe laptopurile HP și ASUS a fost îmbunătățit. Au fost adăugate patch-uri pentru reducerea întârzierilor înainte de a începe redarea sunetului pe dispozitive cu interfață USB.

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