Rilascio del kernel Linux 5.7

Dopo due mesi di sviluppo Linus Torvalds presentata rilascio del kernel Linux 5.7. Tra i cambiamenti più notevoli: una nuova implementazione del file system exFAT, un modulo bareudp per la creazione di tunnel UDP, protezione basata sull'autenticazione del puntatore per ARM64, la possibilità di allegare programmi BPF ai gestori LSM, una nuova implementazione di Curve25519, un split- rilevatore di blocco, compatibilità BPF con PREEMPT_RT, rimozione del limite sulla dimensione della riga di 80 caratteri nel codice, tenendo conto degli indicatori di temperatura della CPU nell'utilità di pianificazione, possibilità di utilizzare clone() per generare processi in un altro cgroup, protezione contro la scrittura in memoria utilizzando userfaultfd.

La nuova versione ha accettato 15033 correzioni dagli sviluppatori del 1961,
dimensione della patch: 39 MB (le modifiche hanno interessato 11590 file, aggiunte 570560 righe di codice,
297401 righe rimosse). Circa il 41% di tutti quelli presentati in 5.7
le modifiche sono associate ai driver di dispositivo, circa il 16% delle modifiche lo hanno fatto
attitudine all'aggiornamento del codice specifico delle architetture hardware, 13%
relativo allo stack di rete, il 4% ai file system e il 4% a quelli interni
sottosistemi del kernel.

