Rilascio del kernel Linux 6.16

Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 6.16. Tra le modifiche più significative ci sono: un driver per accelerare OpenVPN, il meccanismo Kexec HandOver, l'inclusione per default delle tabelle delle pagine di memoria a cinque livelli per x86, la rimozione del protocollo DCCP, il driver a blocchi zloop, la possibilità di inviare core dump tramite socket UNIX, il supporto per la scrittura atomica in XFS, l'elaborazione audio offload per dispositivi USB, ottimizzazioni in Ext4, un driver virtuale TPM (Trusted Platform Module), un'implementazione completa del Device Memory TCP, il supporto per canali non denominati in io_uring, i preparativi per l'integrazione del driver DRM Asahi, il meccanismo "usermode queue" nel driver AMDGPU, il supporto per Intel TDE (Trusted Domain Extensions) e Intel APE (Advanced Performance Extensions).

Nella nuova versione sono state apportate 15.924 correzioni da 2.145 sviluppatori, la dimensione della patch è di 50 MB (le modifiche hanno interessato 13.793 file, aggiungendo 655.451 righe di codice e rimuovendo 316.441 righe). Nell'uscita precedente c'erano 15.945 correzioni da 2.154 sviluppatori, la dimensione della patch era di 59 MB. Circa il 45% di tutte le modifiche nella 6.16 riguarda i driver dei dispositivi, circa il 16% delle modifiche è relativo all'aggiornamento del codice specifico per le architetture hardware, il 13% è legato allo stack di rete, il 4% ai file system e il 3% ai sottosistemi interni del kernel.

