Rilascio del kernel Linux 5.9

Dopo due mesi di sviluppo, Linus Torvalds ha presentato rilascio del kernel Linux 5.9. Tra i cambiamenti più significativi: limitazione dell'importazione dei simboli dai moduli proprietari ai moduli GPL, accelerazione delle operazioni di switch di contesto mediante l'istruzione del processore FSGSBASE, supporto per la compressione dell'immagine del kernel tramite Zstd, revisione della priorità dei thread nel kernel, supporto per il protocollo PRP (Parallel Redundancy Protocol), pianificazione basata sulla larghezza di banda nello scheduler deadline, impacchettamento anticipato delle pagine di memoria, flag capability CAP_CHECKPOINT_RESTOR, chiamata di sistema close_range(), miglioramento delle prestazioni di dm-crypt, rimozione del codice per sistemi guest a 32 bit di Xen PV, nuovo meccanismo di gestione della memoria slab, opzione "rescue" in Btrfs, supporto per la crittografia inline in ext4 e F2FS.

La nuova versione comprende 16074 correzioni da 2011 sviluppatori,
la dimensione della patch è di 62 MB (le modifiche hanno riguardato 14548 file, aggiunte 782155 righe di codice, rimosse 314792 righe). Circa il 45% di tutte le modifiche presentate in 5.9
sono legate ai driver di dispositivo, circa il 15% delle modifiche riguardano
l'aggiornamento del codice specifico per le architetture hardware, il 13%
è connesso allo stack di rete, il 3% ai filesystem e il 3% ai sistemi
interni del kernel.

