Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 7.1. Tra le modifiche più evidenti: un nuovo driver ntfsplus, la prima fase di cessazione del supporto per CPU i486, la rimozione di vecchi adattatori Ethernet, la rimozione dei protocolli ISDN e AX.25, l'inclusione predefinita del meccanismo Intel FRED, il supporto per i gestori BPF in io_uring, l'ottimizzazione del sottosistema di swap, il supporto per i sottoplanificatori in sched_ext, l'I/O in modalità zero-copy nel driver ublk, l'operazione ioctl "shutdown" in Btrfs, la commutazione dinamica della modalità di prestazioni nel driver amd-pstate, e il supporto xattr per i socket Unix.
Nella nuova versione sono stati accettati 17275 miglioramenti da 2589 sviluppatori.
La dimensione del patch è di 57 MB (le modifiche hanno interessato 13528 file, aggiunte 751785 righe di codice, rimosse 405916 righe). Nell'uscita precedente c'erano 15624 miglioramenti da 2477 sviluppatori, la dimensione del patch era di 56 MB. Circa il 41% di tutte le modifiche presentate in 7.1 riguardano driver di dispositivi, circa il 12% delle modifiche sono relative all'aggiornamento di codice specifico per architetture hardware, il 14% riguarda lo stack di rete, il 5% ai file system e il 3% ai sottosistemi interni del kernel.
Le principali novità nel kernel 7.1 (1, 2, 3):
- Sottosistema disco, I/O e file system
- È stata accettata una nuova implementazione del file system NTFS - ntfsplus, basata sul codice rimosso dal kernel del classico driver ntfs. Il vecchio driver è stato rielaborato, ampliato con la possibilità di scrivere dati e adattato per supportare funzionalità moderne, come l'uso di volumi di pagine di memoria (folios) al posto della struttura buffer_head. Nel nuovo driver è stata implementata l'allocazione dei blocchi differita, che ha permesso di ottenere elevate performance nelle operazioni di scrittura e una riduzione della frammentazione. Per le operazioni di scrittura/lettura in buffer, input/output diretto, mappatura degli extent e operazioni di scrittura/lettura a pagina, è stata utilizzata la libreria iomap. Nei test iozone, il driver ntfsplus si è dimostrato essere dal 3 al 5% più veloce di ntfs3 in modalità mono-thread e dal 35 al 110% più veloce utilizzando 4 thread. La velocità di lettura di ntfsplus e ntfs3 è approssimativamente sulla stessa linea. Il driver ntfs3 rimane parte del kernel ed è stato aggiornato con correzioni e piccoli miglioramenti.
- È stata aggiunta la supporto per la generazione e la verifica dei dati di integrità T10 a livello di file system, non di dispositivo a blocchi, consentendo un miglioramento delle prestazioni nelle operazioni di lettura.
- Nel driver dei dispositivi a blocchi ublk, che consente di spostare la logica specifica nel processo nello spazio utente, è stata aggiunta la supporto per l'input/output tramite memoria condivisa senza copia dei dati tra i buffer (modalità zero-copy).
- Per i dispositivi a blocchi auto-crittografanti SED-OPAL sono stati aggiunti ioctl per gestire la modalità Single User e implementato il comando STACK_RESET.
- In Btrfs è stata dichiarata stabile la supporto per l'operazione ioctl 'shutdown', che consente di mettere il file system in uno stato in cui si tenta di completare le operazioni già avviate, bloccando però tutte le nuove operazioni.
- In exfat è stata implementata la possibilità di riservare aree vuote attraverso la chiamata a fallocate().
- Nel file system CIFS è stata aggiunta la supporto per la creazione di file temporanei con il flag O_TMPFILE.
- In the fsmount() system call, the FSMOUNT_NAMESPACE option has been added, creating a new namespace for mount points for the mounted file system. Flags have been added to the clone3() and unshare() system calls to return a new mount point namespace containing only a mounted empty FS stub based on nullfs, with the fs-dax driver providing a file system interface to DAX (Direct Access) devices.
- A protection against file descriptor brute-force attacks has been added to the NFS server, implemented through the signing of descriptors with a cryptographic signature. This protection is enabled through the sign_fh mount option.
- A symbolic fs-dax driver has been added, providing an interface for interaction with DAX (Direct Access) devices that support operation bypassing the page cache. This interface is necessary for integration into the famfs file system kernel, which is located in memory.
- In the Ceph file system, the collection of input/output metrics related to subdivisions has been implemented.
- Memoria e servizi di sistema
- È stata accettata la prima serie di modifiche per interrompere il supporto ai processori i486. Le opzioni per la compilazione del kernel con supporto per i processori 486DX, 486SX e AMD ELAN (CONFIG_M486, CONFIG_M486SX e CONFIG_MELAN) sono state rimosse da Kconfig, e dalle opzioni di compilazione per i sistemi i486 (-march=i486) sono state escluse dal Makefile. Il codice per il supporto effettivo sui processori i486 è stato mantenuto nel kernel, ma la compilazione per sistemi simili richiederà ora l'applicazione di patch ai file di assembly. Le ragioni per la rimozione del supporto ai processori i486 sono legate al desiderio di semplificare il kernel rimuovendo codice complesso che emula alcune operazioni hardware, come CX8 (confronta e scambia 8 byte) e TSC (contatore dei cicli CPU, utilizzato nel pianificatore di attività).
- Nel driver amd-pstate, utilizzato per gestire il consumo energetico sui sistemi con processori AMD, è stata implementata la commutazione dinamica delle impostazioni delle prestazioni e la modifica del comportamento della gestione dell'alimentazione in base al funzionamento da alimentazione fissa o da batteria. Ora viene attivata la modalità "performance" quando è collegato all'alimentazione fissa, mentre quando è in funzione da batteria è attivata la modalità "balance_performance".
- È attivato di default il meccanismo Intel FRED (Flexible Return and Event Delivery), che migliora l'efficienza e l'affidabilità nella consegna delle informazioni su eventi a basso livello. L'aumento delle prestazioni e la riduzione delle latenze sono garantiti dal ritorno degli eventi tramite l'istruzione per processore IRET, invece che attraverso la trasmissione degli eventi tramite la tabella IDT (Interrupt Descriptor Table). L'affidabilità è migliorata grazie al trattamento separato dell'arrivo dell'evento nel contesto del kernel e in quello dell'utente, proteggendo così da esecuzioni annidate di NMI e mantenendo registri CPU associati all'eccezione nel frame dello stack esteso.
- Nel sottosistema perf è stata aggiunta la supporto per i blocchi di monitoraggio delle performance della memoria (PMU - Performance Monitoring Unit), utilizzati nei SoC NVIDIA Tegra410.
- Accelerata l'esecuzione delle operazioni futex sui sistemi ARM, grazie all'utilizzo delle istruzioni Arm 9.6 LSUI, che consentono al kernel di accedere alla memoria dello spazio utente senza dover disattivare preventivamente la modalità di protezione PAN (Privileged Access Never).
- Nei sistemi con processori ARM è stata migliorata la supporto per l'estensione dell'architettura del set di istruzioni MPAM (Memory System Resource Partitioning and Monitoring) e aggiunta la possibilità di utilizzarla in spazio utente per gestire le risorse tramite il meccanismo resctrl. MPAM consente di contrassegnare ogni accesso alla memoria con un identificatore di sezione (PARTID, Partition ID) e un identificatore di gruppo di monitoraggio (PMG, Monitoring Group ID). Collegando il PARTID, è possibile limitare il consumo delle risorse, come la larghezza di banda della memoria o la dimensione della cache, per evitare che un gruppo di attività occupi tutte le risorse. Nel contesto del monitoraggio, la combinazione di PMG e PARTID può essere utilizzata per tracciare il consumo delle risorse di memoria in determinate tipologie di carico.
- È stata aggiunta la possibilità di utilizzare la modalità in tempo reale (PREEMPT_RT) su processori ARM a 32 bit. In precedenza, il supporto per PREEMPT_RT era fornito per le architetture x86 e x86-64, ARM64, RISC-V e LoongArch.
- Nel sistema di chiamata clone3() sono stati aggiunti nuovi flag: CLONE_NNP — vieta l'ottenimento di nuovi privilegi nel processo creato; CLONE_AUTOREAP — termina automaticamente il processo invece di trasformarlo in un processo zombie fino a che la funzione wait() non viene eseguita dal processo padre;
CLONE_PIDFD_AUTOKILL — termina il processo figlio se il relativo descrittore pidfd viene chiuso (ad esempio, alla chiusura del processo padre). - Per ogni modulo del kernel, è stato aggiunto un file import_ns nella cartella /sys/module, contenente l'elenco degli spazi dei nomi simboli importati (symbol namespace).
- Nel sistema di input/output asincrono io_uring è stata aggiunta la supporto per l'uso del sottosistema BPF per la creazione di gestori. Ad esempio, è possibile sostituire il ciclo principale di dispatching con un programma BPF.
- Nel sottosistema BPF è stata migliorata l'analisi dell'uso dello stack, il che ha notevolmente accelerato il controllo da parte del verificatore di molti programmi BPF.
- Al fine di ottimizzare le prestazioni, il sottosistema hrtimer (high resolution timer) è stato riscritto. Ora, il pianificatore di attività può utilizzare timer ad alta risoluzione senza perdita di prestazioni al posto di timer meno precisi.
- Continuano i trasferimenti delle modifiche dalla branch Rust-for-Linux, relative all'uso del linguaggio Rust come secondo linguaggio per lo sviluppo di driver e moduli del kernel (il supporto per Rust non è attivato per impostazione predefinita e non porta all'inclusione di Rust tra le dipendenze di compilazione obbligatorie per il kernel). Fino alla versione 1.85 (inclusa in Debian 13) sono aumentati i requisiti di versione di Rust necessari per la compilazione dei componenti del kernel. È stata aggiunta un'opzione Kconfig sperimentale CONFIG_RUST_INLINE_HELPERS per l'incorporamento di wrapper C nel codice Rust durante la compilazione (l'ottimizzazione ha accelerato il funzionamento del driver di blocco null del 2%). È stato aggiunto il macro ‘const_assert!’. Sono state ampliate le funzionalità dei moduli ‘sizes’, ‘clk’, ‘ptr’, ‘sync’, ‘error’.
- Al meccanismo SCHED_EXT, che consente di utilizzare BPF per creare pianificatori CPU, è stata aggiunta la funzionalità iniziale di creazione di pianificatori annidati (sub-scheduler), tramite i quali è possibile utilizzare un pianificatore di attività dedicato per ogni cgroup.
- È stata ottimizzata la sottosistema di swap. La vecchia struttura swap_map è stata sostituita con il meccanismo "Swap Table". Questo cambiamento ha migliorato le prestazioni e ridotto il consumo di memoria nella sottosistema di swap.
- Nella sottosistema DAMON (Data Access MONitor), che consente di monitorare l'accesso dei processi ai dati nella memoria RAM (ad esempio, è possibile scoprire a quali aree di memoria un processo ha fatto riferimento e quali aree sono rimaste inutilizzate), è stata aggiunta la supporto per diversi algoritmi di autoottimizzazione delle quote.
- Nella sottosistema di tracciamento è stata implementata la concezione di buffer circolari esterni, che consente di ottenere dati di tracciamento da di macchine virtuali. Questa possibilità è stata attivata negli hypervisor KVM e nVHE per trasmettere i dati di tracciamento dalla macchina guest al lato host.
- Nella sottosistema RV (Runtime Verification), progettata per verificare la correttezza delle operazioni di sistemi ad alta affidabilità, sono stati aggiunti componenti di monitoraggio "stall" per tracciare le attività che sono temporaneamente sospese o bloccate e "deadline" per analizzare il comportamento dello scheduler.
- Virtualizzazione e sicurezza
- Per impostazione predefinita è attivato il flag PROC_MEM_FORCE_PTRACE, che consente di aggirare i diritti di accesso alla memoria di un processo tramite il file /proc/PID/mem solo per i processi che utilizzano la chiamata di sistema ptrace() per il debug.
- È stato aggiunto un nuovo insieme di hook per i moduli LSM (Linux Security Module), che semplifica l'implementazione delle politiche per i file system a strati, come overlayfs. È stato inoltre aggiunto un hook per gestire l'accesso ai socket Unix, attivato nel modulo LSM Landlock per definire politiche di accesso ai socket Unix.
- Nella libreria crittografica integrata lib/crypto, che offre funzioni più semplici e veloci rispetto all'API crittografica tradizionale, è stato aggiunto il supporto per gli algoritmi AES-CMAC, AES-XCBC-MAC, AES-CBC-MAC, GHASH e SM3. È stata aggiunta documentazione per lib/crypto.
- È stata implementata la modalità pKVM (Protected KVM) per un'elevata isolamento della memoria anonima, utilizzando le estensioni di virtualizzazione per l'architettura AArch64. In questa modalità, le pagine di memoria degli ospiti vengono escluse dalla tabella degli indirizzi virtuali del sistema host.
- Nel hypervisor KVM è stato aggiunto il supporto per la quinta versione del controllore virtuale delle interruzioni ARM (VGICv5 - ARM Virtual Generic Interrupt Controller v5).
- Sottosistema di rete
- Per i socket unix creati dalla funzione socket(), è stato implementato il supporto per gli attributi estesi dei file (xattr) «user.*». Tra le applicazioni si evidenzia l'assegnazione di etichette tramite attributi estesi ai socket Unix utilizzati per l'IPC Varlink, al fine di distinguerli dal resto per l'ispezione e la debug dell'IPC tramite programmi BPF. In systemd-journald, gli attributi estesi sono destinati a essere utilizzati per definire il formato del log in relazione al socket /dev/log.
- Rimosso il supporto per il protocollo UDP-Lite (RFC 3828), che consente la consegna di pacchetti con checksum errato con l'aspettativa che, ad esempio, i dati audio e video parzialmente danneggiati possano essere recuperati a livello di codec. Il protocollo è stato rimosso poiché nessuno lo utilizza.
- Eliminata la possibilità di costruire lo stack IPv6 come modulo del kernel, che non veniva utilizzato in pratica (IPv6 viene o integrato nel kernel o completamente disattivato), ma complicava la manutenzione poiché, nella costruzione di IPv6 come modulo del kernel (CONFIG_IPV6=m), molti sotto-sistemi erano costretti ad aggiungere gestori inutili nel caso di scaricamento del modulo IPv6.
- Attrezzature
- Il driver AMDGPU ha attivato un nuovo motore di visualizzazione (DC) per APU AMD della serie HD 7000 (Sea Islands, GCN 1.1).
- Il driver Nouveau ha implementato il supporto iniziale per la GPU NVIDIA GA100 basata sull'architettura Ampere.
- Continua lo sviluppo del 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 il sottosistema grafico dei processori Intel Nova Lake-P. Implementati oggetti buffer liberabili (Purgeable Buffer Objects).
- Integrazione continua dei componenti del driver Nova per GPU NVIDIA con le firmware GSP, utilizzate a partire dalla serie NVIDIA GeForce RTX 2000 basata sull'architettura micro Turing. Il driver è scritto in Rust. È stata aggiunta una supporto iniziale per le GPU basate sull'architettura Turing.
- Aggiunto il driver DRM corebootdrm per l'output grafico tramite il framebuffer dei firmware basati su CoreBoot.
- Aggiunto il supporto per i dispositivi audio ASoC AMD RPL DMIC, Cirrus Logic CS42L43, CS47L47, NVIDIA CPCAP e WM8962. Migliorato il supporto per i dispositivi audio con interfaccia USB: Huawei Headset, Focusrite Novation, MV-Silicon, Studio 1824, Arturia AF16Rig, Hotone Audio, Feaulle Rainbow,
PreSonus AudioBox, Moondrop Ju Jiu, Scarlett 18i20. - Aggiunto il driver yogafan per il monitoraggio della velocità di rotazione della ventola sui laptop Lenovo Yoga, Legion e IdeaPad.
- Aggiunto il supporto per piattaforme ARM, SoC e dispositivi: Qualcomm Glymur, Qualcomm Mahua, Qualcomm Eliza, Qualcomm IPQ5210, Qualcomm apq8084 e ipq806x, Axis ARTPEC-9, ARM Zena, ARM corstone-1000-a320, Microchip LAN9691, Microchip PIC64GX, Rockchip RV1103B, Renesas RZ/G3L, NXP S32N79.
- Rimosso il supporto per i controller AHCI SATA e PCIe utilizzati in SoC Baikal-T1, così come i driver del timer, della memoria, physmap, bus, hwmon, dwc e bt1-rom. La motivazione della rimozione è l'assenza di supporto e l'integrazione incompleta nei componenti del kernel della piattaforma Baikal, la cui produzione in Russia è stata interrotta nel novembre 2025.
- Soppressi 12 driver per dispositivi Ethernet con interfacce ISA e PCMCIA, prodotti prima del 2002, per i quali non sono stati trovati utenti che li utilizzassero in sistemi operativi. Inoltre, dal kernel sono esclusi
il sottosistema ISDN, le implementazioni dei protocolli AX.25, CAIF e Bluetooth CMTP (Common ISDN Application Programming Interface Message Transport Protocol), i driver yellowfin (Yellowfin Gigabit-NIC), hamachi (Hamachi GNIC-II), hamradio (Amateur Radio), inport e logibm (busmouse). La ragione della rimozione è stata l'assenza di sviluppatori attivi, mentre aumentava il numero di errori riscontrati tramite syzbot e strumenti AI, che nessuno si prende la responsabilità di correggere e gran parte del carico per risolvere gravi problemi ricade sui manutentori dei principali sottosistemi di rete del kernel. Sono state rimosse oltre 140.000 righe di codice.
Fonte: opennet.ru