Le principali novità nel kernel 6.16:

  • Sottosistema disco, I/O e file system
    • È stato aggiunto il driver zloop per la creazione di dispositivi loopback zonati montati in modalità loop. Il driver emula il funzionamento dei normali dispositivi a blocchi utilizzando più file da un file system esistente (uno per ogni zona). Questa funzionalità può essere utile per testare i file system, i gestori del device mapper e le applicazioni per la loro compatibilità con dispositivi zonati che applicano la suddivisione in zone di gruppi di blocchi o settori, nei quali è consentito solo l'aggiunta sequenziale di dati, aggiornando l'intero gruppo di blocchi.
    • Nel file system XFS è stata implementata la supporto per la scrittura atomica di grandi porzioni di dati — ora è possibile scrivere più blocchi in modalità atomica (o tutti i blocchi vengono scritti con successo, oppure nessun blocco viene scritto).
    • Nel file system Ext4 è stata migliorata la performance del meccanismo di "fast commit". È stata aggiunta la supporto per grandi fogli di memoria (large folios) per file normali, il che ha aumentato la performance del 37% nei test condotti con intense operazioni di input/output sequenziali. È stato introdotto il supporto per operazioni di scrittura atomiche che coprono più blocchi.
    • Nel driver per il file system ext2 è stata dichiarata obsoleta la supporto per il meccanismo DAX, che consente l'accesso diretto al file system bypassando la cache delle pagine. La rimozione del DAX dal driver ext2 è prevista per la fine dell'anno. Come motivo viene citato il considerare il driver ext2 come un'implementazione di riferimento stabile, in cui è inammissibile l'uso di funzionalità specifiche che non hanno avuto la giusta diffusione.
    • I file system OrangeFS, UFS, BFS e OMFS sono stati aggiornati per utilizzare la nuova API di montaggio delle partizioni.
    • In sysctl, the setting vfs_cache_pressure_denom has been added to manage the number of entries in the 'dentry' cache (the internal representation of directory elements) under conditions of low memory in the system. The higher the value set, the more entries can be evicted from the cache (fewer entries will remain in the cache) when memory is low.
    • The Bcachefs file system has added the option 'rebalance_on_ac_only', which prohibits rebalancing operations and background compression when the system is powered by a battery. Snapshot and device deletion operations have been accelerated. Memory consumption during read-only mount has been reduced. Some failure recovery operations can now be run in the background without halting filesystem operations.
    • The power management subsystem is now allowed to freeze filesystems and EFI variables for sleep and standby modes on its own (if the filesystems are already frozen by the user-space handler, re-freezing does not occur).
    • È stata aggiunta la possibilità di accelerare le prestazioni di EROFS utilizzando l'acceleratore QAT (QuickAssist Technology) integrato nei processori Intel, offrendo strumenti per velocizzare i calcoli relativi alla compressione e alla crittografia.
    • Nel NFS, la dimensione massima del pacchetto di dati per le operazioni di lettura e scrittura è aumentata da 1 a 4 MB (il valore predefinito è impostato a 1 MB, poiché non tutti i client supportano dimensioni maggiori).
    • Agli utenti non privilegiati con diritti CAP_SYS_ADMIN in un namespace di identificatori utente separato, ma senza diritti elevati nel namespace radice, è stata concessa la possibilità di utilizzare il meccanismo fanotify per monitorare le modifiche nei file system.
    • Per i file system che utilizzano il sottosistema FUSE, è stata fornita la funzionalità per cancellare contemporaneamente tutte le voci memorizzate nella cache sui cataloghi (dentries). È stata aggiunta al sottosistema FUSE la supporto per pagine di memoria di grandi dimensioni.
    • In FС OverlayFS, è supportata la creazione di livelli di dati in spazi dei nomi non privilegiati, per i quali viene utilizzato il controllo dell'integrità basato sul modulo dm-verity. Questa funzionalità consente di combinare strati di metadati fidati con strati di dati non fidati, gestiti in spazi dei nomi non privilegiati.
  • Memoria e servizi di sistema
    • È stato aggiunto il meccanismo KHO (Kexec HandOver) per avviare un nuovo kernel da uno precedente senza perdere lo stato del sistema. Prima di trasferire il controllo alla nuova versione del kernel, lo stato delle sottosistemi chiave del kernel può essere serializzato in una area di memoria che non verrà toccata dalle operazioni successive. Il nuovo kernel, una volta ottenuto il controllo, ripristina lo stato serializzato. Sulla base di KHO, si sviluppa il sottosistema Live Update Orchestrator (LUO), che consente di riavviare il kernel senza fermare il funzionamento dei dispositivi.
    • È stato aggiunto il parametro di compilazione del kernel CONFIG_X86_NATIVE, che consente di utilizzare l'opzione "-march=native" durante la compilazione per l'ottimizzazione in base alle capacità del processore del sistema attuale.
    • È stata aggiunta la supporto per l'estensione dell'architettura del set di istruzioni Intel APX (Advanced Performance Extension), che fornisce 16 registri aggiuntivi a uso generale (oltre ai 16 già esistenti), consentendo di ridurre le operazioni di lettura e scrittura in memoria nel codice, migliorando così le prestazioni e riducendo il consumo energetico.
    • È stata aggiunta la modalità di configurazione automatica delle politiche di distribuzione della memoria nei sistemi NUMA, in cui tutti i pesi dei nodi vengono ricalcolati quando vengono fornite nuove informazioni sulla larghezza di banda durante il caricamento o durante il collegamento a caldo della memoria.
    • Nell'implementazione dei futex è stata aggiunta la supporto per una tabella hash locale dei processi (local futex_hash_bucket), che, a differenza della precedente tabella hash condivisa per tutti i processi, è locale a un singolo processo ed è condivisa da tutti i thread di quel processo. Le tabelle hash locali vengono utilizzate solo per le operazioni futex PROCESS_PRIVATE. Inoltre, nella nuova versione è stata aggiunta la supporto per le opzioni FUTEX2_NUMA e FUTEX2_MPOL, che consentono di influenzare la collocazione dei futex in memoria, per posizionarli più vicino ai processi che li utilizzano.
    • Per i sistemi x86_64 è stata attivata la supporto continuo per le tabelle delle pagine di memoria a cinque livelli (il parametro CONFIG_X86_5LEVEL, che gestiva l'attivazione delle tabelle a cinque livelli, è stato rimosso).
    • Nel driver intel_pstate, che gestisce i parametri di consumo energetico (P-state) nei sistemi con processori Intel, è stata aggiunta la supporto per il funzionamento del pianificatore dei task tenendo conto del consumo energetico (EAS — Energy Aware Scheduling) sui processori ibridi, che combinano core CPU ad alte prestazioni e ad alta efficienza energetica, come Intel Lunar Lake.
    • In sysfs sono stati aggiunti gli interfaccia: '/sys/devices/system/cpu/cpuN/cpu_capacity' per ottenere informazioni sulle capacità dei vari CPU nei processori ibridi e '/sys/devices/system/cpu/cpuidle/intel_c1_demotion' per gestire la possibilità di mantenere il CPU in uno stato più performante, anche se il core cerca di trasferire il CPU in uno stato di minor consumo energetico (ad esempio, il core può richiedere un passaggio allo stato di consumo energetico C6, ma il firmware, in caso di elevata intensità di risveglio del CPU, può mantenerlo nello stato C1).
    • Per l'architettura ARM64 è stata abilitata la modalità di preemption pigra (PREEMPT_LAZY, preemption pigra), che corrisponde alla modalità di preemption totale («full preemption») per i compiti in tempo reale (RR/FIFO/DEADLINE), ma ritarda la preemption dei normali compiti (SCHED_NORMAL) fino al confine del tick.
    • Per l'architettura ARM64 è stato aggiunto il supporto per l'uso delle estensioni SME (Scalable Matrix Extension), attivabile tramite il parametro CONFIG_ARM64_SME.
    • Continua il trasferimento delle modifiche dalla branch 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 del kernel). Per i moduli scritti in Rust è fornita la possibilità di utilizzare configfs. Sono state aggiunte astrazioni necessarie per lo sviluppo di driver grafici. Ampliata la funzionalità dei moduli alloc, time, str, list, workqueue e page. Supporto per il macro 'assert!' nei test basati su KUnit. Aggiunto un insieme di astrazioni per la gestione della frequenza della CPU e per l'uso delle API relative alla gestione dell'energia. Aggiunto il supporto per la struttura dati 'xarray'.
    • Per l'architettura RISC-V è stata trasferita l'implementazione della chiamata di sistema getrandom(), ottimizzata tramite il meccanismo vDSO (virtual dynamic shared object), che consente di spostare il gestore della chiamata di sistema dallo spazio del kernel a quello utente, evitando così i cambi di contesto. Nei test condotti, questa ottimizzazione ha accelerato l'ottenimento di numeri casuali di 17 volte. Per RISC-V è stata anche implementata la supporto per le estensioni vettoriali Zicbop, Zabha e Svinval, utilizzate nei processori SiFive.
    • Per l'architettura LoongArch, il limite sul numero di CPU nel sistema è stato aumentato da 256 a 2048. È stato aggiunto il supporto per lo scheduler SCHED_MC (Multi-core).
    • È stata aggiunta la possibilità di utilizzare i socket Unix per la trasmissione di file descriptor. Le applicazioni possono disabilitare questa funzionalità utilizzando il flag SO_PASSRIGHTS in setsockopt().
    • È stata fornita la possibilità di mappare un buffer circolare, utilizzato per il tracciamento del funzionamento del kernel, nella memoria dello spazio utente.
    • I gestori di crash-dump, utilizzati per generare un rapporto sul problema dopo il crash del kernel, possono ora utilizzare le chiavi LUKS impiegate dal kernel difettoso per salvare i crash dump in file system crittografati.
    • Nel sistema di input/output asincrono io_uring è stata aggiunta l'operazione IORING_OP_PIPE per la creazione di canali anonimi, simile alla chiamata di sistema pipe2, con l'eccezione del supporto per descrittori di file fissi.
    • È stata aggiunta l'opzione della riga di comando del kernel «rt_group_sched» per gestire l'attivazione dello scheduler per l'esecuzione di gruppi di task realtime (SCHED_RR). L'opzione è analoga all'impostazione RT_GROUP_SCHED in Kconfig.
    • Per i dispositivi basati sul bus CXL (Compute Express Link), utilizzato per garantire un'interazione ad alta velocità tra CPU e dispositivi di memoria, è stata implementata la supporto alle estensioni RAS (Reliability, Availability, Serviceability), permettendo di realizzare vari schemi di rilevazione e correzione degli errori. CXL consente di collegare nuove aree di memoria fornite da dispositivi di memoria esterni e di utilizzarle come risorse aggiuntive dello spazio di indirizzamento fisico per espandere la memoria operativa di sistema (DDR) o la memoria persistente (PMEM).
    • La versione minima di GCC necessaria per la compilazione del kernel è stata elevata alla ramo GCC 8 per tutte le architetture. Per la compilazione è ora necessaria almeno la versione 2.30 del pacchetto binutils.
    • È stata rimossa la chiamata di sistema uselib(), che è obsoleta da tempo; ora per l'accesso condiviso ai programmi si utilizza mmap() per le librerie condivise.
  • Virtualizzazione e sicurezza
    • È stato aggiunto il supporto iniziale per l'utilizzo del meccanismo Intel TDX (Trusted Domain Extensions) per proteggere i sistemi guest, operanti sotto l'ipervisore KVM, dalle interferenze e dall'analisi da parte degli amministratori dei sistemi host e da attacchi fisici all'hardware. La protezione è garantita tramite la crittografia della memoria. di macchine virtuali.
    • È stato aggiunto un driver virtuale TPM (Trusted Platform Module) che consente alle macchine virtuali di interagire con i dispositivi TPM emulati dal modulo SVSM (Secure VM Service Module).
    • È stata ripristinata la possibilità di utilizzare il plugin GCC randstruct, che randomizza la disposizione delle strutture dati in fase di compilazione, complicando l'exploitation delle vulnerabilità.
    • È stata introdotta la tecnologia IMA (Integrity Measurement Architecture) per la verifica dell'integrità al momento dell'avvio di nuovi kernel tramite la chiamata di sistema kexec.
    • È stato eseguito un lavoro per ridurre l'impatto sulle prestazioni causato dall'uso di SELinux. Per migliorare le performance, è stata aggiunta una cache con i risultati dei controlli di accesso alle directory. Nelle regole genfscon è stata aggiunta la possibilità di utilizzare le maschere.
    • Nel codice per l'interazione con EFI è stata fornita la possibilità di incorporare la sezione SBAT (UEFI Secure Boot Advanced Targeting) con i metadati sulle versioni ritirate dei componenti di avvio.
    • Nei moduli caricabili è stato effettuato il passaggio della sezione «.static_call_sites» in modalità solo lettura dopo il completamento dell'inizializzazione.
    • Per i sistemi ARM a 64 bit, nel hypervisor KVM è stata implementata la supporto per la virtualizzazione nidificata (disattivata per impostazione predefinita).
    • Nel hypervisor KVM è stata dichiarata stabile la supporto per l'architettura RISC-V.
  • Sottosistema di rete
    • È stato integrato il driver ovpn, che consente di migliorare notevolmente le prestazioni di OpenVPN spostando le operazioni di crittografia, elaborazione dei pacchetti e gestione del canale di comunicazione nel kernel di Linux. Questo driver elimina le spese generali associate ai cambi di contesto, ottimizza il lavoro attraverso un accesso diretto alle API interne del kernel ed esclude il lento trasferimento di dati tra il kernel e lo spazio utente (la crittografia, decrittazione e instradamento vengono eseguiti dal modulo senza inviare il traffico al gestore nello spazio utente).
    • Nel meccanismo Device Memory TCP è stata aggiunta la funzionalità di invio dei dati dalla memoria del dispositivo (percorso TX). In precedenza, per semplificare l'integrazione di Device Memory TCP nel kernel, la funzionalità era limitata solo alla ricezione dei dati (percorso RX). Device Memory TCP consente di utilizzare socket di rete per inviare direttamente il contenuto della memoria del dispositivo periferico attraverso la rete (modalità zero-copy), oltre a posizionare direttamente il contenuto dei pacchetti di rete nell'area di memoria del dispositivo sul lato del destinatario. I dati trasmessi nei pacchetti vengono trasferiti dalla scheda di rete nella memoria del dispositivo periferico (DMABUF), ad esempio, nella memoria video della GPU, o dalla memoria del dispositivo nella scheda di rete direttamente, bypassando la CPU, mentre le intestazioni dei pacchetti vengono archiviate nei normali buffer del kernel.
    • È stata fornita la possibilità di inviare il contenuto dei core dump tramite socket AF_UNIX, permettendo di creare gestori di core dump più sicuri nello spazio utente, non legati alla chiamata del kernel di processi privilegiati.
    • È stata rimossa la supporto per il protocollo di rete DCCP (Datagram Congestion Control Protocol), che non ha preso piede ed è rimasto nel kernel senza manutenzione per cinque anni. La rimozione di DCCP dal kernel eliminerà gli ostacoli che bloccano la ristrutturazione della struttura dati inet_connection_sock, migliorando l'efficienza del stack TCP. Il supporto per i moduli netfilter per il filtraggio dei pacchetti DCCP rimane.
    • Per semplificare la gestione degli errori nell'uso dei socket SO_PEERPIDFD, il kernel ora può trasmettere il pidfd per i processi già terminati (il pidfd è legato a processi specifici e, a differenza del pid, non viene riassegnato).
    • Con BPF ora è possibile creare gestori per il controllo delle code di pacchetti nel stack di rete (qdiscs) per influenzare l'ordine di elaborazione dei pacchetti di rete.
    • Nella rete di file system AFS è stato utilizzato GSSAPI (Generic Security Services API) per gestire la crittografia delle connessioni con server YFS e OpenAFS.
    • È stata introdotta una vasta serie di ottimizzazioni. Ristrutturata l'organizzazione dei blocchi per le tabelle di routing IPv6 (alcune operazioni sui percorsi ora vengono eseguite fino a 3 volte più velocemente). Accelerato il calcolo delle somme di controllo crc32c. Il motore GRO per il traffico UDP incapsulato è stato velocizzato del 10%. Migliorata l'autotuning del buffer di ricezione per TCP e aumentati i limiti predefiniti (nei test condotti, la capacità per flussi singoli attraverso un canale di 200 Gbs è aumentata del 60%).
    • In Netfilter è stata aggiunta la possibilità di utilizzare maschere nei nomi delle interfacce di rete, utilizzate in netdev e flowtable. Nella struttura nft trace è stata integrata l'informazione sul monitoraggio delle connessioni (conntrack). Accelerata l'estrazione delle tabelle di monitoraggio delle connessioni (conntrack) tramite procfs.
  • Attrezzature
    • È stata aggiunta la supporto per l'elaborazione dei flussi audio tramite dispositivi audio USB (offload audio USB). Questa modifica consente di ridurre significativamente il consumo energetico dei dispositivi portatili, poiché l'elaborazione del flusso audio può continuare mentre il resto del sistema è in modalità sleep. In precedenza, i kernel per la piattaforma Android fornivano un'implementazione specifica per l'offload audio su dispositivi USB, ma ora nel kernel principale è disponibile un'implementazione universale, utilizzabile da qualsiasi progetto.
    • È proseguita l'integrazione dei componenti del driver Nova per GPU NVIDIA dotate di firmware GSP, utilizzati a partire dalla serie NVIDIA GeForce RTX 2000 basata sull'architettura Turing. Il driver è scritto in linguaggio Rust. Oltre al componente nova-core, aggiunto nella scorsa versione e che implementa il livello base di astrazione per le interfacce software dei firmware GSP, nella versione 6.16 è stata inclusa un'implementazione iniziale del driver DRM nova-drm (Direct Rendering Manager) per interagire con la GPU dallo spazio utente.
    • È iniziato il processo di integrazione nel kernel del driver DRM Asahi per GPU Apple AGX, utilizzate nei chip Apple Silicon. Il driver è scritto in Rust. In questa fase, sono inclusi nel kernel solo i file header UAPI del driver Asahi necessari per Mesa, mentre il codice principale del driver Asahi sarà integrato in un secondo momento.
    • Nel driver Nouveau è stata aggiunta la supporto per le GPU NVIDIA delle famiglie Hopper e Blackwell.
    • Proseguono i lavori 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. È stata aggiunta la possibilità di utilizzare diversi file di firmware per diverse famiglie di GPU Intel.
    • Nel driver AMDGPU è stata implementata la supporto per il meccanismo «usermode queue», che consente di creare code di lavoro personalizzate nello spazio utente e di inviarle direttamente alla GPU senza ricorrere al pianificatore nel kernel. Il supporto per «usermode queue» è abilitato per GPU Navi 4X e GFX 12.
    • È stata aggiunta la supporto per i sistemi audio Intel WCL (Whiskey Lake), AMD ACP 7.x (Audio Co-Processor), Cirrus Logic CS35L63 e CS48L32, Everest Semiconductor ES8375 e ES8389, Pioneer DJM-V10, Longsoon-1 AC'97, NVIDIA Tegra264, Richtek ALC203, RT9123 e Rockchip SAI, oltre a nuove piattaforme Intel AVS.
    • Supporto aggiunto per piattaforme ARM, SoC e dispositivi: Samsung Exynos7870, Qualcomm Snapdragon X1P42100, Qualcomm MSM8926, RK3562, NXP i.MX94, Renesas RZ/V2N, Amlogic S6/S7/S7D, WonderMedia wm8950, Amlogic s805y, Allwinner A523, Toradex Verdin AM62P, ROCK 5B+, Nitrogen8M Plus, Retronix R-Car V4H Sparrow Hawk, MT8186 Ponyta Chromebook, VIA APC Rock/Paper, Renesas rz/t2h, ASUS Transformer Pad LTE TF300TL, LG Nexus 4, Google Pixel 4a, Raspberry Pi 2.
    • Rimosso il driver per le schede di acquisizione video con chip STA2X11.

Nel frattempo, la Fondazione per il Software Libero dell'America Latina ha creato una variante completamente libera del kernel 6.16 — Linux-libre 6.16-gnu, ripulito da elementi di firmware e driver contenenti componenti non liberi o sezioni di codice il cui uso è limitato dal produttore. Nella versione 6.16 è stata neutralizzata il caricamento di blob nei nuovi driver Intel qat 6xxx crypto, ST vd55g1 sensor, ath12k AHB wifi, Aeonsemi AS21xxx e MediaTek 25Gb Ethernet. Eseguita la pulizia dei nomi dei blob nei file dts (devicetree) per i chip ARM Qualcomm e MediaTek. Aggiornato il codice di pulizia dei blob nei driver Nova Core, Nouveau, Realtek r8169 Ethernet, Qualcomm Iris, Venus, Mediatek mt7996 wifi, Qualcomm ath11k e ath12k wifi, Texas Instruments tas2781 e Renesas R-Car gen4 PCIe.

Fonte: opennet.ru

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