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ù significative: la possibilità di attivare la modalità Realtime, sched_ext per la creazione di scheduler CPU tramite eBPF, output del codice QR in caso di stati di emergenza, meccanismo Device Memory TCP, meccanismo di riservazione delle risorse SCHED_DEADLINE server, miglioramento dello scheduler di attività EEVDF, modulo IPE per la definizione di politiche di integrità.

Nella nuova versione sono state apportate 14607 correzioni da 2167 sviluppatori, la dimensione della patch è di 37 MB (le modifiche hanno interessato 13087 file, aggiunte 507913 righe di codice, rimosse 234083 righe). Nella precedente versione ci sono state 15130 correzioni da 2078 sviluppatori, la dimensione della patch era di 85 MB (nel kernel 6.10 la patch aveva una dimensione di 41 MB). Circa il 45% di tutte le modifiche presentate in 6.12 riguarda i driver di dispositivo, circa il 12% delle modifiche è relativo all'aggiornamento del codice specifico per architetture hardware, il 13% riguarda lo stack di rete, il 6% con i file system e il 3% con i sottosistemi interni del kernel.

Le principali novità nel kernel 6.12:

  • Memoria e servizi di sistema
    • È stata data la possibilità di costruire il kernel con l'opzione PREEMPT_RT senza patch aggiuntive per lavorare in modalità tempo reale. L'ultima funzionalità 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 anch'essa accettata nel kernel. Il supporto per PREEMPT_RT è disponibile per le architetture x86, x86_64, ARM64 e RISC-V. Finora, l'implementazione della modalità PREEMPT_RT è stata fornita sotto forma di patch esterne, su cui alcune distribuzioni, come RHEL, SUSE e Ubuntu, hanno creato edizioni Realtime separate dei loro prodotti, 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, in cui è necessario garantire un tempo di elaborazione degli eventi prevedibile.
    • È stato aggiunto il meccanismo "sched_ext" (SCX), che consente di utilizzare eBPF per creare scheduler CPU, coprendo praticamente tutti gli aspetti della programmazione dell'esecuzione delle attività e della distribuzione delle risorse CPU. Questi scheduler possono essere caricati dinamicamente e eseguiti all'interno del kernel Linux. macchina virtuale eBPF. Il meccanismo sched_ext semplifica la creazione di pianificatori specifici per compiti particolari, consente di sperimentare diverse tecniche e strategie di pianificazione, e permette di creare rapidamente prototipi funzionali e sostituire i pianificatori al volo nelle infrastrutture di lavoro. Ad esempio, utilizzando sched_ext, è possibile creare un pianificatore che tenga conto delle specificità di una determinata applicazione e cambi dinamicamente la strategia di pianificazione in base allo stato del sistema e ad alcuni fattori aggiuntivi.
    • Il pacchetto include il resto delle patch necessarie per il funzionamento del meccanismo SCHED_DEADLINE server, che risolve il problema della scarsa disponibilità di risorse CPU per i compiti normali a causa della monopolizzazione della CPU da parte di compiti ad alta priorità (realtime). Per prevenire la monopolizzazione della CPU, in precedenza nel kernel veniva utilizzato il meccanismo Realtime throttling, che cercava di riservare il 5% per i compiti a bassa priorità, lasciando il 95% del tempo ai compiti realtime. Questo meccanismo ha lasciato a desiderare, poiché molte volte i compiti normali non ricevevano tempo CPU sufficiente. Il server SCHED_DEADLINE implementa un meccanismo di riservazione delle risorse più efficace.
    • È stata completata l'integrazione del pianificatore di compiti EEVDF (Earliest Eligible Virtual Deadline First), che ha sostituito il pianificatore CFS (Completely Fair Scheduler), in uso a partire dal kernel 2.6.23. Il nuovo pianificatore, nella scelta del prossimo processo da eseguire, considera i processi che non hanno ricevuto risorse CPU o che hanno ottenuto ingiustamente troppo tempo CPU. Nel primo caso, si forza il passaggio di controllo a un processo, mentre nel secondo, si rinvia. Il vecchio pianificatore CFS utilizzava euristiche e regolazioni precise per identificare i processi che richiedevano attenzione speciale, mentre il nuovo pianificatore li monitora in modo più esplicito e non richiede regolazioni dettagliate. Si prevede che EEVDF riduca i ritardi nell'esecuzione dei compiti, che con CFS hanno incontrato problemi di pianificazione.
    • Nel gestore delle situazioni di emergenza del kernel — DRM Panic, che utilizza il sottosistema DRM (Direct Rendering Manager) per visualizzare un rapporto dettagliato in stile 'schermo blu della morte', è stata aggiunta la possibilità di mostrare sullo schermo un logo e un codice QR con il rapporto 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, tramite la quale il rapporto kmsg viene compresso utilizzando zlib e allegato come parametro all'URL, consentendo di trasmettere circa 7500 byte tramite il codice QR V40. Durante la compilazione dei pacchetti del kernel, le distribuzioni possono specificare un link di base per l'URL, consentendo di organizzare il passaggio a una pagina per inviare un segnalazione del problema. È stata prevista una configurazione per selezionare il formato del codice QR con DRM_PANIC_SCREEN_QR_VERSION.
    • È stata aggiunta la supporto per l'estensione ARM POE (Permission Overlay Extension), che consente di impostare i diritti di accesso alle aree di memoria. Con questa estensione, sui sistemi con processori ARM64, può essere implementato un meccanismo di 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 chiamata di sistema getrandom(), ottimizzata attraverso il meccanismo vDSO (virtual dynamic shared object), che consente di spostare il gestore della chiamata di sistema dallo kernel allo spazio utente, evitando cambi di contesto. L'ottimizzazione consente 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, attivati al raggiungimento di un determinato tempo sugli orologi di sistema (in precedenza era possibile impostare solo timeout relativi, che specificavano la durata dall'inizio dell'operazione).
    • Sono stati aggiunti file per generare binding per la libreria libcpupower tramite lo strumento SWIG, che consente di creare binding dal codice C/C++ per diversi linguaggi di programmazione. I binding permettono di creare script in Python e in altri linguaggi e di utilizzarli per estendere le funzionalità della libreria libcpupower, che fornisce un'API per la gestione di cpufreq e driver dallo spazio utente.
    • Nell'utility cpuidle è stata implementata la visualizzazione del valore dello stato di inattività "residency", utilizzato per i sistemi realtime e che tiene conto del tempo minimo che il processore deve rimanere in stato di inattività per giustificare il consumo energetico dell'entrata in tale stato e dell'uscita da esso.
    • È stata aggiunta la possibilità di utilizzare il compilatore Clang per la compilazione della libreria standard C nolibc, che fa parte dei codici sorgente del kernel di Linux e 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 linking (LTO).
    • Sono stati dichiarati obsoleti alcuni interface di cgroup1, come il conteggio TCP, la prima versione dei limiti morbidi (soft limit) e la gestione dell'esaurimento della memoria libera. Il supporto per queste funzionalità rimaneintatto per il momento e la notifica è stata fatta per studiare il numero di utenti che continuano a utilizzare queste possibilità.
    • È stata aggiunta la possibilità di configurare il buffer circolare di tracciamento per conservare i dati accumulati dopo il riavvio, permettendo di non perdere le informazioni di debug accumulate in caso di arresto anomalo del kernel. I dati vengono conservati nella memoria. L'attivazione avviene tramite il parametro della riga di comando del kernel trace_instance, ad esempio, impostando "trace_instance=boot_map@0x285400000:12M" si riserverà 12 MB di memoria all'indirizzo 0x285400000 per il buffer "boot_map", che sarà accessibile tramite il file /sys/kernel/tracing/instances/boot_map.
    • Continua il trasferimento delle modifiche dal ramo 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 porta all'inclusione di Rust tra le dipendenze di build obbligatorie del kernel). Sono stati aggiunti i moduli 'list' e 'rbtree' per lavorare con le liste collegate bidirezionali e gli alberi di ricerca rosso-neri (red-black tree). Sono state ampliate le funzionalità dei moduli 'init', 'sync', 'types' ed 'error'. È stata fornita la possibilità di utilizzare codice Rust durante la compilazione del kernel con protezione contro gli attacchi Spectre (opzioni MITIGATION_{RETHUNK, RETPOLINE, SLS}), l'uso del sistema di debug KASAN, meccanismi di protezione kCFI (kernel Control Flow Integrity) e Shadow Call, nonché 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 la documentazione — rust.docs.kernel.org.
    • All'interno del codice sorgente del kernel è stata aggiunta l'utilità xdrgen per la trasformazione delle specifiche XDR (eXternal Data Representation) in funzioni di codifica e decodifica XDR, scritte utilizzando lo stile C adottato nel kernel Linux.
    • È stata accettata una modifica al kernel che implementa un meccanismo di mascheramento 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 mascheramento accelera del 2,6% il test 'per_thread_ops', che valuta il numero di operazioni che possono essere eseguite in un singolo thread.
    • È stato aggiunto un nuovo driver USB che consente l'uso del protocollo 9pfs come trasporto per la trasmissione e ricezione di 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'). Come esempio di applicazione del nuovo driver, viene menzionato l'uso al posto di NFS per organizzare il caricamento della partizione radice durante lo sviluppo di dispositivi embedded.
  • Sottosistema di disco, input/output e file system
    • Nel sottosistema VFS è stata aggiunta la possibilità di lavorare con dispositivi di archiviazione che hanno dimensioni dei blocchi maggiori rispetto alla dimensione della pagina di memoria nel sistema. Questa funzionalità è attualmente supportata solo nel file system XFS.
    • Nel sottosistema FUSE, che consente di creare implementazioni di file system funzionanti nello spazio utente, è stata aggiunta la supporto al mapping degli identificatori utente dei file system montati, utilizzato per mappare i file di un determinato utente su una partizione montata di un altro utente nel sistema corrente.
    • È stata implementata una nuova operazione fcntl F_CREATED_QUERY, che consente all'applicazione di determinare se un file aperto utilizzando il flag O_CREAT sia stato creato o già esistesse prima.
    • Nel sistema di chiamata name_to_handle_at() è stata aggiunta la possibilità di utilizzare identificatori unici a 64 bit dei punti di montaggio per escludere stati di competizione durante l'analisi di /proc/mountinfo.
    • La dimensione della struttura "file" nel kernel è stata ridotta da 232 a 184 byte, consentendo 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, poiché ciò creava potenziali problemi di sicurezza.
    • Nel pseudo-FS NSFS (NameSpace FS), utilizzato per lavorare con gli spazi dei nomi, è stata implementata la fornitura di ulteriori informazioni 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à sola lettura, è stata introdotta la supporto per montare file system direttamente da immagini disco salvate come file.
    • In XFS sono state aggiunte le nuove comandi ioctl XFS_IOC_START_COMMIT e XFS_IOC_COMMIT_RANGE per scambiare contenuti tra due file.
    • In NFS è stata aggiunta la supporto per il protocollo "LOCALIO", che consente di determinare se il client e server NFS si trovano sullo stesso host, per attivare le ottimizzazioni appropriate.
    • Nel file system Btrfs sono state proposte ottimizzazioni delle prestazioni, è stata effettuata una rifattorizzazione del codice, ridotto l'ambito di blocco degli extents durante le operazioni di lettura, è continuato il lavoro per passare all'uso dei fogli di pagina (page folios) e implementata la liberazione automatica della memoria per la struttura btrfs_path.
    • Nel file system Ext4 sono stati risolti errori legati all'allocazione di blocchi, alla gestione degli extents, al meccanismo di "fast commit" e al journaling.
  • Virtualizzazione e sicurezza
    • Aggiunto il modulo LSM IPE (Integrity Policy Enforcement), sviluppato da Microsoft per espandere l'attuale sistema di gestione degli accessi a mandato. Il modulo consente di definire una politica generale di integrità per l'intero sistema, indicando quali operazioni sono ammissibili e come verificare l'autenticità dei componenti. Ad esempio, attraverso IPE è possibile specificare quali file eseguibili possono essere avviati tenendo conto della verifica della loro corrispondenza alla versione di riferimento attraverso hash crittografici forniti dal sistema dm-verity.
    • Fase di compilazione del kernel è stata fornita la possibilità di attivare separatamente i metodi di protezione disponibili contro varie vulnerabilità della classe Spectre nel CPU. In Kconfig sono stati proposti nuovi parametri: 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).
    • Aggiunto il parametro della riga di comando proc_mem.force_override e un insieme di impostazioni di build in Kconfig (PROC_MEM_FORCE_ALWAYS, PROC_MEM_FORCE_PTRACE e PROC_MEM_FORCE_NEVER) che consentono di vietare la modifica della memoria tramite /proc/pid/mem.
    • Il sottosistema LSM (Linux Security Module) è stato trasformato per utilizzare chiamate statiche, il che ha aumentato la sicurezza e migliorato le prestazioni.
    • Garantita la possibilità di utilizzare kernel standard per l'architettura ARM64 in ambienti guest eseguiti su sistemi Android con hypervisor KVM modificato (protected KVM).
    • Nel modulo LSM Landlock, che limita l'interazione di un gruppo di processi con l'ambiente esterno, è stata implementata la concettualizzazione 'IPC scoping' per limitare selettivamente l'interazione con ambienti sandbox, utilizzando socket Unix e segnali. Ad esempio, è possibile vietare le connessioni tramite socket Unix dall'ambiente sandbox verso processi in cui non è applicata l'isolamento, ma consentire le connessioni a processi nella stessa area di scope.
    • Nel hypervisor KVM è stato aggiunto un flag in CPUID per i sistemi guest, che segnala il supporto per le estensioni AVX10.1.
  • Sottosistema di rete
    • È stato aggiunto il meccanismo Device Memory TCP, che consente di utilizzare socket di rete per l'invio diretto del contenuto della memoria dei dispositivi periferici attraverso la rete (modalità zero-copy) e il posizionamento diretto del contenuto dei pacchetti di rete nell'area di memoria del dispositivo dal lato del ricevente. I dati trasmessi nei pacchetti vengono trasferiti 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 vanno nei normali buffer del kernel.
    • Sono state ampliate le funzionalità di molti driver Ethernet e wireless. Ad esempio, nel driver Intel iwlwifi è stata aggiunta la supporto per l'esecuzione delle operazioni RLC/SMPS sul lato firmware, nel driver RealTek rtw89 è stata migliorata la prestazione 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 sono state 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 su più percorsi attraverso diverse interfacce di rete, la dimensione dei coefficienti di pesatura utilizzati per il routing è stata aumentata da 8 a 16 bit. È stata implementata la determinazione del traffico perso (blackhole) e la sospensione per un certo periodo dei tentativi di connessione con i sistemi responsabili della perdita di traffico.
    • Per IPv6 è stata implementata la supporto per il flag "p" nel PIO (Prefix Information Option), utilizzato negli annunci RA (IPv6 Router Advertisements) per la selezione del 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 IPv6 IOAM6 è stato aggiunto il supporto per una nuova modalità di incapsulamento tunsrc, che consente di ottenere prestazioni migliori.
    • È stata aumentata la prestazione dell'elaborazione dei pacchetti di controllo IPsec.
    • È stata migliorata la prestazione del ripristino (flush) di grandi insiemi di regole nftables. Nel nfnetlink_queue è stato migliorato il supporto per il protocollo SCTP.
    • Nell'API ethtool è stato aggiunto il supporto per l'associazione di più schede di rete a un'unica interfaccia di rete.
  • Apparecchiatura
    • Nel driver AMDGPU continua il lavoro per implementare il supporto della GPU AMD RDNA4 ("GFX12"). È stata aggiunta la possibilità di ripristinare singole code di attività senza ripristinare lo stato dell'intera GPU.
    • Continua 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 introdotto il supporto per i modificatori CCS (Color Control Surface) Xe2 per gestire i parametri delle GPU integrate e discrete.
    • Nel driver i915 è stata implementata la possibilità di output tramite l'interfaccia HWMON o sysfs (l'attributo «fan1_input») per fornire informazioni sulla velocità di rotazione della ventola. È stato dichiarato obsoleto il parametro «i915.modeset»; invece di «i915.modeset=0», si deve utilizzare il parametro «i915.nomodeset».
    • 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) nei sistemi con processori Intel, è stato aggiunto il supporto per sistemi ibridi con CPU asimmetrici (con caratteristiche diverse), oltre al supporto per la gestione dell'alimentazione dei processori basati sulle microarchitetture Granite Rapids e Sierra Forest. Nel driver intel_idle è stato aggiunto il supporto per le CPU Xeon Granite Rapids. Nel driver intel_rapl è stata garantita la rilevazione dei processi AMD della famiglia 1Ah e dei processori Intel ArrowLake-U.
    • È continuata l'integrazione delle modifiche per il supporto del SoC ARM Snapdragon X Elite, che utilizza il proprio CPU a 12 core Qualcomm Oryon e GPU Qualcomm Adreno. Il chip è destinato all'uso in laptop e PC, superando in molte prove di prestazioni i chip Apple M3 e Intel Core Ultra 155H.
    • È stato aggiunto il 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.
    • È stato aggiunto il supporto per i pannelli di visualizzazione 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.
    • Nel sistema audio è stato aggiunto il supporto per i 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 raccomanda di utilizzare i driver AVS. Sono stati apportati molti miglioramenti 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