Rilascio del kernel Linux 5.15

Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 5.15. Le modifiche degne di nota includono: nuovo driver NTFS con supporto di scrittura, modulo ksmbd con implementazione del server SMB, sottosistema DAMON per il monitoraggio dell'accesso alla memoria, primitive di blocco in tempo reale, supporto fs-verity in Btrfs, chiamata di sistema process_mrelease per la memoria dei sistemi di risposta alla fame, modulo di certificazione remota dm-ima.

La nuova versione include 13499 correzioni da 1888 sviluppatori, la dimensione della patch è di 42 MB (le modifiche hanno interessato 10895 file, sono state aggiunte 632522 righe di codice, 299966 righe sono state cancellate). Circa il 45% di tutte le modifiche introdotte nella versione 5.15 sono correlate ai driver di dispositivo, circa il 14% delle modifiche è correlato all'aggiornamento del codice specifico delle architetture hardware, il 14% è correlato allo stack di rete, il 6% è correlato ai file system e il 3% sono legati ai sottosistemi interni del kernel.

Principali innovazioni:

  • Sottosistema disco, I/O e file system
    • Il kernel ha adottato una nuova implementazione del file system NTFS, aperto da Paragon Software. Il nuovo driver può funzionare in modalità di scrittura e supporta tutte le funzionalità dell'attuale versione di NTFS 3.1, inclusi attributi di file estesi, elenchi di accesso (ACL), modalità di compressione dei dati, lavoro efficace con spazi vuoti nei file (sparse) e riproduzione delle modifiche da il registro per ripristinare l'integrità dopo gli errori.
    • Il file system Btrfs implementa il supporto per il meccanismo fs-verity, che viene utilizzato per controllare in modo trasparente l'integrità e l'autenticità dei singoli file utilizzando hash crittografici o chiavi associati ai file, archiviati nell'area dei metadati. In precedenza, fs-verity era disponibile solo per i file system Ext4 e F2fs.

      Btrfs aggiunge anche il supporto per la mappatura degli ID utente per i file system montati (precedentemente supportato per i file system FAT, ext4 e XFS). Questa funzionalità consente di confrontare i file di un utente specifico su una partizione esterna montata con un altro utente sul sistema corrente.

      Altre modifiche a Btrfs includono: aggiunta più rapida di chiavi all'indice delle directory per migliorare le prestazioni di creazione dei file; la possibilità di lavorare raid0 con un dispositivo e raid10 con due (ad esempio, durante il processo di riconfigurazione dell'array); opzione “rescue=ibadroots” per ignorare un albero di estensione errato; accelerazione dell'operazione di “invio”; riduzione dei conflitti di blocco durante le operazioni di ridenominazione; la possibilità di utilizzare settori da 4K su sistemi con una dimensione della pagina di memoria di 64K.

    • In XFS è stata stabilizzata la possibilità di utilizzare date successive al 2038 nel file system. Implementato un meccanismo per la disattivazione ritardata degli inode e supporto per l'installazione ritardata e la rimozione degli attributi dei file. Per eliminare i problemi, è stata rimossa la possibilità di disabilitare le quote disco per le partizioni già montate (è possibile disabilitare forzatamente le quote, ma il calcolo ad esse associato continuerà, quindi è necessario rimontarle per disabilitarle completamente).
    • In EXT4 è stato fatto del lavoro per aumentare le prestazioni di scrittura dei buffer delalloc e di elaborazione dei file orfani che continuano ad esistere perché rimangono aperti, ma non sono associati a una directory. L'elaborazione delle operazioni di scarto è stata spostata fuori dal thread kthread jbd2 per evitare di bloccare le operazioni con i metadati.
    • F2FS ha aggiunto l'opzione "discard_unit=block|segment|section" per associare le operazioni di scarto (segnando i blocchi liberati che potrebbero non essere più archiviati fisicamente) all'allineamento relativo ad un blocco, settore, segmento o sezione. Aggiunto supporto per tenere traccia delle modifiche nella latenza I/O.
    • Il file system EROFS (Extendable Read-Only File System) aggiunge il supporto I/O diretto per i file salvati senza compressione, oltre al supporto fiemap.
    • OverlayFS implementa la corretta gestione dei flag di montaggio "immutable", "append-only", "sync" e "noatime".
    • NFS ha migliorato la gestione delle situazioni in cui il server NFS smette di rispondere alle richieste. Aggiunta la possibilità di montare da un server già in uso, ma accessibile tramite un indirizzo di rete diverso.
    • Sono iniziati i preparativi per la riscrittura del sottosistema FSCACHE.
    • Aggiunto supporto per partizioni EFI con posizionamento non standard delle tabelle GPT.
    • Il meccanismo fanotify implementa un nuovo flag, FAN_REPORT_PIDFD, che fa sì che pidfd venga incluso nei metadati restituiti. Pidfd aiuta a gestire le situazioni di riutilizzo del PID per identificare in modo più accurato i processi che accedono ai file monitorati (un pidfd è associato a un processo specifico e non cambia, mentre un PID può essere associato a un altro processo dopo che il processo corrente associato a quel PID termina).
    • Aggiunta la possibilità di aggiungere punti di montaggio ai gruppi condivisi esistenti alla chiamata di sistema move_mount(), che risolve i problemi con il salvataggio e il ripristino dello stato del processo in CRIU quando sono presenti più spazi di montaggio condivisi in contenitori isolati.
    • Aggiunta protezione contro race conditions nascoste che potrebbero potenzialmente causare il danneggiamento dei file durante l'esecuzione di letture della cache durante l'elaborazione dei vuoti in un file.
    • Il supporto per il blocco obbligatorio (obbligatorio) dei file, implementato tramite il blocco delle chiamate di sistema che portano a una modifica del file, è stato interrotto. A causa delle possibili condizioni di gara, questi blocchi erano considerati inaffidabili e furono deprecati molti anni fa.
    • È stato rimosso il sottosistema LightNVM che consentiva l'accesso diretto all'unità SSD, bypassando il livello di emulazione. LightNVM ha perso il suo significato dopo l'avvento degli standard NVMe che prevedono la zonizzazione (ZNS, Zoned Namespace).
  • Servizi di memoria e di sistema
    • È stato implementato il sottosistema DAMON (Data Access MONitor) che consente di monitorare l'attività relativa all'accesso ai dati nella RAM in relazione ad un processo selezionato in esecuzione nello spazio utente. Il sottosistema consente di analizzare a quali aree di memoria ha avuto accesso il processo durante il suo intero funzionamento e quali aree di memoria sono rimaste non richieste. DAMON è caratterizzato da un basso carico della CPU, un basso consumo di memoria, un'elevata precisione e un sovraccarico costante e prevedibile, indipendentemente dalle dimensioni. Il sottosistema può essere utilizzato sia dal kernel per ottimizzare la gestione della memoria, sia dalle utilità nello spazio utente per capire cosa sta facendo esattamente un processo e ottimizzare l'uso della memoria, ad esempio, liberando memoria in eccesso per il sistema.
    • La chiamata di sistema process_mrelease è stata implementata per velocizzare il processo di rilascio della memoria di un processo che completa la sua esecuzione. In circostanze normali, il rilascio delle risorse e la conclusione del processo non sono istantanei e possono essere ritardati per vari motivi, interferendo con i sistemi di risposta anticipata della memoria dello spazio utente come oomd (fornito da systemd) e lmkd (utilizzato da Android). Chiamando process_mrelease, tali sistemi possono innescare in modo più prevedibile il recupero della memoria dai processi forzati.
    • Dal ramo del kernel PREEMPT_RT, che sviluppa il supporto per il funzionamento in tempo reale, sono state trasferite varianti delle primitive per l'organizzazione dei lock mutex, ww_mutex, rw_semaphore, spinlock e rwlock, basate sul sottosistema RT-Mutex. Sono state aggiunte modifiche all'allocatore di lastre SLUB per migliorare il funzionamento in modalità PREEMPT_RT e ridurre l'impatto sugli interrupt.
    • Il supporto per l'attributo del pianificatore di attività SCHED_IDLE è stato aggiunto a cgroup, consentendo di fornire questo attributo a tutti i processi di un gruppo incluso in uno specifico cgroup. Quelli. questi processi verranno eseguiti solo quando non ci sono altre attività in attesa di essere eseguite sul sistema. A differenza dell'impostazione dell'attributo SCHED_IDLE su ciascun processo individualmente, quando si associa SCHED_IDLE a un cgroup, il peso relativo delle attività all'interno del gruppo viene preso in considerazione quando si seleziona un'attività da eseguire.
    • Il meccanismo per tenere conto del consumo di memoria in cgroup è stato ampliato con la possibilità di tenere traccia di ulteriori strutture dati del kernel, comprese quelle create per il polling, l'elaborazione del segnale e gli spazi dei nomi.
    • Aggiunto il supporto per la pianificazione asimmetrica dell'associazione delle attività ai core del processore su architetture in cui alcune CPU consentono l'esecuzione di attività a 32 bit e alcune 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 delle attività a 32 bit.
    • L'interfaccia I/O asincrona io_uring ora supporta l'apertura dei file direttamente nella tabella dell'indice dei file fissi, senza utilizzare un descrittore di file, il che consente di velocizzare notevolmente alcuni tipi di operazioni, ma va contro il tradizionale processo Unix di utilizzo dei descrittori di file per aprire i file.

      io_uring per il sottosistema BIO (Block I/O Layer) implementa un nuovo meccanismo di riciclo (“BIO recycle”), che riduce l'overhead nel processo di gestione della memoria interna e aumenta il numero di operazioni I/O elaborate al secondo di circa il 10% . io_uring aggiunge anche il supporto per le chiamate di sistema mkdirat(), symlinkat() e linkat().

    • Per i programmi BPF è stata implementata la possibilità di richiedere ed elaborare eventi timer. È stato aggiunto un iteratore per i socket UNIX ed è stata implementata la possibilità di ottenere e impostare le opzioni socket per setsockopt. Il dumper BTF ora supporta i dati digitati.
    • Sui sistemi NUMA con diversi tipi di memoria che differiscono in termini di prestazioni, quando lo spazio libero è esaurito, le pagine di memoria eliminate vengono trasferite dalla memoria dinamica (DRAM) alla memoria permanente più lenta (memoria persistente) invece di eliminare queste pagine. I test hanno dimostrato che tali tattiche solitamente migliorano le prestazioni su tali sistemi. NUMA offre inoltre 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 tabelle di pagine di memoria a tre e quattro livelli, che consentiranno ulteriormente il supporto per i processori ARC a 64 bit.
    • Per l'architettura s390 è stata implementata la possibilità di utilizzare il meccanismo KFENCE per rilevare errori quando si lavora con la memoria ed è stato aggiunto il supporto per il rilevatore di condizioni di competizione KCSAN.
    • Aggiunto il supporto per l'indicizzazione dell'elenco dei messaggi emessi tramite printk(), consentendo di recuperare tutti questi messaggi contemporaneamente e tenere traccia delle modifiche nello spazio utente.
    • mmap() ha rimosso il supporto per l'opzione VM_DENYWRITE e al codice del kernel è stato rimosso l'utilizzo della modalità MAP_DENYWRITE, che ha ridotto il numero di situazioni che portano al blocco delle scritture su un file con l'errore ETXTBSY.
    • Un nuovo tipo di controlli, "Probe evento", è stato aggiunto al sottosistema di tracciamento, che può essere collegato agli eventi di tracciamento esistenti, definendo il proprio formato di output.
    • Quando si compila il kernel utilizzando il compilatore Clang, ora viene utilizzato l'assemblatore predefinito del progetto LLVM.
    • Nell'ambito di un progetto per liberare il kernel dal codice che porta alla generazione di avvisi da parte del compilatore, è stato effettuato un esperimento con la modalità "-Werror" abilitata per impostazione predefinita, in cui gli avvisi del compilatore vengono elaborati come errori. In preparazione al rilascio 5.15, Linus iniziò ad accettare solo modifiche che non generassero avvisi durante la compilazione del kernel e abilitasse la compilazione con "-Werror", ma poi concordò che tale decisione era prematura e ritardata abilitando "-Werror" per impostazione predefinita . L'inclusione del flag "-Werror" durante l'assemblaggio viene controllata utilizzando il parametro WERROR, che è impostato su COMPILE_TEST per impostazione predefinita, ovvero Per ora è abilitato solo per build di prova.
  • Virtualizzazione e sicurezza
    • Un nuovo gestore dm-ima è stato aggiunto a Device Mapper (DM) con l'implementazione di un meccanismo di certificazione remota basato sul sottosistema IMA (Integrity Measurement Architecture), che consente ad un servizio esterno di verificare lo stato dei sottosistemi del kernel per garantirne l'autenticità . In pratica dm-ima permette di creare storage tramite Device Mapper collegati a sistemi cloud esterni, in cui tramite IMA viene verificata la validità della configurazione del target DM lanciato.
    • prctl() implementa una nuova opzione PR_SPEC_L1D_FLUSH che, quando abilitata, fa sì che il kernel scarichi il contenuto della cache di primo livello (L1D) ogni volta che si verifica un cambio di contesto. Questa modalità consente, selettivamente per i processi più importanti, di implementare una protezione aggiuntiva contro l'uso di attacchi side-channel effettuati per determinare i dati depositati nella cache a seguito di vulnerabilità causate dall'esecuzione speculativa di istruzioni nella CPU. Il costo dell'abilitazione di PR_SPEC_L1D_FLUSH (non abilitato per impostazione predefinita) rappresenta una significativa riduzione delle prestazioni.
    • È possibile costruire il kernel con l'aggiunta del flag “-fzero-call-used-regs=used-gpr” a GCC, che garantisce che tutti i registri vengano reimpostati a zero prima di restituire il controllo dalla funzione. Questa opzione consente di proteggersi dalla fuga di informazioni dalle funzioni e di ridurre del 20% il numero di blocchi adatti alla creazione di gadget ROP (Return-Oriented Programming) negli exploit.
    • È stata implementata la possibilità di creare kernel per l'architettura ARM64 sotto forma di client per l'hypervisor Hyper-V.
    • Viene proposto un nuovo framework di sviluppo driver “VDUSE”, che consente di implementare dispositivi a blocchi virtuali nello spazio utente e di utilizzare Virtio come trasporto per l'accesso dai sistemi ospiti.
    • Aggiunto driver Virtio per il bus I2C, rendendo possibile emulare i controller I2C in modalità paravirtualizzazione utilizzando backend separati.
    • Aggiunto il driver Virtio gpio-virtio per consentire agli ospiti di accedere alle linee GPIO fornite dal sistema host.
    • Aggiunta la possibilità di limitare l'accesso alle pagine di memoria per i driver di dispositivo con supporto DMA su sistemi senza I/O MMU (unità di gestione della memoria).
    • L'hypervisor KVM ha la capacità di visualizzare statistiche sotto forma di istogrammi lineari e logaritmici.
  • Sottosistema di rete
    • Il modulo ksmbd è stato aggiunto al kernel con l'implementazione di un file server utilizzando il protocollo SMB3. Il modulo integra l'implementazione del client SMB precedentemente disponibile nel kernel e, a differenza del server SMB in esecuzione nello spazio utente, è più efficiente in termini di prestazioni, consumo di memoria e integrazione con funzionalità avanzate del kernel. Ksmbd è pubblicizzato come un'estensione Samba ad alte prestazioni e pronta per l'integrazione che si integra con gli strumenti e le librerie Samba secondo necessità. Le funzionalità di ksmbd includono un supporto migliorato per la tecnologia di caching dei file distribuiti (lease SMB) sui sistemi locali, che può ridurre significativamente il traffico. In futuro, prevedono di aggiungere il supporto per RDMA (“smbdirect”) e le estensioni del protocollo relative all’aumento dell’affidabilità della crittografia e della verifica utilizzando le firme digitali.
    • Il client CIFS non supporta più NTLM e gli algoritmi di autenticazione più deboli basati su DES utilizzati nel protocollo SMB1.
    • Il supporto multicast è implementato nell'implementazione dei bridge di rete per vlan.
    • Il driver di bonding, utilizzato per aggregare le interfacce di rete, ha aggiunto il supporto per il sottosistema XDP (eXpress Data Path), che consente di manipolare i pacchetti di rete nella fase precedente all'elaborazione da parte dello stack di rete del kernel Linux.
    • Lo stack wireless mac80211 supporta 6GHZ STA (Special Temporary Authorization) nelle modalità LPI, SP e VLP, oltre alla possibilità di impostare TWT (Target Wake Time) individuali in modalità access point.
    • Aggiunto il supporto per MCTP (Management Component Transport Protocol), utilizzato per l'interazione tra i controller di gestione e i dispositivi associati (processori host, dispositivi periferici, ecc.).
    • Integrazione nel nucleo di 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. La nuova versione aggiunge il supporto per gli indirizzi in modalità fullmesh.
    • I gestori per i flussi di rete incapsulati nel protocollo SRv6 (Segment Routing IPv6) sono stati aggiunti a netfilter.
    • Aggiunto il supporto sockmap per i socket di streaming Unix.
  • Attrezzatura
    • Il driver amdgpu supporta le APU Cyan Skillfish (dotate di GPU Navi 1x). L'APU Yellow Carp ora supporta i codec video. Supporto GPU Aldebaran migliorato. Aggiunti nuovi identificatori di mappa basati su GPU Navi 24 “Beige Goby” e RDNA2. Viene proposta una migliore implementazione degli schermi virtuali (VKMS). È stato implementato il supporto per il monitoraggio della temperatura dei chip AMD Zen 3.
    • Il driver amdkfd (per GPU discrete, come Polaris) implementa un gestore di memoria virtuale condivisa (SVM, shared virtual memory) basato sul sottosistema HMM (Heterogeneous memory management), che consente l'utilizzo di dispositivi con le proprie unità di gestione della memoria (MMU , unità di gestione della memoria), che può accedere alla memoria principale. In particolare, utilizzando HMM, è possibile organizzare uno spazio di indirizzi condiviso tra GPU e CPU, in cui la GPU può accedere alla memoria principale del processo.
    • Il driver i915 per le schede video Intel espande l'utilizzo del gestore della memoria video TTM e include la possibilità di gestire il consumo energetico in base al GuC (Graphics micro Controller). Sono iniziati i preparativi per l'implementazione del supporto per la scheda grafica Intel ARC Alchemist e la GPU Intel Xe-HP.
    • Il driver nouveau implementa il controllo della retroilluminazione per i pannelli eDP utilizzando DPCD (DisplayPort Configuration Data).
    • Aggiunto il supporto per le GPU Adreno 7c Gen 3 e Adreno 680 al driver msm.
    • Il driver IOMMU è implementato per il chip Apple M1.
    • Aggiunto driver audio per sistemi basati su APU AMD Van Gogh.
    • Al ramo di staging è stato aggiunto il driver Realtek R8188EU, che ha sostituito la vecchia versione del driver (rtl8188eu) per i chip wireless Realtek RTL8188EU 802.11 b/g/n.
    • Per la scheda PCIe sviluppata da Meta (Facebook) con l'implementazione di un orologio atomico in miniatura e un ricevitore GNSS è incluso il driver ocp_pt, con il quale è possibile organizzare il funzionamento di server separati per la sincronizzazione dell'ora esatta.
    • 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.
    • Aggiunto supporto per ARM SoС e NVIDIA Jetson TX2 NX Developer Kit, Sancloud BBE Lite, PicoITX, DRC02, SolidRun SolidSense, SKOV i.MX6, Nitrogen8, Traverse Ten64, GW7902, Microchip SAMA7, ualcomm Snapdragon SDM636/SM8150, Renesas R-Car H3e schede -2G/M3e-2G, Marvell CN913x, ASpeed ​​​​AST2600 (schede server Facebook Cloudripper, Elbert e Fuji), 4KOpen STiH418-b2264.
    • Aggiunto supporto per 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 7430 , Samsung DB2401, WideChips WSXNUMX .
    • Aggiunto driver LiteETH con supporto per controller Ethernet utilizzati nei SoC software LiteX (per FPGA).
    • Un'opzione di bassa latenza è stata aggiunta al driver audio USB per controllare l'inclusione del funzionamento nella modalità di latenza minima. Aggiunta anche l'opzione quirk_flags per passare le impostazioni specifiche del dispositivo.

Allo stesso tempo, la Latin American Free Software Foundation ha formato una versione del kernel 5.15 completamente gratuita - Linux-libre 5.15-gnu, ripulita da elementi di firmware e driver contenenti componenti non liberi o sezioni di codice, la cui portata è limitata dal produttore. La nuova versione implementa l'output di un messaggio nel registro relativo al completamento della pulizia. I problemi con la generazione di pacchetti utilizzando mkspec sono stati risolti, il supporto per i pacchetti snap è stato migliorato. Rimossi alcuni avvisi visualizzati durante l'elaborazione del file di intestazione firmware.h. Consentito l'output di alcuni tipi di avvisi ("format-extra-args", commenti, funzioni e variabili non utilizzate) durante la compilazione in modalità "-Werror". Aggiunta la pulizia del driver gehc-achc. Codice di pulizia blob aggiornato nei driver e sottosistemi adreno, btusb, btintel, brcmfmac, aarch64 qcom. La pulizia dei driver prism54 (rimosso) e rtl8188eu (sostituito da r8188eu) è stata interrotta.

Fonte: opennet.ru

Aggiungi un commento