Rilascio del kernel Linux 6.18

Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 6.18. Tra le modifiche più notevoli ci sono: dm-pcache per la memorizzazione nella cache su memoria non volatile (PMEM), rimozione di Bcachefs, modalità di controllo online per XFS, driver Binder (IPC Android) e Tyr (GPU Mali) scritti in Rust, possibilità di creare driver USB in Rust, ottimizzazione della memorizzazione nella cache nell'allocatore di memoria SLUB, indirizzamento degli spazi dei nomi tramite file descriptor, accelerazione dello swapping, verifica dei programmi BPF tramite firma digitale, virtualizzazione Intel CET in KVM, protocollo di rete PSP (ibrido tra TLS e IPsec), supporto per l'estensione IP AccECN, ottimizzazione dello stack UDP.

Nella nuova versione sono stati inclusi 15035 aggiornamenti da 2217 sviluppatori, la dimensione della patch è di 45 MB (le modifiche hanno interessato 13142 file, sono state aggiunte 601897 righe di codice e rimosse 355006 righe). Nella versione precedente c'erano 14334 aggiornamenti da 2118 sviluppatori, la dimensione della patch era di 46 MB. Circa il 40% di tutte le modifiche apportate in 6.18 riguardano i driver delle periferiche, circa il 16% riguardano l'aggiornamento del codice specifico per architetture hardware, il 12% riguarda lo stack di rete, il 5% i filesystem e il 3% i sottosistemi interni del kernel.