Il principale innovazioni:

  • Sottosistema disco, I/O e file system
    • Aggiunta la nuova implementazione del driver exFAT, fondato basato sull'attuale codebase “sdfat” (2.x) sviluppato da Samsung per i suoi smartphone Android. Il driver precedentemente aggiunto al kernel era basato sul codice Samsung legacy (versione 1.2.9) ed era inferiore di circa il 10% rispetto al nuovo driver in termini di prestazioni. Ricordiamo che l'aggiunta del supporto exFAT al kernel è diventata possibile dopo Microsoft pubblicato specifiche pubbliche e reso disponibili i brevetti exFAT per l'uso esente da royalty su Linux.
    • Btrfs implementa un nuovo comando ioctl() - BTRFS_IOC_SNAP_DESTROY_V2, che consente di eliminare una sottosezione in base al suo identificatore. Viene fornito il supporto completo per la clonazione delle estensioni in linea. È stato ampliato il numero di punti di annullamento per le operazioni di ridistribuzione, riducendo così le lunghe attese durante l'esecuzione del comando di 'annullamento saldo'. La determinazione dell'entità dei backlink è stata accelerata (ad esempio, il tempo di esecuzione dello script di test è diminuito da un'ora a diversi minuti). Aggiunta la possibilità di allegare estensioni di file a ciascun inode di un albero. Lo schema di blocco utilizzato durante la scrittura su sottopartizioni e durante l'esclusione di NOCOW è stato riprogettato. Migliorata l'efficienza dell'esecuzione di fsync per gli intervalli.
    • XFS ha migliorato il controllo dei metadati e fsck per le partizioni attive. È stata proposta una libreria per ricostruire le strutture btree, che in futuro verrà utilizzata per rielaborare xfs_repair e implementare la possibilità di ripristino senza smontare la partizione.
    • A CIFS è stato aggiunto il supporto sperimentale per l'inserimento di una partizione di swap negli archivi SMB3. Estensioni POSIX implementate per readdir, definite nella specifica SMB3.1.1. Prestazioni di scrittura migliorate per le pagine da 64 KB quando è abilitata la modalità cache=strict e vengono utilizzate le versioni del protocollo 2.1+.
    • FS EXT4 è stato trasferito da bmap e iopoll all'utilizzo di iomap.
    • F2FS fornisce supporto opzionale per la compressione dei dati utilizzando l'algoritmo zstd. Per impostazione predefinita, per la compressione viene utilizzato l'algoritmo LZ4. Aggiunto il supporto per il comando "chattr -c commit". Viene fornita la visualizzazione del tempo di montaggio. Aggiunto ioctl F2FS_IOC_GET_COMPRESS_BLOCKS per ottenere informazioni sul numero di blocchi compressi. Aggiunto output dei dati di compressione tramite statx.
    • Al file system Ceph è stata aggiunta la possibilità di eseguire localmente operazioni di creazione e cancellazione file (unlink) senza attendere una risposta dal server (funzionando in modalità asincrona). La modifica, ad esempio, può migliorare significativamente le prestazioni durante l'esecuzione dell'utilità rsync.
    • La possibilità di utilizzare virtiofs come file system di livello superiore è stata aggiunta a OVERLAYFS.
    • Riscritto il codice di attraversamento del percorso in VFS, il codice di analisi del collegamento simbolico è stato rielaborato e l'attraversamento del punto di montaggio è stato unificato.
    • Nel sottosistema scsi per gli utenti non privilegiati permesso esecuzione di comandi ZBC.
    • In dm_writecache implementato la possibilità di svuotare gradualmente la cache in base al parametro max_age, che imposta la durata massima di un blocco.
    • In dm_integrità aggiunto supporto per l'operazione di "scarto".
    • In null_blk aggiunto supporto per la sostituzione degli errori per simulare i guasti durante i test.
    • Aggiunto da possibilità di inviare notifiche udev sulle modifiche alle dimensioni del dispositivo a blocchi.
  • Sottosistema di rete
    • Netfilter incluso modifiche, accelerando notevolmente l'elaborazione di elenchi di corrispondenze di grandi dimensioni (set nftables), che richiedono il controllo di una combinazione di sottoreti, porte di rete, protocollo e indirizzi MAC.
      Ottimizzazioni introdotto nel modulo nft_set_pipapo (PIle PAcket POlicies), che risolve il problema della corrispondenza del contenuto di un pacchetto con intervalli di stati di campo arbitrari utilizzati nelle regole di filtraggio, come intervalli di porte di rete e IP (nft_set_rbtree e nft_set_hash manipolano la corrispondenza degli intervalli e la riflessione diretta dei valori ). La versione di pipapo vettorizzata utilizzando istruzioni AVX256 a 2 bit su un sistema con un processore AMD Epyc 7402 ha mostrato un aumento delle prestazioni del 420% durante l'analisi di 30mila record comprese le combinazioni porta-protocollo. L'aumento confrontando una combinazione di una sottorete e un numero di porta durante l'analisi di 1000 record è stato dell'87% per IPv4 e del 128% per IPv6.

    • Aggiunto modulo bareudp, che consente di incapsulare vari protocolli L3, come MPLS, IP e NSH, in un tunnel UDP.
    • È proseguita l'integrazione delle componenti MPTCP (MultiPath TCP), 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 legate a diversi indirizzi IP.
    • Aggiunto da supporto per meccanismi di accelerazione hardware per incapsulare frame Ethernet in 802.11 (Wi-Fi).
    • Quando si sposta un dispositivo da uno spazio dei nomi di rete a un altro, i diritti di accesso e la proprietà dei file corrispondenti in sysfs vengono modificati.
    • Aggiunta la possibilità di utilizzare il flag SO_BINDTODEVICE per gli utenti non root.
    • La terza parte delle patch è stata accettata, convertendo il toolkit ethtool da ioctl() all'utilizzo dell'interfaccia netlink. 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 la possibilità di utilizzare speciali acceleratori hardware per eseguire operazioni di tracciamento della connessione.
    • Nel filtro net aggiunto un hook per connettere i classificatori dei pacchetti in uscita (egress), che integrava il hook precedentemente presente per i pacchetti in entrata (ingress).
  • Virtualizzazione e sicurezza
    • Aggiunta implementazione hardware dell'autenticazione del puntatore (Autenticazione del puntatore), che utilizza istruzioni specializzate della CPU ARM64 per proteggersi dagli attacchi utilizzando tecniche di programmazione orientata al ritorno (ROP), in cui l'attaccante non tenta di posizionare il proprio codice in memoria, ma opera su pezzi di istruzioni macchina già disponibili nelle librerie caricate, terminando con un'istruzione di ritorno di controllo. La sicurezza si riduce all'utilizzo delle firme digitali per verificare gli indirizzi di ritorno a livello di kernel. La firma viene memorizzata nei bit superiori non utilizzati del puntatore stesso. A differenza delle implementazioni software, la creazione e la verifica delle firme digitali viene effettuata utilizzando apposite istruzioni della CPU.
    • Aggiunto da la capacità di proteggere un'area di memoria dalla scrittura utilizzando la chiamata di sistema userfaultfd(), progettata per gestire gli errori di pagina (accesso a pagine di memoria non allocate) nello spazio utente. L'idea è di utilizzare userfaultfd() sia per rilevare violazioni di accesso alle pagine contrassegnate come protette da scrittura sia per chiamare un gestore che possa rispondere a tali tentativi di scrittura (ad esempio, per gestire le modifiche durante la creazione di istantanee live di processi in esecuzione, stato acquisizione durante il dump della memoria su disco, l'implementazione della memoria condivisa, il monitoraggio delle modifiche in memoria). Funzionalità equivalente utilizzando mprotect() insieme al gestore del segnale SIGSEGV, ma funziona notevolmente più velocemente.
    • SELinux ha deprecato il parametro "checkreqprot", che consente di disabilitare i controlli di protezione della memoria durante l'elaborazione delle regole (consentendo l'uso di aree di memoria eseguibili, indipendentemente dalle regole specificate nelle regole). I collegamenti simbolici Kernfs possono ereditare il contesto delle loro directory principali.
    • La struttura acceso modulo KRSI, che consente di collegare programmi BPF a qualsiasi hook LSM nel kernel. La modifica consente di creare moduli LSM (Linux Security Module) sotto forma di programmi BPF per risolvere problemi di audit e controllo obbligatorio degli accessi.
    • Eseguito Ottimizza le prestazioni di /dev/random raggruppando i valori CRNG invece di chiamare le istruzioni RNG singolarmente. Prestazioni migliorate di getrandom e /dev/random sui sistemi ARM64 che forniscono istruzioni RNG.
    • Realizzazione di una curva ellittica Curve25519 sostituito per l'opzione dalla biblioteca HACLper cui spettacoli prova matematica della verifica formale dell'affidabilità.
    • Aggiunto meccanismo per informare sulle pagine di memoria libere. Utilizzando questo meccanismo, i sistemi guest possono trasmettere informazioni sulle pagine che non vengono più utilizzate al sistema host e l'host può riprendere i dati della pagina.
    • Nel vfio/pci aggiunto supporto per SR-IOV (virtualizzazione I/O a radice singola).
  • Servizi di memoria e di sistema
    • Da 80 a 100 caratteri è aumentato limitazione sulla lunghezza massima della riga nei testi di partenza. Allo stesso tempo, agli sviluppatori viene comunque consigliato di rimanere entro 80 caratteri per riga, ma questo non è più un limite rigido. Inoltre, il superamento del limite della dimensione della riga ora risulterà in un avviso di compilazione solo se checkpatch viene eseguito con l'opzione '--strict'. La modifica consentirà di non distrarre gli sviluppatori manipolazione con spazi e sentirsi più liberi durante l'allineamento del codice, oltre a impedirà interruzioni di linea eccessive, inquietante comprensione e ricerca del codice.
    • Aggiunto da supporto per la modalità di avvio misto EFI, che consente di caricare un kernel a 64 bit da un firmware a 32 bit in esecuzione su una CPU a 64 bit senza utilizzare un bootloader specializzato.
    • Incluso sistema per l'identificazione e il debug degli split lock (“serratura divisa"), che si verifica quando si accede a dati non allineati in memoria a causa del fatto che durante l'esecuzione di un'istruzione atomica, i dati attraversano due linee di cache della CPU. Tale blocco comporta un significativo calo delle prestazioni (1000 cicli più lenti di un'operazione atomica sui dati che rientrano in una riga della cache). A seconda del parametro di avvio "split_lock_detect", il kernel può rilevare al volo tali blocchi ed emettere avvisi o inviare un segnale SIGBUS all'applicazione che causa il blocco.
    • L'utilità di pianificazione fornisce il monitoraggio dei sensori di temperatura (Pressione termica) e implementato tenendo conto del surriscaldamento durante l'assegnazione delle attività. Utilizzando le statistiche fornite, il regolatore termico può regolare la frequenza massima della CPU in caso di surriscaldamento e l'utilità di pianificazione ora tiene conto della riduzione della potenza di calcolo dovuta a tale riduzione della frequenza durante la pianificazione delle attività da eseguire (in precedenza, l'utilità di pianificazione rispondeva ai cambiamenti con frequenza e con un certo ritardo, prendendo per qualche tempo decisioni basate su ipotesi esagerate sulle risorse informatiche disponibili).
    • L'utilità di pianificazione include indicatori invarianti monitoraggio del carico, che consente di stimare correttamente il carico, indipendentemente dalla frequenza operativa corrente della CPU. La modifica consente di prevedere con maggiore precisione il comportamento delle attività in condizioni di cambiamenti dinamici di tensione e frequenza della CPU. Ad esempio, un'attività che consumava 1/3 delle risorse della CPU a 1000 MHz consumerà 2/3 delle risorse quando la frequenza scende a 500 MHz, il che in precedenza creava un falso presupposto che fosse in esecuzione a piena capacità (ovvero le attività apparivano maggiore allo scheduler solo riducendo la frequenza, il che ha portato a prendere decisioni errate nello schedutil cpufreq governor).
    • Il driver Intel P-state, responsabile della selezione delle modalità di prestazione, è stato attivato scheduleutil.
    • È stata implementata la possibilità di utilizzare il sottosistema BPF quando il kernel è in esecuzione in tempo reale (PREEMPT_RT). In precedenza, quando PREEMPT_RT era abilitato, BPF doveva essere disabilitato.
    • È stato aggiunto un nuovo tipo di programma BPF: BPF_MODIFY_RETURN, che può essere collegato a una funzione nel kernel e modificare il valore restituito da questa funzione.
    • Aggiunto da opportunità Utilizzando la chiamata di sistema clone3() per creare un processo in un cgroup diverso dal cgroup genitore, consentendo al processo genitore di applicare restrizioni e abilitare la contabilità immediatamente dopo aver generato un nuovo processo o thread. Ad esempio, un gestore di servizi può allocare direttamente nuovi servizi in cgroup separati e i nuovi processi, se inseriti in cgroup “congelati”, verranno immediatamente interrotti.
    • in Kbuild aggiunto supporto per la variabile d'ambiente "LLVM=1" per passare al toolkit Clang/LLVM durante la compilazione del kernel. I requisiti per la versione binutils sono stati aumentati (2.23).
    • Una sezione /sys/kernel/debug/kunit/ è stata aggiunta a debugfs con i risultati dei test di kunit.
    • Aggiunto il parametro di avvio del kernel pm_debug_messages (analogo a /sys/power/pm_debug_messages), che abilita l'output di informazioni di debug sul funzionamento del sistema di gestione dell'alimentazione (utile durante il debug di problemi con ibernazione e modalità standby).
    • All'interfaccia I/O asincrona io_uring aggiunto supporto giunzione() и selezione del tampone atomico.
    • Migliorata la profilazione di cgroup utilizzando il toolkit perf. In precedenza, perf poteva solo profilare le attività in un cgroup specifico e non riusciva a scoprire a quale cgroup appartiene il campione corrente. perf ora recupera le informazioni sul cgroup per ciascun campione, consentendoti di profilare più di un cgroup e applicare l'ordinamento in base
      cgroup nei report.

    • cgroupfs, uno pseudo-FS per la gestione dei cgroup, ha aggiunto il supporto per gli attributi estesi (xattrs), con i quali, ad esempio, è possibile lasciare informazioni aggiuntive per i gestori nello spazio utente.
    • Nel controller di memoria cgroup aggiuntoe supporto per la protezione ricorsiva del valore “memory.low”, che regola la quantità minima di RAM fornita ai membri del gruppo. Quando si monta una gerarchia cgroup con l'opzione "memory_recursiveprot", il valore di "memory.low" impostato per i nodi inferiori verrà automaticamente distribuito a tutti i nodi figli.
    • Aggiunto Framework Uacce (Unified/User-space-access-intended Accelerator Framework) per la condivisione di indirizzi virtuali (SVA, Shared Virtual Addressing) tra la CPU e i dispositivi periferici, consentendo agli acceleratori hardware di accedere alle strutture dati nella CPU principale.
  • Architetture hardware
    • Per l'architettura ARM, viene implementata la capacità di recuperare la memoria a caldo.
    • Per l'architettura RISC-V è stato aggiunto il supporto per l'hot plug e la rimozione delle CPU (CPU hotplug). Per RISC-V a 32 bit, è implementato eBPF JIT.
    • La possibilità di utilizzare sistemi ARM a 32 bit per eseguire ambienti guest KVM è stata rimossa.
    • Rimossa l'implementazione NUMA "fittizia" per l'architettura s390, per la quale non sono stati trovati casi d'uso per ottenere miglioramenti delle prestazioni.
    • Per ARM64, aggiunto il supporto per l'estensione AMU (Activity Monitors Unit), definita in ARMv8.4 e che fornisce contatori delle prestazioni utilizzati per calcolare i fattori di correzione del ridimensionamento della frequenza nell'utilità di pianificazione.
  • Attrezzatura
    • Aggiunto da supporto per dispositivi vDPA che utilizzano un canale di scambio dati conforme alle specifiche virtio. I dispositivi vDPA possono essere apparecchiature connesse fisicamente o dispositivi virtuali emulati tramite software.
    • Nel sottosistema GPIO apparso un nuovo comando ioctl() per monitorare le modifiche, consentendo di informare il processo sui cambiamenti nello stato di qualsiasi linea GPIO. Come esempio di utilizzo del nuovo comando proposto utilità gpio-watch.
    • Nel driver DRM i915 per le schede video Intel è incluso supporto predefinito per i chip Tigerlake (“Gen12”) e aggiunto supporto iniziale per il controllo della retroilluminazione OLED. Supporto migliorato per i chip Ice Lake, Elkhart Lake, Baytrail e Haswell.
    • Nel driver amdgpu aggiunto possibilità di caricare il firmware nel chip USBC per ASIC. Supporto migliorato per i chip AMD Ryzen 4000 "Renoir". Ora è disponibile il supporto per il controllo dei pannelli OLED. Fornita visualizzazione dello stato del firmware in debugfs.
    • La possibilità di utilizzare OpenGL 4 nei sistemi guest è stata aggiunta al driver DRM vmwgfx per i sistemi di virtualizzazione VMware (in precedenza era supportato OpenGL 3.3).
    • Aggiunti nuovi driver DRM per il sistema di visualizzazione della piattaforma TI Keystone.
    • Aggiunti driver per pannelli LCD: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101II01D-CT, Frida FRD350H54004.
    • Al sistema di gestione dell'energia aggiunto supporto per la piattaforma Intel Jasper Lake (JSL) basata su Atom.
    • Aggiunto supporto per laptop Pinebook Pro basato su Rockchip RK3399, tablet e smartphone Pine64 PineTab PinePhone basato su Allwinner A64.
    • Aggiunto supporto per nuovi codec e chip audio:
      Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc.

    • Aggiunto supporto per schede e piattaforme ARM Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron “sl28”, 11 opzioni scheda i.MX6 TechNexion Pico, tre nuove opzioni Toradex Colibri, Samsung S7710 Galaxy Xcover 2 basato su ST -Ericsson u8500, DH Electronics DHCOM SoM e PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.

Fonte: opennet.ru

Aggiungi un commento