Rilascio del kernel Linux 5.6

Dopo due mesi di sviluppo Linus Torvalds presentata rilascio del kernel Linux 5.6. Tra i cambiamenti più notevoli: integrazione dell'interfaccia VPN WireGuard, supporto per USB4, spazi dei nomi per il tempo, possibilità di creare gestori di congestione TCP utilizzando BPF, supporto iniziale per MultiPath TCP, liberazione del kernel dal problema 2038, il meccanismo "bootconfig" , ZonaFS.

La nuova versione ha accettato 13702 correzioni dagli sviluppatori del 1810,
dimensione della patch: 40 MB (le modifiche hanno interessato 11577 file, 610012 righe di codice aggiunte,
294828 righe rimosse). Circa il 45% di tutti quelli presentati in 5.6
le modifiche sono associate ai driver di dispositivo, circa il 15% delle modifiche lo hanno fatto
attitudine all'aggiornamento del codice specifico delle architetture hardware, 12%
associato allo stack di rete, il 4% ai file system e il 3% a quelli interni
sottosistemi del kernel.

Il principale innovazioni:

  • Sottosistema di rete
    • Aggiunto da implementazione di un'interfaccia VPN Gabbia di protezione, che viene implementato sulla base di moderni metodi di crittografia (ChaCha20, Poly1305, Curve25519, BLAKE2s), è facile da usare, privo di complicazioni, si è dimostrato valido in numerose implementazioni di grandi dimensioni e fornisce prestazioni molto elevate (3,9 volte più veloce di OpenVPN in termini di rendimento). WireGuard utilizza il concetto di instradamento della chiave di crittografia, che prevede il collegamento di una chiave privata a ciascuna interfaccia di rete e il suo utilizzo per associare le chiavi pubbliche. Le chiavi pubbliche vengono scambiate per stabilire una connessione in modo simile a SSH. Primitive crittografiche necessarie per il funzionamento di WireGuard erano trasportato dalla biblioteca Zinco come parte dell'API Crypto standard e incluso nel nucleo 5.5.
    • Iniziato integrazione di componenti necessari per supportare MPTCP (MultiPath TCP), un'estensione del protocollo TCP per organizzare il funzionamento di una connessione TCP con la consegna di pacchetti contemporaneamente su più percorsi attraverso diverse interfacce di rete associate a diversi indirizzi IP. Per le applicazioni di rete, tale connessione aggregata assomiglia a una normale connessione TCP e tutta la logica di separazione del flusso viene eseguita da MPTCP. Multipath TCP può essere utilizzato sia per aumentare il throughput che per aumentare l'affidabilità. Ad esempio, MPTCP può essere utilizzato per organizzare la trasmissione dei dati su uno smartphone utilizzando contemporaneamente collegamenti WiFi e 4G o per ridurre i costi collegando un server utilizzando diversi collegamenti economici anziché uno costoso.
    • Aggiunto da supporto per la disciplina di elaborazione delle code di rete sch_ets (Selezione della trasmissione migliorata, IEEE 802.1Qaz), che offre la possibilità di distribuire la larghezza di banda tra diverse classi di traffico. Se il carico su una particolare classe di traffico è inferiore alla larghezza di banda allocata, l'ETS consente ad altre classi di traffico di utilizzare la larghezza di banda disponibile (non utilizzata). Qdisc sch_ets è configurato come disciplina PRIO e utilizza classi di traffico per definire limiti di larghezza di banda rigorosi e condivisi. L'ETS funziona come una combinazione di discipline PRIMA и DRR — se ci sono classi di traffico strettamente limitate si usa PRIO, ma se non c'è traffico in coda funziona come DRR.
    • Aggiunto un nuovo tipo di programmi BPF BPF_PROG_TYPE_STRUCT_OPS, che consente di implementare gestori di funzioni del kernel tramite BPF. Attualmente, questa funzionalità può già essere utilizzata per implementare algoritmi di controllo della congestione TCP sotto forma di programmi BPF. Come esempio proposto Programma BPF con implementazione dell'algoritmo DCTCP.
    • Accettato nel nucleo modifiche, strumenti di traduzione ethtool con ioctl() da usare interfaccia di rete. La nuova interfaccia semplifica l'aggiunta di estensioni, migliora la gestione degli errori, consente l'invio di notifiche quando lo stato cambia, semplifica l'interazione tra il kernel e lo spazio utente e riduce il numero di elenchi nominati che devono essere sincronizzati.
    • Aggiunta implementazione dell'algoritmo di gestione delle code di rete FQ-PIE (Flow Queue PIE), volto a ridurre l'impatto negativo del buffering dei pacchetti intermedi sugli apparati di rete edge (bufferbloat). FQ-PIE dimostra un'elevata efficienza se utilizzato in sistemi con modem via cavo.
  • Sottosistema disco, I/O e file system
    • Per il file system Btrfs aggiunto implementazione asincrona dell'operazione DISCARD (segnalazione dei blocchi liberati che non necessitano più di essere archiviati fisicamente). Inizialmente, le operazioni DISCARD venivano eseguite in modo sincrono, il che poteva portare a un degrado delle prestazioni a causa delle unità in attesa del completamento dei comandi corrispondenti. L'implementazione asincrona consente di non attendere che l'unità completi DISCARD ed eseguire questa operazione in background.
    • Nell'XFS condotto Ripulitura del codice che utilizzava vecchi contatori temporali a 32 bit (il tipo time_t è stato sostituito da time64_t), portando al problema 2038. Risolti errori e danneggiamenti della memoria che si verificavano su piattaforme a 32 bit. Il codice è stato rielaborato per funzionare con attributi estesi.
    • Al file system ext4 introdotto Ottimizzazioni delle prestazioni relative alla gestione del blocco degli inode durante le operazioni di lettura e scrittura. Prestazioni di riscrittura migliorate in modalità I/O diretto. Per semplificare la diagnosi dei problemi, il primo e l'ultimo codice di errore vengono memorizzati nel superblocco.
    • Sul file system F2FS implementato capacità di memorizzare i dati in forma compressa. Per un singolo file o directory, la compressione può essere abilitata utilizzando il comando "chattr +c file" o "chattr +c dir; toccare dir/file". Per comprimere l'intera partizione, è possibile utilizzare l'opzione "-o compress_extension=ext" nell'utilità di montaggio.
    • Il kernel include un file system ZonaFS, che semplifica il lavoro di basso livello con i dispositivi di archiviazione a zone. Per unità a zone si intendono dispositivi su dischi rigidi magnetici o SSD NVMe, lo spazio di archiviazione in cui è suddiviso in zone che compongono gruppi di blocchi o settori, in cui è consentita solo l'aggiunta sequenziale di dati, aggiornando l'intero gruppo di blocchi. FS ZoneFS è stato sviluppato da Western Digital e associa ciascuna zona dell'unità a un file separato che può essere utilizzato per archiviare i dati in modalità grezza senza manipolazione a livello di settore e blocco, ovvero Consente alle applicazioni di utilizzare l'API file invece di accedere direttamente al dispositivo a blocchi utilizzando un ioctl.
    • In NFS, il montaggio delle partizioni su UDP è disabilitato per impostazione predefinita. Aggiunto supporto per la possibilità di copiare direttamente file tra server, definito nella specifica NFS 4.2. Aggiunta una nuova opzione di montaggio "softreval", che consente di utilizzare i valori degli attributi memorizzati nella cache in caso di guasto del server. Ad esempio, quando si specifica questa opzione, dopo che il server non è disponibile, rimane possibile spostarsi lungo i percorsi nella partizione NFS e accedere alle informazioni che si sono depositate nella cache.
    • Eseguito ottimizzazione delle prestazioni del meccanismo fs-verity, utilizzato per monitorare l'integrità e l'autenticazione dei singoli file. Maggiore velocità di lettura sequenziale grazie all'utilizzo di un hash tree Merkle. Le prestazioni di FS_IOC_ENABLE_VERITY sono state ottimizzate quando non sono presenti dati nella cache (è stata applicata la lettura preventiva delle pagine con dati).
  • Virtualizzazione e sicurezza
    • La possibilità di disabilitare il modulo SELinux durante l'esecuzione è stata deprecata e lo scaricamento di un SELinux già attivato sarà proibito in futuro. Per disabilitare SELinux dovrai passare il parametro "selinux=0" sulla riga di comando del kernel.
    • Aggiunto da supporto per spazi dei nomi per il tempo (spazi dei nomi del tempo), che consente di associare lo stato dell'orologio di sistema al contenitore (CLOCK_REALTIME,
      CLOCK_MONOTONIC, CLOCK_BOOTTIME), utilizza il tuo tempo nel contenitore e, durante la migrazione del contenitore su un altro host, assicurati che le letture CLOCK_MONOTONIC e CLOCK_BOOTTIME rimangano invariate (prendi in considerazione il tempo dopo il caricamento, con o senza tener conto della modalità di sospensione ).

    • Il pool di blocco /dev/random è stato rimosso. Il comportamento di /dev/random è simile a /dev/urandom in termini di prevenzione del blocco dell'entropia dopo l'inizializzazione del pool.
    • Il kernel principale include un driver che consente ai sistemi guest che eseguono VirtualBox di montare le directory esportate dall'ambiente host (cartella condivisa VirtualBox).
    • Una serie di patch è stata aggiunta al sottosistema BPF (Dispacciatore BPF), quando si utilizza il meccanismo Retpoline per la protezione dagli attacchi della classe Spectre V2, consente di aumentare l'efficienza della chiamata dei programmi BPF quando si verificano eventi ad essi associati (ad esempio, consente di velocizzare la chiamata dei gestori XDP quando si verifica un arriva il pacchetto di rete).
    • Aggiunto driver per supportare TEE (Trusted Execution Environment) integrato nelle APU AMD.
  • Servizi di memoria e di sistema
    • BPF ha aggiunto il supporto per le funzioni globali. Lo sviluppo viene effettuato come parte di un'iniziativa per aggiungere il supporto per le librerie di funzioni che possono essere incluse nei programmi BPF. Il prossimo passo sarà supportare le estensioni dinamiche che consentano il caricamento delle funzioni globali, inclusa la sostituzione delle funzioni globali esistenti mentre sono in uso. Il sottosistema BPF aggiunge inoltre il supporto per una variante dell'operazione di mappa (utilizzata per archiviare dati persistenti), che supporta l'esecuzione in modalità batch.
    • Aggiunto Il dispositivo “cpu_cooling” consente di raffreddare una CPU surriscaldata ponendola nello stato di inattività per brevi periodi di tempo.
    • Aggiunta chiamata di sistema openat2(), che offre una serie di flag aggiuntivi per limitare la risoluzione del percorso del file (divieto di attraversare punti di montaggio, collegamenti simbolici, collegamenti magici (/proc/PID/fd), componenti “../”).
    • Per i sistemi eterogenei basati sull'architettura big.LITTLE, che combinano core CPU potenti e meno efficienti dal punto di vista energetico in un unico chip, il parametro uclamp_min viene impostato durante l'esecuzione di attività in tempo reale (появившийся nel kernel 5.3 c'è un meccanismo per proteggere il carico). Questo parametro garantisce che l'attività verrà posizionata dallo scheduler su un core della CPU con prestazioni sufficienti.
    • Il kernel viene liberato problemi del 2038. Sostituiti gli ultimi gestori rimasti, che utilizzavano il tipo time_t a 32 bit (signed int) per il contatore temporale epocale, che, tenendo conto del rapporto del 1970, dovrebbe traboccare nel 2038.
    • Miglioramento continuo dell'interfaccia I/O asincrona io_uringin cui purché supporto per nuove operazioni: IORING_OP_FALLOCATE (prenotazione di aree vuote), IORING_OP_OPENAT,
      IORING_OP_OPENAT2,
      IORING_OP_CLOSE (apertura e chiusura di file),
      IORING_OP_FILES_UPDATE (aggiunta e rimozione di file dall'elenco di accesso rapido),
      IORING_OP_STATX (richiesta di informazioni sul file),
      IORING_OP_READ,
      IORING_OP_WRITE (analoghi semplificati di IORING_OP_READV e IORING_OP_WRITEV),
      IORING_OP_FADVISE,
      IORING_OP_MADVISE (varianti asincrone delle chiamate posix_fadvise e madvise), IORING_OP_SEND,
      IORING_OP_RECV (invio e ricezione di dati di rete),
      IORING_OP_EPOLL_CTL (esegue operazioni sui descrittori di file epoll).

    • Aggiunta chiamata di sistema pidfd_getfd(), consentendo a un processo di recuperare un descrittore di file per un file aperto da un altro processo.
    • Implementato il meccanismo “bootconfig”, che consente, oltre alle opzioni della riga di comando, di determinare i parametri del kernel tramite un file di impostazioni. Per aggiungere tali file all'immagine initramfs, viene proposta l'utilità bootconfig. Questa funzionalità può essere utilizzata, ad esempio, per configurare kprobes all'avvio.
    • Ridisegnato un meccanismo per attendere la scrittura e la lettura dei dati in pipe senza nome. Il cambiamento ha permesso di accelerare attività come l'assemblaggio parallelo di grandi progetti. Tuttavia, l'ottimizzazione può portare a una race condition nel make GNU a causa di un bug nella versione 4.2.1, che è stato corretto nella versione 4.3.
    • Aggiunto il flag PR_SET_IO_FLUSHER a prctl(), che può essere utilizzato per contrassegnare i processi liberi di memoria che non dovrebbero essere soggetti a limiti quando la memoria del sistema è insufficiente.
    • Sulla base del sistema di distribuzione della memoria ION utilizzato in Android, è stato implementato un sottosistema cumuli dma-buff, che consente di controllare l'allocazione dei buffer DMA per la condivisione di aree di memoria tra driver, applicazioni e vari sottosistemi.
  • Architetture hardware
    • Aggiunto il supporto per l'estensione E0PD, apparsa in ARMv8.5 e consente la protezione contro gli attacchi legati all'esecuzione speculativa di istruzioni sulla CPU. La protezione basata su E0PD comporta un sovraccarico inferiore rispetto alla protezione KPTI (Kernel Page Table Isolation).
    • Per i sistemi basati sull'architettura ARMv8.5 è stato aggiunto il supporto per l'istruzione RNG, fornendo l'accesso a un generatore di numeri pseudo-casuali hardware. Nel kernel, l'istruzione RNG viene utilizzata per generare entropia durante l'inizializzazione del generatore di numeri pseudocasuali fornito dal kernel.
    • Rimosso il supporto per MPX (Memory Protection Extensions) aggiunto nel kernel 3.19 e consente di organizzare il controllo dei puntatori per garantire che i confini delle aree di memoria siano rispettati. Questa tecnologia non era ampiamente utilizzata nei compilatori ed è stata rimossa da GCC.
    • Per l'architettura RISC-V, è stato implementato il supporto per lo strumento di debug KASan (Kernel Address Sanitizer), che aiuta a identificare gli errori quando si lavora con la memoria.
  • Attrezzatura
    • Supporto delle specifiche implementato 4.0 USB, che si basa sul protocollo Thunderbolt 3 e fornisce un throughput fino a 40 Gbps, pur mantenendo la compatibilità con le versioni precedenti USB 2.0 e USB 3.2. Per analogia con Thunderbolt L'interfaccia USB 4.0 consente di eseguire il tunneling di diversi protocolli su un singolo cavo con un connettore Type-C, inclusi PCIe, Display Port e USB 3.x, nonché implementazioni software di protocolli, ad esempio, per l'organizzazione dei collegamenti di rete tra host. L'implementazione si basa sul driver Thunderbolt già incluso nel kernel Linux e lo adatta per funzionare con host e dispositivi compatibili con USB4. Le modifiche aggiungono anche il supporto per i dispositivi Thunderbolt 3 all'implementazione software del Connection Manager, che è responsabile della creazione di tunnel per il collegamento di più dispositivi tramite un unico connettore.
    • Nel driver amdgpu aggiunto supporto iniziale per la tecnologia di protezione dalla copia HDCP 2.x (High-bandwidth Digital Content Protection). Aggiunto supporto per il chip ASIC AMD Pollock basato su Raven 2. Implementata la possibilità di resettare la GPU per le famiglie Renoir e Navi.
    • Driver DRM per schede video Intel aggiunto Supporto DSI VDSC per chip basati sulla microarchitettura Ice Lake e Tiger Lake, è stato implementato LMEM mmap (memoria locale del dispositivo), l'analisi VBT (Video BIOS Table) è stata migliorata, il supporto HDCP 2.2 è stato implementato per i chip Coffee Lake.
    • È continuato il lavoro sull'unificazione del codice del driver amdkfd (per GPU discrete, come Fiji, Tonga, Polaris) con il driver amdgpu.
    • Il driver k10temp è stato rielaborato, aggiungendo il supporto per la visualizzazione dei parametri di tensione e corrente per le CPU AMD Zen, nonché informazioni ampliate dai sensori di temperatura utilizzati nelle CPU Zen e Zen 2.
    • Nel nuovo driver aggiunto supporto per la modalità di caricamento del firmware verificata per GPU NVIDIA basata sulla microarchitettura Turing (GeForce RTX 2000), che ha permesso di abilitare il supporto per l'accelerazione 3D per queste schede (è richiesto il download del firmware ufficiale con una firma digitale NVIDIA). Aggiunto il supporto per il motore grafico TU10x. I problemi con l'audio HD sono stati risolti.
    • Aggiunto supporto per la compressione dei dati durante la trasmissione tramite DisplayPort MST (Multi-Stream Transport).
    • Aggiunto nuovo driver "at11k» per chip wireless Qualcomm che supportano 802.11ax.
      Il driver è basato sullo stack mac80211 e supporta le modalità punto di accesso, workstation e nodo di rete mesh.

    • Attraverso sysfs, viene fornito l'accesso alle letture leggibili del sensore di temperatura utilizzato sui moderni dischi rigidi e SSD.
    • Ha contribuito modifiche significative al sistema audio ALSA, volte a liberare il codice problemi del 2038 (evitando l'uso del tipo time_t a 32 bit nelle interfacce snd_pcm_mmap_status e snd_pcm_mmap_control). Aggiunto il supporto per nuovi codec audio
      Qualcomm WCD9340/WCD9341, Realtek RT700, RT711, RT715, RT1308, Ingenic JZ4770.

    • Aggiunto driver per pannelli 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.

    • Aggiunto da supporto per schede ARM e piattaforme Gen1 Amazon Echo (basato su 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,
      Lettore di eBook Tolino Shine 3,
      COM incorporato per artisti (i.MX7ULP), SolidRun Clearfog CX/ITX e HoneyComb (LX2160A), Google Coral Edge TPU (i.MX8MQ),
      Portante Rockchip Radxa Dalang, 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. Aggiunto il supporto per il controller PCIe utilizzato in Raspberry Pi 4.

Allo stesso tempo, la Fondazione Latinoamericana per il Software Libero formato
вариант kernel 5.6 completamente gratuito - linux-libre 5.6-gnu, ripulito da elementi firmware e driver contenenti componenti non liberi o sezioni di codice, la cui portata è limitata dal produttore. La nuova versione disabilita il caricamento dei blob nei driver per AMD TEE, ATH11K e Mediatek SCP. Codice di pulizia blob aggiornato nei driver e sottosistemi AMD PSP, amdgpu e nouveau.

Fonte: opennet.ru

Aggiungi un commento