Rilascio del kernel Linux 6.8

Dopo due mesi di sviluppo, Linus Torvalds ha annunciato il rilascio del kernel Linux 6.8. Tra le modifiche più evidenti ci sono: il driver Xe per GPU Intel, la modalità di protezione delle unità a blocchi con file system montati, il meccanismo dello scheduler Deadline server, l'ottimizzazione automatica della fusione di pagine di memoria identiche, il primo driver scritto in Rust, le chiamate di sistema listmount e statmount, la rimozione di bpfilter e SLAB, il meccanismo guest_memfd in KVM e il profilo delle operazioni sui dati.

La nuova versione include 15641 correzioni da 2018 sviluppatori, la dimensione della patch è di 44 MB (le modifiche hanno interessato 12212 file, aggiungendo 663864 righe di codice e rimuovendone 339094). Nella versione precedente c'erano 18405 correzioni da 2066 sviluppatori, con una dimensione della patch di 72 MB. Circa il 42% delle modifiche presentate in 6.8 riguarda i driver dei dispositivi, circa il 15% riguardano aggiornamenti di codice specifico per le architetture hardware, il 14% è correlato allo stack di rete, il 6% ai file system e il 3% ai sottosistemi interni del kernel.

Nel repository Git con il kernel 6.8 ci sono 9,996 milioni di oggetti, il che indica che il prossimo kernel 6.9 supererà la soglia simbolica di 10 milioni di oggetti Git. In precedenza, il cambio di numerazione dei branch 3.x e 4.x aveva 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 al raggiungimento di 4 milioni di oggetti. Tuttavia, nel 2019, il rilascio del 5.0 ha interrotto questa logica, poiché al momento della sua creazione il repository includeva circa 6,5 milioni di oggetti Git.

