Rilascio del kernel Linux 5.15

Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 5.15. Tra le modifiche più significative ci sono: un nuovo driver NTFS con supporto per la scrittura, il modulo ksmbd con implementazione di un server SMB, il sottosistema DAMON per il monitoraggio degli accessi alla memoria, primitive di blocco per la modalità in tempo reale, supporto per fs-verity in Btrfs, la chiamata di sistema process_mrelease per sistemi di risposta alla carenza di memoria, e un modulo di attestazione remota dm-ima.

Nella nuova versione sono stati inclusi 13499 correttivi da 1888 sviluppatori, la dimensione della patch è di 42 MB (le modifiche hanno interessato 10895 file, sono state aggiunte 632522 righe di codice e ne sono state eliminate 299966). Circa il 45% di tutte le modifiche presentate in 5.15 riguarda i driver di dispositivo, circa il 14% è relativo all'aggiornamento del codice specifico per architetture hardware, il 14% è collegato allo stack di rete, il 6% ai file system e il 3% ai sottosistemi interni del kernel.

Novità principali:

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

      In Btrfs è stata anche aggiunta la supporto al mapping degli identificatori utenti per i file system montati (precedentemente supportato per i file system FAT, ext4 e XFS). Questa funzionalità consente di associare file di un determinato utente su una partizione montata di un altro utente nel sistema attuale.

      Tra le altre novità in Btrfs: velocizzazione nell'aggiunta di chiavi all'indice della directory per migliorare le prestazioni nella creazione di file; possibilità di utilizzare raid0 con un solo dispositivo e raid10 con due (ad esempio, durante la reconfigurazione dell'array); opzione "rescue=ibadroots" per ignorare un albero di estensioni non valido; accelerazione dell'operazione "send"; riduzione dei conflitti di lock durante le operazioni di rinomina; possibilità di utilizzare settori da 4K su sistemi con dimensione della pagina di memoria da 64K.

    • In XFS è stata stabilizzata la possibilità di utilizzare sistemi di file con date oltre il 2038. Implementato un meccanismo di deattivazione differita degli inode e supporto per la gestione differita e l'eliminazione degli attributi dei file. Per evitare problemi, è stata rimossa la possibilità di disabilitare le quote disco per partizioni già montate (le quote possono essere disattivate forzatamente, ma il conteggio associato continuerà, quindi per una disattivazione completa è necessario il rimontaggio).
    • In EXT4 è stato effettuato un lavoro per aumentare le prestazioni di scrittura dei buffer del delalloc e la gestione dei file orfani, che continuano a esistere perché rimangono aperti, ma non sono più associati a una directory. La gestione delle operazioni di discard è stata spostata dal thread kthread di jbd2 per escludere i blocchi delle operazioni sui metadati.
    • In F2FS è stata aggiunta l'opzione "discard_unit=block|segment|section" per associare le operazioni di discard (marcatura dei blocchi liberati che non devono più essere fisicamente memorizzati) all'allineamento rispetto al blocco, settore, segmento o sezione. Aggiunto supporto per il monitoraggio della variazione dei ritardi nelle operazioni di input/output.
    • Nel file system EROFS (Extendable Read-Only File System) è stato aggiunto il supporto per l'input/output diretto per file salvati senza compressione, così come il supporto per fiemap.
    • In OverlayFS è stata implementata una corretta gestione delle bandiere di montaggio "immutable", "append-only", "sync" e "noatime".
    • In NFS è migliorata la gestione delle situazioni in cui il server NFS non rispondeva alle richieste. È stata aggiunta la possibilità di montare da un altro indirizzo di rete già utilizzato. server, ma accessibile tramite un altro indirizzo di rete.
    • È iniziata la preparazione per la riscrittura del sottosistema FSCACHE.
    • Aggiunto supporto per le partizioni EFI con posizionamento non standard delle tabelle GPT.
    • Nel meccanismo fanotify è stata implementata una nuova flag FAN_REPORT_PIDFD, che consente di fornire pidfd tra i metadati restituiti. Il pidfd aiuta a gestire situazioni di riutilizzo del PID per l'identificazione più precisa dei processi che accedono ai file monitorati (il pidfd è legato a un processo specifico e non cambia, mentre il PID può essere associato a un altro processo dopo la conclusione del processo corrente associato a quel PID).
    • Nel sistema di chiamata move_mount() è stata aggiunta la possibilità di aggiungere punti di montaggio a gruppi condivisi esistenti, risolvendo problemi con il salvataggio e il ripristino dello stato dei processi nel framework CRIU in presenza di più spazi di montaggio condivisi tra contenitori isolati.
    • È stata aggiunta una protezione contro gli stati di gara nascosti, che potrebbero potenzialmente danneggiare i file durante la lettura dalla cache mentre vengono elaborati gli spazi vuoti nel file.
    • È stata interrotta la supporto per i blocchi obbligatori (mandatory) dei file, implementati attraverso la chiamata ai sistemi di blocco che portano a modifiche del file. A causa di possibili stati di gara, questi blocchi erano considerati inaffidabili e sono stati dichiarati obsoleti molti anni fa.
    • È stata rimossa la sottosistema LightNVM, che permetteva di accedere direttamente a SSD bypassando il layer di emulazione. Il LightNVM ha perso significato con l'emergere degli standard NVMe, che prevedono la possibilità di zonizzazione (ZNS, Zoned Namespace).
  • Memoria e servizi di sistema
    • È stata implementata la sottosistema DAMON (Data Access MONitor), che permette di monitorare l'attività relativa all'accesso ai dati in memoria, in relazione a un processo selezionato in esecuzione nello spazio utente. La sottosistema consente di analizzare quali aree di memoria il processo ha utilizzato durante il suo funzionamento, e quali aree sono rimaste inutilizzate. Tra le caratteristiche di DAMON si evidenzia il basso carico sulla CPU, il ridotto consumo di memoria, l'alta precisione e spese fisse prevedibili, 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 fa esattamente un processo e ottimizzare l'uso della memoria, ad esempio liberando memoria superflua al sistema.
    • È stata implementata una chiamata di sistema process_mrelease, che accelera il processo di liberazione della memoria del processo che sta terminando la sua esecuzione. In condizioni normali, il rilascio delle risorse e la conclusione del processo non avvengono istantaneamente e possono essere ritardati per vari motivi, il che interferisce con il funzionamento dei sistemi di risposta rapida alla carenza di memoria operanti nello spazio utente, come oomd (fornito in systemd) e lmkd (utilizzato in Android). Con la chiamata process_mrelease, tali sistemi possono avviare in modo più prevedibile il rilascio di memoria dai processi terminati forzatamente.
    • Dalla branch del kernel PREEMPT_RT, in cui viene sviluppato il supporto per il funzionamento in tempo reale, sono stati trasferiti varianti di primitive per organizzare i blocchi mutex, ww_mutex, rw_semaphore, spinlock e rwlock, basate sul sottosistema RT-Mutex. Sono state apportate modifiche all'allocatore di slab SLUB che migliorano le prestazioni in modalità PREEMPT_RT e riducono l'impatto sulle interruzioni.
    • È stato aggiunto al cgroup il supporto per l'attributo del pianificatore di compiti SCHED_IDLE, permettendo di fornire tale indicazione a tutti i processi del gruppo facenti parte di un determinato cgroup. Cioè, questi processi saranno eseguiti solo quando non ci sono altre attività in attesa di esecuzione nel sistema. A differenza dell'impostazione dell'attributo SCHED_IDLE a ciascun processo singolarmente, legando SCHED_IDLE a un cgroup si tiene conto del peso relativo dei compiti all'interno del gruppo nella scelta di quale compito eseguire.
    • Il meccanismo di monitoraggio del consumo di memoria nel cgroup è stato ampliato con la possibilità di tracciare 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 l'assegnazione asimmetrica dei compiti ai nuclei dei processori su architetture in cui alcune CPU consentono l'esecuzione di compiti a 32 bit e altre funzionano solo in modalità a 64 bit (ad esempio, ARM). La nuova modalità consente, durante la pianificazione dell'esecuzione dei compiti a 32 bit, di considerare solo le CPU che supportano i compiti a 32 bit.
    • Nell'interfaccia dell'input/output asincrono io_uring è stata introdotta la possibilità di aprire file direttamente nella tabella degli indici fixed-file, senza utilizzare il descrittore di file, consentendo di accelerare notevolmente alcuni tipi di operazioni, ma contrastando il tradizionale processo Unix di utilizzo dei descrittori di file per aprire file.

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

    • Per i programmi BPF è stata realizzata la possibilità di richiedere e gestire eventi del timer. È stato aggiunto un iteratore per i socket UNIX, e inoltre è stata implementata la possibilità di ricevere e impostare le opzioni dei socket per setsockopt. Nel BTF dumper è stata aggiunta la supporto per i dati tipizzati.
    • Nei sistemi NUMA con diversi tipi di memoria, distinti per prestazioni, in caso di esaurimento dello spazio libero è stato implementato il trasferimento delle pagine di memoria espulse dalla memoria dinamica (DRAM) alla memoria persistente (Persistent Memory) anziché eliminare queste pagine. I test hanno dimostrato che tale tattica migliora generalmente 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 è stata implementata la supporto per tabelle delle pagine di memoria a tre e quattro livelli, il che consentirà in futuro il supporto per processori ARC a 64 bit.
    • Per l'architettura s390 è stata realizzata la possibilità di applicare il meccanismo KFENCE per rilevare errori nella gestione della memoria, ed è stata aggiunta la supporto per il rilevatore di condizioni di gara KCSAN.
    • È stata aggiunta la supporto per l'indicizzazione della lista dei messaggi emessi tramite printk(), che consente di estrarre rapidamente tutti questi messaggi 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 a un errore di blocco nella scrittura su file con errore ETXTBSY.
    • Nel sottosistema di tracciamento è stato aggiunto un nuovo tipo di controlli "Event probes", che possono essere collegati agli eventi di tracciamento esistenti, definendo un proprio formato di output.
    • Nella compilazione del kernel utilizzando il compilatore Clang, ora viene utilizzato per default l'assemblatore incorporato del progetto LLVM.
    • Nell'ambito del progetto per rimuovere dal kernel il codice che causa avvisi al compilatore, è stato condotto un esperimento abilitando di default la modalità "-Werror", in cui gli avvisi del compilatore vengono trattati come errori. Durante la preparazione del rilascio 5.15, Linus ha iniziato ad accettare solo modifiche che non causano avvisi durante la compilazione del kernel e ha attivato la compilazione con "-Werror", ma poi ha concordato con l'idea che tale decisione fosse prematura e ha rinviato l'attivazione di "-Werror" per impostazione predefinita. Il controllo dell'attivazione del flag "-Werror" durante la compilazione avviene tramite il parametro WERROR, che per impostazione predefinita è impostato su COMPILE_TEST, ossia attivato solo per le 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 garantirne l'autenticità. Nella pratica, dm-ima consente di creare attraverso Device Mapper archiviazioni legate a sistemi cloud esterni, in cui tramite IMA viene verificata la validità della configurazione DM target in esecuzione.
    • In prctl() è stata implementata una nuova opzione PR_SPEC_L1D_FLUSH, che, quando attivata, fa sì che il kernel inizi a svuotare il contenuto della cache di primo livello (L1D) ogni volta che viene effettuato un cambio di contesto. Questa modalità permette di implementare una protezione supplementare per i processi più importanti contro l'utilizzo di attacchi tramite canali laterali, condotti per determinare i dati memorizzati nella cache a causa di vulnerabilità causate dall'esecuzione speculativa delle istruzioni nella CPU. Il prezzo dell'attivazione di PR_SPEC_L1D_FLUSH (non attivato di default) è una notevole riduzione delle prestazioni.
    • È stata implementata 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 dal controllo della funzione. Questa opzione consente di proteggere contro la fuoriuscita di informazioni dalle funzioni e riduce del 20% il numero di blocchi adatti per costruire gadget ROP (Return-Oriented Programming) negli exploit.
    • È stata implementata la possibilità di compilare i kernel per l'architettura ARM64 in forma di client per il 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 applicare Virtio come mezzo di accesso dai sistemi guest.
    • È stato aggiunto un driver Virtio per il bus I2C, che consente di emulare controller I2C in modalità paravirtualizzazione utilizzando backend separati.
    • È stato aggiunto il 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 di dispositivi con supporto DMA su sistemi privi di I/O MMU (memory-management unit).
    • Nel hypervisor KVM è stata implementata la possibilità di esportare statistiche sotto forma di istogrammi lineari e logaritmici.
  • Sottosistema di rete
    • Nel kernel è stato aggiunto il modulo ksmbd con l'implementazione di un server di file che utilizza il protocollo SMB3. Il modulo completa la già disponibile implementazione del client SMB nel kernel e, a differenza del server SMB che opera nello spazio utente, è più efficiente dal punto di vista delle prestazioni, del consumo di memoria e dell'integrazione con le funzionalità avanzate del kernel. Ksmbd è presentato come un'estensione ad alte prestazioni e pronta per l'uso su dispositivi embedded di Samba, integrabile, se necessario, con strumenti e librerie Samba. Tra le funzionalità principali di ksmbd si evidenzia il migliorato supporto per la tecnologia di caching dei file distribuiti (SMB leases) nei sistemi locali, che permette di ridurre significativamente il traffico. In futuro è previsto l'aggiunta del supporto RDMA («smbdirect») e delle estensioni del protocollo relative al rafforzamento dell'affidabilità della crittografia e alla verifica delle firme digitali.
    • Nel client CIFS è stata interrotta la supporto per NTLM e per algoritmi di autenticazione meno sicuri basati sull'algoritmo DES utilizzati nel protocollo SMB1.
    • Nell'implementazione dei bridge di rete per vlan è stato introdotto il supporto per il multicast.
    • Nel driver bonding, utilizzato per aggregare le interfacce di rete, è stato aggiunto il supporto per il sottosistema XDP (eXpress Data Path), che consente di manipolare i pacchetti di rete prima della loro elaborazione da parte dello stack di rete del kernel Linux.
    • Nel stack wireless mac80211 è stato implementato il supporto per 6GHZ STA (Special Temporary Authorization) nelle modalità LPI, SP e VLP, nonché la possibilità di impostare TWT (Target Wake Time) separate in modalità punto di accesso.
    • È stato aggiunto il supporto per il protocollo MCTP (Management Component Transport Protocol), utilizzato per interagire con i controller di gestione e i dispositivi ad essi associati (processori host, dispositivi periferici, ecc.).
    • È proseguita l'integrazione nel kernel di MPTCP (MultiPath TCP), un'estensione del protocollo TCP per organizzare il lavoro delle connessioni TCP con la consegna dei pacchetti simultaneamente attraverso più percorsi tramite diverse interfacce di rete associate a diversi indirizzi IP. Nella nuova versione è stato aggiunto il supporto per indirizzi in modalità fullmesh.
    • In netfilter sono stati aggiunti i gestori delle reti incapsulati nel protocollo SRv6 (Segment Routing IPv6).
    • È stato aggiunto il supporto per sockmap per socket Unix a flusso.
  • Apparecchiatura
    • Nel driver amdgpu è stato implementato il supporto per APU Cyan Skillfish (dotati di GPU Navi 1x). Per APU Yellow Carp è stato implementato il supporto per i codec video. È stato migliorato il supporto per GPU Aldebaran. Sono stati aggiunti nuovi identificatori per 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 implementato un gestore della memoria virtuale condivisa (SVM, shared virtual memory) basato sul sottosistema HMM (Heterogeneous memory management), che consente di utilizzare dispositivi con propri blocchi di gestione della memoria (MMU, memory management unit) che possono accedere alla memoria principale. Inoltre, tramite HMM è possibile organizzare uno spazio di indirizzamento condiviso tra GPU e CPU, in cui la GPU può accedere alla memoria principale del processo.
    • Nel driver i915 per schede grafiche 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 implementare il supporto per la scheda grafica Intel ARC Alchemist e GPU Intel Xe-HP.
    • Nel driver nouveau è implementato il controllo della retroilluminazione dei pannelli eDP tramite DPCD (DisplayPort Configuration Data).
    • Nel driver msm è stata aggiunta la supporto per GPU Adreno 7c Gen 3 e Adreno 680.
    • Per il chip Apple M1 è stato implementato il 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 vecchia versione del driver (rtl8188eu) per chip wireless Realtek RTL8188EU 802.11 b/g/n.
    • È stato accettato il driver ocp_pt per la scheda PCIe sviluppata dall'azienda Meta (Facebook) con realizzazione di orologi atomici miniaturizzati e ricevitore GNSS, che possono essere utilizzati per organizzare il lavoro di sincronizzazione del tempo preciso. server sincronizzazione del tempo preciso.
    • È stato aggiunto il supporto per 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 i SoC ARM 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.
    • È stato aggiunto il 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, Samsung DB7430, WideChips WS2401.
    • È stato aggiunto il driver LiteETH con supporto per i controller Ethernet utilizzati nei SoC programmabili LiteX (per FPGA).
    • Nel driver usb-audio è stata aggiunta l'opzione lowlatency per gestire l'attivazione del funzionamento in modalità a bassa latenza. È stata anche aggiunta l'opzione quirk_flags per trasmettere impostazioni specifiche per il dispositivo.

In contemporanea, il Fondo latinoamericano del software libero ha creato una versione completamente libera del kernel 5.15 — Linux-libre 5.15-gnu, ripulito da elementi di firmware e driver contenenti componenti non liberi o sezioni di codice la cui utilizzazione è limitata dal produttore. Nella nuova versione è stato implementato il log del messaggio di completamento della pulizia. Sono stati risolti i problemi nella creazione dei pacchetti utilizzando mkspec e migliorato il supporto ai pacchetti snap. Rimosse alcune avvertenze emesse durante l'elaborazione del file di intestazione firmware.h. Consentita l'emissione di alcuni tipi di avvertenze («format-extra-args», commenti, funzioni e variabili non utilizzate) durante la compilazione in modalità «-Werror». Aggiunta la pulizia del driver gehc-achc. Aggiornato il codice di pulizia dei blob nei driver e sottosistemi adreno, btusb, btintel, brcmfmac, aarch64 qcom. Interrotta la pulizia dei driver prism54 (rimossa) e rtl8188eu (sostituita da r8188eu).

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