Rilascio del kernel Linux 6.1

Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 6.1. Tra le modifiche più significative ci sono: supporto per lo sviluppo di driver e moduli in linguaggio Rust, modernizzazione del meccanismo di identificazione delle pagine di memoria utilizzate, un gestore di memoria dedicato per programmi BPF, un sistema di diagnostica dei problemi di memoria KMSAN, un meccanismo di protezione KCFI (Kernel Control-Flow Integrity) e l'implementazione della struttura Maple tree.

Nella nuova versione sono stati accettati 15115 correttivi da 2139 sviluppatori, la dimensione della patch è di 51 MB, che è circa la metà della dimensione delle patch delle versioni 6.0 e 5.19. Le modifiche hanno interessato 13165 file, sono state aggiunte 716247 righe di codice e rimosse 304560 righe. Circa il 45% delle modifiche presentate in 6.1 riguarda i driver dei dispositivi, circa il 14% è correlato all'aggiornamento del codice specifico per architetture hardware, il 14% è relativo allo stack di rete, il 3% ai file system e il 3% alle sotto-sistemi interni del kernel.

Novità principali nel kernel 6.1:

  • Memoria e servizi di sistema
    • È stata aggiunta la possibilità di utilizzare il linguaggio Rust come seconda lingua per lo sviluppo di driver e moduli del kernel. Il principale motivo per supportare Rust è semplificare la scrittura di driver sicuri e di alta qualità riducendo la probabilità di errori nella gestione della memoria. Il supporto per Rust è disattivato di default e non implica l'inclusione di Rust tra le dipendenze di build obbligatorie del kernel. Finora è stata accettata una versione minima ridotta delle patch, che è stata ridotta da 40 a 13 mila righe di codice e fornisce solo il minimo necessario per la compilazione di un semplice modulo del kernel scritto in Rust. In futuro, si prevede di espandere progressivamente le funzionalità disponibili trasferendo anche altre modifiche dalla ramificazione Rust-for-Linux. Parallelamente, si stanno sviluppando progetti per utilizzare l'infrastruttura proposta per sviluppare driver NVMe, il protocollo di rete 9p e GPU Apple M1 in linguaggio Rust.
    • Per i sistemi basati su architetture AArch64, RISC-V e LoongArch con EFI, è stata attivata la possibilità di avvio diretto da immagini del kernel compresse. Sono stati aggiunti gestori per il caricamento, l'avvio e il download delle immagini del kernel, invocati direttamente da EFI zboot. Sono stati aggiunti anche gestori per l'installazione e la rimozione di protocolli dal database dei protocolli EFI. In precedenza, l'estrazione veniva eseguita da un bootloader separato, ora può essere eseguita direttamente dal gestore nel kernel — l'immagine del kernel è formata come un'applicazione EFI.
    • È stata accettata una parte delle patch che implementano un modello di gestione della memoria multilivello, consentendo di separare banchi di memoria con diverse caratteristiche di prestazioni. Ad esempio, le pagine più intensamente utilizzate possono essere posizionate nella memoria più veloce, mentre le pagine raramente utilizzate possono essere archiviate in memoria relativamente più lenta. Nel kernel 6.1 è stato implementato un meccanismo per determinare la posizione delle pagine intensamente utilizzate in memoria lenta per il loro trasferimento in memoria veloce, così come è stata realizzata una concezione generale dei livelli di memoria e delle loro prestazioni relative.
    • È stato incluso un meccanismo MGLRU (Multi-Generational LRU), che ha sostituito la vecchia implementazione LRU (Least Recently Used) basata su due code con una struttura multistadio, in grado di identificare meglio quali pagine di memoria vengono effettivamente utilizzate e quali possono essere espulse nella sezione di swap.
    • È stato aggiunto il supporto per la struttura dati "maple tree" proposta dagli ingegneri di Oracle, che si propone come una sostituzione più efficiente della struttura "red-black tree". La maple tree è una variante dell'albero B, che supporta l'indicizzazione per intervalli di valori ed è progettata per un uso efficiente della cache. dei processori moderniAlcuni sotto-sistemi di gestione della memoria sono già stati convertiti alla maple tree, migliorando le loro prestazioni. In futuro, la maple tree potrebbe essere utilizzata per implementare blocchi per intervallo (range locking).
    • Nella sotto-sistema BPF è stata aggiunta la possibilità di creare "programmi BPF distruttivi", progettati per avviare un arresto di emergenza tramite la chiamata crash_kexec(). Tali programmi BPF possono essere richiesti a scopi di debug per avviare la creazione di un crash dump in un momento specifico. Per accedere alle operazioni distruttive durante il caricamento dei programmi BPF, è necessario specificare il flag BPF_F_DESTRUCTIVE, attivare sysctl kernel.destructive_bpf_enabled e avere diritti CAP_SYS_BOOT.
    • Per i programmi BPF è stata fornita la possibilità di iterare sugli elementi cgroup, oltre all'iterazione delle risorse (file, vma, processi, ecc.) di un determinato thread o attività. È stato implementato un nuovo tipo di mappa per creare buffer circolari personalizzati (user ring buffer).
    • È stata aggiunta una chiamata speciale per la gestione della memoria nei programmi BPF (memory allocator), che garantisce una distribuzione della memoria più sicura nel contesto BPF rispetto al kmalloc() standard.
    • È stata integrata la prima parte delle modifiche che consentono la creazione di driver per dispositivi di input con interfaccia HID (Human Interface Device), implementati sotto forma di programmi BPF.
    • Il codice per il supporto del formato di file eseguibili a.out è stato completamente rimosso dal kernel, che era stato dichiarato obsoleto nella versione 5.1, e a partire dalle versioni 5.18 e 5.19 è stato disabilitato per le architetture principali. Il formato a.out non è più utilizzato nei sistemi Linux, e la generazione di file a.out non è supportata dagli strumenti moderni nelle configurazioni predefinite per Linux. Il caricatore per i file a.out può essere interamente implementato nello spazio utente.
    • Per i sistemi basati sull'architettura instruction set LoongArch, utilizzata nei processori Loongson 3 5000 e che implementa un nuovo RISC ISA simile a MIPS e RISC-V, è stato implementato il supporto per eventi di misurazione delle performance (perf event), kexec, kdump e JIT compilation BPF.
    • Nell'interfaccia di I/O asincrono io_uring è stata proposta una nuova modalità IORING_SETUP_DEFER_TASKRUN, che consente di posticipare temporaneamente l'esecuzione dei lavori collegati al buffer circolare fino a quando non viene ricevuta una richiesta dall'applicazione, il che può essere utilizzato per organizzare l'esecuzione dei lavori in modalità batch e prevenire problemi di latenza dovuti alla sostituzione dell'applicazione in un momento inopportuno.
    • Ai processi nello spazio utente è stato dato la possibilità di avviare la conversione di un intervallo di normali pagine di memoria in un insieme di grandi pagine di memoria (Transparent Huge-Pages).
    • È stata aggiunta l'implementazione del dispositivo /dev/userfaultfd, che consente di accedere alla funzionalità della chiamata di sistema userfaultfd() utilizzando i diritti di accesso nel FS. La funzionalità userfaultfd consente di creare gestori per le eccezioni relative a pagine di memoria non allocate (page faults) nello spazio utente.
    • Sono stati aumentati i requisiti per la versione dello strumento GNU Make: ora per compilare il kernel è necessaria almeno la versione 3.82.
  • Sottosistema disco, I/O e file system
    • Sono state apportate significative ottimizzazioni delle prestazioni al file system Btrfs, tra cui un notevole incremento delle prestazioni nella chiamata ioctl FIEMAP. È stato aggiunto il supporto per la scrittura bufferizzata asincrona per le applicazioni che utilizzano io_uring. Nell'operazione 'send' è stato aggiunto il supporto per i file protetti tramite fs-verity.
    • Nel file system ext4 sono state aggiunte ottimizzazioni delle prestazioni legate alla gestione del journaling e al funzionamento in modalità sola lettura.
    • Nel file system EROFS (Enhanced Read-Only File System), destinato all'uso su partizioni accessibili in sola lettura, è stata implementata la possibilità di condividere dati che si duplicano in diversi FS.
    • Nella chiamata di sistema statx() è stata aggiunta la possibilità di restituire informazioni sulla possibilità di applicare l'I/O diretto a un file.
    • Nella sottosistema FUSE (Filesystems in User Space) è stato aggiunto il supporto per la creazione di file temporanei con il flag O_TMPFILE.
  • Virtualizzazione e sicurezza
    • È stata sostituita l'implementazione del meccanismo di protezione CFI (Control Flow Integrity), che aggiunge prima di ogni chiamata indiretta a una funzione un controllo per rilevare alcune forme di comportamento indefinito che potrebbero potenzialmente compromettere l'ordine normale di esecuzione (control flow) a causa di exploit che modificano i puntatori alle funzioni memorizzati in memoria. L'implementazione standard di CFI dal progetto LLVM è stata sostituita con una variante, anche essa basata sull'uso di Clang, ma appositamente adattata per proteggere sottosistemi a basso livello e nuclei di sistemi operativi. In LLVM, la nuova implementazione sarà proposta nella versione Clang 16 e sarà inclusa con l'opzione '-fsanitize=kcfi'. La principale differenza della nuova implementazione è che non è legata alle ottimizzazioni a livello di collegamento (LTO) e non porta alla sostituzione dei puntatori delle funzioni con riferimenti nella tabella di trasferimento.
    • Per i moduli LSM (Linux Security Module) è stata fornita la possibilità di creare gestori che intercettano le operazioni di creazione di spazi dei nomi.
    • Sono stati forniti strumenti per la verifica delle firme digitali PKCS#7 nei programmi BPF.
    • In /dev/random è stata ripristinata la possibilità di apertura in modalità non bloccante (O_NONBLOCK), che era stata accidentalmente rimossa nel kernel 5.6.
    • Nei sistemi con architettura x86 è stato aggiunto un avviso in caso di mappatura da parte dei sottosistemi del kernel di pagine di memoria che consentono sia l'esecuzione che la scrittura. In futuro si sta considerando la possibilità di vietare completamente tale mappatura della memoria.
    • È stato aggiunto un meccanismo di debug KMSAN (Kernel Memory Sanitizer) per individuare l'uso di memoria non inizializzata nel kernel, così come le perdite di memoria non inizializzata tra lo spazio utente e i dispositivi.
    • Sono stati apportati miglioramenti al generatore crittografico di numeri pseudocasuali CRNG, utilizzato nella chiamata getrandom. Le modifiche sono state preparate da Jason Donenfeld, l'autore di VPN WireGuard e sono mirate a migliorare la sicurezza dell'estrazione di numeri interi pseudocasuali.
  • Sottosistema di rete
    • Nello stack TCP è stata implementata la possibilità (disabilitata di default) di utilizzare tabelle hash separategi dei socket per ciascun namespace, migliorando così le prestazioni dei sistemi con un gran numero di namespace.
    • È stato rimosso il codice per supportare il protocollo obsoleto DECnet. Sono state mantenute le API di sostegno per lo spazio utente, consentendo di compilare applicazioni che utilizzano DECnet, ma tali applicazioni non potranno connettersi alla rete.
    • Il protocollo netlink è stato documentato.
  • Attrezzature
    • Nel driver amdgpu è stato aggiunto il supporto per il passaggio DSC (Display Stream Compression) per la compressione senza perdita dei dati durante lo scambio di informazioni con schermi che supportano risoluzioni molto elevate. È continuato il lavoro per garantire il supporto delle piattaforme AMD RDNA3 (RX 7000) e CDNA (Instinct). Sono stati aggiunti supporti per i componenti IP DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x e GMC 11.x. Nel driver amdkfd (per GPU discrete AMD, come Polaris) è stato implementato il supporto per GFX 11.0.3.
    • Nel driver i915 (Intel) è stato attivato il supporto per la GPU Meteor Lake. Per Meteor Lake e GPU più recenti è stato garantito il supporto per l'interfaccia DP 2.0 (DisplayPort). Sono stati aggiunti identificatori per le schede grafiche basate sull'architettura Alder Lake S.
    • È stato aggiunto il supporto per le sottosistemi audio implementati nei processori Apple Silicon, Intel SkyLake e Intel KabyLake. Nel driver audio CS35L41 HDA è stato garantito il supporto per la modalità sleep. È stato aggiunto il supporto ASoC (ALSA System on Chip) per i chip audio integrati Apple Silicon, AMD Rembrant DSPs, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake e Kaby Lake, Mediatek MT8186, DSPs NXP i.MX8ULP, Qualcomm SC8280XP, SM8250, SM8450 e Texas Instruments SRC4392.
    • È stato aggiunto il supporto per i pannelli LCD Samsung LTL101AL01, B120XAN01.0, R140NWF5 RH, Densitron DMT028VGHMCMI-1A TFT, AUO B133UAN02.1, IVO M133NW4J-R3, Innolux N120ACA-EA1, AUO B116XAK01.6, BOE NT116WHM-N21, INX N116BCA-EA2, INX N116BCN-EA1, Multi-Inno Technology MI0800FT-9.
    • È stato aggiunto il supporto per i controller SATA AHCI utilizzati in SoC Baikal-T1.
    • È stato aggiunto il supporto per i chip Bluetooth MediaTek MT7921, Intel Magnetor (CNVi, Integrated Connectivity), Realtek RTL8852C, RTW8852AE e RTL8761BUV (Edimax BT-8500).
    • Nel driver ath11k per i moduli wireless Qualcomm è stato aggiunto il supporto per la scansione spettrale nella gamma 160 MHz, è stato implementato un NAPI multithreading, migliorato il supporto per i chip Wi-Fi Qualcomm WCN6750.
    • Sono stati aggiunti driver per la tastiera del PinePhone, touchpad InterTouch (ThinkPad P1 G3), X-Box Adaptive Controller, PhoenixRC Flight Controller, VRC-2 Car Controller, DualSense Edge Controller, pannelli di controllo IBM (IBM Operation Panel), telecomandi XBOX One Elite, tavolette XP-PEN Deco Pro S e Intuos Pro Small (PTH-460).
    • È stato aggiunto un driver per gli acceleratori crittografici Aspeed HACE (Hash and Crypto Engine).
    • È stato aggiunto il supporto per i controller Thunderbolt/USB4 integrati Intel Meteor Lake.
    • È stato aggiunto il supporto per gli smartphone Sony Xperia 1 IV, Samsung Galaxy E5, E7 e Grand Max, Pine64 Pinephone Pro.
    • È stato aggiunto il supporto per ARM SoC e schede: AMD DaytonaX, Mediatek MT8186, Rockchips RK3399 e RK3566, TI AM62A, NXP i.MX8DXL, Renesas R-Car H3Ne-1.7G, Qualcomm IPQ8064-v2.0, IPQ8062, IPQ8065, Kontron SL/BL i.MX8MM OSM-S, MT8195 (Acer Tomato), Radxa ROCK 4C+, NanoPi R4S Enterprise Edition, JetHome JetHub D1p. I driver per SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom e NXP sono stati aggiornati.

Nel frattempo, la Fondazione Latinoamericana per il Software Libero ha realizzato una versione completamente libera del kernel 6.1 — Linux-libre 6.1-gnu, ripulita da elementi di firmware e driver contenenti componenti non liberi o sezioni di codice, il cui uso è limitato dal produttore. Nel nuovo rilascio è stata effettuata la pulizia del nuovo driver rtw8852b e dei file DTS per diversi SoC Qualcomm e MediaTek con processori basati sull'architettura AArch64. Il codice di pulizia dei blob nei driver e nei sotto-sistemi amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI è stato aggiornato. È stata corretta la pulizia dei driver obsoleti tm6000 TV cards, cpia2 v4l, sp8870, av7110.

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