Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 6.14. Tra le modifiche più significative: driver ntsync con primitive di sincronizzazione Windows NT, configurazione del bilanciamento delle operazioni di lettura in Btrfs RAID1, supporto per reflink in XFS in modalità realtime, possibilità di input/output bufferizzato non cacheabile, dmem cgroup per limitare la memoria GPU, impiego di io_uring in FUSE, delega degli attributi in NFS, supporto per la scrittura atomica in Device mapper, velocizzazione dei collegamenti simbolici, gestione della possibilità di esecuzione di script, supporto per chip Qualcomm Snapdragon 8 Elite, driver per NPU AMD.
Nella nuova versione sono state incluse 12115 correzioni da 1984 sviluppatori, la dimensione della patch è di 39 MB (le modifiche hanno interessato 10170 file, sono state aggiunte 531586 righe di codice e sono state eliminate 235999 righe). Nella precedente versione erano state effettuate 14172 correzioni da 2086 sviluppatori, la dimensione della patch era di 46 MB. Circa il 41% di tutte le modifiche presentate in 6.14 riguardano i driver dei dispositivi, circa il 13% delle modifiche ha a che fare con l'aggiornamento del codice specifico per le architetture hardware, il 14% è relativo allo stack di rete, il 7% ai file system e il 4% ai sottosistemi interni del kernel.
Novità principali nel kernel 6.14:
- Sottosistema di disco, input/output e file system
- Nel file system Btrfs è stato introdotto il supporto per nuovi metodi di bilanciamento delle operazioni di lettura tra i dispositivi che compongono il RAID1. Oltre alla distribuzione del carico basata sugli identificativi dei processi (pid) già esistente, nella nuova versione sono stati proposti tre nuovi modi di bilanciamento: "rotation" (distribuzione uniforme del carico su tutti i dispositivi, modalità attivata per impostazione predefinita); "latency" (distribuzione tenendo conto delle latenze, può essere utile in caso di guasti o funzionamento instabile dei dispositivi); devid (gestione manuale). Per cambiare la modalità di bilanciamento è stato aggiunto l'interfaccia "\/sys\/fs\/btrfs\/\/read_policy". Tra le altre modifiche in Btrfs c'è l'implementazione di ioctl FS_IOC_READ_VERITY_METADATA.
- È stata aggiunta la modalità di input/output con buffer non cacheabile, in cui i dati vengono rimossi dalla cache della pagina immediatamente dopo il completamento delle operazioni di lettura o scrittura. Questa modifica può essere utile nell'utilizzo di dispositivi di archiviazione molto veloci, per i quali la memorizzazione nella cache delle operazioni in memoria RAM è superflua. Per tali dispositivi, la nuova modalità consente di evitare un'ulteriore spesa di memoria da parte della cache della pagina senza ricorrere a un'API complessa per l'input/output diretto (Direct I/O).
- Nel fsnotify, il meccanismo per monitorare le modifiche nel file system, è stato aggiunto un nuovo evento FS_PRE_ACCESS, generato nella fase prima dell'accesso al contenuto del file. L'evento viene elaborato in modalità sincrona, cioè il kernel invia l'evento e aspetta di ricevere una risposta. Se viene ricevuta una risposta, l'operazione viene eseguita; se si verifica un errore, la chiamata di sistema restituisce nel contesto utente un codice di errore. Tramite FS_PRE_ACCESS, il processo nello spazio utente può, ad esempio, organizzare la compilazione del file man mano che i dati sono pronti in uno storage lento.
- Nel sottosistema FUSE, che consente di creare implementazioni di file system nello spazio utente, è stata aggiunta il 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 il numero di passaggi 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 identificare quale file sta utilizzando un determinato blocco sul dispositivo di archiviazione. Con l'rmap, nel 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 per le dimensioni dei collegamenti simbolici, che ha consentito di accelerare l'esecuzione dell'operazione readlink del 1.5% (nel test con /initrd.img in ext4). La cache è attivata nei file system ext4 e tmpfs.
- È stato aggiunto il supporto per la delega degli attributi dei file in NFSv4.2, consentendo la gestione di attributi come il tempo di modifica (mtime) lato client NFS senza la necessità di inviare le modifiche al server. È stato inoltre migliorato il supporto per il protocollo "LOCALIO" in NFS, permettendo di determinare se il client e il server NFS si trovano sulla stessa macchina per attivare ottimizzazioni appropriate come l'uso dell'input/output diretto (Direct I/O).
- 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 delle pagine (SQUASHFS_FILE_DIRECT), che consente di evitare un cache separato per read_page. Questa modifica ha ridotto l'utilizzo della memoria durante il funzionamento di Squashfs.
- Nella chiamata di sistema statx() è stato implementato il flag STATX_DIO_READ_ALIGN per determinare l'allineamento richiesto per le operazioni di lettura da file.
- Nel file system Bcachefs è stata aggiornata e stabilizzata la struttura del formato su disco. Qualsiasi ulteriore modifica del formato sarà considerata facoltativa e implementata sotto forma di estensioni opzionali. È stata notevolmente aumentata la velocità di verifica dell'integrità del FS. Inoltre, in Bcachefs è stata migliorata la modalità di sola lettura; risolti i problemi che portavano a riferimenti alla memoria dopo la sua liberazione (use after free); risolti problemi con riferimenti reflink in fsck; corretta la gestione del riavvio delle transazioni.
- Ripristinato il modulo md-linear, destinato alla combinazione di dispositivi a blocchi. Questo modulo era stato precedentemente dichiarato obsoleto e rimosso dal kernel 6.8, ma si è rivelato essere richiesto e quindi è stato ora ripristinato.
- I file system F2FS e SQUASHFS sono stati convertiti all'uso di folii di pagina della memoria (page folios).
- I file system OCFS2 e DLMFS sono stati convertiti all'uso di una nuova API per il montaggio delle partizioni.
- Nel driver null_blk è stato implementato l'attributo "rotational", impostato tramite configfs, che consente di simulare il funzionamento con un dispositivo basato su dischi rotativi per facilitare il testing delle funzionalità del kernel.
- Nel sistema Device mapper e nei moduli dm-mirror, dm-io, dm-table, dm-linear, dm-stripe e dm-raid1 è stato implementato il supporto per la scrittura atomica.
- Memoria e servizi di sistema
- Completata l'integrazione nel kernel del driver ntsync, che implementa il dispositivo simbolico /dev/ntsync e un insieme di primitive per la sincronizzazione utilizzate nel kernel di Windows NT. L'implementazione di tali primitive a livello di kernel consente di aumentare notevolmente le prestazioni dei giochi Windows eseguiti tramite Wine. L'aumento delle prestazioni si ottiene eliminando l'overhead associato all'uso di RPC nello spazio utente. La creazione di un driver separato per il kernel Linux è giustificata dalle difficoltà nella corretta implementazione dell'API di sincronizzazione NT sopra le primitive esistenti nel kernel.
- Aggiunto un nuovo controller cgroup DMEM per il conteggio separato delle aree di memoria dei dispositivi, come le GPU. DMEM consente di creare cgroup separati per le varie attività che operano con la GPU, in modo che possano essere eseguite senza influenzarsi reciprocamente. Questa nuova funzionalità risolve il problema della terminazione forzata delle operazioni con la GPU quando viene esaurita la memoria disponibile, grazie al conteggio della memoria riflessa della GPU e della memoria utilizzata dai driver della CPU in cgroup separati.
- Apportate ottimizzazioni per la scalabilità dell'operazione di flush della cache TLB (Translation Lookaside Buffer), utilizzata per accelerare la conversione degli indirizzi virtuali in fisici. Le ottimizzazioni aggiunte consistono nell'aggiornamento posticipato di alcune strutture dati durante il cambio di contesto, il che consente di migliorare le prestazioni durante l'esecuzione di alcuni test.
- Aumentata l'efficienza 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.
- È proseguito il trasferimento delle modifiche dal ramo 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 è abilitato di default e non implica che Rust diventi una delle dipendenze di build obbligatorie del kernel). È stata fornita la possibilità di utilizzare nel codice del kernel il macro "derive(CoercePointee)", che consente di utilizzare puntatori intelligenti con oggetti trait. Nel kernel sono state incluse le interfacce Rust per PCI, piattaforme, Open Firmware, dispositivi a carattere e alcune funzioni 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 vero driver in Rust".
- Negli script di build è stato proposto un nuovo codice per la generazione delle versioni dei simboli di debug per i moduli caricabili, che ora utilizza le informazioni dalle registrazioni di debug in formato DWARF, anziché analizzare direttamente il codice sorgente. Questa modifica consente di applicare la versioning dei simboli di debug per i moduli scritti in Rust. Anche la vecchia implementazione è stata mantenuta nel kernel e la scelta del generatore avviene a livello di opzioni di build.
- Per l'architettura PowerPC è stato implementato il supporto per la modalità di preemption pigra (PREEMPT_LAZY), che corrisponde alla modalità di preemption completa («full preemption») per compiti realtime (RR/FIFO/DEADLINE), ma ritarda la preemption dei compiti normali (SCHED_NORMAL) fino al tick di confine.
- Nel sottosistema di profilazione delle prestazioni "perf" è stato aggiunto il supporto per i contatori di consumo energetico dei processori AMD. È stata aggiunta la possibilità di funzionare 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 possibile di processi avviati nello spazio dei nomi specificato. La gestione del parametro avviene in modo gerarchico, ovvero le limitazioni negli spazi dei nomi esterni si estendono a quelli annidati.
- Durante l'utilizzo del sistema di chiamata execveat per avviare un processo, ora il filesystem /proc mostrerà il nome del file avviato, anziché il numero del descrittore di file.
- Nel codice sorgente del kernel (nella directory samples/vfs) è stata aggiunta l'utilità mountinfo, che dimostra l'uso delle chiamate di sistema statmount() e listmount().
- Nel sottosistema BPF sono state proposte nuove funzioni bpf_local_irq_save() e bpf_local_irq_restore() per disabilitare temporaneamente le interruzioni sulla CPU locale. Le funzioni possono essere utilizzate per implementare strutture la cui elaborazione non viene interrotta dalle interruzioni.
- Nella chiamata di sistema madvise(), utilizzando i flag MADV_DONTNEED e MADV_FREE, è stato garantito il rilascio 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à notevole di memoria.
- Per l'architettura OpenRISC è stata implementata la supporto per il meccanismo delle sequenze riavviabili (rseq), destinato all'esecuzione atomica rapida di operazioni che, in caso di interruzione da parte di un altro thread, vengono annullate e si tenta nuovamente di eseguirle.
- È stata effettuata una riorganizzazione del codice con l'implementazione degli algoritmi CRC32 e CRC-T10DIF, che non si sovrappone più con il sottosistema crypto e viene chiamato direttamente dall'interfaccia di libreria. Questa modifica ha semplificato il codice e migliorato la sua efficienza.
- Nel sistema di input/output asincrono io_uring è stata aggiunta un'interfaccia per la trasmissione di metadata aggiuntivi sulla integrità durante le operazioni di lettura e scrittura.
- Virtualizzazione e sicurezza
- Nella chiamata di sistema execveat è stato aggiunto il flag AT_EXECVE_CHECK, che consente di eseguire un controllo della validità dell'esecuzione di un file senza eseguirlo effettivamente, considerando le politiche di sicurezza, i diritti di accesso e i moduli LSM attivi. Per l'uso in combinazione con AT_EXECVE_CHECK sono stati proposti 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 richiede ai compilatori e agli interpreti di utilizzare l'opzione AT_EXECVE_CHECK per verificare la validità dell'esecuzione, mentre il flag SECBIT_EXEC_DENY_INTERACTIVE vieta di elaborare comandi interattivi. L'idea principale della modifica è la possibilità di applicare politiche di sicurezza non solo ai tradizionali file eseguibili, ma anche ai file di testo con script, che possono essere caricati tramite l'esecuzione di un interprete (cioè il divieto di esecuzione può essere implementato non solo all'avvio di “./script.sh” ma anche eseguendo “sh script.sh”).
- Nei sistemi x86 è stata implementata la supporto per contatori di tempo protetti per i sistemi guest, impedendo la modifica degli orologi di sistema del guest dall'ambiente host. Questa possibilità è stata realizzata sulla base del meccanismo AMD SEV (Secure Encrypted Virtualization), utilizzato nei sistemi di virtualizzazione per la protezione macchine virtuali da interferenze da parte dell'hypervisor o dell'amministratore del sistema host.
- Nel sistema di controllo di accesso mandatorio SELinux è stata aggiunta la supporto per le regole xperm, che consentono di legare le politiche SELinux a specifiche chiamate ioctl() o messaggi netlink.
- Per la firma digitale dei moduli del kernel, l'algoritmo SHA512 è stato scelto come predefinito al posto di SHA1.
- Nei driver per i sistemi guest di VirtualBox è stata inclusa la supporto per l'architettura ARM64.
- Nell'hypervisor KVM è continuato il lavoro sull'implementazione del meccanismo Intel TDX (Trusted Domain Extensions) per la crittografia della memoria dei sistemi guest.
- Nel virtio_blk è stata aggiunta la supporto per la modalità di ripristino degli errori.
- Sottosistema di rete
- Nella realizzazione del protocollo RxRPC è stata introdotta la possibilità di utilizzare grandi pacchetti UDP per aumentare la capacità di trasmissione.
- Per TCP è stata aggiunta la supporto per l'algoritmo RACK-TLP per l'individuazione della perdita di pacchetti.
- È stato aggiunto un nuovo parametro sysctl tcp_tw_reuse_delay, attivo in relazione allo spazio dei nomi (network namespace), che consente di determinare il ritardo prima che il sistema possa riutilizzare il numero della porta di rete dopo la chiusura di un socket TCP.
- È stata aggiunta la possibilità di scegliere il fornitore di tempo preciso (PTP) per la generazione di timestamp ai livelli PHY e MAC.
- Per IPsec è stato implementato il supporto per il 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 è stato aggiunto il supporto per l'invio 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 consente nella funzione recvmsg() di inviare informazioni sulla priorità del socket.
- Apparecchiatura
- È stato aggiunto il driver amdxdna per gli acceleratori NPU (Neural Processing Unit) integrati nella CPU AMD, basati sull'architettura XDNA, destinati ad accelerare le operazioni legate all'apprendimento automatico. L'NPU basato sull'architettura XDNA è fornito nelle serie di processori AMD Ryzen 7040 e 8040, acceleratori AMD Alveo V70 e SoC AMD Versal.
- Nel driver i915 sono stati aggiunti identificatori per nuove GPU, è stato implementato un gestore di errori di inizializzazione HDMI e sono state migliorate l'affidabilità del ripristino 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 inviare buffer contenenti log GSP-RM tramite debugfs.
- Nel driver AMDGPU è stato implementato il supporto per il meccanismo DRM panic, che mostra qualcosa di simile a un 'schermo 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.
- È incluso un driver per i controller Intel THC (Touch Host Controller), utilizzato per interagire con touchscreen e touchpad su alcuni laptop. Aggiunto il supporto per dispositivi Wacom con interfaccia PCI. Aggiunto il supporto per controller di gioco QH Electronics.
- Aggiunto il supporto per schede 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. Aggiunto il supporto per il SoC SpacemiT K1 basato sull'architettura RISC-V.
- Nel sottosistema audio ALSA per MIDI 2.0 sono stati ampliati le API rawmidi e sequencer. Nell'API per eseguire operazioni di compressione sulla scheda audio è stato aggiunto il supporto per ASRC (Asynchronous Sample Rate Conversion).
- Aggiunto il supporto per i sistemi audio dei dispositivi Allwinner suinv F1C100s, Awinc AW88083, Realtek ALC5682I-VE, TAS2781, Focusrite Scarlett 4th Gen 16i16, 18i16 e 18i20. Aggiunto il supporto per le cuffie wireless SteelSeries Arctis 9.
Fonte: opennet.ru
