
Dopo due mesi di sviluppo, Linus Torvalds ha presentato rilascio del kernel Linux 7.1. Tra le modifiche più significative: nuovo driver ntfsplus, prima fase di dismissione del supporto per CPU i486, rimozione dei vecchi adattatori Ethernet, rimozione dei protocolli ISDN e AX.25, attivazione predefinita del meccanismo Intel FRED, supporto per gestori BPF in io_uring, ottimizzazione del sottosistema di paging, supporto per sotto-schedulatori in sched_ext, I/O in modalità zero-copy nel driver ublk, operazione ioctl shutdown in Btrfs, commutazione dinamica della modalità di performance nel driver amd-pstate, supporto per xattr per i socket Unix.
Nella nuova versione sono stati accettati 17275 aggiornamenti da 2589 sviluppatori, la dimensione della patch è di 57 MB (le modifiche hanno riguardato 13528 file, aggiunte 751785 righe di codice, rimosse 405916 righe). Nell'ultima versione c'erano 15624 aggiornamenti da 2477 sviluppatori, la dimensione della patch era di 56 MB. Circa il 41% di tutte le modifiche presentate in 7.1 sono legate ai driver delle periferiche, circa il 12% delle modifiche riguardano l'aggiornamento del codice specifico per architetture hardware, il 14% è relativo allo stack di rete, il 5% ai file system e il 3% ai sottosistemi interni del kernel.
Le principali novità nel kernel 7.1 (kernelnewbies.org, lwn.net, opennet):
Sottosistema di disco, input/output e file system
- È stata accettata una nuova implementazione del file system NTFS — ntfsplus, basata sul codice del driver ntfs rimosso dal kernel. Il vecchio driver è stato riprogettato, ampliato con la possibilità di scrivere dati e adattato per supportare capacità moderne, come l'uso di fogli di memoria invece della struttura buffer_head. Nel nuovo driver è stata implementata l'allocazione ritardata dei blocchi, che ha permesso di ottenere elevate prestazioni nelle operazioni di scrittura e di ridurre la frammentazione. Per le operazioni di scrittura/lettura in buffer, I/O diretto, mappatura degli extents e operazioni di scrittura/lettura pagina sono state utilizzate le librerie iomap. Nei test di iozone, il driver ntfsplus si è rivelato dal 3 al 5% più veloce di ntfs3 in modalità monothread e dal 35 al 110% con l'uso di 4 thread. La velocità di lettura di ntfsplus e ntfs3 è pressoché equivalente. Il driver ntfs3 rimane parte del kernel e riceve sono stati apportati correzioni e piccoli miglioramenti.
- È stato aggiunto il supporto per la generazione e la verifica dei dati di integrità T10 (deepwiki.com) a livello di file system, e non di dispositivo a blocchi, il che consente di migliorare le prestazioni delle operazioni di lettura.
- Nel driver dei dispositivi a blocchi ublk, che consente di spostare la logica specifica nel processo nello spazio dell'utente, è stata aggiunta supporto per input/output tramite memoria condivisa senza copia dei dati tra i buffer (modalità zero-copy).
- Per dispositivi a blocchi auto-criptati SED-OPAL aggiunti ioctl per la gestione della modalità Single User ed è stato implementato il comando STACK_RESET.
- In Btrfs è stata dichiarata stabile la supporto per l'operazione ioctl shutdown, che permette di mettere il FS 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 tramite la chiamata fallocate().
- Nel FS CIFS è stato aggiunto il supporto per la creazione di file temporanei con il flag O_TMPFILE.
- Nella chiamata di sistema fsmount() è stata aggiunta l'opzione FSMOUNT_NAMESPACE, che crea un nuovo spazio dei nomi per i punti di montaggio della file system montato. Nei syscalls clone3() e unshare() sono stati aggiunti flag per restituire un nuovo spazio dei nomi per i punti di montaggio, contenente solo un FS dashboard vuoto basato su nullfs, driver fs-dax con interfaccia FS per dispositivi DAX (Direct Access).
- Nel server NFS è stata aggiunta protezione contro gli attacchi di guessing dei file descriptor, implementata attraverso la certificazione dei descriptor con una firma crittografica. La protezione viene attivata tramite l'opzione di montaggio sign_fh.
- Aggiunto driver simbolico fs-dax, che fornisce un'interfaccia per l'interazione con i dispositivi DAX (kernel.org) (Direct Access), che supportano il funzionamento bypassando la cache delle pagine. Questa interfaccia è necessaria per l'integrazione nel kernel della file system famfs, posizionata nella memoria volatile.
- Nel file system Ceph è stato implementato raccoglie metriche sull'input/output in relazione ai sottosistemi.
Memoria e servizi di sistema
- È stata accettata la prima serie di modifiche per interrompere il supporto per i 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 le opzioni di compilazione per i sistemi i486 (-march=i486) sono state escluse da Makefile. Il codice per il supporto effettivo per il funzionamento sui processori i486 è stato mantenuto nel kernel, ma la compilazione per questi sistemi richiederà ora l'applicazione di patch ai file di compilazione. Le ragioni per la rimozione del supporto per i processori i486 sono dovute al desiderio di liberare il kernel da codice complesso che emula alcune operazioni hardware, come CX8 (confronta e scambia 8 byte) e TSC (contatore di cicli CPU, utilizzato nello scheduler dei task).
- Nel driver amd-pstate, utilizzato per gestire il consumo energetico nei sistemi con processori AMD, è implementato viene attivato il passaggio dinamico delle impostazioni di prestazione e la modifica del comportamento della gestione dell’alimentazione in base all’utilizzo della rete elettrica o della batteria. Quando è collegato alla rete elettrica, ora viene attivata la modalità performance, mentre quando funziona con la batteria si attiva la modalità balance_performance.
- È attivato per impostazione predefinita il meccanismo Intel FRED (Flexible Return and Event Delivery), che migliora l'efficienza e l'affidabilità nella consegna delle informazioni relative a eventi a basso livello. L'aumento delle prestazioni e la riduzione delle latenze sono garantiti grazie al ritorno degli eventi tramite l'istruzione di processo IRET invece di trasmettere gli eventi attraverso la tabella IDT (Interrupt Descriptor Table). L'affidabilità è migliorata grazie al trattamento separato dell'arrivo dell'evento nel contesto del kernel e nel contesto utente, alla protezione contro l'esecuzione nidificata degli NMI e al salvataggio nel quadro di stack esteso di tutti i registri CPU associati all'eccezione.
- Nella sottosistema perf è stata aggiunta supporto per moduli di monitoraggio delle prestazioni della memoria (PMU - Performance Monitoring Unit), utilizzati nei SoC NVIDIA Tegra410.
- Accelerata l'esecuzione delle operazioni futex nei sistemi ARM, grazie all'uso delle istruzioni Arm 9.6 LSUI, che consentono al kernel di accedere alla memoria dello spazio utente senza disabilitare preventivamente la modalità di protezione. PAN (arm.com) (Privileged Access Never).
- Nei sistemi con processori ARM è migliorato il supporto per l'estensione dell'architettura del set di istruzioni MPAM (Memory System Resource Partitioning and Monitoring) e è stata aggiunta la possibilità di usarlo nello spazio utente per gestire le risorse tramite il meccanismo resctrl. MPAM consente di etichettare ogni accesso alla memoria con un identificatore di sezione (PARTID, Partition ID) e con un identificatore di gruppo di monitoraggio (PMG, Monitoring Group ID). In relazione al PARTID è possibile limitare il consumo di risorse, come la larghezza di banda della memoria o la dimensione della cache, in modo che un gruppo di compiti non occupi tutte le risorse. Nel contesto del monitoraggio, la combinazione di PMG e PARTID può essere utilizzata per monitorare il consumo delle risorse di memoria con determinati tipi di carico.
- È stata aggiunta possibilità di utilizzare la modalità in tempo reale (PREEMPT_RT) sui 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.
- Nella chiamata di sistema clone3() aggiunti nuovi flag: CLONE_NNP — divieto di ottenere nuovi privilegi nel processo creato; CLONE_AUTOREAP — terminazione automatica del processo invece della sua trasformazione in processo zombie fino all'esecuzione della funzione wait() da parte del processo padre; CLONE_PIDFD_AUTOKILL — terminazione del processo figlio in caso di chiusura del descrittore pidfd a esso associato (ad esempio, alla conclusione del processo padre).
- Per ciascun modulo del kernel, nella directory /sys/module è stato aggiunto un file import_ns che contiene l'elenco degli spazi dei nomi simbolici importati (spazio dei nomi simbolico).
- 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 dispatch con un programma BPF.
- Nel sottosistema BPF è stato modernizzato l'analisi dell'uso dello stack, il che ha notevolmente accelerato la verifica di molti programmi BPF da parte del verificatore.
- Con l'obiettivo di ottimizzare le prestazioni riscritta il sottosistema hrtimer (high resolution timer). Il pianificatore di attività può ora utilizzare timer ad alta risoluzione senza perdita di prestazioni al posto di timer meno precisi.
- Proseguito il 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 per Rust non è attivato per impostazione predefinita e non comporta che Rust diventi una dipendenza di build obbligatoria per il kernel). Fino alla versione 1.85 (disponibile in Debian 13) sono stati aumentati i requisiti per la versione di Rust necessaria per la compilazione dei componenti del kernel. È stata aggiunta l'opzione Kconfig sperimentale CONFIG_RUST_INLINE_HELPERS per incorporare i wrapper in C nel codice Rust durante la compilazione (l'ottimizzazione ha accelerato il funzionamento del driver a blocchi null del 2%). È stato aggiunto il macro ‘const_assert!’. Ampliate le funzionalità dei moduli sizes, clk, ptr, sync, error.
- Meccanismo SCHED_EXT, che consente di utilizzare BPF per creare pianificatori CPU, è stata aggiunta la possibilità iniziale di creare pianificatori annidati (sub-scheduler), tramite i quali è possibile utilizzare un pianificatore di attività specifico per ogni cgroup.
- Proseguita l'ottimizzazione del sottosistema swap. È stata rimossa la vecchia struttura swap_map, sostituita con il meccanismo “Swap Table”. Questa modifica ha consentito di migliorare le prestazioni e ridurre il consumo di memoria nel sottosistema di swapping.
- Nel sottosistema DAMON (Data Access MONitor), che consente di monitorare l'accesso del processo ai dati nella memoria operativa (ad esempio, è possibile scoprire quali aree di memoria sono state consultate dal processo e quali aree di memoria sono rimaste inutilizzate), è stata aggiunta supporto per diversi algoritmi di ottimizzazione quote.
- Nella sottosistema di tracciamento è stata implementata la concezione di buffer circolari esterni, che consente di ottenere dati di tracciamento da macchine virtuali. Questa funzionalità è attiva nei hypervisor KVM e nVHE per la trasmissione dei dati di tracciamento dal sistema guest al lato host.
- Nel sottosistema RV (kernel.org) (Runtime Verification), destinata a verificare la correttezza del funzionamento di sistemi ad alta affidabilità, sono stati aggiunti componenti di monitoraggio "stall" per monitorare i task la cui esecuzione è temporaneamente sospesa o bloccata, e "deadline" per analizzare il comportamento dello scheduler.
Virtualizzazione e sicurezza
- Per impostazione predefinita è attivata l'opzione PROC_MEM_FORCE_PTRACE, che consente di eludere i diritti di accesso alla memoria del processo tramite il file /proc/PID/mem solo per i processi che utilizzano la chiamata di sistema ptrace() per il debug.
- Aggiunto un nuovo set di hook per i moduli LSM (Linux Security Module), che semplifica l'implementazione delle politiche per i file system a strati, come overlayfs. In LSM c'è anche è stata aggiunta un hook per gestire l'accesso ai socket Unix, che è stato utilizzato nel modulo LSM Landlock per l'assegnazione delle politiche di accesso ai socket Unix.
- Nella libreria crittografica integrata lib/crypto, che offre funzioni più semplici e veloci rispetto all'API crittografica tradizionale, è stata aggiunta supporto per gli algoritmi AES-CMAC, AES-XCBC-MAC, AES-CBC-MAC, GHASH e SM3. Aggiunta documentazione attraverso lib/crypto.
- È stato implementato il modo pKVM (Protected KVM) per un'isolamento rigoroso della memoria anonima utilizzando estensioni di virtualizzazione per l'architettura AArch64. In questa modalità, le pagine di memoria dell'host guest sono escluse dalla tabella degli indirizzi virtuali del sistema host.
- Nell'hypervisor KVM è stato aggiunto il supporto per la quinta versione del controllore di interruzioni virtuale ARM (VGICv5 — ARM Virtual Generic Interrupt Controller v5).
Sottosistema di rete
- Per i socket Unix creati dalla funzione socket(), è stata implementata supporto per gli attributi estesi dei file (xattr) user.*. Tra le applicazioni, è segnalata l'assegnazione di etichette tramite attributi estesi ai socket Unix utilizzati per IPC Varlink, al fine di distinguerli per ispezione e debugging dell'IPC utilizzando programmi BPF. In systemd-journald, gli attributi estesi sono destinati ad essere utilizzati per determinare il formato del log in relazione al socket /dev/log.
- È stata eliminata supporto del protocollo UDP-Lite (RFC 3828), che consente la consegna di pacchetti con checksum errati assumendo che, ad esempio, dati audio e video parzialmente danneggiati possano essere recuperati a livello di codec. Il protocollo è stato rimosso poiché non viene utilizzato da nessuno.
- Rimossa la possibilità di costruire uno stack IPv6 come modulo del kernel, che non veniva utilizzato in pratica (IPv6 viene integrato nel kernel o completamente disabilitato), ma complicava la manutenzione poiché, costruendo IPv6 come modulo del kernel (CONFIG_IPV6=m), molte sottosistemi erano costretti ad aggiungere gestori inutili nel caso in cui il modulo IPv6 venisse scaricato.
Apparecchiatura
- Nel driver AMDGPU è attivato nuovo motore di visualizzazione (DC) per APU AMD serie HD 7000 (Sea Islands, GCN 1.1).
- Nel driver Nouveau è stata aggiunta supporto iniziale per GPU NVIDIA GA100 basato su architettura micro Ampere.
- Continuato il lavoro sul driver drm (Direct Rendering Manager) Xe per GPU basate sull'architettura Intel Xe, utilizzata nelle schede grafiche Intel della serie Arc e nella grafica integrata, a partire dai processori Tiger Lake. Aggiunto supporto per la sottosistema grafica dei processori Intel Nova Lake-P. Implementati oggetti buffer pulibili (Purgeable Buffer Objects).
- Continuata l'integrazione dei componenti del driver Nova per GPU NVIDIA, dotate di firmware GSP, utilizzati a partire dalla serie NVIDIA GeForce RTX 2000 basata su architettura Turing. Il driver è scritto in linguaggio Rust. Aggiunto supporto iniziale per GPU basate su architettura Turing.
- Aggiunto DRM-driver corebootdrm per l'output grafico tramite framebuffer di firmware basati su CoreBoot.
- È stata aggiunta supporto per i dispositivi audio ASoC AMD RPL DMIC, Cirrus Logic CS42L43, CS47L47, NVIDIA CPCAP e WM8962. Migliorato il supporto per 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 driver yogafan per monitorare la velocità di rotazione della ventola sui laptop Lenovo Yoga, Legion e IdeaPad.
- È stata aggiunta 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.
- È stata eliminata supporto per i controller AHCI SATA e PCIe utilizzati nei SoC Baikal-T1, così come i driver per timer, memoria, physmap, bus, hwmon, dwc e bt1-rom. La rimozione è giustificata dalla mancanza di manutenzione e dall'integrazione incompleta dei componenti della piattaforma Baikal nel kernel, la produzione della quale in RF è stata interrotta a novembre 2025.
- Rimossi 12 driver per dispositivi Ethernet con interfacce ISA e PCMCIA, prodotti fino al 2002, per i quali non si sono trovati utenti che li utilizzassero in sistemi di lavoro. È stata inoltre esclusa dal kernel la sottosistema ISDN, implementazione dei protocolli AX.25, CAIF e Bluetooth CMTP (Common ISDN Application Programming Interface Message Transport Protocol), driver yellowfin (Yellowfin Gigabit-NIC), hamachi (Hamachi GNIC-II), hamradio (Radio Amatoriale), inport e logibm (busmouse). La ragione della rimozione è stata l'assenza di mantenitori attivi di fronte all'aumento del numero di errori rilevati tramite syzbot e strumenti AI, che nessuno si prende carico di correggere e tutto il carico per risolvere problemi seri ricade sui manutentori delle principali sottosistemi di rete del kernel. Complessivamente sono state rimosse più di 140.000 righe di codice.
Fonte: linux.org.ru