Le principali novità del kernel 6.18 (1, 2, 3):

  • Sottosistema disco, I/O e file system
    • Nel Device Mapper è stato aggiunto il gestore dm-pcache per l'uso della memoria persistente (memoria CXL accessibile tramite dispositivo DAX) come ulteriore cache ad alte prestazioni prima delle più lente memorie tradizionali o unità flash. Dm-pcache garantisce la conservazione del contenuto della cache in caso di crash grazie all'uso della memoria non volatile, alla duplicazione dei metadati e alla verifica dell'integrità dei dati e dei metadati tramite checksum CRC32. Attualmente è supportata solo la memorizzazione nella cache in modalità scrittura differita (write-back).
    • Il codice del filesystem Bcachefs è stato rimosso dal kernel e sarà ora distribuito come modulo esterno, compilato utilizzando l'utility DKMS (Dynamic Kernel Module Support). Il codice di Bcachefs può essere reintegrato nel kernel solo dopo che Kent Overstreet dimostrerà concretamente la possibilità di interagire correttamente con altri sviluppatori del kernel e la capacità di seguire le regole consolidate dello sviluppo.
    • È stato aggiunto un flag RWF_NOSIGNAL alla chiamata di sistema pwritev2(), che disabilita l'invio del segnale SIGPIPE durante la scrittura su pipe o socket anonimi interrotti.
    • Nel Procfs è stata aggiunta l'opzione di montaggio 'pidns' per specificare gli spazi dei nomi degli identificatori di processo (PID namespace). Ad esempio: 'mount -t proc -o pidns=/proc/self/ns/pid proc /tmp/proc'.
    • In XFS è stata dichiarata stabile e abilitata per impostazione predefinita la possibilità di utilizzare l'utilità fsck per controllare e correggere eventuali problemi in modalità online, senza smontare il filesystem. Sono state aggiunte le chiamate di sistema file_getattr e file_setattr per la modifica degli attributi dei file speciali (qualsiasi inode). In KConfig sono state disabilitate per impostazione predefinita le opzioni XFS_SUPPORT_V4 (versione 4 di XFS) e XFS_SUPPORT_ASCII_CI (modalità senza distinzione tra maiuscole e minuscole) dichiarate obsolete. Sono state rimosse le opzioni di montaggio obsolete attr2, noattr2, ikeep e noikeep.
    • Nel MD RAID è stato implementato un nuovo tipo di bitmap — llbitmap (lockless bitmap), che funziona senza blocchi e offre prestazioni superiori.
    • Dalla struttura generale dell'inode sono state estratte le informazioni relative alla crittografia e alla verifica (puntatori i_crypt_info e i_verity_info). Questa modifica consente di ridurre il consumo di memoria nei filesystem che non supportano la crittografia e la verifica.
    • Nel sottosistema FUSE è stato aggiunto il supporto per la chiamata di sistema copy_file_range() e la copia diretta di intervalli utilizzando una dimensione a 64 bit (in precedenza era supportata solo una dimensione a 32 bit). È stata aggiunta la modalità di inizializzazione sincrona durante il montaggio (FUSE_DEV_IOC_SYNC_INIT).
    • Nel filesystem ext4 è stata realizzata la possibilità di usare identificatori utente (uid) e di gruppo (gid) a 32 bit per accedere ai blocchi riservati. Sono state aggiunte operazioni ioctl per impostare e leggere i parametri del superblocco dei filesystem montati (tune2fs potrà modificare i parametri del superblocco senza diritti di scrittura sul dispositivo a blocchi). Le impostazioni obsolete specifiche per ext3 sono state completamente rimosse.
    • In f2fs è stata aggiunta l'opzione di montaggio 'lookup_mode' per scegliere la modalità di ricerca: perf — ricerca basata su hash, compat — ricerca lineare, auto — selezione automatica. Cambiare modalità ha un senso per le configurazioni con directory che non tengono conto delle maiuscole. La modalità di ricerca attuale può essere verificata tramite il file '/sys/fs/f2fs//effective_lookup_mode'. È stata aggiunta la possibilità di prenotare inode disponibili solo per utenti privilegiati.
    • In Overlayfs è stata aggiunta una modalità di funzionamento che ignora il case sensitivity, attivabile a livello di filesystem (il supporto per directory specifiche non è ancora disponibile).
    • In BTRFS sono stati migliorati la parallelizzazione delle operazioni con carico di lettura elevato e carico di scrittura ridotto, riducendo il tempo di commit delle transazioni e notevolmente accorciando il tempo di sincronizzazione (da minuti a decine di secondi). È stata introdotta la possibilità di utilizzare blocchi (bs) di dimensioni maggiori rispetto alla pagina della memoria (ps).
    • In ksmbd (server SMB a livello kernel) è stato aggiunto un parametro per limitare il numero massimo di connessioni da un singolo client. Indirizzi IP. smbdirect, smbclient e smbserver sono stati aggiornati per utilizzare le strutture tipiche del kernel.
    • In SQUASHFS è stata aggiunta la possibilità di utilizzare nel richiamo di sistema lseek() le opzioni SEEK_DATA e SEEK_HOLE per la ricerca di dati e spazi vuoti in file sparsi. In alcuni test è stato registrato un incremento delle prestazioni di copia di file sparsi fino a 150 volte.
    • In EXFAT è stata aggiunta la supporto per ioctl FS_IOC_GETFSLABEL e FS_IOC_SETFSLABEL per la lettura e scrittura delle etichette delle partizioni. È stata fornita la possibilità di modificare le opzioni di mount durante il rimontaggio. È stata accelerata la lettura delle bitmap.
    • In NTFS3 è stata aggiunta la supporto per ioctl FS_IOC_GETFSLABEL e FS_IOC_SETFSLABEL per la lettura e impostazione delle etichette delle partizioni.
  • Memoria e servizi di sistema
    • È stata integrata l'implementazione del meccanismo di interprocess communication Binder, scritta in Rust. Binder è utilizzato in Android per facilitare l'interazione tra processi e la chiamata remota di metodi (un processo Android può chiamare un metodo o funzione in un altro processo Android, utilizzando Binder per identificare, chiamare e trasferire argomenti tra i processi). Il codice di Binder è stato riscritto in Rust come parte dell'iniziativa di Google per rafforzare la sicurezza di Android.
    • In SLUB, l'allocatore di memoria del kernel, è stato implementato un layer opzionale di caching "sheaves", che utilizza più cache, ciascuna collegata a un singolo core della CPU, consentendo la localizzazione delle operazioni di allocazione e liberazione di memoria a un solo core. Questa cache ha migliorato le prestazioni di allocazione e liberazione di memoria nel kernel, eliminando i primitivi di sincronizzazione non necessari coinvolti in più core della CPU. Nei test condotti, l'aumento delle prestazioni è stato compreso tra il 6,3% e il 31% a seconda del tipo di carico.
    • È stata aggiunta la possibilità di creare file descriptor associati a uno spazio dei nomi (namespace) specifico. A differenza dell'accesso agli spazi dei nomi per identificatori (/proc//ns/), il file descriptor è ancorato a un'istanza concreta dello spazio dei nomi ed esclude la possibilità che l'identificatore venga riutilizzato per puntare a un altro oggetto. Analogamente all'uso di pidfds, l'apertura di file descriptor che fanno riferimento a spazi dei nomi avviene tramite le funzioni open_by_handle_at() e name_to_handle_at().
    • È stato implementato un meccanismo "Swap Table" che migliora le prestazioni di swapping. Il miglioramento avviene grazie alla riduzione della concorrenza per l'accesso alla cache di swapping, una ricerca più efficiente nella cache e una minore frammentazione. Il backend basato su Swap Table è stato utilizzato per la cache di swapping invece del backend XArray, consentendo un aumento medio delle prestazioni del 5-20%. Nel test usemem, la larghezza di banda è aumentata del 17-28%, nel test di ricompilazione del kernel multithread, il tempo di compilazione è diminuito dell'1,12-3,19%, e il test redis-benchmark con BGSAVE ha mostrato un incremento del numero di richieste elaborate del 6-7%.
    • Il sottosistema Zswap è passato all'uso diretto del sistema di allocazione della memoria zsmalloc invece dello strato zpool, che non è più utilizzato e ora è stato rimosso dal kernel.
    • Per gestire il comportamento del caricatore di microcodice sui sistemi x86 è stata implementata un'opzione da riga di comando "microcode=lista dei flag". Nella sua attuale forma, la nuova opzione ha sostituito "microcode.force_minrev" e consente di specificare anche la versione minima di microcodice da caricare.
    • È iniziato il lavoro per riorganizzare la struttura eccessivamente gonfiata "page", utilizzata per gestire le pagine di memoria. È stato aggiunto un tipo 'memdesc_flags_t' per i campi con flag universali, che potranno essere utilizzati dopo l'attesa separazione futura di strutture dalla struttura "page" per slab e folios (folio).
    • Per l'architettura nios2, utilizzata nei processori Altera Nios II (soft-processor basato su FPGA), è stata implementata la supporto per la chiamata di sistema clone3().
    • Nella configurazione del kernel (KConfig) è stato aggiunto l'attributo «transitional», utilizzabile per contrassegnare le impostazioni che non vengono visualizzate nelle interfacce utente, come «make menuconfig», e non incluse nei file di configurazione generati. L'uso principale dell'attributo è semplificare la rinominazione delle opzioni mantenendo la retrocompatibilità.
    • La versione minima del compilatore Clang necessaria per compilare il kernel è stata aumentata al toolkit LLVM 15. In Debian 12 e Ubuntu 22.04 è fornito LLVM 14.
    • Continua 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 è attivo per impostazione predefinita e non porta all'inclusione di Rust tra le dipendenze di compilazione obbligatorie per il kernel). Nella nuova versione sono state implementate operazioni atomiche sulla memoria, la struttura maple tree, la possibilità di creare file DebugFS e funzioni per la manipolazione di bitmap. È stato ampliato l'accesso all'API per lo sviluppo di driver. È stato aggiunto un set completo di astrazioni per lo sviluppo di driver per dispositivi USB (esempio di driver USB). L'utility perf ha aggiunto supporto per i simboli di debug generati dal compilatore rustc.
  • Virtualizzazione e sicurezza
    • È stato aggiunto il supporto per la verifica crittografica delle BPF (Berkeley Packet Filter) caricate tramite firma digitale. In futuro, questa funzione sarà ampliata con strumenti per definire regole di caricamento per i BPF firmati e consentire agli utenti non privilegiati di utilizzare programmi BPF verificati.
    • Nel hypervisor KVM è stato implementato il supporto per la virtualizzazione del'estensione Intel CET (Control-flow Enforcement Technology), utilizzata per difendersi da exploit che sfruttano metodi di programmazione orientati al ritorno (ROP - Return-Oriented Programming). La protezione consiste nel fatto che, dopo aver passato il controllo alla funzione, l'indirizzo di ritorno è memorizzato dal processore non solo nello stack normale, ma anche in uno stack shadow separato, che non può essere modificato direttamente.
    • È stata aggiunta la possibilità di utilizzare più di 255 CPU nei sistemi guest che operano sotto l'hypervisor Bhyve su host con FreeBSD 15.
    • È stato aggiunto uno strato dibs (Direct Internal Buffer Sharing) per la condivisione controllata dei buffer all'interno di un ambiente isolato, come un hypervisor o un'istanza del kernel Linux.
    • Nel sottosistema di auditing è stato aggiunto il supporto per il funzionamento con più moduli LSM (Linux Security Module) attivati contemporaneamente.
    • È stato aggiunto un driver virtio spi-virtio per l'accesso a dispositivi SPI (Serial Peripheral Interface) da di macchine virtuali.
    • Nell'hypervisor KVM è stato aggiunto il supporto per la modalità SEV-SNP CipherText Hiding, che blocca la lettura del testo cifrato della memoria dei sistemi guest protetti da un CPU non autorizzato.
    • È stato aggiunto un driver qtee per ambienti TEE (Trusted Execution Environment) dei chip Qualcomm.
  • Sottosistema di rete
    • È stato aggiunto il supporto per la crittografia delle connessioni TCP, utilizzando il protocollo PSP (PSP Security Protocol), sviluppato da Google per crittografare il traffico tra i data center. PSP fornisce crittografia, controllo crittografico dell'integrità e autenticazione dell'origine, implementando una sorta di combinazione delle capacità dei protocolli TLS e IPsec. In PSP viene utilizzata la crittografia a livello di singole connessioni di rete, e non dell'intero canale. PSP utilizza chiavi di crittografia separate per diverse connessioni TCP instradate per un isolamento rigoroso del traffico tra diverse applicazioni e gestori. Per ridurre il carico sulla CPU, è supportata l'accelerazione delle operazioni di crittografia e decrittografia sul lato delle schede di rete (offload). Il protocollo UDP viene utilizzato come trasporto per il trasferimento dei dati, sul quale viene instradato il contenuto del pacchetto TCP originale.

      Rilascio del kernel Linux 6.18
    • È stata aggiunta una supporto iniziale per l'estensione AccECN (Accurate Explicit Congestion Notification), rappresentante una versione migliorata dell'estensione ECN, che permette agli host di contrassegnare i pacchetti IP in caso di sovraccarico invece di scartarli, permettendo di rilevare l'insorgere di una congestione iniziale nei canali di comunicazione senza perdita di pacchetti. L'estensione ECN originale ha una limitazione che consente di inviare solo un segnale di congestione in un ciclo di trasmissione TCP (RTT, Round-Trip Time, invio di una richiesta e ricezione di una risposta). AccECN rimuove tale limitazione e consente al ricevitore di inviare al mittente più di un contrassegno di congestione nell'intestazione del pacchetto TCP. Gli algoritmi di controllo della congestione possono utilizzare le informazioni ricevute per rispondere più accuratamente a sovraccarichi e non dover ricorrere a un drastico abbassamento dell'intensità di invio dei pacchetti in caso di sovraccarichi leggeri.
    • Nel protocollo UDP è stata ottimizzata la gestione dei pacchetti in entrata durante attacchi DDoS, che portano a un gran numero di pacchetti in uno o più socket UDP. Le ottimizzazioni effettuate, come la riduzione dei conflitti di locking, l'ottimizzazione della disposizione delle strutture dati in memoria e l'uso di lock che considerano l'architettura NUMA (Non-Uniform Memory Access), hanno permesso di aumentare le prestazioni nella ricezione dei pacchetti UDP del 47% o più in condizioni estreme.
    • È stata implementata la possibilità di disattivare la cache di I/O nel server NFS, consentendo l'utilizzo del server NFS in sistemi con poca memoria (ad esempio, ambienti cloud ridotti). Disattivare la cache può anche essere utile sui server NFS sovraccarichi per evitare l'espulsione dalla cache dei dati relativi ai dispositivi locali, a causa del rilascio di memoria per la cache NFS.
    • La dimensione massima dei buffer per i pacchetti in entrata e in uscita per i socket di rete (net.core.rmem_max e net.core.wmem_max) è stata aumentata da 2 MB a 4 MB. La dimensione predefinita non è cambiata (net.core.rmem_default e net.core.wmem_default = 2 MB).
    • È stato aggiunto un driver per l'acceleratore delle operazioni di rete Qualcomm PPE (Packet Processing Engine), utilizzato nei SoC Qualcomm IPQ9574.
  • Attrezzature
    • Nel kernel è stato accettato il driver Tyr, scritto in Rust, che gestisce le GPU ARM Mali, nelle quali viene utilizzata la tecnologia CSF (Command Stream Frontend), come le Mali G310, G510 e G710. Il driver non è ancora pronto per l'uso da parte degli utenti comuni e viene considerato un prototipo sperimentale per testare astrazioni per lo sviluppo di driver in Rust.
    • Nei driver per dispositivi di input con interfaccia HID (Human Interface Device) è stato aggiunto il supporto per touchpad con feedback tattile e sensori di forza di pressione.
    • È 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. Nella nuova versione è stata aggiunta l'interfaccia madvise, è stato incluso il supporto per SR-IOV PF (Single Root I/O Virtualization Physical Function), è stato implementato il supporto per la modalità Intel PSMI per la validazione dell'hardware, è stata assicurata la gestione delle informazioni sugli errori trasmesse dai firmware, è stato implementato il profilo di consumo energetico SLPC, ed è stato aggiunto il supporto per il caricamento dei firmware ausiliari (ad esempio, per il controller della ventola e il regolatore di tensione) durante il controllo del driver.
    • Nel driver AMDGPU è stato aggiunto il supporto per i dispositivi con APU Cyan Skillfish, è stato migliorato il supporto per AMD GCN 1.0, è stata implementata la compatibilità con gli strumenti criu, e nel sysfs sono state aggiunte metriche di temperatura, consentiti i richieste di rimappatura MMIO dallo spazio utente.
    • Nel driver i915 è stato incluso il supporto per i chip della famiglia Wildcat Lake e migliorata l'interazione con le GPU Jasper Lake, Elkhart Lake, Gen7 e Gen6.
    • Nel driver Nouveau sono state attivate di default le firmware GSP NVIDIA e migliorata la gestione degli errori.
    • È proseguita l'integrazione dei componenti del driver Nova per GPU NVIDIA, dotate di firmware GSP, utilizzate a partire dalla serie NVIDIA GeForce RTX 2000 basata sull'architettura Turing. Il driver è scritto in Rust. Nella nuova versione è stato ampliato il supporto per le firmware GSP, migliorata l'implementazione del macro «register!», e aggiunto il supporto per classi di dispositivi PCI e identificatori di produttori.
    • È stato aggiunto un driver rocket per acceleratori NPU, utilizzati nei SoC Rockchip RK3588.
    • È stato aggiunto il parametro del kernel «boot_display» per selezionare il dispositivo di output per visualizzare il processo di avvio su sistemi con più GPU.
    • Nel driver vesadrm è stato implementato il supporto per palette a 8 bit.
    • Nel driver msm è stato aggiunto il supporto per GPU Adreno 663 ed è stato implementato il supporto per la tecnologia di riduzione del consumo energetico IFPC (Inter Frame Power Collapse).
    • Nel driver panthor è stato aggiunto il supporto per GPU Mali-G710, Mali-G510, Mali-G310, Mali-Gx15, Mali-Gx20 e Mali-Gx25.
    • È stato aggiunto il supporto per i sistemi audio ASoC Qualcomm Glymur e PM4125, Realtek RT1321, Shanghai FourSemi FS2104/5S, Texas Instruments PCM1754 e TAS2783A, qcs615, CS35L56 B2, tas2118, tas2x20, tas5825. È stato aggiunto il supporto per schede audio USB Tascam US-144mkII e Presonus S1824c.
    • È stato aggiunto il supporto per le CPU ARM Cortex-A320/A520AE/A720AE e C1-Nano/Pro/Premium/Ultra.
    • È stato aggiunto il supporto per piattaforme ARM, SoC e dispositivi: Apple M2 Pro, M2 Max e M2 Ultra, Sony Xperia SP, Samsung Galaxy S22, Samsung Galaxy S20 FE, ASUS Eee Pad Slider SL101, Lenovo ThinkBook 16, HP Omnibook X14 X1P42100, Dell Inspiron 7441/Latitude 7455, Sige1, NanoPi Zero2, Axis Artpec8, NXP i.MX91, ROCK 2A/2F, Qualcomm Lemans Auto, Renesas RZ/T2H, RZ/N2H, RZ/T2H e RZ/N2H, Aspeed AST27xx, Meta Clemente BMC, Netcube Nagami som, Tqma91xx, Ultratronik i.MX8MP Ultra-MACH, i.MX8ULP EVK9, Buffalo WXR-1750DHP.

Contemporaneamente, il Fondo latinoamericano per il software libero ha realizzato una variante completamente libera del kernel 6.18 — Linux-libre 6.18-gnu, ripulita da elementi di firmware e driver contenenti componenti o porzioni di codice non liberi, la cui applicazione è limitata dal produttore. Nella versione 6.18 è stato aggiornato il codice di pulizia dei blob nei driver Nova-Core, Intel XE, TI PRUeth, Lantiq GSWIP, Marvell WiFi-Ex. È stata eseguita la pulizia dei nomi dei blob nei file dts (devicetree) per i chip ARM di Qualcomm, Mediatek e TI ARM64. È stata neutralizzata il caricamento dei blob nei nuovi driver FourSemi fs2104/5s, TI TAS2783 e Qualcomm GENI.

Fonte: opennet.ru

Acquista un hosting affidabile per siti con protezione DDoS, server VPS VDS 🔥 Acquista un hosting affidabile per siti con protezione DDoS, server VPS VDS | ProHoster