Rilascio del kernel Linux 6.0

Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 6.0. Il cambiamento significativo nel numero di versione è per ragioni estetiche ed è un passo formale per alleviare il disagio di accumulare un gran numero di numeri nella serie (Linus ha scherzato dicendo che il motivo per cambiare il numero di ramo era più probabilmente che stava finendo le dita e le dita dei piedi per contare i numeri di versione). Tra le modifiche più notevoli: supporto per la scrittura asincrona bufferizzata in XFS, il driver del blocco ublk, ottimizzazione dell'utilità di pianificazione, un meccanismo per verificare il corretto funzionamento del kernel, supporto per il codice a blocchi ARIA.

Principali innovazioni nel kernel 6.0:

  • Sottosistema disco, I/O e file system
    • Il file system XFS ha aggiunto il supporto per le scritture asincrone nel buffer utilizzando il meccanismo io_uring. I test sulle prestazioni condotti utilizzando strumenti fio (1 thread, dimensione blocco 4kB, 600 secondi, scrittura sequenziale) mostrano un aumento delle operazioni di input/output al secondo (IOPS) da 77k a 209k, velocità di trasferimento dati da 314MB/s a 854MB/s, e un calo della latenza da 9600 ns a 120 ns (80 volte).
    • Il file system Btrfs implementa una seconda versione del protocollo per il comando “send”, che implementa il supporto per metadati aggiuntivi, inviando dati in blocchi più grandi (più di 64K) e trasmettendo estensioni in forma compressa. Le prestazioni delle operazioni di lettura diretta sono state notevolmente aumentate (fino a 3 volte) grazie alla lettura simultanea di un massimo di 256 settori. Contesa di blocco ridotta e controllo accelerato dei metadati riducendo i metadati riservati per gli elementi differiti.
    • Le nuove operazioni ioctl EXT4_IOC_GETFSUUID e EXT4_IC_SETFSUUID sono state aggiunte al file system ext4 per recuperare o impostare l'UUID memorizzato nel superblocco.
    • Il file system F2FS offre una modalità a basso consumo di memoria, che ottimizza il funzionamento su dispositivi con una piccola quantità di RAM e consente di ridurre il consumo di memoria a scapito di prestazioni ridotte.
    • Aggiunto supporto per l'autenticazione dell'unità NVMe.
    • Il server NFSv4 implementa un limite al numero di client attivi, impostato su 1024 client validi per ogni gigabyte di RAM nel sistema.
    • L'implementazione del client CIFS ha migliorato le prestazioni nella modalità di trasmissione multicanale.
    • Un nuovo flag FAN_MARK_IGNORE è stato aggiunto al sottosistema di tracciamento degli eventi in fanotify FS per ignorare eventi specifici.
    • Nell'Overlayfs FS, quando montato su un FS con mappatura dell'ID utente, viene fornito il supporto corretto per gli elenchi di controllo degli accessi conformi a POSIX.
    • Aggiunto il driver del blocco ublk, che sposta la logica specifica a lato del processo in background nello spazio utente e utilizza il sottosistema io_uring.
  • Servizi di memoria e di sistema
    • Sono state aggiunte nuove funzionalità al sottosistema DAMON (Data Access MONitor), consentendo non solo di monitorare l'accesso dei processi alla RAM dallo spazio utente, ma anche di influenzare la gestione della memoria. In particolare è stato proposto un nuovo modulo “LRU_SORT” che prevede il raggruppamento di liste LRU (Least Recently Used) per aumentare la priorità di alcune pagine di memoria.
    • La capacità di creare nuove regioni di memoria è stata implementata utilizzando le capacità del bus CXL (Compute Express Link), utilizzato per organizzare l'interazione ad alta velocità tra la CPU e i dispositivi di memoria. CXL consente di connettere nuove regioni di memoria fornite da dispositivi di memoria esterni e utilizzarle come risorse aggiuntive dello spazio degli indirizzi fisici per espandere la memoria ad accesso casuale (DDR) o la memoria permanente (PMEM) del sistema.
    • Risolti i problemi di prestazioni con i processori AMD Zen causati dal codice aggiunto 20 anni fa per risolvere un problema hardware in alcuni chipset (è stata aggiunta un'istruzione WAIT aggiuntiva per rallentare il processore in modo che il chipset avesse il tempo di entrare in uno stato inattivo). La modifica ha comportato una riduzione delle prestazioni con carichi di lavoro che spesso si alternano tra stati inattivi e occupati. Ad esempio, dopo aver disabilitato la soluzione alternativa, i punteggi medi dei test tbench sono aumentati da 32191 MB/s a 33805 MB/s.
    • Il codice con euristica è stato rimosso dall'utilità di pianificazione, garantendo la migrazione dei processi alle CPU meno caricate, tenendo conto del previsto aumento del consumo energetico. Gli sviluppatori hanno concluso che l'euristica non era sufficientemente utile e che era più semplice rimuoverla e migrare i processi senza ulteriori valutazioni ogni volta che tale migrazione poteva potenzialmente comportare un consumo energetico inferiore (ad esempio, quando la CPU di destinazione si trova in un livello di potenza inferiore). La disabilitazione dell'euristica ha portato ad una riduzione del consumo energetico durante l'esecuzione di attività intensive, ad esempio, nel test di decodifica video, il consumo energetico è diminuito del 5.6%.
    • La distribuzione delle attività tra i core della CPU sui sistemi di grandi dimensioni è stata ottimizzata, il che ha migliorato le prestazioni per determinati tipi di carico di lavoro.
    • L'interfaccia I/O asincrona io_uring offre 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 dallo stesso socket di rete contemporaneamente. io_uring supporta anche il trasferimento di rete senza buffering intermedio (zero-copy).
    • Implementata la possibilità di mettere i programmi BPF collegati a uprobe in uno stato di sospensione. BPF aggiunge anche un nuovo iteratore ksym per lavorare con le tabelle dei simboli del kernel.
    • L'interfaccia obsoleta "efivars" in sysfs, destinata all'accesso alle variabili di avvio UEFI, è stata rimossa (l'FS virtuale efivarfs è ora universalmente utilizzato per accedere ai dati EFI).
    • L'utilità perf dispone di nuovi report per analizzare i conflitti di blocco e il tempo impiegato dal processore nell'esecuzione dei componenti del kernel.
    • È stata rimossa l'impostazione CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3, che consentiva di compilare il kernel nella modalità di ottimizzazione "-O3". È da notare che gli esperimenti con le modalità di ottimizzazione possono essere eseguiti passando flag durante l'assemblaggio (“make KCFLAGS=-O3”), e l'aggiunta di un'impostazione a Kconfig richiede una profilazione delle prestazioni ripetibile, dimostrando che lo srotolamento del loop utilizzato nella modalità “-O3” offre un vantaggio rispetto al livello di ottimizzazione “-O2”.
    • È stata aggiunta un'interfaccia debugfs per ottenere informazioni sul funzionamento dei singoli "memory restringitori" (gestori chiamati quando non c'è memoria sufficiente e che impacchettano le strutture dati del kernel per ridurre il consumo di memoria).
    • Per le architetture OpenRISC e LoongArch è implementato il supporto al bus PCI.
    • Per l'architettura RISC-V è stata implementata l'estensione “Zicbom” per gestire i dispositivi con DMA non coerente con la cache.
  • Virtualizzazione e sicurezza
    • È stato aggiunto un meccanismo di verifica RV (Runtime Verification) per verificare il corretto funzionamento su sistemi altamente affidabili che garantiscono l'assenza di guasti. La verifica viene eseguita in fase di esecuzione collegando gestori a punti di traccia che controllano l'effettivo progresso dell'esecuzione rispetto a un modello deterministico di riferimento predeterminato della macchina che definisce il comportamento previsto del sistema. La verifica con il modello in fase di esecuzione si posiziona come un metodo più leggero e facile da implementare per confermare la correttezza dell'esecuzione su sistemi critici, integrando i metodi classici di verifica dell'affidabilità. Tra i vantaggi di RV c'è la capacità di fornire una verifica rigorosa senza un'implementazione separata dell'intero sistema in un linguaggio di modellazione, nonché una risposta flessibile a eventi imprevisti.
    • Componenti del kernel integrati per la gestione delle enclave basate sulla tecnologia Intel SGX2 (Software Guard eXtensions), che consente alle applicazioni di eseguire codice in aree di memoria crittografate isolate, alle quali il resto del sistema ha accesso limitato. La tecnologia Intel SGX2 è supportata nei chip Intel Ice Lake e Gemini Lake e differisce da Intel SGX1 per le istruzioni aggiuntive per la gestione dinamica della memoria delle enclave.
    • Per l'architettura x86 è stata implementata la possibilità di trasferire il seed per il generatore di numeri pseudocasuali attraverso le impostazioni del bootloader.
    • Il modulo SafeSetID LSM ora ha la capacità di gestire le modifiche apportate tramite la chiamata setgroups(). SafeSetID consente ai servizi di sistema di gestire in modo sicuro gli utenti senza aumentare i privilegi (CAP_SETUID) e senza ottenere privilegi di root.
    • Aggiunto il supporto per la crittografia a blocchi ARIA.
    • Il modulo di gestione della sicurezza basato su BPF offre la possibilità di collegare gestori a singoli processi e gruppi di processi (cgroup).
    • È stato aggiunto un meccanismo con implementazione di watchdog per rilevare blocchi di sistemi guest in base al monitoraggio dell'attività vCPU.
  • Sottosistema di rete
    • I gestori per la generazione e il controllo dei cookie SYN sono stati aggiunti al sottosistema BPF. Inoltre è stato aggiunto un insieme di funzioni (kfunc) per accedere e modificare lo stato delle connessioni.
    • Lo stack wireless ha aggiunto il supporto per il meccanismo MLO (Multi-Link Operation), definito nella specifica WiFi 7 e che consente ai dispositivi di ricevere e inviare dati simultaneamente utilizzando bande e canali di frequenza diversi, ad esempio, per stabilire contemporaneamente diversi canali di comunicazione tra un punto di accesso a un dispositivo client.
    • Le prestazioni del protocollo TLS integrato nel kernel sono state migliorate.
    • Aggiunta un'opzione della riga di comando del kernel "hostname=" per consentire l'impostazione del nome host nelle prime fasi del processo di avvio, prima dell'avvio dei componenti dello spazio utente.
  • Attrezzatura
    • Il driver i915 (Intel) fornisce supporto per le schede video discrete Intel Arc (DG2/Alchemist) A750 e A770. È stata proposta un'implementazione iniziale del supporto per le GPU Intel Ponte Vecchio (Xe-HPC) e Meteor Lake. Il lavoro continua a supportare la piattaforma Intel Raptor Lake.
    • Il driver amdgpu continua a fornire supporto per le piattaforme AMD RDNA3 (RX 7000) e CDNA (Instinct).
    • Il driver Nouveau ha rielaborato il codice di supporto per i motori di visualizzazione GPU NVIDIA nv50.
    • Aggiunto il nuovo driver DRM logico per gli schermi LogiCVC.
    • Il driver v3d (per GPU Broadcom Video Core) supporta le schede Raspberry Pi 4.
    • Aggiunto il supporto per la GPU Qualcomm Adreno 619 al driver msm.
    • Aggiunto il supporto per la GPU ARM Mali Valhall al driver Panfrost.
    • 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 machine learning Intel Habana Gaudi 2.
    • Aggiunto supporto per ARM SoC Allwinner H616, NXP i.MX93, Sunplus SP7021, Nuvoton NPCM8XX, Marvell Prestera 98DX2530, Google Chameleon v3.

Allo stesso tempo, la Latin American Free Software Foundation ha formato una versione del kernel 6.0 completamente libera - Linux-libre 6.0-gnu, ripulita da elementi di firmware e driver contenenti componenti o sezioni di codice non libere, il cui scopo è limitato dal produttore. La nuova versione disabilita l'uso dei blob nel driver audio HD CS35L41 e nel driver UCSI per i microcontrollori STM32G0. I file DTS per i chip Qualcomm e MediaTek sono stati puliti. La disabilitazione dei BLOB nel driver MediaTek MT76 è stata rielaborata. Codice di pulizia blob aggiornato nei driver e sottosistemi AMDGPU, Adreno, Tegra VIC, Netronome NFP e Habanalabs Gaudi2. Interrotta la pulizia del driver VXGE, che è stato rimosso dal kernel.

Fonte: opennet.ru

Aggiungi un commento