Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 6.3. Tra le modifiche più significative: la pulizia delle piattaforme ARM obsolete e dei driver grafici, il proseguimento dell'integrazione del supporto per il linguaggio Rust, l'utilità hwnoise, il supporto per strutture ad albero red-black in BPF, la modalità BIG TCP per IPv4, un test di prestazione Dhrystone integrato, la possibilità di vietare l'esecuzione in memfd, il supporto per la creazione di driver HID utilizzando BPF, e in Btrfs sono state approvate modifiche per ridurre la frammentazione dei gruppi di blocchi.
Nella nuova versione sono stati inclusi 15637 correttivi da 2055 sviluppatori; la dimensione della patch è di 76 MB (le modifiche hanno interessato 14296 file, aggiunte 1023183 righe di codice, rimosse 883103 righe). A titolo di confronto, nella versione precedente erano stati proposti 16843 correttivi da 2178 sviluppatori; la dimensione della patch era di 62 MB. Circa il 39% di tutte le modifiche presentate nel kernel 6.3 riguarda i driver di dispositivo, circa il 15% delle modifiche è relativo all'aggiornamento del codice specifico per architetture hardware, il 10% riguarda lo stack di rete, il 5% riguarda i filesystem e il 3% le sotto-sistemi interni del kernel.
Principali novità nel kernel 6.3:
- Memoria e servizi di sistema
- È stata effettuata una significativa pulizia del codice legato alle vecchie e inutilizzate piattaforme ARM, consentendo così di ridurre le dimensioni del codice sorgente del kernel di 150 mila righe. Sono state rimosse oltre 40 piattaforme ARM obsolete.
- È stata implementata la possibilità di creare driver per dispositivi di input con interfaccia HID (Human Interface Device), implementati sotto forma di programmi BPF.
- È proseguito il porting dalla branch 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 per Rust non è attivo per default e non porta all'inclusione di Rust tra le dipendenze di compilazione obbligatorie per il kernel. Le funzionalità proposte nelle versioni precedenti sono state ampliate dal supporto per i tipi Arc (implementazione di puntatori con contatore di riferimenti), ScopeGuard (esegue la pulizia al di fuori del proprio ambito) e ForeignOwnable (permette di spostare puntatori tra codice C e Rust). Dal pacchetto 'alloc' è stato rimosso il modulo 'borrow' (tipo 'Cow' e tipo 'ToOwned'). Si segnala che lo stato di supporto per Rust nel kernel è già vicino al punto di iniziare ad accettare i primi moduli scritti in Rust.
- In User-mode Linux (esecuzione del kernel come processo utente) sui sistemi x86-64 è stata implementata la supporto per codice scritto in Rust. È stata aggiunta la supporto per la compilazione di User-mode Linux utilizzando clang con l'inclusione di ottimizzazioni nella fase di collegamento (LTO).
- È stata aggiunta l'utilità hwnoise per monitorare i ritardi causati dalle peculiarità del funzionamento dell'hardware. Vengono definite le deviazioni nel tempo di esecuzione delle operazioni (jitter) quando la gestione delle interruzioni è disabilitata, che superano un microsecondo ogni 10 minuti di calcolo.
- È stato aggiunto un modulo del kernel con l'implementazione del test di prestazioni Dhrystone, che può essere utilizzato per valutare le prestazioni della CPU in configurazioni senza componenti di spazio utente (ad esempio, nella fase di porting per nuovi SoC, dove è implementato solo il caricamento del kernel).
- È stato aggiunto il parametro della riga di comando del kernel "cgroup.memory=nobpf", che disabilita il monitoraggio dell'uso della memoria per i programmi BPF, il che può essere utile per i sistemi con contenitori isolati.
- Per i programmi BPF è stata proposta l'implementazione di una struttura dati ad albero rosso-nero, in cui vengono utilizzati kfunc + kptr (bpf_rbtree_add, bpf_rbtree_remove, bpf_rbtree_first) invece di aggiungere un nuovo tipo di mapping.
- Nel meccanismo delle sequenze riavviabili (rseq, restartable sequences) è stata aggiunta la possibilità di trasmettere ai processi gli identificatori di esecuzione parallela (memory-map concurrency ID), identificabili con il numero della CPU. Rseq fornisce mezzi per l'esecuzione atomica rapida delle operazioni, che vengono annullate in caso di interruzione da parte di un altro thread e viene tentata una nuova esecuzione.
- Sui processori ARM è assicurato il supporto per le istruzioni SME 2 (Scalable Matrix Extension).
- Per le architetture s390x e RISC-V RV64 è stata implementata la supporto per il meccanismo "BPF trampoline", che consente di minimizzare i costi per la trasmissione delle chiamate tra il kernel e i programmi BPF.
- Nei sistemi con processori basati sull'architettura RISC-V è stato realizzato l'uso delle istruzioni "ZBB" per accelerare le operazioni sulle stringhe.
- Per i sistemi basati sull'architettura del set di istruzioni LoongArch (utilizzata nei processori Loongson 3 5000 e che implementano un nuovo RISC ISA simile a MIPS e RISC-V) è stata realizzata la supporto per la randomizzazione dello spazio degli indirizzi del kernel (KASLR), per la modifica del posizionamento del kernel in memoria (relocation), per i punti di interruzione hardware e per il meccanismo kprobe.
- Nel meccanismo DAMOS (Schemi Operativi Basati sul Monitoraggio dell'Accesso ai Dati), che consente di liberare memoria tenendo conto della frequenza di accesso alla memoria, è stato implementato il supporto per i filtri per escludere dalla lavorazione in DAMOS determinate aree di memoria.
- Nella biblioteca C standard minimale Nolibc è stato implementato il supporto per l'architettura s390 e il set di istruzioni Arm Thumb1 (in aggiunta al supporto per ARM, AArch64, i386, x86_64, RISC-V e MIPS).
- È stata effettuata un'ottimizzazione di objtool per accelerare la compilazione del kernel e ridurre il picco di consumo di memoria durante la compilazione (durante la compilazione del kernel in modalità «allyesconfig» ora non si verificano problemi di terminazione forzata dei processi su sistemi con 32 GB di RAM).
- È stato interrotto il supporto per la compilazione del kernel con il compilatore Intel ICC, che era rimasto non funzionante per lungo tempo e nessuno aveva mostrato il desiderio di correggerlo.
- Sottosistema di disco, input/output e file system
- Nell'tmpfs è stato implementato il supporto per il mapping degli identificatori degli utenti dei filesystem montati, utilizzato per associare i file di un determinato utente su una partizione montata di un altro utente nel sistema attuale.
- In Btrfs, per ridurre la frammentazione dei gruppi di blocchi, è stato garantito il partizionamento degli extent in base alle dimensioni durante l'allocazione dei blocchi, ovvero qualsiasi gruppo di blocchi è ora limitato a extent piccoli (fino a 128 KB), medi (fino a 8 MB) e grandi. È stata effettuata una ristrutturazione dell'implementazione raid56. È stato rielaborato il codice per la verifica dei checksum. Sono state implementate ottimizzazioni delle prestazioni che hanno permesso di accelerare fino a 10 volte l'operazione send grazie alla memorizzazione nella cache dell'utime per le directory ed all'esecuzione dei comandi solo quando necessario. L'esecuzione delle operazioni fiemap è stata accelerata di tre volte saltando i controlli sui riferimenti inversi per i dati condivisi (snapshot). Le operazioni con i metadati sono state accelerate del 10% grazie all'ottimizzazione della ricerca delle chiavi nelle strutture b-tree.
- La performance del filesystem ext4 è stata aumentata grazie alla possibilità di eseguire simultaneamente operazioni di input/output diretto da più processi su blocchi pre-allocati, utilizzando blocchi inode condivisi invece di un blocco esclusivo.
- In f2fs è stato lavorato per migliorare la leggibilità del codice. Sono state risolte importanti problematiche legate alla scrittura atomica e al nuovo cache degli extent.
- Nel file system EROFS (Enhanced Read-Only File System), progettato per l'uso in partizioni accessibili in sola lettura, è stata implementata la possibilità di associare le operazioni di estrazione del contenuto compresso dei file alla CPU per ridurre i ritardi nell'accesso ai dati.
- Al pianificatore di input/output BFQ è stata aggiunta la supporto per i dischi rotativi avanzati, come quelli che utilizzano più attuatori di testina gestiti separatamente (Multi Actuator).
- Nell'implementazione del client e server NFS è stata aggiunta la supporto per la crittografia dei dati utilizzando l'algoritmo AES-SHA2.
- Nel sottosistema FUSE (Filesystems In User Space) è stata aggiunta la supporto per un meccanismo di estensione delle richieste, che consente di includere informazioni aggiuntive nella richiesta. Sulla base di questa possibilità, è stata implementata l'aggiunta di identificatori di gruppi alla richiesta del FS, necessari per tenere conto dei diritti di accesso durante la creazione di oggetti nel FS (create, mkdir, symlink, mknod).
- Virtualizzazione e sicurezza
- Nel hypervisor KVM per sistemi x86 è stata aggiunta la supporto per le chiamate ultraleggiate Hyper-V e il loro passaggio al gestore che opera nell'ambiente host nello spazio utente. Questa modifica ha consentito di implementare il supporto per l'esecuzione annidata di Hyper-V.
- In KVM è stata semplificata la limitazione dell'accesso del sistema ospite agli eventi PMU (Performance Monitor Unit) relativi alla misurazione delle prestazioni.
- Nel meccanismo memfd, che consente di identificare un'area di memoria tramite un descrittore di file passato tra processi, è stata aggiunta la possibilità di creare aree in cui l'esecuzione di codice è vietata (memfd non eseguibile) e non è possibile in futuro impostare i diritti di esecuzione.
- È stata aggiunta una nuova operazione prctl PR_SET_MDWE, che blocca i tentativi di attivare i diritti di accesso alla memoria che consentono contemporaneamente scrittura ed esecuzione.
- È stata aggiunta e attivata per impostazione predefinita una protezione contro gli attacchi di classe Spectre, implementata sulla base della modalità automatica IBRS (Enhanced Indirect Branch Restricted Speculation) proposta nei processori AMD Zen 4, che consente di autorizzare e vietare in modo adattivo l'esecuzione speculativa delle istruzioni durante la gestione di interruzioni, chiamate di sistema e cambiamenti di contesto. La protezione proposta comporta minori costi aggiuntivi rispetto alla protezione Retpoline.
- È stata rimossa una vulnerabilità che consentiva di eludere la protezione contro gli attacchi Spectre v2 quando si utilizzava la tecnologia di multithreading simultaneo (SMT o Hyper-Threading), causata dalla disattivazione del meccanismo STIBP (Single Thread Indirect Branch Predictors) nella scelta della modalità di protezione IBRS.
- Per i sistemi basati sull'architettura ARM64 è stato aggiunto un nuovo obiettivo di compilazione "virtconfig", che attiva solo un insieme minimo di componenti del kernel necessari per l'avvio nei sistemi di virtualizzazione.
- Per l'architettura m68k è stato aggiunto il supporto per la filtrazione delle chiamate di sistema tramite il meccanismo seccomp.
- È stato aggiunto il supporto ai dispositivi CRB TPM2 (Command Response Buffer) incorporati nei processori AMD Ryzen, basati sulla tecnologia Microsoft Pluton.
- Sottosistema di rete
- È stata aggiunta un'interfaccia netlink per configurare il sotto-livello di prevenzione delle collisioni PLCA (Physical Layer Collision Avoidance), definita nella specifica IEEE 802.3cg-2019 e utilizzata nelle reti Ethernet 802.3cg (10Base-T1S), ottimizzate per connettere dispositivi Internet of Things e sistemi industriali. L'uso del PLCA consente di aumentare le prestazioni nelle reti Ethernet a media condivisa.
- È stata interrotta la supporto per l'API "wireless extensions" per la gestione delle interfacce wireless WiFi 7 (802.11be), poiché questa API non copre tutte le impostazioni necessarie. Tentativi di utilizzo dell'API "wireless extensions", che continua a essere supportata come strato emulato, ora genereranno un avviso per la maggior parte dei dispositivi attuali.
- È stata preparata una documentazione dettagliata per l'API netlink (per gli sviluppatori del kernel e per gli sviluppatori di applicazioni nello spazio utente). È stato implementato uno strumento ynl-gen-c per generare codice in C basato sulle specifiche YAML del protocollo Netlink.
- Negli socket di rete è stato aggiunto il supporto per l'opzione IP_LOCAL_PORT_RANGE per semplificare la configurazione delle connessioni in uscita tramite traduttori di indirizzi senza utilizzare SNAT. Utilizzando uno Indirizzi IP su più host, IP_LOCAL_PORT_RANGE consente di utilizzare su ciascun host il proprio intervallo di porte di rete in uscita, mentre sul gateway si possono reindirizzare i pacchetti in base ai numeri di porta.
- Per MPTCP (MultiPath TCP) è stata implementata la possibilità di gestire flussi misti, nei quali vengono utilizzati protocolli IPv4 e IPv6. MPTCP è un'estensione del protocollo TCP per organizzare il funzionamento delle connessioni TCP, consentendo la consegna dei pacchetti simultaneamente su più percorsi attraverso diverse interfacce di rete collegate a diversi indirizzi IP.
- Per IPv4 è stata implementata la possibilità di utilizzare l'estensione BIG TCP, che consente di aumentare la dimensione massima del pacchetto TCP fino a 4 GB per ottimizzare il funzionamento delle reti interne ad alta velocità nei centri dati. Un simile incremento della dimensione del pacchetto, con una dimensione del campo di intestazione a 16 bit, viene ottenuto implementando pacchetti "jumbo", la cui dimensione nell'intestazione IP è impostata su 0, mentre la dimensione effettiva viene trasmessa in un campo separato a 32 bit in un'intestazione separata allegata.
- È stato aggiunto un nuovo parametro sysctl default_rps_mask, tramite il quale è possibile specificare la configurazione RPS (Receive Packet Steering) predefinita, responsabile della distribuzione dell'elaborazione del traffico in entrata tra i core CPU a livello di gestori di interruzioni.
- È stata interrotta la supporto per le discipline di gestione delle code per limitare il traffico CBQ (class-based queuing), ATM (circuiti virtuali ATM), dsmark (marker di servizi differenziati), tcindex (indice di controllo del traffico) e RSVP (protocollo di prenotazione delle risorse). Queste discipline sono state trascurate per lungo tempo e non ci sono stati aspiranti per continuare il loro supporto.
- Apparecchiatura
- Sono stati rimossi tutti i driver grafici basati su DRI1: i810 (vecchie schede video 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 (GPU Crusty SiS), tdfx (3dfx Voodoo) e via (VIA IGP), che erano stati dichiarati obsoleti nel 2016 e non sono stati supportati in Mesa dal 2012.
- Sono stati rimossi i driver obsoleti del frame buffer (fbdev) omap1, s3c2410, tmiofb e w100fb.
- È stato aggiunto il driver DRM per le unità VPU (Versatile Processing Unit) integrate nei CPU Intel Meteor Lake (14a generazione), progettate per accelerare operazioni relative alla visione artificiale e all'apprendimento automatico. Il driver è stato implementato utilizzando il sottosistema "accel", mirato a fornire supporto agli acceleratori di calcolo, che possono essere forniti sia come ASIC separati che come blocchi IP all'interno di SoC e GPU.
- Nel driver i915 (Intel) è stato esteso il supporto per le schede grafiche discrete Intel Arc (DG2/Alchemist), è stato implementato il supporto preliminare per la GPU Meteor Lake e inclusa la compatibilità con la GPU Intel Xe HP 4tile.
- Nel driver amdgpu è stata aggiunta la supporto per la tecnologia AdaptiveSync e la possibilità di utilizzare più display in modalità di protezione dei dati visualizzati sullo schermo (Secure Display). Aggiornato il supporto per DCN 3.2 (Display Core Next), SR-IOV RAS, VCN RAS, SMU 13.x e DP 2.1.
- Nel driver msm (GPU Qualcomm Adreno) è stato aggiunto il supporto per le piattaforme SM8350, SM8450, SM8550, SDM845 e SC8280XP.
- Nel driver Nouveau è stato interrotto il supporto per le vecchie chiamate ioctl.
- Nel driver etnaviv è stato aggiunto il supporto sperimentale per NPU VerSilicon (VeriSilicon Neural Network Processor).
- È stato implementato il driver pata_parport per i dispositivi IDE collegati tramite porta parallela. Il driver aggiunto ha permesso di rimuovere dal kernel il vecchio driver PARIDE e modernizzare il sottosistema ATA. Una limitazione del nuovo driver è l'impossibilità di collegare contemporaneamente una stampante e un disco tramite porta parallela.
- È stato aggiunto il driver ath12k per schede wireless basate su chip Qualcomm con supporto Wi-Fi 7. È stato aggiunto il supporto per schede wireless basate su chip RealTek RTL8188EU.
- È stata aggiunta la supporto per 46 schede con processori basati sull'architettura ARM64, tra cui 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/AM68/AM69).
Allo stesso tempo, il Fondo latinoamericano del software libero ha creato una versione completamente libera del kernel 6.3 — Linux-libre 6.3-gnu, liberato da elementi di firmware e driver contenenti componenti non liberi o porzioni di codice il cui utilizzo è limitato dal produttore. Nella release 6.3 è stata effettuata una pulizia dei blob nei nuovi driver ath12k, aw88395 e peb2466, e nei nuovi file devicetree per dispositivi qcom basati sull'architettura AArch64. È stato aggiornato il codice di pulizia dei blob nei driver e nelle sottosistemi amdgpu, xhci-rcar, qcom-q6v5-pas, sp8870, av7110, e anche nei driver per schede DVB con decodifica software e nei file BPF precompilati. È stata interrotta la pulizia nei driver mga, r128, tm6000, cpia2 e r8188eu, in quanto sono stati rimossi dal kernel. È stata migliorata la pulizia dai blob del driver i915.
Fonte: opennet.ru
