Rilascio del kernel Linux 5.6

Dopo due mesi di sviluppo, Linus Torvalds ha presentato rilascio del kernel Linux 5.6. Tra le modifiche più significative: integrazione dell'interfaccia VPN WireGuard, supporto USB4, spazi dei nomi per il tempo, possibilità di creazione di gestori di sovraccarico TCP tramite BPF, supporto iniziale per MultiPath TCP, eliminazione del problema dell'anno 2038 dal kernel, meccanismo «bootconfig», FS ZoneFS.

Nella nuova versione sono stati inclusi 13702 correttivi da 1810 sviluppatori,
la dimensione della patch è di 40 MB (le modifiche hanno riguardato 11577 file, sono state aggiunte 610012 righe di codice,
eliminate 294828 righe). Circa il 45% di tutte le modifiche presentate in 5.6
sono legate ai driver di dispositivo, circa il 15% delle modifiche riguardano
è relativo all'aggiornamento del codice specifico per architetture hardware, il 12%
è relativo allo stack di rete, il 4% ai filesystem e il 3% alle implementazioni interne
interni del kernel.

Principali novità:

  • Sottosistema di rete
    • È stata aggiunta realizzazione dell'interfaccia VPN WireGuard, che è basata su metodi di crittografia moderni (ChaCha20, Poly1305, Curve25519, BLAKE2s), semplice da usare, priva di complicazioni, ha dimostrato di funzionare bene in numerose implementazioni di grandi dimensioni e offre prestazioni molto elevate (supera OpenVPN di 3,9 volte in termini di throughput). In WireGuard viene applicata una concezione di instradamento basata su chiavi di crittografia, che implica l'associazione di una chiave privata a ciascuna interfaccia di rete e l'utilizzo per il collegamento delle chiavi pubbliche. Lo scambio di chiavi pubbliche per stabilire una connessione avviene per analogia con SSH. I primitivi crittografici necessari per il funzionamento di WireGuard ci sono stati sono stati trasferiti provengono dalla libreria Zinc nel Crypto API standard e sono inclusi nel nucleo 5.5.
    • È iniziata integrazione dei componenti necessari per supportare MPTCP (MultiPath TCP), un'estensione del protocollo TCP per gestire connessioni TCP con consegna dei pacchetti simultaneamente attraverso più percorsi tramite diverse interfacce di rete associate a indirizzi IP diversi. Per le applicazioni di rete, una connessione aggregata di questo tipo appare come una normale connessione TCP, mentre tutta la logica di suddivisione dei flussi viene gestita da MPTCP. Multipath TCP può essere utilizzato sia per aumentare la larghezza di banda sia per migliorare l'affidabilità. Ad esempio, MPTCP può essere utilizzato per trasferire dati su uno smartphone utilizzando contemporaneamente collegamenti WiFi e 4G oppure per ridurre i costi collegando un server con più collegamenti economici invece di uno costoso.
    • È stata aggiunta supporto della disciplina di gestione delle code di rete sch_ets (Enhanced Transmission Selection, IEEE 802.1Qaz), che fornisce la possibilità di distribuzione della larghezza di banda tra diverse classi di traffico. Se il carico su una determinata classe di traffico è inferiore alla larghezza di banda fornita, 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 i vincoli di larghezza di banda rigorosi e condivisi. ETS funziona come una combinazione di discipline PRIO e DRR — in presenza di classi di traffico rigidamente limitate si utilizza PRIO, ma se in coda non c'è traffico, 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 possibilità può già essere utilizzata per implementare algoritmi di controllo del sovraccarico TCP sotto forma di programmi BPF. Come esempio offerta programma BPF con implementazione dell'algoritmo DCTCP.
    • Nel kernel sono state accolte cambiamenti, che traducono strumenti ethtool da ioctl() all'uso di interfaccia netlink. Il nuovo interfaccia semplifica l'aggiunta di estensioni, migliora la gestione degli errori, consente di inviare notifiche quando lo stato cambia, semplifica l'interazione tra il kernel e lo spazio utente e riduce il numero di elenchi nominati da sincronizzare.
    • Aggiunta l'implementazione dell'algoritmo per la gestione delle code di rete FQ-PIE (Flow Queue PIE), mirato a ridurre l'impatto negativo del buffering intermedio dei pacchetti sulle apparecchiature di rete di confine (bufferbloat). FQ-PIE dimostra alta efficienza quando utilizzato in sistemi con modem via cavo.
  • Sottosistema di disco, input/output e file system
    • Per il file system Btrfs è stata aggiunta implementazione asincrona dell'operazione DISCARD (segnalazione dei blocchi liberati che non devono più essere conservati fisicamente). Inizialmente, le operazioni DISCARD venivano eseguite in modo sincrono, il che poteva portare a una diminuzione delle prestazioni a causa dell'attesa del completamento dei comandi pertinenti da parte dei dischi. L'implementazione asincrona consente di non attendere il completamento del DISCARD da parte del disco e di eseguire l'operazione in background.
    • In XFS è stato svolto pulizia del codice che utilizzava vecchi contatori di tempo a 32 bit (tipo time_t sostituito con time64_t), causando il problema del 2038. Risolti errori e danneggiamenti della memoria che si manifestavano su piattaforme a 32 bit. Ripensato il codice per lavorare con attributi estesi.
    • nel file system ext4 sono stati apportati ottimizzazioni delle prestazioni correlate alla gestione del blocco inode durante le operazioni di lettura e scrittura. Aumentata la prestazione di riscrittura in modalità input/output diretto (Direct I/O). Per semplificare la diagnosi dei problemi è stato garantito il salvataggio nel superblocco dei primi e ultimi codici di errore.
    • Nel file system F2FS è stata implementata la possibilità di memorizzare i dati in forma compressa. Per un singolo file o cartella, la compressione può essere abilitata tramite il comando «chattr +c file» oppure «chattr +c dir; touch dir/file». Per comprimere l'intera partizione, nella utility mount è possibile utilizzare l'opzione «-o compress_extension=ext».
    • È stata adottata la file system ZoneFS, che semplifica il lavoro a basso livello con dispositivi di archiviazione zonati. Per dispositivi di archiviazione zonati si intendono dispositivi a dischi magnetici rigidi o NVMe SSD, il cui spazio di archiviazione è suddiviso in zone che costituiscono gruppi di blocchi o settori, nei quali è consentita solo l'aggiunta sequenziale dei dati con l'aggiornamento dell'intero gruppo di blocchi. Il file system ZoneFS è stato sviluppato da Western Digital e associa ogni zona nel supporto a un file separato, che può essere utilizzato per memorizzare i dati in modalità raw senza manovre a livello di settori e blocchi, ovvero consente alle applicazioni di utilizzare l'API di file invece di accedere direttamente al dispositivo a blocchi tramite ioctl.
    • In NFS il montaggio delle partizioni sopra UDP è disabilitato per impostazione predefinita. Aggiunta la supporto per la specifica funzionalità di copia diretta dei file tra server definita nella specifica NFS 4.2. Aggiunta una nuova opzione di montaggio «softreval», che in caso di fallimento del server consente l'uso di valori di attributi memorizzati nella cache. Ad esempio, specificando questa opzione, dopo l'inaccessibilità del server resta possibile navigare nei percorsi nella partizione NFS e accedere alle informazioni che erano presenti nella cache.
    • Condotta ottimizzazione delle prestazioni del meccanismo fs-verity, utilizzato per il controllo dell'integrità e la verifica dell'autenticità di singoli file. Aumentata la velocità di lettura sequenziale grazie all'utilizzo di un albero hash di Merkle. Ottimizzata la produttività di FS_IOC_ENABLE_VERITY in condizioni di assenza di dati nella cache (applicata lettura preventiva delle pagine con dati).
  • Virtualizzazione e sicurezza
    • È stata dichiarata obsoleta la possibilità di disattivare il modulo SELinux durante l'esecuzione, e in futuro il download di SELinux già attivato sarà vietato. Per disattivare SELinux sarà necessario passare il parametro "selinux=0" nella riga di comando del kernel.
    • È stata aggiunta supporto per gli spazi dei nomi temporali (time namespaces), che consentono di associare allo stato delle ore di sistema (CLOCK_REALTIME,
      CLOCK_MONOTONIC, CLOCK_BOOTTIME) lo stato temporale del container e garantire la coerenza delle misurazioni CLOCK_MONOTONIC e CLOCK_BOOTTIME durante la migrazione del container su un altro host (considerando il tempo dopo l'avvio, con o senza considerazione del sonno).
    • Rimosso il pool bloccato /dev/random. Il comportamento di /dev/random è stato avvicinato a /dev/urandom in termini di prevenzione del blocco dell'entropia dopo l'inizializzazione del pool.
    • È stato incluso nel kernel principale un driver che consente ai sistemi guest che operano sotto VirtualBox di montare le directory esportate dall'ambiente host (VirtualBox Shared Folder).
    • Nel sotto-sistema BPF è stato aggiunto un set di patch (BPF dispatcher), nell'ambito dell'applicazione del meccanismo Retpoline per proteggere contro gli attacchi di tipo Spectre V2, che consente di migliorare l'efficienza della chiamata dei programmi BPF al verificarsi degli eventi a essi legati (ad esempio, consente di accelerare la chiamata dei gestori XDP all'arrivo di un pacchetto di rete).
    • Aggiunto un driver per supportare gli ambienti TEE (Trusted Execution Environment) integrati negli APU AMD.
  • Memoria e servizi di sistema
    • Nel BPF è stato aggiunto il supporto per funzioni globali. Lo sviluppo avviene nell'ambito di un'iniziativa per aggiungere supporto per librerie di funzioni che possono essere collegate nei programmi BPF. Il prossimo passo sarà il supporto per estensioni dinamiche, che consentiranno di caricare funzioni globali, anche per sostituire le funzioni globali esistenti durante il loro utilizzo. Nel sotto-sistema BPF è stato anche aggiunto il supporto per una variante dell'operazione map (utilizzata per memorizzare dati permanenti), supportando l'esecuzione in modalità batch.
    • Aggiunto dispositivo «cpu_cooling» che consente di raffreddare la CPU surriscaldata mettendola in stato di inattività (idle) per brevi periodi.
    • Aggiunta la chiamata di sistema openat2(), che offre un insieme di flag aggiuntivi per limitare la risoluzione del percorso del file (vietando l'attraversamento dei punti di montaggio, dei collegamenti simbolici, dei collegamenti magici (\/proc\/PID\/fd), dei componenti «..\/»).
    • Per i sistemi eterogenei basati sull'architettura big.LITTLE, che combinano in un unico chip core CPU potenti e meno prestazionali a risparmio energetico, è garantita l'impostazione del parametro uclamp_min (introdotto nel kernel 5.3 come meccanismo di assegnazione del carico). Il parametro specificato garantisce che il task venga posizionato dallo scheduler su un core CPU con sufficiente potenza.
    • Il kernel è stato esentato da il problema del 2038. Sostituiti gli ultimi gestori rimasti in cui il contatore del tempo epocale utilizzava un tipo time_t a 32 bit (signed int), che dovrà andare in overflow nel 2038 considerando il riferimento dal 1970.
    • Proseguita l'ottimizzazione dell'interfaccia di input/output asincrono io_uring, nella quale è garantita sono supportate nuove operazioni: IORING_OP_FALLOCATE (prenotazione di spazi vuoti), 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 su un 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 (esecuzione di operazioni sui descrittori di file epoll).
    • Aggiunta la chiamata di sistema pidfd_getfd(), che consente a un processo di estrarre da un altro processo un descrittore di file di un file aperto.
    • Realizzato meccanismo «bootconfig», che consente di specificare, oltre alle opzioni della riga di comando, i parametri di funzionamento del kernel tramite un file di configurazione. Per aggiungere tali file all'immagine initramfs è stata proposta l'utilità bootconfig. Questa funzionalità può essere utilizzata, ad esempio, per configurare kprobes durante il caricamento.
    • Ristrutturato meccanismo di attesa per la registrazione e la lettura dei dati in canali non denominati (pipe). La modifica ha consentito di accelerare l'esecuzione di attività come il montaggio parallelo di grandi progetti. Tuttavia, l'ottimizzazione può portare a condizioni di competizione in GNU make a causa di un errore nella versione 4.2.1, risolto nella versione 4.3.
    • In prctl() è stato aggiunto il flag PR_SET_IO_FLUSHER, che può essere utilizzato per contrassegnare i processi che si occupano del rilascio di memoria ai quali non dovrebbero essere applicate restrizioni in caso di carenza di memoria nel sistema.
    • Sulla base del sistema di gestione della memoria ION utilizzato in Android, è stato implementato un sottosistema dma-buf heaps, che consente di gestire l'allocazione dei buffer DMA per la condivisione delle aree di memoria tra driver, applicazioni e vari sottosistemi.
  • Architetture hardware
    • È stato aggiunto il supporto per l'estensione E0PD, introdotta in ARMv8.5, che consente di implementare la protezione contro attacchi legati all'esecuzione speculativa delle istruzioni nella CPU. La protezione basata su E0PD comporta minori sovraccarichi rispetto alla protezione KPTI (Kernel Page Table Isolation).
    • Per i sistemi basati sull'architettura ARMv8.5, è stato aggiunto il supporto per l'istruzione RNG, che fornisce accesso al generatore hardware di numeri pseudocasuali. Nel kernel, l'istruzione RNG è utilizzata per generare entropia durante l'inizializzazione del generatore di numeri pseudocasuali fornito dal kernel.
    • È stato rimosso il supporto per le estensioni MPX (Memory Protection Extensions), aggiunte nel kernel 3.19 e che consentivano di organizzare la verifica dei puntatori per il rispetto dei limiti delle aree di memoria. Questa tecnologia non è stata ampiamente adottata 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 consente di rilevare errori nella gestione della memoria.
  • Apparecchiatura
    • È stato implementato il supporto per la specifica USB 4.0, che si basa sul protocollo Thunderbolt 3 e offre una larghezza di banda fino a 40 Gbit/s, mantenendo la retrocompatibilità con USB 2.0 e USB 3.2. Analogamente a Thunderbolt , l'interfaccia USB 4.0 consente di tunnelare vari protocolli su un unico cavo con connettore Type-C, inclusi PCIe, Display Port e USB 3.x, nonché implementazioni software dei protocolli, per esempio, per l'organizzazione di collegamenti di rete tra host. L'implementazione si basa già sul driver Thunderbolt incluso nel kernel Linux e lo adatta per funzionare con host e dispositivi compatibili con USB4. Le modifiche aggiungono anche supporto per i dispositivi Thunderbolt 3 nell'implementazione software del gestore delle connessioni (Connection Manager), responsabile della creazione di tunnel per collegare più dispositivi tramite una singola porta.
    • Nel driver amdgpu è stata aggiunta è stata introdotta la prima supporto per la tecnologia di protezione dalla copia HDCP 2.x (High-bandwidth Digital Content Protection). È stata aggiunta la supporto per il chip ASIC AMD Pollock, basato su Raven 2. È stata implementata la possibilità di ripristinare la GPU per le famiglie Renoir e Navi.
    • Nel driver DRM per schede grafiche Intel è stata aggiunta il supporto DSI VDSC è stato implementato per i chip basati sull'architettura Ice Lake e Tiger Lake, è stata realizzata l'integrazione di LMEM mmap (memoria locale del dispositivo), è stata migliorata l'analisi del VBT (Video BIOS Table) e implementato il supporto HDCP 2.2 per i chip Coffee Lake.
    • Si è continuato a lavorare per unificare il codice del driver amdkfd (per GPU discrete, come Fiji, Tonga, Polaris) con il driver amdgpu.
    • Il driver k10temp è stato revisionato, con supporto per la visualizzazione dei parametri di tensione e corrente per le CPU AMD Zen, nonché informazioni dettagliate dai sensori di temperatura utilizzati nelle CPU Zen e Zen 2.
    • Nel driver nouveau è stata aggiunta è stato implementato il supporto per la modalità di verifica del caricamento del firmware per le GPU NVIDIA basate sull'architettura Turing (GeForce RTX 2000), il che ha permesso di attivare il supporto per l'accelerazione 3D per queste schede (è necessario caricare firmware ufficiali con firma digitale NVIDIA). È stato aggiunto supporto per il motore grafico TU10x. Sono stati risolti problemi con l'HD Audio.
    • È stato aggiunto il supporto per la compressione dei dati durante la trasmissione tramite DisplayPort MST (Multi-Stream Transport).
    • È stato aggiunto un nuovo driver "ath11k" per chip wireless Qualcomm con supporto per 802.11ax.
      Il driver è basato sullo stack mac80211 e supporta le modalità access point, workstation e nodo di rete Mesh.
    • Attraverso sysfs è stato fornito accesso alle letture dei sensori di temperatura utilizzati nei moderni dischi rigidi e SSD.
    • Apportate ci sono stati cambiamenti significativi nel sistema audio ALSA, mirati a rimuovere il codice da il problema del 2038 (abbandono dell'uso del tipo di tempo a 32 bit time_t nelle interfacce snd_pcm_mmap_status e snd_pcm_mmap_control). È stato aggiunto il supporto per i nuovi codec audio
      Qualcomm WCD9340/WCD9341, Realtek RT700, RT711, RT715, RT1308, Ingenic JZ4770.
    • Aggiunti 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.
    • È stata aggiunta supporto per schede ARM e piattaforme Gen1 Amazon Echo (basate 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 eBook Tolino Shine 3,
      Embedded Artists COM (i.MX7ULP), SolidRun Clearfog CX/ITX e 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 SC9863A, Qualcomm SC7180. Supporto aggiunto per il controller PCIe utilizzato in Raspberry Pi 4.

Contemporaneamente, il Fondo latinoamericano per il software libero ha creato
una versione nucleo completamente libero 5.6Linux-libre 5.6-gnu, ripulito da elementi di firmware e driver contenenti componenti o porzioni di codice non liberi, la cui area di applicazione è limitata dal produttore. Nella nuova versione è stata disabilitata il caricamento di blob nei driver per AMD TEE, ATH11K e Mediatek SCP. Il codice di pulizia dei blob nei driver e nelle sottosistemi AMD PSP, amdgpu e nouveau è stato aggiornato.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster