Rilascio del kernel Linux 6.8

Dopo due mesi di sviluppo, Linus Torvalds ha rilasciato il kernel Linux 6.8. Tra le modifiche più significative: driver Xe per GPU Intel, modalità di protezione per i dispositivi a blocchi con file system montati, meccanismo di scheduling Deadline server, ottimizzazione automatica della fusione delle pagine di memoria identiche, primo driver scritto in Rust, chiamate di sistema listmount e statmount, rimozione di bpfilter e SLAB, meccanismo guest_memfd in KVM, profiling delle richieste di dati.

Nella nuova versione sono stati inclusi 15.641 fix da 2.018 sviluppatori, la dimensione della patch è di 44 MB (le modifiche hanno interessato 12.212 file, sono state aggiunte 663.864 righe di codice e rimosse 339.094 righe). Nella versione precedente c'erano 18.405 fix da 2.066 sviluppatori, la dimensione della patch era di 72 MB. Circa il 42% di tutte le modifiche presenti in 6.8 riguardano i driver dei dispositivi, circa il 15% riguardano l'aggiornamento del codice specifico per architetture hardware, il 14% è collegato allo stack di rete, il 6% ai file system e il 3% ai sottosistemi interni del kernel.

Nel repository Git del kernel 6.8 ci sono 9,996 milioni di oggetti, il che suggerisce che il prossimo kernel 6.9 supererà la soglia dei 10 milioni di oggetti git. In precedenza, il cambio dei numeri di ramo 3.x e 4.x ha ben correlato con il numero di oggetti git nel repository: il kernel 3.0 è stato rilasciato quando nel repository c'erano circa 2 milioni di oggetti, mentre il kernel 4.0 a 4 milioni di oggetti. Tuttavia, nel 2019, il rilascio della versione 5.0 ha spezzato questa logica, poiché durante la sua creazione il repository conteneva circa 6,5 milioni di oggetti git.

Le principali novità del kernel 6.8:

  • Sottosistema di disco, input/output e file system
    • È stata aggiunta la modalità di blocco della scrittura diretta sui dispositivi a blocchi su cui sono montati file system (una volta attivata la modalità, l'utente root non potrà apportare modifiche al file system tramite manipolazioni a livello di dispositivo a blocchi). Di default la modalità è disattivata e richiede l'indicazione del parametro BLK_DEV_WRITE_MOUNTED durante la compilazione. Per le partizioni Btrfs, il blocco non funziona ancora, poiché le modifiche necessarie non sono state ancora integrate nel codice di Btrfs.
    • Sono state aggiunte le chiamate di sistema listmount() e statmount(), che consentono di ottenere informazioni dettagliate sui file system montati dallo spazio utente.
    • Nel file system XFS è proseguito il lavoro sull'implementazione della possibilità di utilizzare l'utilità fsck per verificare e correggere i problemi rilevati in modalità online, senza smontare il file system.
    • In Ext4, for blocks smaller than the memory page size, the dioread_nolock call has been implemented to enhance performance by eliminating unnecessary locks. Some functions have been transitioned to use memory pagefolios.
    • Btrfs has added support for the 'nospace_cache' mount flag to disable the cache for free blocks. Some functions have been transitioned to use memory pagefolios.
    • The EROFS file system (Extendable Read-Only File System), designed for use on partitions accessible in read-only mode, has introduced support for subpage compression and improved operation under memory shortage conditions.
    • In the F2FS file system, support for zoned storage devices has been enhanced (dividing into zones of block groups or sectors that only allow sequential data addition with full updates to the entire block group).
    • For the SMB file system, the ability to create block and character device files has been implemented.
    • Bcachefs has added partial support for checking and restoring the integrity of mounted file systems.
    • Support for MD_LINEAR, MD_MULTIPATH, and MD_FAULTY handlers has been deprecated in the device-mapper subsystem, as announced in 2021.
  • Memoria e servizi di sistema
    • In the Zswap subsystem, a feature has been added that activates during memory shortages to force the unloading of 'cold' memory pages that have not been accessed and are unlikely to be needed. Zswap caches pages evicted to swap, storing them in memory in compressed form without resorting to writing to the underlying uncompressed swap area on disk. The changes made during memory shortages allow for a reduction in the size of the Zswap pool stored in RAM and free up memory for the system.
    • A new mode has been proposed for Zswap that completely disables deferred writeback to the actual swap area if the write attempt fails, and does not evict already present pages in the Zswap pool to swap.
    • Nel pianificatore delle attività è stato aggiunto il meccanismo SCHED_DEADLINE server, che risolve il problema della carenza di risorse CPU per i compiti normali a causa della monopolizzazione della CPU da parte di compiti ad alta priorità (real-time). Per prevenire la monopolizzazione della CPU, in precedenza nel kernel era utilizzato il meccanismo Realtime throttling, che tentava di riservare il 5% per compiti a bassa priorità, lasciando il 95% del tempo ai compiti real-time. Questo meccanismo lasciava a desiderare, poiché i compiti normali in molte situazioni non ricevevano tempo di processore. SCHED_DEADLINE server implementa un meccanismo di riservazione delle risorse più efficace.
    • Nella sottosistema DAMON (Data Access MONitor), che consente di monitorare l'accesso del processo ai dati in memoria operativa (ad esempio, è possibile scoprire quali aree della memoria sono state interrogate dal processo e quali sono rimaste inutilizzate), è stato aggiunto un meccanismo per la configurazione automatica dell'aggressività del consumo di memoria basato su quote definite.
    • È stata aggiunta la supporto per le pagine enormi di dimensioni multiple in memoria (mTHP — multi-size Transparent Huge Pages), consentendo di allocare memoria in blocchi di dimensioni maggiori rispetto alla pagina base, ma inferiori a quelle della tradizionale pagina THP.
    • È stata aggiunta la supporto per i grandi folii (page folios, pagine di memoria aggregate) per la memoria anonima (non collegata a FS, ad esempio, allocata tramite malloc). Questa modifica mira a migliorare le prestazioni attraverso l'allocazione di grandi blocchi di memoria durante l'accesso a pagine di memoria non allocate (page faults). Ad esempio, l'uso di grandi folii ha consentito una riduzione del 5% nei tempi di ricompilazione del kernel (con una diminuzione del tempo trascorso a livello kernel del 40%).
    • Nel file di configurazione del kernel è stato aggiunto il parametro TRANSPARENT_HUGEPAGE_NEVER, che consente di disabilitare l'uso delle pagine enormi (Transparent Huge Pages).
    • Nella chiamata di sistema userfaultfd(), che consente di creare gestori per gli accessi alle pagine di memoria non allocate (page faults) nello spazio utente, è stata aggiunta l'operazione UFFDIO_MOVE, che consente, durante la compattazione dell'heap (heap compaction), di spostare le pagine di memoria nello spazio degli indirizzi virtuali senza eseguire l'operazione di allocazione della pagina di memoria. Nei test effettuati, l'uso di UFFDIO_MOVE ha consentito una riduzione del 40% nei tempi di compattazione rispetto all'uso dell'operazione UFFDIO_COPY.
    • Introdotto il meccanismo "KSM advisor", che consente di ottimizzare automaticamente i parametri del sottosistema per la fusione di pagine di memoria identiche (KSM - Kernel Samepage Merging).
    • Continuato 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 di default e non rende Rust una dipendenza di build obbligatoria per il kernel). Nella nuova versione sono state incluse modifiche che aggiungono un wrapper Rust al di sopra del livello di astrazione phylib e utilizzano questo wrapper nel driver ax88796b_rust, che offre supporto per l'interfaccia PHY del controllore Ethernet Asix AX88772A (100MBit). Funzionalmente, il driver in Rust è completamente equivalente al vecchio driver ax88796b, scritto in C, e può essere utilizzato con schede di rete X-Surf 100 dotate del chip AX88796B. Per l'architettura LoongArch è stata fornita la possibilità di scrivere moduli in Rust. È stato effettuato il passaggio all'uso della versione di Rust 1.74.1.
    • Introdotto il meccanismo BPF token, che consente di delegare selettivamente la gestione di determinate funzionalità BPF, come il caricamento di un programma BPF o la creazione di una mappa BPF, a processi non privilegiati nello spazio utente, la cui attendibilità è confermata da un token speciale.
    • Espansa la funzionalità del verificatore dei programmi BPF.
    • Nell'utilità perf è stata aggiunta la supporto per la profilazione dei dati, che consente di monitorare la lettura e la scrittura nelle strutture dati, ad esempio per identificare i campi più spesso modificati nelle strutture. Nei sistemi con processori che supportano la raccolta delle informazioni sulle operazioni di memoria (Intel, AMD, ARM), per accumulare statistiche si dovrebbe utilizzare il comando "perf mem record", mentre per produrre un report sulle accessi alle strutture dati - "perf annotate --data-type".
    • Ottimizzata la performance della gestione delle chiamate di sistema sull'architettura s390 (IBM Z), che ha portato in test a un'accelerazione dell'accesso alla chiamata di sistema di circa l'11%.
    • Fornita la possibilità di modificare le dimensioni dei buffer di tracciamento, utilizzati per memorizzare le informazioni sugli eventi di tracciamento trasmessi nello spazio utente.
    • Il meccanismo di distribuzione della memoria SLAB, precedentemente dichiarato obsoleto, è stato rimosso; ora nel kernel si utilizza solo SLUB. Le motivazioni sono legate a problemi di manutenzione, alla presenza di bug nel codice e alla duplicazione di funzionalità con il più avanzato allocatore SLUB.
    • Nella compilazione del kernel è stata abilitata l'opzione «-Wmissing-prototypes», che genera avvisi per le chiamate a funzioni globali che non hanno una definizione di prototipo.
    • Per l'architettura RISC-V, sui sistemi con supporto per l'estensione SUSP, è stata implementata la transizione in modalità di attesa con salvataggio dello stato nella RAM. È stata fornita la possibilità di utilizzare la chiamata di sistema riscv_hwprobe() per ottenere informazioni sulle estensioni supportate dal set di istruzioni RISC-V.
  • Virtualizzazione e sicurezza
    • Sono state aggiunte nuove chiamate di sistema lsm_list_modules(), lsm_get_self_attr() e lsm_set_self_attr() per visualizzare l'elenco dei moduli LSM (Linux Security Modules) caricati e per ottenere/impostare gli attributi del modulo LSM. È stata introdotta una nuova struttura lsm_ctx per la comunicazione nel contesto LSM tra spazio utente e kernel.
    • Il sottosistema AppArmor è stato aggiornato per utilizzare l'algoritmo SHA-256 per la verifica delle regole, invece degli hash SHA-1.
    • È stata rimossa dal kernel l'implementazione della funzione strlcpy(), inclusa la scorsa estate nella libreria C Glibc 3.38. Strlcpy è un'alternativa alla funzione strncpy(), che offre protezione contro il buffer overflow e garantisce sempre la terminazione della stringa con un byte nullo.
    • Nel hypervisor KVM È stato aggiunto il supporto per il sottosistema guest_memfd (guest-first memory), che offre funzionalità di gestione della memoria, consentendo di implementare capacità e ottimizzazioni non raggiungibili attraverso l'uso del sottosistema di gestione della memoria comune. Ad esempio, guest_memfd consente di allocare e mappare nella macchina virtuale un'area di memoria inaccessibile all'ambiente host, utilizzabile per organizzare calcoli riservati.
    • Per i sistemi guest operanti sotto il hypervisor KVM, è stato abilitato il supporto per la modalità LAM (Linear Address Masking) fornita nei processori Intel, che consente di utilizzare parte dei bit degli indirizzi a 64 bit (dai bit 57 ai 62) per memorizzare metadati non correlati all'indirizzamento.
    • Il hypervisor KVM per sistemi basati sull'architettura ARM64 ha aggiunto il supporto per indirizzi fisici a 52 bit (LPA2). Per i sistemi con architettura x86 è stata fornita la possibilità di compilare senza l'emulazione delle chiamate di hypervisor Hyper-V, riducendo così la dimensione del kernel.
    • È stato aggiunto il driver iaa (IAA Compression Accelerator) per accelerare le operazioni di compressione e decompressione dei dati utilizzando il metodo DEFLATE, sfruttando le capacità degli acceleratori crittografici Intel Analytics Accelerator (IAA).
    • Nel lato dell'ambiente host è stato implementato il supporto per il meccanismo Intel TDX (Trusted Domain Extensions), che consente di creare ambienti guest protetti utilizzando l'hypervisor KVM, in cui viene utilizzata la crittografia della memoria. macchine virtuali.
    • In SELinux è stato aggiunto l'identificatore SID "init", che consente di distinguere i processi in fase di avvio avviati prima dell'applicazione delle politiche di SELinux. È stata migliorata l'interfaccia /sys/fs/selinux per la gestione di SELinux.
  • Sottosistema di rete
    • È stata effettuata una riorganizzazione a basso livello delle strutture dati di rete di base per migliorare l'efficienza della cache. In precedenza, i campi nelle strutture dello stack di rete socks, netdev, netns e mibs erano posizionati man mano che venivano aggiunti, limitando così l'uso della cache della CPU. La revisione del posizionamento delle variabili nelle strutture ha portato a un notevole aumento della velocità di funzionamento di TCP, grazie alla minimizzazione dell'uso delle righe di cache nella fase di trasmissione dei dati e all'ottimizzazione dell'accesso alle variabili. Nei casi di elaborazione di molteplici connessioni TCP parallele, l'accelerazione può raggiungere il 40%.
    • È stata rimossa la sottosistema bpfilter, che utilizzava BPF per filtrare i pacchetti. Bpfilter era disponibile a partire dalla versione 4.18, ma non è mai stato portato a un livello utilizzabile su larga scala. Negli ultimi anni, il codice di bpfilter nel kernel non è stato sviluppato, mentre lo sviluppo continuava da parte di Facebook in un repository separato.
  • Apparecchiatura
    • È stato incluso un nuovo driver drm (Direct Rendering Manager) Xe per GPU basato sull'architettura Intel Xe, che viene utilizzata nelle schede grafiche Intel della famiglia Arc e nella grafica integrata, a partire dai processori Tiger Lake. Il driver Xe è posizionato come base per garantire il funzionamento dei nuovi chip, non legato al codice per il supporto di piattaforme precedenti. Il driver è costruito utilizzando una nuova architettura, in cui vengono utilizzati in modo più attivo i componenti esistenti del sottosistema DRM, così come i componenti standard del driver i915, non vincolati a GPU specifiche, ad esempio, il codice per l'interazione con gli schermi, il modello di memoria e l'implementazione di execbuf. In Mesa, il funzionamento di OpenGL e Vulkan sopra il driver Xe è realizzato a livello di modifiche apportate ai driver Mesa esistenti Iris e ANV.
    • Nel driver i915 è proseguita la realizzazione del supporto per i chip Intel LunarLake (Xe 2). È stato migliorato il supporto per i chip Intel Meteor Lake.
    • Nel driver Nouveau è stata implementata un'impostazione per utilizzare per impostazione predefinita le funzioni del firmware GSP per lavorare con GPU NVIDIA basate su microarchitetture Turing e Ampere, in cui le operazioni di inizializzazione e gestione della GPU sono eseguite da un microcontrollore GSP (GPU System Processor) separato. Quando è attivata l'impostazione, il driver funzionerà tramite chiamate al firmware, invece di programmare direttamente le operazioni di interazione con l'hardware.
    • Nel driver AMDGPU è stato implementato il supporto per ACPI WBRF e VPE DPM, modificata la gestione della velocità del canale PCIe, nei queue utilizzati per la sincronizzazione sono stati coinvolti numeri di sequenza a 64 bit, è stato aggiunto il supporto per meccanismi di gestione del colore specifici per AMD, risolta un problema con il passaggio alla modalità sospensione.
    • È stata aggiunta un'implementazione iniziale del driver per GPU Broadcom VideoCore 7.1, utilizzato nelle schede Raspberry Pi 5.
    • È stato aggiunto un driver per GPU della serie PowerVR 6 basato sulla microarchitettura Rogue di Imagination Technologies.
    • È stata aggiunta la supporto per controller Thunderbolt/USB4 integrati nei chip basati sulla microarchitettura Intel Lunar Lake.
    • Sono stati aggiunti driver per le telecamere utilizzate nei SoC Starfive, GalaxyCore GC2145/GC0308, Chips&Media Wave e THine THP7312.
    • È stata aggiunta la supporto per i controller di gioco NSO (Nintendo Switch Online) — varianti dei vecchi controller SNES (Super Nintendo), Genesis e N64 (Nintendo 64), adattati per Nintendo Switch. È stato aggiunto un driver per i gamepad Adafruit Seesaw. Nel driver xpad è stata aggiunta la supporto per i controller Lenovo Legion Go.
    • Nel driver dts è stata aggiunta la compatibilità con i dispositivi di gioco Powkiddy RK2023, Powkiddy X55 e Anbernic RG351V.
    • Aggiunto supporto per i sistemi audio utilizzati nei chip NXP i.MX8m MICFIL, Qualcomm SM8250, AMD ACP5x, Intel Arrow Lake, SM8550, SM8650 e X1E80100.
    • AMD ha apportato modifiche relative al supporto per la futura serie di processori basata sulla nuova microarchitettura Zen 5.
    • È stato aggiunto il supporto per ARM64 SoC: Qualcomm SM8650 (Snapdragon 8 Gen 3), Qualcomm X1E80100 (Snapdragon X Elite), Samsung Exynos Auto v920, Google GS101 (Tensor G1), MediaTek MT8188 e Unisoc UMS9620 (Tanggula 7).
    • È stato aggiunto il supporto per piattaforme e dispositivi ARM: Huashan Pi, Microsoft Lumia, HTC One Mini 2, Motorola MotoG 4G, Huawei Honor 5X/GR5, Anbernic RG351V, Powkiddy RK2023, Powkiddy X55, ComXpress basato su Marvell CN913x, Chromebook Lenovo, Asus e Acer basati su Mediatek MT8183, Toradex Verdin AM62, schede basate su Allwinner H616/H618.
    • Interrotta la supporto per i processori ARM11 ARMv6K SMP.

Nel frattempo, il Fondo software libero dell'America Latina ha creato una versione completamente libera del kernel 6.8 — Linux-libre 6.8-gnu, ripulito da elementi di firmware e driver contenenti componenti o porzioni di codice non liberi, la cui area di applicazione è limitata dal produttore. Nella versione 6.8 è stato aggiornato il codice per la pulizia dei blob in vari driver e sottosistemi. Sono stati ripuliti i driver Intel qat_420xx, Imagination PowerVR, Intel Xe, Chips&Media Wave5, Intel VSC, Aquantia PHY e Realtek rtw8922a. A causa della rimozione dal kernel, è stata interrotta la pulizia dei driver atmel, hermes, orinoco_usb, libertas_cs e zd1201. È stata effettuata la pulizia dei nomi dei blob nei file dts (devicetree) per le architetture ARM e Aarch64. Risolti i problemi con la pulizia del driver i915.

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