Nucleul Linux 5.14

Nucleul Linux 5.14

După două luni de dezvoltare, Linus Torvalds a prezentat lansare a nucleului Linux 5.14. Printre cele mai vizibile modificări: 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 bootloaderi pentru programele BPF verificate.

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

Principalele noutăți:

  • subsystemul de disc, I/O și sistemele de fișiere:
    • pentru cgroup a fost implementat un nou controler de prioritizare a I/O — rq-qos, care poate gestiona prioritatea cererilor de procesare pentru dispozitivele de bloc generate de participanții fiecărei 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șteptând din jurnal și a celor asociate cu acestea, 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 s-au adus optimizări ale performanței: prin excluderea jurnalizării inutile a atributelor extinse în timpul executării 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ă extentai, execuția sincronizării complete a fost dezactivată, reducând timpul de execuție cu 12%. A fost adăugată o setare în sysfs pentru a limita capacitatea I/O în timpul verificării FS. Au fost adăugate apeluri ioctl pentru anularea operațiunilor de redimensionare și eliminare a dispozitivelor;
    • în XFS a fost reproiectată implementarea cache-ului buffer, care a fost transferat la alocarea paginilor de memorie în mod lot. Eficiența lucrului cu cache-ul a fost îmbunătățită;
    • În F2FS a fost adăugată o opțiune pentru a funcționa în modul de doar citire și a fost implementat un mod de caching pentru blocurile comprimate (compress_cache) pentru a îmbunătăți performanța citirii aleatoare. A fost implementat suport pentru comprimarea fișierelor reflectate în memorie prin operația mmap(). O nouă opțiune de montare nocompress a fost propusă pentru a dezactiva selectiv comprimarea fișierelor pe baza unei măști;
    • în driverul exFAT, au fost efectuate îmbunătățiri ale compatibilității cu stocarea în anumite camere digitale;
    • a fost adăugat apelul de sistem quotactl_fd(), care permite gestionarea cotelor nu printr-un fișier special de dispozitiv, ci prin specificarea unui descriptor 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, care au fost înlocuite demult de subsistemul libata. Suportul pentru dispozitivele vechi a fost menținut în întregime, modificările se referă doar la posibilitatea utilizării driverelor vechi, în cazul utilizării cărora stocatoarele erau denumite /dev/hd*, nu /dev/sd*;
    • din kernel a fost eliminat driverul "raw", care oferea acces nebufferizat la dispozitivele de bloc prin interfața /dev/raw. Această funcționalitate a fost disponibilă de mult în aplicații prin utilizarea flag-ului 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 care pot rula împreună pe același nucleu CPU. Fiecărui proces i se poate atribui un identificator cookie, care definește domeniul de încredere între procese (de exemplu, apartenența la același utilizator sau container). Atunci când organizăm execuția codului, planificatorul poate asigura partajarea unui nucleu CPU doar pentru procesele asociate cu același proprietar, ceea ce poate fi folosit pentru a bloca anumite atacuri din clasa Spectre prin împiedicarea execuției în același fir SMT (Hyper Threading) a sarcinilor de încredere și de neîncredere;
    • pentru mecanismul cgroup a fost implementat suportul pentru operația kill, care permite terminarea simultană a tuturor proceselor legate de grup (trimiterea SIGKILL), prin scrierea „1” în fișierul virtual cgroup.kill;
    • funcționalitățile legate de reacția la detectarea blocărilor împărțite („split lock”), care apar la accesarea datelor nealiniate din memorie din cauza faptului că, în timpul executării unei instrucțiuni atomice, datele traversează două linii de cache ale CPU-ului. Astfel de blocări conduc la o scădere semnificativă a performanței, motiv pentru care anterior era oferită posibilitatea de a închide forțat aplicația care a provocat blocarea. În noua versiune, a fost adăugat parametrul de linie de comandă a nucleului „split_lock_detect=ratelimit:N”, care permite definirea unei limite generale a intensității operațiunilor de blocare pe secundă, după depășirea căreia orice proces care devine sursa unei blocări împărțite va fi oprit forțat timp de 20 ms în loc de a fi închis;
    • în controlerul de grupă de clasare CFS (CFS bandwidth controller), care determină cât de mult timp de procesor poate fi alocat fiecărei grup de clasare, s-a implementat posibilitatea de a defini limite, restricționate de un timp de valabilitate specificat, ceea ce permite o mai bună reglare 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ă utilizeze 50 ms de timp CPU la fiecare 100 ms;
    • a fost adăugată infrastructura inițială pentru crearea de încărcătoare de programe BPF, care va permite ulterior încărcarea doar a programelor BPF semnate cu o cheie digitală de încredere;
    • a fost adăugată o nouă operațiune futex FUTEX_LOCK_PI2, care utilizează un cronometru monoton pentru calcularea timpului de așteptare, care ia în considerare timpul petrecut de sistem în mod de așteptare;
    • pentru arhitectura RISC-V a fost implementat suport pentru pagini mari de memorie (Transparent Huge-Pages) și posibilitatea de a aplica mecanismul KFENCE pentru detectarea erorilor în gestionarea memoriei;
    • în apelul de sistem madvise(), care oferă mijloace pentru optimizarea gestionării memoriei procesului, au fost adăugate flag-urile MADV_POPULATE_READ și MADV_POPULATE_WRITE pentru generarea „page fault” în toate paginile de memorie, reflectate pentru operațiuni de citire sau scriere, fără a efectua citirea sau scrierea efectivă (prefault). Utilizarea flag-urilor poate fi utilă pentru reducerea întârzierilor în timpul execuției programului, prin executarea anticipată a handler-ului „page fault” odată pentru toate paginile nealocate, fără a aștepta accesul efectiv la acestea;
    • în sistemul de testare unit kunit a fost adăugată suport pentru rularea testelor în mediu QEMU;
    • au fost adăugate noi trasatoare: „osnoise” pentru urmărirea întârzierilor în aplicații cauzate de gestionarea întreruperilor și „timerlat” pentru a oferi informații detaliate despre întârzierile la treziri din cauza semnalului temporizator;
  • virtualizare și securitate:
    • adăugat apelul de sistem memfd_secret(), care permite crearea unei zone de memorie private într-un spațiu de adrese izolat, vizibilă doar procesului deținător, nereflectată în alte procese și direct inaccesibilă nucleului;
    • în sistemul de filtrare a apelurilor de sistem seccomp, prin mutarea handler-elor de blocare în spațiul utilizatorului, a fost oferită posibilitatea de a folosi o operațiune atomică pentru a crea un descriptor de fișier pentru sarcina izolată și a-l returna la gestionarea apelului de sistem. Operația propusă rezolvă problema cu întreruperea handler-ului în spațiul utilizatorului la primirea semnalului;
    • adăugat un nou mecanism pentru gestionarea restricțiilor de resurse în spațiul numelui identificatorilor de utilizator, care leagă contoare rlimit separate de utilizator în „user namespace”. Modificarea rezolvă problema aplicării contoarelor de resurse comune atunci când un utilizator rulează procese în containere diferite;
    • în hipervizorul KVM pentru sisteme ARM64 a fost adăugată posibilitatea de a utiliza extensia MTE (MemTag, Memory Tagging Extension) în sistemele gazdă, permițând asocierea etichetelor cu fiecare operațiune de alocare a memoriei și organizarea verificării corectitudinii utilizării pointerilor pentru a bloca exploatarea vulnerabilităților cauzate de accesarea blocurilor de memorie deja eliberate, depășirile de tampon, accesările înainte de inițializare și utilizarea în afara contextului curent;
    • resursele platformei ARM64 pentru autentificarea pointerilor (Pointer Authentication) pot fi acum configurate separat pentru nucleu și spațiul utilizatorului. Tehnologia permite utilizarea instrucțiunilor specializate ARM64 pentru verificarea adreselor de retur folosind semnături digitale, care sunt stocate în biții superioare neutilizați ai pointerului;
    • în User-mode Linux a fost adăugată suport pentru utilizarea driverelor pentru dispozitive PCI cu un bus virtual PCI, implementat de driverul PCI-over-virtio;
    • pentru sistemele x86 a fost adăugată suportul pentru dispozitivul paravirtualizat virtio-iommu, care permite trimiterea cererilor IOMMU, cum ar fi ATTACH, DETACH, MAP și UNMAP, peste transportul virtio fără a emula tabele de pagini de memorie;
    • pentru CPU Intel, începând cu familia Skylake și până la Coffee Lake, utilizarea extensiilor Intel TSX (Transactional Synchronization Extensions) este dezactivată implicit, oferind mijloace pentru îmbunătățirea performanței aplicațiilor multithread prin excluderea dinamică a operațiunilor de sincronizare inutile. Extensiile sunt dezactivate din cauza posibilității de a efectua atacuri Zombieload, manipulând scurgerile de informații prin canale externe, care apar la operarea mecanismului de întrerupere asincronă a operațiunilor (TAA, TSX Asynchronous Abort);
  • subsystemul de rețea:
    • continuarea integrării în kernel a MPTCP (MultiPath TCP), extensia protocolului TCP pentru organizarea funcționării conexiunii TCP cu livrarea pachetelor simultan pe mai multe rute prin diferite interfețe de rețea, legate de adrese IP diferite. În noua versiune adăugat mecanism pentru definirea propriilor politici de hashare a traficului pentru IPv4 și IPv6 (multipath hash policy), care oferă posibilitatea din spațiul utilizatorului de a determina care dintre câmpurile din pachete, inclusiv cele încapsulate, vor fi folosite în calcularea hashului, care determină alegerea rutei pentru pachet;
    • în transportul virtual virtio a fost adăugat suportul pentru socket-uri SOCK_SEQPACKET (livrarea ordonată și sigură a datagramelor);
    • au fost extinse capacitățile mecanismului socket-urilor SO_REUSEPORT, care permite mai multor socket-uri ascultătoare să se conecteze la un singur port pentru a primi conexiuni cu distribuirea cererilor primite simultan pe toate socket-urile conectate prin SO_REUSEPORT, ceea ce simplifică crearea aplicațiilor server multithread. În noua versiune au fost adăugate mijloace pentru transferul controlului către un alt socket în caz de eșec în procesarea cererii de către socket-ul ales inițial (rezolvă problema pierderii unor conexiuni individuale la repornirea serviciilor);
  • echipament:
    • în driverul amdgpu a fost implementată suport pentru noile serii GPU AMD Radeon RX 6000, dezvoltate sub denumirile cod «Beige Goby» (Navi 24) și «Yellow Carp», precum și suport îmbunătățit pentru GPU Aldebaran (gfx90a) și APU Van Gogh. A fost adăugată posibilitatea de a lucra simultan cu mai multe panouri eDP. Pentru APU Renoir s-a implementat suportul pentru funcționarea cu buffer-uri criptate în memoria video (TMZ, Trusted Memory Zone). A fost adăugat suport pentru dezactivarea la cald a plăcilor grafice (hot-unplug). Pentru GPU Radeon RX 6000 (Navi 2x) și plăcile grafice mai vechi AMD a fost activat implicit mecanismul de gestionare a consumului de energie 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 unități de management al memoriei (MMU, memory management unit) ce pot accesa memoria principală. De asemenea, prin HMM se poate organiza un spațiu de adresare comun între GPU și CPU, în care GPU-ul poate accesa memoria principală a procesului;
    • a fost adăugată suportul inițial pentru tehnologia AMD Smart Shift, care schimbă dinamic parametrii de consum de energie pentru CPU și GPU în laptopuri cu chipset și placă grafică AMD pentru a forța performanța în jocuri, editare video și randare 3D;
    • în driverul i915 pentru plăcile grafice Intel sistemul de compozitare suport pentru cipurile Intel Alderlake P;
    • a fost adăugat driverul drm/hyperv pentru adaptorul grafic virtual Hyper-V;
    • adăugat driverul grafic simpledrm, care folosește pentru ieșirea framebuffer EFI-GOP sau VESA, furnizate de firmware-ul UEFI sau BIOS. Scopul principal al driverului este de a oferi o ieșire grafică în etapele inițiale ale încărcării, înainte ca utilizarea unui driver DRM complet să devină posibilă. Driverul poate fi utilizat și ca o soluție temporară pentru hardware-ul pentru care nu sunt disponibile încă driverele DRM native;
    • a fost adăugată suport pentru computerul all-in-one Raspberry Pi 400;
    • a fost adăugat driverul dell-wmi-privacy pentru suportul întrerupătoarelor hardware pentru cameră și microfon furnizate în laptopurile Dell;
    • pentru laptopurile Lenovo adăugat interfața WMI pentru modificarea parametrilor BIOS prin sysfs /sys/class/firmware-attributes/;
    • extinsă suport pentru dispozitive cu interfață USB4;
    • a fost adăugată suport pentru placi 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. Suportul audio a fost îmbunătățit pe laptopurile HP și ASUS. Adăugate patch-uri pentru reducerea întârzierilor înainte de începutul redării sunetului pe dispozitive cu interfață USB.

Sursa – opennet.ru.

Sursa: linux.org.ru

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