Rilascio del kernel Linux 6.7

Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 6.7. Tra le modifiche più notevoli: integrazione del file system Bcachefs, cessazione del supporto per l'architettura Itanium, compatibilità di Nouveau con i firmware GSP-R, supporto per la crittografia TLS in NVMe-TCP, possibilità di utilizzare eccezioni in BPF, supporto per futex in io_uring, ottimizzazione delle prestazioni dello scheduler fq (Fair Queuing), supporto per l'estensione TCP-AO (TCP Authentication Option) e possibilità di limitare le connessioni di rete nel meccanismo di protezione Landlock, aggiunta gestione dell'accesso a user namespace e io_uring tramite AppArmor.

Nella nuova versione sono stati inclusi 18405 fix da 2066 sviluppatori, la dimensione del patch è di 72 MB (le modifiche hanno interessato 13467 file, sono state aggiunte 906147 righe di codice e rimosse 341048 righe). Nella precedente versione c'erano 15291 fix da 2058 sviluppatori, la dimensione del patch era di 39 MB. Circa il 45% di tutte le modifiche presentate in 6.7 riguardano i driver dei dispositivi, circa il 14% delle modifiche sono legate all'aggiornamento di codice specifico per architetture hardware, il 13% è collegato allo stack di rete, il 5% riguarda i file system e il 3% alle sottosistemi interne del kernel.

