Rilascio del kernel Linux 6.15

Dopo due mesi di sviluppo, Linus Torvalds ha presentato la release del kernel Linux 6.15. Tra le modifiche più significative: meccanismo di auditing in Landlock, modalità di fissaggio del mapping della memoria, sottosistema fwctl, driver Nova per GPU NVIDIA, implementazione del sistema host per l'hypervisor Hyper-V, supporto per dispositivi di archiviazione zonati in XFS, ottimizzazione del sottosistema di rete, controllo scrub in Bcachefs, possibilità di gestione delle operazioni tramite io_uring.

Nella nuova versione sono stati accettati 15945 fix da 2154 sviluppatori, la dimensione della patch è di 59 MB (le modifiche hanno interessato 13596 file, sono state aggiunte 739608 righe di codice e sono state rimosse 312168 righe). Nella precedente release c'erano 12115 fix da 1984 sviluppatori, la dimensione della patch era di 39 MB. Circa il 41% di tutte le modifiche presentate in 6.15 riguarda i driver dei dispositivi, circa il 16% è relativo all'aggiornamento del codice specifico per architetture hardware, il 13% è associato allo stack di rete, il 5% ai file system e il 4% ai sottosistemi interni del kernel.

Le principali novità del kernel 6.15:

  • Sottosistema disco, I/O e file system
    • Nel meccanismo fanotify è stata aggiunta la possibilità di monitorare eventi di montaggio e smontaggio.
    • In XFS è stata aggiunta la supporto per dispositivi di archiviazione zonati (separazione in zone di gruppi di blocchi o settori in cui è consentito solo l'aggiunta sequenziale di dati con aggiornamento dell'intero gruppo di blocchi). È stato aggiunto il flag rwf_dontcache per disabilitare la cache durante la scrittura. È stata implementata la possibilità di scrivere in modo atomico più blocchi di dati.
    • In Btrfs è stata implementata la possibilità di indicare livelli di compressione zstd negativi (-15 a -1, ad esempio, "compress=zstd:-5") durante il montaggio, che offrono una velocità di esecuzione migliore a scapito dell'efficienza di compressione. È stato migliorato il caching dei percorsi dei file (nel test effettuato, l'operazione di "send" è risultata più veloce del 30%). È stata aggiunta la supporto per blocchi di dimensione 2kB.
    • In EXT4 è stata aumentata la performance nella riproduzione del log con un numero molto elevato di entries revocate (carico tipico delle partizioni del file system Lustre). È stata implementata la ricerca lineare delle entries "dentry" (rappresentazione interna degli elementi delle directory), risolvendo i problemi di accesso a determinati file in modalità case-insensitive. È stata corretta l'opzione di montaggio "errors=remount-ro". Maggiore robustezza è stata raggiunta nel trattamento di file system danneggiati.
    • In F2FS è stata implementata una ioctl per ottenere informazioni sulla priorità delle operazioni di I/O per un file specificato. È stato effettuato un lavoro di transizione all'uso dei page folios.
    • In Bcachefs è stata aggiunta la modalità "scrub", che verifica l'integrità della lettura di tutti i dati e i metadati dal file system. In caso di rilevamento di errori, viene avviata una procedura di recupero. È stata inoltre aggiunta la supporto per lavorare con file system in cui la dimensione del blocco è maggiore della dimensione della pagina di memoria. È stato stabilizzato il formato delle strutture disco di Bcachefs (cambiamenti futuri al formato verranno implementati come aggiunte opzionali).
    • In EROFS è stata aggiunta la supporto per l'indirizzamento a 48 bit dei blocchi.
    • Nel sottosistema FUSE sono stati implementati sysctl default_request_timeout e max_request_timeout per impostare i timeout delle richieste, il che consente di monitorare i blocchi dei componenti FUSE operanti nello spazio utente. La dimensione massima dei nomi dei file in FUSE è stata aumentata a 1024 caratteri.
    • Nel sistema di chiamata statmount() è stata aggiunta la possibilità di ottenere informazioni sul mapping degli identificatori utente delle partizioni di file system montate, utilizzato per mappare file di un determinato utente su una partizione montata di un altro utente nel sistema corrente.
    • È stata introdotta la possibilità di creare un punto di montaggio con un mapping degli identificatori utente differente rispetto a quello della partizione montata originale.
    • Nell'API per la gestione del montaggio, sono state apportate modifiche che semplificano la costruzione di gerarchie complesse di file system senza rivelare parti separate dei file system che devono rimanere nascoste.
    • Nel sottosistema per lavorare con dispositivi a blocchi è stata aggiunta la supporto per dispositivi hardware di protezione delle chiavi di crittografia.
    • Nel file system SMB è stata implementata l'opzione is_network_name_deleted ed è stata abilitata di default la modalità smb_server_kerberos5.
    • Per il file system OverlayFS è stata aggiunta l'opzione di montaggio "override_creds", che, se specificata, utilizza le credenziali dell'utente chiamante per accedere ai livelli inferiori dell'archivio anziché quelle dell'utente che ha montato. Questa modifica, ad esempio, consente di richiedere l'utente con privilegi CAP_SYS_ADMIN durante il montaggio di OverlayFS, ma di utilizzare il file system con credenziali senza tale privilegio.
    • In exFAT, le operazioni di eliminazione dei file sono state accelerate. Invece di inviare richieste «discard» separatamente per ogni cluster liberato del file da eliminare, il driver ora raggruppa le richieste. In un test condotto, il tempo per eliminare un file di 80 GB è stato ridotto da 286 secondi a 1,6 secondi.
    • Tutti i pseudo-FS e i FS EXT2 sono stati convertiti per utilizzare il nuovo API di montaggio delle partizioni.
    • È stato rimosso il codice per il supporto dei file system SYSV (SystemV/386, Xenix e Coherent), che dal 2023 è stato contrassegnato come non supportato (orphaned).
  • Memoria e servizi di sistema
    • La versione minima di GCC necessaria per compilare il kernel è stata aumentata a 8.1, mentre quella di Clang è passata a 15.0.0.
    • È stata aggiunta la sottosistema fwctl (Firmware Control), che fornisce un API per la gestione sicura dei firmware e l'esecuzione dei gestori del firmware dallo spazio utente. Sulla base di fwctl sono stati preparati driver per dispositivi CXL (Compute Express Link), adattatori Ethernet Mellanox ConnectX (mlx5) e schede di servizio AMD/Pensando.
    • Sono state ampliate le funzionalità del meccanismo pidfd, che consente di utilizzare identificatori legati a processi specifici e, a differenza di pid, non sono riutilizzabili. È stata fornita la possibilità di recuperare dati sullo stato di uscita di un processo identificato tramite pidfd dopo che il processo padre ha ricevuto conferma della conclusione del processo figlio (reaped) e delle sue risorse sono state liberate. È stato aggiunto un flag PIDFD_SELF alle chiamate di sistema, attraverso il quale il processo può fare riferimento a se stesso.
    • Per l'architettura RISC-V è stata implementata la supporto per le estensioni BFloat16, Zaamo (operazioni atomiche in memoria), Zalrsc (Load-Reserved/Store-conditional) e ZBKB (operazioni bit per la crittografia).
    • Durante il tracciamento è stata fornita la possibilità di salvare gli argomenti delle funzioni chiamate e di visualizzarli nei log di tracciamento.
    • Nel sistema di input/output asincrono io_uring è stato aggiunto il supporto per la lettura delle informazioni sugli eventi epoll. L'uso di io_uring per gestire gli eventi epoll consente di ridurre il numero di switch di contesto, permettendo di gestire più eventi epoll contemporaneamente.
    • Nella sottosistema eBPF è stata migliorata la verifica dei programmi con cicli. Sono state aggiunte nuove istruzioni «timed_may_goto», «load-acquire» e «store-release». È stata fornita la possibilità di modificare gli attributi estesi dei file da programmi BPF. È stata aggiunta la funzione try_alloc_pages(), progettata per allocare memoria in caso di elevata probabilità di fallimento dell'operazione (quando si eseguono programmi BPF in contesti limitati).

      È stato implementato un nuovo primitivo di lock — rqspinlock (Resilient Queued Spin Lock), che durante l'esecuzione identifica situazioni che portano a deadlock. Questo nuovo primitivo consente di caricare programmi BPF per cui il verificatore non garantiva la correttezza nel funzionamento con i lock.

    • È stata significativamente migliorata l'affidabilità nell'allocazione di pagine di grandi dimensioni (huge-page).
    • È stata notevolmente accelerata la computazione delle somme di controllo CRC64 sui sistemi x86. Tra l'altro, sono state utilizzate nuove istruzioni vettoriali dal set AVX-512 per ottimizzare le prestazioni, che in alcune situazioni sono aumentate di 100 volte.
    • Prosegue 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 Rust non è attivo per impostazione predefinita e non comporta che Rust diventi una dipendenza di compilazione obbligatoria per il kernel). È stata fornita la possibilità di utilizzare il macro «#[kunit_tests()]» nel codice del kernel per eseguire unit test. È stato aggiunto il supporto per l'architettura ARMv7. Sono stati implementati moduli dma e hrtimer con wrapper Rust per DMA (aggiunti da Linus bypassando il maintainer, che dopo si è dimesso) e timer ad alta precisione. Sono stati ampliati i moduli ‘list’, ‘str’, ‘sync’, ‘error’ e ‘alloc’. È stato aggiunto il supporto per la nuova sintassi ‘&raw’ (raw_ref_op).
    • Nella sottosistema perf è stata implementata la possibilità di profilazione dei ritardi, utilizzando informazioni dal pianificatore di compiti.
    • È stato aggiunto un parametro della riga di comando del kernel «traceoff_after_boot», che disabilita il tracciamento dopo che il kernel è stato caricato e il processo init è stato avviato. Questo parametro può essere utilizzato nel diagnosticare problemi legati al boot, assicurando che i dati di tracciamento accumulati durante il caricamento non vengano sovrascritti.
    • È stata interrotta la supporto per sistemi x86 a 32 bit con più di 8 CPU e 4 GB di RAM. Queste macchine non vengono più prodotte da tempo, e i sistemi che richiedono tali risorse sono stati trasferiti su CPU a 64 bit.
    • Sono state apportate modifiche all'implementazione dei timer POSIX, che consentono allo strumento CRIU (Checkpoint/Restore in Userspace) di salvare e ripristinare gli identificatori dei timer.
  • Virtualizzazione e sicurezza
    • È stata aggiunta la possibilità di utilizzare Linux come ambiente principale (Dom0, partizione root) per l'iperfoglio Hyper-V (Microsoft Hypervisor). L'ambiente host gestisce l'iperfoglio, organizza l'avvio dei sistemi guest, assegna risorse e garantisce l'interazione di macchine virtuali con l'hardware. La gestione dell'iperfoglio Hyper-V su Linux avviene attraverso il dispositivo /dev/mshv.
    • È stato aggiunto un meccanismo di audit al modulo Landlock, che fornisce ai programmi non privilegiati strumenti per limitare l'uso degli oggetti del kernel Linux (gerarchie di file, socket di rete, ioctl, ecc.). L'audit consente di valutare in dettaglio le ragioni delle restrizioni di accesso attuate tramite Landlock, oltre a offrire la possibilità di comprendere quando e quale operazione è stata bloccata, perché è stata eseguita la restrizione e quale regola è stata attivata.
    • È stata aggiunta la possibilità di implementare in moduli LSM (Linux Security Modules) gestori che controllano gli accessi al sistema di input/output asincrono io_uring e che permettono di bloccare l'uso di io_uring per eludere le restrizioni all'accesso alle chiamate di sistema. Un gestore simile è stato implementato nel modulo LSM SELinux.
    • In SELinux è stata implementata la possibilità di applicare politiche a qualsiasi tipo di dato caricato dal kernel, inclusi le immagini del firmware, le politiche di sicurezza e i certificati.
    • È stata aggiunta una modalità di sigillatura (seal) per alcune operazioni di mappatura della memoria eseguite dal kernel nello spazio degli indirizzi del processo. La sigillatura rende la mappatura di sola lettura e non consente modifiche in caso di sfruttamento di vulnerabilità. Questa modalità si applica alla mappatura vDSO, vsyscall, vvar, sigpage e uprobes. La modalità è disattivata per impostazione predefinita, poiché potrebbe compromettere il funzionamento di alcune applicazioni. È stata aggiunta un'opzione di configurazione CONFIG_MSEAL_SYSTEM_MAPPINGS per abilitarla.
  • Sottosistema di rete
    • È continuato il lavoro per eliminare il blocco globale del stack di rete RTNL (rtnl_lock) e trasformarlo in blocchi legati a spazi di nomi di rete specifici.
    • È stata aggiunta la funzionalità iniziale per ricevere pacchetti di rete tramite io_uring con copia del contenuto direttamente nella memoria del programma nello spazio utente, senza buffering intermedio (zero-copy). Nei test condotti, questa modifica ha consentito di gestire il traffico attraverso un canale da 200 gigabit utilizzando un'unica unità CPU.
    • Sono state implementate le sysctl tcp_rto_max_ms e l'opzione TCP-socket TCP_RTO_MAX_MS, attraverso le quali è possibile impostare il tempo massimo tra i tentativi di ritrasmissione dei pacchetti.
    • Nel BPF è stata aggiunta una serie di chiamate di callback per ottenere informazioni sul tempo da diverse parti dello stack di rete, che possono essere utilizzate per diagnosticare problemi di latenza di rete.
    • Sono state implementate ottimizzazioni delle prestazioni delle operazioni di rete:
      • L'ottimizzazione GRO (Generic Receive Offload), che unisce più pacchetti piccoli in uno grande, è ora attivata durante il passaggio della gestione del pacchetto a un'altra CPU (per bilanciamento del carico) utilizzando il sottosistema XDP (eXpress Data Path), che consente di elaborare i pacchetti a livello del driver di rete prima della loro trasmissione allo stack di rete. L'aumento delle prestazioni nella gestione dei flussi TCP grazie all'ottimizzazione può raggiungere il doppio.
      • Sotto carichi pesanti, le prestazioni della funzione connect() sono state raddoppiate grazie alla sostituzione del blocco spin con un meccanismo di sincronizzazione RCU (Read-Copy-Update) durante la ricerca di record con informazioni sui lati della connessione (sorgenti e destinazioni Indirizzi IP e porte). È stata inoltre effettuata un'ottimizzazione dell'hashing, che ha fornito un ulteriore incremento delle prestazioni del 229%.
      • È stata accelerata l'implementazione di MPTCP (Multipath TCP), un'estensione del protocollo TCP per organizzare la consegna dei pacchetti contemporaneamente su più percorsi attraverso diverse interfacce di rete associate a indirizzi IP diversi. MPTCP in modalità a singolo flusso è stato accelerato del 29%.
      • In netfilter, in presenza di un socket, è stata interrotta l'esecuzione delle operazioni di ricerca dei percorsi nel FIB (Forwarding Information Base). Grazie a questa ottimizzazione, le prestazioni sono aumentate del 20%.
      • Le prestazioni di UDP in condizioni di flood sono aumentate del 10% grazie all'eliminazione di operazioni ridondanti con la struttura sk_tsflags durante la ricezione dei pacchetti.
    • È stato aggiunto un driver con implementazione del protocollo MCTP-over-USB.
  • Attrezzature
    • Nel kernel è stata adottata la prima implementazione del driver Nova per GPU NVIDIA, equipado con firmware GSP, utilizzati a partire dalla serie NVIDIA GeForce RTX 2000 basata sull'architettura Turing. Il driver è scritto in linguaggio Rust. Nella prima fase è stata aggiunta solo la struttura di base nova-core, che conta circa 400 righe di codice e implementa un livello di astrazione sui diversi interfaccie firmware GSP. Nella fase successiva, si prevede di includere nel kernel il driver DRM nova-drm (Direct Rendering Manager) per l'interazione con le GPU dallo spazio utente, oltre al driver VFIO con gestore vGPU, che consente di utilizzare GPU virtuali NVIDIA nei sistemi di virtualizzazione.
    • Prosegue il lavoro sul driver drm (Direct Rendering Manager) Xe per GPU basate sull'architettura Intel Xe, utilizzata nelle schede grafiche Intel della famiglia Arc e nella grafica integrata, a partire dai processori Tiger Lake. È stato aggiunto il supporto per la SVM (Shared Virtual Memory), un componente del framework DRM che gestisce la memoria condivisa utilizzata da CPU e GPU.
    • Nel driver i915 sono stati aggiunti identificativi per nuove GPU.
    • Nel driver Nouveau è stata ristrutturata l'interfaccia GSP RPC e integrato l'interfaccia drm_slave_encoder.
    • Nel driver AMDGPU è stato implementato il supporto per l'architettura DCN36 (Display Core Next). È stata aggiunta la possibilità di definire curve di luminosità personalizzate utilizzate per la regolazione della luminosità del display.
    • Nel driver adreno è stato aggiunto il supporto per la GPU Qualcomm Adreno 623.
    • È stato aggiunto il supporto per i touchpad Apple Touch Bar.
    • È stato aggiunto il supporto per la seconda versione dell'estensione eUSB2 (eUSB2V2 — Embedded USB2 Version 2.0), che consente di ridurre la tensione di alimentazione (fino a 1.2 volt) e migliorare le prestazioni di USB 2.0. La velocità di trasmissione dati in eUSB2V2 può raggiungere i 4.8 Gbps, dieci volte più veloce dei normali 480 Mbps tipici di USB 2.0. eUSB2V2 permetterà ai produttori di laptop di dotare i loro dispositivi di webcam ad alta risoluzione utilizzando ancora il bus Embedded USB2 per il collegamento.
    • È stato aggiunto il supporto per gli adattatori Ethernet Intel Killer E5000 (RTL8126).
    • È stato aggiunto il supporto per i pannelli visionari Visionox RM692E5, Rockchip w552793dba-v10, kingdisplay-kd110n11-51ie e starry-2082109qfh040022-50e.
    • È stato aggiunto un driver per i laptop Samsung Galaxy Book.
    • È stato aggiunto il supporto per i sistemi audio Presonus Studio 1824c, Jabra Evolve 65. È stato aggiunto il supporto per i moduli DSP AMD ACP 7.x, AWINC WM88166, Everest ES8388, Intel AVS PEAKVOL e GAIN. È stato migliorato il supporto audio per i laptop ASUS, HP e Lenovo.
    • È stato aggiunto il supporto per piattaforme ARM, SoC e dispositivi: Arm Morello, AMD (Xilinx) Versal NET, Google Pixel Pro 6, NetCube Kumquat, MYIR Remi Pi, Huawei Matebook E Go, Milk-V Jupiter ST STM32MP2, Mediatek MT8370, Apple T2, Skov (i.MX8MP), EVK (i.MX95), Rockchip RK35xx, Allwinner A523, 11 schede Toradex basate su i.MX6.

Contemporaneamente, il Fondo Latinoamericano per il Software Libero ha creato una versione completamente libera del kernel 6.15 — Linux-libre 6.15-gnu, ripulito da elementi di firmware e driver che contengono componenti o sezioni di codice non liberi, la cui area di applicazione è limitata dal produttore. Nella release 6.15 è stata neutralizzata il caricamento dei blob nei driver nova, Qualcomm iris v4l2, Airoha NPU, Tehuti Networks TN40xx Ethernet 10G, Realtek 8814A wifi, touchscreen del SoC Apple Silicon, Renesas UFS e aw88166 audio. È stata interrotta la pulizia del driver Spider 1Gb Ethernet, che è stato rimosso dal kernel. Sono stati rimossi i riferimenti ai file binari tivoizzati. È stata implementata la bloccatura del caricamento dei blob dal codice in linguaggio Rust.

Fonte: opennet.ru

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