Lansarea nucleului Linux 5.9

După două luni de dezvoltare, Linus Torvalds a prezentat lansarea nucleului Linux 5.9. Printre cele mai notabile schimbări se numără: limitarea importului de simboluri din modulele proprietare în modulele GPL, accelerarea operațiunilor de schimbare a contextului folosind instrucțiunea procesorului FSGSBASE, suport pentru comprimarea imaginii nucleului prin Zstd, revizuirea priorităților pentru firele de execuție din nucleu, suport pentru protocolul PRP (Parallel Redundancy Protocol), programare în funcție de lățimea de bandă în programatorul deadline, împachetarea proactivă a paginilor de memorie, flag-ul de capacitate CAP_CHECKPOINT_RESTOR, apelul de sistem close_range(), îmbunătățirea performanței dm-crypt, eliminarea codului pentru sistemele guest pe 32 de biți Xen PV, un nou mecanism de gestionare a memoriei slab, opțiunea „rescue” în Btrfs, suport pentru criptarea inline în ext4 și F2FS.

În noua versiune au fost acceptate 16074 corecții de la 2011 dezvoltatori,
dimensiunea patch-ului fiind de 62 MB (modificările au afectat 14548 fișiere, au fost adăugate 782155 linii de cod și au fost eliminate 314792 linii). Aproximativ 45% din toate modificările prezentate în 5.9
sunt legate de driverele de dispozitive, aproximativ 15% din modificări au
de a face cu actualizarea codului specific arhitecturilor hardware, 13%
se referă la stiva de rețea, 3% - la sistemele de fișiere și 3% la subsistemele
interne ale nucleului.

Principalele noutăți:

  • Memorie și servicii de sistem
    • A fost întărită protecția împotriva utilizării straturilor GPL pentru legarea driverelor proprietare cu componente ale nucleului, exportate doar pentru module sub licența GPL. Flag-ul TAINT_PROPRIETARY_MODULE este acum împărtășit în toate modulele care importă simboluri din module cu acest flag. Dacă un modul GPL încearcă să importe simboluri dintr-un modul non-GPL, atunci acest modul GPL va moșteni eticheta TAINT_PROPRIETARY_MODULE și nu va putea accesa componente ale nucleului disponibile doar pentru module sub licența GPL, chiar dacă modul a importat anterior simboluri din categoria „gplonly”. Blocarea inversă (export doar EXPORT_SYMBOL_GPL în modulele care au importat EXPORT_SYMBOL_GPL), care ar putea interfera cu funcționarea driverelor proprietare, nu a fost implementată (doar flag-ul modulului proprietar este moștenit, dar nu și legăturile GPL).
    • Adăugat suport pentru mecanismul kcompactd pentru împachetarea proactivă a paginilor de memorie în fundal, permițând creșterea numărului de pagini mari de memorie Disponibile pentru nucleu. Estimările preliminare arată că ambalarea în fundal, cu costuri minime de suprasarcină, permite reducerea latențelor în alocarea paginilor mari de memorie (huge-page) de 70-80 de ori în comparație cu mecanismul anterior de ambalare, activat la nevoie (on-demand). Pentru a stabili limitele fragmentării externe pe care va asigura kcompactd, a fost adăugat sysctl vm.compaction_proactiveness.
    • Adăugat suport pentru comprimarea imaginii nucleului utilizând algoritmul Zstandard (zstd).
    • Pentru sistemele x86 a fost implementat suportul pentru instrucția procesorului FSGSBASE, permițând citirea și modificarea conținutului registrului FS/GS din spațiul utilizatorului. În nucleu, FSGSBASE este folosit pentru a accelera operațiunile de schimbare a contextului prin excluderea operațiunilor inutile de scriere MSR pentru GSBASE, iar în spațiul utilizatorului permite evitarea apelurilor sistemului pentru a modifica FS/GS.
    • Adăugat parametrul „allow_writes”, care permite interzicerea modificării registrilor MSR ai procesorului din spațiul utilizatorului și restricționează accesul la conținutul acestor registre prin operațiuni de citire, deoarece modificarea MSR poate duce la probleme. În prezent, scrierea nu este interzisă, iar modificarea MSR este reflectată în jurnal, dar în viitor se intenționează trecerea accesului implicit în modul doar pentru citire.
    • În interfața de intrare/ieșire asincronă io_uring a fost adăugată suportul complet pentru operațiuni asincrone de citire tamponizată, fără a necesita implicarea firelor nucleului. Suportul pentru scriere este așteptat în următoarea versiune.
    • În planificatorul de intrare/ieșire deadline a fost implementat planificarea având în vedere lățimea de bandă, permițând a lua decizii corecte pe sistemele asimetrice, cum ar fi sistemele ARM bazate pe arhitecturile DynamIQ și big.LITTLE, care combină în același cip nucleele CPU puternice și cele mai puțin performante, eficiente din punct de vedere energetic. În special, noul mod permite evitarea necorelărilor în planificare, când un nucleu CPU lent nu are resursele necesare pentru a finaliza o sarcină în termenul alocat.
    • Modelul de consum de energie în nucleu (framework-ul Energy Model) acum descrie nu doar comportamentul consumului de energie al CPU-ului, ci și acoperă dispozitivele periferice.
    • A fost implementată apelul de sistem close_range(), care permite unui proces să închidă simultan întreaga gamă de descriptorii de fișiere deschiși.
    • Din implementarea consolei text și a driver-ului fbcon a fost eliminat codul, care asigură posibilitatea derulării textului înapoi (CONFIG_VGACON_SOFT_SCROLLBACK) cu mai mult decât volumul memoriei video în modul text VGA.
    • Reformulat un algoritm de alocare a priorităților pentru firele de execuție din nucleu. Noua variantă asigură o coerență mai bună în toate subsistemele nucleului în ceea ce privește alocarea priorităților pentru sarcinile în timp real.
    • A fost adăugat sysctl sched_uclamp_util_min_rt_default pentru a gestiona parametrii de forțare a frecvenței CPU pentru sarcinile în timp real (de exemplu, se poate modifica comportamentul în timpul execuției sarcinilor în timp real pentru economisirea energiei după trecerea la sursa de alimentare de la baterie sau pe sisteme mobile).
    • A fost realizată pregătirea pentru implementarea suportului pentru tehnologia Transparent Huge Pages în cache-ul de pagini.
    • În mecanismul fanotify au fost implementate noi flag-uri FAN_REPORT_NAME și FAN_REPORT_DIR_FID pentru a transmite informații despre numele părinte și identificatorul unic FID în cazul evenimentelor de creare, ștergere sau mutare a elementelor din director și a obiectelor nesăturate de directoare.
    • Pentru cgroups a fost implementat un nou controler de alocare a memoriei slab (slab memory controller), care se remarcă prin transferul contabilizării slab de la nivelul paginilor de memorie la nivelul obiectelor nucleului, ceea ce permite partajarea paginilor slab în diferite cgroup-uri, în loc de alocarea de cache-uri slab separate pentru fiecare cgroup. Abordarea propusă permite îmbunătățirea eficienței utilizării slab, reducând dimensiunea memoriei utilizate pentru slab cu 30-45%, diminuând semnificativ consumul total de memorie al nucleului și reducând fragmentarea memoriei.
    • În subsistemul audio ALSA și stiva USB, conform recent adoptate recomandărilor privind utilizarea terminologiei inclusive în nucleul Linux, a fost realizată o curățare a termenilor nepolitically corect. Codul a fost curățat de utilizarea cuvintelor „slave”, „master”, „blacklist” și „whitelist”.
  • Virtualizare și securitate
    • La compilarea nucleului utilizând compilatorul Clang a apărut a fost posibilă configurarea (CONFIG_INIT_STACK_ALL_ZERO) pentru inițializarea automată cu valoarea zero a tuturor variabilelor stocate în stivă (la compilare se specifică „-ftrivial-auto-var-init=zero”).
    • În subsistemul seccomp, când utilizați modul de control al proceselor în spațiul utilizatorului, a fost adăugată posibilitatea substituțiile în procesul monitorizat al descriptatorilor de fișiere pentru a emula complet apelurile de sistem care duc la crearea descriptatorilor de fișiere. Funcționalitatea este solicitată în sistemele de containere izolate și implementările sandbox pentru Chrome.
    • Pentru arhitecturile xtensa și csky a fost adăugată suportul pentru restricționarea apelurilor de sistem prin intermediul subsistemului seccomp. Pentru xtensa, a fost implementat suplimentar suportul pentru mecanismul de audit.
    • Adăugat noua flag de capacitate CAP_CHECKPOINT_RESTORE, care permite accesul la funcțiile legate de suspendarea și restaurarea stării proceselor fără a oferi privilegii suplimentare.
    • În GCC 11 au fost implementate toate capacitățile necesare pentru
      instrumentul de depanare KCSAN (Kernel Concurrency Sanitizer), destinat identificării dinamice a stărilor de competiție în interiorul nucleului. Astfel, KCSAN poate fi utilizat acum cu nuclee compilate în GCC.
    • Pentru AMD Zen și modelele de CPU mai recente, a fost adăugată suportul tehnologiei P2PDMA, care permite utilizarea DMA pentru transferul direct de date între memoria a două dispozitive conectate la magistrala PCI.
    • În dm-crypt a fost adăugat un mod care permite reducerea întârzierilor prin executarea procesării criptografice a datelor fără utilizarea cozilor de lucru. Modificarea respectivă este, de asemenea, necesară pentru a funcționa corect cu dispozitivele de stocare zonate dispozitive bloc (dispozitive cu zone care trebuie înregistrate secvențial cu actualizarea întregului grup de blocuri). S-au realizat lucrări pentru a crește lățimea de bandă și a reduce întârzierile în dm-crypt.
    • Codul pentru suportul sistemelor gazdă de 32 de biți care funcționează în modul de paravirtualizare sub controlul hypervisorului Xen a fost eliminat. Utilizatorii acestor sisteme ar trebui să treacă la utilizarea nucleelor de 64 de biți în mediile gazdă sau să utilizeze pentru rularea mediilor, în locul paravirtualizării (PV), modurile de virtualizare completă (HVM) sau combinată (PVH).
  • Subsistemul de disc, I/O și sistemele de fișiere
    • În sistemul de fișiere Btrfs, a fost implementată opțiunea de montare „rescue”, care unifică accesul la toate celelalte opțiuni pentru recuperare. A fost eliminat suportul pentru opțiunile „alloc_start” și „subvolrootid”, fiind declarat Depășit opțiunea „inode_cache”. S-au realizat optimizări de performanță, accelerând semnificativ executarea operațiunilor fsync(). Adăugat posibilitatea de a utiliza tipuri alternative de checksum-uri, diferite de CRC32c.
    • Adăugat posibilitatea de a utiliza criptarea inline (Inline Encryption) în sistemele de fișiere ext4 și F2FS, pentru activarea căreia este prevăzută opțiunea de montare „inlinecrypt”. Modul de criptare inline permite utilizarea mecanismelor de criptare încorporate în controlerul de stocare, care realizează criptarea și decriptarea transparentă a inputului/outputului.
    • În XFS a fost asigurat resetarea inode-urilor (flush) în modul complet asincron, fără a bloca procesele în timpul operației de curățare a memoriei. A fost rezolvată o problemă de lungă durată cu cotele, din cauza căreia avertizările referitoare la depășirea limitei moi și restricțiile asupra numărului de inode-uri erau urmărite incorect. A fost unificată implementarea suportului DAX pentru ext4 și xfs.
    • În Ext4 a fost implementată încărcarea anticipată a hărților de distribuție a blocurilor. Împreună cu restricția de scanare a grupurilor neinițializate, optimizarea a redus timpul de montare a partițiilor foarte mari.
    • În F2FS adăugat ioctl F2FS_IOC_SEC_TRIM_FILE, care permite utilizarea comenzilor TRIM/discard pentru resetarea fizică a datelor specificate în fișier, de exemplu, pentru ștergerea cheilor de acces fără a lăsa date reziduale pe stocare.
      În F2FS, de asemenea adăugat a fost adăugat un nou modul de colectare a gunoiului GC_URGENT_LOW, care funcționează mai agresiv prin excluderea anumitor verificări ale stării idle înainte de activarea colectorului de gunoi.
    • În bcache, dimensiunea bucket_size pentru extenti a fost mărită de la 16 la 32 biți, în cadrul pregătirilor pentru a permite aplicarea pentru cache-ul dispozitivelor zonate.
    • În subsistemul SCSI a fost adăugată posibilitatea de a utiliza criptarea inline bazată pe uneltele de criptare hardware încorporate, furnizate de controlerele UFS (Universal Flash Storage).
    • A fost adăugat un nou parametru de linie de comandă a nucleului „debugfs”, care permite gestionarea disponibilității sistemului de fișiere pseudo-omonim.
    • În clientul NFSv4.2, a fost asigurată suportul pentru atributele extinse ale fișierelor (xattr).
    • În dm-dust adăugat interfața pentru a lista toate blocurile defecte detectate deodată pe disc („dmsetup message dust1 0 listbadblocks”).
    • Pentru md/raid5 a fost adăugat parametrul /sys/block/md1/md/stripe_size pentru a configura dimensiunea blocului STRIPE.
    • Pentru dispozitivele de stocare NVMe a fost adăugată Asistență pentru echipe de zonare a stocării (ZNS, NVM Express Zoned Namespace), care permite împărțirea spațiului de stocare în zone, formând grupuri de blocuri pentru o gestionare mai completă a plasării datelor pe dispozitivul de stocare.
  • Subsystema de rețea
    • În Netfilter a fost adăugată posibilitatea de a respinge pachete în etapa anterioară verificării rutării (expresia REJECT poate fi folosită nu doar în lanțurile INPUT, FORWARD și OUTPUT, ci și în etapa PREROUTING pentru icmp și tcp).
    • În nftables a fost adăugată posibilitatea de auditare a evenimentelor legate de modificarea configurării.
    • În nftables în API netlink a fost adăugată sprijin pentru lanțuri anonime, al căror nume este atribuit dinamic de nucleu. Atunci când regula asociată cu lanțul anonim este ștearsă, lanțul în sine este de asemenea șters automat.
    • În BPF a fost adăugat suport pentru iteratori pentru iterarea, filtrarea și modificarea elementelor din tablouri asociative (map) fără a copia datele în spațiul utilizatorului. Iteratoarele pot fi utilizate pentru socket-uri TCP și UDP, permițând programelor BPF să parcurgă listele de socket-uri deschise și să extragă informațiile necesare.
    • A fost adăugat un nou tip de program BPF BPF_PROG_TYPE_SK_LOOKUP, care este executat în momentul în care nucleul caută un socket ascultător adecvat pentru o conexiune entranta. Printr-un asemenea program BPF se pot crea gestionari care decid cu care socket ar trebui asociată conexiunea, fără a fi restricționate de apelul de sistem bind(). De exemplu, se poate organiza asocierea unui socket cu un interval de adrese sau porturi. De asemenea, în bpf_setsockopt() a fost adăugat suport pentru flag-ul SO_KEEPALIVE și s-a realizat posibilitatea de a stabili gestionari BPF_CGROUP_INET_SOCK_RELEASE, care sunt apelate la eliberarea socket-ului.
    • A fost implementat suport pentru protocolul PRP (Protocol de Redundanță Paralel), care permite realizarea unei comutări transparente pentru aplicații pe baza Ethernet, în cazul în care oricare dintre componentele rețelei eșuează.
    • În stivă mac80211 a fost adăugată sprijin pentru negocierea pe patru etape a canalului WPA/WPA2-PSK în modul punct de acces.
    • A fost adăugată posibilitatea de a comuta planificatorul qdisc (disciplina de coadă) pentru a utiliza în mod implicit algoritmul de gestionare a cozilor de rețea FQ-PIE (Flow Queue PIE), destinat să reducă impactul negativ al tamponării intermediare a pachetelor pe echipamentele de rețea de margine (bufferbloat) în rețelele cu modemuri cu cablu.
    • Au fost adăugate noi funcționalități în MPTCP (MultiPath TCP), extensii ale 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 la adrese IP diferite. A fost adăugată suportul pentru syn cookie, DATA_FIN, auto-configurarea bufferelor, diagnostica socketurilor și utilizarea flagurilor REUSEADDR, REUSEPORT și V6ONLY în setsockopt.
    • Pentru tabelele virtuale de rutare VRF (Virtual Routing and Forwarding), care permit organizarea funcționării mai multor domenii de rutare pe un singur sistem, a fost implementat modul „strict”. În acest mod, tabela virtuală poate fi asociată doar cu tabela de rutare care nu este utilizată în alte tabele virtuale.
    • În driverul wireless ath11k a fost adăugată suport pentru frecvența de 6GHz și scanarea spectrală.
  • Echipament
    • A fost eliminat codul pentru suportul arhitecturii UniCore, dezvoltată în centrul de microprocesoare al Universității din Beijing și inclusă în nucleul Linux în 2011. Această arhitectură este fără suport din 2014 și nu are suport în GCC.
    • Pentru arhitectura RISC-V a fost implementat suportul pentru kcov (interfața debugfs pentru analiza acoperirii codului nucleului), kmemleak (sistemul de detectare a scurgerilor de memorie), protecția stivei, marcările de salt și operațiile tickless (multitasking independent de semnalele temporizatorului).
    • Pentru arhitectura PowerPC a fost implementat suport pentru cozi pentru spinlock, ceea ce a permis creșterea semnificativă a performanței în situațiile de conflict al blocărilor.
    • Pentru arhitecturile ARM și ARM64 a fost activat, în mod implicit, mecanismul de reglare a frecvenței procesorului schedutil (cpufreq governor), care pentru a lua decizii privind modificarea frecvenței utilizează direct informațiile de la programatorul de sarcini și poate apela imediat driverele cpufreq pentru ajustarea operativă a frecvenței, adaptând instantaneu parametrii de funcționare ai CPU-ului la sarcina actuală.
    • În driverul DRM i915 pentru plăcile grafice Intel a fost inclus suportul pentru cipurile bazate pe microarhitectura Rocket Lake și a fost adăugat suport inițial pentru plăcile discrete Intel Xe DG1.
    • În driverul amdgpu a fost adăugat suport inițial pentru GPU-ul AMD Navi 21 (Navy Flounder) și Navi 22 (Sienna Cichlid). A fost adăugat suportul pentru motoarele de accelerare a codării și decodării video UVD/VCE pentru GPU-urile Southern Islands (Radeon HD 7000).
      A fost adăugat o proprietate pentru rotirea afișării la 90, 180 sau 270 de grade.

      Este interesant că driverul pentru GPU-ul AMD este cel mai mare driver din kernel — are aproximativ 2,71 milioane de linii de cod, ceea ce reprezintă aproximativ 10% din dimensiunea totală a kernel-ului (27,81 milioane de linii). Din acest total, 1,79 milioane de linii sunt dedicate fișierelor de antet generate automat cu date pentru registrele GPU, iar codul C reprezintă 366 de mii de linii (pentru comparație, driverul Intel i915 conține 209 mii de linii, iar Nouveau — 149 mii).

    • În driverul Nouveau a fost adăugată suport pentru verificarea integrității pe cadre prin CRC (Controale de Redundanță Ciclică) în motoarele grafice ale GPU NVIDIA. Implementarea se bazează pe documentația furnizată de NVIDIA.
    • Au fost adăugate drivere pentru panouri LCD: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 și Xingbangda XBD599.
    • În subsistemul audio ALSA a fost implementat suportul pentru Intel Silent Stream (modul de menținere constantă a puterii pentru dispozitivele HDMI externe pentru a exclude întârzierea la începutul redării) și un nou dispozitiv pentru controlul iluminării butoanelor de activare a microfonului și de dezactivare a sunetului, precum și adăugarea suportului pentru noul hardware, inclusiv controlerul Loongson 7A1000.
    • A fost adăugat suport pentru plăci ARM, dispozitive și platforme: Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1, ASUS Google Nexus 7, Acer Iconia Tab A500, Qualcomm Snapdragon SDM630 (utilizat în Sony Xperia 10, 10 Plus, XA2, XA2 Plus și XA2 Ultra), Jetson Xavier NX, Amlogic WeTek Core2, Aspeed EthanolX, cinci plăci noi bazate pe NXP i.MX6, MikroTik RouterBoard 3011, Xiaomi Libra, Microsoft Lumia 950, Sony Xperia Z5, MStar, Microchip Sparx5, Intel Keem Bay, Amazon Alpine v3, Renesas RZ/G2H.

În același timp, fundația latino-americană a software-ului liber a formulat
o variantă de nucleu 5.9 complet liber — Linux-libre 5.9-gnu, curățat de elemente de firmware și drivere care conțin componente ne-liberte sau segmente de cod, domeniul de aplicare al cărora este restricționat de către producător. În noua versiune a fost dezactivată încărcarea blob-urilor în driverele pentru WiFi rtw8821c și SoC MediaTek mt8183. A fost actualizat codul de curățare a blob-urilor în driverele și subsistemele Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) și touchscreen-uri x86.

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