Rilascio del kernel Linux 6.12 con supporto in tempo reale

Dopo due mesi di sviluppo, Linus Torvalds ha rilasciato il kernel. Linux 6.12. Tra le modifiche più significative: la possibilità di abilitare la modalità in tempo reale, sched_ext per la creazione di scheduler della CPU tramite eBPF, l'output del codice QR in condizioni di emergenza, il meccanismo TCP della memoria del dispositivo, il meccanismo di prenotazione delle risorse del server SCHED_DEADLINE, il miglioramento dello scheduler delle attività EEVDF, il modulo IPE per l'impostazione delle politiche di integrità.

La nuova versione include 14607 correzioni da 2167 sviluppatori, la dimensione della patch è di 37 MB (le modifiche hanno interessato 13087 file, sono state aggiunte 507913 righe di codice, 234083 righe sono state cancellate). L'ultima versione aveva 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 introdotte nella versione 6.12 sono legate ai driver di dispositivo, circa il 12% delle modifiche sono legate all'aggiornamento del codice specifico per le architetture hardware, il 13% sono legate allo stack di rete, il 6% sono legate ai file system e il 3% sono legati ai sottosistemi interni del kernel.

Principali innovazioni nel kernel 6.12:

  • Servizi di memoria e di sistema
    • Ora è disponibile la possibilità di compilare il kernel con l'opzione PREEMPT_RT senza patch aggiuntive per il funzionamento in tempo reale. L'ultima funzionalità del kernel mancante che impediva l'abilitazione della modalità PREEMPT_RT era il supporto per l'output atomico non bloccante tramite la funzione printk, che è inclusa anche nel kernel. Il supporto 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, che alcune distribuzioni, come RHEL, SUSE e Ubuntuhanno creato edizioni Realtime separate dei loro prodotti, richieste in settori quali sistemi finanziari, dispositivi di elaborazione audio e video, aviazione, medicina, robotica, telecomunicazioni e sistemi industriali, in cui è necessario garantire tempi di elaborazione degli eventi prevedibili.
    • È stato aggiunto il meccanismo "sched_ext" (SCX), che consente l'utilizzo di eBPF per creare scheduler della CPU che coprono praticamente tutti gli aspetti della pianificazione delle attività e dell'allocazione delle risorse della CPU. Tali scheduler possono essere caricati ed eseguiti dinamicamente all'interno del kernel. Linux в macchina virtuale eBPF. Il meccanismo sched_ext semplifica la creazione di scheduler specifici per le attività, consente di sperimentare diverse tecniche e strategie di pianificazione e permette la rapida creazione di prototipi funzionanti e la sostituzione al volo degli scheduler nelle infrastrutture di produzione. Ad esempio, utilizzando sched_ext, è possibile creare uno scheduler che tenga conto delle specificità di una determinata applicazione e modifichi dinamicamente la propria strategia di pianificazione in base allo stato del sistema e ad altri fattori.
    • La composizione include la parte rimanente delle patch necessarie per il funzionamento del meccanismo del server SCHED_DEADLINE, che risolve il problema del sottoutilizzo delle risorse della CPU da parte di attività ordinarie quando la CPU è monopolizzata da attività ad alta priorità (in tempo reale). Per prevenire la monopolizzazione della CPU, il kernel utilizzava in precedenza il meccanismo di limitazione in tempo reale, che cercava di riservare il 5% per attività a bassa priorità, lasciando il 95% del tempo per attività in tempo reale. Questo meccanismo lasciava molto a desiderare, poiché le attività ordinarie in molte situazioni non ricevevano abbastanza tempo dal processore. Il server SCHED_DEADLINE implementa un meccanismo di prenotazione delle risorse più efficiente.
    • È stata completata l'integrazione del task scheduler EEVDF (Earliest Eliligi Virtual Deadline First) che ha sostituito lo scheduler CFS (Completely Fair Scheduler), fornito a partire dal kernel 2.6.23. Il nuovo scheduler, quando sceglie il processo successivo a cui trasferire l'esecuzione, prende in considerazione i processi che non hanno ricevuto risorse del processore sufficienti o che hanno ricevuto una quantità ingiustamente elevata di tempo del processore. Nel primo caso il trasferimento del controllo sul processo è forzato, nel secondo, al contrario, è posticipato. Il vecchio scheduler CFS utilizzava l'euristica e la messa a punto per identificare i processi che richiedevano particolare attenzione, mentre il nuovo scheduler li tiene traccia in modo più esplicito e non richiede messa a punto. Si prevede che l'EEVDF ridurrà i ritardi nelle attività per le quali CFS ha avuto problemi di programmazione.
    • Nel gestore di emergenza del kernel - DRM Panic, che utilizza il sottosistema DRM (Direct Rendering Manager) per visualizzare un rapporto visivo nello stile della "schermata blu della morte", la possibilità di visualizzare un logo e un codice QR con un rapporto kmsg su è stata aggiunta la schermata quando si verifica una condizione di emergenza. Poiché in un codice QR ci sono solo 2953 byte, viene fornita l'opzione DRM_PANIC_SCREEN_QR_CODE_URL, in cui il report kmsg viene compresso utilizzando zlib e allegato come parametro all'URL, che consente di trasferire circa 40 byte tramite il codice QR V7500. Quando creano pacchetti con il kernel, le distribuzioni possono impostare un URL di base per l'URL, che consentirà loro di accedere a una pagina per segnalare un problema. Per selezionare il formato del codice QR, viene fornita l'impostazione DRM_PANIC_SCREEN_QR_VERSION.
    • Aggiunto il supporto per l'ARM POE (Permission Overlay Extension), che permette di impostare i diritti di accesso alle aree di memoria. Utilizzando questa estensione, sui sistemi con processori ARM64, è possibile implementare il meccanismo Memory Protection Keys, che serve 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 spostata l'implementazione della system call getrandom(), ottimizzata utilizzando il meccanismo vDSO (virtual Dynamic Shared Object), che permette di spostare il system call handler dal kernel all'utente spazio ed evitare cambi di contesto. L'ottimizzazione ti consente di accelerare la generazione di numeri casuali fino a 15 volte.
    • Nel sottosistema di input/output asincrono io_uring è stata aggiunta la possibilità di utilizzare timeout assoluti, attivati ​​al raggiungimento di una certa ora sull'orologio di sistema (in precedenza si potevano impostare solo timeout relativi, che indicavano la durata dall'inizio dell'operazione ).
    • Aggiunti file per generare collegamenti per la libreria libcpupower utilizzando il toolkit SWIG, che consente di generare collegamenti dal codice C/C++ per vari linguaggi di programmazione. I collegamenti ti consentono di creare script in Python e 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.
    • L'utilità cpuidle mostra il valore della "residenza" dello stato inattivo, utilizzato per i sistemi in tempo reale e tenendo conto del tempo minimo che il processore deve rimanere nello stato inattivo per giustificare i costi energetici della transizione dentro e fuori questo stato.
    • È stata aggiunta la possibilità di utilizzare il compilatore Clang per compilare la libreria C standard nolibc, inclusa nel codice sorgente del kernel. Linux e fornisce un wrapper attorno alle chiamate di sistema di base. Quando si compila nolibc in Clang, l'ottimizzazione in fase di collegamento (LTO) è abilitata.
    • Alcune interfacce cgroup1 sono state deprecate, come l'accounting TCP, il limite flessibile versione XNUMX e la gestione dell'esaurimento della memoria. Il supporto per queste funzionalità rimane per ora completo e l'avviso è rivolto a studiare il numero di utenti che continuano a utilizzare queste funzionalità.
    • Aggiunta la possibilità di configurare un buffer di tracciamento dell'anello per salvare i dati accumulati dopo un riavvio, che consentirà di non perdere le informazioni di debug accumulate in caso di arresto anomalo del kernel. I dati vengono archiviati in memoria. L'abilitazione avviene tramite il parametro della riga di comando del kernel trace_instance, ad esempio, l'impostazione "trace_instance=boot_map@0x285400000:12M" riserverà 12 MB di memoria a 0x285400000 per il buffer "boot_map", che sarà accessibile tramite il file /sys/kernel /tracing/instances/boot_map.
    • Continua la migrazione delle modifiche dal ramo Rust-for-Linux, relativo all'utilizzo di Rust come secondo linguaggio per lo sviluppo di driver e moduli del kernel (il supporto per Rust non è attivo di default e non include Rust tra le dipendenze di compilazione richieste del kernel). Aggiunti i moduli 'list' e 'rbtree' per lavorare con liste doppiamente concatenate e alberi di ricerca rosso-neri. Ampliate le funzionalità dei moduli 'init', 'sync', 'types' e 'error'. Aggiunta la possibilità di utilizzare codice Rust durante la compilazione di un kernel con protezione contro gli attacchi Spectre (opzioni MITIGATION_{RETHUNK,RETPOLINE,SLS}), utilizzando il sistema di debug KASAN, i meccanismi di protezione kCFI (kernel Control Flow Integrity) e Shadow Call, e quando si utilizzano plugin GCC aggiuntivi. Aggiunto un driver per il controller Ethernet PHY Applied Micro QT2025, scritto in Rust. È stato predisposto un sito web separato con la documentazione: rust.docs.kernel.org.
    • L'utility xdrgen è stata aggiunta al codice sorgente del kernel per convertire le specifiche XDR (eXternal Data Representation) in funzioni di codifica e decodifica XDR scritte utilizzando lo stile C adottato dal kernel. Linux.
    • Il kernel è stato modificato per implementare un meccanismo di mascheramento del puntatore per ridurre il numero di chiamate lente a barriere_nospec() nella funzione copy_from_user() a 64 bit, utilizzata per copiare i dati nel kernel dallo spazio utente. L'uso del mascheramento accelera il test "per_thread_ops", che valuta il numero di operazioni che possono essere eseguite in un thread, del 2.6%.
    • È stato aggiunto un nuovo driver USB che consente di utilizzare il protocollo 9pfs come trasporto per inviare e ricevere dati da un dispositivo USB durante il montaggio del file system 9p su USB (ad esempio, “mount -t 9p -o trans=usbg, aname=/percorso/al/fs /mnt/9"). Un esempio di utilizzo del nuovo driver è utilizzarlo al posto di NFS per organizzare l'avvio della partizione root durante lo sviluppo di dispositivi embedded.
  • Sottosistema disco, I/O e file system
    • Al sottosistema VFS è stata aggiunta la possibilità di lavorare con dispositivi di archiviazione la cui dimensione del blocco è maggiore della dimensione della pagina di memoria nel sistema. Nei file system, questa funzionalità è attualmente supportata solo in XFS.
    • Il sottosistema FUSE, che consente di creare implementazioni di file system che operano nello spazio utente, ha aggiunto il supporto per la mappatura degli identificatori utente dei file system montati, utilizzati per abbinare i file di un utente specifico su una partizione esterna montata con un altro utente sulla corrente sistema.
    • È stata implementata una nuova operazione fcntl, F_CREATED_QUERY, che fornisce a un'applicazione la capacità di determinare se un file aperto utilizzando il flag O_CREAT è stato creato o se esisteva già prima.
    • Aggiunta la possibilità di utilizzare ID punto di montaggio univoci a 64 bit alla chiamata di sistema name_to_handle_at() per evitare condizioni di competizione durante l'analisi di /proc/mountinfo.
    • La dimensione della struttura "file" nel kernel è stata ridotta da 232 a 184 byte, il che riduce il consumo di memoria sui sistemi che lavorano attivamente con i file.
    • Era vietato montare file system su punti di montaggio all'interno della gerarchia /proc, come /proc/PID/fd, creando potenziali problemi di sicurezza.
    • Lo pseudo-FS NSFS (NameSpace FS), utilizzato per lavorare con gli spazi dei nomi, fornisce informazioni aggiuntive sugli spazi dei nomi dei punti di montaggio.
    • Il file system EROFS (Extendable Read-Only File System), progettato per l'uso su partizioni di sola lettura, ora supporta il montaggio di file system direttamente dalle immagini del disco salvate come file.
    • Nuovi comandi ioctl XFS_IOC_START_COMMIT e XFS_IOC_COMMIT_RANGE sono stati aggiunti a XFS per lo scambio di contenuto tra due file.
    • NFS ha aggiunto il supporto per il protocollo "LOCALIO", che consente di determinare se il client e Server NFS sullo stesso host per abilitare le ottimizzazioni corrispondenti.
    • Nel file system Btrfs sono state proposte ottimizzazioni delle prestazioni, è stato effettuato il refactoring del codice, è stata ridotta l'area di blocco dell'extent durante le operazioni di lettura, è continuato il lavoro sulla conversione delle pagine di memoria per utilizzare i page folio ed è stato effettuato il rilascio automatico della memoria. implementato per la struttura btrfs_path.
    • Nel file system Ext4 sono stati corretti i bug relativi all'allocazione dei blocchi, alla gestione delle estensioni, al commit veloce e al journaling.
  • Virtualizzazione e sicurezza
    • Aggiunto il modulo LSM IPE (Integrity Policy Enforcement), sviluppato da Microsoft per espandere il sistema di controllo accessi obbligatorio esistente. Il modulo consente di definire una politica generale di integrità dell'intero sistema, indicando quali operazioni sono consentite e come verificare l'autenticità dei componenti. Ad esempio, utilizzando IPE, è possibile specificare quali file eseguibili è consentita l'esecuzione, tenendo conto della loro conformità con la versione di riferimento utilizzando gli hash crittografici forniti dal sistema dm-verity.
    • Nella fase di compilazione del kernel è possibile abilitare separatamente i metodi di protezione disponibili contro le diverse vulnerabilità della classe Spectre nella CPU. Kconfig offre 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 le 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).
    • Aggiunta l'opzione della riga di comando proc_mem.force_override e una serie di impostazioni di assieme in Kconfig (PROC_MEM_FORCE_ALWAYS, PROC_MEM_FORCE_PTRACE e PROC_MEM_FORCE_NEVER) per impedire modifiche alla memoria tramite /proc/pid/mem.
    • Sottosistema LSM (Linux Il modulo di sicurezza è stato convertito all'utilizzo di chiamate statiche, il che ha migliorato la sicurezza e le prestazioni.
    • La possibilità di utilizzare core standard per l'architettura ARM64 negli ambienti guest in esecuzione su Android-sistemi con un hypervisor KVM modificato (KVM protetto).
    • Il modulo Landlock LSM, che permette di limitare l'interazione di un gruppo di processi con l'ambiente esterno, implementa il concetto di “IPC scoping” per limitare selettivamente l'interazione con ambienti sandbox utilizzando socket e segnali Unix. Ad esempio, puoi vietare le connessioni utilizzando socket Unix da un ambiente sandbox a processi a cui non è applicato l'isolamento, ma consentire connessioni a processi nello stesso ambito.
    • Nell'hypervisor KVM è stato aggiunto un flag al CPUID per i sistemi guest che indica il supporto per le estensioni AVX10.1.
  • Sottosistema di rete
    • È stato aggiunto il meccanismo Device Memory TCP che permette di utilizzare i socket di rete per inviare direttamente in rete il contenuto della memoria delle periferiche (modalità zero-copy) e posizionare direttamente il contenuto dei pacchetti di rete nell'area di memoria del dispositivo sulla lato destinatario. I dati trasmessi nei pacchetti vengono trasferiti dalla scheda di rete alla memoria di un dispositivo periferico o direttamente dalla memoria del dispositivo alla scheda di rete, bypassando la CPU, e le intestazioni dei pacchetti finiscono nei normali buffer del kernel.
    • Le capacità di molti driver Ethernet e wireless sono state ampliate. Ad esempio, il driver Intel iwlwifi ha aggiunto il supporto per lo spostamento delle operazioni RLC/SMPS sul lato firmware, il driver RealTek rtw89 ha aumentato le prestazioni e ha aggiunto il supporto per i chip RTL8852BT/8852BE-VT (WiFi 6), il driver Ethernet del microchip ha aggiunto il supporto per IEEE 802.3. bw (100BASE) -T1) e IEEE 802.3bp, le implementazioni Microsoft vNIC e IBM veth Virtual Ethernet sono state migliorate. 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 organizzare la consegna simultanea di pacchetti TCP lungo più percorsi attraverso diverse interfacce di rete, la dimensione dei pesi utilizzati nell'instradamento viene aumentata da 8 a 16 bit. Implementato il rilevamento del traffico perso (blackhole) e la sospensione per un certo periodo dei tentativi di stabilire connessioni con sistemi che portano alla perdita di traffico.
    • Per IPv6, è implementato il supporto per il flag "p" nel PIO (Prefix Information Option), utilizzato negli annunci RA (IPv6 Router Advertisements) per selezionare un modello di distribuzione client tramite DHCPv6-PD (DHCPv6 Prefix Delegation, RFC9663) invece di assegnare indirizzi individuali basati su prefissi utilizzando SLAAC (Stateless Address Autoconfiguration). IPv6 IOAM6 aggiunge il supporto per una nuova modalità di incapsulamento tunsrc che consente prestazioni migliori.
    • Prestazioni migliorate per l'elaborazione dei pacchetti di controllo IPsec.
    • Prestazioni migliorate nello svuotamento di set di regole nftables di grandi dimensioni. nfnetlink_queue ha migliorato il supporto per il protocollo SCTP.
    • L'API ethtool ha aggiunto il supporto per associare più schede di rete a un'unica interfaccia di rete.
  • Attrezzatura
    • Nel driver AMDGPU, continua il lavoro per implementare il supporto per le GPU AMD RDNA4 (“GFX12”). Aggiunta la possibilità di reimpostare le singole code di attività senza reimpostare l'intera GPU.
    • Sono proseguiti i lavori sul driver Xe drm (Direct Rendering Manager) per GPU basate su architettura Intel Xe, utilizzato nelle schede video e grafiche integrate della famiglia Intel Arc, 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 ai modificatori Xe2 CCS (Color Control Surface) per controllare i parametri delle GPU integrate e discrete.
    • Il driver i915 implementa la capacità di fornire informazioni sulla velocità della ventola tramite l'interfaccia HWMON o sysfs (l'attributo "fan1_input"). Il parametro "i915.modeset" è stato deprecato; il parametro "i915.nomodeset" dovrebbe essere utilizzato al posto di "i0.modeset=915".
    • Aggiunto il supporto per le GPU A615, A306 e A621 al driver DRM msm (GPU Qualcomm Adreno).
    • Il driver Nouveau ha avuto le strutture interne rielaborate e pulite.
    • Il driver intel_pstate, che controlla i parametri di consumo energetico (P-state) sui sistemi con processori Intel, ha aggiunto il supporto per i sistemi ibridi con CPU asimmetriche (caratteristiche diverse), nonché il supporto per la gestione energetica dei processori basati su Granite Rapids e Sierra Forest microarchitetture. Aggiunto il supporto per la CPU Xeon Granite Rapids al driver intel_idle. Il driver intel_rapl fornisce il riconoscimento dei processi della famiglia AMD 1Ah e dei processori Intel ArrowLake-U.
    • Continua l'inclusione di modifiche per supportare il SoC ARM Snapdragon X Elite, che utilizza la CPU Oryon a 12 core di Qualcomm e la GPU Qualcomm Adreno. Il chip è pensato per l'uso su laptop e PC, ed è davanti ai chip Apple M3 e Intel Core Ultra 155H in molti test prestazionali.
    • Aggiunto supporto per schede 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
    • Aggiunto supporto per pannelli schermo 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, B116 XAT04.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, Stellato er88577.
    • Il sottosistema audio ha aggiunto il 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 Intel ASoC sono stati dichiarati obsoleti e si consiglia di utilizzare invece i driver AVS. Sono stati apportati molti miglioramenti al driver SoundWire.

Fonte: opennet.ru

Acquista hosting affidabile per siti con protezione DDoS, server VPS VDS 🔥 Acquista un hosting web affidabile con protezione DDoS, server VPS e VDS | ProHoster