Rilascio del kernel Linux 6.3

Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 6.3. Alcune delle modifiche più importanti includono: pulizia delle piattaforme ARM e dei driver grafici legacy, integrazione continua del supporto del linguaggio Rust, utility hwnoise, supporto per strutture ad albero rosso-nero in BPF, modalità BIG TCP per IPv4, benchmark Dhrystone integrato, capacità per disabilitare l'esecuzione in memfd, supportare la creazione di driver HID utilizzando BPF, sono state apportate modifiche a Btrfs per ridurre la frammentazione dei gruppi di blocchi.

La nuova versione include 15637 correzioni da 2055 sviluppatori; dimensione della patch: 76 MB (le modifiche hanno interessato 14296 file, sono state aggiunte 1023183 righe di codice, 883103 righe sono state eliminate). In confronto, la versione precedente offriva 16843 correzioni da 2178 sviluppatori; la dimensione della patch è 62 MB. Circa il 39% di tutte le modifiche introdotte nel kernel 6.3 sono legate ai driver di dispositivo, circa il 15% delle modifiche sono legate all'aggiornamento del codice specifico per le architetture hardware, il 10% sono legate allo stack di rete, il 5% sono legate ai file system e Il 3% è legato ai sottosistemi interni del kernel.

Principali innovazioni nel kernel 6.3:

  • Servizi di memoria e di sistema
    • È stata effettuata una significativa pulizia del codice associato alle schede ARM vecchie e inutilizzate, che ha permesso di ridurre la dimensione del codice sorgente del kernel di 150mila righe. Più di 40 vecchie piattaforme ARM sono state rimosse.
    • È stata implementata la possibilità di creare driver per dispositivi di input con interfaccia HID (Human Interface Device), implementati sotto forma di programmi BPF.
    • È continuato il trasferimento dal ramo Rust-for-Linux di funzionalità aggiuntive relative all'uso del linguaggio Rust come secondo linguaggio per lo sviluppo di driver e moduli del kernel. Il supporto Rust non è abilitato per impostazione predefinita e non comporta l'inclusione di Rust come dipendenza richiesta per la compilazione del kernel. La funzionalità offerta nelle versioni precedenti è stata ampliata per supportare i tipi Arc (implementazione di puntatori con conteggio dei riferimenti), ScopeGuard (pulizia quando si esce dall'ambito) e ForeignOwnable (fornisce il movimento dei puntatori tra il codice C e Rust). Il modulo 'borrow' (tipo 'Cow' e tratto 'ToOwned') è stato rimosso dal pacchetto 'alloc'. Va notato che lo stato del supporto Rust nel kernel è già vicino all'inizio dell'accettazione dei primi moduli scritti in Rust nel kernel.
    • Linux in modalità utente (che esegue il kernel come processo utente) sui sistemi x86-64 implementa il supporto per il codice scritto nel linguaggio Rust. Aggiunto il supporto per la creazione di Linux in modalità utente utilizzando clang con ottimizzazioni del tempo di collegamento (LTO) abilitate.
    • Aggiunta l'utilità hwnoise per tenere traccia dei ritardi causati dall'hardware. Le deviazioni nel tempo di esecuzione delle operazioni (jitter) vengono determinate quando l'elaborazione degli interrupt è disabilitata, superando un microsecondo ogni 10 minuti di calcoli.
    • Aggiunto un modulo kernel che implementa il benchmark Dhrystone, che può essere utilizzato per valutare le prestazioni della CPU in configurazioni senza componenti user-space (ad esempio, in fase di porting per nuovi SoC che implementano solo il caricamento del kernel).
    • Aggiunto il parametro della riga di comando del kernel "cgroup.memory=nobpf", che disabilita la contabilizzazione del consumo di memoria per i programmi BPF, che può essere utile per i sistemi con contenitori isolati.
    • Per i programmi BPF viene proposta un'implementazione della struttura dati ad albero rosso-nero, che utilizza kfunc + kptr (bpf_rbtree_add, bpf_rbtree_remove, bpf_rbtree_first) invece di aggiungere un nuovo tipo di mappatura.
    • Il meccanismo delle sequenze riavviabili (rseq, restartable sequences) ha aggiunto la possibilità di trasferire identificatori di esecuzione parallela (ID di concorrenza della mappa di memoria) ai processi, identificati con il numero di CPU. Rseq fornisce un mezzo per eseguire rapidamente operazioni in modo atomico che, se interrotte da un altro thread, vengono ripulite e tentate nuovamente.
    • I processori ARM supportano le istruzioni SME 2 (Scalable Matrix Extension).
    • Per le architetture s390x e RISC-V RV64 è stato implementato il supporto al meccanismo “BPF trampoline” che consente di ridurre al minimo l'overhead durante il trasferimento delle chiamate tra il kernel e i programmi BPF.
    • Sui sistemi con processori basati sull'architettura RISC-V è implementato l'utilizzo delle istruzioni “ZBB” per velocizzare le operazioni sulle stringhe.
    • Per i sistemi basati sull'architettura del set di istruzioni LoongArch (utilizzata nei processori Loongson 3 5000 e che implementa il nuovo RISC ISA, simile a MIPS e RISC-V), supporto per la randomizzazione dello spazio degli indirizzi del kernel (KASLR), modifiche nel posizionamento della memoria del kernel (rilocazione ), nei punti hardware è implementato il meccanismo di arresto e kprobe.
    • Il meccanismo DAMOS (Data Access Monitoring-based Operation Schemes), che consente di liberare memoria in base alla frequenza di accesso alla memoria, supporta filtri per escludere determinate aree di memoria dall'elaborazione in DAMOS.
    • La libreria C standard minima Nolibc fornisce il supporto per l'architettura s390 e il set di istruzioni Arm Thumb1 (oltre al supporto per ARM, AArch64, i386, x86_64, RISC-V e MIPS).
    • Objtool è stato ottimizzato per velocizzare l'assemblaggio del kernel e ridurre i picchi di consumo di memoria durante l'assemblaggio (quando si compila il kernel in modalità “allyesconfig”, ora non ci sono problemi con la terminazione forzata dei processi su sistemi con 32 GB di RAM).
    • È stato interrotto il supporto per l'assemblaggio del kernel da parte del compilatore Intel ICC, che era inoperante da molto tempo e nessuno ha espresso il desiderio di risolverlo.
  • Sottosistema disco, I/O e file system
    • tmpfs implementa il supporto per la mappatura degli ID utente dei file system montati, utilizzato per abbinare i file di un utente specifico su una partizione esterna montata con un altro utente sul sistema corrente.
    • In Btrfs, per ridurre la frammentazione di gruppi di blocchi, le estensioni vengono divise per dimensione durante l'allocazione dei blocchi, ad es. qualsiasi gruppo di blocchi è ora limitato a estensioni piccole (fino a 128 KB), medie (fino a 8 MB) e grandi. L'implementazione raid56 è stata rifattorizzata. Il codice per il controllo dei checksum è stato rielaborato. Sono state apportate ottimizzazioni delle prestazioni per velocizzare l'operazione di invio fino a 10 volte memorizzando nella cache utime per le directory ed eseguendo i comandi solo quando necessario. Le operazioni di Fiemap sono ora tre volte più veloci poiché saltano i controlli di backlink per i dati condivisi (snapshot). Le operazioni con i metadati sono state accelerate del 10% ottimizzando la ricerca delle chiavi nelle strutture b-tree.
    • Le prestazioni del file system ext4 sono state migliorate consentendo a più processi di eseguire simultaneamente operazioni di I/O dirette su blocchi pre-allocati utilizzando blocchi di inode condivisi anziché blocchi esclusivi.
    • In f2fs è stato svolto del lavoro per migliorare la leggibilità del codice. Risolti problemi importanti relativi alle scritture atomiche e alla nuova cache di estensione.
    • Il file system EROFS (Enhanced Read-Only File System), progettato per l'uso in partizioni di sola lettura, implementa la capacità di associare operazioni di decompressione del contenuto dei file compressi alla CPU per ridurre la latenza durante l'accesso ai dati.
    • Lo scheduler I/O BFQ ha aggiunto il supporto per unità disco rotanti avanzate, come quelle che utilizzano più unità testine controllate separatamente (Multi Attuatori).
    • Il supporto per la crittografia dei dati utilizzando l'algoritmo AES-SHA2 è stato aggiunto all'implementazione del client e del server NFS.
    • Il supporto per il meccanismo di espansione delle query è stato aggiunto al sottosistema FUSE (Filesystems In User Space), consentendo di inserire informazioni aggiuntive nella query. Sulla base di questa funzionalità, è possibile aggiungere identificatori di gruppo alla richiesta FS, necessari per tenere conto dei diritti di accesso durante la creazione di oggetti nel FS (create, mkdir, symlink, mknod).
  • Virtualizzazione e sicurezza
    • L'hypervisor KVM per i sistemi x86 ha aggiunto il supporto per le hypercall estese Hyper-V e ne ha fornito l'inoltro a un gestore in esecuzione nell'ambiente host nello spazio utente. La modifica ha consentito di implementare il supporto per il lancio annidato dell'hypervisor Hyper-V.
    • KVM semplifica la limitazione dell'accesso ospite agli eventi PMU (Performance Monitor Unit) relativi alla misurazione delle prestazioni.
    • Al meccanismo memfd, che permette di identificare un'area di memoria attraverso un descrittore di file trasferito tra processi, ha aggiunto la possibilità di creare aree in cui è vietata l'esecuzione di codice (memfd non eseguibile) ed è impossibile impostare diritti di esecuzione in futuro .
    • È stata aggiunta una nuova operazione prctl PR_SET_MDWE che blocca i tentativi di abilitare i diritti di accesso alla memoria che consentono contemporaneamente la scrittura e l'esecuzione.
    • La protezione contro gli attacchi di classe Spectre è stata aggiunta e abilitata per impostazione predefinita, basata sulla modalità automatica IBRS (Enhanced Indirect Branch Restricted Speculation) proposta nei processori AMD Zen 4, che consente in modo adattivo di consentire e disabilitare l'esecuzione speculativa di istruzioni durante l'elaborazione di interruzioni, chiamate di sistema e cambi di contesto. La protezione proposta comporta un sovraccarico inferiore rispetto alla protezione Retpoline.
    • Risolta una vulnerabilità che consente di aggirare la protezione contro gli attacchi Spectre v2 quando si utilizza la tecnologia multi-threading simultaneo (SMT o Hyper-Threading) e causata dalla disabilitazione del meccanismo STIBP (Single Thread Indirect Branch Predictors) quando si seleziona la modalità di protezione IBRS.
    • Per i sistemi basati sull'architettura ARM64, è stata aggiunta una nuova destinazione assembly "virtconfig", quando selezionato viene attivato solo il set minimo di componenti del kernel richiesti per l'avvio nei sistemi di virtualizzazione.
    • Per l'architettura m68k è stato aggiunto il supporto per il filtraggio delle chiamate di sistema utilizzando il meccanismo seccomp.
    • Aggiunto il supporto per i dispositivi CRB TPM2 (Command Response Buffer) integrati nei processori AMD Ryzen, basati sulla tecnologia Microsoft Pluton.
  • Sottosistema di rete
    • È stata aggiunta un'interfaccia netlink per configurare il sottolivello PLCA (Physical Layer Collision Evitare), definito nella specifica IEEE 802.3cg-2019 e utilizzato nelle reti Ethernet 802.3cg (10Base-T1S) ottimizzate per la connessione di dispositivi Internet of Things e sistemi industriali. L'uso di PLCA migliora le prestazioni nelle reti Ethernet con supporti condivisi.
    • Il supporto per l'API "estensioni wireless" per la gestione delle interfacce wireless WiFi 7 (802.11be) è stato interrotto poiché questa API non copre tutte le impostazioni necessarie. Quando si tenta di utilizzare l'API "estensioni wireless", che continua a essere supportata come livello emulato, verrà ora visualizzato un avviso per la maggior parte dei dispositivi attuali.
    • È stata preparata una documentazione dettagliata sull'API netlink (per gli sviluppatori principali e per gli sviluppatori di applicazioni nello spazio utente). L'utility ynl-gen-c è stata implementata per generare codice C basato sulle specifiche YAML del protocollo Netlink.
    • È stato aggiunto il supporto per l'opzione IP_LOCAL_PORT_RANGE ai socket di rete per semplificare la configurazione delle connessioni in uscita tramite traduttori di indirizzi senza utilizzare SNAT. Quando si utilizza un indirizzo IP su più host, IP_LOCAL_PORT_RANGE rende possibile utilizzare un intervallo diverso di porte di rete in uscita su ciascun host e inoltrare pacchetti in base ai numeri di porta sul gateway.
    • Per MPTCP (MultiPath TCP), è stata implementata la capacità di elaborare flussi misti utilizzando i protocolli IPv4 e IPv6. MPTCP è un'estensione del protocollo TCP per organizzare il funzionamento di una connessione TCP con la consegna di pacchetti contemporaneamente lungo più percorsi attraverso diverse interfacce di rete associate a diversi indirizzi IP.
    • Per IPv4 è possibile utilizzare l'estensione BIG TCP, che consente di aumentare la dimensione massima del pacchetto TCP a 4 GB per ottimizzare il funzionamento delle reti interne dei data center ad alta velocità. Un aumento simile nella dimensione del pacchetto con una dimensione del campo di intestazione a 16 bit si ottiene attraverso l'implementazione di pacchetti "jumbo", la cui dimensione nell'intestazione IP è impostata su 0 e la dimensione effettiva viene trasmessa in un pacchetto separato a 32 bit. campo in un'intestazione allegata separata.
    • È stato aggiunto un nuovo parametro sysctl default_rps_mask, attraverso il quale è possibile impostare la configurazione RPS (Receive Packet Steering) predefinita, che è responsabile della distribuzione dell'elaborazione del traffico in entrata tra i core della CPU a livello del gestore degli interrupt.
    • Il supporto per le discipline di elaborazione delle code per limitare il traffico CBQ (accodamento basato su classi), ATM (circuiti virtuali ATM), dsmark (marcatore di servizio differenziato), tcindex (indice di controllo del traffico) e RSVP (protocollo di prenotazione delle risorse). Queste discipline sono state abbandonate per molto tempo e non c'era nessuno disposto a continuare a sostenerle.
  • Attrezzatura
    • Rimossi tutti i driver grafici basati su DRI1: i810 (vecchie schede grafiche integrate Intel 8xx), mga (GPU Matrox), r128 (GPU ATI Rage 128, incluse le schede Rage Fury, XPERT 99 e XPERT 128), savage (GPU S3 Savage), sis (Crusty SiS GPU), tdfx (3dfx Voodoo) e via (VIA IGP), che sono stati deprecati nel 2016 e non sono supportati in Mesa dal 2012.
    • Rimossi i driver legacy framebuffer (fbdev) omap1, s3c2410, tmiofb e w100fb.
    • È stato aggiunto un driver DRM per le unità VPU (Versatile Processing Unit) integrate nella CPU Intel Meteor Lake (14a generazione), progettato per velocizzare le operazioni legate alla visione artificiale e al machine learning. Il driver è implementato utilizzando il sottosistema “accel”, volto a fornire supporto agli acceleratori computazionali, che possono essere forniti sia sotto forma di singoli ASIC che come blocchi IP all'interno del SoC e della GPU.
    • Il driver i915 (Intel) espande il supporto per le schede grafiche discrete Intel Arc (DG2/Alchemist), fornisce il supporto preliminare per le GPU Meteor Lake e include il supporto per le GPU Intel Xe HP 4tile.
    • Il driver amdgpu aggiunge il supporto per la tecnologia AdaptiveSync e la possibilità di utilizzare la modalità Visualizzazione protetta con più display. Supporto aggiornato per DCN 3.2 (Display Core Next), SR-IOV RAS, VCN RAS, SMU 13.x e DP 2.1.
    • Il driver msm (GPU Qualcomm Adreno) ha aggiunto il supporto per le piattaforme SM8350, SM8450 SM8550, SDM845 e SC8280XP.
    • Il driver Nouveau non supporta più le vecchie chiamate ioctl.
    • Il supporto sperimentale per NPU VerSilicon (VeriSilicon Neural Network Processor) è stato aggiunto al driver etnaviv.
    • Il driver pata_parport è stato implementato per le unità IDE collegate tramite una porta parallela. Il driver aggiunto ci ha permesso di rimuovere il vecchio driver PARIDE dal kernel e modernizzare il sottosistema ATA. Una limitazione del nuovo driver è l'impossibilità di connettere contemporaneamente una stampante e un disco tramite la porta parallela.
    • Aggiunto driver ath12k per schede wireless su chip Qualcomm che supportano Wi-Fi 7. Aggiunto supporto per schede wireless su chip RealTek RTL8188EU.
    • Aggiunto supporto per 46 schede con processori basati sull'architettura ARM64, inclusi Samsung Galaxy tab A (2015), Samsung Galaxy S5, BananaPi R3, Debix Model A, EmbedFire LubanCat 1/2, Facebook Greatlakes, Orange Pi R1 Plus, Tesla FSD e anche dispositivi basati su SoC Qualcomm MSM8953 (Snapdragon 610), SM8550 (Snapdragon 8 Gen 2), SDM450 e SDM632, Rockchips RK3128 TV box, RV1126 Vision, RK3588, RK3568, RK3566, RK3588 e RK3328, TI K3 (AM642/AM654 68 / AM69/AMXNUMX).

Allo stesso tempo, la Latin American Free Software Foundation ha formato una versione del kernel 6.3 completamente libera - Linux-libre 6.3-gnu, priva di elementi di firmware e driver contenenti componenti o sezioni di codice non libere, il cui scopo è limitato dal produttore. Nella versione 6.3, i blob sono stati ripuliti nei nuovi driver ath12k, aw88395 e peb2466, nonché nei nuovi file devicetree per i dispositivi qcom basati sull'architettura AArch64. Aggiornato il codice di pulizia blob nei driver e sottosistemi amdgpu, xhci-rcar, qcom-q6v5-pas, sp8870, av7110, nonché nei driver per schede DVB con decodifica software e nei file BPF precompilati. La pulizia dei driver mga, r128, tm6000, cpia2 e r8188eu è stata interrotta poiché sono stati rimossi dal kernel. Migliorata la pulizia dei blob dei driver i915.

Fonte: opennet.ru

Aggiungi un commento