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ù significative: integrazione del filesystem Bcachefs, cessazione del supporto per l'architettura Itanium, possibilità di operare con le firmware GSP-R tramite Nouveau, supporto per la crittografia TLS in NVMe-TCP, possibilità di utilizzo delle 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 della gestione dell'accesso al namespace utente e di io_uring tramite AppArmor.

Nella nuova versione sono stati accettati 18405 correzioni da 2066 sviluppatori, la dimensione della patch è di 72 MB (le modifiche hanno interessato 13467 file, aggiunte 906147 righe di codice, rimosse 341048 righe). Nella precedente versione c'erano 15291 correzioni da 2058 sviluppatori, la dimensione della patch era di 39 MB. Circa il 45% di tutte le modifiche presentate nella 6.7 riguarda i driver dei dispositivi, circa il 14% delle modifiche è relativo all'aggiornamento del codice specifico per le architetture hardware, il 13% riguarda lo stack di rete, il 5% è relativo ai filesystem e il 3% alle sottosistemi interni del kernel.

Le principali novità nel kernel 6.7:

  • Sottosistema di disco, input/output e file system
    • Nel kernel è stato integrato il codice del filesystem Bcachefs, che tenta 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ù livelli dei dispositivi di archiviazione (uno strato inferiore con dati frequentemente utilizzati basato su SSD veloci e uno strato superiore con dati meno richiesti da hard disk), replica (RAID 1/10), caching, compressione trasparente dei dati (modalità LZ4, gzip e ZSTD), istantanee di stato (snapshot), verifica dell'integrità tramite checksum, possibilità di memorizzare codici di correzione degli errori di Reed-Solomon (RAID 5/6), memorizzazione delle informazioni in forma crittografata (utilizzando ChaCha20 e Poly1305). In termini di prestazioni, Bcachefs supera Btrfs e altri filesystem basati sul meccanismo Copy-on-Write e dimostra velocità di operazione paragonabile a Ext4 e XFS.
    • Nel file system Btrfs è stata introdotta una modalità semplificata di gestione delle quote, che consente di ottenere una maggiore prestazione monitorando gli extent solo nella sottodirectory in cui sono stati creati, semplificando notevolmente i calcoli e migliorando le prestazioni, ma non consente di considerare gli extent condivisi tra più sottodirectory.
    • In Btrfs è stata aggiunta una nuova struttura dati denominata «stripe tree», adatta per la mappatura logica degli extent in situazioni in cui la mappatura fisica non coincide su dispositivi diversi. La struttura è attualmente utilizzata nelle implementazioni RAID0 e RAID1 per dispositivi a blocchi zonati. In futuro, questa struttura sarà utilizzata anche in RAID di livello superiore, risolvendo così diversi problemi presenti nell'attuale implementazione.
    • Nel file system Ceph è stata implementata la supporto per la mappatura degli identificativi degli utenti dei file system montati, utilizzata per associare i file di un determinato utente su una partizione montata di un altro utente nel sistema corrente.
    • In efivarfs è stata aggiunta la possibilità di specificare uid e gid durante il montaggio per consentire la modifica delle variabili UEFI da parte di processi eseguiti senza privilegi di root.
    • In exFAT sono stati aggiunti i chiamate ioctl per la lettura e la modifica degli attributi del file system. È stata introdotta la gestione delle directory di dimensione zero.
    • In F2FS è stata implementata la possibilità di utilizzare blocchi di dimensione 16K.
    • Il meccanismo di automontaggio autofs è stato aggiornato per utilizzare una nuova API di montaggio delle partizioni.
    • In OverlayFS sono state proposte opzioni di montaggio «lowerdir+» e «datadir+». È stata aggiunta la supporto per il montaggio annidato di OverlayFS con xattrs.
    • In XFS è stata ottimizzata la carico sulla CPU nel codice di distribuzione dei blocchi in tempo reale. È stata garantita la possibilità di eseguire simultaneamente operazioni di lettura e FICLONE.
    • Il codice EXT2 è stato aggiornato per utilizzare i page folios.
  • Memoria e servizi di sistema
    • Il supporto per l'architettura ia64, utilizzata nei processori Intel Itanium, è stato interrotto, poiché le vendite sono state completamente fermate 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, gli interessi di Intel si sono spostati a favore dei processori x86-64, mentre Itanium è rimasto... servers HP Integrity, la cui ordinazione è stata interrotta tre anni fa. Il codice per il supporto di ia64 è stato rimosso dal kernel principalmente a causa della lunga assenza di supporto per questa piattaforma; tuttavia, Linus Torvalds ha espresso disponibilità a reinserire il supporto per ia64 nel kernel, ma solo se trovata una persona che dimostri una manutenzione adeguata di questa piattaforma al di fuori del kernel principale per almeno un anno.
    • È stato aggiunto un parametro della riga di comando del kernel "ia32_emulation" che consente di abilitare e disabilitare il supporto per l'emulazione della modalità a 32 bit durante il processo di avvio nei kernel compilati per l'architettura x86-64. Da un punto di vista pratico, il nuovo parametro consente di compilare il kernel con supporto per la compatibilità con applicazioni a 32 bit, ma disattiva questa modalità per impostazione predefinita per ridurre il vettore d'attacco al kernel, poiché l'API per garantire la compatibilità è meno testata rispetto alle interfacce principali del kernel.
    • È proseguito 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 rende Rust una delle dipendenze di compilazione obbligatorie del kernel). Nella nuova versione è stato effettuato il passaggio all'uso della versione Rust 1.73 e è stato proposto un insieme di binding per lavorare con i workqueues.
    • È stata fornita l'opzione 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 spazi dei nomi (namespace) non privilegiati.
    • Nel controllore cpuset di cgroup, che consente di gestire l'uso dei core CPU durante l'esecuzione di un'attività, è fornita una suddivisione in partizionamento locale e remoto (remote partition), che differiscono per il fatto che il cgroup genitore sia o meno una sezione radice corretta. In cpuset sono state inoltre aggiunte nuove impostazioni "cpuset.cpus.exclusive" e "cpuset.cpus.exclusive.effective" per il vincolo esclusivo ai CPU.
    • Nella sottosistema BPF è stata implementata la gestione delle eccezioni, trattate come un'uscita non pianificata dal programma BPF con possibilità di sviluppo sicuro dei frame dello stack. Inoltre, è consentito l'uso di puntatori kptr nei programmi BPF vincolati ai 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 (versione di getsockopt) e SOCKET_URING_OP_SETSOCKOPT (versione di setsockopt) e IORING_OP_READ_MULTISHOT (operazioni di lettura multiple che non si interrompono finché ci sono dati o finché il buffer non è pieno).
    • È stata aggiunta l'implementazione di code FIFO monodirezionali leggere, che richiedono un spin-lock solo per rimuovere dalla coda nel contesto del processo e non necessitano di spin-lock per l'aggiunta atomica alla coda in qualsiasi contesto.
    • È stato aggiunto un buffer circolare "objpool" con un'implementazione scalabile di una coda ad alta prestazione per l'allocazione e il ritorno di oggetti.
    • È stata aggiunta la parte iniziale delle modifiche per l'implementazione di una nuova API futex2, che si distingue per prestazioni superiori nei sistemi NUMA, supporta dimensioni diverse da 32 bit e può essere utilizzata al posto della chiamata di sistema multiplexata futex().
    • Per le architetture ARM32 e S390x è stata aggiunta la supporto per l'attuale set (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, destinata a proteggere da sovrascritture dell'indirizzo di ritorno dalla funzione in caso di overflow del buffer nello stack. L'essenza della protezione consiste nel memorizzare l'indirizzo di ritorno separato in uno "stack ombra" dopo aver trasferito il controllo alla funzione e nel recuperare tale indirizzo prima dell'uscita dalla funzione.
    • Nel meccanismo di fusione delle pagine di memoria identiche (KSM: Kernel Samepage Merging) è stata aggiunta una nuova modalità intelligente di scansione delle pagine di memoria, che monitora le pagine di scansione non riuscite e riduce l'intensità della loro scansione ripetuta. Per attivare la nuova modalità è stata aggiunta un'impostazione /sys/kernel/mm/ksm/smart_scan.
    • È stato aggiunto un nuovo comando ioctl PAGEMAP_SCAN, che utilizzato con userfaultfd(), consente di determinare le scritture in un intervallo di memoria specifico. Questa nuova funzionalità, ad esempio, può essere utilizzata nel sistema per salvare e ripristinare lo stato dei processi CRIU o nei sistemi anti-cheat per i giochi.
    • Nel sistema di build, in presenza del compilatore Clang, è attivata per default la compilazione di esempi d'uso del sottosistema perf, scritti come programmi BPF.
    • Eliminato il vecchio strato videobuf, utilizzato per gestire i frame buffer nel sottosistema multimediale e sostituito oltre 10 anni fa con la nuova implementazione videobuf2.
  • Virtualizzazione e sicurezza
    • Nel sottosistema fscrypt è stata aggiunta la possibilità di criptare i dati in blocchi di dimensioni inferiori alla dimensione del blocco nel file system. Ciò può essere necessario per sfruttare meccanismi di crittografia hardware che supportano solo blocchi piccoli (ad esempio, i controller UFS che supportano solo dimensioni di blocco 4096 possono essere utilizzati con file system che hanno dimensioni di blocco 16K).
    • Nel sottosistema ‘iommufd’, che consente di gestire le tabelle delle pagine di memoria I/O attraverso descrittori di file dallo spazio utente, è stata aggiunta la tracciabilità dei dati non ancora cancellati dalla cache (dirty) per le operazioni DMA, necessaria per identificare la memoria con dati non cancellati durante la migrazione dei processi.
    • Nel meccanismo Landlock, che consente di limitare l'interazione di un gruppo di processi con l'ambiente esterno, è stato aggiunto il supporto per la definizione delle regole di controllo dell'accesso ai socket TCP. Ad esempio, è possibile creare una regola che consente solo le connessioni 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 creare spazi dei nomi degli identificatori utente (user namespaces), consentendo di autorizzare selettivamente l'accesso a queste funzionalità solo a determinati processi.
    • È stata aggiunta l'API di attestazione macchine virtuali per confermare l'integrità dei processi durante il loro avvio.
    • Nei sistemi LoongArch è implementato il supporto per la virtualizzazione utilizzando l'hypervisor KVM.
    • Con l'utilizzo dell'hypervisor KVM nei sistemi RISC-V è stata aggiunta la supporto per l'estensione Smstateen, che blocca l'accesso della macchina virtuale ai registri della CPU non supportati esplicitamente dall'hypervisor. È stato anche aggiunto il supporto per l'utilizzo nelle macchine guest dell'estensione Zicond, che consente di utilizzare alcune operazioni aritmetiche condizionali.
    • Nei sistemi guest in esecuzione sotto KVM basati su architettura x86 è consentito l'utilizzo di un massimo di 4096 CPU virtuali.
  • Sottosistema di rete
    • Nel driver NVMe-TCP (NVMe over TCP), che consente l'accesso ai dispositivi NVMe su rete (NVM Express over Fabrics) utilizzando il protocollo TCP, è stato aggiunto il supporto per la crittografia del canale di trasmissione dati utilizzando TLS (utilizza KTLS e un processo in background nello spazio utente tlshd per stabilire la connessione).
    • È stata ottimizzata la performance dello scheduler dei pacchetti fq (Fair Queuing), permettendo di aumentare la capacità del 5% sotto carichi pesanti nel test tcp_rr (TCP Request/Response) e del 13% per flussi UDP non limitati.
    • Nel protocollo TCP è stata aggiunta la possibilità opzionale di utilizzare timestamp (TCP TS) con precisione al microsecondo (RFC 7323), il che consente di stimare con maggiore precisione i ritardi e di creare moduli di controllo del sovraccarico più avanzati. Per abilitare, si può utilizzare il comando «ip route add 10/8 … features tcp_usec_ts».
    • Nel stack TCP è stato aggiunto il supporto per l'estensione TCP-AO (TCP Authentication Option, RFC 5925), che consente di verificare gli header TCP tramite MAC (Message Authentication Code), utilizzando algoritmi più moderni come HMAC-SHA1 e CMAC-AES-128 invece dell'opzione precedente TCP-MD5 basata sull'ormai obsoleto 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.
    • Nel KSMBD, l'implementazione a livello kernel del server SMB, è stato aggiunto il supporto per la trasformazione dei nomi dei file contenenti coppie surrogato di caratteri compositi.
    • Nella NFS è stata migliorata l'implementazione dei flussi con i servizi RPC. È stato aggiunto il supporto per la delega della scrittura (per NFSv4.1+). Nel NFSD è stato aggiunto il supporto per l'handler netlink rpc_status. È stato migliorato il supporto per i client NFSv4.x durante la riesportazione in knfsd.
  • Apparecchiatura
    • Nel modulo del kernel Nouveau è stato aggiunto il supporto iniziale per i firmware GSP-RM, utilizzati nelle GPU NVIDIA RTX 20+ per esternalizzare le operazioni di inizializzazione e gestione della GPU a un microcontrollore GSP (GPU System Processor) separato. Il supporto GSP-RM consente al driver Nouveau di operare tramite chiamate al firmware, anziché programmare direttamente le operazioni di interazione con l'hardware, semplificando notevolmente l'aggiunta del supporto per nuove GPU NVIDIA grazie all'utilizzo 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 interruzioni (senza sfarfallio durante il cambio della modalità video).
    • Nel driver i915 è stato implementato il supporto per i chip Intel Meteor Lake e aggiunta l'implementazione iniziale di Intel LunarLake (Xe 2).
    • È stato aggiunto il supporto per 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).
    • È stato aggiunto il supporto per lo smartphone Fairphone 5 e le piattaforme ARM Orange Pi 5, QuartzPro64, Turing RK1, Variscite MX6, BigTreeTech CB1, Freescale LX2162, Google Spherion, Google Hayato, Genio 1200 EVK, RK3566 Powkiddy RGB30.
    • È stato aggiunto il supporto per le schede RISC-V Milk-V Pioneer e Milk-V Duo.
    • È stato aggiunto il supporto per le interfacce audio dei notebook HUAWEI equipaggiati con CPU AMD. È stato aggiunto il supporto per altoparlanti aggiuntivi montati sui notebook Dell Oasis 13/14/16. È stato aggiunto il supporto per gli altoparlanti integrati ASUS K6500ZC. È stato aggiunto il supporto per l'indicatore di disattivazione dell'audio sui notebook HP 255 G8 e G10. È stato aggiunto il supporto per i driver audio acp6.3. È stato aggiunto il supporto per le interfacce di registrazione audio professionali Focusrite Clarett+ 2Pre e 4Pre.

Nel frattempo, la Fondazione per il Software Libero Latinoamericano ha creato una versione completamente libera del kernel 6.7 — Linux-libre 6.7-gnu, ripulita da elementi di firmware e driver contenenti componenti o parti di codice non liberi, la cui area di utilizzo è 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. Il codice di pulizia dei driver localtalk e rtl8192u è stato rimosso poiché sono stati esclusi 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 hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster