După două luni de dezvoltare, Linus Torvalds lansarea nucleului . Dintre cele mai notabile schimbări: integrarea interfeței VPN WireGuard, suport pentru USB4, spații de nume pentru timp, posibilitatea de a crea handleri pentru suprasarcina TCP cu ajutorul BPF, suport inițial pentru MultiPath TCP, rezolvarea problemei din nucleu legată de anul 2038, mecanismul „bootconfig”, sistemul de fișiere ZoneFS.
În noua versiune au fost incluse 13702 corecții de la 1810 dezvoltatori,
dimensiunea patch-ului fiind de 40 MB (modificările au afectat 11577 de fișiere, au fost adăugate 610012 linii de cod,
s-au șters 294828 de linii). Aproximativ 45% din toate modificările prezente în 5.6
sunt legate de driverele de dispozitive, aproximativ 15% din modificări au
sunt legate de actualizarea codului specific arhitecturilor hardware, 12%
sunt legate de stiva de rețea, 4% – de sistemele de fișiere și 3% de internele
interne ale nucleului.
:
- Subsystema de rețea
- implementarea interfeței VPN , care este realizată pe baza metodelor moderne de criptare (ChaCha20, Poly1305, Curve25519, BLAKE2s), este ușor de utilizat, fără complicări, s-a dovedit a fi eficient în mai multe implementări majore și oferă o performanță foarte ridicată (de 3,9 ori mai bun decât OpenVPN în ceea ce privește lățimea de bandă). În WireGuard se aplică conceptul de rutare pe baza cheilor de criptare, care implică asocierea unui cheie privată pentru fiecare interfață de rețea și utilizarea cheilor publice pentru a face legătura. Schimbul de chei publice pentru stabilirea conexiunii se face similar cu SSH. Primitivele criptografice necesare pentru funcționarea WireGuard din biblioteca în compunerea Crypto API standard și în compunerea nucleului .
- integrarea componentelor necesare pentru suportul MPTCP (MultiPath TCP), extensia protocolului TCP pentru a organiza funcționarea conexiunii TCP cu livrarea pachetelor simultan pe mai multe rute prin intermediul diferitelor interfețe de rețea, asociate cu adrese IP diferite. Pentru aplicațiile de rețea, această conexiune agregată apare ca o conexiune TCP obişnuită, iar întreaga logică de separare a fluxului este realizată de MPTCP. Multipath TCP poate fi utilizat atât pentru extinderea lățimii de bandă, cât și pentru creșterea fiabilității. De exemplu, MPTCP poate fi utilizat pentru organizarea transferului de date pe un smartphone folosind simultan conexiuni WiFi și 4G sau pentru reducerea costurilor prin conectarea unui server folosind mai multe linii ieftine în loc de una scumpă.
- suport pentru disciplina de procesare a coadelor de rețea sch_ets (, IEEE 802.1Qaz), oferind posibilitatea de a distribui lățimea de bandă între diferitele clase de trafic. Dacă sarcina pe o clasă de trafic specifică este mai mică decât lățimea de bandă acordată, ETS permite altor clase de trafic să utilizeze lățimea de bandă disponibilă (neutilizată). Qdisc sch_ets este configurat ca disciplină PRIO și utilizează clasele de trafic pentru a defini restricții stricte și comune de lățime de bandă. ETS funcționează ca o combinație de discipline și — în prezența unor clase de trafic strict limitate, se folosește PRIO, dar dacă în coada de trafic nu sunt, funcționează ca DRR.
- A fost adăugat un nou tip de programe BPF , permițând implementarea handler-elor funcțiilor nucleului prin BPF. În prezent, această capacitate poate fi utilizată pentru implementarea algoritmilor de control al congestionării TCP sub formă de programe BPF. Ca exemplu programul BPF cu implementarea algoritmului .
- A fost acceptat în nucleu , instrumentele de transfer de la ioctl() la utilizarea . Noua interfață simplifică adăugarea extensiilor, îmbunătățește gestionarea erorilor, permite trimiterea de notificări la schimbarea stării, facilitează interacțiunea între nucleu și spațiul utilizatorului și reduce numărul listelor denumite care trebuie sincronizate.
- A fost adăugată implementarea algoritmului de gestionare a cozilor de rețea FQ-PIE (Flow Queue PIE), destinat să reducă influența negativă a tamponării intermediare a pachetelor pe echipamentele de rețea de frontieră (bufferbloat). FQ-PIE demonstrează o eficiență ridicată atunci când este utilizat în sisteme cu modemuri cablu.
- Subsistemul de disc, I/O și sistemele de fișiere
- Pentru sistemul de fișiere Btrfs implementarea asincronă a operației DISCARD (marcarea blocurilor eliberate care nu mai trebuie stocate fizic). Inițial, operațiile DISCARD erau efectuate sincron, ceea ce putea duce la scăderi de performanță din cauza așteptării finalizării comenzilor corespunzătoare de către stocare. Implementarea asincronă permite să nu aștepți finalizarea DISCARD-ului de către stocare și să execuți această operație în fundal.
- În XFS curățarea codului în care au fost utilizate vechile contoare de timp de 32 de biți (tipul time_t a fost înlocuit cu time64_t), cauzând problema anului 2038. Au fost remediate erorile și deteriorările de memorie care apăreau pe platformele de 32 de biți. Codul a fost reproiectat pentru a lucra cu atributele extinse.
- În sistemul de fișiere ext4 optimizările de performanță legate de gestionarea blocării inode-ului în timpul operațiunilor de citire și scriere. Performanța reîntoarcerii în modul de intrare/ieșire directă (Direct I/O) a fost îmbunătățită. Pentru simplificarea diagnosticării problemelor, s-a asigurat păstrarea primelor și ultimelor coduri de eroare în superblocat.
- În sistemul de fișiere F2FS posibilitatea de a stoca datele în formă comprimată. Pentru un fișier sau un director specific, compresia poate fi activată prin comanda „chattr +c file” sau „chattr +c dir; touch dir/file”. Pentru comprimarea întregului partition, în utilitarul mount se poate folosi opțiunea „-o compress_extension=ext”.
- În cadrul nucleului a fost acceptat sistemul de fișiere , care simplifică lucrul la un nivel joasă cu dispozitivele de stocare zonate. Dispozitivele zonate se referă la dispozitivele pe hard disk-uri magnetice sau NVMe SSD, în care spațiul de stocare este împărțit în zone, grupuri de blocuri sau sectoare, unde este permisă doar adăugarea secvențială a datelor cu actualizarea întregului grup de blocuri. FS ZoneFS a fost dezvoltat de compania Western Digital și leagă fiecare zonă din dispozitiv de un fișier distinct, care poate fi folosit pentru stocarea datelor în mod raw, fără manipulare la nivel de sectoare și blocuri, adică permite aplicațiilor să utilizeze API-ul de fișiere în loc de apelări directe la dispozitivul de bloc prin ioctl.
- În NFS, montarea partition-urilor pe deasupra UDP este dezactivată implicit. A fost adăugată suport pentru capacitatea de copiere directă a fișierelor între servere definită în specificația NFS 4.2. A fost adăugată o nouă opțiune de montare „softreval”, care, în cazul în care serverul dă greș, permite utilizarea valorilor de atribute cached. De exemplu, utilizarea acestei opțiuni după ce serverul devine indisponibil menține posibilitatea de navigare pe căile din partitia NFS și accesarea informațiilor care au fost stocate în cache.
- optimizarea performanței mecanismului fs-verity, utilizat pentru controlul integrității și verificarea autenticității fișierelor. Viteza de citire secvențială a fost îmbunătățită prin utilizarea unui arbore Merkle. Performanța FS_IOC_ENABLE_VERITY a fost optimizată în condițiile absenței datelor în cache (aplicând citirea anticipată a paginilor cu date).
- Virtualizare și securitate
- Funcția de dezactivare a modulului SELinux în timpul funcționării a fost declarată învechită, iar în viitor descărcarea SELinux-ului deja activat va fi interzisă. Pentru a dezactiva SELinux, va fi necesară transmiterea parametrului „selinux=0” în linia de comandă a nucleului.
- suport pentru spațiile de nume temporale (time namespaces), care permit asocierea stării ceasurilor sistemului (CLOCK_REALTIME,
CLOCK_MONOTONIC, CLOCK_BOOTTIME) la un container, utilizând timpul propriu în container și asigurând imutabilitatea măsurătorilor CLOCK_MONOTONIC și CLOCK_BOOTTIME în cazul migrării containerului pe un alt gazdă (luând în considerare timpul de după boot, cu sau fără a ține cont de starea de așteptare). - Pool-ul blocat /dev/random a fost eliminat. Comportamentul /dev/random a fost apropiat de cel al /dev/urandom în ceea ce privește prevenirea blocării entropiei după inițializarea pool-ului.
- În nucleul principal a fost inclus un driver care permite sistemelor gazdă, care rulează sub VirtualBox, să monteze directoare exportate de mediu (VirtualBox Shared Folder).
- În subsistemul BPF a fost adăugat un set de patch-uri (), în condițiile aplicării mecanismului Retpoline pentru protecția împotriva atacurilor de tip Spectre V2, permițând creșterea eficienței apelurilor programelor BPF la apariția evenimentelor corelate (de exemplu, permite accelerarea apelului handler-elor XDP la primirea unui pachet de rețea).
- A fost adăugat un driver pentru suportul mediilor TEE (Trusted Execution Environment) integrate în APU AMD.
- Memorie și servicii de sistem
- În BPF a fost adăugat suport pentru funcții globale. Dezvoltarea este realizată în cadrul inițiativei de adăugare a suportului pentru biblioteci de funcții, care pot fi conectate în programele BPF. Următorul pas va fi suportul pentru extensii dinamice, permițând încărcarea funcțiilor globale, inclusiv pentru înlocuirea funcțiilor globale existente în timpul utilizării acestora. În subsistemul BPF a fost de asemenea adăugat suport pentru o variantă a operației map (folosită pentru stocarea datelor permanente), care suportă execuția în mod packet.
- dispozitivul «cpu_cooling» permite răcirea CPU-ului suprasolicitat prin trecerea acestuia în stare de inactivitate (idle) pentru perioade scurte de timp.
- A fost adăugat apelul de sistem , oferind un set suplimentar de flaguri pentru limitarea permisiunilor căii fișierului (interdicția intersecției punctelor de montare, linkurilor simbolice, linkurilor magice (\/proc\/PID\/fd), componentelor «..\/»).
- Pentru sisteme heterogene bazate pe arhitectura big.LITTLE, care combină în aceeași cipuri nuclee CPU puternice și mai puțin eficiente energetic, în timpul efectuării sarcinilor în timp real este asigurat setarea parametrului uclamp_min ( în nucleul 5.3 mecanismul de consolidare a sarcinii). Parametrul specificat garantează că sarcina va fi plasată de planificator pe o nuclee CPU cu suficientă performanță.
- Nucleul a fost scutit de . Au fost înlocuite ultimele manipulatoare rămase, în care pentru contorul timpului epocal s-a utilizat un tip de 32 de biți (int semnat) time_t, care, având în vedere raportul din 1970, trebuie să se umple în anul 2038.
- Continuarea îmbunătățirii interfeței de intrare/ieșire asincronă , în care suport pentru noi operații: IORING_OP_FALLOCATE (rezervarea zonelor goale), IORING_OP_OPENAT,
IORING_OP_OPENAT2,
IORING_OP_CLOSE (deschiderea și închiderea fișierelor),
IORING_OP_FILES_UPDATE (adăugarea și eliminarea fișierelor din lista de acces rapid),
IORING_OP_STATX (solicitarea informațiilor despre fișier),
IORING_OP_READ,
IORING_OP_WRITE (analoge simplificate ale IORING_OP_READV și IORING_OP_WRITEV),
IORING_OP_FADVISE,
IORING_OP_MADVISE (variantele asincrone ale apelurilor posix_fadvise și madvise), IORING_OP_SEND,
IORING_OP_RECV (trimiterea și primirea datelor de rețea),
IORING_OP_EPOLL_CTL (efectuarea operațiunilor asupra descriptorilor de fișiere epoll). - A fost adăugat apelul de sistem , oferind procesului capacitatea de a extrage dintr-un alt proces un descriptor de fișier deschis.
- mecanismul «bootconfig», care permite, pe lângă opțiunile liniei de comandă, definirea parametrilor de funcționare ai nucleului printr-un fișier de configurare. Pentru a adăuga astfel de fișiere în imaginea initramfs, a fost propus utilitarul bootconfig. Această posibilitate poate fi utilizată, de exemplu, pentru configurarea kprobes în timpul încărcării.
- mecanismul de așteptare pentru înregistrarea și citirea datelor în canale fără nume (pipe). Modificarea a permis accelerarea executării unor sarcini, cum ar fi compilarea paralelă a proiectelor mari. Totuși, optimizarea poate conduce la o stare de cursă în GNU make din cauza unei erori în versiunea 4.2.1, care a fost remediată în versiunea 4.3.
- În prctl() a fost adăugat un flag PR_SET_IO_FLUSHER, care poate fi folosit pentru a marca procesele care se ocupă cu eliberarea memoriei, pentru care nu ar trebui aplicate constrângeri în situația de insuficiență de memorie în sistem.
- Pe baza sistemului de distribuție a memoriei ION utilizat în Android, a fost realizat un subsistem , care permite gestionarea alocării buffer-elor DMA pentru partajarea zonelor de memorie între drivere, aplicații și diverse subsisteme.
- Arhitecturi hardware
- A fost adăugată suportul pentru extensia E0PD, apărută în ARMv8.5, care permite implementarea protecției împotriva atacurilor legate de execuția speculativă a instrucțiunilor în CPU. Protecția bazată pe E0PD implică cheltuieli mai mici decât protecția KPTI (Kernel Page Table Isolation).
- Pentru sistemele bazate pe arhitectura ARMv8.5 a fost adăugată suportul pentru instrucțiunea RNG, care oferă acces la generatorul hardware de numere pseudo-aleatoare. În nucleu, instrucțiunea RNG este utilizată pentru formarea entropiei la inițializarea generatorului de numere pseudo-aleatoare furnizat de nucleu.
- A fost eliminată suportul pentru extensiile MPX (Memory Protection Extensions), adăugate în nucleu și care permiteau organizarea verificării pointerilor pentru respectarea limitelor zonelor de memorie. Această tehnologie nu a fost utilizată pe scară largă în compilatoare și a fost eliminată din GCC.
- Pentru arhitectura RISC-V a fost implementat suportul pentru instrumentul de depanare KASan (Kernel address sanitizer), care asigură identificarea erorilor în gestionarea memoriei.
- Echipament
- A fost implementat suportul pentru specificația , care se bazează pe protocolul Thunderbolt 3 și oferă o lățime de bandă de până la 40 Gbit/s, păstrând compatibilitatea inversă cu USB 2.0 și USB 3.2. Analog cu interfața USB 4.0 permite tunelarea diverselor protocoale pe un singur cablu cu conectorul , inclusiv PCIe, Display Port și USB 3.x, precum și implementări software ale protocoalelor, de exemplu, pentru organizarea legăturilor de rețea între gazde. Implementarea se bazează pe driverul Thunderbolt deja inclus în kernelul Linux și îl adaptează pentru a funcționa cu gazde și dispozitive compatibile cu USB4. Modificările includ, de asemenea, adăugarea suportului pentru dispozitive Thunderbolt 3 în implementarea software a Managerului de Conexiuni, care este responsabil pentru crearea tunelurilor pentru conectarea mai multor dispozitive printr-un singur conector.
- În driverul amdgpu suport inițial pentru tehnologia de protecție a copiilor HDCP 2.x (High-bandwidth Digital Content Protection). A fost adăugat suport pentru cipul ASIC AMD Pollock, bazat pe Raven 2. A fost implementată funcția de resetare a GPU-ului pentru familiile Renoir și Navi.
- În driverul DRM pentru plăcile grafice Intel suportul DSI VDSC pentru cipuri bazate pe microarhitectura Ice Lake și Tiger Lake, a fost implementat LMEM mmap (memoria locală a dispozitivului), a fost îmbunătățit parsarea VBT (Video BIOS Table), a fost implementat suportul HDCP 2.2 pentru cipuri Coffee Lake.
- S-a continuat munca de unificare a codului driverului amdkfd (pentru GPU discrete, precum Fiji, Tonga, Polaris) cu driverul amdgpu.
- Driverul k10temp a fost refăcut, adăugând suport pentru ieșirea parametrilor tensiunii și curentului pentru CPU AMD Zen, precum și date extinse de la senzorii de temperatură folosiți în CPU Zen și Zen 2.
- În driverul nouveau suportul modului de boot verificat pentru GPU NVIDIA bazat pe microarhitectura Turing (GeForce RTX 2000), ceea ce a permis activarea suportului pentru accelerarea 3D pentru aceste plăci (se cere încărcarea firmware-urilor oficiale cu semnătură digitală NVIDIA). A fost adăugat suport pentru motorul grafic TU10x. Problemele cu HD Audio au fost rezolvate.
- A fost adăugat suport pentru comprimarea datelor în timpul transmisiei prin DisplayPort MST (Multi-Stream Transport).
- A fost adăugat un nou driver „” pentru cipurile wireless Qualcomm cu suport pentru 802.11ax.
Driverul se bazează pe stiva mac80211 și suportă moduri de punct de acces, stație de lucru și nod de rețea Mesh. - Prin sysfs, accesul la cititorii senzorilor de temperatură utilizați pe hard disk-urile moderne și SSD-uri a fost oferit.
- modificări semnificative în sistemul de sunet ALSA, vizând eliminarea codului din (abandonarea utilizării tipului de 32 de biți time_t în interfețele snd_pcm_mmap_status și snd_pcm_mmap_control). A fost adăugat suport pentru noi codec-uri audio
Qualcomm WCD9340/WCD9341, Realtek RT700, RT711, RT715, RT1308, Ingenic JZ4770. - drivere pentru panouri LCD Logic PD 28, Jimax8729d MIPI-DSI, igenic JZ4770, Sony acx424AKP, Leadtek LTK500HD1829, Xinpeng XPP055C272, AUO B116XAK01, GiantPlus GPM940B0,
BOE NV140FHM-N49,
Satoz SAT050AT40H12R2,
Sharp LS020B1DD01D. - suport pentru platforme ARM și platforme Gen1 Amazon Echo (bazat pe OMAP3630), Samsung Galaxy S III mini (GT-I8190), Allwinner Emlid Neutis, Libre Computer ALL-H3-IT, PineH64 Model B, Aibretech Amlogic GX PC,
Armada SolidRun Clearfog GTR, NXPGateworks GW59xx,
cititor de cărți electronice Tolino Shine 3,
Embedded Artists COM (i.MX7ULP), SolidRun Clearfog CX/ITX și HoneyComb (LX2160A), Google Coral Edge TPU (i.MX8MQ),
Rockchip Radxa Dalang Carrier, Radxa Rock Pi N10, VMARC RK3399Pro SOM
ST Ericsson HREF520, Inforce 6640, SC7180 IDP, Atmel/Microchip AM9X60 (SoC ARM926, Kizboxmini), ST stm32mp15, AM3703/AM3715/DM3725, ST Ericsson ab8505, Unisoc SC9863A, Qualcomm SC7180. A fost adăugat suport pentru controlerul PCIe utilizat în Raspberry Pi 4.
În același timp, fundația latino-americană a software-ului liber
o variantă — , curățat de elementele firmelor și driverelor care conțin componente sau porțiuni de cod ne-liberale, a căror utilizare este limitată de producător. În noua versiune, a fost dezactivată încărcarea blob-urilor în driverele pentru AMD TEE, ATH11K și Mediatek SCP. Codul de curățare a blob-urilor în driverele și subsistemele AMD PSP, amdgpu și nouveau a fost actualizat.
Sursa: opennet.ro
