Rilascio del kernel Linux 7.0

Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 7.0. Tra le modifiche più significative ci sono: le regole per l'uso degli assistenti AI, l'inclusione di Rust tra le funzionalità principali del kernel, il miglioramento delle prestazioni di swap, l'attivazione predefinita della modalità PREEMPT_LAZY, il supporto dei filtri per le operazioni io_uring, il nuovo file system Nullfs, l'infrastruttura fserror, gli strumenti di monitoraggio XFS, la supporto per il remapping in Btrfs, l'attivazione predefinita della versione NFS 4.1, l'integrazione dell'algoritmo crittografico post-quantistico ML-DSA, l'attivazione di AccECN nel sottosistema di rete, e il supporto iniziale per WiFi 8.

Il numero 7.0 è stato assegnato poiché nella serie 6.x si sono accumulati sufficienti rilasci per cambiare il primo numero nella versione (in passato, il rilascio 6.0 è stato creato subito dopo il 5.19). Il cambio di numerazione avviene per ragioni estetiche ed è un passo formale che allevia il disagio causato dall'accumulo di un gran numero di rilasci nella serie.

Nella nuova versione sono stati apportati 15624 correzioni da 2477 sviluppatori; la dimensione della patch è di 56 MB (le modifiche hanno interessato 18053 file, aggiungendo 704060 righe di codice e rimuovendone 278132). Nella precedente versione c'erano 15657 correzioni da 2237 sviluppatori, con una dimensione della patch di 52 MB. Circa il 51% di tutte le modifiche presentate in 7.0 riguardano i driver dei dispositivi, circa l'11% è relativo all'aggiornamento del codice specifico per le architetture hardware, il 14% è legato allo stack di rete, il 5% ai file system e il 3% ai sottosistemi interni del kernel.

