Linux 7.0

Linux 7.0

Dopo due mesi di sviluppo, Linus Torvalds ha presentato ha rilasciato il kernel Linux 7.0. Tra i cambiamenti più significativi ci sono: le regole per l'uso degli assistenti AI, il porting di Rust tra le funzionalità principali del kernel, un aumento della performance di swapping, l'attivazione di default della modalità PREEMPT_LAZY, supporto per filtri nelle operazioni io_uring, un nuovo filesystem Nullfs, l'infrastruttura fserror, strumenti di monitoraggio XFS, supporto per il remapping in Btrfs, l'attivazione di default della versione NFS 4.1, integrazione di un algoritmo crittografico post-quantistico ML-DSA, attivazione di AccECN nel sottosistema di rete, 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 accettati 15624 correttivi da 2477 sviluppatori, dimensione della patch – 56 MB (le modifiche hanno interessato 18053 file, aggiunte 704060 righe di codice, rimosse 278132 righe). Nella precedente versione erano stati 15657 correttivi da 2237 sviluppatori, dimensione della patch – 52 MB. Circa il 51% di tutte le modifiche presentate nella 7.0 riguardano i driver dei dispositivi, circa l'11% delle modifiche riguarda l'aggiornamento di codice specifico per le architetture hardware, il 14% è relativo allo stack di rete, il 5% ai filesystem e il 3% ai sottosistemi interni del kernel.

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

  • Sottosistema disco, I/O e file system
    • Infrastruttura fserror implementata e è stato aggiunto API per ottenere informazioni sugli errori di input/output e sulla corruzione dei metadati durante l'elaborazione dei file. L'infrastruttura proposta uniforma la trasmissione delle informazioni sugli errori dagli ambienti delle file system allo spazio utente tramite il meccanismo fsnotify.
    • In XFS sono stati 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 su guasti legati alla corruzione dei metadati o sugli errori di input/output, e monitorare le modifiche degli stati del file system, come smontaggio e spegnimento. Inoltre, è stato proposto un processo in background gestito da systemd, xfs_healer, che gestisce eventi sullo stato del file system dallo spazio utente e avvia automaticamente, se necessario, procedure di recupero.
    • Nel file system Btrfs è stata aggiunta il supporto sperimentale per la struttura "albero di rimappatura" (albero di rimappatura), che in futuro potrebbe essere utilizzata come uno strato intermedio durante le operazioni di input/output. La sostanza di questa nuova funzionalità è che, dopo lo spostamento dei dati su un'unità di memorizzazione, anziché aggiornare tutte le strutture associate a questi dati nella struttura aggiuntiva «remap tree», vengono memorizzati gli indirizzi vecchi e nuovi dei dati, dopo di che, quando si accede ai dati, gli indirizzi vengono sostituiti. Questo nuovo approccio è presentato come più affidabile e flessibile, semplificando anche l'ulteriore estensione delle funzionalità di Btrfs.
    • In Btrfs è stata realizzata supporto per l'input/output diretto in situazioni in cui la dimensione del blocco supera la dimensione della pagina di memoria del sistema.
    • Include è inclusa nuovo file system Nullfs, che può essere utilizzato come placeholder per il file system root. Il file system Nullfs è sempre vuoto, non contiene dati e non supporta modifiche. L'intento di Nullfs è 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 passare al file system root invece di svuotare il contenuto di initramfs e utilizzare il file system root associato.
    • Implementato l'aggiornamento delle informazioni sui tempi di modifica dei file in modalità non bloccante. In precedenza, la chiamata a file_update_time_flags() con il flag IOCB_NOWAIT restituiva l'errore -EAGAIN, che impediva l'uso delle operazioni di scrittura diretta in modalità non bloccante.
    • Nei file system come opzioni separatamente attivabili tradotta supporto per blocchi di notifica (lease). Per impostazione predefinita, questo meccanismo non è attivato a causa di 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 in partizioni disponibili in modalità sola lettura, l'algoritmo LZMA è utilizzato per la compressione per impostazione predefinita. Sono disponibili anche gli algoritmi DEFLATE e Zstandard, che non sono più contrassegnati come sperimentali. È stato implementato l'utilizzo congiunto delle voci nella cache delle pagine (page-cache) per file identici in diversi file system EROFS.
    • Rimosso La modalità laptop_mode riduce il consumo energetico posticipando e combinando le operazioni di scrittura sul disco rigido per prolungare il tempo di inattività del disco e ridurre il numero di risvegli. Questa modalità è ormai obsoleta, poiché nei moderni dispositivi mobili i dischi rigidi sono stati sostituiti da unità a stato solido.
    • Il file system F2FS è stato aggiornato per utilizzare grandezze maggiori folio di memoria (large folios).
    • È stata ripresa l'attività sul driver ntfs3, sviluppato da Paragon Software. È stato aggiunto il supporto per le operazioni sui file basate su iomap, implementate le opzioni llseek SEEK_DATA/SEEK_HOLE, e aggiunta la modalità delalloc per l'allocazione differita dei blocchi. Nel frattempo, nella mailing list degli sviluppatori del kernel a febbraio è stato approvato l'inserimento in una delle future versioni del kernel di una nuova implementazione di NTFS — ntfsplus, sviluppata per sostituire ntfs3.
    • Per impostazione predefinita, durante la compilazione è inclusa la versione del protocollo NFS 4.1 (CONFIG_NFS_V4_1). Assicurato Blocco dell'esportazione tramite NFS di pseudo-FS specializzati, come pidfs e nsfs. In NFSD è stata realizzata è stata introdotta la possibilità sperimentale di utilizzare POSIX ACL e aggiunta supporto per il cambiamento dinamico del pool di thread in base al carico.
  • Memoria e servizi di sistema
    • Sono state approvate le regole ufficiali utilizzo degli assistenti AI e integrazione nel kernel di contenuti generati automaticamente. Quando si trasmette codice generato, è necessario contrassegnarlo indicando l'assistente AI utilizzato tramite il tag Assisted-by. Agli assistenti AI è vietato aggiungere il tag Signed-off-by – la persona che ha inviato la patch è considerata l'autore, è responsabile della modifica inviata e ne garantisce la qualità. Gli sviluppatori sono tenuti a rivedere manualmente il codice ottenuto tramite AI e a verificare la conformità del risultato ai requisiti di licenza.

    • Supporto Rust tradotta da esperimentale a funzionalità principali del kernel.

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

    • Aggiunto supporto per l'estensione introdotta in Clang 22 Analisi della sicurezza dei thread, che permette di rilevare durante la fase di compilazione potenziali condizioni di competizione e errori causati da un'impostazione scorretta dei blocchi. L'estensione offre una serie di attributi, come GUARDED_BY(…), REQUIRES(…), RELEASE(…) e ACQUIRE(…), che consentono di contrassegnare le funzioni coperte dai blocchi e di separare gli ambiti di applicazione dei blocchi (definire il contesto). Durante la fase di compilazione, viene eseguita una verifica della correttezza dell'uso dei primitivi di sincronizzazione, come i mutex, basata sulla valutazione dell'attività o inattività del contesto ad essi associato.

    • Alla chiamata di sistema open_tree è stato aggiunto la flag OPEN_TREE_NAMESPACE per semplificare la configurazione di contenitori isolati e accelerare l'avvio dei contenitori su sistemi con un elevato numero di punti di montaggio. Analogamente a OPEN_TREE_CLONE, la nuova flag copia solo l'albero di montaggio specificato (mount tree), ma invece di un file descriptor locale restituisce un file descriptor in un nuovo spazio dei nomi dei punti di montaggio, in cui l'albero copiato è montato sopra una copia del reale filesystem radice. La flag OPEN_TREE_NAMESPACE è richiesta per separare le operazioni unshare(CLONE_NEWNS) e pivot_root(), utilizzate nella creazione dei contenitori.

    • Alla chiamata di sistema rseq è stato aggiunto meccanismo di estensione del quantum di tempo (time slice), 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, che ha un blocco attivato, portando al passaggio di controllo ad altri thread che utilizzano risorse, sui quali rimane attivato il blocco. L'estensione del quantum di tempo avviene senza costi aggiuntivi, ma anche senza le rigide garanzie fornite da una regolazione completa delle priorità.

    • Per le architetture arm64, loongarch, powerpc, riscv, s390 e x86, la modalità di preemption nel pianificatore è attivata per impostazione predefinita. modificato da PREEMPT_NONE a PREEMPT_LAZY. Il numero di modalità possibili è stato ridotto da quattro a due – PREEMPT_FULL e PREEMPT_LAZY (i modelli PREEMPT_NONE e PREEMPT_VOLUNTARY sono mantenuti solo per architetture che non supportano PREEMPT_FULL e PREEMPT_LAZY). La modalità PREEMPT_LAZY applica il modello di preemption totale (PREEMPT_FULL) per compiti realtime (RR/FIFO/DEADLINE), ma ritarda la preemption di compiti normali (SCHED_NORMAL) fino al limite del tick. Il ritardo introdotto porta a una riduzione dei casi di preemption dei detentori di lock, consentendo di avvicinare le prestazioni a configurazioni che utilizzano il modello di preemption volontaria (voluntary preemption), cioè PREEMPT_LAZY consente di mantenere le capacità di preemption totale per compiti realtime, ma riduce al minimo il calo delle prestazioni per compiti normali.

      Attivazione di PREEMPT_LAZY ha portato a una regressione significativa, riducendo le prestazioni di PostgreSQL su sistemi ARM64 di due volte. Per risolvere il calo delle prestazioni, gli sviluppatori di PostgreSQL suggerito devono attivare l'opzione PR_RSEQ_SLICE_EXTENSION per ridurre la probabilità di preemption dei detentori di lock.

    • Continuato il trasferimento delle modifiche dal ramo Rust-for-Linux, collegato all'uso del linguaggio Rust come secondo linguaggio per lo sviluppo di driver e moduli del kernel (il supporto per Rust non è attivato di default e non porta a includere Rust tra le dipendenze di build obbligatorie del kernel). Grazie alla libreria "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. Le funzionalità delle librerie kernel, macros e pin-init sono state ampliate.

    • Nel sistema di input/output asincrono io_uring aggiunta un'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 si completa 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 utilizzato ricerca binaria, il che ha aumentato l'efficienza di caricamento dei programmi BPF. In eBPF 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 il disco RAM iniziale (initrd) basato su linuxrc, da tempo dichiarato obsoleto. Le implementazioni rimanenti di initrd sono previste per essere rimosse nel 2027. Al posto di initrd, si dovrebbe usare initramfs (la differenza è che initrd posiziona l'ambiente di avvio iniziale in un'immagine disco, mentre initramfs lo fa all'interno del file system).

    • In un dispositivo a blocchi zram, utilizzato per la compressione della memoria della pagina swap, modificata la logica di lavoro con le pagine di memoria compresse durante lo spostamento opzionale dei dati in storage permanente in caso di esaurimento della memoria RAM disponibile. Precedentemente, le pagine di memoria venivano decompresse prima della scrittura su un supporto fisico, mentre ora vengono salvate così come sono in forma compressa, riducendo il carico sulla CPU e risparmiando energia in modalità autonoma.

    • Nell'utility timerlat, progettato per misurare i ritardi nel funzionamento dello scheduler delle attività, aggiunta l'opzione —bpf-action per eseguire programmi BPF in caso di superamento di una soglia specificata.

    • Nel sistema di tracciamento ftrace è stata aggiunta un'impostazione bitmask-list per visualizzare le maschere di bit in un formato leggibile (come elenco di bit, non come numero esadecimale). In tracefs sono state aggiunte funzionalità per l'audit filtri e trigger. Aggiunto il comando perf sched stats per raccogliere e visualizzare le statistiche sul funzionamento dello scheduler delle attività.

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

  • Virtualizzazione e sicurezza
    • nel sistema di input/output asincrono io_uring è stata realizzata la possibilità di allegare programmi BPF con filtri che controllano cosa possono fare specifiche operazioni SQE (Submission Queue Entry), simili alle chiamate di sistema in io_uring. La funzione aggiunta è l'equivalente dei filtri delle chiamate di sistema. I filtri possono essere legati a compiti specifici e vengono ereditati alla generazione di altri processi dopo la chiamata fork(). Con filtri attivi, i filtri aggiunti possono solo applicare ulteriori restrizioni, ma non disattivare quelli esistenti. La funzionalità implementata consentirà di bloccare metodi per eludere il filtro 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 aggiunta la possibilità di controllare l'accesso ai token BPF, che consentono i processi non privilegiati possono eseguire alcune operazioni privilegiate con BPF, come caricare programmi BPF nel kernel e creare strutture mappa.
    • Aggiunto supporto per l'algoritmo di generazione delle firme digitali ML-DSA (CRYSTALS-Dilithium), basato sulla teoria delle reticoli e resistente agli attacchi di computer quantistici. Fornito possibilità di utilizzare ML-DSA per l'autenticazione dei moduli del kernel.
    • Rimosso possibilità di utilizzare schemi di generazione delle firme digitali con l'algoritmo SHA-1 per la certificazione dei moduli del kernel (il supporto per il caricamento di moduli firmati è mantenuto).
    • Nella registrazione dell'audit NETFILTER_PKT sono stati aggiunti i campi sport e dport per ispezionare i numeri delle porte di rete, e non solo gli indirizzi IP.
    • Per i sistemi con architettura RISC-V è stata realizzata 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 di exploit che modificano i puntatori alle funzioni memorizzati nella memoria.
    • Nel hypervisor KVM è stata realizzata la possibilità di trasferire nei sistemi guest informazioni sul supporto del processore per l'estensione ERAPS (Enhanced Return Address Predictor Security), che consente di evitare alcune operazioni di ripristino dello stato della CPU al momento del ritorno del controllo al host da parte del sistema guest. Inoltre, aggiunta il supporto per l'assegnazione alle guest machine di hardware per il monitoraggio delle prestazioni (PMU, Performance Monitoring Unit), che aumenta la precisione della profilazione rispetto all'uso di PMU emulati.
    • Nel driver per l'iper-v Hyper-V aggiunta supporto per l'interfaccia debugfs per visualizzare le statistiche sul funzionamento dell'iper-v.
  • Sottosistema di rete
    • L'estensione AccECN è abilitata di default (Accurate Explicit Congestion Notification), che implementa una versione migliorata dell'estensione ECN (wikipedia.org), consentendo agli host, in caso di sovraccarico, di contrassegnare i pacchetti IP invece di scartarli, permettendo di identificare l'insorgere di una fase iniziale di congestione nei canali di comunicazione senza perdita di pacchetti. L'estensione originale ECN ha una limitazione che consente di segnalare solo un'unica congestione all'interno di un ciclo di ricezione-trasmissione TCP (RTT, Round-Trip Time, invio di una richiesta e ricezione di una risposta). AccECN rimuove questa limitazione e consente al ricevente di inviare più di un contrassegno di congestione al mittente nell'intestazione del pacchetto TCP. Gli algoritmi di controllo della congestione possono utilizzare le informazioni ricevute per rispondere in modo più accurato ai sovraccarichi e evitare di ridurre drasticamente l'intensità di invio dei pacchetti durante una leggera congestione.
    • Nell'implementazione dell'algoritmo di gestione delle code di rete Cake aggiunta 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, mirato a ottenere la massima larghezza di banda possibile e un livello minimo di latenza anche su canali di comunicazione lenti.
    • Nei socket VSOCK, utilizzati per interagire con macchine virtuali, aggiunta supporto per spazi dei nomi di rete (network namespace).
    • Aggiunto implementazione iniziale del futuro standard WiFi 8 (802.11bn, Ultra High Reliability WiFi).
    • Aggiunti ottimizzazioni che hanno consentito di migliorare le prestazioni nell'elaborazione di pacchetti UDP in ingresso del 12% durante test di stress in una rete da 100 gigabit.
  • Attrezzature
    • Nel driver AMDGPU è stata realizzata supporto 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 aggiunta supporto iniziale per il blocco IP display Xe3p_LPD, utilizzato nei processori Intel Nova Lake-P.
    • Continuato lavoro sul driver drm (Direct Rendering Manager) Xe per GPU basate sull'architettura Intel Xe, utilizzate nelle schede grafiche Intel della famiglia Arc e nella grafica integrata, a partire dai processori Tiger Lake. Aggiunta la modalità Multi Queue. Aggiunti componenti necessari per la diagnosi dei blocchi della GPU in Mesa. Aggiunto supporto per il meccanismo MERT per la gestione dell'accesso alla memoria della GPU.
    • Continuato integrazione dei componenti del driver Nova per GPU NVIDIA dotate di firmware GSP, utilizzate a partire dalla serie NVIDIA GeForce RTX 2000 basata sull'architettura Turing. Il driver è scritto in linguaggio Rust. La nuova versione prepara l'implementazione del supporto per GPU basate sull'architettura Turing e apporta diverse modifiche interne.
    • Aggiunto supporto per controller e dispositivi periferici con interfaccia SPI (Serial Peripheral Interface) multi-canale, che consente il trasferimento di dati in più flussi paralleli.
    • Aggiunto driver per connettori combinati Type-C, utilizzati sui dispositivi con chip Apple Silicon e che combinano le interfacce USB3, DP-AltMode e Thunderbolt/USB4.
    • Aggiunto supporto per i sottosistemi audio dei chip Tegra238, Minisforum V3 SE, iBasso DC04U, Intel Nova Lake, Nova Lake S e Focusrite Forte.
    • Supporto aggiunto 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.

Fondazione per il software libero dell'America Latina ha formato una variante kernel completamente libero 7.0Linux-libre 7.0-gnu, privo di elementi di firmware e driver contenenti componenti non liberi o sezioni di codice limitate dal produttore. Nella versione 7.0 è stata effettuata una pulizia dai blob del driver iwlwifi. È stato aggiornato il codice di pulizia nei driver amdgpu, adreno, TI PRUeth, air_en8811h, ath12k, TI VPE, rtw8852b, rt1320, rt5575 SPI, tas2783, Intel catpt. Sono stati puliti i nomi dei blob nei file dts (devicetree) per i chip ARM.

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