Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 6.14. Tra le novità più significative ci sono: il driver ntsync con primitive di sincronizzazione di Windows NT, la configurazione del bilanciamento delle operazioni di lettura in Btrfs RAID1, il supporto a reflink in XFS in modalità realtime, la possibilità di input/output bufferizzati non memorizzati, il cgroup dmem per limitare la memoria GPU, l'implementazione di io_uring in FUSE, la delega degli attributi in NFS, il supporto alla scrittura atomica in Device mapper, l'accelerazione dei link simbolici, la gestione della possibilità di esecuzione di script, il supporto ai chip Qualcomm Snapdragon 8 Elite e un driver per NPU AMD.
Nella nuova versione sono stati inclusi 12115 fix da 1984 sviluppatori, la dimensione della patch è di 39 MB (le modifiche hanno riguardato 10170 file, sono state aggiunte 531586 righe di codice e sono state rimosse 235999 righe). Nella precedente versione ci sono stati 14172 fix da 2086 sviluppatori, con una dimensione della patch di 46 MB. Circa il 41% di tutte le modifiche presentate in 6.14 riguardano i driver di dispositivi, circa il 13% riguarda l'aggiornamento del codice specifico per le architetture hardware, il 14% è correlato allo stack di rete, il 7% ai file system e il 4% ai sottosistemi interni del kernel.
Le principali novità nel kernel 6.14:
- Sottosistema disco, I/O e file system
- Nel filesystem Btrfs è stata aggiunta la supporto per nuovi metodi di bilanciamento delle operazioni di lettura tra i dischi che compongono un array RAID1. Oltre alla precedente distribuzione del carico basata sugli identificatori dei processi (pid), nella nuova versione sono stati proposti tre nuovi modi di bilanciamento: "rotation" (distribuzione uniforme del carico su tutti i dischi, attivato per impostazione predefinita); "latency" (distribuzione tenendo conto delle latenze, utile in caso di guasti o funzionamento instabile dei dischi); devid (gestione manuale). Per modificare il modo di bilanciamento è stato aggiunto l'interfaccia "/sys/fs/btrfs//read_policy". Tra le altre modifiche in Btrfs, è stata implementata la ioctl FS_IOC_READ_VERITY_METADATA.
- È stata aggiunta la modalità di input/output buffering non cache, in cui i dati vengono rimossi dalla cache di pagina immediatamente dopo il completamento delle operazioni di lettura o scrittura. Questa modifica può risultare utile quando si utilizzano dispositivi di archiviazione molto veloci, poiché il caching delle operazioni in memoria è superfluo. Per tali dispositivi, la nuova modalità consente di evitare il consumo eccessivo di memoria da parte della cache di pagina, senza dover ricorrere a un API complessa per l'input/output diretto (Direct I/O).
- In fsnotify, il meccanismo di monitoraggio delle modifiche nel filesystem, è stato aggiunto un nuovo evento FS_PRE_ACCESS, generato nella fase prima dell'accesso al contenuto di un file. L'evento viene gestito in modo sincrono, ossia il kernel invia l'evento e attende una risposta. Se la risposta è ricevuta, l'operazione viene eseguita; se si verifica un errore, la chiamata di sistema restituisce un codice di errore nello spazio utente. Con FS_PRE_ACCESS, un processo nello spazio utente, ad esempio, può organizzare il riempimento del file man mano che i dati diventano disponibili in uno storage lento.
- Nel sottosistema FUSE, che consente di creare implementazioni di file system nello spazio utente, è stata aggiunta la supporto per lo scambio di dati tra il kernel e il gestore nello spazio utente utilizzando il meccanismo di input/output io_uring. Questa modifica consente di migliorare le prestazioni di FUSE riducendo i cambi di contesto tra il kernel e lo spazio utente.
- Nel file system XFS è stata aggiunta la possibilità di utilizzare il reverse mapping (rmap) in modalità di funzionamento con ritardi prevedibili ("realtime device"). Il reverse mapping consente di determinare quale file utilizza un determinato blocco nel dispositivo di archiviazione. Grazie all'rmap, in XFS per la modalità realtime è stata implementata la supporto per l'operazione reflink, che consente di creare copie di file clonando i metadati del file e creando un collegamento ai dati già esistenti senza copiarli effettivamente.
- Nel VFS è stata implementata la cache della dimensione dei link simbolici, che ha portato a un aumento del 1.5% nella velocità dell'operazione readlink (nel test con /initrd.img in ext4). La cache è attivata nei file system ext4 e tmpfs.
- Nella realizzazione di NFSv4.2 è stata aggiunta la supporto per il delegato degli attributi dei file, che consente di gestire attributi come il tempo di modifica (mtime) dal lato del client NFS, senza dover ripristinare le modifiche sul server. NFS ha anche migliorato il supporto per il protocollo "LOCALIO", permettendo di determinare se client e server NFS si trovano sulla stessa macchina, per attivare ottimizzazioni come l'uso dell'input/output diretto (Direct I/O) da parte del client.
- Migliorate le prestazioni delle operazioni di lettura nei file system NETFS, CIFS e AFS (Andrew File System).
- In Squashfs è stata inclusa la modalità di caricamento diretto dei blocchi nella cache della pagina (SQUASHFS_FILE_DIRECT), che consente di evitare l'uso di una cache read_page separata. Questa modifica ha ridotto la quantità di memoria utilizzata durante le operazioni di Squashfs.
- Nella chiamata di sistema statx() è stato implementato il flag STATX_DIO_READ_ALIGN, per determinare l'allineamento necessario per le operazioni di lettura da un file.
- Nel file system Bcachefs, il formato delle strutture di disco è stato aggiornato e stabilizzato. Qualsiasi ulteriore modifica del formato sarà considerata facoltativa e sarà implementata sotto forma di integrazioni opzionali. È stata notevolmente aumentata la velocità di verifica dell'integrità del FS. Inoltre, in Bcachefs è migliorato il funzionamento in modalità di sola lettura; sono stati risolti problemi che portavano a chiamate di memoria dopo la sua liberazione (use after free); risolti problemi con i puntatori reflink in fsck; corretta la gestione del riavvio delle transazioni.
- È stato ripristinato il modulo md-linear, progettato per unire dispositivi a blocchi. Questo modulo era stato precedentemente dichiarato obsoleto e rimosso dal kernel 6.8, ma si è rivelato essere richiesto, quindi è stato ora ripristinato.
- I file system F2FS e SQUASHFS sono stati convertiti per utilizzare i folios di pagina della memoria.
- I file system OCFS2 e DLMFS sono stati convertiti per utilizzare il nuovo API di montaggio delle partizioni.
- Nel driver null_blk è stato implementato l'attributo 'rotational', impostabile tramite configfs, che consente di simulare il funzionamento con un dispositivo basato su dischi rotanti per semplificare il test delle funzioni del kernel.
- Nel sistema Device mapper e nei moduli dm-mirror, dm-io, dm-table, dm-linear, dm-stripe e dm-raid1 è stata implementata la supporto per la scrittura atomica.
- Memoria e servizi di sistema
- Completata l'integrazione nel kernel del driver ntsync, che realizza il dispositivo simbolico /dev/ntsync e un insieme di primitivi per la sincronizzazione utilizzati nel kernel di Windows NT. L'implementazione di tali primitivi a livello di kernel consente di aumentare significativamente le prestazioni dei giochi Windows eseguiti tramite Wine. L'incremento delle prestazioni è dovuto all'eliminazione dei sovraccarichi legati all'uso di RPC nello spazio utente. La creazione di un driver separato per il kernel Linux è giustificata dalla difficoltà di implementare correttamente l'API di sincronizzazione NT sopra i primitivi esistenti nel kernel.
- È stato aggiunto un nuovo controller cgroup DMEM per il monitoraggio separato delle aree di memoria dei dispositivi, come le GPU. DMEM consente di creare cgroup distinti per le varie attività che operano con la GPU, in modo che possano essere eseguite senza influenzarsi a vicenda. Questa nuova funzionalità risolve il problema della terminazione forzata delle operazioni con GPU in caso di esaurimento della memoria disponibile, grazie al monitoraggio della memoria riflessa della GPU e della memoria utilizzata dai driver CPU in cgroup separati.
- Sono state apportate ottimizzazioni per scalare l'operazione di flush della cache TLB (Translation Lookaside Buffer), utilizzata per accelerare la conversione degli indirizzi virtuali in fisici. Le ottimizzazioni aggiunte prevedono l'aggiornamento posticipato di alcune strutture dati durante il cambio di contesto, il che consente di migliorare le prestazioni durante l'esecuzione di alcuni test.
- Le prestazioni del meccanismo MGLRU (Multi-Generational LRU), utilizzato per determinare quali pagine di memoria sono in uso e quali possono essere espulse nello spazio di swap, sono state migliorate.
- Sono proseguiti i trasferimenti delle modifiche dalla branch Rust-for-Linux relative all'utilizzo del linguaggio Rust come secondo linguaggio per lo sviluppo di driver e moduli del kernel (il supporto di Rust non è abilitato per impostazione predefinita e non comporta l'inclusione di Rust tra le dipendenze di build obbligatorie per il kernel). È stata fornita la possibilità di utilizzare nel codice del kernel il macro "derive(CoercePointee)", che consente di usare Smart Pointer con oggetti trait. Sono state incluse nel kernel le binding Rust per PCI, piattaforme, Open Firmware, dispositivi a caratteri e alcune funzionalità di input/output. Greg Kroah-Hartman, responsabile del supporto della branch stabile del kernel Linux, ha descritto lo stato attuale come "quasi pronto per scrivere un driver reale in Rust".
- Negli script di build è stato introdotto un nuovo codice per generare versioni di simboli di debug per i moduli caricati, che ora utilizza informazioni dai registri di debug in formato DWARF, anziché analizzare direttamente il codice sorgente. Questa modifica consente l'applicazione del versioning dei simboli di debug per i moduli scritti in Rust. La vecchia implementazione è comunque mantenuta nel kernel, e la scelta del generatore avviene a livello di opzioni di build.
- Per l'architettura PowerPC è stata implementata la supporto alla modalità di preemption pigra delle attività (PREEMPT_LAZY), che corrisponde alla modalità di preemption totale («full preemption») per le attività in tempo reale (RR/FIFO/DEADLINE), ma ritarda la preemption delle attività normali (SCHED_NORMAL) fino al limite del tick.
- Nel sottosistema di profilazione delle prestazioni «perf» è stata aggiunta la supporto per i contatori di consumo energetico dei processori AMD. È stata aggiunta la possibilità di operare su sistemi con fino a 2048 core CPU.
- È stata fornita la possibilità di utilizzare il parametro sysctl pid_max con gli spazi dei nomi degli identificatori di processo (ID namespace). Il parametro pid_max è destinato a limitare il valore massimo degli identificatori di processo (PID) e ora può essere utilizzato per limitare il numero massimo di processi che possono essere eseguiti nello spazio dei nomi specificato. La gestione del parametro avviene in modo gerarchico, ossia i limiti negli spazi dei nomi esterni si applicano agli spazi dei nomi annidati.
- Quando si utilizza la chiamata di sistema execveat per avviare un processo, nel file system /proc verrà ora visualizzato il nome del file eseguito, anziché il numero del descrittore di file.
- Nel codice sorgente del kernel (nella directory samples/vfs) è stata aggiunta un'utilità mountinfo, che dimostra l'uso delle chiamate di sistema statmount() e listmount().
- Nel sottosistema BPF sono state introdotte nuove funzioni bpf_local_irq_save() e bpf_local_irq_restore() per disabilitare temporaneamente le interruzioni sulla CPU locale. Queste funzioni possono essere utilizzate per implementare strutture la cui gestione non è interrotta dalle interruzioni.
- Nella chiamata di sistema madvise(), utilizzando le opzioni MADV_DONTNEED e MADV_FREE, viene garantita la liberazione delle tabelle delle pagine di memoria associate all'intervallo di indirizzi liberato, poiché in alcune situazioni le pagine di memoria vuote possono occupare una quantità significativa di memoria.
- Per l'architettura OpenRISC è stata implementata la supporto per il meccanismo delle sequenze riavviabili (rseq, restartable sequences), destinato a consentire l'esecuzione atomica rapida delle operazioni che, in caso di interruzione da parte di un altro thread, vengono annullate e viene tentato nuovamente l'esecuzione.
- È stata effettuata una riorganizzazione del codice con l'implementazione degli algoritmi CRC32 e CRC-T10DIF, che non si sovrappone più al sottosistema crypto e viene chiamato direttamente dall'interfaccia della libreria. Questa modifica ha semplificato il codice e migliorato la sua efficienza.
- Nella struttura di input/output asincrono io_uring è stata aggiunta un'interfaccia per il trasferimento di metadati aggiuntivi sulla integrità durante l'esecuzione di operazioni di lettura e scrittura.
- Virtualizzazione e sicurezza
- Nella chiamata di sistema execveat è stato aggiunto il flag AT_EXECVE_CHECK, che consente di controllare la validità dell'esecuzione di un file senza avviarlo effettivamente, tenendo conto delle politiche di sicurezza, dei diritti di accesso e dei moduli LSM attivi. Per l'uso in combinazione con AT_EXECVE_CHECK, sono stati suggeriti i flag securebit SECBIT_EXEC_RESTRICT_FILE e SECBIT_EXEC_DENY_INTERACTIVE, che possono essere utilizzati per limitare l'esecuzione di file con script in linguaggi di programmazione interpretati. Il flag SECBIT_EXEC_RESTRICT_FILE prescrive a collegatori e interpreti di utilizzare l'opzione AT_EXECVE_CHECK per verificare la validità di esecuzione, mentre il flag SECBIT_EXEC_DENY_INTERACTIVE vieta il trattamento di comandi interattivi. L'idea principale della modifica è la capacità di applicare politiche di sicurezza non solo a file eseguibili tradizionali, ma anche a file di testo contenenti script che possono essere caricati tramite l'avvio di un interprete (cioè, il divieto di esecuzione può essere implementato non solo nell'esecuzione di './script.sh', ma anche nell'esecuzione sotto forma di 'sh script.sh').
- Nei sistemi x86 è supportato il monitoraggio sicuro dei contatori del tempo per i sistemi guest, che impedisce la modifica dell'orologio di sistema della macchina virtuale dall'ambiente host. Questa funzionalità si basa sul meccanismo AMD SEV (Secure Encrypted Virtualization), utilizzato nei sistemi di virtualizzazione per la protezione di macchine virtuali da interventi da parte dell'ipervisor o dell'amministratore del sistema host.
- È stata aggiunta al sistema di controllo di accesso mandato SELinux il supporto per le regole xperm, che consentono di associare le politiche SELinux a specifiche chiamate ioctl() o messaggi netlink.
- Per la firma dei moduli del kernel, l'algoritmo predefinito è ora SHA512 invece di SHA1.
- Nei driver per sistemi guest VirtualBox è stata inclusa la supporto per l'architettura ARM64.
- Nel hypervisor KVM Continua il lavoro per l'implementazione del meccanismo Intel TDX (Trusted Domain Extensions) per la crittografia della memoria dei sistemi guest.
- Nel virtio_blk è stato aggiunto il supporto per la modalità di recupero degli errori.
- Sottosistema di rete
- Nell'implementazione del protocollo RxRPC è stata introdotta la possibilità di utilizzare pacchetti UDP di grandi dimensioni per migliorare la capacità di vittoria.
- Per TCP è stato aggiunto il supporto per l'algoritmo RACK-TLP per la rilevazione della perdita di pacchetti.
- È stato aggiunto un nuovo parametro sysctl tcp_tw_reuse_delay, attivo in relazione allo spazio dei nomi (network namespace) e che consente di impostare il ritardo prima che il sistema possa riutilizzare un numero di porta di rete dopo la chiusura di un socket TCP.
- È stata implementata la possibilità di scegliere un fornitore di tempo preciso (PTP) per la generazione di timestamp a livello PHY e MAC.
- Per IPsec è stata realizzata la supporto del meccanismo di aggregazione e frammentazione dei pacchetti IP incapsulati – IP-TFS/AGGFRAG (IP Traffic Flow Security/Aggregation and Fragmentation Mode for Encapsulating Security Payload).
- Nel sistema dei socket di rete è stata aggiunta la supporto per la trasmissione di informazioni sulla priorità (SO_PRIORITY) sotto forma di messaggi di controllo (cmsg). Per i socket di rete è stata aggiunta l'opzione SO_RCVPRIORITY, che nella funzione recvmsg() include la trasmissione di informazioni sulla priorità del socket.
- Attrezzature
- È stato aggiunto il driver amdxdna per i NPU (Neural Processing Unit) integrati nelle CPU AMD basati sull'architettura XDNA, progettati per accelerare le operazioni legate all'apprendimento automatico. I NPU basati sull'architettura XDNA sono disponibili nelle serie 7040 e 8040 dei processori AMD Ryzen, nelle acceleratori AMD Alveo V70 e nei SoC AMD Versal.
- Nel driver i915 sono stati aggiunti gli identificatori di nuove GPU, è stato implementato un gestore degli errori di inizializzazione HDMI e migliorata l'affidabilità del reset dei motori GPU su sistemi Haswell e più vecchi.
- È proseguito 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.
- Nel driver Nouveau è stata aggiunta la possibilità di trasmettere buffer con log GSP-RM tramite debugfs.
- Nel driver AMDGPU è stato implementato il supporto per il meccanismo DRM panic, che mostra un'analoga «schermata blu della morte» in caso di errori. È proseguita la preparazione per il supporto della futura serie di schede grafiche Radeon RX 9000 basate sull'architettura RDNA4. È stato aggiornato il supporto per DCN 3.5, GG 9.5, IH 4.4, PSP 13.x, SMU 13.x, VCN 5.x, JPEG 5.x, GC 12.x, DC FAMS, RAS e ISP.
- Nel driver DRM msm (GPU Qualcomm Adreno) è stato aggiunto il supporto per la piattaforma Qualcomm SM6150 (QCS615).
- Nel driver DRM panfrost è stato aggiunto il supporto per SoC MediaTek MT8188 con GPU Mali-G57.
- Nel driver DRM vc4 è stato aggiunto il supporto per SoC Broadcom BCM2712 (Raspberry Pi 5).
- Nel driver vfio nvgrace-gpu è stato aggiunto il supporto per i chip NVIDIA Grace Blackwell 200.
- È stato incluso il driver per i controller Intel THC (Touch Host Controller), utilizzato per interagire con schermi tattili e touchpad su alcuni laptop. È stato aggiunto il supporto per i dispositivi Wacom con interfaccia PCI. È stato aggiunto il supporto per i controller di gioco QH Electronics.
- Aggiunta la compatibilità con piattaforme ARM, SoC e dispositivi: Qualcomm Snapdragon 8 Elite (SM8750), Qualcomm Snapdragon AR2 (SAR2130P), Qualcomm IQ6/IQ8, Snapdragon 425 (MSM8917), Samsung Exynos 9810, Blaize BLZP1600, Microchip SAMA7D65, Renesas R-Car V4H ES3.0, Renesas RZ/G3E. Aggiunta la compatibilità con SoC SpacemiT K1 basato sull'architettura RISC-V.
- Nel sottosistema audio ALSA per MIDI 2.0 sono stati ampliati API rawmidi e sequencer. Nell'API per l'estrazione delle operazioni di compressione, è stata aggiunta la compatibilità con ASRC (Asynchronous Sample Rate Conversion).
- Aggiunta la compatibilità con i sistemi audio dei dispositivi Allwinner suinv F1C100s, Awinc AW88083, Realtek ALC5682I-VE, TAS2781, Focusrite Scarlett 4th Gen 16i16, 18i16 e 18i20. Aggiunta la compatibilità con le cuffie wireless SteelSeries Arctis 9.
Fonte: opennet.ru
