Rilascio del kernel Linux 5.12

Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 5.12. Tra i cambiamenti più notevoli: supporto per dispositivi a blocchi suddivisi in zone in Btrfs, la possibilità di mappare gli ID utente per il file system, ripulire le architetture ARM legacy, una modalità di scrittura "appassionata" in NFS, il meccanismo LOOKUP_CACHED per determinare i percorsi dei file dalla cache , supporto per istruzioni atomiche in BPF, un sistema di debug KFENCE per identificare errori quando si lavora con la memoria, modalità di polling NAPI in esecuzione in un thread del kernel separato nello stack di rete, hypervisor ACRN, possibilità di modificare al volo il modello di preempt nell'attività scheduler e supporto per ottimizzazioni LTO durante la creazione in Clang.

La nuova versione include 14170 (nella versione precedente 15480) correzioni degli sviluppatori 1946 (1991), la dimensione della patch è 38 MB (le modifiche hanno interessato 12102 (12090) file, sono state aggiunte 538599 (868025) righe di codice, 333377 (261456) le righe sono state cancellate). Circa il 43% di tutte le modifiche introdotte nella versione 5.12 sono correlate ai driver di dispositivo, circa il 17% delle modifiche è correlato all'aggiornamento del codice specifico delle architetture hardware, il 12% è correlato allo stack di rete, il 5% è correlato ai file system e il 4% sono legati ai sottosistemi interni del kernel.

