Linux 7.0

Linux 7.0

Dopo due mesi di sviluppo, Linus Torvalds ha presentato rilascio del kernel Linux 7.0. Tra le modifiche più significative: le regole per l'uso degli assistenti AI, la traduzione di Rust nelle funzionalità principali del kernel, l'aumento delle prestazioni di swapping, l'attivazione per impostazione predefinita della modalità PREEMPT_LAZY, il supporto ai filtri per le operazioni io_uring, il nuovo file system Nullfs, l'infrastruttura fserror, gli strumenti di monitoraggio XFS, il supporto al remapping in Btrfs, l'attivazione per impostazione predefinita della versione NFS 4.1, l'integrazione di un 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 è accumulato un numero sufficiente di rilasci per cambiare il primo numero nella versione (in precedenza, il rilascio 6.0 è stato creato subito dopo il 5.19). Il cambiamento della numerazione avviene per ragioni estetiche ed è un passo formale che allevia il disagio causato dall'accumulo di troppi rilasci nella serie.

Nella nuova versione sono stati incorporati 15624 aggiornamenti da 2477 sviluppatori, la dimensione della patch è di 56 MB (le modifiche hanno interessato 18053 file, aggiungendo 704060 righe di codice e rimuovendo 278132 righe). Nel rilascio precedente ci sono stati 15657 aggiornamenti da 2237 sviluppatori, la dimensione della patch era di 52 MB. Circa il 51% di tutte le modifiche presentate in 7.0 sono relative ai driver di dispositivo, circa l'11% riguarda l'aggiornamento di codice specifico per architetture hardware, il 14% è collegato allo stack di rete, il 5% ai file system e il 3% ai sottosistemi interni del kernel.

