Rilascio del kernel Linux 5.17

Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 5.17. Tra i cambiamenti più notevoli: un nuovo sistema di gestione delle prestazioni per processori AMD, la capacità di mappare ricorsivamente gli ID utente nei file system, supporto per programmi BPF compilati portatili, una transizione dal generatore di numeri pseudo-casuali all'algoritmo BLAKE2s, un'utilità RTLA per l'analisi dell'esecuzione in tempo reale, un nuovo backend fscache per la memorizzazione nella cache dei file system di rete, la possibilità di allegare nomi a operazioni mmap anonime.

La nuova versione include 14203 correzioni da 1995 sviluppatori, la dimensione della patch è di 37 MB (le modifiche hanno interessato 11366 file, sono state aggiunte 506043 righe di codice, 250954 righe sono state cancellate). Circa il 44% di tutte le modifiche introdotte nella versione 5.17 sono correlate ai driver di dispositivo, circa il 16% delle modifiche è correlato all'aggiornamento del codice specifico delle architetture hardware, il 15% è correlato allo stack di rete, il 4% è correlato ai file system e il 4% sono legati ai sottosistemi interni del kernel.

Principali innovazioni nel kernel 5.17:

  • Sottosistema disco, I/O e file system
    • Implementata la possibilità di mappatura annidata degli ID utente dei file system montati, utilizzata per confrontare i file di un utente specifico su una partizione esterna montata con un altro utente sul sistema corrente. La funzionalità aggiunta consente di utilizzare in modo ricorsivo la mappatura su file system per i quali la mappatura è già applicata.
    • Il sottosistema fscache, utilizzato per organizzare la memorizzazione nella cache nel file system locale dei dati trasferiti attraverso i file system di rete, è stato completamente riscritto. La nuova implementazione si distingue per una significativa semplificazione del codice e la sostituzione di complesse operazioni di pianificazione e tracciamento degli stati degli oggetti con meccanismi più semplici. Il supporto per il nuovo fscache è implementato nel file system CIFS.
    • Il sottosistema di tracciamento degli eventi in fanotify FS implementa un nuovo tipo di evento, FAN_RENAME, che consente di intercettare immediatamente l'operazione di ridenominazione di file o directory (in precedenza, per elaborare le rinominazioni venivano utilizzati due eventi separati FAN_MOVED_FROM e FAN_MOVED_TO).
    • Il file system Btrfs ha ottimizzato le operazioni di logging e fsync per directory di grandi dimensioni, implementate copiando solo le chiavi di indice e riducendo la quantità di metadati registrati. È stato fornito il supporto per l'indicizzazione e la ricerca in base alla dimensione dei record dello spazio libero, che ha ridotto la latenza di circa il 30% e ridotto il tempo di ricerca. Autorizzato a interrompere le operazioni di deframmentazione. La possibilità di aggiungere dispositivi durante il bilanciamento tra le unità è disabilitata, ad es. quando si monta un file system con l'opzione skip_balance.
    • È stata proposta una nuova sintassi per il montaggio del file system Ceph, risolvendo i problemi esistenti associati al collegamento agli indirizzi IP. Oltre agli indirizzi IP, ora puoi utilizzare l'identificatore del cluster (FSID) per identificare il server: mount -t ceph [email protected]_nome=/[sottodir] mnt -o mon_addr=monip1[:porta][/monip2[:porta]]
    • Il file system Ext4 è stato spostato in una nuova API di montaggio che separa i passaggi di analisi delle opzioni di montaggio e di configurazione del superblocco. Abbiamo eliminato il supporto per le opzioni di montaggio lazytime e nolazytime, che erano state aggiunte come modifica temporanea per facilitare la transizione di util-linux per utilizzare il flag MS_LAZYTIME. Aggiunto supporto per l'impostazione e la lettura delle etichette nel FS (ioctl FS_IOC_GETFSLABEL e FS_IOC_SETFSLABEL).
    • NFSv4 ha aggiunto il supporto per lavorare con file system senza distinzione tra maiuscole e minuscole nei nomi di file e directory. NFSv4.1+ aggiunge il supporto per la definizione di sessioni aggregate (trunking).
  • Servizi di memoria e di sistema
    • Aggiunto driver amd-pstate per fornire il controllo dinamico della frequenza per prestazioni ottimali. Il driver supporta CPU e APU AMD a partire dalla generazione Zen 2, sviluppato insieme a Valve ed è finalizzato a migliorare l'efficienza della gestione energetica. Per le modifiche adattative della frequenza, viene utilizzato il meccanismo CPPC (Collaborative Processor Performance Control), che consente di modificare gli indicatori in modo più accurato (non limitato a tre livelli di prestazioni) e rispondere più rapidamente ai cambiamenti di stato rispetto allo stato P basato su ACPI precedentemente utilizzato driver (CPUFreq).
    • Il sottosistema eBPF offre un gestore bpf_loop(), che fornisce un modo alternativo per organizzare i loop nei programmi eBPF, più veloce e più semplice per la verifica da parte di un verificatore.
    • A livello di kernel è implementato il meccanismo CO-RE (Compile Once - Run Everywhere) che consente di compilare il codice dei programmi eBPF una sola volta e di utilizzare uno speciale caricatore universale che adatta il programma caricato al kernel corrente e alle tipologie BTF (Formato tipo BPF).
    • È possibile assegnare nomi ad aree di memoria privata anonima (allocata tramite malloc), il che può semplificare il debug e l'ottimizzazione del consumo di memoria nelle applicazioni. I nomi vengono assegnati tramite prctl con il flag PR_SET_VMA_ANON_NAME e vengono visualizzati in /proc/pid/maps e /proc/pid/smaps nella forma "[anon: ]".
    • L'utilità di pianificazione fornisce il monitoraggio e la visualizzazione in /proc/PID/sched del tempo trascorso dai processi nello stato di inattività forzata, utilizzato, ad esempio, per ridurre il carico quando il processore si surriscalda.
    • Aggiunto modulo gpio-sim, progettato per simulare i chip GPIO per i test.
    • Aggiunto un sottocomando "latency" al comando "perf ftrace" per generare istogrammi con informazioni sulla latenza.
    • Aggiunta una serie di utilità “RTLA” per l'analisi del lavoro in tempo reale. Include utilità come osnoise (determina l'influenza del sistema operativo sull'esecuzione di un'attività) e timerlat (modifica i ritardi associati al timer).
    • Una seconda serie di patch è stata integrata con l'implementazione del concetto di page folio, che assomigliano a pagine composte, ma hanno una semantica migliorata e un'organizzazione del lavoro più chiara. L'uso dei tomi consente di velocizzare la gestione della memoria in alcuni sottosistemi del kernel. Le patch proposte hanno completato la conversione della cache delle pagine all'uso dei tomi e hanno aggiunto il supporto iniziale per i tomi nel file system XFS.
    • Aggiunta la modalità di build "make mod2noconfig", che genera una configurazione che raccoglie tutti i sottosistemi disabilitati sotto forma di moduli del kernel.
    • Sono stati aumentati i requisiti per la versione di LLVM/Clang che può essere utilizzata per compilare il kernel. La compilazione ora richiede almeno la versione LLVM 11.
  • Virtualizzazione e sicurezza
    • Viene proposta un'implementazione aggiornata del generatore di numeri pseudo-casuali RDRAND, responsabile del funzionamento dei dispositivi /dev/random e /dev/urandom, degna di nota per il passaggio all'utilizzo della funzione hash BLAKE2s invece di SHA1 per le operazioni di miscelazione entropica. La modifica ha migliorato la sicurezza del generatore di numeri pseudo-casuali eliminando il problematico algoritmo SHA1 ed eliminando la sovrascrittura del vettore di inizializzazione RNG. Poiché l'algoritmo BLAKE2s è superiore a SHA1 in termini di prestazioni, anche il suo utilizzo ha avuto un effetto positivo sulle prestazioni.
    • Aggiunta protezione contro le vulnerabilità nei processori causate dall'esecuzione speculativa di istruzioni dopo operazioni di salto in avanti incondizionate. Il problema si verifica a causa dell'elaborazione preventiva delle istruzioni immediatamente successive all'istruzione di salto in memoria (SLS, Straight Line Speculation). L'abilitazione della protezione richiede la creazione con la versione attualmente in fase di test di GCC 12.
    • Aggiunto un meccanismo per il tracciamento del conteggio dei riferimenti (refcount, reference-count), volto a ridurre il numero di errori nel conteggio dei riferimenti che portano all'accesso alla memoria dopo che è stata liberata. Il meccanismo è attualmente limitato al sottosistema di rete, ma in futuro potrà essere adattato ad altre parti del kernel.
    • Sono stati implementati controlli estesi delle nuove voci nella tabella delle pagine della memoria del processo, consentendo di rilevare determinati tipi di danni e fermare il sistema, bloccando gli attacchi in una fase iniziale.
    • Aggiunta la possibilità di decomprimere i moduli del kernel direttamente dal kernel stesso e non da un gestore nello spazio utente, che consente di utilizzare il modulo LoadPin LSM per garantire che i moduli del kernel vengano caricati in memoria da un dispositivo di archiviazione verificato.
    • Assembly fornito con il flag "-Wcast-function-type", che abilita gli avvisi relativi al cast dei puntatori a funzione su un tipo incompatibile.
    • Aggiunto il driver host virtuale pvUSB per l'hypervisor Xen, che fornisce l'accesso ai dispositivi USB inoltrati ai sistemi guest (consente ai sistemi guest di accedere ai dispositivi USB fisici assegnati al sistema guest).
    • È stato aggiunto un modulo che consente di interagire tramite Wi-Fi con il sottosistema IME (Intel Management Engine), presente nella maggior parte delle moderne schede madri con processori Intel ed è implementato come un microprocessore separato che funziona indipendentemente dalla CPU.
    • Per l'architettura ARM64 è stato implementato il supporto per il tool di debug KCSAN (Kernel Concurrency Sanitizer), progettato per rilevare dinamicamente le race conditions all'interno del kernel.
    • Per i sistemi ARM a 32 bit è stata aggiunta la possibilità di utilizzare il meccanismo KFENCE per rilevare errori quando si lavora con la memoria.
    • L'hypervisor KVM aggiunge il supporto per le istruzioni AMX (Advanced Matrix Extensions) implementate nei prossimi processori per server scalabili Intel Xeon.
  • Sottosistema di rete
    • Aggiunto il supporto per l'offload delle operazioni relative alla gestione del traffico lato dispositivi di rete.
    • Aggiunta la possibilità di utilizzare MCTP (Management Component Transport Protocol) su dispositivi seriali. MCTP può essere utilizzato per comunicare tra i controller di gestione e i dispositivi associati (processori host, periferiche, ecc.).
    • Lo stack TCP è stato ottimizzato, ad esempio, per migliorare le prestazioni delle chiamate recvmsg, è stato implementato il rilascio ritardato dei buffer dei socket.
    • A livello di autorità CAP_NET_RAW, è consentita l'impostazione delle modalità SO_PRIORITY e SO_MARK tramite la funzione setsockopt.
    • Per IPv4, i socket raw possono essere associati a indirizzi IP non locali utilizzando le opzioni IP_FREEBIND e IP_TRANSPARENT.
    • Aggiunto sysctl arp_missed_max per configurare il numero soglia di errori durante il controllo del monitor ARP, dopo il quale l'interfaccia di rete viene posta in uno stato disabilitato.
    • Fornita la possibilità di configurare valori sysctl min_pmtu e mtu_expires separati per gli spazi dei nomi di rete.
    • Aggiunta la possibilità di impostare e determinare la dimensione dei buffer per i pacchetti in entrata e in uscita all'API ethtool.
    • Netfilter ha aggiunto il supporto per filtrare il traffico pppoe in transito in un bridge di rete.
    • Il modulo ksmbd, che implementa un file server utilizzando il protocollo SMB3, ha aggiunto il supporto per lo scambio di chiavi, abilitato la porta di rete 445 per smbdirect e aggiunto il supporto per il parametro "smb2 max credit".
  • Attrezzatura
    • Il supporto per gli schermi per la visualizzazione di informazioni riservate è stato aggiunto al sottosistema drm (Direct Rendering Manager) e al driver i915, ad esempio, alcuni laptop sono dotati di schermi con una modalità di visualizzazione riservata incorporata, che rende difficile la visione dall'esterno . Le modifiche aggiunte consentono di connettere driver specializzati per tali schermi e controllare le modalità di navigazione riservata impostando le proprietà nei normali driver KMS.
    • Il driver amdgpu include il supporto per la tecnologia di debug STB (Smart Trace Buffer) per tutte le GPU AMD che la supportano. STB semplifica l'analisi dei guasti e l'identificazione della fonte dei problemi memorizzando in uno speciale buffer le informazioni sulle funzioni eseguite prima dell'ultimo guasto.
    • Il driver i915 aggiunge il supporto per i chip Intel Raptor Lake S e abilita per impostazione predefinita il supporto per il sottosistema grafico dei chip Intel Alder Lake P. È possibile controllare la retroilluminazione dello schermo tramite l'interfaccia VESA DPCD.
    • Il supporto per l'accelerazione dello scorrimento hardware nella console è stato restituito nei driver fbcon/fbdev.
    • Continua integrazione delle modifiche per supportare i chip Apple M1. Implementata la possibilità di utilizzare il driver simpledrm su sistemi con chip Apple M1 per l'output tramite un framebuffer fornito dal firmware.
    • Aggiunto supporto per ARM SoС, dispositivi e schede Snapdragon 7c, 845 e 888 (Sony Xperia XZ2 / XZ2C / XZ3, Xperia 1 III / 5 III, Samsung J5, Microsoft Surface Duo 2), Mediatek MT6589 (Fairphone FP1), Mediatek MT8183 ( Acer Chromebook 314), Mediatek MT7986a/b (utilizzato nei router Wi-Fi), Broadcom BCM4908 (Netgear RAXE500), Qualcomm SDX65, Samsung Exynos7885, Renesas R-Car S4-8, TI J721s2, TI SPEAr320s, NXP i.MX8 ULP8 , Aspeed AST2500/AST2600, Engicam i.Core STM32MP1, Allwinner Tanix TX6, Facebook Bletchley BMC, Goramo MultiLink, JOZ Access Point, Y Soft IOTA Crux/Crux+, t6000/t6001 MacBook Pro 14/16.
    • Aggiunto il supporto per i processori ARM Cortex-M55 e Cortex-M33.
    • Aggiunto supporto per dispositivi basati su CPU MIPS: Linksys WRT320N v1, Netgear R6300 v1, Netgear WN2500RP v1/v2.
    • Aggiunto il supporto per il SoC StarFive JH7100 basato sull'architettura RISC-V.
    • Aggiunto il driver lenovo-yogabook-wmi per controllare la retroilluminazione della tastiera e accedere a vari sensori nel Lenovo Yoga Book.
    • Aggiunto il driver asus_wmi_sensors per accedere ai sensori utilizzati sulle schede madri Asus X370, X470, B450, B550 e X399 basate su processori AMD Ryzen.
    • Aggiunto il driver x86-android-tablets per i tablet PC basati su x86 forniti con la piattaforma Android.
    • Aggiunto supporto per i touch screen TrekStor SurfTab duo W1 e la penna elettronica per tablet Chuwi Hi10 Plus e Pro.
    • I driver per SoC Tegra 20/30 hanno aggiunto il supporto per la gestione dell'alimentazione e della tensione. Consente l'avvio su dispositivi SoC Tegra a 32 bit meno recenti come ASUS Prime TF201, Pad TF701T, Pad TF300T, Infinity TF700T, EeePad TF101 e Pad TF300TG.
    • Aggiunti driver per computer industriali Siemens.
    • Aggiunto supporto per i pannelli LCD Sony Tulip Truly NT35521, Vivax TPC-9150, Innolux G070Y2-T02, BOE BF060Y8M-AJ0, JDI R63452, Novatek NT35950, Wanchanglong W552946ABA e Team Source Display TST043015CMHX.
    • Aggiunto supporto per sistemi audio e codec AMD Renoir ACP, Asahi Kasei Microdevices AKM4375, sistemi Intel che utilizzano NAU8825/MAX98390, Mediatek MT8915, nVidia Tegra20 S/PDIF, Qualcomm ALC5682I-VS, Texas Instruments TLV320ADC3xxx. I problemi con l'audio HD Tegra194 sono stati risolti. Aggiunto il supporto HDA ​​per i codec CS35L41. Supporto migliorato per i sistemi audio per laptop Lenovo e HP, nonché per schede madri Gigabyte.

Fonte: opennet.ru

Aggiungi un commento