Rilascio del kernel Linux 6.12 con supporto per la modalità Realtime

Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 6.12. Tra le modifiche più importanti: la possibilità di attivare la modalità Realtime, sched_ext per la creazione di pianificatori CPU tramite eBPF, visualizzazione di un codice QR in caso di stati di emergenza, meccanismo Device Memory TCP, meccanismo di prenotazione delle risorse SCHED_DEADLINE server, miglioramento del pianificatore dei compiti EEVDF, modulo IPE per l'impostazione delle politiche di integrità.

Nella nuova versione sono stati inclusi 14.607 correttivi da 2.167 sviluppatori, dimensione della patch – 37 MB (le modifiche hanno interessato 13.087 file, aggiunte 507.913 righe di codice, rimosse 234.083 righe). Nella passata release ci sono stati 15.130 correttivi da 2.078 sviluppatori, dimensione della patch – 85 MB (nella versione del kernel 6.10 la patch aveva una dimensione di 41 MB). Circa il 45% di tutte le modifiche presentate in 6.12 è legato ai driver di dispositivo, circa il 12% delle modifiche riguarda l'aggiornamento del codice specifico per le architetture hardware, il 13% è legato allo stack di rete, il 6% ai file system e il 3% ai sottosistemi interni del kernel.

Le principali novità del kernel 6.12:

  • Memoria e servizi di sistema
    • È stata fornita la possibilità di comporre il kernel con l'opzione PREEMPT_RT senza patch aggiuntive per funzionare in modalità tempo reale. L'ultima funzione mancante nel kernel, che impediva di attivare la modalità PREEMPT_RT, era il supporto per l'output atomico non bloccante tramite la funzione printk, che è stata inclusa nel kernel. Il supporto per PREEMPT_RT è disponibile per le architetture x86, x86_64, ARM64 e RISC-V. Fino ad ora, l'implementazione della modalità PREEMPT_RT veniva fornita sotto forma di patch esterne, sulla base delle quali alcune distribuzioni, come RHEL, SUSE e Ubuntu, creavano edizioni Realtime separate dei loro prodotti, molto richieste in settori come i sistemi finanziari, i dispositivi di elaborazione audio e video, l'aviazione, la medicina, la robotica, le telecomunicazioni e i sistemi industriali, dove è necessario garantire un tempo di elaborazione degli eventi prevedibile.
    • È stato aggiunto il meccanismo «sched_ext» (SCX), che consente di utilizzare eBPF per creare pianificatori CPU che coprono praticamente tutti gli aspetti della pianificazione dell'esecuzione delle attività e della distribuzione delle risorse CPU. Tali pianificatori possono essere caricati dinamicamente ed eseguiti all'interno del kernel Linux. macchina virtuale eBPF. Il meccanismo sched_ext semplifica la creazione di pianificatori specifici per compiti, consentendo di sperimentare diverse tecniche e strategie di pianificazione, oltre a permettere la rapida creazione di prototipi funzionanti e la sostituzione dei pianificatori al volo nelle infrastrutture operative. Ad esempio, con sched_ext è possibile sviluppare un pianificatore che tenga conto delle specificità di un'applicazione e modifichi dinamicamente la strategia di pianificazione in base allo stato del sistema e a ulteriori fattori.
    • La composizione include il resto delle patch necessarie per il funzionamento del meccanismo SCHED_DEADLINE server, risolvendo il problema della carenza di risorse CPU per i compiti normali, a causa della monopolizzazione della CPU da parte dei compiti ad alta priorità (realtime). Per prevenire la monopolizzazione della CPU, in passato nel kernel veniva utilizzato il meccanismo di Realtime throttling, che cercava di riservare il 5% per i compiti a bassa priorità, lasciando il 95% del tempo per i compiti realtime. Questo meccanismo aveva molte lacune, poiché i compiti normali in molte situazioni non ricevevano il tempo di CPU necessario. Il server SCHED_DEADLINE implementa un meccanismo di riservazione delle risorse più efficace.
    • È stata completata l'integrazione dello scheduler EEVDF (Earliest Eligible Virtual Deadline First), che sostituisce il CFS (Completely Fair Scheduler), fornito a partire dal kernel 2.6.23. Il nuovo scheduler, nel selezionare il prossimo processo da eseguire, tiene conto dei processi che non hanno ricevuto adeguate risorse di CPU o ne hanno ottenute troppa. Nel primo caso, il controllo viene forzato a passare al processo, mentre nel secondo viene invece ritardato. Il vecchio scheduler CFS si basava su euristiche e configurazioni fine per identificare i processi che necessitavano di attenzione particolare, mentre il nuovo scheduler li monitora in modo più esplicito e non richiede una configurazione fine. Si prevede che l'EEVDF permetterà di ridurre le latenze nell'esecuzione di compiti per i quali il CFS aveva problemi di scheduling.
    • Nel gestore delle situazioni di emergenza del kernel — DRM Panic, che utilizza il sottosistema DRM (Direct Rendering Manager) per visualizzare un resoconto in stile 'schermo blu della morte', è stata aggiunta la possibilità di mostrare sullo schermo il logo e un codice QR con il resoconto kmsg in caso di stato di emergenza. Poiché il codice QR può contenere solo 2953 byte, è prevista l'opzione DRM_PANIC_SCREEN_QR_CODE_URL, in cui il resoconto kmsg viene compresso tramite zlib e allegato come parametro all'URL, permettendo di trasferire circa 7500 byte tramite QR code V40. Durante la creazione dei pacchetti del kernel, le distribuzioni possono specificare un link di base per l'URL, consentendo di organizzare un collegamento a una pagina per inviare un report sul problema. Sono disponibili impostazioni per scegliere il formato del codice QR tramite DRM_PANIC_SCREEN_QR_VERSION.
    • È stato aggiunto il supporto per l'estensione ARM POE (Permission Overlay Extension), che consente di definire i diritti di accesso alle aree di memoria. Con questa estensione, sui sistemi con processori ARM64 può essere implementato un meccanismo chiamato Memory Protection Keys, utilizzato per limitare l'accesso alle pagine di memoria senza modificare la tabella delle pagine di memoria.
    • Per le architetture Loongarch, ARM64, PowerPC e s390 è stata trasferita l'implementazione della syscall getrandom(), ottimizzata tramite il meccanismo vDSO (virtual dynamic shared object), che consente di spostare il gestore della syscall dallo kernel allo spazio utente, evitando i cambi di contesto. Questa ottimizzazione permette di accelerare fino a 15 volte l'ottenimento di numeri casuali.
    • Nel sottosistema di input/output asincrono io_uring è stata aggiunta la possibilità di utilizzare timeout assoluti, che si attivano al raggiungimento di un determinato momento sugli orologi di sistema (in precedenza era possibile impostare solo timeout relativi, in cui veniva indicata la durata dall'inizio dell'operazione).
    • Sono stati aggiunti file per la generazione di binding per la libreria libcpupower utilizzando l'utility SWIG, che consente di creare binding da codice C/C++ per vari linguaggi di programmazione. I binding permettono di scrivere script in Python e in altri linguaggi, e di usarli per estendere la funzionalità della libreria libcpupower, che fornisce un'API per la gestione di cpufreq e driver dallo spazio utente.
    • Nell'utilità cpuidle è implementata la visualizzazione del valore dello stato di inattività "residency", utilizzato per i sistemi in tempo reale e che tiene conto del tempo minimo che il processore deve rimanere in uno stato di inattività per giustificare il consumo energetico associato al passaggio a questo stato e al suo ritorno.
    • È stata aggiunta la possibilità di utilizzare il compilatore Clang per la compilazione della libreria standard C nolibc, inclusa nei sorgenti del kernel Linux, che fornisce un'interfaccia per le chiamate di sistema di base. Durante la compilazione di nolibc con Clang è consentito l'uso dell'ottimizzazione durante la fase di linkaggio (LTO).
    • Sono stati dichiarati obsoleti alcuni interfacce cgroup1, come il monitoraggio TCP, la prima versione dei limiti morbidi (soft limit) e la gestione dell'esaurimento della memoria libera. Il supporto per queste funzionalità rimane attivo, mentre l'avviso è stato emesso per analizzare il numero di utenti che continuano a utilizzare queste capacità.
    • È stata aggiunta la possibilità di configurare un buffer circolare di tracciamento per mantenere i dati accumulati dopo un riavvio, evitando di perdere le informazioni di debug in caso di crash del kernel. I dati vengono conservati in memoria. L'attivazione avviene tramite il parametro della riga di comando del kernel trace_instance, ad esempio, impostare «trace_instance=boot_map@0x285400000:12M» riserverà 12 MB di memoria all'indirizzo 0x285400000 per il buffer «boot_map», accessibile tramite il file /sys/kernel/tracing/instances/boot_map.
    • Continuano i trasferimenti delle modifiche dal ramo Rust-for-Linux, riguardanti l'uso del linguaggio Rust come secondo linguaggio per lo sviluppo di driver e moduli del kernel (il supporto di Rust non è attivo per impostazione predefinita e non porta all'inclusione di Rust tra le dipendenze di build obbligatorie per il kernel). Sono stati aggiunti i moduli 'list' e 'rbtree' per lavorare con liste concatenate bidirezionali e alberi rossi-neri (red-black tree). Sono state ampliate le funzionalità dei moduli 'init', 'sync', 'types' ed 'error'. È stata fornita la possibilità di utilizzare il codice Rust durante la compilazione del kernel con protezione contro attacchi Spectre (opzioni MITIGATION_{RETHUNK, RETPOLINE, SLS}), utilizzando il sistema di debug KASAN, meccanismi di protezione kCFI (kernel Control Flow Integrity) e Shadow Call, così come durante l'uso di plugin aggiuntivi GCC. È stato aggiunto un driver per il controller Ethernet Applied Micro QT2025 PHY, scritto in Rust. È stato preparato un sito separato con documentazione — rust.docs.kernel.org.
    • Nel codice sorgente del kernel è stata aggiunta l'utilità xdrgen per trasformare le specifiche XDR (eXternal Data Representation) in funzioni di codifica e decodifica XDR, scritte utilizzando lo stile C adottato nel kernel Linux.
    • Nel kernel è stata accettata una modifica che implementa un meccanismo di masking dei puntatori per ridurre il numero di chiamate lente a barrier_nospec() nella funzione a 64 bit copy_from_user(), utilizzata per copiare dati nel kernel dallo spazio utente. L'applicazione del masking accelera del 2,6% il passaggio del test "per_thread_ops", che valuta il numero di operazioni che possono essere eseguite in un singolo thread.
    • Aggiunto un nuovo driver USB che consente di utilizzare il protocollo 9pfs come trasporto per inviare e ricevere dati da un dispositivo USB, montando il file system 9p sopra USB (ad esempio, "mount -t 9p -o trans=usbg,aname=/path/to/fs /mnt/9"). Un esempio di utilizzo del nuovo driver è la sua applicazione in sostituzione di NFS per organizzare il boot della partizione root durante lo sviluppo di dispositivi embedded.
  • Sottosistema disco, I/O e file system
    • Nel sottosistema VFS è stata aggiunta la possibilità di lavorare con dispositivi di archiviazione la cui dimensione dei blocchi è maggiore della dimensione della pagina di memoria del sistema. Nelle file system, questa funzionalità è attualmente supportata solo in XFS.
    • Nel sottosistema FUSE, che consente di creare implementazioni di file system che operano nello spazio utente, è stato aggiunto il supporto per il mapping degli identificatori utente dei file system montati, utilizzato per associare file di un determinato utente su una partizione remota con un altro utente nel sistema attuale.
    • È stata implementata una nuova operazione fcntl F_CREATED_QUERY, che consente all'applicazione di determinare se un file aperto utilizzando il flag O_CREAT è stato appena creato o esisteva già.
    • Alla chiamata di sistema name_to_handle_at() è stata aggiunta la possibilità di utilizzare identificatori unici a 64 bit per le point di mount, per evitare condizioni di corsa durante l'analisi di /proc/mountinfo.
    • La dimensione della struttura 'file' nel kernel è stata ridotta da 232 a 184 byte, il che permette di ridurre il consumo di memoria sui sistemi che lavorano attivamente con i file.
    • È vietato montare file system su punti di montaggio all'interno della gerarchia /proc, ad esempio, in /proc/PID/fd, in quanto potrebbe creare potenziali problemi di sicurezza.
    • Nel pseudo-FS NSFS (NameSpace FS), utilizzato per lavorare con gli spazi dei nomi, è stata implementata la fornitura di informazioni aggiuntive sugli spazi dei nomi dei punti di montaggio.
    • Nel file system EROFS (Extendable Read-Only File System), progettato per l'uso su partizioni disponibili in modalità di sola lettura, è stata aggiunta la supporto per il montaggio dei file system direttamente da immagini disco salvate come file.
    • In XFS sono stati aggiunti i nuovi comandi ioctl XFS_IOC_START_COMMIT e XFS_IOC_COMMIT_RANGE per lo scambio di contenuti tra due file.
    • In NFS è stato aggiunto il supporto per il protocollo 'LOCALIO', che consente di determinare se il client e un server NFS si trovano sulla stessa host, attivando le relative ottimizzazioni.
    • Nel file system Btrfs sono state proposte ottimizzazioni delle prestazioni, è stata effettuata una refactoring del codice, ridotto l'ambito di blocco degli estremi durante le operazioni di lettura, è proseguito il lavoro per la transizione all'utilizzo di volumi di pagine di memoria (page folios) e implementato il rilascio automatico della memoria per la struttura btrfs_path.
    • Nel file system Ext4 sono stati risolti errori legati all'allocazione dei blocchi, alla gestione degli extent, al meccanismo di «fast commit» e alla registrazione.
  • Virtualizzazione e sicurezza
    • È stato aggiunto il modulo LSM IPE (Integrity Policy Enforcement), sviluppato da Microsoft per estendere il sistema esistente di controllo degli accessi mandatory. Questo modulo consente di definire una politica di integrità generale per l'intero sistema, specificando quali operazioni sono ammissibili e come verificare l'autenticità dei componenti. Ad esempio, con IPE è possibile specificare quali file eseguibili possono essere avviati tenendo conto della verifica della loro corrispondenza con la versione di riferimento tramite hash crittografici forniti dal sistema dm-verity.
    • Durante la fase di compilazione del kernel, è stata fornita la possibilità di abilitare separatamente i metodi di protezione disponibili contro le diverse vulnerabilità della classe Spectre nel CPU. In Kconfig sono state proposte nuove opzioni: MITIGATE_MDS (protezione contro la vulnerabilità Microarchitectural Data Sampling), MITIGATE_TAA (protezione contro la vulnerabilità TSX Asynchronous Abort), MITIGATE_MMIO_STALE_DATA (protezione contro la vulnerabilità MMIO Stale Data), MITIGATE_L1TF (protezione contro la vulnerabilità L1 Terminal Fault), MITIGATE_RETBLEED (protezione contro la vulnerabilità Retbleed), MITIGATE_SPECTRE_V1, MITIGATE_SPECTRE_V2 (protezione contro le vulnerabilità Spectre), MITIGATE_SRBDS (protezione contro la vulnerabilità Special Register Buffer Data Sampling), MITIGATE_SSB (protezione contro la vulnerabilità Speculative Store Bypass).
    • È stato aggiunto il parametro della riga di comando proc_mem.force_override e un insieme di impostazioni di compilazione in Kconfig (PROC_MEM_FORCE_ALWAYS, PROC_MEM_FORCE_PTRACE e PROC_MEM_FORCE_NEVER) che consentono di vietare la modifica della memoria attraverso /proc/pid/mem.
    • Il sottosistema LSM (Linux security module) è stato convertito per utilizzare chiamate statiche, migliorando così la sicurezza e aumentando le prestazioni.
    • È stata fornita la possibilità di utilizzare i nuclei standard per l'architettura ARM64 in ambienti ospiti eseguiti su sistemi Android con hypervisor KVM modificato (protected KVM).
    • Nel modulo LSM di Landlock, che consente di limitare l'interazione di un gruppo di processi con l'ambiente esterno, è implementata la concettualizzazione dell'«IPC scoping» per limitare selettivamente l'interazione con ambienti sandbox utilizzando socket Unix e segnali. Ad esempio, è possibile vietare l'instaurazione di connessioni tramite socket Unix dall'ambiente sandbox a processi privi di isolamento, ma consentire connessioni a processi nella stessa area di scope.
    • Nel hypervisor KVM è stato aggiunto un flag nella CPUID per i sistemi guest, che segnala il supporto per le estensioni AVX10.1.
  • Sottosistema di rete
    • È stato aggiunto un meccanismo Device Memory TCP, che consente l'utilizzo di socket di rete per l'invio diretto dei contenuti della memoria dei dispositivi periferici su rete (modalità zero-copy) e il posizionamento diretto dei contenuti dei pacchetti di rete nell'area di memoria del dispositivo sul lato del ricevente. I dati trasferiti nei pacchetti vengono inviati dalla scheda di rete alla memoria del dispositivo periferico o dalla memoria del dispositivo alla scheda di rete direttamente, bypassando la CPU, mentre le intestazioni dei pacchetti vengono memorizzate nei normali buffer del kernel.
    • Ampiate le funzionalità di molti driver Ethernet e wireless. Ad esempio, nel driver Intel iwlwifi è stata aggiunta la supporto per il trasferimento delle operazioni RLC/SMPS al firmware; nel driver RealTek rtw89 sono state migliorate le prestazioni e aggiunto il supporto per i chip RTL8852BT/8852BE-VT (WiFi 6). Nel driver Ethernet microchip è stato introdotto il supporto per le specifiche IEEE 802.3bw (100BASE-T1) e IEEE 802.3bp, e migliorate le implementazioni delle Ethernet virtuali Microsoft vNIC e IBM veth. Sono stati aggiunti nuovi driver per i chip Ethernet Realtek RTL9054, RTL9068, RTL9072, RTL9075, RTL9068, RTL9071 e Microchip LAN8650/1 10BASE-T1S MAC-PHY.
    • In MPTCP (MultiPath TCP), un'estensione del protocollo TCP per la consegna simultanea di pacchetti TCP tramite più percorsi attraverso diverse interfacce di rete, è stato aumentato il numero di bit utilizzati per la pesatura della routing da 8 a 16 bit. È stata implementata la definizione del traffico che perde (blackhole) e la sospensione temporanea delle richieste di connessione con sistemi che portano alla perdita del traffico.
    • Per IPv6 è stato implementato il supporto per il flag «p» in PIO (Prefix Information Option), utilizzato negli annunci RA (IPv6 Router Advertisements) per selezionare il modello di distribuzione dei client tramite DHCPv6-PD (DHCPv6 Prefix Delegation, RFC9663) anziché l'assegnazione di indirizzi separati basati su prefissi, utilizzando SLAAC (Stateless Address Autoconfiguration). In IOAM6 di IPv6 è stato aggiunto il supporto per una nuova modalità di incapsulamento tunsrc, che consente di ottenere prestazioni superiori.
    • Aumentata la prestazione nel trattamento dei pacchetti di controllo IPsec.
    • Migliorata la prestazione del flush di grandi insiemi di regole nftables. È migliorato il supporto per il protocollo SCTP in nfnetlink_queue.
    • Nell'API ethtool è stato aggiunto il supporto per il binding di più schede di rete a un unico'interfaccia di rete.
  • Attrezzature
    • Nel driver AMDGPU continua il lavoro per implementare il supporto per GPU AMD RDNA4 («GFX12»). È stata aggiunta la possibilità di resettare singole code di lavoro senza azzerare lo stato dell'intero GPU.
    • È proseguito il lavoro sul driver drm (Direct Rendering Manager) Xe per GPU basate sull'architettura Intel Xe, utilizzate nelle schede grafiche Intel della famiglia Arc e nella grafica integrata, a partire dai processori Tiger Lake. La nuova versione include il supporto per GPU basate sulle microarchitetture Battlemage e Lunar Lake. È stato presentato il supporto per i modificatori CCS (Color Control Surface) Xe2 per la gestione delle configurazioni delle GPU integrate e dedicate.
    • Nel driver i915 è stata implementata la possibilità di output attraverso l'interfaccia HWMON o sysfs (attributo «fan1_input») per informazioni sulla velocità di rotazione della ventola. È stato dichiarato obsoleto il parametro «i915.modeset», si dovrebbe utilizzare il parametro «i915.nomodeset» anziché «i915.modeset=0».
    • Nel driver DRM msm (GPU Qualcomm Adreno) è stato aggiunto il supporto per le GPU A615, A306 e A621.
    • Nel driver Nouveau è stata effettuata una revisione e pulizia delle strutture interne.
    • Nel driver intel_pstate, che gestisce i parametri di consumo energetico (P-state) su sistemi con processori Intel, è stata aggiunta la supporto per sistemi ibridi con CPU asimmetriche (caratteristiche diverse), oltre al supporto per la gestione dell'energia dei processori basati sulle microarchitetture Granite Rapids e Sierra Forest. Nel driver intel_idle è stata aggiunta la supporto per la CPU Xeon Granite Rapids. Nel driver intel_rapl è stato garantito il riconoscimento dei processi AMD della famiglia 1Ah e dei processori Intel ArrowLake-U.
    • Continuano le modifiche per supportare l'ARM SoC Snapdragon X Elite, che utilizza la CPU Qualcomm Oryon a 12 core e la GPU Qualcomm Adreno. Il chip è destinato all'uso in laptop e PC, superando in molti test di performance i chip Apple M3 e Intel Core Ultra 155H.
    • Aggiunta la supporto per piattaforme ARM, SoC e dispositivi: Broadcom bcm2712 (Raspberry Pi 5), Renesas R9A09G057 (RZ/V2H), Qualcomm Snapdragon 414 (MSM8929), Lenovo ThinkPad T14s Gen 6, Lenovo A6000/A6010, Surface Laptop 7, Anbernic RG35XXSP, Firefly Core-PX30-JD4, Lunzn Fastrhino R68S, Aspeed Riser, AGX Orin, Rockchip Qnap-TS433, Huashan Pi, Meta Catalina, BeagleY-AI, NanoPi R2S Plus, ExynosAuto v920, SOPHGO SG2002, Qualcomm IPQ5332, LG G4 (h815), Cool Pi CM5 GenBook, Anbernic RG35XXSP, GameForce Ace, IBM P11, Kontron i.MX93 OSM-S, NanoPC-T6.
    • Aggiunta supporto per i pannelli Anbernic RG28XX, On Tat Industrial Company KD50G21-40NT-A1, Innolux G070ACE-LH3, Melfas lmfbx101117480, Densitron DMT028VGHMCMI-1D, Microchip AC40T08A, AOU B116XTN02.3, AUO B116XAN06.1, AOU B116XAT04.1, BOE TV101WUM-LL2, BOE NV140WUM-N41, BOE NV133WUM-N63, BOE NV116WHM-A4D, BOE NE140WUM-N6G, CMN N116BCA-EA2, CMN N116BCP-EA2, CSW MNB601LS1-4, Starry er88577.
    • Nella sottosistema audio aggiunto supporto per chip e codec RME Digiface USB, AMD ACP 7.1, Mediatek MT6367, MT8365, Realtek RTL1320, C-Media CM9825. I vecchi driver audio per ASoC Intel sono stati dichiarati obsoleti, e si consiglia di utilizzare i driver AVS. Molti miglioramenti sono stati apportati al driver SoundWire.

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