Le principali novità nel kernel 7.0 (kernelnewbies.org, lwn.net, OpenNET):

  • Sottosistema di disco, input/output e file system
    • È stata realizzata l'infrastruttura fserror e è stata aggiunta API per ottenere informazioni sugli errori di input/output e sulla corruzione dei metadati durante la gestione dei file. L'infrastruttura proposta unifica nei file system la trasmissione delle informazioni sugli errori nello spazio utente attraverso il meccanismo fsnotify.
    • In XFS aggiunti nuove funzionalità per il monitoraggio dello stato del file system dallo spazio utente. È stata proposta l'operazione ioctl XFS_IOC_HEALTH_MONITOR, che restituisce un descrittore di file attraverso il quale è possibile ottenere informazioni sui guasti legati alla corruzione dei metadati o su errori verificatisi durante l'input/output, oltre a monitorare il cambiamento di stati del file system, come smontaggio e spegnimento. Inoltre, è stato proposto un processo in background gestito tramite systemd, xfs_healer, che gestisce eventi sullo stato del file system dallo spazio utente e, se necessario, avvia automaticamente procedure di recupero.
    • Nel file system Btrfs è stata aggiunta una supporto sperimentale per la struttura "albero di remapping" (remap tree), che in futuro potrebbe essere utilizzata come strato intermedio durante le operazioni di input/output. La sostanza della nuova funzionalità è che, dopo lo spostamento dei dati sul dispositivo di archiviazione, anziché aggiornare tutte le strutture correlate ai dati in una struttura aggiuntiva chiamata “remap tree”, vengono memorizzati gli indirizzi di dati vecchi e nuovi, dopo di che, durante l'accesso ai dati, gli indirizzi vengono sostituiti. Questo nuovo approccio è presentato come più affidabile e flessibile, semplificando anche l'espansione futura delle funzionalità di Btrfs.
    • In Btrfs è stata implementata supporto per l'input/output diretto in situazioni in cui la dimensione del blocco supera la dimensione della pagina di memoria del sistema.
    • Fanno parte attivata nuovo file system Nullfs, che può essere utilizzato come segnaposto per il file system root. Il file system Nullfs è sempre vuoto, non contiene dati e non supporta modifiche. L'obiettivo di Nullfs è quello di essere utilizzato come file system iniziale per semplificare il processo di avvio del sistema - sopra Nullfs vengono quindi montati altri file system e viene utilizzata la chiamata di sistema pivot_root() per cambiare il file system root invece di pulire il contenuto dell'initramfs e utilizzare il file system root associato.
    • Implementato 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 un errore -EAGAIN, il che impediva di utilizzare operazioni di scrittura diretta in modalità non bloccante.
    • Nei file system in una categoria di opzioni separatamente attivabili trasferita supporto per blocchi di notifica (lease). Per impostazione predefinita, questo meccanismo non è ora attivato a causa dei problemi con i file system, inizialmente non 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 essere utilizzato su partizioni accessibili in modalità di sola lettura, l'algoritmo LZMA è utilizzato per la compressione per impostazione predefinita. Sono disponibili in modo opzionale gli algoritmi DEFLATE e Zstandard, che non sono più contrassegnati come sperimentali. È stata implementata la condivisione delle voci nella cache delle pagine (page-cache) per file identici in diversi file system EROFS.
    • Rimosso la modalità laptop_mode, che riduce il consumo energetico ritardando e unendo le operazioni di scrittura su disco rigido per prolungare il periodo di inattività del disco e ridurre il numero di risvegli. Questa 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 tradotto per utilizzare grandi di fogli di memoria (large folios).
    • È ripresa la lavorazione del driver ntfs3, sviluppato da Paragon Software. È stata aggiunta la supporto alle operazioni sui file basate su iomap, implementate le opzioni llseek SEEK_DATA/SEEK_HOLE, è stata aggiunta la modalità delalloc per l'allocazione differita dei blocchi. Nel frattempo, nella mailing list degli sviluppatori del kernel a febbraio è stata discussa è stata approvata l'inclusione in una delle future versioni del kernel di una nuova implementazione di NTFS — ntfsplus, sviluppata per sostituire ntfs3.
    • Per impostazione predefinita, durante la compilazione attivata la versione del protocollo NFS 4.1 (CONFIG_NFS_V4_1). Garantito le restrizioni all'esportazione tramite NFS di pseudo-FS specializzati, come pidfs e nsfs. In NFSD è stata implementata è stata introdotta la possibilità sperimentale di utilizzare POSIX ACL e è stata aggiunta il supporto per la modifica dinamica del pool di thread in base al carico.
  • Memoria e servizi di sistema
    • Sono state approvate le regole ufficiali per l'uso di assistenti AI e per l'inclusione nel kernel di contenuti generati automaticamente. Durante la trasmissione di codice generato è stato stabilito di contrassegnarlo indicando l'assistente AI utilizzato tramite il tag Assisted-by. Agli assistenti AI è vietato aggiungere l'etichetta Signed-off-by – la persona che ha inviato la patch è considerata l'autore, responsabile della modifica trasmessa e ne garantisce la qualità. Gli sviluppatori sono tenuti a rivedere manualmente il codice ottenuto tramite AI e a verificare la conformità ai requisiti di licenza.

    • Il supporto per Rust trasferita è passato da sperimentale a funzionalità principali del kernel.

    • Completata l'integrazione nel kernel di un meccanismo "Swap Table", che consente di aumentare le prestazioni dello swapping. L'accelerazione è ottenuta grazie alla riduzione della competizione per l'accesso alla cache dello swapping, a una ricerca più efficiente nella cache e alla riduzione della frammentazione. Il backend basato su Swap Table è stato impiegato per la cache dello swapping invece del backend XArray e ha consentito nel test redis-benchmark con BGSAVE di aumentare il numero di richieste elaborate del 22%.

    • Aggiunto il supporto per l'estensione introdotta in Clang 22 Thread Safety Analysis, che consente di identificare durante la fase di compilazione potenziali stati di competizione e errori causati da un'errata impostazione dei blocchi. L'estensione offre una serie di attributi, come GUARDED_BY(…), REQUIRES(…), RELEASE(…) e ACQUIRE(…), che permettono di contrassegnare le funzioni interessate dai blocchi e di separare i contesti dei blocchi. Durante la fase di compilazione viene eseguita una verifica dell'uso corretto dei primitivi di sincronizzazione, come i mutex, basata sulla valutazione dell'attività o dell'inerzia del contesto associato.

    • Nella chiamata di sistema open_tree è stata aggiunta il flag OPEN_TREE_NAMESPACE per semplificare la configurazione di contenitori isolati e accelerare l'avvio dei contenitori su sistemi con un gran numero di punti di montaggio. Analogamente a OPEN_TREE_CLONE, il nuovo flag copia solo l'albero dei punti di montaggio specificato (mount tree), ma invece di restituire un descrittore di file locale restituisce un descrittore di file in un nuovo spazio dei nomi di punti di montaggio, in cui l'albero copiato è montato sopra una copia del file system radice reale. Il flag OPEN_TREE_NAMESPACE è richiesto per evitare l'esecuzione separata delle operazioni unshare(CLONE_NEWNS) e pivot_root(), utilizzate nella creazione dei contenitori.

    • Nella chiamata di sistema rseq è stata aggiunta un meccanismo di estensione dei quanti di tempo (time slice), che consente di ottenere tempo di CPU aggiuntivo per l'esecuzione ininterrotta di sezioni critiche. L'idea è quella di evitare che il pianificatore di attività interrompa una sezione critica con un blocco impostato, che porterebbe al trasferimento del controllo ad altri thread che utilizzano la risorsa, sui quali rimane impostato il blocco. L'estensione del quantum di tempo avviene senza costi aggiuntivi, ma senza le rigide garanzie fornite da una completa regolazione delle priorità.

    • Per le architetture arm64, loongarch, powerpc, riscv, s390 e x86, il modo di preemption nel pianificatore per impostazione predefinita è cambiato da PREEMPT_NONE a PREEMPT_LAZY. Il numero di modalità possibili è stato ridotto dalle quattro alle due – PREEMPT_FULL e PREEMPT_LAZY (i modi PREEMPT_NONE e PREEMPT_VOLUNTARY sono lasciati solo per le architetture che non supportano PREEMPT_FULL e PREEMPT_LAZY). Il modo PREEMPT_LAZY applica il modello di preemption completa (PREEMPT_FULL) per i compiti in tempo reale (RR/FIFO/DEADLINE), ma ritarda la preemption dei compiti normali (SCHED_NORMAL) fino al limite del tick. Il ritardo introdotto porta a una riduzione dei casi di preemption dei detentori di lock, il che consente di avvicinarsi alle prestazioni delle configurazioni che utilizzano il modello di preemption volontaria, ovvero PREEMPT_LAZY consente di mantenere le capacità di preemption completa per i compiti in tempo reale, ma minimizza il calo di prestazioni per i compiti normali.

      Attivazione di PREEMPT_LAZY ha portato a una grave regressione, riducendo di due volte le prestazioni di PostgreSQL sui sistemi ARM64. Per attenuare la perdita di prestazioni, gli sviluppatori di PostgreSQL è stato proposto devono attivare l'opzione PR_RSEQ_SLICE_EXTENSION per ridurre la probabilità di preemption dei detentori di lock.

    • Proseguito trasferimento delle modifiche dal ramo Rust-for-Linux, relative all'utilizzo del linguaggio Rust come secondo linguaggio per lo sviluppo di driver e moduli del kernel (il supporto Rust non è abilitato per impostazione predefinita e non porta all'inclusione di Rust tra le dipendenze di build obbligatorie del kernel). Grazie alla libreria precedentemente integrata “syn (crates.io)”, che semplifica la scrittura di macro complesse, è stato possibile ridurre la dimensione del codice Rust nel kernel semplificando le definizioni delle macro procedurali esistenti. Sono state ampliate le capacità delle librerie kernel, macros e pin-init.

    • Nel sistema di input/output asincrono io_uring è stata aggiunta opzione per l'uso di code submission non circolari (non-circular submission queue), più efficientemente memorizzate nella cache in situazioni in cui l'esecuzione della richiesta termina prima del ritorno dalla chiamata di sistema.

    • Nella sottosistema eBPF nel meccanismo BTF (BPF Type Format), che fornisce informazioni per la verifica dei tipi nel pseudocodice BPF, per la ricerca di informazioni di debug è stato utilizzato ricerca binaria, il che ha aumentato l'efficienza di caricamento dei programmi BPF. In eBPF è stata aggiunta supporto per argomenti impliciti durante la chiamata kfunc (funzioni del kernel disponibili per l'uso nei programmi BPF), definite con il flag KF_IMPLICIT_ARGS.

    • Rimosso codice per supportare un disco RAM iniziale (initrd) basato su linuxrc, dichiarato obsoleto da tempo. Le implementazioni rimanenti di initrd sono programmate per essere rimosse nel 2027. Al posto di initrd, si consiglia di utilizzare initramfs (la differenza è che initrd colloca l'ambiente di avvio iniziale in un'immagine disco, mentre initramfs lo fa nel file system).

    • Nel dispositivo a blocchi zram, utilizzato per la memorizzazione compressa della partizione di swap in memoria, modificata la logica di gestione delle pagine di memoria compresse con spostamento opzionale dei dati in storage permanente in caso di esaurimento della memoria RAM disponibile. In precedenza, le pagine di memoria venivano decompresse prima di essere scritte su supporto fisico, mentre ora vengono salvate così come sono in forma compressa, riducendo il carico sulla CPU e risparmiando energia durante l'uso autonomo.

    • Nell'utilità timerlat, progettato per misurare la latenza durante l'esecuzione dello scheduler di task, è stata aggiunta l'opzione —bpf-action per l'esecuzione di 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 forma leggibile (come un elenco di bit, non come un numero esadecimale). Sono state aggiunte funzionalità di audit in tracefs di filtri e trigger. È stata aggiunta il comando perf sched stats per raccogliere e visualizzare statistiche sul funzionamento dello scheduler di task.

    • Aggiunti opzioni di compilazione LOGO_LINUX_MONO_FILE, LOGO_LINUX_VGA16_FILE e LOGO_LINUX_CLUT224_FILE per definire il file contenente l'immagine del logo che verrà mostrato all'avvio del kernel al posto del logo standard con il pinguino Tux.

  • Virtualizzazione e sicurezza
    • Nel sistema di input/output asincrono io_uring è stata implementata la possibilità di allegare programmi BPF con filtri che controllano cosa possono fare specifiche operazioni SQE (Submission Queue Entry) (simile alle chiamate di sistema in io_uring). La funzionalità aggiunta è analoga ai filtri delle chiamate di sistema. I filtri possono essere collegati a specifici task e sono ereditati quando vengono generati altri processi dopo la chiamata fork(). In presenza di filtri attivi, i filtri aggiuntivi possono solo applicare ulteriori restrizioni, ma non disattivare quelli esistenti. La funzionalità implementata consentirà di bloccare di lotta il bypass dei filtri delle chiamate di sistema negli ambienti sandbox, basandosi sull'esecuzione di operazioni simili fornite in io_uring al posto delle chiamate di sistema.
    • In SELinux è stata aggiunta la possibilità di gestire l'accesso ai token BPF, che consentono processi non privilegiati di eseguire alcune operazioni privilegiate con BPF, ad esempio, caricare programmi BPF nel kernel e creare strutture mappa.
    • È stata aggiunta supporto per l'algoritmo di generazione delle firme digitali ML-DSA (CRYSTALS-Dilithium), basato sulla teoria delle reticoli e resistente all'attacco su computer quantistici. È stata fornita possibilità di utilizzare ML-DSA per l'autenticazione dei moduli del kernel.
    • È stata eliminata possibilità di utilizzare schemi di generazione delle firme digitali con l'algoritmo SHA-1 per convalidare i moduli del kernel (il supporto per il caricamento dei moduli firmati è mantenuto).
    • Nella registrazione dell'audit NETFILTER_PKT aggiunti i campi sport e dport per ispezionare i numeri delle porte di rete, non solo gli indirizzi IP.
    • Per i sistemi con architettura RISC-V è stata implementata supporto per le estensioni Zicfiss e Zicfilp, che offrono capacità hardware per applicare la protezione CFI (Control Flow Integrity), bloccando le violazioni dell'ordine normale di esecuzione delle istruzioni (control flow) a causa di exploit che modificano i puntatori alle funzioni memorizzati in memoria.
    • Nel hypervisor KVM è stata implementata possibilità di trasmettere ai 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 durante il ritorno del controllo all'host da parte del sistema guest. Inoltre, è stata aggiunta supporto per l'assegnazione alle macchine virtuali dell'hardware per il monitoraggio delle prestazioni (PMU, Performance Monitoring Unit), il che consente di migliorare la precisione del profilo rispetto all'utilizzo di PMU emulati.
    • Nel driver per l'hypervisor Hyper-V è stata aggiunta supporto per l'interfaccia debugfs per visualizzare le statistiche sul funzionamento dell'hypervisor.
  • Sottosistema di rete
    • Abilitata per impostazione predefinita l'estensione AccECN (Accurate Explicit Congestion Notification), che implementa una versione migliorata dell'estensione ECN (wikipedia.org), consentendo agli host di contrassegnare i pacchetti IP in caso di sovraccarico invece di scartarli, il che consente di identificare l'insorgenza di una fase iniziale di congestione nei canali di comunicazione senza perdita di pacchetti. L'estensione originale ECN ha una limitazione che consente di inviare solo un segnale di sovraccarico all'interno di un 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 sovraccarico all'emittente nell'intestazione del pacchetto TCP. Gli algoritmi di controllo del sovraccarico possono utilizzare le informazioni ricevute per rispondere in modo più preciso ai sovraccarichi, evitando una drastica riduzione dell'intensità di invio dei pacchetti in caso di lieve sovraccarico.
    • nella realizzazione dell'algoritmo di controllo delle code di rete Cake è stata aggiunta la possibilità di gestire più code per distribuire il carico su più core CPU. L'algoritmo CAKE viene applicato per ridurre l'impatto negativo del buffering intermedio dei pacchetti sulle apparecchiature di rete di confine e mira a raggiungere la massima capacità di trasmissione possibile e il livello minimo di latenza anche su canali di comunicazione lenti.
    • Nei socket VSOCK, utilizzati per interagire con macchine virtuali, è stata aggiunta supporto per gli spazi dei nomi di rete (network namespace).
    • È stata aggiunta implementazione iniziale del futuro standard WiFi 8 (802.11bn, WiFi Ultra High Reliability).
    • Aggiunti ottimizzazioni che hanno consentito di aumentare la prestazione nel trattamento dei pacchetti UDP in ingresso del 12% durante test di stress su una rete da 100 gigabit.
  • Apparecchiatura
    • Nel driver AMDGPU è stata implementata highlightsFromPoint() 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 è stata migliorata la gestione della frequenza sui sistemi Tegra 186+.
    • Nel driver i915 è stata aggiunta supporto iniziale per il blocco IP di visualizzazione Xe3p_LPD, utilizzato nei processori Intel Nova Lake-P.
    • Proseguita 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. Aggiunto il supporto per la modalità Multi Queue. Aggiunti componenti necessarie per diagnosticare i blocchi della GPU in Mesa. È stata aggiunta supporto per il meccanismo MERT per la gestione dell'accesso alla memoria della GPU.
    • Proseguita 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 è scritto in Rust. Nella nuova versione sono state effettuate preparazioni per implementare il supporto delle GPU basate sull'architettura Turing e sono state apportate diverse modifiche interne.
    • È stata aggiunta Supporto per controller e dispositivi periferici con interfaccia multicanale SPI (Serial Peripheral Interface), che consente di trasmettere dati in più flussi paralleli.
    • Aggiunto Driver per connettori combinati Type-C utilizzati su dispositivi con chip Apple Silicon e combinanti interfacce USB3, DP-AltMode e Thunderbolt/USB4.
    • Aggiunto il supporto per le sottosistemi audio dei chip Tegra238, Minisforum V3 SE, iBasso DC04U, Intel Nova Lake, Nova Lake S e Focusrite Forte.
    • Aggiunto il 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.
    • Aggiunto il supporto per smartphone e tablet: Fairphone Gen 6 (SoC Qualcomm Milos/Snapdragon 7s Gen 3), Pixel 3/3 xl, Microsoft Surface Pro 11.

Contemporaneamente, il Fondo latinoamericano per il software libero ha creato una versione Kernel completamente libero 7.0Linux-libre 7.0-gnu, pulito da elementi di firmware e driver contenenti componenti o porzioni di codice non libere, il cui ambito è limitato dal produttore. Nella versione 7.0 è stata eseguita la 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. Eseguita la pulizia dei nomi dei blob nei file dts (devicetree) per chip ARM.

Fonte: linux.org.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