Principali novità:

  • Memoria e servizi di sistema
    • Inasprita protezione dall'uso di strati GPL per il collegamento dei driver proprietari ai componenti del kernel, esportati solo per moduli sotto licenza GPL. Il flag TAINT_PROPRIETARY_MODULE ora è ereditato in tutti i moduli che importano simboli da moduli con questo flag. Se un modulo GPL tenta di importare simboli da un modulo non-GPL, quel modulo GPL erediterà il flag TAINT_PROPRIETARY_MODULE e non potrà accedere ai componenti del kernel disponibili solo per moduli sotto licenza GPL, anche se il modulo aveva precedentemente importato simboli dalla categoria "gplonly". Il blocco inverso (esportazione solo di EXPORT_SYMBOL_GPL nei moduli che hanno importato EXPORT_SYMBOL_GPL), che potrebbe interrompere il funzionamento dei driver proprietari, non è implementato (viene ereditato solo il flag del modulo proprietario, ma non il vincolo GPL).
    • È stata aggiunta supporto per il meccanismo kcompactd per l'impacchettamento anticipato delle pagine di memoria in background, che consente di aumentare il numero di grandi pagine di memoria disponibili per il kernel. A una stima preliminare, l'imballaggio in background, a fronte di costi accessori minimi, permette di ridurre i ritardi nell'allocazione di grandi pagine di memoria (huge-page) da 70 a 80 volte rispetto al meccanismo di imballaggio utilizzato in precedenza, attivato su richiesta (on-demand). Per definire i limiti della frammentazione esterna, che sarà garantita da kcompactd, è stato aggiunto sysctl vm.compaction_proactiveness.
    • È stata aggiunta supporto per la compressione dell'immagine del kernel utilizzando l'algoritmo Zstandard (zstd).
    • Per i sistemi x86 è stato implementato il supporto per l'istruzione del processore FSGSBASE, che consente di leggere e modificare il contenuto dei registri FS/GS dallo spazio utente. Nel kernel, FSGSBASE è utilizzato per accelerare le operazioni di switching di contesto escludendo operazioni di scrittura MSR superflue per GSBASE, mentre nello spazio utente consente di evitare chiamate di sistema non necessarie per modificare FS/GS.
    • Aggiunto il parametro 'allow_writes', che consente di vietare modifiche ai registri MSR del processore dallo spazio utente e limitare l'accesso al contenuto dei dati di quei registri alle operazioni di lettura, poiché la modifica dei MSR può portare a problemi. Per impostazione predefinita, la scrittura non è ancora vietata, e la modifica dei MSR viene registrata nel log, ma in futuro si prevede di passare l'accesso predefinito a una modalità di sola lettura.
    • Nell'interfaccia di input/output asincrono io_uring è stato aggiunto il pieno supporto per operazioni asincrone di lettura bufferizzata, che non richiedono l'impiego di thread del kernel. Il supporto per la scrittura è previsto nella prossima versione.
    • Nel pianificatore di I/O deadline è implementato planning tenendo conto della larghezza di banda, che consente prendere decisioni corrette su sistemi asimmetrici, come i sistemi ARM basati su architetture DynamIQ e big.LITTLE, che combinano in un unico chip core CPU potenti e meno performanti a basso consumo energetico. In particolare, la nuova modalità consente di evitare disallineamenti nel planning, quando un core CPU lento non ha le risorse necessarie per completare un compito entro il termine assegnato.
    • Il modello di consumo energetico nel kernel (framework Energy Model) ora descrive non solo il comportamento del consumo energetico della CPU, ma include anche dispositivi periferici.
    • È stata implementata la chiamata di sistema close_range(), che consente a un processo di chiudere in un colpo solo un intero intervallo di descrittori di file aperti.
    • Dalla realizzazione della console testuale e del driver fbcon codice rimosso, che offre la possibilità di scorrere programmativamente il testo all'indietro (CONFIG_VGACON_SOFT_SCROLLBACK) per più della capacità della memoria video nella modalità testuale VGA.
    • Ristrutturato l'algoritmo di assegnazione delle priorità per i thread all'interno del kernel. La nuova versione garantisce una migliore coerenza in tutti i sotto-sistemi del kernel nell'assegnazione delle priorità per i task in tempo reale.
    • Aggiunto sysctl sched_uclamp_util_min_rt_default per gestire i parametri di forzatura della frequenza CPU per i task in tempo reale (ad esempio, è possibile modificare il comportamento durante l'esecuzione di task in tempo reale per risparmiare energia dopo il passaggio all'alimentazione a batteria o su sistemi mobili).
    • Preparata l'implementazione del supporto per la tecnologia Transparent Huge Pages nella cache delle pagine.
    • Nel meccanismo fanotify sono stati implementati nuovi flag FAN_REPORT_NAME e FAN_REPORT_DIR_FID per trasmettere informazioni sul nome del genitore e sull'identificativo unico FID al verificarsi di eventi di creazione, eliminazione o spostamento di elementi di directory e oggetti non collegati alle directory.
    • Per i cgroups è stato implementato nuovo controllore di allocazione della memoria slab (controllore della memoria slab), caratterizzato dal trasferimento del monitoraggio dello slab dal livello delle pagine di memoria al livello degli oggetti del kernel, consentendo di condividere le pagine slab tra diversi cgroup, invece di allocare cache slab separate per ogni cgroup. L'approccio proposto consente di migliorare l'efficienza dell'uso dello slab, riducendo la dimensione della memoria utilizzata per lo slab del 30-45%, diminuendo notevolmente il consumo di memoria totale del kernel e riducendo la frammentazione della memoria.
    • Nel sottosistema audio ALSA e nel stack USB, in conformità con le raccomandazioni recentemente adottate per l'uso di una terminologia inclusiva nel kernel Linux, è stata effettuata un'operazione di pulizia dai termini non appropriati. Il codice è stato ripulito dall'uso delle parole «schiavo», «maestro», «blacklist» e «whitelist».
  • Virtualizzazione e sicurezza
    • Compilando il kernel utilizzando il compilatore Clang è comparso è possibile configurare (CONFIG_INIT_STACK_ALL_ZERO) l'inizializzazione automatica a zero di tutte le variabili memorizzate nello stack (nella compilazione viene specificato «-ftrivial-auto-var-init=zero»).
    • Nel sottosistema seccomp, utilizzando la modalità di controllo del processo nello spazio utente, è stata aggiunta la possibilità sostituzioni nel processo monitorato dei descrittori di file per una completa emulazione delle chiamate di sistema che portano alla creazione dei descrittori di file. Questa funzionalità è richiesta nei sistemi di contenitori isolati e nell'implementazione di sandbox per Chrome.
    • Per le architetture xtensa e csky è stata aggiunta la supporto per limitare le chiamate di sistema tramite la sottosistema seccomp. Per xtensa è stata inoltre implementata la supporto del meccanismo di audit.
    • Aggiunto nuovo flag di capability CAP_CHECKPOINT_RESTORE, che consente l'accesso alle capacità relative al congelamento e al ripristino dello stato dei processi senza la necessità di ulteriori privilegi.
    • In GCC 11 sono state implementate tutte le funzionalità necessarie per
      lo strumento di debug KCSAN (Kernel Concurrency Sanitizer), progettato per rilevare dinamicamente le condizioni di competizione all'interno del kernel. In questo modo, KCSAN può ora essere utilizzato con kernel compilati in GCC.
    • Per AMD Zen e i modelli CPU più recenti è stata aggiunta supporto della tecnologia P2PDMA, che consente di utilizzare DMA per la trasmissione diretta dei dati tra la memoria di due dispositivi connessi al bus PCI.
    • In dm-crypt è stata aggiunta una modalità che riduce le latenze eseguendo l'elaborazione crittografica dei dati senza utilizzare code di lavoro. Questa modalità è anche necessaria per il corretto funzionamento con dispositivi a blocchi (dispositivi con aree che devono essere registrate in modo sequenziale aggiornando l'intero gruppo di blocchi). Sono stati fatti progressi nel miglioramento della larghezza di banda e nella riduzione delle latenze in dm-crypt.
    • È stato rimosso il codice per il supporto di sistemi guest a 32 bit che operano in modalità paravirtualizzazione sotto Hypervisor Xen. Gli utenti di tali sistemi dovrebbero passare all'uso di kernel a 64 bit negli ambienti guest o utilizzare modalità di virtualizzazione completa (HVM) o combinata (PVH) invece della paravirtualizzazione (PV).
  • Sottosistema di disco, input/output e file system
    • Nel file system Btrfs è stata implementata è stata introdotta l'opzione di montaggio "rescue", che unifica l'accesso a tutte le altre opzioni di recupero. È stata rimossa la supporto per le opzioni "alloc_start" e "subvolrootid", mentre l'opzione "inode_cache" è stata dichiarata obsoleta. È stata effettuata un'ottimizzazione delle prestazioni, evidenziando un significativo miglioramento nell'esecuzione delle operazioni fsync(). È stata aggiunta la possibilità di utilizzare tipi alternativi di checksum diversi da CRC32c.
    • È stata aggiunta la possibilità di utilizzare la crittografia inline (Inline Encryption) nei file system ext4 e F2FS, per cui è prevista l'opzione di montaggio «inlinecrypt». La modalità di crittografia inline consente di sfruttare i meccanismi di crittografia integrati nel controller dell'unità, che eseguono la crittografia e la decrittografia trasparenti delle operazioni di input/output.
    • In XFS è garantito il flush dell'inode in modalità completamente asincrona, senza bloccare i processi durante l'operazione di pulizia della memoria. Risolta una vecchia problematica relativa alle quote, che portava a un tracciamento errato degli avvisi di superamento del limite morbido e delle restrizioni sul numero di inode. Unificata l'implementazione del supporto DAX per ext4 e xfs.
    • In Ext4 è stata implementata il caricamento anticipato delle bitmap di distribuzione dei blocchi. In combinazione con la limitazione della scansione dei gruppi non inizializzati, l'ottimizzazione ha consentito di ridurre il tempo di montaggio di partizioni molto grandi.
    • In F2FS è stata aggiunta ioctl F2FS_IOC_SEC_TRIM_FILE, che consente di utilizzare i comandi TRIM/discard per azzerare fisicamente i dati specificati nel file, ad esempio per rimuovere le chiavi di accesso senza lasciare dati residui sullo storage.
      In F2FS, inoltre è stata aggiunta è stata introdotta una nuova modalità di raccolta dei rifiuti GC_URGENT_LOW, che opera in modo più aggressivo escludendo alcune verifiche dello stato di inattività (idle) prima dell'avvio del raccoglitore di rifiuti.
    • In bcache, la dimensione del bucket_size per gli extent è aumentata da 16 a 32 bit in preparazione all'abilitazione dell'utilizzo come cache per dispositivi zonati.
    • Nel sottosistema SCSI è stata aggiunta la possibilità di utilizzare la crittografia inline basata su strumenti hardware integrati forniti dai controller UFS (Universal Flash Storage).
    • È stato aggiunto un nuovo parametro della riga di comando del kernel «debugfs», che consente di gestire la disponibilità del file system pseudo omonimo.
    • Nel client NFSv4.2 è stato garantito il supporto per gli attributi estesi dei file (xattr).
    • In dm-dust è stata aggiunta un'interfaccia per l'elenco di tutti i bad block identificati sul disco («dmsetup message dust1 0 listbadblocks»).
    • Per md/raid5 è stato aggiunto il parametro /sys/block/md1/md/stripe_size per configurare la dimensione del blocco STRIPE.
    • Per dispositivi di archiviazione NVMe è stata aggiunta il supporto per i comandi di zonazione dello storage (ZNS, NVM Express Zoned Namespace), che consente di suddividere lo spazio di archiviazione in zone costituite da gruppi di blocchi, per una gestione più completa del posizionamento dei dati sullo storage.
  • Sottosistema di rete
    • In Netfilter è stata aggiunta possibilità di rifiutare i pacchetti prima della verifica del routing (l'espressione REJECT può ora essere utilizzata non solo nelle catene INPUT, FORWARD e OUTPUT, ma anche nella fase PREROUTING per icmp e tcp).
    • In nftables è stata aggiunta possibilità di audit degli eventi legati alla modifica della configurazione.
    • In nftables nell'API netlink è stata aggiunta supporto per catene anonime, il cui nome viene assegnato dinamicamente dal kernel. Quando viene rimossa una regola associata a una catena anonima, viene automaticamente rimossa anche la catena stessa.
    • In BPF è stato aggiunto il supporto per iteratori per l'iterazione, il filtraggio e la modifica degli elementi degli array associativi (map) senza copiare i dati nello spazio utente. Gli iteratori possono essere utilizzati per socket TCP e UDP, consentendo ai programmi BPF di scorrere le liste dei socket aperti ed estrarre le informazioni necessarie.
    • È stato aggiunto un nuovo tipo di programmi BPF BPF_PROG_TYPE_SK_LOOKUP, eseguiti nel momento in cui il kernel cerca un socket in ascolto appropriato per una connessione in ingresso. Utilizzando un programma BPF di questo tipo, è possibile creare gestori che prendano decisioni su quale socket associare alla connessione, senza essere limitati dal sistema di chiamate bind(). Ad esempio, è possibile associare un socket a un intervallo di indirizzi o porte. Inoltre, in bpf_setsockopt() è stato aggiunto il supporto per il flag SO_KEEPALIVE e implementata la possibilità di impostare gestori BPF_CGROUP_INET_SOCK_RELEASE, chiamati al rilascio del socket.
    • È stato implementato il supporto per il protocollo PRP (Parallel Redundancy Protocol), che consente di implementare il passaggio automatico a un canale di riserva in caso di guasto di qualsiasi componente della rete, basato su Ethernet.
    • Nel stack mac80211 è stata aggiunta supporto per l'accordo in quattro fasi del canale WPA/WPA2-PSK in modalità punto di accesso.
    • È stata aggiunta la possibilità di cambiare la disciplina di coda (qdisc) utilizzata per impostazione predefinita, al fine di utilizzare l'algoritmo di gestione delle code FQ-PIE (Flow Queue PIE), mirato a ridurre l'impatto negativo del buffering intermedio dei pacchetti sulle attrezzature di rete di confine (bufferbloat) nelle reti con modem via cavo.
    • Sono state aggiunte nuove funzionalità in MPTCP (MultiPath TCP), estensioni del protocollo TCP per organizzare il funzionamento delle connessioni TCP con la consegna dei pacchetti simultaneamente su più percorsi attraverso diverse interfacce di rete associate a indirizzi IP differenti. È stata aggiunta la supporto per syn cookie, DATA_FIN, configurazione automatica dei buffer, diagnostica dei socket e utilizzo delle flag REUSEADDR, REUSEPORT e V6ONLY in setsockopt.
    • Per le tabelle di routing virtuali VRF (Virtual Routing and Forwarding), che consentono l'organizzazione del funzionamento di più domini di routing su un singolo sistema, è stata implementata la modalità 'strict'. In questa modalità, la tabella virtuale può essere associata solo alla tabella di routing che non è utilizzata in altre tabelle virtuali.
    • Nel driver wireless ath11k è stata aggiunta è supportata la frequenza di 6GHz e la scansione spettrale.
  • Apparecchiatura
    • È stato rimosso il codice per il supporto dell'architettura UniCore, sviluppata presso il centro microelettronico dell'Università di Pechino e inclusa nel kernel Linux nel 2011. Questa architettura è abbandonata dal 2014 e non ha supporto in GCC.
    • Per l'architettura RISC-V è stato implementato il supporto per kcov (interfaccia debugfs per l'analisi della copertura del codice del kernel), kmemleak (sistema di rilevamento delle perdite di memoria), protezione dello stack, etichette di salto e operazioni tickless (multitasking indipendente dai segnali del timer).
    • Per l'architettura PowerPC è stato implementato il supporto per le code del spinlock, che ha notevolmente aumentato le prestazioni in situazioni di conflitto delle lock.
    • Per le architetture ARM e ARM64 è stato attivato per impostazione predefinita il meccanismo di regolazione della frequenza della CPU schedutil (governatore cpufreq), che per prendere decisioni sul cambiamento della frequenza utilizza direttamente le informazioni dal pianificatore delle attività e può immediatamente interagire con i driver cpufreq per modifiche rapide della frequenza, adattando istantaneamente le prestazioni della CPU al carico attuale.
    • Nel driver DRM i915 per schede grafiche Intel è stato incluso il supporto per i chip basati sull'architettura Rocket Lake ed è stato aggiunto il supporto iniziale per le schede grafiche discrete Intel Xe DG1.
    • Nel driver amdgpu è stato aggiunto il supporto iniziale per la GPU AMD Navi 21 (Navy Flounder) e Navi 22 (Sienna Cichlid). È stato aggiunto il supporto per i motori di accelerazione della codifica e decodifica video UVD/VCE per le GPU Southern Islands (Radeon HD 7000).
      È stata aggiunta una proprietà per la rotazione della visualizzazione a 90, 180 o 270 gradi.

      È interessante notare che il driver per le GPU AMD è il driver più grande nel kernel — conta circa 2,71 milioni di righe di codice, che rappresentano circa il 10% della dimensione totale del kernel (27,81 milioni di righe). Di queste, 1,79 milioni di righe sono dedicate ai file di intestazione generati automaticamente con i dati per i registri GPU, mentre il codice C comprende 366 mila righe (per confronto, il driver Intel i915 include 209 mila righe e Nouveau 149 mila).

    • Nel driver Nouveau è stata aggiunta supporto per la verifica dell'integrità a livello di frame tramite CRC (Controlli di Ridondanza Ciclica) nei motori di visualizzazione GPU NVIDIA. L'implementazione è basata sulla documentazione fornita da NVIDIA.
    • Aggiunti driver per i pannelli LCD: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 e Xingbangda XBD599.
    • Nel sottosistema audio ALSA è stato implementato il supporto per Intel Silent Stream (modalità di mantenimento costante dell'alimentazione per dispositivi HDMI esterni per escludere ritardi all'inizio della riproduzione) e nuovo dispositivo per il controllo dell'illuminazione dei pulsanti di attivazione del microfono e per silenziare, è stato aggiunto anche il supporto per nuovo hardware, incluso il controller Loongson 7A1000.
    • Aggiunto supporto per piattaforme, dispositivi e ambienti ARM: Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1, ASUS Google Nexus 7, Acer Iconia Tab A500, Qualcomm Snapdragon SDM630 (utilizzato in Sony Xperia 10, 10 Plus, XA2, XA2 Plus e XA2 Ultra), Jetson Xavier NX, Amlogic WeTek Core2, Aspeed EthanolX, cinque nuove schede basate su NXP i.MX6, MikroTik RouterBoard 3011, Xiaomi Libra, Microsoft Lumia 950, Sony Xperia Z5, MStar, Microchip Sparx5, Intel Keem Bay, Amazon Alpine v3, Renesas RZ/G2H.

Contemporaneamente, il Fondo latinoamericano per il software libero ha creato
una versione kernel completamente libero 5.9Linux-libre 5.9-gnu, ripulito da elementi di firmware e driver contenenti componenti non liberi o sezioni di codice il cui utilizzo è limitato dal produttore. Nel nuovo rilascio è stata disabilitata il caricamento di blob nei driver per WiFi rtw8821c e SoC MediaTek mt8183. Aggiornato il codice di pulizia dei blob nei driver e nei sottosistemi Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) e x86 touchscreen.

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