Innovazioni principali nel kernel 6.8:

  • Sottosistema disco, I/O e file system
    • È stata aggiunta una modalità di blocco della scrittura diretta su dispositivi a blocchi che hanno filesystem montati (una volta attivata, l'utente root non potrà apportare modifiche al filesystem tramite manipolazioni a livello di dispositivo a blocchi). Per impostazione predefinita, la modalità è disabilitata e richiede l'impostazione del parametro BLK_DEV_WRITE_MOUNTED durante la compilazione. Per le partizioni con Btrfs, al momento il blocco non funziona, poiché le modifiche necessarie nel codice di Btrfs non sono ancora state adottate.
    • Sono state aggiunte le chiamate di sistema listmount() e statmount(), che consentono di ottenere informazioni dettagliate sui file system montati dallo spazio utenti.
    • Nella file system XFS è proseguito il lavoro per implementare la possibilità di utilizzare l'utility fsck per controllare e correggere eventuali problemi in modalità online, senza smontare il file system.
    • In Ext4, per i blocchi di dimensioni inferiori alla pagina di memoria, è stato utilizzato il chiamata di sistema dioread_nolock, che migliora le prestazioni eliminando i blocchi non necessari. Alcune funzioni sono state adattate all'uso dei volumi di pagina (page folios).
    • In Btrfs è stata aggiunta la supporto per il flag di montaggio "nospace_cache" per disabilitare la cache dei blocchi liberi. Alcune funzioni sono state adattate all'uso dei volumi di pagina (page folios).
    • Nel file system EROFS (Extendable Read-Only File System), progettato per essere utilizzato su partizioni accessibili in sola lettura, è stata aggiunta la supporto per la compressione delle sub-pagine e migliorato il funzionamento in situazioni di mancanza di memoria.
    • Nel file system F2FS è migliorato il supporto per i dispositivi di archiviazione zonati (separazione in zone di gruppi di blocchi o settori, dove è consentito solo l'aggiunta sequenziale di dati con l'aggiornamento dell'intero gruppo di blocchi).
    • Per il FS SMB è stata implementata la possibilità di creare file di dispositivo blocchi e simbolici.
    • In Bcachefs è stato aggiunto il supporto parziale per la verifica e il ripristino dell'integrità dei FS montati.
    • Nella sottosistema device-mapper è stata interrotta la supporto per i gestori MD_LINEAR, MD_MULTIPATH e MD_FAULTY, dichiarati obsoleti nel 2021.
  • Memoria e servizi di sistema
    • Nel sottosistema Zswap è stata aggiunta la possibilità di scaricare forzatamente le 'pagine fredde' dalla memoria nei reali partizioni di swap quando la memoria è scarsa. Le pagine a cui non è stata effettuata alcuna richiesta e che probabilmente rimarranno inutilizzate possono essere scaricate. Zswap effettua la cache delle pagine espulse nella partizione di swap, mantenendole in memoria RAM compresse il più possibile senza svuotarle nella partizione di swap non compressa reale sul disco. Le modifiche apportate in situazioni di scarsità di memoria consentono di ridurre la dimensione del pool Zswap conservato in RAM e liberare memoria per il sistema.
    • In Zswap è stata proposta una nuova modalità che disabilita completamente la scrittura differita (writeback) nello spazio di swap reale, se il tentativo di scrittura non ha avuto successo, e non svuota le pagine già presenti nel pool di zswap nello spazio di swap.
    • È stato aggiunto al pianificatore dei processi un meccanismo SCHED_DEADLINE server, che risolve il problema della carenza di risorse CPU per i processi normali a causa della monopolizzazione della CPU da parte di processi ad alta priorità (realtime). Per evitare la monopolizzazione della CPU, nel kernel era precedentemente utilizzato un meccanismo di Realtime throttling, che cercava di riservare il 5% per le attività a bassa priorità, lasciando il 95% del tempo alle attività realtime. Questo meccanismo lasciava a desiderare poiché i processi normali, in molte situazioni, non ricevevano il tempo di CPU dovuto. SCHED_DEADLINE server implementa un meccanismo di riservazione delle risorse più efficiente.
    • Nel sottosistema DAMON (Data Access MONitor), che consente di monitorare l'accesso dei processi ai dati nella memoria RAM (ad esempio, è possibile scoprire quali aree di memoria sono state richieste 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 di memoria ingrandite multi-size (mTHP — multi-size Transparent Huge Pages), che consente l'allocazione di memoria in blocchi più grandi rispetto alla pagina base, ma più piccoli delle tradizionali pagine THP.
    • È stata introdotta la supporto per i grandi fogli (page folios, pagine di memoria aggregate) per la memoria anonima (non legata al file system, ad esempio, allocata tramite malloc). Questa modifica mira a migliorare le prestazioni allocando grandi blocchi di memoria quando si accede a pagine di memoria non allocate (page faults). Ad esempio, l'uso di grandi fogli ha consentito una riduzione del 5% nel tempo di ricompilazione del kernel (con una riduzione del tempo speso a livello di kernel del 40%).
    • Nel file di configurazione del kernel è stato aggiunto il parametro TRANSPARENT_HUGEPAGE_NEVER, che consente di disattivare l'uso delle pagine di memoria grandi (Transparent Huge Pages).
    • Nella chiamata di sistema userfaultfd(), che consente di creare gestori per le interruzioni delle pagine di memoria non allocate (page faults) nello spazio utente, è stata aggiunta l'operazione UFFDIO_MOVE, che permette, durante la compattazione dell'heap, di spostare le pagine di memoria nello spazio degli indirizzi virtuali senza eseguire l'operazione di allocazione della pagina di memoria. Nei test condotti, l'uso di UFFDIO_MOVE ha ridotto il tempo di compattazione del 40% rispetto all'uso dell'operazione UFFDIO_COPY.
    • È stato aggiunto il meccanismo "KSM advisor", che consente di ottimizzare automaticamente i parametri del sottosistema di fusione delle pagine di memoria identiche (KSM — Kernel Samepage Merging).
    • Prosegue il porting delle modifiche dalla branch Rust-for-Linux, relative all'uso del linguaggio Rust come secondo linguaggio per lo sviluppo di driver e moduli del kernel (il supporto di Rust non è attivo per impostazione predefinita e non porta all'inclusione di Rust tra le dipendenze di compilazione obbligatorie del kernel). La nuova versione include modifiche che aggiungono un binding Rust sopra il livello di astrazione phylib, utilizzando questo binding il driver ax88796b_rust, che fornisce supporto per l'interfaccia PHY del controller Ethernet Asix AX88772A (100MBit). Funzionalmente, il driver in Rust è completamente equivalente al vecchio driver ax88796b scritto in C e può essere utilizzato con le schede di rete X-Surf 100 dotate del chip AX88796B. Per l'architettura LoongArch è stata fornita la possibilità di scrivere moduli in Rust. È stata effettuata la transizione all'uso della release di Rust 1.74.1.
    • Implementato il meccanismo BPF token, che consente di delegare selettivamente l'elaborazione di determinate capacità 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.
    • Ampliata la funzionalità del verificatore dei programmi BPF.
    • L'utilità perf ha aggiunto il supporto per il profiling dei dati, consentendo di monitorare la lettura e la scrittura nelle strutture dati, ad esempio, per identificare i campi più frequentemente modificati nelle strutture. Su sistemi con processori che supportano la raccolta di informazioni sulle operazioni di memoria (Intel, AMD, ARM), per raccogliere statistiche è necessario utilizzare il comando "perf mem record", mentre per visualizzare un rapporto sugli accessi alle strutture dati si utilizza "perf annotate —data-type".
    • Ottimizzata la performance nella gestione delle chiamate di sistema sull'architettura s390 (IBM Z), che ha portato a un'accelerazione del 11% nei test del tempo di ingresso nelle chiamate di sistema.
    • Introdotta la possibilità di modificare le dimensioni dei buffer di tracciamento utilizzati per la memorizzazione delle informazioni sugli eventi di tracciamento, trasferiti nello spazio utente.
    • È stato rimosso il meccanismo di allocazione della memoria SLAB, precedentemente dichiarato obsoleto, e ora nel kernel si utilizza esclusivamente SLUB. Le ragioni includono problemi di manutenzione, la presenza di bug nel codice e la duplicazione delle funzionalità con un allocatore più avanzato come SLUB.
    • Durante la compilazione del kernel è stato abilitato il flag «-Wmissing-prototypes», che genera avvisi per le chiamate a funzioni globali che non hanno una definizione di prototipo.
    • Per l'architettura RISC-V, nei sistemi che supportano l'estensione SUSP SBI, è stata implementata la possibilità di passare in modalità attesa conservando lo stato nella RAM. È stata fornita la possibilità di utilizzare la chiamata di sistema riscv_hwprobe() per ottenere informazioni sulle estensioni supportate dell'architettura del 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 aggiunta una nuova struttura lsm_ctx per la comunicazione nel contesto LSM tra lo spazio utente e il kernel.
    • Il sottosistema AppArmor è stato aggiornato per utilizzare l'algoritmo SHA-256 per la verifica delle regole, al posto degli hash SHA-1.
    • L'implementazione della funzione strlcpy() è stata rimossa dal kernel, dopo essere stata inclusa nella libreria C Glibc 3.38 durante l'estate. Strlcpy è un'alternativa alla funzione strncpy(), che offre protezione contro il buffer overflow e garantisce l'aggiunta di un byte nullo terminante.
    • Nel hypervisor KVM è stata aggiunta la supporto per il sottosistema guest_memfd (memoria guest-first), che fornisce funzioni di gestione della memoria, permettendo di realizzare capacità e ottimizzazioni inaccessibili usando il sottosistema di gestione della memoria condiviso. Ad esempio, guest_memfd consente di allocare e riflettere su un sistema guest un'area di memoria inaccessibile all'ambiente host, che può essere utilizzata per implementare calcoli riservati.
    • Per i sistemi guest in esecuzione sotto l'hypervisor KVM, è stata attivata la supporto per la modalità LAM (Linear Address Masking) fornita dai processori Intel, che consente di utilizzare alcuni bit degli indirizzi a 64 bit (dai bit 57 ai 62) per memorizzare metadati non correlati all'indirizzamento.
    • Nel hypervisor KVM per sistemi basati su architettura ARM64 è stata aggiunta la supporto per indirizzi fisici a 52 bit (LPA2). Per i sistemi con architettura x86 è fornita la possibilità di compilazione senza l'emulazione delle hypercall Hyper-V, riducendo così le dimensioni del kernel.
    • È stato aggiunto il driver iaa (IAA Compression Accelerator) per accelerare le operazioni di compressione e decompressione dei dati mediante il metodo DEFLATE, sfruttando le capacità degli acceleratori crittografici Intel Analytics Accelerator (IAA).
    • Sul lato dell'ambiente host è stata implementata la supporto per il meccanismo Intel TDX (Trusted Domain Extensions), che consente, utilizzando l'hypervisor KVM, di creare ambienti guest protetti in cui viene utilizzata la crittografia della memoria. di macchine virtuali.
    • In SELinux è stato aggiunto l'identificatore SID «init», che consente di evidenziare i processi avviati nella fase iniziale di avvio, eseguiti prima dell'applicazione delle politiche 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, eseguita per migliorare l'efficienza della memorizzazione nella cache. In precedenza, i campi nelle strutture dello stack di rete socks, netdev, netns e mibs erano disposti man mano che venivano aggiunti, limitando l'uso della cache del processore. La revisione della posizione delle variabili nelle strutture ha portato a un notevole incremento della velocità di funzionamento del TCP, grazie alla minimizzazione dell'uso delle righe della cache nella fase di trasmissione dei dati e all'ottimizzazione dell'accesso alle variabili. Nei casi di gestione di molte connessioni TCP in parallelo, il miglioramento può raggiungere il 40%.
    • È stato rimosso il sottosistema bpfilter, che utilizza BPF per il filtraggio dei pacchetti. Il bpfilter era stato introdotto a partire dal rilascio 4.18, ma non è mai stato portato a un livello adatto per un uso diffuso. Negli ultimi anni, il codice del bpfilter nel kernel non è stato sviluppato, mentre lo sviluppo è proseguito da parte di Facebook in un repository separato.
  • Attrezzature
    • È stato incluso un nuovo driver drm (Direct Rendering Manager) Xe per GPU basate sull'architettura Intel Xe, utilizzata nelle schede grafiche della famiglia Intel Arc e nella grafica integrata a partire dai processori Tiger Lake. Il driver Xe è progettato come base per supportare i nuovi chip, non vincolato al codice per il supporto di piattaforme più vecchie. È costruito utilizzando una nuova architettura che sfrutta in modo più attivo i componenti esistenti del sottosistema DRM, nonché i componenti standard del driver i915, che non sono legati a specifici GPU, come ad esempio il codice per l'interazione con i display, il modello di memoria e l'implementazione di execbuf. In Mesa, il supporto per OpenGL e Vulkan sopra il driver Xe è realizzato a livello delle modifiche apportate ai driver Mesa esistenti, Iris e ANV.
    • Nel driver i915 continua il lavoro per implementare il supporto per i chip Intel LunarLake (Xe 2). È migliorato il supporto per i chip Intel Meteor Lake.
    • Nel driver Nouveau è stata implementata un'impostazione per utilizzare per default le funzionalità di firmware GSP per il funzionamento con le GPU NVIDIA basate sulle architetture Turing e Ampere, dove le operazioni di inizializzazione e controllo della GPU sono eseguite da un microcontrollore GSP (GPU System Processor). Abilitando l'impostazione, il driver opererà tramite la comunicazione con il firmware, anziché programmare direttamente le operazioni di interazione con l'hardware.
    • Nel driver AMDGPU è stato implementato il supporto per ACPI WBRF e VPE DPM, è stata modificata la gestione della velocità della connessione PCIe, sono stati utilizzati numeri di sequenza a 64 bit nelle code di sincronizzazione, è stato aggiunto il supporto per meccanismi di gestione del colore specifici di AMD, ed è stato risolto un problema di sospensione.
    • È stata aggiunta un'implementazione iniziale del driver per la GPU Broadcom VideoCore 7.1, utilizzata nelle schede Raspberry Pi 5.
    • È stato aggiunto un driver per la GPU della serie PowerVR 6 basata sull'architettura Rogue di Imagination Technologies.
    • È stato aggiunto il supporto per i controller Thunderbolt/USB4 integrati nei chip basati sull'architettura Intel Lunar Lake.
    • Sono stati aggiunti driver per le fotocamere utilizzate nel SoC Starfive, GalaxyCore GC2145/GC0308, Chips&Media Wave e THine THP7312.
    • È stata aggiunta la compatibilità con i controller di gioco NSO (Nintendo Switch Online) — opzioni per controller più vecchi come SNES (Super Nintendo), Genesis e N64 (Nintendo 64), adattati per Nintendo Switch. È stato aggiunto un driver per i gamepad Adafruit Seesaw. Il driver xpad ora supporta i controller Lenovo Legion Go.
    • È stata aggiunta la compatibilità con i dispositivi di gioco Powkiddy RK2023, Powkiddy X55 e Anbernic RG351V al driver dts.
    • È stato aggiunto il 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 basati sulla nuova microarchitettura Zen 5.
    • È stato aggiunto il supporto per SoC ARM64: 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 schede 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.
    • È stata interrotta la compatibilità con i processori ARM11 ARMv6K SMP.

Nel contempo, la Fondazione Latinoamericana per il Software Libero ha formato una versione completamente libera del kernel 6.8 — Linux-libre 6.8-gnu, liberato da elementi di firmware e driver contenenti componenti non liberi o porzioni di codice la cui area di applicazione è limitata dal produttore. Nella release 6.8 è stato aggiornato il codice di pulizia dei blob in vari driver e sottosistemi. È stata effettuata una pulizia dei driver Intel qat_420xx, Imagination PowerVR, Intel Xe, Chips&Media Wave5, Intel VSC, Aquantia PHY e Realtek rtw8922a. A seguito della rimozione dal kernel, è stata interrotta la pulizia dei driver atmel, hermes, orinoco_usb, libertas_cs e zd1201. È stata effettuata una pulizia dei nomi dei blob nei file dts (devicetree) per le architetture ARM e Aarch64. Sono stati risolti problemi con la pulizia del driver i915.

Fonte: opennet.ru

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