Rilascio del kernel Linux 6.15

Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 6.15. Tra le modifiche più rilevanti: meccanismo di auditing in Landlock, modalità di pinning della mappatura della memoria, sottosistema fwctl, driver Nova per GPU NVIDIA, implementazione del sistema host per l'iper-v, supporto per dispositivi di archiviazione zonati in XFS, ottimizzazione della sottosistema di rete, controllo scrub in Bcachefs, possibilità di monitorare le operazioni tramite io_uring.

Nella nuova versione sono stati inclusi 15945 correttivi da 2154 sviluppatori, la dimensione della patch è di 59 MB (le modifiche riguardano 13596 file, aggiunte 739608 righe di codice, rimosse 312168 righe). Nell'uscita precedente c'erano 12115 correzioni 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 per dispositivi, circa il 16% delle modifiche riguarda l'aggiornamento del codice specifico per architetture hardware, il 13% è legato allo stack di rete, il 5% ai file system e il 4% ai sottosistemi interni del kernel.

Le principali novità nel kernel 6.15:

  • Sottosistema di disco, input/output e file system
    • Nel meccanismo fanotify è stata aggiunta la possibilità di monitorare eventi di montaggio e smontaggio.
    • In XFS è stato aggiunto il supporto per dispositivi di archiviazione zonati (divisione in zone di gruppi di blocchi o settori, nei quali è consentita solo l'aggiunta sequenziale dei 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 contemporaneamente.
    • In Btrfs è stata implementata la possibilità di specificare durante il montaggio livelli di compressione zstd negativi (da -15 a -1, ad esempio, "compress=zstd:-5"), che garantiscono una maggiore velocità operativa a scapito dell'efficienza della compressione. È stata migliorata la cache dei percorsi dei file (nel test condotto, l'esecuzione dell'operazione "send" è stata accelerata del 30%). È stato aggiunto il supporto per blocchi di dimensione 2 KB.
    • In EXT4 è stata aumentata la performance durante la riproduzione del journal con un numero molto elevato di voci revocate (carico tipico delle partizioni per il FS Lustre). È stata implementata la ricerca lineare delle voci "dentry" (rappresentazione interna degli elementi delle directory), risolvendo problemi di accesso a determinati file in modalità case insensitive. È stata ottimizzata l'opzione di montaggio "errors=remount-ro". È stata aumentata la resistenza nella gestione di sistemi di file danneggiati.
    • In F2FS è stato implementato ioctl per ottenere informazioni sulle priorità delle operazioni di input/output per un file specifico. È stato effettuato un lavoro per passare all'uso dei volumi di pagina (page folios).
    • In Bcachefs è stata aggiunta la modalità "scrub" in cui viene eseguita una verifica della correttezza della lettura di tutti i dati e metadati dal filesystem. In caso di errori, viene avviata la procedura di recupero. In Bcachefs è stata anche aggiunta la compatibilità con filesystem in cui la dimensione del blocco è superiore alla dimensione della pagina di memoria. È stato stabilizzato il formato delle strutture disco di Bcachefs (ulteriori modifiche al formato saranno implementate 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 specificare i timeout per l'esecuzione delle richieste, permettendo 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.
    • Alla chiamata di sistema statmount() è stata aggiunta la possibilità di ottenere informazioni sul mapping degli identificatori utente dei filesystem montati, utilizzate per abbinare i file di un determinato utente su una partizione montata di un altro utente nel sistema attuale.
    • È stata implementata la possibilità di creare un punto di montaggio con un mapping degli identificatori utente diverso rispetto a quello della partizione montata originale.
    • Nell'API di gestione del montaggio sono state apportate modifiche per semplificare la costruzione di complesse gerarchie di filesystem senza rivelare singole parti di filesystem che devono rimanere nascoste.
    • Nel sottosistema per la gestione dei dispositivi a blocchi è stata aggiunta la compatibilità con dispositivi hardware per la protezione delle chiavi di crittografia.
    • Nel filesystem SMB è stata implementata l'opzione is_network_name_deleted ed è stata attivata di default la modalità smb_server_kerberos5.
    • Per il filesystem OverlayFS è stata aggiunta l'opzione di montaggio "override_creds", che consente di utilizzare le credenziali dell'utente chiamante per accedere ai livelli inferiori dello storage, anziché quelle dell'utente che ha effettuato il montaggio. Questa modifica, ad esempio, consente di richiedere un utente con privilegi CAP_SYS_ADMIN durante il montaggio di OverlayFS, ma di utilizzare il filesystem con credenziali senza tale privilegio.
    • In exFAT, le operazioni di eliminazione dei file sono state accelerate. Invece di inviare richieste "discard" singolarmente per ogni cluster liberato del file da eliminare, il driver ora raggruppa le richieste. Nel test condotto, il tempo di eliminazione di un file di 80 GB è sceso da 286 secondi a 1,6 secondi.
    • Tutti i pseudo-FS, così come il 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 è contrassegnato come non supportato (orphaned).
  • Memoria e servizi di sistema
    • La versione minima di GCC necessaria per la compilazione del kernel è stata aumentata a 8.1, mentre 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 di gestori lato 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.
    • Le capacità del meccanismo pidfd sono state ampliate, permettendo di utilizzare identificatori associati a processi specifici e a differenza del pid non possono essere riassegnati. È stata fornita la possibilità di estrarre dati sullo stato di terminazione di un processo, identificato tramite pidfd dopo che il processo padre ha ricevuto conferma della terminazione del processo figlio (reaped) e le sue risorse sono state liberate. È stato aggiunto un flag PIDFD_SELF alle chiamate di sistema, con cui un processo può fare riferimento a se stesso.
    • Per l'architettura RISC-V è stato implementato il supporto per le estensioni BFloat16, Zaamo (operazioni atomiche sulla memoria), Zalrsc (Load-Reserved/Store-conditional) e ZBKB (operazioni bit per criptografia).
    • Durante il tracciamento è stata garantita la possibilità di salvare gli argomenti delle funzioni chiamate e 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 e di gestire più eventi epoll in una sola volta.
    • Nel sottosistema eBPF è 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 dai programmi BPF. È stata aggiunta la funzione try_alloc_pages(), progettata per allocare memoria in caso di alta probabilità di fallimento dell'operazione (quando si eseguono programmi BPF in contesti limitati).

      È stato implementato un nuovo primitivo di blocco — rqspinlock (Resilient Queued Spin Lock), che durante l'esecuzione identifica situazioni che possono portare a deadlock. Questo nuovo primitivo consente di caricare programmi BPF per i quali il verificatore non garantiva il corretto funzionamento con i blocchi.

    • È stata notevolmente aumentata l'affidabilità dell'allocazione di pagine di memoria grandi (huge-page).
    • È stata notevolmente accelerata la computazione dei checksum CRC64 sui sistemi x86. Tra l'altro, per l'accelerazione sono state utilizzate nuove istruzioni vettoriali dal set AVX-512. In alcune situazioni, le prestazioni sono cresciute di 100 volte.
    • Continua il trasferimento delle modifiche dalla branca 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 per il kernel). È stata fornita la possibilità di utilizzare nel codice del kernel la macro «#[kunit_tests()]» per eseguire test unitari. È stato aggiunto il supporto per l'architettura ARMv7. Sono stati implementati i moduli dma e hrtimer con binding Rust per DMA (aggiunti da Linus per bypassare il maintainer, che dopo se ne è andato) e timer di 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).
    • Nel sottosistema perf è stata implementata la possibilità di profilare i ritardi, utilizzando informazioni dal pianificatore delle attività.
    • È stato aggiunto il parametro della riga di comando del kernel «traceoff_after_boot», che disattiva il tracciamento dopo che il kernel è stato caricato e il processo init è stato avviato. Questo parametro può essere utilizzato per diagnosticare problemi legati al caricamento, garantendo che i dati di tracciamento accumulati durante il caricamento non vengano sovrascritti.
    • È stata interrotta la supporto per i sistemi a 32 bit x86 con più di 8 CPU e 4 GB di RAM. Tale hardware non è più in produzione da tempo, e i sistemi che richiedono risorse di questo tipo sono stati migrati a 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 radice (Dom0. root partition) per l'hypervisor Hyper-V (Microsoft Hypervisor). L'ambiente host si occupa della gestione dell'hypervisor, dell'organizzazione dell'avvio dei sistemi guest, della distribuzione delle risorse e della garanzia della comunicazione macchine virtuali con l'hardware. La gestione dell'hypervisor Hyper-V in Linux avviene tramite 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 dei bloccaggi di accesso effettuati durante l'uso di Landlock, fornendo anche la possibilità di capire quando e quale operazione è stata bloccata, perché è avvenuto il blocco e quale regola è stata attivata.
    • È stata aggiunta la possibilità di implementare nei moduli LSM (Linux Security Modules) gestori che controllano gli accessi al sistema di input/output asincrono io_uring e che consentono di bloccare l'uso di io_uring per eludere le restrizioni di accesso alle chiamate di sistema. Un tale gestore è stato implementato nel modulo LSM SELinux.
    • In SELinux è stata implementata la possibilità di applicare politiche a qualsiasi tipo di dato caricato dal kernel, comprese 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 effettuate dal kernel nello spazio di indirizzamento del processo. La sigillatura rende la mappatura di sola lettura e non consente di modificare in caso di sfruttamento di una vulnerabilità. Questo si applica alla mappatura vDSO, vsyscall, vvar, sigpage e uprobes. La modalità è disabilitata per impostazione predefinita, poiché potrebbe compromettere il funzionamento di alcune applicazioni. È stata aggiunta una configurazione di build CONFIG_MSEAL_SYSTEM_MAPPINGS per abilitarla.
  • Sottosistema di rete
    • È proseguito il lavoro per eliminare il blocco globale della rete RTNL (rtnl_lock) e trasformarlo in blocchi legati a singoli spazi di nomi di rete.
    • Aggiunta la possibilità iniziale di ricevere pacchetti di rete tramite io_uring con copia del contenuto direttamente in memoria del programma nello spazio utente senza buffering intermedio (zero-copy). Nei test effettuati, la modifica ha consentito di gestire il traffico attraverso una connessione da 200 gigabit, utilizzando un singolo core CPU.
    • Realizzati sysctl tcp_rto_max_ms e l'opzione TCP-socket TCP_RTO_MAX_MS, attraverso cui è possibile impostare il tempo massimo tra i tentativi di ritrasmissione dei pacchetti.
    • Nel BPF è stata aggiunta una serie di callback per ottenere informazioni sui tempi da vari punti dello stack di rete, che possono essere utilizzate per diagnosticare problemi con le latenze di rete.
    • Aggiunte ottimizzazioni delle prestazioni delle operazioni di rete:
      • L'ottimizzazione GRO (Generic Receive Offload), che unisce più pacchetti piccoli in uno grande, è ora attivata al momento del passaggio della gestione del pacchetto a un'altra CPU (per il bilanciamento del carico) utilizzando il sottosistema XDP (eXpress Data Path), che consente di elaborare i pacchetti a livello del driver di rete prima del loro invio allo stack di rete. L'aumento delle prestazioni nella gestione dei flussi TCP grazie all'ottimizzazione può raggiungere fino a due volte.
      • In condizioni di carico elevato, le prestazioni della funzione connect() sono raddoppiate grazie alla sostituzione del blocco spin con un meccanismo di sincronizzazione RCU (Read-Copy-Update) nel processo di ricerca delle voci con informazioni sulle parti della connessione (sorgenti e destinazioni e porte). È stata inoltre eseguita un'ottimizzazione dell'hashing, che ha fornito un ulteriore incremento delle prestazioni del 229%. Indirizzi IP È stata accelerata l'implementazione di MPTCP (Multipath TCP), un'estensione del protocollo TCP per organizzare la consegna dei pacchetti simultaneamente su più percorsi attraverso differenti interfacce di rete legate a diversi indirizzi IP. MPTCP in modalità a flusso singolo è stato accelerato del 29%.
      • In netfilter, in presenza di socket, è stata interrotta l'esecuzione delle operazioni di ricerca degli itinerari nel FIB (Forwarding Information Base). Grazie a questa ottimizzazione, le prestazioni sono aumentate del 20%.
      • Le prestazioni UDP in condizioni di flood sono aumentate del 10% grazie all'esclusione di operazioni non necessarie sulla struttura sk_tsflags durante la ricezione dei pacchetti.
      • Le prestazioni UDP in condizioni di flood sono aumentate del 10% grazie all'esclusione di operazioni superflue con la struttura sk_tsflags durante la ricezione dei pacchetti.
    • Aggiunto un driver con implementazione del protocollo MCTP-over-USB.
  • Apparecchiatura
    • Nel nucleo è stata integrata l'implementazione iniziale del driver Nova per GPU NVIDIA, dotate di firmware GSP, utilizzate a partire dalla serie NVIDIA GeForce RTX 2000 basata sull'architettura Turing. Il driver è scritto in Rust. Nella prima fase è stato aggiunto solo il framework nova-core, che conta circa 400 righe di codice e implementa un livello base di astrazioni sopra le interfacce software dei firmware GSP. Nella fase successiva nel nucleo si prevede di includere il driver DRM nova-drm (Direct Rendering Manager) per l'interazione con la GPU dallo spazio utente, oltre a un driver VFIO con gestore vGPU, che consente di utilizzare GPU virtuali NVIDIA nei sistemi di virtualizzazione.
    • Continua 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 SVM (Shared Virtual Memory), un componente del framework DRM che gestisce la memoria condivisa, utilizzata congiuntamente da CPU e GPU.
    • Sono stati aggiunti identificatori per nuove GPU nel driver i915.
    • Nel driver Nouveau è stato rielaborato l'RPC GSP e integrata 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 correzione della luminosità dello schermo.
    • Nel driver adreno è stato aggiunto il supporto per la GPU Qualcomm Adreno 623.
    • È stato aggiunto il supporto per i pannelli touch 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 Gbit al secondo, dieci volte più veloce rispetto ai normali 480 Mbit al secondo, tipici di USB 2.0. eUSB2V2 consentirà ai produttori di notebook di equipaggiare i loro dispositivi con webcam di risoluzione più elevata, continuando a utilizzare il bus Embedded USB2 per la loro connessione.
    • È stato aggiunto il supporto per gli adattatori Ethernet Intel Killer E5000 (RTL8126).
    • È stato aggiunto il supporto per i pannelli display Visionox RM692E5, Rockchip w552793dba-v10, kingdisplay-kd110n11-51ie e starry-2082109qfh040022-50e.
    • È stato aggiunto un driver per i notebook 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 sui notebook ASUS, HP e Lenovo.
    • Aggiunta del 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, la Fondazione per il Software Libero Latinoamericano ha rilasciato una versione completamente libera del kernel 6.15 — Linux-libre 6.15-gnu, ripulita da elementi di firmware e driver contenenti componenti non liberi o parti di codice il cui uso è limitato dal produttore. Nella versione 6.15 è stata neutralizzata il caricamento dei blob nei driver nova, Qualcomm iris v4l2, Airoha NPU, Tehuti Networks TN40xx 10G ethernet, Realtek 8814A wifi, Apple Silicon SoC touchscreen, Renesas UFS e aw88166 audio. È stata interrotta la pulizia del driver Spider 1Gb ethernet, che è stato rimosso dal kernel. Rimosse le referenze a file binari tivoizzati. È stata implementata la blocco del caricamento dei blob dal codice in Rust.

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