Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 6.0. Il cambiamento significativo del numero di versione è stato effettuato per motivi estetici ed è un passo formale che elimina il disagio dovuto all'accumulo di un gran numero di versioni nella serie (Linus ha scherzato dicendo che il motivo del cambio di numero di ramo è piuttosto che gli stanno finendo le dita delle mani e dei piedi per contare i numeri delle versioni). Tra le modifiche più evidenti ci sono: il supporto per la scrittura bufferizzata asincrona in XFS, il driver di blocco ublk, l'ottimizzazione dello scheduler di processo, il meccanismo di verifica della correttezza del funzionamento del kernel, e il supporto per il cifrario a blocchi ARIA.
Novità principali nel kernel 6.0:
- Sottosistema disco, I/O e file system
- Nel file system XFS è stata aggiunta la supporto per la scrittura bufferizzata asincrona utilizzando il meccanismo io_uring. I test di prestazione, condotti con l'ausilio dello strumento fio (1 thread, dimensione del blocco 4kB, 600 secondi, scrittura sequenziale), mostrano un aumento delle operazioni di input/output al secondo (IOPS) da 77k a 209k, della velocità di trasmissione dei dati da 314MB/s a 854MB/s e una riduzione dei tempi di latenza da 9600ns a 120ns (80 volte).
- Nel file system Btrfs è stata implementata la seconda versione del protocollo per il comando «send», che introduce il supporto per metadati aggiuntivi, l'invio di dati in blocchi più grandi (oltre 64K) e la trasmissione di extent compressi. È stata migliorata significativamente (fino a 3 volte) la performance delle operazioni di lettura diretta grazie alla lettura simultanea di fino a 256 settori. Sono stati ridotti i conflitti di blocco e accelerata la verifica dei metadati grazie alla riduzione dei metadati riservati per gli elementi in sospeso.
- Nel file system ext4 sono state aggiunte nuove operazioni ioctl EXT4_IOC_GETFSUUID e EXT4_IC_SETFSUUID per estrarre o impostare l'identificatore UUID memorizzato nel superblocchi.
- Nel file system F2FS è stata proposta una modalità a basso consumo di memoria, che ottimizza il funzionamento su dispositivi con una quantità ridotta di RAM e consente di ridurre il consumo di memoria a scapito delle prestazioni.
- Aggiunto il supporto per l'autenticazione dei dispositivi NVMe.
- In server NFSv4 implementa un limite sul numero di client attivi, fissato a 1024 client consentiti per ogni gigabyte di RAM nel sistema.
- Nella realizzazione del client CIFS, è stata migliorata la performance nella modalità di trasferimento multicanale.
- È stato aggiunto un nuovo flag FAN_MARK_IGNORE al sottosistema di monitoraggio eventi nel FS fanotify per ignorare eventi specifici.
- Nel FS Overlayfs, durante il montaggio sopra un FS con mapping degli identificatori utente, è stata garantita la corretta gestione delle liste di controllo accesso compatibili con POSIX.
- È stato aggiunto un driver a blocchi ublk, che sposta la logica specifica nel processo di back-end nello spazio utente e utilizza il sottosistema io_uring.
- Memoria e servizi di sistema
- Il sottosistema DAMON (Data Access MONitor) ha ricevuto nuove funzionalità che consentono non solo di monitorare l'accesso dei processi alla memoria RAM dallo spazio utente, ma anche di influenzare la gestione della memoria. In particolare, è stato proposto un nuovo modulo 'LRU_SORT' che riordina le liste LRU (Least Recently Used) per dare priorità a determinate pagine di memoria.
- È stata implementata la possibilità di creare nuove regioni di memoria utilizzando le funzionalità del bus CXL (Compute Express Link), impiegato per organizzare interazioni ad alta velocità tra CPU e dispositivi di memoria. CXL consente di collegare nuove regioni di memoria fornite da dispositivi di memoria esterni e utilizzarle come risorse aggiuntive nello spazio degli indirizzi fisici per espandere la memoria RAM di sistema (DDR) o la memoria persistente (PMEM).
- Sono stati risolti problemi di performance nei sistemi basati su processori AMD Zen, causati da codice aggiunto 20 anni fa per eludere problematiche hardware in alcuni chipset (veniva aggiunta un'istruzione WAIT, che rallentava il processore affinché il chipset potesse passare allo stato di inattività). Questa modifica portava a una riduzione delle prestazioni in carichi di lavoro che alternano frequentemente stati di inattività (idle) e attività (busy). Ad esempio, dopo la disattivazione della manovra di bypass, i risultati medi del test tbench sono aumentati da 32191 MB/s a 33805 MB/s.
- È stata rimossa dal pianificatore di attività il codice con l'euristica, che garantiva la migrazione dei processi verso le CPU meno cariche, tenendo conto dell'ipotetico risparmio energetico. Gli sviluppatori hanno concluso che l'euristica non offriva i benefici attesi ed è più semplice trasferire i processi senza valutazioni aggiuntive ogni volta che un tale spostamento potrebbe potenzialmente portare a una riduzione del consumo energetico (ad esempio, quando la CPU di destinazione opera a un livello con minore consumo energetico). Disattivare l'euristica ha portato a una riduzione del consumo energetico durante l'esecuzione di attività intensive; ad esempio, nel test di decodifica video, il consumo è diminuito del 5,6%.
- È stata ottimizzata la distribuzione dei compiti tra i core CPU nelle grandi sistemi, aumentando le prestazioni in alcuni tipi di carico.
- Nell'interfaccia di input/output asincrono io_uring è stato introdotto un nuovo flag IORING_RECV_MULTISHOT, che consente di utilizzare la modalità «multi-shot» con la chiamata di sistema recv() per eseguire più operazioni di lettura da un singolo socket di rete. In io_uring è anche implementato il supporto per la trasmissione di rete senza buffering intermedio (zero-copy).
- È stata implementata la possibilità di mettere in stato di sospensione i programmi BPF collegati a uprobe. Inoltre, in BPF è stato aggiunto un nuovo iteratore ksym per lavorare con le tabelle dei simboli del kernel.
- È stata rimossa l’interfaccia obsoleta «efivars» in sysfs, progettata per accesso alle variabili di avvio UEFI (l'accesso ai dati EFI ora utilizza universalmente il filesystem virtuale efivarfs).
- Nell'utilità perf sono stati implementati nuovi report per analizzare i conflitti di blocco e il tempo trascorso dalla CPU nell'esecuzione dei componenti del kernel.
- È stata rimossa l'impostazione CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3, che consentiva di compilare il kernel con l'opzione di ottimizzazione "-O3". Si segnala che esperimenti con modalità di ottimizzazione possono essere eseguiti passando i flag durante la compilazione ("make KCFLAGS=-O3"), e per aggiungere l'impostazione in Kconfig è necessario garantire un profilo di prestazioni ripetibile che dimostri che il dispiegamento dei cicli in modalità "-O3" offre un vantaggio rispetto al livello di ottimizzazione "-O2".
- Aggiunto un'interfaccia debugfs per ottenere informazioni sul funzionamento di singoli "memory shrinker" (gestori che vengono chiamati in caso di esaurimento della memoria e che imballano le strutture dati del kernel per ridurre il loro consumo di memoria).
- Per le architetture OpenRISC e LoongArch è stata implementata la supporto per il bus PCI.
- Per l'architettura RISC-V è stata implementata l'estensione "Zicbom" per la gestione dei dispositivi con DMA non coerente con la cache (non-cache-coherent).
- Virtualizzazione e sicurezza
- È stato aggiunto un meccanismo di verifica RV (Runtime Verification) per controllare la correttezza del funzionamento su sistemi ad alta affidabilità, garantendo l'assenza di guasti. La verifica avviene durante l'esecuzione attraverso l'aggiunta di gestori ai punti di tracciamento, che confrontano il reale percorso di esecuzione con un modello di automa deterministico predefinito, definendo il comportamento atteso del sistema. Il confronto con il modello durante l'esecuzione è posizionato come un metodo più leggero e semplice da implementare nella pratica per confermare la correttezza dell'esecuzione su sistemi critici, complementando i metodi classici di conferma dell'affidabilità. Tra i vantaggi della RV si evidenzia la possibilità di garantire una verifica rigorosa senza la necessità di implementare l'intero sistema in un linguaggio di modellazione, oltre a una risposta flessibile a eventi imprevisti.
- Sono stati integrati i componenti di base per la gestione degli enclave basati sulla tecnologia Intel SGX2 (Software Guard eXtensions), che consente alle applicazioni di eseguire codice in aree di memoria isolate e crittografate, a cui il resto del sistema ha accesso limitato. La tecnologia Intel SGX2 è supportata nei chip Intel Ice Lake e Gemini Lake e si differenzia da Intel SGX1 per le istruzioni aggiuntive per la gestione dinamica della memoria degli enclave.
- Per l'architettura x86 è stata implementata la possibilità di trasmettere il seme per il generatore di numeri pseudo-casuali attraverso le impostazioni del bootloader.
- Nel modulo LSM SafeSetID è stata aggiunta la possibilità di gestire le modifiche effettuate tramite la chiamata setgroups(). SafeSetID consente ai servizi di sistema di gestire gli utenti in sicurezza senza elevare i privilegi (CAP_SETUID) e senza ottenere i diritti dell'utente root.
- È stato aggiunto il supporto per il cifrario a blocchi ARIA.
- Nel modulo di sicurezza basato su BPF è stata implementata la possibilità di allegare gestori a singoli processi e gruppi di processi (cgroup).
- È stato aggiunto un meccanismo con implementazione watchdog per rilevare i blocchi delle macchine virtuali basato sul monitoraggio dell'attività della vCPU.
- Sottosistema di rete
- Sono stati aggiunti gestori nel sottosistema BPF per la generazione e la verifica dei SYN cookies. È stato anche introdotto un insieme di funzioni (kfunc) per accedere e modificare lo stato delle connessioni.
- Nel stack wireless è stata aggiunta la supporto per il meccanismo MLO (Multi-Link Operation), definito nella specifica WiFi 7, che consente ai dispositivi di ricevere e inviare dati simultaneamente utilizzando diverse bande di frequenza e canali, ad esempio per stabilire più canali di comunicazione tra il punto di accesso e il dispositivo client.
- È stata migliorata la performance dell'implementazione del protocollo TLS integrata nel kernel.
- È stato aggiunto un parametro della riga di comando del kernel 'hostname=', che consente di impostare il nome host in una fase iniziale di avvio, prima che vengano avviati i componenti dello spazio utente.
- Attrezzature
- Nel driver i915 (Intel) è stato garantito il supporto per le schede grafiche discrete Intel Arc (DG2/Alchemist) A750 e A770. È stata proposta un'implementazione iniziale del supporto per la GPU Intel Ponte Vecchio (Xe-HPC) e Meteor Lake. Continua il lavoro sul supporto della piattaforma Intel Raptor Lake.
- Nel driver amdgpu continua il lavoro per garantire il supporto per le piattaforme AMD RDNA3 (RX 7000) e CDNA (Instinct).
- Nel driver Nouveau è stato rivisitato il codice di supporto per i motori di visualizzazione GPU NVIDIA nv50.
- Aggiunto un nuovo driver DRM logicvc per gli schermi LogiCVC.
- Nel driver v3d (per GPU Broadcom Video Core) è stata implementata la supporto per le schede Raspberry Pi 4.
- Nel driver msm è stato aggiunto il supporto per la GPU Qualcomm Adreno 619.
- Nel driver Panfrost è stato aggiunto il supporto per la GPU ARM Mali Valhall.
- Aggiunto il supporto iniziale per i processori Qualcomm Snapdragon 8cx Gen3, utilizzati nei laptop Lenovo ThinkPad X13s.
- Aggiunti driver audio per le piattaforme AMD Raphael (Ryzen 7000), AMD Jadeite, Intel Meteor Lake e Mediatek MT8186.
- Aggiunto il supporto per gli acceleratori di sistemi di machine learning Intel Habana Gaudi 2.
- Aggiunto il supporto per l'ARM SoC Allwinner H616, NXP i.MX93, Sunplus SP7021, Nuvoton NPCM8XX, Marvell Prestera 98DX2530, Google Chameleon v3.
Contemporaneamente, la Fondazione per il Software Libero dell'America Latina ha sviluppato una versione completamente libera del kernel 6.0 — Linux-libre 6.0-gnu, priva di elementi di firmware e driver contenenti componenti proprietari o sezioni di codice la cui area di applicazione è limitata dal produttore. Nella nuova versione è disabilitato l'uso dei blob nel driver CS35L41 HD-audio e nel driver con interfaccia UCSI per i microcontrollori STM32G0. Sono stati puliti i file dts per i chip Qualcomm e MediaTek. È stata rielaborata la disattivazione dei blob nel driver MediaTek MT76. È stato aggiornato il codice di pulizia dei blob nei driver e nelle subsystem AMDGPU, Adreno, Tegra VIC, Netronome NFP e Habanalabs Gaudi2. È stata interrotta la pulizia del driver VXGE, rimosso dal kernel.
Fonte: opennet.ru