Novità principali nel kernel 7.0 (1, 2, 3):

  • Sottosistema disco, I/O e file system
    • È stata implementata l'infrastruttura fserror e aggiunto un API per ottenere informazioni sugli errori di I/O e sulla corruzione dei metadati durante la manipolazione dei file. L'infrastruttura proposta unifica nelle file system la trasmissione delle informazioni sugli errori nello spazio utente tramite il meccanismo fsnotify.
    • In XFS sono state aggiunte nuove funzionalità per il monitoraggio dello stato del file system dallo spazio utente. È stata proposta un'operazione ioctl XFS_IOC_HEALTH_MONITOR, che restituisce un descrittore di file attraverso il quale è possibile ottenere informazioni sugli errori legati ai danni ai metadati o che si verificano durante l'input/output, oltre a monitorare i cambiamenti di stato del file system, come smontaggio e spegnimento. Inoltre, è stato proposto un processo in background gestito tramite systemd, xfs_healer, che gestisce eventi di stato del file system dallo spazio utente e avvia automaticamente le procedure di ripristino se necessario.
    • Nel file system Btrfs è stato introdotto il supporto sperimentale per la struttura di "albero di rimappatura" (remap tree), che in futuro potrebbe essere utilizzata come strato intermedio durante le operazioni di input/output. La novità consiste nel fatto che dopo lo spostamento dei dati sul dispositivo, anziché aggiornare tutte le strutture correlate a questi dati, nella struttura aggiuntiva "remap tree" vengono salvati gli indirizzi vecchi e nuovi dei dati, permettendo così di sostituire gli indirizzi durante l'accesso ai dati. Questo nuovo approccio è presentato come più affidabile e flessibile, semplificando anche l'espansione futura della funzionalità di Btrfs.
    • In Btrfs è implementato il supporto per l'input/output diretto in situazioni in cui la dimensione del blocco supera la dimensione della pagina di memoria nel sistema.
    • È stata introdotta un nuovo file system «Nullfs», che può essere utilizzato come placeholder per il file system radice. Il file system Nullfs è sempre vuoto, non contiene dati e non supporta modifiche. La finalità di Nullfs è di fungere da file system iniziale per semplificare il processo di avvio del sistema — su Nullfs vengono successivamente montati altri file system e viene utilizzata la chiamata di sistema pivot_root() per cambiare il file system radice invece di pulire il contenuto dell'initramfs e utilizzare il relativo file system radice.
    • È stata implementata l'aggiornamento delle informazioni sul tempo di modifica dei file in modalità non bloccante. In precedenza, la chiamata file_update_time_flags() con il flag IOCB_NOWAIT restituiva l'errore «-EAGAIN», il che impediva di utilizzare operazioni di scrittura diretta in modalità non bloccante.
    • Nei file system, il supporto per le blocchi di notifica (lease) è stato trasferito a un elenco di opzioni separatamente abilitabili. Di default, questo meccanismo non è più attivato a causa di problemi con i file system che inizialmente non erano progettati per il suo utilizzo. Ad esempio, i file system 9p e cephfs non lo supportano.
    • Nel file system EROFS (Extendable Read-Only File System), progettato per sezioni accessibili in sola lettura, è utilizzato l'algoritmo LZMA per la compressione predefinita. Sono disponibili, in modo opzionale, gli algoritmi DEFLATE e Zstandard, che non sono più contrassegnati come sperimentali. È implementata la condivisione di registrazioni nella cache delle pagine per file identici in file system EROFS separati.
    • È stata rimossa la modalità laptop_mode, che risparmia energia ritardando e aggregando le operazioni di scrittura sul disco rigido per prolungare il tempo di inattività del disco e ridurre il numero di riattivazioni. Tale modalità ha perso rilevanza, poiché nei moderni dispositivi mobili i dischi rigidi sono stati sostituiti da unità a stato solido.
    • Il file system F2FS è stato aggiornato per utilizzare grandi volumi di pagine di memoria.
    • È stata riavviata la lavorazione del driver ntfs3, sviluppato da Paragon Software. È stata aggiunta la supporto per le operazioni sui file basate su iomap, implementate le opzioni llseek SEEK_DATA/SEEK_HOLE e aggiunto il modo del delalloc per l'allocazione ritardata dei blocchi. Nel frattempo, nella mailing list degli sviluppatori del kernel di febbraio è stata approvata l'inclusione in una delle future versioni del kernel della nuova implementazione NTFS — ntfsplus, progettata per sostituire ntfs3.
    • Per impostazione predefinita, durante la compilazione è inclusa la versione del protocollo NFS 4.1 (CONFIG_NFS_V4_1). È stata garantita la blocco delle esportazioni tramite NFS di pseudo-FS specializzati, come pidfs e nsfs. In NFSD è stata implementata una funzionalità sperimentale che consente di utilizzare POSIX ACL ed è stata aggiunta la supporto per il cambiamento dinamico del pool di thread (thread-pool) in base al carico.
  • Memoria e servizi di sistema
    • Sono state approvate le regole ufficiali per l'uso degli assistenti AI e l'inclusione del contenuto generato automaticamente nel core. Durante la trasmissione del codice generato, è necessario contrassegnarlo indicando l'assistente AI utilizzato tramite il tag "Assisted-by". Gli assistenti AI non possono aggiungere il tag "Signed-off-by"; la persona che ha inviato la patch è considerata l'autore, è responsabile della modifica trasmessa e ne garantisce la qualità. Si richiede agli sviluppatori di eseguire una revisione manuale del codice ottenuto tramite AI e di verificare la conformità del risultato ai requisiti di licenza.
    • Il supporto per Rust è stato spostato da funzionalità sperimentali a caratteristiche principali del core. Il supporto per Rust non è attivato per impostazione predefinita e non comporta l'inclusione di Rust tra le dipendenze di compilazione obbligatorie nel core.
    • Completata l'integrazione nel nucleo del meccanismo 'Swap Table', che consente di aumentare le prestazioni della paginazione. L'accelerazione è ottenuta grazie alla riduzione della competizione per l'accesso alla cache di pagina, una ricerca più efficace nella cache e una diminuzione della frammentazione. Il backend basato su Swap Table è utilizzato per la cache della paginazione invece del backend XArray ed ha consentito, nel test redis-benchmark con BGSAVE, di aumentare del 22% il numero di richieste elaborate.
    • Aggiunta la supporto per l'estensione Thread Safety Analysis introdotta in Clang 22, che consente di identificare durante la compilazione potenziali stati di concorrenza e errori causati da un'impostazione incorretta dei blocchi. L'estensione offre una serie di attributi, come GUARDED_BY(…), REQUIRES(…), RELEASE(…) e ACQUIRE(…), che permettono di contrassegnare le funzioni soggette a blocchi e separare i contesti di applicazione dei blocchi. Durante la fase di compilazione, viene eseguita una verifica della correttezza nell'uso dei primitive di sincronizzazione, come i mutex, basata sulla valutazione dell'attività o inattività del contesto ad essi associato.
    • Nella chiamata di sistema open_tree è stato aggiunto il flag OPEN_TREE_NAMESPACE per semplificare la configurazione dei container isolati e accelerare l'avvio dei container su sistemi con un gran numero di punti di montaggio. Analogamente a OPEN_TREE_CLONE, il nuovo flag copia solo l'albero di montaggio specificato, ma invece di restituire un file descriptor locale, restituisce un file descriptor in un nuovo spazio dei nomi dei punti di montaggio, nel quale l'albero copiato è montato sopra la copia del file system radice reale. Il flag OPEN_TREE_NAMESPACE è richiesto per abbandonare l'esecuzione separata delle operazioni unshare(CLONE_NEWNS) e pivot_root(), utilizzate nella creazione dei container.
    • Nella chiamata di sistema rseq è stato aggiunto un meccanismo di estensione dei quanti di tempo, che consente di ottenere ulteriore tempo di elaborazione per l'esecuzione ininterrotta di una sezione critica. L'idea è quella di evitare l'interruzione della sezione critica da parte dello scheduler dei compiti quando è impostato un blocco, il che porterebbe al passaggio di controllo ad altri thread utilizzando risorse su cui rimane un blocco attivo. L'estensione del quanti di tempo avviene senza costi aggiuntivi, ma anche senza le rigide garanzie offerte da una vera regolamentazione delle priorità.
    • Per le architetture arm64, loongarch, powerpc, riscv, s390 e x86, la modalità di preemption nel pianificatore è stata cambiata da PREEMPT_NONE a PREEMPT_LAZY. Il numero di modalità disponibili è stato ridotto da quattro a due: PREEMPT_FULL e PREEMPT_LAZY (le modalità PREEMPT_NONE e PREEMPT_VOLUNTARY rimangono solo per le architetture che non supportano PREEMPT_FULL e PREEMPT_LAZY). La modalità PREEMPT_LAZY applica il modello di preemption completa (PREEMPT_FULL) per le task realtime (RR/FIFO/DEADLINE), ma ritarda la preemption delle task normali (SCHED_NORMAL) fino al tick del timer. Il ritardo apportato riduce i casi di preemption dei detentori di lock, consentendo di avvicinare le performance a configurazioni che utilizzano un modello di preemption volontaria. In altre parole, PREEMPT_LAZY mantiene le capacità di preemption completa per le task realtime, ma minimizza la perdita di performance per le task normali.

      L'attivazione di PREEMPT_LAZY ha portato a una significativa regressione, riducendo le performance di PostgreSQL su sistemi ARM64 di due volte. Per mitigare la perdita di performance, è stato suggerito agli sviluppatori di PostgreSQL di utilizzare l'opzione PR_RSEQ_SLICE_EXTENSION per ridurre la probabilità di preemption dei detentori di lock.

    • Continua il trasferimento delle modifiche dal ramo Rust-for-Linux, relative all'uso del linguaggio Rust come secondo linguaggio per lo sviluppo di driver e moduli del kernel. Grazie alla libreria «syn» precedentemente integrata, che semplifica la scrittura di macro complesse, è stato possibile ridurre le dimensioni del codice Rust nel kernel semplificando le definizioni delle macro procedurali esistenti. Sono state ampliate le funzionalità delle librerie kernel, macros e pin-init.
    • Nel sistema di input/output asincrono io_uring è stata aggiunta l'opzione per utilizzare code di invio non circolari (non-circular submission queue), più efficientemente memorizzabili nella cache in situazioni in cui l'esecuzione della richiesta termina prima del ritorno dalla chiamata di sistema.
    • Nel sottosistema eBPF, nel meccanismo BTF (BPF Type Format), che fornisce informazioni per la verifica dei tipi nel pseudocodice BPF, è stato utilizzato il binary search per la ricerca delle informazioni di debug, aumentando l'efficienza nel caricamento dei programmi BPF. In eBPF è stata aggiunta la supporto per gli argomenti impliciti nella chiamata a kfunc (funzioni del kernel disponibili per l'uso nei programmi BPF), definite con il flag KF_IMPLICIT_ARGS.
    • È stato rimosso il codice per il supporto dell'immagine RAM iniziale (initrd) basata su linuxrc, da tempo dichiarata obsoleta. Le implementazioni rimanenti di initrd sono programmate per essere eliminate nel 2027. Invece di initrd, si dovrebbe utilizzare initramfs (la differenza sta nel fatto che initrd colloca l'ambiente di avvio iniziale in un'immagine disco, mentre initramfs lo colloca nel file system).
    • Nella dispositivo a blocchi zram, utilizzato per la memorizzazione compressa della partizione di swap in memoria, è stata modificata la logica di gestione delle pagine di memoria compresse con movimento opzionale dei dati in storage permanente in caso di esaurimento della memoria disponibile. In precedenza, le pagine di memoria venivano decompresse prima della scrittura su supporto fisico, mentre ora vengono salvate così come sono in forma compressa, riducendo il carico sulla CPU e risparmiando energia in modalità autonoma.
    • Nel comando timerlat, progettato per misurare i ritardi del pianificatore dei processi, è stata aggiunta l'opzione "—bpf-action" per avviare programmi BPF in caso di superamento della soglia impostata.
    • Nel sistema di tracciamento ftrace è stata aggiunta l'impostazione «bitmask-list» per visualizzare le maschere di bit in un formato leggibile (sotto forma di elenco di bit, invece del numero esadecimale). In tracefs sono state aggiunte funzionalità per l'audit dei filtri e dei trigger. È stato aggiunto il comando «perf sched stats» per raccogliere e visualizzare statistiche sul funzionamento dello scheduler.
    • Sono state aggiunte opzioni di compilazione LOGO_LINUX_MONO_FILE, LOGO_LINUX_VGA16_FILE e LOGO_LINUX_CLUT224_FILE per specificare il file dell'immagine del logo che verrà mostrato durante il caricamento del kernel al posto del logo standard con il pinguino Tux.
  • Virtualizzazione e sicurezza
    • Nel sistema di input/output asincrono io_uring è implementata la possibilità di collegare programmi BPF con filtri che controllano cosa possono fare operazioni specifiche delle SQE (Submission Queue Entry), simili alle chiamate di sistema in io_uring. Questa funzionalità aggiunta è equivalente ai filtri delle chiamate di sistema. I filtri possono essere associati a determinati compiti e vengono ereditati quando vengono creati nuovi processi dopo la chiamata a fork(). Se sono attivi filtri, quelli aggiunti possono solo imporre limitazioni aggiuntive, ma non disabilitare quelli esistenti. Questa possibilità realizzata permetterà di bloccare metodi per aggirare la filtrazione delle chiamate di sistema in ambienti sandbox, basati sull'esecuzione di operazioni simili a quelle delle chiamate di sistema fornite in io_uring.
    • In SELinux è stata aggiunta la possibilità di gestire l'accesso ai token BPF, consentendo ai processi non privilegiati di eseguire alcune operazioni privilegiate con BPF, come caricare programmi BPF nel kernel e creare strutture map.
    • È stata aggiunta la supporto per l'algoritmo di generazione di firme digitali ML-DSA (CRYSTALS-Dilithium), basato sulla teoria delle reticoli e resistente agli attacchi su computer quantistici. È stata fornita la possibilità di utilizzare ML-DSA per l'autenticazione dei moduli del kernel.
    • È stata rimossa la possibilità di utilizzare schemi di generazione di firme digitali con l'algoritmo SHA-1 per la certificazione dei moduli del kernel (il supporto per il caricamento dei moduli firmati è stato mantenuto).
    • Nella registrazione dell'audit NETFILTER_PKT sono stati aggiunti i campi 'sport' e 'dport' per l'ispezione dei numeri delle porte di rete, non solo. IP addresses.
    • Per i sistemi con architettura RISC-V è stata implementata la supporto per le estensioni Zicfiss e Zicfilp, che forniscono capacità hardware per l'applicazione della protezione CFI (Control Flow Integrity), bloccando le violazioni dell'ordine normale di esecuzione delle istruzioni (control flow) a causa dell'uso di exploit che modificano i puntatori delle funzioni memorizzati in memoria.
    • Nel hypervisor KVM È stata implementata la possibilità di trasmettere nei sistemi guest informazioni sul supporto da parte del processore dell'estensione ERAPS (Enhanced Return Address Predictor Security), che consente di evitare alcune operazioni di ripristino dello stato della CPU al ritorno del controllo all'host da parte del sistema guest. Inoltre, è stato aggiunto il supporto per l'assegnazione di hardware ai sistemi guest per il monitoraggio delle prestazioni (PMU, Performance Monitoring Unit), che migliora la precisione del profiling rispetto all'uso di PMU emulati.
    • Nel driver per l'iper-v di Hyper-V è stato aggiunto il supporto per l'interfaccia debugfs per visualizzare le statistiche sul funzionamento dell'iper-v.
  • Sottosistema di rete
    • L'estensione AccECN (Accurate Explicit Congestion Notification) è abilitata per impostazione predefinita. Essa implementa una versione migliorata dell'estensione ECN, consentendo ai nodi, in caso di congestione, di contrassegnare i pacchetti IP invece di scartarli. Questo consente di rilevare le prime fasi di congestione nei canali di comunicazione senza perdita di pacchetti. L'estensione ECN originale ha una limitazione che consente di segnalare solo un evento di congestione per ogni ciclo di trasmissione TCP (RTT, Round-Trip Time, invio della richiesta e ricezione della risposta). AccECN rimuove questa limitazione e consente al destinatario di inviare più di un'etichetta di congestione al mittente nell'intestazione del pacchetto TCP. Gli algoritmi di controllo della congestione possono utilizzare queste informazioni per reagire in modo più preciso alle congestioni, evitando drastici cali nella frequenza di invio dei pacchetti in presenza di lievi congestioni.
    • Nell'implementazione dell'algoritmo di gestione delle code di rete CAKE è stata aggiunta la possibilità di gestire più code per distribuire il carico su più core della CPU. L'algoritmo CAKE è utilizzato per ridurre l'impatto negativo del buffering intermedio dei pacchetti sulle apparecchiature di rete di confine e mira a raggiungere la massima larghezza di banda possibile e il minimo livello di latenza anche su connessioni lente.
    • Nei socket VSOCK, utilizzati per l'interazione con le macchine virtuali, è stata aggiunta la supporto agli spazi dei nomi di rete (network namespace).
    • È stata aggiunta l'implementazione iniziale del futuro standard WiFi 8 (802.11bn, WiFi ad alta affidabilità).
    • Sono state aggiunte ottimizzazioni che hanno consentito di aumentare le prestazioni nell'elaborazione dei pacchetti UDP in ingresso del 12% durante i test di stress su una rete da 100 gigabit.
  • Attrezzature
    • Nel driver AMDGPU è stata implementata la supporto per i blocchi IP utilizzati nelle nuove GPU AMD, come SMUIO 15.x, PSP 15.x, IH 6.1.1/7.1, MMHUB 3.4/4.2, GC 11.5.4/12.1, SDMA 6.1.4/7.1/7.11.4 e JPEG 5.3.
    • Nel driver Nouveau è stato migliorato il controllo della frequenza nei sistemi Tegra 186+.
    • Nel driver i915 è stato aggiunto il supporto iniziale per il blocco IP del display Xe3p_LPD, utilizzato nei processori Intel Nova Lake-P.
    • Prosegue il lavoro sul driver drm (Direct Rendering Manager) Xe per GPU basate sull'architettura Intel Xe, utilizzata nelle schede grafiche Intel della famiglia Arc e nella grafica integrata a partire dai processori Tiger Lake. È stata aggiunta la modalità Multi Queue. Sono stati aggiunti i componenti necessari per diagnosticare i blocchi della GPU in Mesa. È stato aggiunto il supporto per il meccanismo MERT per la gestione dell'accesso alla memoria GPU.
    • Continua l'integrazione dei componenti del driver Nova per GPU NVIDIA dotate di firmware GSP, utilizzati a partire dalla serie NVIDIA GeForce RTX 2000 basata sull'architettura Turing. Il driver è stato scritto in linguaggio Rust. Nella nuova versione sono stati effettuati preparativi per implementare il supporto per GPU basate sull'architettura Turing e sono state apportate varie modifiche interne.
    • Aggiunto il supporto per controller e periferiche con interfaccia SPI (Serial Peripheral Interface) multi-canale, permettendo di trasmettere dati in più flussi paralleli.
    • Aggiunto il driver per i connettori combinati Type-C, utilizzati su dispositivi con chip Apple Silicon che combinano le interfacce USB3, DP-AltMode e Thunderbolt/USB4.
    • Aggiunta la supporto per i sottosistemi audio dei chip Tegra238, Minisforum V3 SE, iBasso DC04U, Intel Nova Lake, Nova Lake S e Focusrite Forte.
    • Aggiunta la supporto per piattaforme ARM, SoC e dispositivi: Arduino UnoQ, OrangePi 6 Plus, OrangePi CM5, Anbernic RG-DS, Realtek Kent, Qualcomm Kaanapali, Mediatek Ezurio, Facebook Anacapa, Microchip LAN9668, Khadas VIM1S, QNAP TS133, i.MX952, i.MX93, i.MX94, VHIP4 EvalBoard, TQ-Systems MBLS1028A, Agilex5, Radxa CM3J, Glymur.
    • Aggiunta la supporto per smartphone e tablet: Fairphone Gen 6 (SoC Qualcomm Milos/Snapdragon 7s Gen 3), Pixel 3/3 xl, Microsoft Surface Pro 11.

Nel contempo, il Fondo per il Software Libero Latinoamericano ha formato una variante completamente libera del kernel 7.0 — Linux-libre 7.0-gnu, purificata da elementi di firmware e driver contenenti componenti non liberi o sezioni di codice, il cui utilizzo è limitato dal produttore. Nella release 7.0 è stata eseguita una pulizia dai blob del driver iwlwifi. Aggiornato il codice di pulizia nei driver amdgpu, adreno, TI PRUeth, air_en8811h, ath12k, TI VPE, rtw8852b, rt1320, rt5575 SPI, tas2783, Intel catpt. È stata effettuata una pulizia dei nomi dei blob nei file dts (devicetree) per chip ARM.

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