Principali innovazioni:

  • Sottosistema disco, I/O e file system
    • È stata implementata la possibilità di mappare gli ID utente per i file system montati (è possibile mappare i file di un utente su una partizione esterna montata con un altro utente sul sistema corrente). La mappatura è supportata per i file system FAT, ext4 e XFS. La funzionalità proposta semplifica la condivisione di file tra utenti diversi e su computer diversi, inclusa la mappatura che verrà utilizzata nel meccanismo delle directory home portatili systemd-homed, consentendo agli utenti di spostare le proprie directory home su supporti esterni e utilizzarle su computer diversi, mappando ID utente a cui non corrisponde. Un'altra applicazione utile è organizzare la fornitura di accesso condiviso ai file da un host esterno, senza modificare effettivamente i dati sui proprietari dei file nel file system.
    • Le patch LOOKUP_CACHED sono state adottate nel kernel, consentendo alle operazioni di determinare il percorso di un file dallo spazio utente senza bloccarlo, solo in base ai dati disponibili nella cache. La modalità LOOKUP_CACHED viene attivata nella chiamata openat2() passando il flag RESOLVE_CACHED, in cui i dati vengono forniti solo dalla cache e se la determinazione del percorso richiede l'accesso all'unità, viene restituito l'errore EAGAIN.
    • Il file system Btrfs ha aggiunto il supporto iniziale per i dispositivi a blocchi suddivisi in zone (dispositivi su dischi rigidi magnetici o SSD NVMe, lo spazio di archiviazione in cui è diviso in zone che compongono gruppi di blocchi o settori, a cui è consentita solo l'aggiunta sequenziale di dati, aggiornando l'intero gruppo di blocchi). In modalità di sola lettura, viene implementato il supporto per blocchi con metadati e dati più piccoli di una pagina (sottopagina).
    • Nel file system F2FS è stata aggiunta la possibilità di selezionare l'algoritmo e il livello di compressione. Aggiunto il supporto per la compressione di alto livello per l'algoritmo LZ4. Implementata l'opzione di montaggio checkpoint_merge.
    • È stato implementato un nuovo comando ioctl FS_IOC_READ_VERITY_METADATA per leggere i metadati dai file protetti con fs-verity.
    • Il client NFS implementa una modalità di scrittura “eager” (writes=eager), quando abilitata, le operazioni di scrittura su un file vengono immediatamente trasferite al server, bypassando la cache della pagina. Questa modalità consente di ridurre il consumo di memoria, fornisce la ricezione istantanea di informazioni sulla fine dello spazio libero nel file system e in alcune situazioni consente di ottenere prestazioni migliorate.
    • Sono state aggiunte nuove opzioni di montaggio a CIFS (SMB): acregmax per controllare la memorizzazione nella cache dei file e acdirmax per controllare la memorizzazione nella cache dei metadati della directory.
    • In XFS è stata abilitata la modalità di controllo delle quote multi-thread, l'esecuzione di fsync è stata accelerata ed è stato preparato il codice growfs per implementare la funzione di riduzione delle dimensioni del file system.
  • Servizi di memoria e di sistema
    • È stato aggiunto il sottosistema DTMP (Dynamic Thermal Power Management) che consente di regolare dinamicamente il consumo energetico dei diversi dispositivi in ​​base ai limiti di temperatura generali impostati.
    • È stata implementata la possibilità di costruire il kernel utilizzando il compilatore Clang con l'inclusione di ottimizzazioni in fase di collegamento (LTO, Link Time Optimization). Le ottimizzazioni LTO differiscono prendendo in considerazione lo stato di tutti i file coinvolti nel processo di creazione, mentre le modalità di ottimizzazione tradizionali ottimizzano ciascun file separatamente e non tengono conto delle condizioni per chiamare le funzioni definite in altri file. Con LTO, ad esempio, è possibile l'implementazione inline di funzioni di altri file, il codice non utilizzato non viene incluso nel file eseguibile, il controllo del tipo e l'ottimizzazione generale vengono eseguiti a livello del progetto nel suo complesso. Il supporto LTO è attualmente limitato alle architetture x86 e ARM64.
    • È possibile selezionare le modalità di prelazione (PREEMPT) nel task scheduler in fase di avvio (preempt=none/voluntary/full) o mentre si lavora tramite debugfs (/debug/sched_debug), se l'impostazione PREEMPT_DYNAMIC è stata specificata durante la compilazione del kernel. In precedenza, la modalità di estrusione poteva essere impostata solo a livello dei parametri di assieme. La modifica consente alle distribuzioni di spedire kernel con la modalità PREEMPT abilitata, che fornisce una latenza minima per i desktop al costo di una piccola penalità di throughput e, se necessario, ricorrere a PREEMPT_VOLUNTARY (una modalità intermedia per desktop) o PREEMPT_NONE (fornisce il massimo throughput per i server) .
    • Il supporto per le operazioni atomiche BPF_ADD, BPF_AND, BPF_OR, BPF_XOR, BPF_XCHG e BPF_CMPXCHG è stato aggiunto al sottosistema BPF.
    • Ai programmi BPF viene data la possibilità di accedere ai dati nello stack utilizzando puntatori con offset variabili. Ad esempio, se in precedenza potevi utilizzare solo un indice di elemento costante per accedere a un array nello stack, ora puoi utilizzarne uno variabile. Il controllo degli accessi solo all'interno dei confini esistenti viene effettuato dal verificatore BPF. Questa funzionalità è disponibile solo per i programmi privilegiati a causa delle preoccupazioni sullo sfruttamento delle vulnerabilità di esecuzione speculativa di codice.
    • Aggiunta la possibilità di collegare programmi BPF a tracepoint nudi non associati a eventi di traccia visibili nello spazio utente (la conservazione ABI non è garantita per tali tracepoint).
    • È stato implementato il supporto per il bus CXL 2.0 (Compute Express Link), che viene utilizzato per organizzare l'interazione ad alta velocità tra la CPU e i dispositivi di memoria (consente di utilizzare dispositivi di memoria esterni come parte della RAM o della memoria permanente, come se questa memoria erano collegati tramite un controller di memoria standard nella CPU).
    • Aggiunto driver nvmem per recuperare i dati dalle aree di memoria riservate al firmware che non sono direttamente accessibili a Linux (ad esempio, la memoria EEPROM fisicamente accessibile solo al firmware o i dati accessibili solo durante la fase di avvio iniziale).
    • È stato rimosso il supporto al sistema di profilazione “oprofile”, che non era molto utilizzato ed è stato sostituito dal più moderno meccanismo perf.
    • L'interfaccia I/O asincrona io_uring fornisce l'integrazione con i cgroup che controllano l'utilizzo della memoria.
    • L'architettura RISC-V supporta i sistemi NUMA, nonché i meccanismi kprobes e uprobes.
    • Aggiunta la possibilità di utilizzare la chiamata di sistema kcmp() indipendentemente dalla funzionalità delle istantanee dello stato del processo (checkpoint/ripristino).
    • Le macro EXPORT_UNUSED_SYMBOL() e EXPORT_SYMBOL_GPL_FUTURE(), che nella pratica non venivano utilizzate da molti anni, sono state rimosse.
  • Virtualizzazione e sicurezza
    • Aggiunto il meccanismo di protezione KFence (Kernel Electric Fence), che rileva gli errori quando si lavora con la memoria, come i sovraccarichi del buffer e l'accesso dopo aver liberato la memoria. A differenza del meccanismo di debug KASAN, il sottosistema KFence è caratterizzato da un'elevata velocità operativa e un basso sovraccarico, che consente di individuare errori di memoria che compaiono solo su sistemi funzionanti o durante operazioni a lungo termine.
    • Aggiunto supporto per l'hypervisor ACRN, scritto con un occhio alla prontezza per le attività in tempo reale e all'idoneità all'uso in sistemi mission-critical. ACRN fornisce un sovraccarico minimo, garantisce bassa latenza e reattività adeguata durante l'interazione con le apparecchiature. Supporta la virtualizzazione delle risorse CPU, I/O, sottosistema di rete, operazioni grafiche e audio. ACRN può essere utilizzato per eseguire più macchine virtuali isolate in unità di controllo elettroniche, cruscotti, sistemi informativi automobilistici, dispositivi IoT di consumo e altre tecnologie integrate. ACRN supporta due tipi di sistemi guest: VM di servizio privilegiate, utilizzate per gestire le risorse di sistema (CPU, memoria, I/O, ecc.) e VM utente personalizzate, che possono eseguire distribuzioni Linux, Android e Windows.
    • Nel sottosistema IMA (Integrity Measurement Architecture), che mantiene un database hash per verificare l'integrità dei file e dei metadati associati, diventa ora possibile verificare l'integrità dei dati del kernel stesso, ad esempio, per tenere traccia delle modifiche nelle regole SELinux .
    • All'hypervisor KVM è stata aggiunta la capacità di intercettare le hypercall Xen e di inoltrarle all'emulatore in esecuzione nello spazio utente.
    • Aggiunta la possibilità di utilizzare Linux come ambiente root per l'hypervisor Hyper-V. L'ambiente root ha accesso diretto all'hardware e viene utilizzato per eseguire i sistemi guest (analogo a Dom0 in Xen). Fino ad ora Hyper-V (Microsoft Hypervisor) supportava Linux solo in ambienti guest, ma l'hypervisor stesso era controllato da un ambiente basato su Windows.
    • Aggiunto il supporto per la crittografia in linea per le schede eMMC, che consente di utilizzare meccanismi di crittografia integrati nel controller dell'unità che crittografano e decrittografano in modo trasparente l'I/O.
    • Il supporto per gli hash RIPE-MD 128/256/320 e Tiger 128/160/192, che non sono utilizzati nel core, così come il cifrario a flusso Salsa20, che è stato sostituito dall'algoritmo ChaCha20, è stato rimosso dal sottosistema crittografico. L'algoritmo blake2 è stato aggiornato per implementare blake2s.
  • Sottosistema di rete
    • Aggiunta la possibilità di spostare il gestore di polling NAPI per i dispositivi di rete su un thread del kernel separato, consentendo di migliorare le prestazioni per alcuni tipi di carichi di lavoro. In precedenza, il polling veniva eseguito nel contesto di softirq e non era coperto dal task scheduler, il che rendeva difficile eseguire ottimizzazioni a grana fine per ottenere le massime prestazioni. L'esecuzione in un thread del kernel separato consente di osservare il gestore di polling dallo spazio utente, collegarlo ai singoli core della CPU e prenderlo in considerazione durante la pianificazione del cambio di attività. Per abilitare la nuova modalità in sysfs, viene proposto il parametro /sys/class/net//threaded.
    • Integrazione nel nucleo di MPTCP (MultiPath TCP), un'estensione del protocollo TCP per organizzare il funzionamento di una connessione TCP con la consegna di pacchetti contemporaneamente su più percorsi attraverso diverse interfacce di rete associate a diversi indirizzi IP. La nuova release aggiunge la possibilità di assegnare priorità a determinati thread, cosa che permette, ad esempio, di organizzare il lavoro dei thread di backup che si attivano solo se ci sono problemi con il thread primario.
    • IGMPv3 aggiunge il supporto per il meccanismo EHT (Explicit Host Tracking).
    • Il motore di filtraggio dei pacchetti di Netfilter offre la possibilità di possedere determinate tabelle per ottenere un controllo esclusivo (ad esempio, un processo firewall in background può assumere la proprietà di determinate tabelle, impedendo a chiunque altro di interferire con esse).
  • Attrezzatura
    • Abbiamo ripulito piattaforme ARM obsolete e non mantenute. Il codice per le piattaforme efm32, picoxcell, prima2, tango, u300, zx e c6x, nonché i relativi driver associati, è stato rimosso.
    • Il driver amdgpu offre la possibilità di overclockare (OverDrive) le schede basate sulla GPU Sienna Cichlid (Navi 22, Radeon RX 6xxx). Aggiunto il supporto per il formato pixel FP16 per DCE (motore controller display) dall'8a all'11a generazione. Per GPU Navy Flounder (Navi 21) e APU Van Gogh è stata implementata la possibilità di resettare la GPU.
    • Il driver i915 per le schede grafiche Intel implementa il parametro i915.mitigations per disabilitare i meccanismi di isolamento e protezione a favore di prestazioni migliorate. Per i chip a partire da Tiger Lake, è incluso il supporto al meccanismo VRR (Variable Rate Refresh), che consente di modificare in modo adattivo la frequenza di aggiornamento del monitor per garantire fluidità e assenza di interruzioni durante i giochi. È incluso il supporto per la tecnologia Intel Clear Color per una migliore precisione del colore. Aggiunto il supporto per DP-HDMI 2.1. È stata implementata la possibilità di controllare la retroilluminazione dei pannelli eDP. Per le GPU Gen9 con supporto LSPCON (Level Shifter e Protocol Converter), il supporto HDR è abilitato.
    • Il nuovo driver aggiunge il supporto iniziale per le GPU NVIDIA basate sull'architettura GA100 (Ampere).
    • Il driver msm aggiunge il supporto per le GPU Adreno 508, 509 e 512 utilizzate nei chip SDM (Snapdragon) 630, 636 e 660.
    • Aggiunto il supporto per le schede audio Sound BlasterX AE-5 Plus, Lexicon I-ONIX FW810s e Pioneer DJM-750. Aggiunto il supporto per il sottosistema audio Intel Alder Lake PCH-P. È stato implementato il supporto per la simulazione software della connessione e disconnessione di un connettore audio per il debug dei gestori nello spazio utente.
    • Aggiunto supporto per le console di gioco Nintendo 64 prodotte dal 1996 al 2003 (i tentativi passati di portare Linux sul Nintendo 64 non sono stati completati e sono stati classificati come Vaporware). La motivazione che ha portato alla realizzazione di un nuovo port per una piattaforma obsoleta, che non usciva da quasi vent'anni, è la volontà di stimolare lo sviluppo di emulatori e semplificare il porting dei giochi.
    • Aggiunto driver per il controller di gioco Sony PlayStation 5 DualSense.
    • Aggiunto supporto per schede, dispositivi e piattaforme ARM: PineTab, Snapdragon 888 / SM8350, Snapdragon MTP, Two Beacon EmbeddedWorks, Intel eASIC N5X, Netgear R8000P, Plymovent M2M, Beacon i.MX8M Nano, NanoPi M4B.
    • Aggiunto supporto per gli smartphone Purism Librem5 Evergreen, Xperia Z3+/Z4/Z5, ASUS Zenfone 2 Laser, BQ Aquaris X5, OnePlus6, OnePlus6T, Samsung GT-I9070.
    • Aggiunto il driver bcm-vk per le schede acceleratrici Broadcom VK (ad esempio, schede Valkyrie e Viper PCIe), che può essere utilizzato per scaricare le operazioni di elaborazione audio, video e immagini, nonché le operazioni relative alla crittografia, su un dispositivo separato.
    • Aggiunto supporto per la piattaforma Lenovo IdeaPad con la possibilità di controllare la ricarica costante e la retroilluminazione della tastiera. Viene inoltre fornito il supporto al profilo ACPI della piattaforma ThinkPad con la possibilità di controllare le modalità di consumo energetico. Aggiunto driver per il sottosistema HID Lenovo ThinkPad X1 Tablet Gen 2.
    • Aggiunto driver ov5647 con supporto per modulo fotocamera per Raspberry Pi.
    • Aggiunto il supporto per le schede RISC-V SoC FU740 e HiFive Unleashed. È stato aggiunto anche un nuovo driver per il chip Kendryte K210.

Fonte: opennet.ru

Aggiungi un commento