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: supporto per lo sviluppo di driver e moduli in linguaggio Rust, modernizzazione del meccanismo di determinazione delle pagine di memoria utilizzate, un gestore di memoria speciale per i programmi BPF, un sistema di diagnostica dei problemi di memoria KMSAN, un meccanismo di protezione KCFI (Kernel Control-Flow Integrity), implementazione della struttura Maple tree.

Nella nuova versione sono state accettate 15115 correzioni da 2139 sviluppatori, la dimensione della patch è di 51 MB, che è circa due volte più piccola rispetto alle dimensioni delle patch dei kernel 6.0 e 5.19. Le modifiche hanno coinvolto 13165 file, aggiunte 716247 righe di codice, rimosse 304560 righe. Circa il 45% di tutte le modifiche presentate in 6.1 riguardano i driver di dispositivo, circa il 14% delle modifiche sono legate all'aggiornamento del codice specifico per architetture hardware, il 14% è legato allo stack di rete, il 3% ai file system e il 3% ai sottosistemi interni del kernel.

Le principali novità nel kernel 6.1:

  • Memoria e servizi di sistema
    • È stata aggiunta la possibilità di utilizzare il linguaggio Rust come secondo linguaggio per lo sviluppo di driver e moduli del kernel. Il principale motivazione per il supporto di Rust è semplificare la scrittura di driver di dispositivo sicuri e di qualità, riducendo la probabilità di errori durante il lavoro con la memoria. Il supporto per Rust non è attivo per impostazione predefinita e non comporta l'inclusione di Rust tra le dipendenze di compilazione obbligatorie per il kernel. Fino ad ora, nel kernel è stata accettata una versione ridotta minima 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 linguaggio Rust. In futuro, si prevede di aumentare gradualmente le funzionalità esistenti, trasferendo anche altre modifiche dal ramo Rust-for-Linux. Parallelamente, stanno sviluppando progetti per utilizzare l'infrastruttura proposta per lo sviluppo di driver di dispositivi NVMe, del protocollo di rete 9p e della GPU Apple M1.
    • Per i sistemi basati su architetture AArch64, RISC-V e LoongArch con EFI è stata implementata la possibilità di avviare direttamente immagini di kernel compresse. Sono stati aggiunti gestori per il caricamento, l'avvio e lo scaricamento delle immagini di kernel, chiamati direttamente da EFI zboot. Sono stati inoltre aggiunti gestori per l'installazione e la rimozione di protocolli dal database dei protocolli EFI. In precedenza, la decompressione veniva eseguita da un boot loader separato, mentre ora può essere eseguita dallo stesso kernel: l'immagine del kernel è formata come un'applicazione EFI.
    • Sono stati inclusi alcuni patch con l'implementazione di un modello di gestione della memoria a più livelli, che consente di separare banchi di memoria con diverse caratteristiche di prestazione. Ad esempio, le pagine più frequentemente utilizzate possono essere posizionate nella memoria più veloce, mentre le pagine utilizzate raramente possono essere conservate in memoria relativamente più lenta. Nel kernel 6.1 è stato adottato un meccanismo per determinare la presenza di pagine intensamente utilizzate in memoria lenta per il loro trasferimento in memoria veloce, ed è stata anche implementata una concettualizzazione generale dei livelli di memoria e della loro relativa prestazione.
    • È 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 a più livelli, in grado di determinare meglio quali pagine di memoria sono effettivamente utilizzate e quali possono essere spostate nella memoria di swap.
    • È stata aggiunta la supporto per la struttura dati «maple tree», proposta dagli ingegneri di Oracle, che è presentata come una sostituzione più efficiente della struttura «red-black tree». Il maple tree rappresenta una variante dell'albero B, supportando l'indicizzazione per intervallo di valori ed è progettato per un uso efficiente della cache. dei processori moderni. Alcuni sottosistemi di gestione della memoria sono già stati convertiti al maple tree, il che ha avuto un impatto positivo sulla loro performance. In futuro, il maple tree potrebbe essere utilizzato per implementare blocchi per intervallo (range locking).
    • Nella sottosistema BPF è stata aggiunta la possibilità di creare programmi BPF "distruttivi", appositamente progettati per avviare un arresto di emergenza tramite la chiamata crash_kexec(). Questi programmi BPF potrebbero essere necessari a fini di debug per avviare la creazione di un crash dump in un momento specifico. Per accedere alle operazioni distruttive durante il caricamento del programma BPF, è richiesta l'indicazione del flag BPF_F_DESTRUCTIVE, l'attivazione di sysctl kernel.destructive_bpf_enabled e la disponibilità dei diritti CAP_SYS_BOOT.
    • Per i programmi BPF è stata fornita la possibilità di scorrere gli elementi del cgroup, così come di scorrere risorse (file, vma, processi, ecc.) di un determinato thread o task. È stata implementata una nuova mappa di tipo per creare buffer circolari personalizzati (user ring buffer).
    • È stata aggiunta una chiamata speciale per l'allocazione della memoria nei programmi BPF (memory allocator), che garantisce una distribuzione della memoria più sicura nel contesto BPF rispetto al kmalloc() standard.
    • Integrata la prima parte delle modifiche che consentono la creazione di driver per dispositivi di input con interfaccia HID (Human Interface Device), realizzati sotto forma di programmi BPF.
    • È stato completamente rimosso dal kernel il codice per il supporto del formato di file eseguibili a.out, che era stato classificato come obsoleto nella versione 5.1, e a partire dalle versioni 5.18 e 5.19 è stato disattivato 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 in configurazioni predefinite per Linux. Il caricatore per i file a.out può essere implementato interamente nello spazio utente.
    • Per i sistemi basati sull'architettura del set di istruzioni LoongArch, utilizzata nei processori Loongson 3 5000 e che implementa un nuovo RISC ISA, simile a MIPS e RISC-V, è stata realizzata la supporto per eventi di misurazione delle prestazioni (perf event), kexec, kdump e compilazione JIT per BPF.
    • Nell'interfaccia di input/output asincrono io_uring è stata proposta una nuova modalità IORING_SETUP_DEFER_TASKRUN, che consente di posticipare temporaneamente l'esecuzione di lavori associati al buffer circolare fino a quando non arriva una richiesta dall'applicazione, che può essere utilizzata per organizzare l'esecuzione dei lavori in modalità batch e prevenire problemi di latenza a causa della sostituzione dell'applicazione in un momento inadeguato.
    • È stato fornito un modo per iniziare la conversione dell'intervallo di pagine di memoria normali in un insieme di grandi pagine di memoria (Transparent Huge-Pages) nei processi nello spazio utente.
    • È stata aggiunta l'implementazione del dispositivo /dev/userfaultfd, che consente di fornire accesso alla funzionalità della chiamata di sistema userfaultfd() utilizzando i diritti di accesso nel FS. La funzionalità userfaultfd consente di creare gestori per le eccezioni di pagine non allocate (page faults) nello spazio utente.
    • I requisiti per la versione dello strumento GNU Make sono stati elevati: ora è richiesta almeno la versione 3.82 per compilare il kernel.
  • Sottosistema di disco, input/output e file system
    • Sono state apportate significative ottimizzazioni delle prestazioni al file system Btrfs, tra cui un incremento notevole delle prestazioni della chiamata ioctl FIEMAP. È stata aggiunta la supporto alla scrittura buffered asincrona per le applicazioni che utilizzano io_uring. È stata aggiunta la supporto per i file protetti tramite fs-verity nell'operazione "send".
    • Nel file system ext4 sono state aggiunte ottimizzazioni delle prestazioni relative alla gestione del journal e al funzionamento in modalità sola lettura.
    • Nel file system EROFS (Enhanced Read-Only File System), progettato per l'uso su partizioni accessibili in modalità sola lettura, è stata implementata la possibilità di memorizzare dati condivisi che si duplicano in diversi file system.
    • Alla chiamata di sistema statx() è stata aggiunta la possibilità di mostrare informazioni sulla possibilità di applicare operazioni di I/O diretto su un file.
    • Nel sottosistema FUSE (Filesystems in User Space) è stata aggiunta la 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 di funzione indiretta un controllo per identificare alcune forme di comportamento indefinito, che potrebbero potenzialmente compromettere l'ordine normale di esecuzione (control flow) a causa dell'uso di exploit che modificano i puntatori alle funzioni memorizzati in memoria. L'implementazione standard di CFI dal progetto LLVM è stata sostituita con una variante, anch'essa basata su Clang, ma appositamente adattata per proteggere i sottosistemi a basso livello e i kernel dei sistemi operativi. In LLVM, la nuova implementazione sarà proposta nella versione Clang 16 e sarà inclusa nell'opzione "-fsanitize=kcfi". La principale differenza della nuova implementazione è che non è legata alle ottimizzazioni durante la fase di linking (LTO) e non porta alla sostituzione dei puntatori delle funzioni con riferimenti nella tabella delle transizioni.
    • Per i moduli LSM (Linux Security Module) è stata fornita la possibilità di creare handler che intercettano le operazioni di creazione degli 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 rimossa per errore 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 simultaneamente esecuzione e scrittura. In futuro, si sta considerando la possibilità di vietare completamente tale mappatura di memoria.
    • È stato aggiunto un meccanismo di debug KMSAN (Kernel Memory Sanitizer) per identificare l'uso di memoria non inizializzata nel kernel, nonché le perdite di memoria non inizializzata tra lo spazio utente e i dispositivi.
    • Sono stati apportati miglioramenti al generatore di numeri pseudo-casuali CRNG, utilizzato nella chiamata a getrandom. Le modifiche sono state preparate da Jason Donenfeld, autore di VPN WireGuard e mirano a migliorare la sicurezza nell'estrazione di numeri interi pseudo-casuali.
  • Sottosistema di rete
    • Nello stack TCP è stata implementata la possibilità (disabilitata per impostazione predefinita) di utilizzare separatamente le tabelle hash dei socket per ciascun spazio dei nomi, consentendo così di migliorare le prestazioni dei sistemi con un gran numero di spazi dei nomi.
    • Rimosso il codice per supportare il protocollo obsoleto DECnet. Per lo spazio utente sono stati lasciati dei segnaposto API che consentono di compilare applicazioni che utilizzano DECnet, ma queste applicazioni non riusciranno a collegarsi alla rete.
    • Documentato il protocollo netlink.
  • Apparecchiatura
    • Nel driver amdgpu è stata aggiunta la supporto per il passaggio DSC (Display Stream Compression) per la compressione dei dati senza perdite durante lo scambio di informazioni con schermi che supportano risoluzioni molto elevate. È proseguito il lavoro per garantire il supporto delle piattaforme AMD RDNA3 (RX 7000) e CDNA (Instinct). Aggiunto il supporto 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 GFX 11.0.3.
    • Nel driver i915 (Intel) è stata attivata la supporto per la GPU Meteor Lake. Per Meteor Lake e GPU più recenti è assicurato il supporto per l'interfaccia DP 2.0 (DisplayPort). Aggiunti identificatori per le schede grafiche basate sull'architettura Alder Lake S.
    • Aggiunto il supporto per i 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. Aggiunto il supporto ASoC (ALSA System on Chip) per i chip audio integrati Apple Silicon, DSP AMD Rembrandt, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake e Kaby Lake, Mediatek MT8186, DSP NXP i.MX8ULP, Qualcomm SC8280XP, SM8250, SM8450 e Texas Instruments SRC4392.
    • 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.
    • Aggiunto il supporto per i controller AHCI SATA utilizzati negli SoC Baikal-T1.
    • 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 moduli wireless Qualcomm è stato aggiunto il supporto per la scansione spettrale nella banda di 160 MHz, implementato il multithreading NAPI, migliorato il supporto per i chip Wi-Fi Qualcomm WCN6750.
    • Aggiunti driver per la tastiera 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), controller XBOX One Elite, tablet XP-PEN Deco Pro S e Intuos Pro Small (PTH-460).
    • Aggiunto driver per acceleratori crittografici Aspeed HACE (Hash and Crypto Engine).
    • Aggiunto il supporto per i controller Thunderbolt/USB4 integrati Intel Meteor Lake.
    • Aggiunto il supporto per smartphone Sony Xperia 1 IV, Samsung Galaxy E5, E7 e Grand Max, Pine64 Pinephone Pro.
    • Aggiunta la 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. Aggiornati i driver per SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom e NXP.

Contemporaneamente, la Fondazione latinoamericana del software libero ha costituito una variante completamente libera del kernel 6.1 — Linux-libre 6.1-gnu, depurato da elementi di firmware e driver contenenti componenti o sezioni di codice non liberi, la cui applicazione è limitata 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. Aggiornato il codice di pulizia dei blob nei driver e nei sottosistemi amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. Corretto il processo di pulizia dei driver obsoleti tm6000 TV cards, cpia2 v4l, sp8870, av7110.

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