Kernel Linux 5.14

Kernel Linux 5.14

După două luni de dezvoltare, Linus Torvalds a prezentat eliberarea 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.

Principalul inovații:

  • subsistem de disc, sisteme de intrare/ieșire și fișiere:
    • pentru cgroup implementate nou controler de prioritate I/O - rq-qos, care poate controla prioritatea procesării 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;
    • pe sistemul de fișiere ext4 implementate noua comandă ioctl EXT4_IOC_CHECKPOINT, care forțează toate tranzacțiile în așteptare din jurnal și bufferele asociate pe disc și, de asemenea, suprascrie zona utilizată de jurnalul de stocare. Schimbarea a fost pregătită ca parte a unei inițiative de prevenire a scurgerilor de informații din sistemele de fișiere;
    • în Btrfs introdus Optimizări de performanță: 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 refăcut implementarea unui buffer cache, care este transferat la alocarea paginilor de memorie în modul batch. Eficiență îmbunătățită a memoriei cache;
    • F2FS a adăugat o opțiune pentru a funcționa în modul doar citire și a implementat un mod de stocare în 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 prin mască, a fost propusă o nouă opțiune de montare nocompress;
    • s-a lucrat în driverul exFAT pentru a îmbunătăți compatibilitatea cu stocarea unor camere digitale;
    • apel de sistem adăugat 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 se aplică cota;
    • Driverele vechi pentru dispozitivele bloc cu interfață IDE au fost eliminate din nucleu; au fost de mult înlocuite de subsistemul libata. Suportul pentru dispozitivele vechi a fost păstrat în totalitate, modificările se referă doar la posibilitatea de a utiliza drivere vechi, atunci când se foloseau unitățile denumite /dev/hd*, și nu /dev/sd*;
    • Driverul „raw” a fost eliminat din kernel, oferind acces fără tampon la dispozitivele de blocare prin interfața /dev/raw. Această funcționalitate a fost implementată de mult timp în aplicații care folosesc steag-ul O_DIRECT;
  • servicii de memorie și sistem:
    • un nou mod de programare a fost implementat în planificatorul de sarcini SCHED_CORE, care vă permite să controlați ce procese pot rula î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 cu același proprietar, care poate fi folosit pentru a bloca unele atacuri Spectre, împiedicând rularea sarcinilor de încredere și nedemne de încredere pe același fir SMT (Hyper Threading). ;
    • pentru mecanismul cgroup, a fost implementat suport pentru operațiunea kill, care vă permite să omorâți simultan toate procesele asociate grupului (trimiteți SIGKILL) scriind „1” în fișierul virtual cgroup.kill;
    • capabilități extinse legate de răspunsul la detectarea blocajelor divizate („blocuri divizate”) care apar la accesarea datelor nealiniate în memorie, datorită faptului că la executarea unei instrucțiuni atomice, datele traversează două linii de 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ă parametrul liniei de comandă kernel „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 să fie 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, are capacitatea de a defini limite limitate de o anumită durată de acțiune, ceea ce permite o mai bună reglare a sarcinilor 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;
    • adăugat infrastructura inițială pentru crearea încărcătoarelor de programe BPF, care va permite în continuare descărcarea numai a programelor BPF semnate cu o cheie digitală de încredere;
    • a adăugat o nouă operațiune futex FUTEX_LOCK_PI2, care utilizează un cronometru monoton pentru a calcula timeout-ul, care ia în considerare timpul petrecut de sistem în modul sleep;
    • pentru arhitectura RISC-V, suport pentru pagini de memorie mari (Transparent Huge-Pages) și capacitatea de a utiliza KFENCE pentru a identifica erorile atunci când lucrați cu memorie;
    • în apelul de sistem madvise(), care oferă un mijloc de a optimiza gestionarea memoriei procesului, adăugat Indicatori MADV_POPULATE_READ și MADV_POPULATE_WRITE pentru a genera o „defecțiune de pagină” pe toate paginile de memorie mapate pentru operațiuni 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;
    • într-un sistem de testare unitară kunit adăugat suport pentru rularea testelor în mediul QEMU;
    • noi trasori au adăugat: „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:
    • adăugat apel de sistem memfd_secret(), care vă permite să creați o zonă de memorie privată într-un spațiu de adrese izolat, vizibil doar pentru procesul proprietar, nereflectat în alte procese și neaccesibil direct kernelului;
    • în sistemul de filtrare a apelurilor de sistem seccomp, atunci când se mută manevrele de blocare în spațiul utilizatorului, este posibil să se utilizeze o 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țiunea propusă rezolvă problemă cu întreruperea handlerului în spațiul utilizatorului la sosirea unui semnal;
    • adăugat mecanism nou pentru a gestiona limitarea resurselor î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;
    • hypervisorul 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 bufferelor, accesări înainte de inițializare și utilizare în afara contextului curent;
    • Autentificarea pointerului oferită de platforma ARM64 poate fi acum configurată 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 pointerului însuși;
    • în modul utilizator Linux 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, care vă permite să trimiteți cereri IOMMU, cum ar fi 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 de atacuri încărcătură de zombi, manipularea scurgerii de informații prin canale terțe care are loc în timpul funcționării mecanismului de întrerupere asincronă a operațiunilor (TAA, TSX Asynchronous Abort);
  • subsistemul de rețea:
    • integrarea continuă în nucleul MPTCP (MultiPath TCP), o extensie a protocolului TCP pentru organizarea funcționării unei conexiuni TCP cu livrarea de pachete simultan pe mai multe rute prin diferite interfețe de rețea asociate cu adrese IP diferite. În noul număr adăugat 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 din spațiul utilizatorului să se determine ce câmpuri din pachete, inclusiv cele încapsulate, vor fi utilizate la calcularea hash-ului care determină alegerea căii pentru pachet;
    • Suportul pentru socket a fost adăugat la virtio de transport virtual SOCK_SEQPACKET (transmiterea ordonată și fiabilă a datagramelor);
    • 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 deodată 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 . În noua versiune adăugat mijloace pentru transferul controlului către o altă priză în caz de eșec la procesarea unei cereri de către priza selectată inițial (rezolvă problema cu pierderea conexiunilor individuale la repornirea serviciilor);
  • echipament:
    • în driverul amdgpu implementate suport pentru noua serie de GPU AMD Radeon RX 6000, cu nume de cod „Beige Goby” (Navi 24) și „Yellow Carp”, precum și suport îmbunătățit pentru Aldebaran GPU (gfx90a) și Van Gogh APU. 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 pentru mecanismul de economisire a energiei ASPM (Active State Power Management) este activat în mod implicit, care anterior era activat 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ă. Inclusiv 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;
    • a adăugat suport tehnologic inițial AMD Smart Shift, care modifică dinamic parametrii de consum de energie ai procesorului și GPU-ului pe laptop-urile cu chipset și placă grafică AMD pentru a spori performanța la jocuri, editare video și randare 3D;
    • în driverul i915 pentru plăcile video Intel inclus suport pentru cipuri Intel Alderlake P;
    • a adăugat driver drm/hyperv pentru adaptorul grafic virtual Hyper-V;
    • adăugat Driver grafic simpledrm care utilizează framebuffer-ul EFI-GOP sau VESA furnizat de firmware-ul UEFI sau BIOS pentru ieșire. Scopul principal al driverului este de a oferi capabilități de ieșire grafică în timpul etapelor inițiale de pornire, înainte ca un driver DRM complet să poată fi utilizat. Driverul poate fi folosit și ca soluție temporară pentru echipamentele care nu au încă drivere DRM native;
    • adăugat suport computer all-in-one Zmeură Pi 400;
    • S-a adăugat driver dell-wmi-privacy pentru a suporta comutatoarele hardware ale camerei și microfonului incluse în laptopurile Dell;
    • pentru laptopurile Lenovo adăugat Interfață WMI pentru modificarea parametrilor BIOS prin sysfs /sys/class/firmware-attributes/;
    • extins suport pentru dispozitive cu interfață USB4;
    • adăugat suport pentru plăci 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. Adăugat corecții pentru a reduce întârzierile înainte ca sunetul să înceapă redarea pe dispozitivele cu interfață USB.

Sursa – opennet.ru.

Sursa: linux.org.ru