Rilascio del kernel Linux 5.15

Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 5.15. Tra le novità più rilevanti: un nuovo driver NTFS con supporto per la scrittura, il modulo ksmbd che implementa un server SMB, il sottosistema DAMON per il monitoraggio dell'accesso alla memoria, primitive di blocco per la modalità tempo reale, supporto per fs-verity in Btrfs, la chiamata di sistema process_mrelease per i sistemi di gestione della scarsità di memoria e il modulo di attestazione remota dm-ima.

Nella nuova versione sono state apportate 13499 correzioni da 1888 sviluppatori, la dimensione della patch è di 42 MB (le modifiche hanno interessato 10895 file, aggiunte 632522 righe di codice, rimosse 299966 righe). Circa il 45% di tutte le modifiche presentate in 5.15 riguardano i driver dei dispositivi, circa il 14% si riferisce all'aggiornamento del codice specifico per le architetture hardware, il 14% è legato allo stack di rete, il 6% ai file system e il 3% ai sottosistemi interni del kernel.

Novità principali:

  • Sottosistema disco, I/O e file system
    • Nel kernel è stata accettata una nuova implementazione del file system NTFS, aperta dalla Paragon Software. Il nuovo driver può operare in modalità scrittura e supporta tutte le funzionalità dell'attuale versione NTFS 3.1, inclusi gli attributi estesi dei file, le liste di controllo degli accessi (ACL), la modalità di compressione dei dati, l'efficiente gestione degli spazi vuoti nei file (sparse) e la riproduzione delle modifiche dal registro per il ripristino dell'integrità dopo i guasti.
    • Nel file system Btrfs è stata implementata la supporto per il meccanismo fs-verity, utilizzato per il controllo trasparente dell'integrità e dell'autenticità dei singoli file tramite hash crittografici o chiavi associate ai file, conservati nell'area metadati. In precedenza, fs-verity era disponibile solo per i file system Ext4 e F2fs.

      In Btrfs è stata anche aggiunta la supporto per il mapping degli ID utente per i file system montati (in precedenza supportato per FAT, ext4 e XFS). Questa funzionalità consente di associare i file di un determinato utente su una partizione remota a un altro utente nel sistema attuale.

      Tra le altre modifiche in Btrfs: accelerazione nell'aggiunta di chiavi nell'indice delle directory per migliorare le prestazioni nella creazione di file; possibilità di utilizzare raid0 con un dispositivo e raid10 con due (ad esempio, durante la riconfigurazione dell'array); opzione «rescue=ibadroots» per ignorare gli alberi di extent non validi; accelerazione dell'operazione «send»; riduzione dei conflitti di locking durante le operazioni di rinominazione; possibilità di utilizzare settori 4K sui sistemi con dimensione della pagina di memoria di 64K.

    • In XFS è stata stabilita la possibilità di utilizzare nei file system date successive al 2038. È stato implementato un meccanismo di disattivazione posticipata degli inode e il supporto per la configurazione posticipata e la rimozione degli attributi dei file. Per eliminare problemi è stata rimossa la possibilità di disabilitare le quote del disco per le partizioni già montate (le quote possono essere disabilitate forzatamente, ma il conteggio ad esse associato continuerà, quindi per una disattivazione completa è necessario rimontare).
    • In EXT4 sono stati effettuati miglioramenti per aumentare le prestazioni della scrittura dei buffer del delalloc e della gestione dei file orfani (orphan), che continuano a esistere perché rimangono aperti ma senza un legame con la directory. La gestione delle operazioni di discard è stata estratta dal thread kthread jbd2 per escludere blocchi nelle operazioni di metadati.
    • In F2FS è stata aggiunta l'opzione «discard_unit=block|segment|section» per vincolare le operazioni di discard (segnalazione di blocchi liberati che possono essere fisicamente non memorizzati) all'allineamento rispetto a blocchi, settori, segmenti o sezioni. È stata aggiunta la supporto per il monitoraggio delle variazioni di latenza nelle operazioni di input/output.
    • Nel file system EROFS (Extendable Read-Only File System) è stato aggiunto il supporto per l'I/O diretto per i file archiviati senza compressione, così come il supporto per fiemap.
    • In OverlayFS è stata implementata la corretta gestione dei flag di montaggio «immutable», «append-only», «sync» e «noatime».
    • In NFS è stata migliorata la gestione delle situazioni in cui il server NFS ha smesso di rispondere alle richieste. È stata aggiunta la possibilità di montare da un indirizzo già utilizzato server, ma accessibile tramite un altro indirizzo di rete.
    • È iniziata la preparazione per la riscrittura del sottosistema FSCACHE.
    • È stato aggiunto il supporto per partizioni EFI con posizionamento non standard delle tabelle GPT.
    • Nel meccanismo fanotify è stato implementato un nuovo flag FAN_REPORT_PIDFD, che porta all'inclusione del pidfd tra i metadati restituiti. Il pidfd aiuta a gestire le situazioni di riutilizzo del PID per una più precisa identificazione dei processi che accedono ai file monitorati (il pidfd è legato a un processo specifico e non cambia, mentre il PID può essere assegnato a un altro processo dopo la conclusione del processo attuale associato a questo PID).
    • È stata aggiunta la possibilità di modificare i punti di montaggio in gruppi condivisi esistenti nella chiamata di sistema move_mount(), risolvendo i problemi relativi al salvataggio e al ripristino dello stato dei processi nell'ambito di CRIU quando sono presenti più spazi di montaggio condivisi tra i contenitori isolati.
    • È stata implementata una protezione contro stati di gara nascosti, che potrebbero potenzialmente danneggiare i file durante la lettura dalla cache mentre si gestiscono gli spazi vuoti nel file.
    • È stato interrotto il supporto per i blocchi obbligatori (mandatory) dei file, implementati tramite chiamate di sistema che portano a modifiche ai file. A causa di possibili stati di gara, tali blocchi sono stati considerati inaffidabili e risalenti a anni fa sono stati dichiarati obsoleti.
    • È stata rimossa la sottosistema LightNVM, che consentiva l'accesso diretto al disco SSD, bypassando il livello di emulazione. LightNVM ha perso significato dopo l'introduzione degli standard NVMe, che prevedono la funzionalità di zonizzazione (ZNS, Zoned Namespace).
  • Memoria e servizi di sistema
    • È stata realizzata la sottosistema DAMON (Data Access MONitor), che consente di monitorare l'attività relativa all'accesso ai dati nella memoria, associandola a un determinato processo in esecuzione nello spazio utente. Questa sottosistema consente di analizzare a quali aree di memoria ha avuto accesso il processo durante la sua esecuzione, e quali aree di memoria sono rimaste inutilizzate. Tra le caratteristiche di DAMON si segnalano un carico ridotto sulla CPU, un basso consumo di memoria, alta precisione e costi operativi previsti costanti, indipendenti dalle dimensioni. La sottosistema può essere utilizzata sia dal kernel per ottimizzare la gestione della memoria, sia da utility nello spazio utente per comprendere cosa sta facendo il processo e ottimizzare l'uso della memoria, ad esempio liberando memoria in eccesso al sistema.
    • È stata realizzata la chiamata di sistema process_mrelease, che consente di accelerare il processo di liberazione della memoria di un processo che sta terminando l'esecuzione. In condizioni normali, la liberazione delle risorse e la terminazione del processo non avvengono immediatamente e possono subire ritardi per vari motivi, ostacolando il funzionamento dei sistemi di risposta rapida alle carenze di memoria nello spazio utente, come oomd (fornito in systemd) e lmkd (utilizzato in Android). Con la chiamata process_mrelease, tali sistemi possono iniziare in modo più prevedibile a restituire memoria dai processi forzatamente terminati.
    • Dalla branch PREEMPT_RT del kernel, in cui è in fase di sviluppo il supporto per il lavoro in tempo reale, sono stati trasferiti i vari primitivi per la gestione dei blocchi mutex, ww_mutex, rw_semaphore, spinlock e rwlock, basati sulla sottosistema RT-Mutex. Sono state apportate modifiche all'allocatore SLUB slab che migliorano le prestazioni in modalità PREEMPT_RT e riducono l'impatto sulle interruzioni.
    • Nella cgroup è stato aggiunto il supporto per l'attributo dello scheduler delle attività SCHED_IDLE, che consente di attribuire questo attributo a tutti i processi del gruppo all'interno di una certa cgroup. Ciò significa che questi processi verranno avviati solo quando non ci sono altre attività nel sistema in attesa di esecuzione. A differenza dell'impostazione dell'attributo SCHED_IDLE per ogni processo singolarmente, legando SCHED_IDLE a una cgroup quando si sceglie un'attività da eseguire viene considerato il peso relativo delle attività all'interno del gruppo.
    • Il meccanismo di monitoraggio del consumo di memoria nella cgroup è stato ampliato per consentire il monitoraggio di ulteriori strutture dati del kernel, comprese quelle create per il polling, la gestione dei segnali e gli spazi dei nomi.
    • È stato aggiunto il supporto per lo scheduling asimmetrico delle attività sui core di CPU in architetture in cui alcune CPU consentono l'esecuzione di attività a 32 bit e altre funzionano solo in modalità a 64 bit (ad esempio, ARM). La nuova modalità consente di considerare solo le CPU che supportano attività a 32 bit durante la pianificazione dell'esecuzione delle attività a 32 bit.
    • Nell'interfaccia di input/output asincrono io_uring è stato aggiunto il supporto per l'apertura di file direttamente nella tabella degli indici fixed-file, senza utilizzare un descrittore di file, il che consente di accelerare notevolmente alcuni tipi di operazioni, ma contrasta con il tradizionale processo Unix di utilizzo dei descrittori di file per aprire i file.

      In io_uring per il sottosistema BIO (Block I/O Layer) è stato attuato un nuovo meccanismo di riciclo («BIO recycling»), che riduce le spese generali nella gestione della memoria interna e aumenta di circa il 10% il numero di operazioni di input/output elaborate al secondo. In io_uring è stata anche aggiunta la supporto per le chiamate di sistema mkdirat(), symlinkat() e linkat().

    • Per i programmi BPF è stata implementata la possibilità di richiedere e gestire eventi del timer. È stato aggiunto un iteratore per i socket UNIX, così come la possibilità di ottenere e impostare opzioni dei socket tramite setsockopt. È stato aggiunto il supporto per i dati tipizzati nel BTF dumper.
    • Nei sistemi NUMA con diversi tipi di memoria con prestazioni variabili, in caso di esaurimento dello spazio libero, è stata implementata la migrazione delle pagine di memoria espulse dalla memoria dinamica (DRAM) alla memoria persistente più lenta invece di eliminare tali pagine. I test hanno dimostrato che questa tattica generalmente migliora le prestazioni su tali sistemi. Per NUMA è stata anche implementata la possibilità di allocare pagine di memoria per un processo da un insieme selezionato di nodi NUMA.
    • Per l'architettura ARC è stato implementato il supporto per le tabelle delle pagine di tre e quattro livelli, il che in futuro consentirà il supporto per processori ARC a 64 bit.
    • Per l'architettura s390 è stata implementata la possibilità di utilizzare il meccanismo KFENCE per rilevare errori nella gestione della memoria, e è stato aggiunto il supporto per il rilevatore di condizioni di gara KCSAN.
    • È stato aggiunto il supporto per l'indicizzazione dell'elenco dei messaggi emessi tramite printk(), consentendo di estrarre in un colpo solo tutti i messaggi pertinenti e monitorare le modifiche nello spazio utente.
    • Nella mmap() è stata interrotta la supporto per l'opzione VM_DENYWRITE, e il codice del kernel è stato liberato dall'uso della modalità MAP_DENYWRITE, riducendo il numero di situazioni che portano alla scrittura in un file con l'errore ETXTBSY.
    • Nel sottosistema di tracciamento è stato aggiunto un nuovo tipo di controlli «Event probes», che possono essere attaccati a eventi di tracciamento esistenti, definendo il proprio formato di output.
    • Nella compilazione del kernel con il compilatore Clang, ora è utilizzato per impostazione predefinita l'assemblatore integrato del progetto LLVM.
    • Nell'ambito del progetto per rimuovere dal kernel il codice che causa avvisi del compilatore, è stato condotto un esperimento con l'attivazione predefinita della modalità «-Werror», in cui gli avvisi del compilatore vengono trattati come errori. Durante la preparazione del rilascio di 5.15, Linus ha iniziato ad accettare solo modifiche che non causassero avvisi durante la compilazione del kernel e ha attivato la compilazione con «-Werror», ma successivamente ha concordato con l'opinione che fosse prematuro e ha posticipato l'attivazione di «-Werror» per impostazione predefinita. La gestione dell'attivazione del flag «-Werror» durante la compilazione avviene tramite il parametro WERROR, che per impostazione predefinita è impostato su COMPILE_TEST, cioè attivato solamente nelle compilazioni di test.
  • Virtualizzazione e sicurezza
    • Nel Device Mapper (DM) è stato aggiunto un nuovo gestore dm-ima con implementazione del meccanismo di attestazione remota basato sul sottosistema IMA (Integrity Measurement Architecture), che consente a un servizio esterno di verificare lo stato dei sottosistemi del kernel per assicurarsi della loro autenticità. In pratica, dm-ima consente di creare tramite Device Mapper archivi legati a sistemi cloud esterni, in cui tramite IMA viene verificata l'integrità della configurazione DM target in esecuzione.
    • Nella prctl() è stata implementata una nuova opzione PR_SPEC_L1D_FLUSH, che, quando attivata, fa sì che il kernel svuoti il contenuto della cache di primo livello (L1D) ogni volta che si effettua uno switch di contesto. Questa modalità consente di implementare una protezione aggiuntiva per i processi più importanti contro gli attacchi tramite canali laterali, condotti per determinare i dati depositati nella cache a causa di vulnerabilità causate dall'esecuzione speculativa delle istruzioni nella CPU. Il costo dell'attivazione di PR_SPEC_L1D_FLUSH (disattivato per impostazione predefinita) è una considerevole riduzione delle prestazioni.
    • È stata realizzata la possibilità di compilare il kernel aggiungendo al GCC il flag «-fzero-call-used-regs=used-gpr», che garantisce l'azzeramento di tutti i registri prima del ritorno del controllo dalla funzione. Questa opzione consente di proteggere dalle fughe di informazioni dalle funzioni e riduce del 20% il numero di blocchi adatti per la costruzione di gadget ROP (Return-Oriented Programming) negli exploit.
    • È stata implementata la possibilità di compilare kernel per l'architettura ARM64 sotto forma di client per l'hypervisor Hyper-V.
    • È stato proposto un nuovo framework per lo sviluppo di driver «VDUSE», che consente di realizzare dispositivi a blocchi virtuali nello spazio utente e di utilizzare Virtio come mezzo di trasporto per l'accesso dai sistemi guest.
    • È stato aggiunto un driver Virtio per il bus I2C, che consente di emulare i controller I2C in modalità paravirtualizzata utilizzando backend separati.
    • È stato aggiunto un driver Virtio gpio-virtio, che consente ai sistemi guest di accedere alle linee GPIO fornite dal sistema host.
    • È stata aggiunta la possibilità di limitare l'accesso alle pagine di memoria per i driver dei dispositivi che supportano DMA su sistemi senza I/O MMU (memory-management unit).
    • Nel hypervisor KVM è stata implementata la possibilità di visualizzare le statistiche sotto forma di istogrammi lineari e logaritmici.
  • Sottosistema di rete
    • Nel kernel è stato aggiunto il modulo ksmbd con implementazione di un server di file che utilizza il protocollo SMB3. Questo modulo integra l'implementazione del client SMB già disponibile nel kernel e, a differenza del server SMB che opera nello spazio utente, è più efficiente in termini di prestazioni, consumo di memoria e integrazione con le funzionalità avanzate del kernel. Ksmbd viene presentato come un'estensione ad alte prestazioni e pronta per essere utilizzata su dispositivi embedded da integrare, se necessario, con strumenti e librerie Samba. Tra le funzionalità di ksmbd si distingue un migliorato supporto della tecnologia di caching distribuito dei file (SMB leases) nei sistemi locali, che consente di ridurre significativamente il traffico. In futuro è prevista l'aggiunta del supporto per RDMA («smbdirect») e per le estensioni del protocollo relative al rafforzamento dell'affidabilità della crittografia e alla verifica tramite firme digitali.
    • Nel client CIFS è stata interrotta la supporto per NTLM e per algoritmi di autenticazione meno sicuri basati sul protocollo DES utilizzato in SMB1.
    • Nell'implementazione dei bridge di rete per VLAN è stata implementata la supporto multicast.
    • Nel driver bonding, utilizzato per aggregare interfacce di rete, è stata aggiunta la supporto per il sottosistema XDP (eXpress Data Path), che consente di manipolare i pacchetti di rete prima che siano elaborati dallo stack di rete del kernel Linux.
    • Nello stack wireless mac80211 è stata implementata la supporto per 6GHZ STA (Special Temporary Authorization) nelle modalità LPI, SP e VLP, così come la possibilità di impostare TWT (Target Wake Time) separati in modalità access point.
    • È stata aggiunta la supporto per il protocollo MCTP (Management Component Transport Protocol), utilizzato per l'interazione tra controllori di gestione e dispositivi correlati (processori host, dispositivi periferici, ecc.).
    • È proseguita l'integrazione nel kernel di MPTCP (MultiPath TCP), un'estensione del protocollo TCP per stabilire una connessione TCP che consegna pacchetti contemporaneamente su più percorsi attraverso diverse interfacce di rete collegate a diversi indirizzi IP. Nella nuova release è stato aggiunto il supporto per indirizzi in modalità fullmesh.
    • In netfilter sono stati aggiunti gestori per flussi di rete incapsulati nel protocollo SRv6 (Segment Routing IPv6).
    • È stata aggiunta la supporto per sockmap per i socket Unix in streaming.
  • Attrezzature
    • Nel driver amdgpu è stato implementato il supporto per l'APU Cyan Skillfish (dotato di GPU Navi 1x). Per l'APU Yellow Carp è stata implementata la supporto per codec video. È stato migliorato il supporto per la GPU Aldebaran. Sono stati aggiunti nuovi identificatori per le schede basate su GPU Navi 24 «Beige Goby» e RDNA2. È stata proposta un'implementazione migliorata degli schermi virtuali (VKMS). È stato implementato il supporto per il monitoraggio della temperatura dei chip AMD Zen 3.
    • Nel driver amdkfd (per GPU discrete come Polaris) è stato realizzato un gestore di memoria virtuale condivisa (SVM, shared virtual memory) basato sul sottosistema HMM (Heterogeneous memory management), che consente di utilizzare dispositivi con propri blocchi di controllo della memoria (MMU, memory management unit) in grado di accedere alla memoria principale. Grazie a HMM, è possibile organizzare uno spazio di indirizzi condiviso tra GPU e CPU, in cui la GPU può accedere alla memoria principale del processo.
    • Nel driver i915 per schede video Intel è stata ampliata l'applicazione del gestore della memoria video TTM e inclusa la possibilità di gestione del consumo energetico basata su GuC (Graphics micro Controller). È iniziata la preparazione per l'implementazione del supporto per la scheda grafica Intel ARC Alchemist e GPU Intel Xe-HP.
    • Nel driver nouveau è stato implementato il controllo della retroilluminazione dei pannelli eDP tramite DPCD (DisplayPort Configuration Data).
    • Nel driver msm è stato aggiunto il supporto per GPU Adreno 7c Gen 3 e Adreno 680.
    • Per il chip Apple M1 è stato realizzato un driver IOMMU.
    • È stato aggiunto un driver audio per sistemi basati su APU AMD Van Gogh.
    • Nel ramo staging è stato aggiunto il driver Realtek R8188EU, che ha sostituito la versione precedente del driver (rtl8188eu) per i chip wireless Realtek RTL8188EU 802.11 b/g/n.
    • È stato accettato il driver ocp_pt per la scheda PCIe in sviluppo dalla società Meta (Facebook), con l'implementazione di orologi atomici miniaturizzati e di un ricevitore GNSS, utilizzabili per l'organizzazione della sincronizzazione del tempo preciso. server sincronizzazione del tempo preciso.
    • È stato aggiunto il supporto per gli smartphone Sony Xperia 10II (Snapdragon 665), Xiaomi Redmi 2 (Snapdragon MSM8916), Samsung Galaxy S3 (Snapdragon MSM8226), Samsung Gavini/Codina/Kyle.
    • È stato aggiunto il supporto per ARM SoC e le schede NVIDIA Jetson TX2 NX Developer Kit, Sancloud BBE Lite, PicoITX, DRC02, SolidRun SolidSense, SKOV i.MX6, Nitrogen8, Traverse Ten64, GW7902, Microchip SAMA7, Qualcomm Snapdragon SDM636/SM8150, Renesas R-Car H3e-2G/M3e-2G, Marvell CN913x, ASpeed AST2600 (schede server Facebook Cloudripper, Elbert e Fuji), 4KOpen STiH418-b2264.
    • È stata aggiunta la supporto per i pannelli LCD Gopher 2b, EDT ETM0350G0DH6/ETMV570G2DHU, LOGIC Technologies LTTD800480070-L6WH-RT, Multi-Innotechnology MI1010AIT-1CP1, Innolux EJ030NA 3.0, ilitek ili9341, E Ink VB3300-KCA, Samsung ATNA33XC20, Samsung DB7430, WideChips WS2401.
    • È stato aggiunto il driver LiteETH con supporto per i controller Ethernet usati nei SoC programmabili LiteX (per FPGA).
    • Nel driver usb-audio è stata aggiunta l'opzione lowlatency per gestire l'attivazione in modalità a bassa latenza. È stata anche aggiunta l'opzione quirk_flags per passare le impostazioni specifiche del dispositivo.

Contemporaneamente, il Fondo latinoamericano per il Software libero ha creato una versione completamente libera del kernel 5.15 — Linux-libre 5.15-gnu, priva di elementi di firmware e driver contenenti componenti o porzioni di codice proprietari, la cui area di applicazione è limitata dal produttore. La nuova versione include la registrazione di un messaggio nel log al termine della pulizia. Sono stati risolti problemi nella creazione di pacchetti utilizzando mkspec, migliorato il supporto per i pacchetti snap. Sono stati rimossi alcuni avvisi emessi durante l'elaborazione del file di intestazione firmware.h. È consentita la visualizzazione di alcuni tipi di avvisi ("format-extra-args", commenti, funzioni e variabili non utilizzate) durante la compilazione in modalità "-Werror". È stata aggiunta la pulizia del driver gehc-achc. È stato aggiornato il codice di pulizia dei blob nei driver e nei sottosistemi adreno, btusb, btintel, brcmfmac, aarch64 qcom. È stata interrotta la pulizia dei driver prism54 (rimossa) e rtl8188eu (sostituita con r8188eu).

Fonte: opennet.ru

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