Dopo due mesi di sviluppo, Linus Torvalds ha presentato uscita del kernel Linux 5.14. Tra le modifiche più significative: nuove chiamate di sistema quotactl_fd() e memfd_secret(), rimozione dei driver ide e raw, nuovo controller di priorità per l'input/output per cgroup, modalità di pianificazione dei task SCHED_CORE, infrastruttura per la creazione di bootloader per programmi BPF verificati.
Nella nuova versione sono stati inclusi 15883 correttivi da 2002 sviluppatori, la dimensione della patch è di 69 MB (le modifiche hanno interessato 12580 file, sono state aggiunte 861501 righe di codice, rimosse 321654 righe). Circa il 47% di tutte le modifiche presentate in 5.14 riguarda i driver dei dispositivi, circa il 14% sono relative all'aggiornamento del codice specifico per le architetture hardware, il 13% è legato allo stack di rete, il 3% ai file system e il 3% ai sottosistemi interni del kernel.
- sottosistema disco, input/output e file system:
- per cgroup è stato implementato nuovo controller di priorità per l'input/output — rq-qos, che può gestire la priorità di elaborazione delle richieste agli dispositivi a blocchi, generate dai partecipanti a ciascun cgroup. Supporto per il nuovo controller di priorità aggiunto nel pianificatore di input/output mq-deadline;
- nel file system ext4 è stata implementata nuovo comando ioctl EXT4_IOC_CHECKPOINT, che forza il salvataggio su disco di tutte le transazioni in attesa dal log e i buffer correlati, e riscrive anche l'area utilizzata dal log nella memoria. La modifica è stata preparata nell'ambito di un'iniziativa per prevenire perdite di informazioni dai file system;
- in Btrfs sono stati apportati ottimizzazioni delle prestazioni: escludendo la registrazione eccessiva degli attributi estesi durante l'esecuzione di fsync, le prestazioni delle operazioni intensive con attributi estesi sono aumentate fino al 17%. Inoltre, durante le operazioni di troncamento che non coinvolgono gli extent, è stata disattivata l'esecuzione della sincronizzazione completa, riducendo il tempo di esecuzione dell'operazione del 12%. In sysfs è stata aggiunta un'impostazione per limitare la larghezza di banda dell'input/output durante la verifica del FS. Aggiunti ioctl chiamate per annullare le operazioni di ridimensionamento e rimozione del dispositivo;
- in XFS ridisegnata l'implementazione della cache buffer, che è stata trasferita all'allocazione delle pagine di memoria in modalità batch. Maggiore efficienza operativa della cache;
- In F2FS è stata aggiunta un'opzione per lavorare in modalità di sola lettura e implementato il caching dei blocchi compressi (compress_cache) per migliorare le prestazioni della lettura casuale. È stata implementata la supporto per la compressione dei file in memoria utilizzando l'operazione mmap(). È stata proposta una nuova opzione di montaggio nocompress per disabilitare selettivamente la compressione dei file in base a un modello;
- Nel driver exFAT è stato effettuato un lavoro per migliorare la compatibilità con i dispositivi di archiviazione di alcune fotocamere digitali;
- è stata aggiunta una chiamata di sistema quotactl_fd(), che consente la gestione delle quote non tramite un file di dispositivo speciale, ma specificando un descrittore di file associato al file system per il quale si applica la quota;
- Dal kernel sono stati rimossi i vecchi driver per dispositivi a blocchi con interfaccia IDE, sostituiti da tempo dal sottosistema libata. Il supporto per i vecchi dispositivi è mantenuto in pieno, le modifiche riguardano solo la possibilità di utilizzare vecchi driver, nei quali gli archivi erano nominati /dev/hd*, e non /dev/sd*;
- Dal kernel è stato rimosso il driver "raw", che fornisce accesso non bufferizzato ai dispositivi a blocchi attraverso l'interfaccia /dev/raw. Questa funzionalità è stata a lungo implementata nelle applicazioni tramite il flag O_DIRECT;
- memoria e servizi di sistema:
- nel pianificatore di attività è stata implementata una nuova modalità di pianificazione SCHED_CORE, che consente di gestire quali processi possono essere eseguiti insieme su un singolo core CPU. A ciascun processo può essere assegnato un identificatore cookie che definisce un'area di fiducia tra i processi (ad esempio, appartenenza a un singolo utente o contenitore). Nella gestione dell'esecuzione del codice, il pianificatore può garantire la condivisione di un core CPU solo per i processi associati a un unico proprietario, che può essere utilizzato per bloccare alcuni attacchi di tipo Spectre impedendo l'esecuzione in un unico thread SMT (Hyper Threading) di attività fidate e non fidate;
- per il meccanismo cgroup è stata implementata la supporto per l'operazione kill, che consente di terminare tutti i processi associati al gruppo (inviare SIGKILL) scrivendo "1" nel file virtuale cgroup.kill;
- sono state ampliate le possibilità legate alla gestione delle serrature divise («split lock»), che si presentano durante l'accesso a dati non allineati in memoria a causa del fatto che durante l'esecuzione di un'istruzione atomica i dati attraversano due linee della cache CPU. Queste serrature comportano una significativa caduta delle prestazioni, pertanto in precedenza era possibile forzare la chiusura dell'applicazione che aveva causato il blocco. Nella nuova versione è stato aggiunto il parametro della riga di comando del kernel «split_lock_detect=ratelimit:N», che consente di definire un limite di sistema per l'intensità delle operazioni di blocco al secondo, superato il quale qualsiasi processo che diventa fonte di una serratura divisa verrà forzatamente fermato per 20 ms invece di essere terminato;
- nel controller di banda CFS (CFS bandwidth controller), che determina quanto tempo di CPU può essere assegnato a ciascuna cgroup, è stata implementata la possibilità di definire limiti vincolati da un intervallo di validità, consentendo una migliore gestione dei carichi sensibili ai ritardi. Ad esempio, impostare il valore cpu.cfs_quota_us a 50000 e cpu.cfs_period_us a 100000 permetterà a un gruppo di processi di utilizzare 50 ms di tempo CPU ogni 100 ms;
- è stata aggiunta infrastruttura iniziale per la creazione di caricamenti di programmi BPF, che consentirà successivamente di autorizzare il caricamento solo di programmi BPF firmati con una chiave digitale affidabile;
- è stata aggiunta una nuova operazione futex FUTEX_LOCK_PI2, che utilizza un timer monotono per calcolare il timeout, tenendo conto del tempo trascorso dal sistema in stato di sospensione;
- per l'architettura RISC-V è stata implementata la compatibilità con le pagine grandi della memoria (Transparent Huge-Pages) e la possibilità di applicare il meccanismo KFENCE per rilevare errori nell'uso della memoria;
- nella chiamata di sistema madvise(), che fornisce strumenti per ottimizzare la gestione della memoria del processo, aggiunti i flag MADV_POPULATE_READ e MADV_POPULATE_WRITE per generare un «page fault» in tutte le pagine di memoria riflesse per le operazioni di lettura o scrittura, senza eseguire effettivamente la lettura o la scrittura (prefault). L'utilizzo dei flag può rivelarsi utile per ridurre i ritardi durante l'esecuzione del programma, grazie all'esecuzione preventiva del gestore «page fault» contemporaneamente per tutte le pagine non allocate, senza attendere l'accesso effettivo a esse;
- nel sistema di unit testing kunit è stata aggiunta supporto per l'esecuzione dei test in ambiente QEMU;
- aggiunti nuovi tracer: «osnoise» per monitorare i ritardi nelle applicazioni causati dalla gestione delle interruzioni, e «timerlat» per fornire dettagli sui ritardi durante i risvegli tramite segnale del timer;
- virtualizzazione e sicurezza:
- è stata aggiunta la chiamata di sistema memfd_secret(), che consente di creare una zona di memoria privata in uno spazio indirizzi isolato, visibile solo al processo proprietario, non riflessa in altri processi e non accessibile direttamente dal kernel;
- nel sistema di filtraggio delle chiamate di sistema seccomp, è stata fornita la possibilità di utilizzare un'operazione atomica per creare un descrittore di file per il compito isolato e restituirlo durante il trattamento della chiamata di sistema. L'operazione proposta risolve il problema con l'interruzione del gestore nello spazio utente al ricevimento del segnale;
- è stata aggiunta un nuovo meccanismo per gestire il vincolo delle risorse nello spazio dei nomi degli identificatori utente, che collega contatori rlimit separati agli utenti nel «user namespace». La modifica risolve il problema dell'applicazione di contatori di risorse condivisi quando un utente avvia processi in contenitori diversi;
- nel hypervisor KVM per sistemi ARM64 è stata aggiunta la possibilità di utilizzare nelle macchine virtuali l'estensione MTE (MemTag, Memory Tagging Extension), che consente di collegare tag a ogni operazione di allocazione della memoria e organizzare il controllo dell'uso corretto degli indirizzi per bloccare l'exploitation delle vulnerabilità causate dall'accesso a blocchi di memoria già liberati, overflow di buffer, accessi prima dell'inizializzazione e utilizzo al di fuori del contesto attuale;
- le funzionalità fornite dalla piattaforma ARM64 per l'autenticazione degli indirizzi (Pointer Authentication) possono ora essere configurate separatamente per il kernel e lo spazio utente. La tecnologia consente di utilizzare istruzioni ARM64 specializzate per verificare gli indirizzi di ritorno utilizzando firme digitali, che vengono memorizzate nei bit superiori non utilizzati dello stesso indirizzo;
- in User-mode Linux è stata aggiunta supporto per l'uso di driver per dispositivi PCI con un bus PCI virtuale, implementato dal driver PCI-over-virtio;
- per i sistemi x86 è stato aggiunto il supporto per un dispositivo paravirtualizzato virtio-iommu, che consente di inviare richieste IOMMU, come ATTACH, DETACH, MAP e UNMAP, sopra il trasporto virtio senza emulazione delle tabelle delle pagine di memoria;
- per le CPU Intel, a partire dalla famiglia Skylake fino a Coffee Lake, l'uso delle estensioni Intel TSX (Transactional Synchronization Extensions) è disabilitato per impostazione predefinita; esse forniscono strumenti per migliorare le prestazioni delle applicazioni multithread grazie all'eccezione dinamica di operazioni di sincronizzazione superflue. Le estensioni sono disabilitate a causa della possibilità di attacchi Zombieload, che manipolano la fuoriuscita di informazioni attraverso canali laterali, che si verifica durante il funzionamento del meccanismo di interruzione asincrona delle operazioni (TAA, TSX Asynchronous Abort);
- sottosistema di rete:
- è proseguita l'integrazione nel kernel di MPTCP (MultiPath TCP), un'estensione del protocollo TCP per organizzare il funzionamento di una connessione TCP con la consegna dei pacchetti simultaneamente su più percorsi attraverso diverse interfacce di rete, collegate a indirizzi IP differenti. Nella nuova versione è stata aggiunta è stato implementato un meccanismo per definire politiche di hash personalizzate per il traffico IPv4 e IPv6 (multipath hash policy), che consente allo spazio utente di determinare quali campi nei pacchetti, inclusi quelli incapsulati, verranno utilizzati per il calcolo dell'hash che determina la scelta del percorso per il pacchetto;
- nel trasporto virtuale virtio è stato aggiunto il supporto per i socket SOCK_SEQPACKET (trasmissione ordinata e affidabile di datagrammi);
- sono state ampliate le capacità del meccanismo dei socket SO_REUSEPORT, che consente a più socket in ascolto di connettersi a una sola porta per ricevere connessioni, distribuendo le richieste in entrata tra tutti i socket connessi tramite SO_REUSEPORT, semplificando così la creazione di applicazioni server multithread. Nella nuova versione aggiunti sono stati introdotti strumenti per trasferire il controllo a un altro socket in caso di errore nel processo di trattamento della richiesta da parte del socket scelto inizialmente (risolvendo il problema della perdita di singole connessioni durante il riavvio dei servizi);
- hardware:
- nel driver amdgpu è stata implementata supporto per le nuove serie di GPU AMD Radeon RX 6000, sviluppate con i nomi in codice «Beige Goby» (Navi 24) e «Yellow Carp», oltre a un miglioramento del supporto per le GPU Aldebaran (gfx90a) e APU Van Gogh. Aggiunta la possibilità di utilizzare più pannelli eDP simultaneamente. Per l'APU Renoir è stata implementata la supporto per l'uso di buffer crittografati nella memoria video (TMZ, Trusted Memory Zone). Aggiunto il supporto per lo smontaggio a caldo delle schede grafiche (hot-unplug). Per le GPU Radeon RX 6000 (Navi 2x) e le precedenti GPU AMD è stata attivata per impostazione predefinita la funzionalità di gestione del risparmio energetico ASPM (Active State Power Management), precedentemente abilitata solo per le GPU Navi 1x, Vega e Polaris;
- per i chip AMD è stato aggiunto il supporto per la memoria virtuale condivisa (SVM, shared virtual memory) basato sul sottosistema HMM (Heterogeneous memory management), che consente di utilizzare dispositivi con unità di gestione della memoria proprie (MMU, memory management unit) che possono accedere alla memoria principale. Inoltre, tramite HMM è possibile organizzare uno spazio di indirizzamento condiviso tra GPU e CPU, in cui la GPU può accedere alla memoria principale del processo;
- aggiunta una supporto iniziale per la tecnologia AMD Smart Shift, che cambia dinamicamente i parametri di consumo energetico di CPU e GPU nei laptop con chipset e schede grafiche AMD per aumentare le prestazioni durante i giochi, l'editing video e il rendering 3D;
- nel driver i915 per le schede grafiche Intel attivata supporto per i chip Intel Alderlake P;
- aggiunto il driver drm/hyperv per il virtual graphics adapter Hyper-V;
- è stata aggiunta driver grafico simpledrm, che utilizza per l'uscita framebuffer EFI-GOP o VESA, fornito dal firmware UEFI o BIOS. Lo scopo principale del driver è fornire la possibilità di output grafico nelle fasi iniziali di avvio, prima che sia possibile utilizzare un driver DRM completo. Il driver può anche essere utilizzato come soluzione temporanea per l'hardware per cui non sono ancora disponibili driver DRM nativi;
- è stata aggiunta supporto per il computer all-in-one Raspberry Pi 400;
- aggiunto il driver dell-dell-wmi-privacy per supportare gli interruttori hardware per la fotocamera e il microfono forniti nei laptop Dell;
- per i laptop Lenovo è stata aggiunta interfaccia WMI per modificare i parametri del BIOS tramite sysfs /sys/class/firmware-attributes/;
- ampliato supporto per i dispositivi con interfaccia USB4;
- è stata aggiunta Supporto per schede audio e codec AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 e Texas Instruments TAS2505. Migliorato il supporto audio sui laptop HP e ASUS. Aggiunti Patch per ridurre i ritardi prima dell'inizio della riproduzione audio su dispositivi con interfaccia USB.
Fonte – opennet.ru.
Fonte: linux.org.ru
