Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 5.17. Tra le novità più rilevanti: un nuovo sistema di gestione delle prestazioni per i processori AMD, la possibilità di mappare ricorsivamente gli identificatori utente nei file system, il supporto per programmi BPF compilati portabili, la transizione del generatore di numeri pseudocasuali all'algoritmo BLAKE2s, l'utilità RTLA per l'analisi in tempo reale, un nuovo backend fscache per la memorizzazione nella cache delle reti di file system e la possibilità di associare nomi ad operazioni mmap anonime.
La nuova versione include 14.203 correzioni da 1.995 sviluppatori, la dimensione della patch è di 37 MB (i cambiamenti hanno interessato 11.366 file, aggiunte 506.043 righe di codice e rimosse 250.954 righe). Circa il 44% di tutte le modifiche presentate in 5.17 riguardano i driver di dispositivo, circa il 16% è relativo all'aggiornamento del codice specifico per architetture hardware, il 15% è legato allo stack di rete, il 4% ai file system e il 4% a sottosistemi interni del kernel.
Le principali novità del kernel 5.17:
- Sottosistema disco, I/O e file system
- È stata implementata la possibilità di mappare in modo nidificato gli identificatori degli utenti nei file system montati, utilizzata per correlare i file di un determinato utente su una partizione montata di un altro con un altro utente nel sistema attuale. Questa funzionalità aggiuntiva consente di utilizzare in modo ricorsivo il mapping sui file system per i quali è già stato applicato il mapping.
- Il sottosistema fscache, utilizzato per organizzare la memorizzazione nella cache del sistema di file locali dei dati trasmessi tramite sistemi di file di rete, è stato completamente riscritto. La nuova implementazione si distingue per una significativa semplificazione del codice e per la sostituzione delle complesse operazioni di pianificazione e monitoraggio degli stati degli oggetti con meccanismi più semplici. Il supporto per il nuovo fscache è stato implementato nel file system CIFS.
- Nel sottosistema di monitoraggio degli eventi nel file system, fanotify è stato implementato un nuovo tipo di evento FAN_RENAME, che consente di catturare contemporaneamente l'operazione di rinomina di file o directory (in precedenza, per gestire le rinomine venivano utilizzati due eventi distinti FAN_MOVED_FROM e FAN_MOVED_TO).
- Nel file system Btrfs è stata ottimizzata l'operazione di registrazione e fsync per grandi directory, realizzata tramite la copia solo delle chiavi di indice e la riduzione del volume dei metadati registrati. È stato garantito il supporto per l'indicizzazione e la ricerca in base alla dimensione delle registrazioni di spazio libero, il che ha permesso di ridurre le latenze di circa il 30% e di accorciare i tempi di ricerca. È consentito interrompere le operazioni di deframmentazione. È stata inclusa la possibilità di aggiungere dispositivi durante l'interruzione del bilanciamento tra i dischi, ovvero durante il montaggio del file system con l'opzione skip_balance.
- È stata proposta una nuova sintassi per il montaggio del file system Ceph, risolvendo i problemi legati all'associazione degli indirizzi IP. Inoltre, IP addresses per la definizione del server ora è possibile utilizzare l'identificatore del cluster (FSID): mount -t ceph user@fsid.fs_name=/[subdir] mnt -o mon_addr=monip1[:port][/monip2[:port]]
- Il file system Ext4 è stato migrato a una nuova API per il montaggio, che separa le fasi di analisi delle opzioni di montaggio e configurazione del superblocco. Il supporto per le opzioni di montaggio lazytime e nolazytime è stato interrotto, poiché erano state aggiunte come modifica temporanea per semplificare la migrazione di util-linux all'uso del flag MS_LAZYTIME. È stata aggiunta la supporto per l'impostazione e la lettura delle etichette nel file system (ioctl FS_IOC_GETFSLABEL e FS_IOC_SETFSLABEL).
- NFSv4 ha aggiunto il supporto per il funzionamento in file system senza distinzione tra maiuscole e minuscole nei nomi dei file e delle directory. In NFSv4.1+ è stato aggiunto il supporto per la determinazione delle sessioni aggregate (trunking).
- Memoria e servizi di sistema
- È stato aggiunto il driver amd-pstate, che fornisce una gestione dinamica della frequenza per ottenere prestazioni ottimali. Questo driver supporta le CPU e APU AMD a partire dalla generazione Zen 2, sviluppato in collaborazione con Valve e mirato a migliorare l'efficienza nella gestione del consumo energetico. Per la variazione adattativa della frequenza viene utilizzato il meccanismo CPPC (Collaborative Processor Performance Control), che consente di modificare i parametri in modo più preciso (non limitato a tre livelli di prestazione) e di rispondere più rapidamente alle variazioni dello stato, rispetto ai precedenti driver P-state basati su ACPI (CPUFreq).
- Nel sottosistema eBPF è stato proposto il gestore bpf_loop(), che offre un modo alternativo per organizzare i cicli nei programmi eBPF, più veloce e facile da convalidare per il verificatore.
- A livello del kernel è stato implementato il meccanismo CO-RE (Compile Once — Run Everywhere), che consente di compilare il codice dei programmi eBPF una sola volta e utilizzare un caricatore universale speciale, che adatta il programma caricato all'attuale kernel e ai tipi BTF (BPF Type Format).
- È stata introdotta la possibilità di assegnare nomi alle aree di memoria anonima privata (allocata tramite malloc), semplificando così il processo di debug e ottimizzazione della memoria nelle applicazioni. I nomi vengono assegnati tramite prctl con il flag PR_SET_VMA_ANON_NAME e sono visibili in /proc/pid/maps e /proc/pid/smaps nella forma «[anon:]».
- Nel personalizzatore delle attività è stato implementato il tracciamento e la visualizzazione in /proc/PID/sched del tempo trascorso dai processi in stato di inattività forzata (forced-idle), utilizzato, ad esempio, per ridurre il carico in caso di surriscaldamento della CPU.
- È stato aggiunto il modulo gpio-sim, progettato per simulare chip GPIO per scopi di testing.
- È stata aggiunta un sotto-comando «latency» al comando «perf ftrace» per generare istogrammi con informazioni sui tempi di latenza.
- È stato aggiunto un set di utilità «RTLA» per l'analisi del funzionamento in tempo reale. Comprende utilità come osnoise (che determina l'impatto del sistema operativo sull'esecuzione del compito) e timerlat (che modifica i tempi di latenza legati al timer).
- È stata integrata la seconda serie di patch con l'implementazione del concetto di folii di memoria (page folios), che assomigliano alle pagine composte (compound pages), ma si differenziano per una semantica migliorata e una struttura di lavoro più chiara. L'uso dei folii consente di accelerare la gestione della memoria in alcune sottoreti del kernel. Nelle patch proposte, è stato completato il passaggio della cache delle pagine all'utilizzo dei folii e aggiunto un supporto iniziale per i folii nel file system XFS.
- È stata aggiunta la modalità di compilazione "make mod2noconfig", che genera una configurazione che raccoglie tutte le sottoreti disabilitate sotto forma di moduli del kernel.
- Sono stati elevati i requisiti per la versione di LLVM/Clang che può essere utilizzata per la compilazione del kernel. Ora è richiesta almeno la versione 11 di LLVM.
- Virtualizzazione e sicurezza
- È stata proposta un'implementazione aggiornata del generatore di numeri pseudocasuali RDRAND, responsabile del funzionamento dei dispositivi /dev/random e /dev/urandom, caratterizzata dalla transizione all'uso della funzione hash BLAKE2s anziché SHA1 per le operazioni di mescolamento dell'entropia. Questa modifica ha migliorato la sicurezza del generatore di numeri pseudocasuali, eliminando l'algoritmo problematico SHA1 e prevenendo la riscrittura del vettore di inizializzazione del RNG. Poiché l'algoritmo BLAKE2s supera SHA1 in termini di prestazioni, il suo utilizzo ha avuto anche un impatto positivo sulle prestazioni complessive.
- È stata aggiunta la protezione contro le vulnerabilità nei processori, causate dall'esecuzione speculativa delle istruzioni dopo operazioni di salto diretto incondizionato. Il problema si verifica a causa del trattamento anticipato delle istruzioni che si trovano in memoria immediatamente dopo il comando di salto (SLS, Straight Line Speculation). Per attivare la protezione è necessaria una compilazione utilizzando la versione GCC 12, attualmente in fase di testing.
- È stato aggiunto un meccanismo di tracciamento del conteggio dei riferimenti (refcount, reference-count) mirato a ridurre il numero di errori nel conteggio dei riferimenti, che possono portare a accessi alla memoria dopo la sua liberazione. Attualmente, il meccanismo è limitato al sottosistema di rete, ma in futuro potrebbe essere adattato anche per altre parti del kernel.
- Sono stati implementati controlli avanzati per le nuove registrazioni nella tabella delle pagine di memoria del processo, permettendo di rilevare alcuni tipi di danneggiamento e fermare il sistema bloccando gli attacchi in una fase precoce.
- È stata aggiunta la possibilità di estrarre i moduli del kernel direttamente dal kernel stesso, anziché da un gestore nello spazio utente, il che consente, utilizzando il modulo LSM LoadPin, di garantire che i moduli del kernel siano caricati in memoria da un dispositivo di archiviazione verificato.
- È stata garantita la compilazione con il flag «-Wcast-function-type», che include l'emissione di avvisi riguardanti la conversione di puntatori a funzioni in tipi incompatibili.
- È stato aggiunto un driver di hosting virtuale pvUSB per l'iperedore Xen, che consente l'accesso a dispositivi USB passati a sistemi guest (permette ai sistemi guest di interagire con i dispositivi USB fisici assegnati alla macchina virtuale).
- È stato aggiunto un modulo che consente l'interazione via Wi-Fi con il sottosistema IME (Intel Management Engine), presente nella maggior parte delle schede madri moderne con processori Intel e implementato come un microprocessore separato che funziona in modo indipendente dalla CPU.
- Per l'architettura ARM64 è stata implementata la supporto per lo strumento di debug KCSAN (Kernel Concurrency Sanitizer), progettato per rilevare dinamicamente stati di race all'interno del kernel.
- Per i sistemi ARM a 32 bit è stata aggiunta la possibilità di applicare il meccanismo KFENCE per rilevare errori nella gestione della memoria.
- Nel hypervisor KVM è stata aggiunta la supporto per le istruzioni AMX (Advanced Matrix Extensions), implementate nei futuri processori server Intel Xeon Scalable.
- Sottosistema di rete
- È stata aggiunta la supporto per il offloading delle operazioni legate alla gestione del traffico verso i dispositivi di rete.
- È stata aggiunta la possibilità di utilizzare il protocollo MCTP (Management Component Transport Protocol) su dispositivi con interfaccia seriale. MCTP può essere utilizzato per la comunicazione tra i controller di gestione e i relativi dispositivi (host processor, dispositivi periferici, ecc.).
- Ottimizzazione dello stack TCP, ad esempio, per migliorare le performance delle chiamate recvmsg implementando il rilascio ritardato dei buffer dei socket.
- A livello di autorizzazione CAP_NET_RAW, è consentita la configurazione dei modi SO_PRIORITY e SO_MARK tramite la funzione setsockopt.
- Per IPv4, è consentito il binding di socket raw a indirizzi IP non locali, utilizzando le opzioni IP_FREEBIND e IP_TRANSPARENT.
- Aggiunto sysctl arp_missed_max per configurare la soglia di errori di verifica nel monitor ARP, dopo la quale l'interfaccia di rete viene disattivata.
- È stata fornita la possibilità di configurare valori sysctl separati min_pmtu e mtu_expires per i namespace di rete.
- Nell'API ethtool è stata aggiunta la possibilità di impostare e determinare la dimensione dei buffer per i pacchetti in entrata e in uscita.
- In Netfilter è stata aggiunta la supporto per la filtrazione del traffico pppoe transitivo nel bridge di rete.
- Nel modulo ksmbd è stata implementata la gestione dei file. server, che utilizza il protocollo SMB3, è stata aggiunta la supporto per lo scambio di chiavi, attivato la porta di rete 445 per smbdirect e aggiunta la supporto per il parametro «smb2 max credit.
- Attrezzature
- Nel sottosistema drm (Direct Rendering Manager) e nel driver i915 è stata aggiunta la supporto per schermi che visualizzano informazioni riservate, ad esempio, alcuni portatili sono dotati di schermi con modalità di privacy integrate, che rendono difficile la visualizzazione per chi si trova di lato. Le modifiche apportate consentono di collegare driver specializzati per tali schermi e gestire le modalità di privacy attraverso l'impostazione delle proprietà nei normali driver KMS.
- Nel driver amdgpu è stata aggiunta la 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 delle fonti dei problemi memorizzando in un buffer speciale le informazioni sulle funzioni eseguite prima dell'ultimo guasto.
- Nel driver i915 è stata aggiunta la supporto per i chip Intel Raptor Lake S e abilitata di default la supporto per il sottosistema grafico dei chip Intel Alder Lake P. È stata fornita la possibilità di controllare la retroilluminazione dello schermo tramite l'interfaccia DPCD VESA.
- Nei driver fbcon/fbdev è stato ripristinato il supporto per l'accelerazione hardware dello scrolling nella console.
- Proseguita l'integrazione delle modifiche per supportare i chip Apple M1. Implementata la possibilità di utilizzare il driver simpledrm sui sistemi con chip Apple M1 per l'output tramite il framebuffer fornito dal firmware.
- Aggiunto il supporto per i SoC ARM, 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 il supporto per i 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 il controllo dell'illuminazione della tastiera e l'accesso a vari sensori nel Lenovo Yoga Book.
- Aggiunto il driver asus_wmi_sensors per l'accesso ai sensori utilizzati sulle schede madri Asus X370, X470, B450, B550 e X399 basate su processori AMD Ryzen.
- È stato aggiunto il driver x86-android-tablets per i tablet basati su architettura x86, forniti con la piattaforma Android.
- Aggiunta la supporto per i touchscreen TrekStor SurfTab duo W1 e la penna elettronica per i tablet Chuwi Hi10 Plus e Pro.
- Nei driver per SoC Tegra 20/30 è stata aggiunta la supporto per la gestione dell'energia e della tensione. È stata assicurata la possibilità di avvio su vecchi dispositivi a 32 bit basati su SoC Tegra, come ASUS Prime TF201, Pad TF701T, Pad TF300T, Infinity TF700T, EeePad TF101 e Pad TF300TG.
- Aggiunti driver per computer industriali Siemens.
- Aggiunta la 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.
- Aggiunta la supporto per i 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. Risolti problemi con Tegra194 HD-audio. Aggiunta la supporto HDA per i codec CS35L41. Migliorato il supporto per i sistemi audio per notebook Lenovo e HP, così come per le schede madri Gigabyte.
Fonte: opennet.ru
