Lansarea nucleului Linux 5.6

După două luni de dezvoltare, Linus Torvalds a prezentat eliberarea nucleului Linux 5.6. Printre cele mai notabile modificări: integrarea interfeței WireGuard VPN, suport pentru USB4, spații de nume pentru timp, capacitatea de a crea handlere de congestie TCP folosind BPF, suport inițial pentru MultiPath TCP, eliminarea nucleului de problema 2038, mecanismul „bootconfig” , ZoneFS.

Noua versiune include 13702 de corecții de la 1810 de dezvoltatori,
dimensiunea patch-ului - 40 MB (modificările au afectat 11577 fișiere, au adăugat 610012 linii de cod,
294828 rânduri eliminate). Aproximativ 45% din toate prezentate în 5.6
modificările sunt legate de driverele de dispozitiv, aproximativ 15% dintre modificări sunt
atitudine față de actualizarea codului specific arhitecturilor hardware, 12%
asociat cu stiva de rețea, 4% cu sisteme de fișiere și 3% cu sisteme interne
subsisteme kernel.

Principalul inovații:

  • Subsistemul de rețea
    • Adăugat implementarea unei interfețe VPN WireGuard, care este implementat pe baza metodelor moderne de criptare (ChaCha20, Poly1305, Curve25519, BLAKE2s), este ușor de utilizat, fără complicații, s-a dovedit într-o serie de implementări mari și oferă performanțe foarte ridicate (de 3,9 ori mai rapid decât OpenVPN în termeni de debit). WireGuard folosește conceptul de rutare a cheilor de criptare, care implică atașarea unei chei private la fiecare interfață de rețea și utilizarea acesteia pentru a lega cheile publice. Cheile publice sunt schimbate pentru a stabili o conexiune într-un mod similar cu SSH. Primitive criptografice necesare pentru ca WireGuard să funcționeze au fost transportat din bibliotecă zinc ca parte a API-ului Crypto standard și inclus în miez 5.5.
    • A început să integrarea componentelor necesare suportării 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 diferite adrese IP. Pentru aplicațiile de rețea, o astfel de conexiune agregată arată ca o conexiune TCP obișnuită și toată logica de separare a fluxului este realizată de MPTCP. Multipath TCP poate fi folosit atât pentru a crește debitul, cât și pentru a crește fiabilitatea. De exemplu, MPTCP poate fi folosit pentru a organiza transmisia de date pe un smartphone folosind conexiuni WiFi și 4G simultan sau pentru a reduce costurile prin conectarea unui server folosind mai multe legături ieftine în loc de una scumpă.
    • Adăugat suport pentru disciplina de procesare a cozii de rețea sch_ets (Selecție îmbunătățită a transmisiei, IEEE 802.1Qaz), care oferă capacitatea de a distribui lățimea de bandă între diferite clase de trafic. Dacă sarcina unei anumite clase de trafic este sub lățimea de bandă alocată, atunci ETS permite altor clase de trafic să utilizeze lățimea de bandă disponibilă (neutilizată). Qdisc sch_ets este configurat ca o disciplină PRIO și utilizează clase de trafic pentru a defini limite stricte și partajate de lățime de bandă. ETS funcționează ca o combinație de discipline PRIO и Reducerea riscului de dezastre — dacă există clase de trafic strict limitate, se folosește PRIO, dar dacă nu există trafic în coadă, funcționează ca DRR.
    • S-a adăugat un nou tip de programe BPF BPF_PROG_TYPE_STRUCT_OPS, care vă permite să implementați handlere de funcții de kernel prin BPF. În prezent, această caracteristică poate fi deja utilizată pentru a implementa algoritmi de control al congestiei TCP sub formă de programe BPF. Ca exemplu propus Program BPF cu implementare algoritm DCTCP.
    • Acceptat în nucleu modificări, instrumente de traducere ettool cu ioctl() de utilizat interfață netlink. Noua interfață facilitează adăugarea de extensii, îmbunătățește gestionarea erorilor, permite trimiterea notificărilor atunci când starea se schimbă, simplifică interacțiunea dintre kernel și spațiul utilizatorului și reduce numărul de liste denumite care trebuie sincronizate.
    • S-a adăugat implementarea algoritmului de gestionare a cozilor de rețea FQ-PIE (Flow Queue PIE), menit să reducă impactul negativ al tamponării pachetelor intermediare asupra echipamentelor de rețea edge (bufferbloat). FQ-PIE demonstrează o eficiență ridicată atunci când este utilizat în sisteme cu modemuri prin cablu.
  • Subsistem de disc, I/O și sisteme de fișiere
    • Pentru sistemul de fișiere Btrfs adăugat implementarea asincronă a operațiunii DISCARD (marcarea blocurilor eliberate care nu mai trebuie să fie stocate fizic). Inițial, operațiunile DISCARD au fost efectuate sincron, ceea ce ar putea duce la degradarea performanței din cauza unităților care așteptau finalizarea comenzilor corespunzătoare. Implementarea asincronă vă permite să nu așteptați ca unitatea să finalizeze DISCARD și să efectuați această operație în fundal.
    • În XFS efectuate Cod de curățare care folosea contoare de timp vechi de 32 de biți (tipul time_t a fost înlocuit cu time64_t), ceea ce a dus la problema 2038. S-au remediat erorile și coruperea memoriei care au apărut pe platformele pe 32 de biți. Codul a fost reproiectat pentru a funcționa cu atribute extinse.
    • La sistemul de fișiere ext4 introdus Optimizări de performanță legate de gestionarea blocării inodului în timpul operațiunilor de citire și scriere. Performanță îmbunătățită de rescriere în modul Direct I/O. Pentru a simplifica diagnosticarea problemelor, primul și ultimul cod de eroare sunt stocate în superbloc.
    • Pe sistemul de fișiere F2FS implementate capacitatea de a stoca date sub formă comprimată. Pentru un fișier sau director individual, compresia poate fi activată folosind comanda „chattr +c file” sau „chattr +c dir; atingeți dir/fișier". Pentru a comprima întreaga partiție, puteți utiliza opțiunea „-o compress_extension=ext” din utilitarul de montare.
    • Nucleul include un sistem de fișiere ZoneFS, care simplifică munca la nivel scăzut cu dispozitivele de stocare zonate. Unitățile zonate înseamnă dispozitive de pe hard disk-uri magnetice sau SSD-uri NVMe, spațiul de stocare în care este împărțit în zone care alcătuiesc grupuri de blocuri sau sectoare, în care este permisă doar adăugarea secvențială de date, actualizându-se întregul grup de blocuri. FS ZoneFS a fost dezvoltat de Western Digital și asociază fiecare zonă din unitate cu un fișier separat care poate fi folosit pentru a stoca date în modul brut fără manipulare la nivel de sector și bloc, de exemplu. Permite aplicațiilor să folosească fișierul API în loc să acceseze direct dispozitivul de blocare folosind un ioctl.
    • În NFS, montarea partițiilor peste UDP este dezactivată implicit. S-a adăugat suport pentru capacitatea de a copia direct fișiere între servere, definit în specificația NFS 4.2. S-a adăugat o nouă opțiune de montare „softreval”, care permite ca valorile atributelor stocate în cache să fie utilizate în cazul unei defecțiuni a serverului. De exemplu, atunci când specificați această opțiune, după ce serverul nu este disponibil, rămâne posibil să vă deplasați pe căile din partiția NFS și să accesați informațiile care s-au instalat în cache.
    • Efectuate optimizarea performanței mecanismului fs-verity, utilizat pentru a monitoriza integritatea și autentificarea fișierelor individuale. Viteză de citire secvențială crescută datorită utilizării unui arbore hash Merkle. Performanța FS_IOC_ENABLE_VERITY a fost optimizată atunci când nu există date în cache (a fost aplicată citirea preventivă a paginilor cu date).
  • Virtualizare și securitate
    • Capacitatea de a dezactiva modulul SELinux în timpul rulării a fost depreciată, iar descărcarea unui SELinux deja activat va fi interzisă în viitor. Pentru a dezactiva SELinux, va trebui să treceți parametrul „selinux=0” pe linia de comandă a nucleului.
    • Adăugat suport pentru spații de nume pentru timp (spații de nume de timp), permițându-vă să legați starea ceasului sistemului de container (CLOCK_REALTIME,
      CLOCK_MONOTONIC, CLOCK_BOOTTIME), folosește-ți propriul timp în container și, atunci când migrați containerul către o altă gazdă, asigurați-vă că citirile CLOCK_MONOTONIC și CLOCK_BOOTTIME rămân neschimbate (luați în considerare timpul de după încărcare, cu sau fără a fi în modul de repaus). ).

    • Pool-ul de blocare /dev/random a fost eliminat. Comportamentul /dev/random este similar cu /dev/urandom în ceea ce privește prevenirea blocării entropiei după inițializarea pool-ului.
    • Nucleul de bază include un driver care permite sistemelor oaspeți care rulează VirtualBox să monteze directoare exportate de mediul gazdă (VirtualBox Shared Folder).
    • Un set de patch-uri a fost adăugat la subsistemul BPF (Dispecer BPF), atunci când utilizați mecanismul Retpoline pentru a vă proteja împotriva atacurilor de clasă Spectre V2, vă permite să creșteți eficiența apelării programelor BPF atunci când apar evenimente asociate cu acestea (de exemplu, face posibilă accelerarea apelării gestionarilor XDP atunci când un sosește pachetul de rețea).
    • S-a adăugat driver pentru a suporta TEE (Trusted Execution Environment) încorporat în APU-urile AMD.
  • Servicii de memorie și sistem
    • BPF a adăugat suport pentru funcții globale. Dezvoltarea este realizată ca parte a unei inițiative de adăugare a suportului pentru biblioteci de funcții care pot fi incluse în programele BPF. Următorul pas va fi sprijinirea extensiilor dinamice care permit încărcarea funcțiilor globale, inclusiv înlocuirea funcțiilor globale existente în timp ce sunt în uz. Subsistemul BPF adaugă, de asemenea, suport pentru o variantă a operațiunii hărții (folosită pentru stocarea datelor persistente), care acceptă execuția în modul batch.
    • adăugat Dispozitivul „cpu_cooling” vă permite să răciți un procesor supraîncălzit punându-l în starea inactivă pentru perioade scurte de timp.
    • A fost adăugat apel de sistem openat2(), care oferă un set de steaguri suplimentare pentru a limita rezoluția căii fișierului (interzicerea încrucișării punctelor de montare, legături simbolice, legături magice (/proc/PID/fd), componente „../”).
    • Pentru sistemele eterogene bazate pe arhitectura big.LITTLE, care combină nuclee CPU puternice și mai puțin eficiente din punct de vedere energetic într-un singur cip, parametrul uclamp_min este setat atunci când se execută sarcini în timp real (a apărut în nucleul 5.3 există un mecanism de asigurare a încărcăturii). Acest parametru asigură că sarcina va fi plasată de planificator pe un nucleu CPU care are performanță suficientă.
    • Nucleul este eliberat de problemele anului 2038. S-au înlocuit ultimii handlere rămași, care au folosit tipul de 32 de biți (int semnat) time_t pentru contorul de timp epocal, care, ținând cont de raportul din 1970, ar trebui să depășească în 2038.
    • Îmbunătățirea continuă a interfeței I/O asincrone io_uringîn care asigurat suport pentru operațiuni noi: 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 (cerere de informații despre fișier),
      IORING_OP_READ,
      IORING_OP_WRITE (analogi simplificați pentru IORING_OP_READV și IORING_OP_WRITEV),
      IORING_OP_FADVISE,
      IORING_OP_MADVISE (variante asincrone ale apelurilor posix_fadvise și madvise), IORING_OP_SEND,
      IORING_OP_RECV (trimiterea și primirea datelor de rețea),
      IORING_OP_EPOLL_CTL (efectuați operațiuni pe descriptori de fișiere epoll).

    • A fost adăugat apel de sistem pidfd_getfd(), permițând unui proces să preia un descriptor de fișier pentru un fișier deschis dintr-un alt proces.
    • Implementat mecanismul „bootconfig”, care permite, pe lângă opțiunile din linia de comandă, să se determine parametrii nucleului printr-un fișier de setări. Pentru a adăuga astfel de fișiere la imaginea initramfs, este propus utilitarul bootconfig. Această caracteristică poate fi utilizată, de exemplu, pentru a configura kprobes la momentul pornirii.
    • Reproiectat un mecanism de așteptare pentru scrierea și citirea datelor în conducte fără nume. Schimbarea a făcut posibilă accelerarea sarcinilor precum asamblarea paralelă a proiectelor mari. Cu toate acestea, optimizarea poate duce la o condiție de cursă în fabricarea GNU din cauza unei erori în versiunea 4.2.1, care a fost remediată în versiunea 4.3.
    • S-a adăugat indicatorul PR_SET_IO_FLUSHER la prctl(), care poate fi folosit pentru a marca procesele fără memorie care nu ar trebui să fie supuse limitelor atunci când sistemul are memorie scăzută.
    • Pe baza sistemului de distribuție a memoriei ION utilizat în Android, a fost implementat un subsistem dma-buf grămezi, care vă permite să controlați alocarea bufferelor DMA pentru partajarea zonelor de memorie între drivere, aplicații și diferite subsisteme.
  • Arhitecturi hardware
    • S-a adăugat suport pentru extensia E0PD, care a apărut în ARMv8.5 și permite protecție împotriva atacurilor legate de execuția speculativă a instrucțiunilor pe procesor. Protecția bazată pe E0PD are ca rezultat o supraîncărcare mai mică decât protecția KPTI (Kernel Page Table Isolation).
    • Pentru sistemele bazate pe arhitectura ARMv8.5, a fost adăugat suport pentru instrucțiunea RNG, oferind acces la un generator hardware de numere pseudoaleatoare. În nucleu, instrucțiunea RNG este utilizată pentru a genera entropie la inițializarea generatorului de numere pseudoaleatoare furnizat de nucleu.
    • S-a eliminat suportul pentru MPX (Extensii de protecție a memoriei) adăugat în kernel 3.19 și vă permite să organizați verificarea indicatorilor pentru a vă asigura că limitele zonelor de memorie sunt respectate. Această tehnologie nu a fost utilizată pe scară largă în compilatoare și a fost eliminată din GCC.
    • Pentru arhitectura RISC-V, a fost implementat suport pentru instrumentul de depanare KASan (Kernel address sanitizer), care ajută la identificarea erorilor atunci când lucrați cu memoria.
  • Оборудование
    • S-a implementat suport pentru specificații USB 4.0, care se bazează pe protocolul Thunderbolt 3 și oferă un debit de până la 40 Gbps, menținând în același timp compatibilitatea cu USB 2.0 și USB 3.2. Prin analogie cu Trăsnet Interfața USB 4.0 vă permite să efectuați un tunel de diferite protocoale printr-un singur cablu cu un conector Tip C, 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 nucleul Linux și îl adaptează pentru a funcționa cu gazde și dispozitive compatibile cu USB4. Modificările adaugă, de asemenea, suport pentru dispozitivele Thunderbolt 3 la implementarea software a Managerului de conexiune, care este responsabil pentru crearea tunelurilor pentru conectarea mai multor dispozitive printr-un singur conector.
    • În driverul amdgpu adăugat suport inițial pentru tehnologia de protecție împotriva copierii HDCP 2.x (High-bandwidth Digital Content Protection). S-a adăugat suport pentru cipul AMD Pollock ASIC bazat pe Raven 2. S-a implementat capacitatea de resetare a GPU-ului pentru familiile Renoir și Navi.
    • Driver DRM pentru plăcile video Intel adăugat Suportul DSI VDSC pentru cipuri bazate pe microarhitectura Ice Lake și Tiger Lake, LMEM mmap (memorie locală a dispozitivului) a fost implementat, analiza VBT (Video BIOS Table) a fost îmbunătățită, suportul HDCP 2.2 a fost implementat pentru cipurile Coffee Lake.
    • Au continuat lucrările de unificare a codului driverului amdkfd (pentru GPU-uri discrete, cum ar fi Fiji, Tonga, Polaris) cu driverul amdgpu.
    • Driverul k10temp a fost reproiectat, adăugând suport pentru afișarea parametrilor de tensiune și curent pentru procesoarele AMD Zen, precum și informații extinse de la senzorii de temperatură utilizați în procesoarele Zen și Zen 2.
    • În driverul nouveau adăugat suport pentru modul de încărcare a firmware-ului verificat pentru GPU-urile NVIDIA bazate pe microarhitectura Turing (GeForce RTX 2000), care a făcut posibilă activarea suportului pentru accelerarea 3D pentru aceste plăci (este necesară descărcarea firmware-ului oficial cu o semnătură digitală NVIDIA). S-a adăugat suport pentru motorul grafic TU10x. Problemele cu HD Audio au fost rezolvate.
    • S-a adăugat suport pentru compresia datelor atunci când sunt transmise prin DisplayPort MST (Multi-Stream Transport).
    • S-a adăugat un driver nou "ath11k» pentru cipurile wireless Qualcomm care acceptă 802.11ax.
      Driverul se bazează pe stiva mac80211 și acceptă modurile punct de acces, stație de lucru și nod de rețea mesh.

    • Prin sysfs, se oferă acces la citirile senzorilor de temperatură lizibile utilizate pe hard disk-uri și SSD-uri moderne.
    • Trimis modificări semnificative ale sistemului de sunet ALSA, menite să elimine codul problemele anului 2038 (evitând utilizarea tipului time_t pe 32 de biți în interfețele snd_pcm_mmap_status și snd_pcm_mmap_control). S-a adăugat suport pentru codecuri audio noi
      Qualcomm WCD9340/WCD9341, Realtek RT700, RT711, RT715, RT1308, Ingenic JZ4770.

    • Adăugat 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.

    • Adăugat suport pentru plăci 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 (ARM926 SoC, Kizboxmini), ST stm32mp15, AM3703/AM3715/DM3725, ST Ericsson ab8505, Unisoc SC9863. S-a adăugat suport pentru controlerul PCIe utilizat în Raspberry Pi 7180.

În același timp, Fundația Latino-Americană pentru Software Liber format
opțiune kernel complet gratuit 5.6 - Linux-libre 5.6-gnu, eliminate de elemente de firmware și drivere care conțin componente sau secțiuni de cod care nu sunt gratuite, al căror domeniu de aplicare este limitat de producător. Noua versiune dezactivează încărcarea blob în driverele pentru AMD TEE, ATH11K și Mediatek SCP. Cod de curățare blob actualizat în driverele și subsistemele AMD PSP, amdgpu și nouveau.

Sursa: opennet.ru

Adauga un comentariu