Le principali novità nel kernel 6.7:

  • Sottosistema disco, I/O e file system
    • Il kernel include il codice del file system Bcachefs, nel quale si cerca di raggiungere livelli di prestazioni, affidabilità e scalabilità simili a quelli di XFS, combinati con elementi di funzionalità avanzata presenti in Btrfs e ZFS. Ad esempio, Bcachefs supporta funzionalità come l'inclusione di più dispositivi in una partizione, layout a più strati per gli storage (uno strato inferiore con dati frequentemente utilizzati basati su SSD veloci e uno strato superiore con dati meno richiesti su dischi rigidi), replica (RAID 1/10), caching, compressione dei dati trasparente (modalità LZ4, gzip e ZSTD), snapshot, verifica dell'integrità tramite checksum, possibilità di memorizzare codici di correzione degli errori di Reed-Solomon (RAID 5/6) e memorizzazione delle informazioni in forma crittografata (utilizzando ChaCha20 e Poly1305). In termini di prestazioni, Bcachefs supera Btrfs e altri file system basati sul meccanismo Copy-on-Write, mostrando velocità di operazione comparabili a quelle di Ext4 e XFS.
    • Nel file system Btrfs è stata introdotta una modalità semplificata per le quote, che consente di ottenere prestazioni superiori tracciando le estensioni solo nella sottodirectory in cui sono state create. Questo semplifica notevolmente i calcoli e migliora le prestazioni, ma non permette di tenere conto delle estensioni utilizzate congiuntamente in più sottodirectory.
    • In Btrfs è stata aggiunta una nuova struttura dati chiamata "stripe tree", adatta per il mapping logico delle estensioni in situazioni in cui il mapping fisico non coincide su diversi dispositivi. Attualmente, la struttura è utilizzata nelle implementazioni RAID0 e RAID1 per dispositivi block zonati. In futuro, si prevede di utilizzare questa struttura anche in RAID di livello superiore, il che permetterà di risolvere alcuni problemi presenti nell'attuale implementazione.
    • Nel file system Ceph è stata implementata la supporto per il mapping degli identificatori degli utenti nelle file system montate, utilizzato per associare i file di un determinato utente su una partizione montata di un altro utente al corrente nella sistema.
    • In efivarfs, the ability to specify uid and gid during mounting has been added to allow UEFI variables to be modified by processes running without root permissions.
    • In exFAT, ioctl calls have been added for reading and modifying file system attributes. Processing for zero-sized directories has been implemented.
    • In F2FS, the option to use 16K block sizes has been implemented.
    • The autofs automounting mechanism has been transitioned to use the new partition mounting API.
    • In OverlayFS, the mounting options 'lowerdir+' and 'datadir+' have been proposed. Support for nested mounting of OverlayFS with xattrs has been added.
    • In XFS, CPU load optimization has been carried out in the real-time block distribution code. Concurrent execution of read operations and FICLONE has been made possible.
    • The EXT2 code has been transitioned to use page folios.
  • Memoria e servizi di sistema
    • Il supporto per l'architettura ia64, utilizzata nei processori Intel Itanium, è stato interrotto, poiché le vendite di questi ultimi sono cessate completamente nel 2021. I processori Itanium sono stati introdotti da Intel nel 2001, ma l'architettura ia64 non ha retto il confronto con AMD64, principalmente a causa delle prestazioni superiori di AMD64 e di una transizione più fluida dai processori x86 a 32 bit. Di conseguenza, l'interesse di Intel si è spostato verso i processori x86-64, lasciando i processori Itanium a server HP Integrity, che non è più in produzione da tre anni. Il codice per il supporto di ia64 è stato rimosso dal kernel principalmente a causa della mancanza prolungata di manutenzione per questa piattaforma, con Linus Torvalds che ha espresso disponibilità a reinserire il supporto per ia64 nel kernel, ma solo se si troverà un manutentore in grado di dimostrare una manutenzione efficace di questa piattaforma al di fuori del kernel principale per almeno un anno.
    • È stato aggiunto il parametro della riga di comando del kernel «ia32_emulation», che consente durante la fase di avvio di attivare e disattivare il supporto per l'emulazione della modalità a 32 bit nei kernel compilati per l'architettura x86-64. Dal punto di vista pratico, il nuovo parametro consente di compilare il kernel con il supporto per la compatibilità con applicazioni a 32 bit, ma disabilita questa modalità per impostazione predefinita per ridurre il vettore di attacco al kernel, poiché le API per garantire la compatibilità sono testate meno approfonditamente rispetto alle interfacce principali del kernel.
    • 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 comporta l'inclusione di Rust tra le dipendenze di costruzione obbligatorie del kernel). Nella nuova versione è stato effettuato il passaggio all'uso del rilascio Rust 1.73 ed è stato proposto un insieme di binding per lavorare con le code di lavoro (workqueues).
    • È stata fornita la possibilità di utilizzare il meccanismo binfmt_misc per aggiungere supporto a nuovi formati di file eseguibili (ad esempio, per eseguire applicazioni compilate in Java o Python) all'interno di singoli spazi dei nomi non privilegiati (namespace).
    • Nel controllore cgroup cpuset, che gestisce l'assegnazione dei core CPU durante l'esecuzione di un compito, è stata garantita una distinzione tra partizionamento locale e remoto, che si differenziano in base al fatto che il cgroup genitore sia o meno una sezione radice valida. Sono state inoltre aggiunte nuove impostazioni ‘cpuset.cpus.exclusive’ e ‘cpuset.cpus.exclusive.effective’ per l'assegnazione esclusiva ai CPU.
    • Nel sottosistema BPF è stato implementato il supporto per le eccezioni, che vengono gestite come un'uscita urgente dal programma BPF con la possibilità di un'inversione sicura dei frame dello stack. Inoltre, nei programmi BPF è consentito l'uso dei puntatori kptr in associazione con CPU.
    • Nel sottosistema io_uring è stata aggiunta la supporto per operazioni con futex, e sono state implementate nuove operazioni: IORING_OP_WAITID (versione asincrona di waitid), SOCKET_URING_OP_GETSOCKOPT (variante di getsockopt) e SOCKET_URING_OP_SETSOCKOPT (variante di setsockopt) e IORING_OP_READ_MULTISHOT (operazioni di lettura multiple che continuano finché ci sono dati o il buffer non è pieno).
    • È stata aggiunta l'implementazione di code FIFO leggeri a singolo collegamento, che richiedono il blocco spin solo per la rimozione dalla coda nel contesto del processo, evitando il blocco spin per l'aggiunta atomica alla coda in qualsiasi contesto.
    • È stato aggiunto un buffer circolare "objpool" con un'implementazione scalabile di una coda ad alte prestazioni per l'allocazione e il ritorno di oggetti.
    • È stata aggiunta una parte iniziale delle modifiche per l'implementazione del nuovo API futex2, che offre prestazioni superiori sui sistemi NUMA, supporta dimensioni diverse da 32 bit e può essere utilizzato al posto della chiamata di sistema multiplexed futex().
    • Per le architetture ARM32 e S390x è stata aggiunta la supporto per l'insieme attuale (cpuv4) di istruzioni BPF.
    • Per l'architettura RISC-V è stata implementata la possibilità di utilizzare la modalità di verifica Shadow-Call Stack disponibile in Clang 17, progettata per proteggere contro la sovrascrittura dell'indirizzo di ritorno da una funzione in caso di overflow del buffer nello stack. La protezione consiste nel conservare l'indirizzo di ritorno in un "shadow stack" separato dopo aver trasferito il controllo alla funzione e nel recuperare questo indirizzo prima di uscire dalla funzione.
    • Al meccanismo di fusione di pagine di memoria identiche (KSM: Kernel Samepage Merging) è stata aggiunta una nuova modalità intelligente di scansione delle pagine di memoria, che tiene traccia delle pagine scansionate con esito negativo e riduce l'intensità della loro scansione ripetuta. Per attivare la nuova modalità è stata aggiunta una configurazione in /sys/kernel/mm/ksm/smart_scan.
    • È stato aggiunto un nuovo comando ioctl PAGEMAP_SCAN, che, se utilizzato con userfaultfd(), consente di determinare eventi di scrittura in un determinato intervallo di memoria. Questa nuova funzionalità può essere utilizzata, ad esempio, nel sistema per il salvataggio e il ripristino dello stato dei processi CRIU o in sistemi anti-cheat per i giochi.
    • Nel sistema di assemblaggio, con il compilatore Clang predefinito, è attivata per impostazione predefinita la compilazione di esempi di utilizzo del sottosistema perf, scritti come programmi BPF.
    • Rimosso il vecchio strato videobuf, usato per gestire i frame buffer nel sottosistema multimediale e sostituito più di 10 anni fa con la nuova implementazione videobuf2.
  • Virtualizzazione e sicurezza
    • Nel sottosistema fscrypt è stata aggiunta la possibilità di crittografare i dati in blocchi di dimensioni inferiori a quelle del blocco del file system. Questo può essere necessario per utilizzare meccanismi hardware di crittografia che supportano solo blocchi di piccole dimensioni (ad esempio, i controller UFS che supportano solo la dimensione del blocco 4096 potranno essere utilizzati con file system con dimensione del blocco 16K).
    • Nel sottosistema 'iommufd', che consente di gestire le tabelle delle pagine di memoria dell'IOMMU (Unità di Gestione della Memoria I/O) tramite descrittori di file dallo spazio utente, è stata aggiunta il tracciamento dei dati non ancora cancellati dalla cache (dirty) per le operazioni DMA, necessario per identificare la memoria con dati non cancellati durante la migrazione dei processi.
    • Nel meccanismo Landlock, che limita l'interazione di un gruppo di processi con l'ambiente esterno, è stata aggiunta la supporto per la definizione di regole di gestione degli accessi ai socket TCP. Ad esempio, è possibile creare una regola che consente solo l'accesso attraverso la porta di rete 443 per stabilire connessioni HTTPS.
    • Nel sottosistema AppArmor è stata aggiunta la possibilità di gestire l'accesso al meccanismo io_uring e di creare spazi dei nomi degli identificatori utente (user namespaces), consentendo così di autorizzare selettivamente l'accesso a queste funzionalità solo a determinati processi.
    • Aggiunto API di attestazione di macchine virtuali per confermare l'integrità dei processi durante il caricamento.
    • Sui sistemi LoongArch è stata implementata la supporto per la virtualizzazione utilizzando il hypervisor KVM.
    • Utilizzando l'hypervisor KVM sui sistemi RISC-V, è stata aggiunta la supporto per l'estensione Smstateen, che blocca l'accesso della macchina virtuale ai registri CPU che non sono esplicitamente supportati dall'hypervisor. È stata inoltre aggiunta la supporto per utilizzare nei sistemi guest l'estensione Zicond, che consente di eseguire alcune operazioni intere condizionali.
    • Nei sistemi guest basati su architettura x86 in esecuzione sotto KVM, è consentito l'uso di fino a 4096 CPU virtuali.
  • Sottosistema di rete
    • Nel driver NVMe-TCP (NVMe over TCP), che consente l'accesso agli SSD NVMe tramite rete (NVM Express over Fabrics), è stata aggiunta la supporto per la crittografia del canale di trasmissione dei dati utilizzando TLS (utilizza KTLS e un processo in user space tlshd per la negoziazione della connessione).
    • È stata ottimizzata la performance dell'algoritmo di scheduling dei pacchetti fq (Fair Queuing), permettendo un aumento della capacità del 5% durante carichi elevati nel test tcp_rr (TCP Request/Response) e del 13% in un flusso illimitato di pacchetti UDP.
    • Nel protocollo TCP è stata aggiunta la possibilità opzionale di utilizzare timestamp (TCP TS) con precisione microsecondi (RFC 7323), consentendo di misurare più accuratamente le latenze e di creare moduli di gestione della congestione più avanzati. Per attivarlo, puoi utilizzare il comando "ip route add 10/8 … features tcp_usec_ts".
    • Nello stack TCP è stato aggiunto il supporto per l'estensione TCP-AO (TCP Authentication Option, RFC 5925), che consente di verificare gli header TCP tramite codici MAC (Message Authentication Code), utilizzando algoritmi più moderni come HMAC-SHA1 e CMAC-AES-128 al posto dell'opzione obsoleta TCP-MD5 basata sull'algoritmo MD5.
    • È stato aggiunto un nuovo tipo di dispositivi di rete virtuali "netkit", la cui logica di trasmissione dei dati è definita tramite un programma BPF.
    • In KSMBD, un'implementazione del server SMB a livello di kernel, è stato aggiunto il supporto per la conversione dei nomi dei file contenenti coppie surrogate di caratteri complessi.
    • In NFS è stata migliorata l'implementazione dei flussi con servizi RPC. È stato aggiunto il supporto per la delega di scrittura (per NFSv4.1+). In NFSD è stato aggiunto il supporto per il gestore netlink rpc_status. È stato migliorato il supporto per i client NFSv4.x durante la riesportazione in knfsd.
  • Attrezzature
    • Nel modulo del kernel Nouveau è stata aggiunta una supporto iniziale per i firmware GSP-RM, utilizzati nelle GPU NVIDIA RTX 20+ per delegare le operazioni di inizializzazione e gestione della GPU a un microcontrollore GSP separato (GPU System Processor). Il supporto GSP-RM consente al driver Nouveau di operare tramite chiamate al firmware, invece di programmazioni dirette delle operazioni di interazione hardware, semplificando notevolmente l'aggiunta del supporto per nuove GPU NVIDIA grazie all'uso di chiamate già pronte per l'inizializzazione e la gestione del consumo energetico.
    • Nel driver AMDGPU è stato implementato il supporto per GC 11.5, NBIO 7.11, SMU 14, SMU 13.0 OD, DCN 3.5, VPE 6.1 e DML2. È stato migliorato il supporto per il caricamento senza soluzione di continuità (senza sfarfallio durante il cambio della modalità video).
    • Nel driver i915 è stato implementato il supporto per i chip Intel Meteor Lake e aggiunta una implementazione iniziale per Intel LunarLake (Xe 2).
    • È stato aggiunto il supporto per i canali di trasmissione asimmetrici, inclusi nelle specifiche USB4 v2 (120/40G).
    • È stato aggiunto il supporto per ARM SoC: Qualcomm Snapdragon 720G (utilizzato negli smartphone Xiaomi), AMD Pensando Elba, Renesas, R8A779F4 (R-Car S4-8), USRobotics USR8200 (utilizzato nei router e NAS).
    • È stata aggiunta la supporto per lo smartphone Fairphone 5 e le schede ARM Orange Pi 5, QuartzPro64, Turing RK1, Variscite MX6, BigTreeTech CB1, Freescale LX2162, Google Spherion, Google Hayato, Genio 1200 EVK, RK3566 Powkiddy RGB30.
    • È stata aggiunta la supporto per le schede RISC-V Milk-V Pioneer e Milk-V Duo.
    • È stata aggiunta la supporto per le interfacce audio dei laptop HUAWEI forniti con CPU AMD. È stata aggiunta la supporto per altoparlanti extra installati sui laptop Dell Oasis 13/14/16. È stata aggiunta la supporto per gli altoparlanti integrati ASUS K6500ZC. È stata aggiunta la supporto per l'indicatore di silenziamento sui laptop HP 255 G8 e G10. È stata aggiunta la supporto per i driver audio acp6.3. È stata aggiunta la supporto per interfacce audio professionali Focusrite Clarett+ 2Pre e 4Pre.

Allo stesso tempo, il Fondo Latinoamericano per il Software Libero ha sviluppato una versione completamente libera del kernel 6.7 — Linux-libre 6.7-gnu, ripulita da elementi di firmware e driver contenenti componenti o porzioni di codice non liberi, la cui area d'uso è limitata dal produttore. Nella versione 6.7 è stato aggiornato il codice di pulizia dei blob in vari driver e sottosistemi, ad esempio, nei driver amdgpu, nouveau, adreno, mwifiex, mt7988, ath11k, avs e btqca. Sono stati rimossi il codice di pulizia dei driver localtalk e rtl8192u a causa della loro esclusione dal kernel. Sono stati eliminati componenti inutili di pulizia dei driver xhci-pci, rtl8xxxu e rtw8822b, precedentemente aggiunti per errore. È stata effettuata la pulizia dei nomi dei blob nei file dts per l'architettura Aarch64. Sono stati rimossi blob nei nuovi driver mt7925, tps6598x, aw87390 e aw88399.

Fonte: opennet.ru

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